今天给大家带来一些有基础的东西。web开发确实挺有技术含量。所以给大家分享一下,大家多学点东西,多收藏就是对小编最大帮助。开车了系好安全带。在开车之前呢,要给大家分享一下我的开车群。python开车群:643692991,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的python资料和零基础入门教程,欢迎初学和进阶中的小伙伴。
通过python自动化web分析
将使用以下python模块:重要说明:在当前博客中使用python 2,python 3的代码可能略有不同。
在[1]中:
import pandas as pdimport numpy as npfrom google2pandas import *import matplotlib as mplimport matplotlib.pyplot as pltimport sysfrom geonamescache import geonamescachefrom geonamescache.mappers import countryfrom matplotlib.patches import polygonfrom matplotlib.collections import patchcollectionfrom mpl_toolkits.basemap import basemapfrom scipy import statsimport matplotlib.patches as mpatchesimport plotlyimport plotly.plotly as pyfrom ipython.display import imagefrom plotly import toolsfrom plotly.graph_objs import *
网络分析是数据科学的一个重要领域。看到人们来自哪里(地理信息),他们做什么(行为分析),他们访问的方式(设备:手机,平板电脑或工作站)以及他们访问您的网站(时间相关信息,频率等)都是不同的具有潜在商业价值的网络交易流量指标。google analytics(分析)是高度使用和记录良好的可用开源工具之一。
当前的博客讨论了如何在python中实现网页分析。我热衷于google analytics(分析)中提供的选项。google analytics(分析)拥有丰富的指标和尺寸。它具有良好的可视化和直观的图形用户界面(gui)。然而,在某些情况下,自动化网页分析和添加高级统计信息和可视化是有意义的。在当前的博客中,我将演示如何使用python。
例如,我将介绍我自己的一个网站的流量分析然而,请注意,传统(非github)网站的许多实施步骤非常相似。所以请留在这里,不要绝望,如果github不是你的一杯茶。
考虑到最后
由于选项相当广泛,最好从头开始。换句话说,我们使用webtraffic分析的目的是什么?1。
广告系列对网路流量的影响是甚么?具体来说,在同名开发商的知名网站上发布一个链接(即我的博客“webscraping and beyond”)对访问者的数量有很大的影响吗?为了达到这个目的,很像一个实验,我在
进行了一个单独的发布链接。
访客来自哪里,这是来自不同大陆的大量国家,还是仅限于一个或几个国家?
我的访客使用什么样的设备?(移动,桌面或平板电脑)。
为了实现这些目标,接下来是从数据采集到可视化所需的分析步骤。如果在这个时候您无法为自己的网站运行google analytics(分析),但是仍然希望以python复制数据分析(从第8部分开始),我建议加载dataframes(df1,df2,df3,df3a,df3b )从我的github站点使用以下代码(相应地更改“df”-filename):
在[2]中:
url = 'https://raw.githubusercontent/rrighart/ga/master/df1.csv'df1 = pd.read_csv(url, parse_dates=true, delimiter=,, decimal=,)
3.将网站添加到您的google analytics(分析)帐户
您需要先订阅google analytics(分析)并添加您的网站2:
选择管理员
在下拉菜单属性中,选择创建新属性。你需要给你的网站的名字。该url的格式如下
不要忘记设置报告时区。如果您想研究客户访问您的网站的当天的时间,这非常重要。
确认其他步骤后,您将收到通用分析(ua)跟踪id,其格式如下:ua-xxxxxxxx-x,其中x是数字。
在[3]中:
image(fig1.png)
跟踪id和代码
如果您稍后需要查找跟踪id,可以在跟踪信息和跟踪代码中找到代码。google analytics(分析)的标题网站跟踪下,会提供需要粘贴到您网站上的脚本。必须将代码设置为防止例如半数或重复计数3。
5.检查连接
现在,您的网站中贴有跟踪代码,google analytics(分析)可以收集流量数据。检查google analytics(分析)中是否存在连接的“官方”方式是选择跟踪信息,跟踪代码和状态,按下按钮发送测试流量。这将打开您的网站。
然而,更实际的生活方式是自己访问您的网站,例如使用您的手机。在google analytics(分析)中,选择主页,实时和概览。如果你刚刚访问您感兴趣的网站,你应该看到下浏览量有“眼下1个活跃用户现场”(当然这可能是>1,如果在同一时刻有其他的访问者)。此外,您可能需要查看地理位置图,并查看您的地点是否突出显示。如果您离开您的网站,活动用户部分应该返回到零(或一个下来)。如果这样做,您可以随时开始进行网络流量分析。
在[4]中:
image(fig2.png)
出[4]:
6.查询资源管理器
那么如何开始webtraffic分析?一个选项是可视化google analytics(分析)本身的流量。另一个选项是query explorer。查询资源管理器是一种gui工具,可以很快地显示您的数据,同时结合不同的指标和维度。这对于准备数据提取所需的python代码也是非常有帮助的。按照以下步骤操
在属性下选择要检查的网页(在我的例子中为“webscraping”)。
选择视图以提取所有数据,桌面或移动。
选择ids:这是与您的属性对应的“ga:”代码。
填写开始日期。在这里我们选择“2017-07-20”(这是我在datatau开始竞选之前的一天)。
填写截止日期:'2017-08-07'。
指标:选择'ga:sessions'。
尺寸:选择'ga:date'。
请注意,会话数量与访问者数量不同。不同的是,同一访客可能会在同一网站返回多次,导致会话次数增加。暂时将所有其他栏位留空。当您点击“ 运行查询 ”按钮时,应该返回一个包含会话次数的电子表格,在您的时间窗口中的每一天。
在[5]中:
image(fig3.png)
7.在python中获取数据
使用python的一个主要优点是,如果您希望所有单个脚本都可以,您可以自动执行数据提取,自定义设置和构建自己的平台,统计数据,预测分析和可视化。关于可视化,可以在python中构建例如动态地理地图,显示访客的流量在当地和全球范围内每天从一周到一周的变化。
google2pandas 4是将数据从google analytics(分析)转移到python的一种工具,用于将数据传输到pandas dataframe。从那里你可以进一步做出例如统计和可视化。启用此功能的最重要步骤如下:
获取google analytics(分析)api 2的许可
安装google2pandas和熊猫。
在jupyter笔记本中复制以下代码。运行它并验证您是否获得了正确的dataframe。这应该提供与查询资源管理器中相同的数据,或者可以在google analytics(分析)中显示的数据。所以我们开始在7月20日收集数据,并在8月7日结束。有一些方便的选项可以选择start_date和end_date,如'7daysago'(你可以将数字改为你的喜好,例如。 “10天”)或“今天”。如果您想定期提取和分析相同的时间段,这些选项将非常有用。例如,如果你想在一个星期的早上一个星期前(“7daysago”)做一个报告,你可以主要运行同一个脚本,而不改变任何东西。
在[6]中:
df1 = []conn = googleanalyticsquery(secrets='/your-directory/ga-creds/client_secret.json', token_file_name='/your-directory/ga-creds/analytics.dat')query = {'ids' : '999999999','metrics' : 'sessions','dimensions' : 'date','start_date' : '2017-07-20','end_date' : '2017-08-07'}df1, metadata = conn.execute_query(**query)print(df1)
8.作为日期的函数绘制会议次数
回答第一个问题 - 一个广告系列对网路交通的影响是什么? - 我们将分析竞选活动对会话次数有相当大的影响。首先,为了提高结果图的可读性,我们将修改将在x轴上的日期字符串。因此,我们将删除年度部分,我们将扭转日期和月份5的顺序。
在[7]中:
df1.date = df1.date.replace({'2017':''}, regex=true)
in [8]:
df1.date = df1.date.map(lambda x: str(x)[2:]) + '-' + df1.date.map(lambda x: str(x)[:2])
in [9]:
df1.head(5)
out[9]:
date
sessions
0
20-07
4
1
21-07
147
2
22-07
125
3
23-07
77
24-07
104
检查dataframe df1,我们可以看到日期列现在具有较少的信息位。在绘制会议次数之前,让我们查看一些汇总统计信息。检查期平均为91次(最多326次)。
在[10]中:
df1 ['sessions'] .describe()
出[10]:
count 19.000000mean 91.210526std 84.652610min 4.00000025% 31.00000050% 67.00000075% 111.000000max 326.000000name: sessions, dtype: float64
所选时间窗口内的会话总数为1733。
在[11]中:
sum(df1.sessions)
出[11]:
现在我们将绘制会话数(y -axis)作为日期(x -axis)的函数。提醒指向博客的链接发布于21-07-2017。除了观察人数在出版日之后大幅增加的观察结果,7月27日还有另外的提振。对于这次第二次提升,我没有明确的解释。一个诚然的推测性解释是,博客同时在网站datatau收到了几个“喜欢”,反过来也可能吸引了其他访客。在一段时间之后,会话数量正在减少,事实上链接缓慢地从数据库中掉下来 新博客正在下降,这意味着在发布后的一段时间内,人们不太可能看到并访问它。
在[12]中:
f1 = plt.figure(figsize =(12,8))plt.plot(df1.sessions,'- ko ',lw = 2,markerfacecolor = 'white',markersize = 7,markeredgewidth = 2)plt.xticks(range(len(df1.sessions)),df1.date,size = 'small',rotation = 'vertical')plt.xlabel('date')plt.ylabel('会话次数')plt.show()
9.地理绘图
调查第二个问题 - 访客来自哪里? - 可以使用choropleth地图。在这种情况下,使用世界地图,显示使用不同颜色比例的每个国家/地区的访问者人数。为此,我们制作一个新的dataframe df2,可以对各个会话数进行排序。
在[13]中:
df2 = []conn = googleanalyticsquery(secrets='/your-directory/ga-creds/client_secret.json', token_file_name='/your-directory/ga-creds/analytics.dat')query = {\'ids' : '999999999','metrics' : 'sessions','dimensions' : 'country','sort' : '-sessions','start_date' : '2017-07-20','end_date' : '2017-08-07'}df2, metadata = conn.execute_query(**query)
前20个国家如下:
在[14]中:
df2 .head(20)
出[14]:
国家
会议
美国
589
印度
95
德国
91
英国
澳大利亚
54
五
法国
50
6
加拿大
47
7
巴西
44
8
波兰
9
韩国
40
10
西班牙
11
俄国
39
12
中国
32
13
荷兰
14
越南
29
15
意大利
28
16
乌克兰
17
匈牙利
22
18
新加坡
20
19
日本
事实证明,游客来自80个国家:
在[15]:
len(df2)
出[15]:
我们现在要使用choroplethmap。这是一个位的代码和优异的博客中有关此方法的更详细的打算可以在其他地方发现6。
在[16]:
reload(sys) sys .setdefaultencoding(“utf-8”)
在[17]中:
shapefile = 'ne_10m_admin_0_countries'num_colors = 9title = 'visitors in period from july 20'imgfile = '.png'description = '''number of sessions were obtained by google analytics. author: r. righart'''.strip()
我们要做一个名为cnt的列表,它由国家缩写组成,我们将放在df2的索引中:
在[18]:
cnt = []mapper = country(from_key='name', to_key='iso3')for i in range(0,len(df2)):a = mapper(df2.country[i])cnt.append(a)
in [19]:
df2.index = cnt
in [20]:
df2.head(5)
out[20]:
ind
申
gbr
aus
对于会话使用绝对值没有给出明确的颜色分布。大多数国家的价值观都非常相似,只有少数几个国家有较高的价值观,因此大多数国家的颜色都相同。因此,我决定将值转换为百分位数,从scipy软件包7中受益。得到的地图表明,游客不是来自当地的地理区域,而是来自世界各地的各个国家。
在[21]中:
values = df2.sessions values = stats.rankdata(values,“average”)/ len(values)
在[22]:
num_colors = 11 cm = plt.get_cmap('reds')nw = float(“{0:.2f}”. format(num_colors))scheme = [ cm(i / nw)for i in range(num_colors)]仓= np.linspace(值。分钟(),值。最大值(),num_colors)df2 [ 'bin' ] = np.digitize(values,bin) - 1
在[23]中:
mpl.style.use('classic')fig = plt.figure(figsize=(22, 12))ax = fig.add_subplot(111, axisbg='w', frame_on=false)fig.suptitle('number of sessions', fontsize=30, y=.95)m = basemap(lon_0=0, projection='robin')m.drawmapboundary(color='w')m.readshapefile(shapefile, 'units', color='#444444', linewidth=.2)for info, shape in zip(m.units_info, m.units):iso3 = info['adm0_a3'] if iso3 not in df2.index:color = '#dddddd'else:color = scheme[df2.ix[iso3]['bin']]patches = [polygon(np.array(shape), true)] pc = patchcollection(patches) pc.set_facecolor(color)ax.add_collection(pc)ax.axhspan(0, 1000 * 1800, facecolor='w', edgecolor='w', zorder=2)ax_legend = fig.add_axes([0.35, 0.14, 0.3, 0.03], zorder=3)cmap = mpl.colors.listedcolormap(scheme)cb = mpl.colorbar.colorbarbase(ax_legend, cmap=cmap, ticks=bins, boundaries=bins, orientation='horizontal')cb.ax.set_xticklabels([str(round(i, 1)) for i in bins])plt.annotate(description, xy=(-.8, -3.2), size=14, xycoords='axes fraction')plt.savefig(imgfile, bbox_inches='tight', pad_inches=.2)plt.show()
更多的细节可能在这里,如区域或城市地图。城市地图的例子可以在其他地方找到8。可以从google analytics(分析)中提取区域和城市维�...