xinzipanghuang.net 近15天访客分析

数据获取于内置插件

最近15天(从2020/11/5开始)的访问记录有782条,也算访问量比较大了。

先统计这些部分,有意思的后面再玩。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re

# 正常显示中文字符,macos
plt.rcParams['font.family'] = ['Arial Unicode MS']
# 正常显示中文字符,windows
plt.rcParams['font.family'] = ['SimHei']
instant_visitors=pd.read_csv('data/实时访客.csv',encoding='gbk')
instant_visitors.head(10)
id访问时间地域来源入口页面搜索词访客标识码访问时长访问页数最后停留在浏览器语言环境屏幕分辨率屏幕颜色Flash版本是否支持Cookie是否支持JAVA打开时间停留时长页面地址
01.02020/11/18 19:19贵阳百度https://www.xinzipanghuang.net/pandas-datafram…DataFrame’ object has no attribute ‘drop_dupli…1.890000e+18未知1.0https://www.xinzipanghuang.net/pandas-datafram…Microsoft EdgeNaN1536×86424-bitNaN支持支持19:19:22未知https://www.xinzipanghuang.net/pandas-datafram…
12.02020/11/18 18:53其他直接访问https://www.xinzipanghuang.net2.230000e+18未知1.0https://www.xinzipanghuang.netGoogle ChromeNaN800×60024-bitNaN支持不支持18:53:57未知https://www.xinzipanghuang.net
23.02020/11/18 17:06深圳直接访问https://www.xinzipanghuang.net8.830000e+18未知1.0https://www.xinzipanghuang.netChrome移动版NaN1054×65932-bitNaN支持不支持17:06:04未知https://www.xinzipanghuang.net
34.02020/11/18 17:03北京Googlehttps://www.xinzipanghuang.net/1415-22.300000e+182641s2.0https://www.xinzipanghuang.net/1415-2Google ChromeNaN1280×80024-bitNaN支持不支持17:03:02856shttps://www.xinzipanghuang.net/1415-2
4NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN17:17:181785shttps://www.xinzipanghuang.net/1415-2
55.02020/11/18 16:33深圳https://mp.weixinbridge.comhttps://www.xinzipanghuang.net/svd-singular-va…5.470000e+18未知1.0https://www.xinzipanghuang.net/svd-singular-va…微信浏览器NaN1054×65932-bitNaN支持不支持16:33:26未知https://www.xinzipanghuang.net/svd-singular-va…
66.02020/11/18 16:22杭州直接访问https://www.xinzipanghuang.net2.220000e+181958s13.0https://www.xinzipanghuang.net/blogGoogle ChromeNaN1920×108024-bitNaN支持不支持16:22:563shttps://www.xinzipanghuang.net
7NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN16:22:596shttps://www.xinzipanghuang.net/blog
8NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN16:23:054shttps://www.xinzipanghuang.net/blog/page/2
9NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN16:23:09285shttps://www.xinzipanghuang.net/svd-singular-va…

10 rows × 25 columns

#  获取每列为空的数据的个数
print(instant_visitors.iloc[:,0].max(),instant_visitors.shape[0])
instant_visitors.isnull().sum()
428.0 783

id            355
访问时间          355
地域            355
来源            355
入口页面          355
搜索词           355
访客标识码         355
访问时长          355
访问页数          355
最后停留在         355
上一次访问时间       355
访问类型          355
访问频次          355
操作系统          355
网络服务商         630
浏览器           363
语言环境          783
屏幕分辨率         367
屏幕颜色          371
Flash版本       775
是否支持Cookie    355
是否支持JAVA      355
打开时间            0
停留时长            0
页面地址            0
dtype: int64

文件说明

该文件记录了距20201118最近的15天的访客记录,id该列记录了访客的ID,某些行比如ID为4的下一列为空,是因为记录时,该访客访问了不止一个页面,所以会有多条记录。

从上一个函数运行结果来看,该文件355行的数据是无效的。428+355=783

所以将数据分为两种情况讨论。

instant_visitors_all=instant_visitors.fillna(method='ffill')
instant_visitors_actual=instant_visitors.dropna(subset=[instant_visitors.columns[0]])
print(instant_visitors_all.shape[0],instant_visitors_actual.shape[0])
783 428

两周的访问情况

双11那天访问量多,也不知道为什么。。

instant_visitors_all['访问日期']=instant_visitors_all['访问时间'].apply(lambda x:str(x).split(' ')[0])
temp=instant_visitors_all['访问日期'].value_counts()
temp.index=pd.DatetimeIndex(temp.index)
temp.sort_index(inplace=True)

sns.countplot(data=instant_visitors_all,x='访问日期',alpha=0.5,order=[str(i).split(' ')[0].replace('-','/') for i in temp.index])

plt.xticks(rotation=45)
(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13]),
 <a list of 14 Text major ticklabel objects>)

每天的访问情况

先排除国外的。
9点上班,11点吃饭,12点上班,18点不知道咋回事,晚上再奋斗会。

instant_visitors_all['访问时刻']=instant_visitors_all['访问时间'].apply(lambda x:int(str(x).split(' ')[-1].split(':')[0]))
temp=instant_visitors_all[instant_visitors_all['地域']!='其他']


sns.countplot(data=temp,x='访问时刻',alpha=0.5,order=sorted(temp['访问时刻'].unique()))
<matplotlib.axes._subplots.AxesSubplot at 0x1c4eae6e148>

访问时长

先排除没记录上的
大部分时间还是比较短,看完解决问题就走。

temp=instant_visitors_all[instant_visitors_all['访问时长']!='未知']
temp['访问时长']=temp['访问时长'].apply(lambda x:int(str(x)[:-1]))
res=temp.groupby('id')['访问时长'].sum()
sns.boxenplot(y=np.log2(res))
d:\program files\python\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

<matplotlib.axes._subplots.AxesSubplot at 0x1c4eaf15f88>

访客来源分析

很明显,直接访问的最多,当然是因为我自己点的不少,也是因为发送给他人都是以链接为主,所以这一部分可以代表我和我周围人的访问量。

其次是google和百度,主要是因为博客内容写的是一些教程或笔记,用于解决写代码时遇到的部分问题。

ax = sns.countplot(y="来源", data=instant_visitors_actual)

ax.set_yticklabels([re.split(r'[/:]',i.get_text())[3] if 'http' in i.get_text() else i.get_text() for i in ax.get_yticklabels()])
plt.show()
## 用df.plot也可以做
ax=instant_visitors_actual['来源'].value_counts().plot(kind='barh')
ax.set_yticklabels([re.split(r'[/:]',i.get_text())[3] if 'http' in i.get_text() else i.get_text() for i in ax.get_yticklabels()])
plt.xticks(rotation=45)
plt.show()

新老访客对比

比之前好多了,以前都是老访客(我)比访客客多。当然,现在一些老访客也不仅仅是我了。

ax = sns.countplot(x="访问类型", data=instant_visitors_actual)
plt.show()




看下入口页面是哪些

直接访问www.xinzipanghuang.net 当然最多,其次由于1415-2在google中搜索
version_info, _mysql.version_info, _mysql.__file__ NameError: name '_mysql' is not defined排名靠前,也是因为该问题遇到的人比较多,所以受访次数最多。

其他的就还好。

# 导入模块对url进行解码
from urllib.parse import unquote

plt.figure(figsize=(8,18))
ax = sns.countplot(y="入口页面", data=instant_visitors_actual)

ax.set_yticklabels([unquote(re.split(r'net/',i.get_text())[-1], 'utf-8')[:50] if 'http' in i.get_text() else i.get_text() for i in ax.get_yticklabels()])
plt.show()

访客来源地域分析

很明显,从其他访问的最多,因为不能记录国外的IP,所以只要是国外的都是其他,所以网站面向国外用户[手动🐶]。其次杭州访问的最多,不必多说,大部分我和周围的人访问的。其他的较多的都是来自北上广深,中国发达地方。这些地方互联网行业发达,也是因为网站所发内容也主要是计算机方向。

plt.figure(figsize=(8,10))
ax = sns.countplot(y="地域", data=instant_visitors_actual)

看看其他方面的对比

  1. 操作系统
    PC端会比移动端的访客要多一倍以上,也是因为大家一般很少用手机搜索办公问题。PC端主要就是win10和macos,按照macos的市场占比,也是说明了访客中用mac的比例较windows多。

移动端,最多的就是iPhone,用手机访问网站的一般都是我周围的人,所以周围同志们基本上都是iPhone。里头的Android 4.0较高是因为网页安装的google插件访问所致。

ax = sns.countplot(y="操作系统", data=instant_visitors_actual)
## 根据PC和移动进行分类
PC=['Linux','Win','Mac']
instant_visitors_actual['移动端访问']=instant_visitors_actual['操作系统'].apply(lambda x:all([not i.lower() in str(x).lower() for i in PC]))
sns.countplot(x="移动端访问", data=instant_visitors_actual,hue='操作系统',alpha=0.5)
sns.countplot(x="移动端访问", data=instant_visitors_actual,alpha=0.3)
plt.legend(loc='lower left', bbox_to_anchor=(1,0.1),ncol=1,fancybox=True,shadow=True)
d:\program files\python\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  This is separate from the ipykernel package so we can avoid doing imports until





<matplotlib.legend.Legend at 0x1c4eb628988>

看看大家使用浏览器的差别

PC里头Google Chrome 一骑绝尘,程序员为什么爱用Chrome。其次是qq浏览器和edge,这两个就还好。

移动端Chrome的使用率高一部分原因也是因为网站的google插件,其次是微信浏览器和Safari,这两个一个是我周围人访问的,一个是我访问的。

sns.countplot(x="移动端访问", data=instant_visitors_actual,hue='浏览器',alpha=0.5)
sns.countplot(x="移动端访问", data=instant_visitors_actual,alpha=0.3)
plt.legend(loc='lower left', bbox_to_anchor=(1,0.1),ncol=1,fancybox=True,shadow=True)
<matplotlib.legend.Legend at 0x1c4eb50ad88>
Categories: Python

0 Comments

Leave a Reply

Your email address will not be published.