今天給大家帶來一些有基礎的東西。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.com/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”(這是我在www.datatau.com開始競選之前的一天)。
填寫截止日期:'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 |
4 | 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]:
國家 | 會議 | |
---|---|---|
0 | 美國 | 589 |
1 | 印度 | 95 |
2 | 德國 | 91 |
3 | 英國 | 77 |
4 | 澳大利亞 | 54 |
五 | 法國 | 50 |
6 | 加拿大 | 47 |
7 | 巴西 | 44 |
8 | 波蘭 | 44 |
9 | 韓國 | 40 |
10 | 西班牙 | 40 |
11 | 俄國 | 39 |
12 | 中國 | 32 |
13 | 荷蘭 | 32 |
14 | 越南 | 29 |
15 | 意大利 | 28 |
16 | 烏克蘭 | 28 |
17 | 匈牙利 | 22 |
18 | 新加坡 | 20 |
19 | 日本 | 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]:
國家 | 會議 | |
---|---|---|
美國 | 美國 | 589 |
IND | 印度 | 95 |
申 | 德國 | 91 |
GBR | 英國 | 77 |
AUS | 澳大利亞 | 54 |
對於會話使用絕對值沒有給出明確的顏色分佈。大多數國家的價值觀都非常相似,只有少數幾個國家有較高的價值觀,因此大多數國家的顏色都相同。因此,我決定將值轉換為百分位數,從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(分析)中提取區域和城市維度。如前所述,最好在查詢資源管理器中探索可用的“指標”和“維度”,然後再在Python中實現。
要獲得“30強”國家實際會議次數的更好印象,我們可以製作一個條形圖。
在[24]:
ndd = df2.head(30)
在[25]中:
fig = plt.figure(figsize=(10, 8), facecolor='w')fig.subplots_adjust(wspace=0.2)ax1 = plt.subplot(1,1,1)barwd = 0.6r1=range(len(ndd))ax1.barh(r1, ndd.sort_values(by='sessions', ascending=True).sessions, height=0.4, align="center", color="orange")ax1.set_yticks(r1)ax1.set_yticklabels(ndd.sort_values(by='sessions', ascending=True).country, size=9)plt.show()
第三個問題 - 我的訪客使用哪種設備? - 可以使用餅圖進行最佳的回答,因為它很好地說明了比例。
在[26]:
df3 = []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' : 'deviceCategory','sort' : '-sessions','start_date' : '2017-07-20','end_date' : '2017-08-07'}df3, metadata = conn.execute_query(**query)
In [27]:
df3
Out[27]:
deviceCategory | 會議 | |
---|---|---|
0 | 桌面 | 1182 |
1 | 移動 | 478 |
2 | 片劑 | 73 |
為此,我們將使用Plotly,但同樣可以使用Matplotlib這樣做。請注意,您需要一個所謂的api密鑰才能執行此操作,您將在Plotly網站註冊後收到。
在[28]中:
plotly .tools .set_credentials_file(username = 'rrighart',api_key = '999999999')
在[29]中:
fig = { 'data': [{'labels': df3.deviceCategory, 'values': df3.sessions, 'type': 'pie'}], 'layout': {'title': 'Number of sessions as a function of device'}}py.iplot(fig)
出[29]:
餅圖顯示絕大多數訪問者使用桌面。這是從一週變為另一週嗎?可以使用多個餅圖顯示設備使用隨時間的變化。首先,我們分別製作兩個數據集,分別是第一和第二週的數據集,df3a和df3b。代碼有點廣泛,當您有幾個時間點時,建議使用循環。
在[30]:
df3a = []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' : 'deviceCategory','sort' : '-sessions','start_date' : '2017-07-20','end_date' : '2017-07-26'}df3a, metadata = conn.execute_query(**query)df3b = []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' : 'deviceCategory','sort' : '-sessions','start_date' : '2017-07-27','end_date' : '2017-08-02'}df3b, metadata = conn.execute_query(**query)
In [31]:
df3a
Out[31]:
deviceCategory | 會議 | |
---|---|---|
0 | 桌面 | 423 |
1 | 移動 | 136 |
2 | 片劑 | 18 |
在[32]中:
df3b
出[32]:
deviceCategory | 會議 | |
---|---|---|
0 | 桌面 | 695 |
1 | 移動 | 293 |
2 | 片劑 | 48 |
現在的目標是在第一週和第二週顯示餅圖。使用domain參數來設置圖表的位置很重要。其他參數可以在官方的Plotly文檔9中找到。
在[33]中:
fig = { 'data': [{ 'labels': df3a.deviceCategory, 'values': df3a.sessions, 'type': 'pie', 'domain': {'x': [0, .48], 'y': [.21, 1]}, 'name': '1st Week'},{ 'labels': df3b.deviceCategory, 'values': df3b.sessions, 'type': 'pie', 'domain': {'x': [.49, .97], 'y': [.21, 1]}, 'name': '2nd Week'}], 'layout': {'title': 'Device use over time', 'showlegend': False}}py.iplot(fig)
出[33]:
移動會話的數量略有增加,桌面會話數減少。如果這只是噪音,或者可能會使用更多的時間點最好地評估會話的真正轉變。
如果要保存DataFrames以供日後使用:
在[34]中:
df1.to_csv('df1.csv', sep=",", index=False)df2.to_csv('df2.csv', sep=",", index=False)df3.to_csv('df3.csv', sep=",", index=False)df3a.to_csv('df3a.csv', sep=",", index=False)df3b.to_csv('df3b.csv', sep=",", index=False)
閉幕詞
Webtraffic可以進行各種有趣的分析。可以探索許多其他措施。例如,webtraffic在某些工作日和一天中的時間有所不同嗎?訪問者在網站上停留的時間是多少?網站是哪個用戶轉介的?地理分佈有變化嗎?僅舉幾例。
將Webtraffic數據引入到Python中是有好幾個原因的。Python可以自動化基礎到高級分析,完全根據您的目標定製。在分析管道編程之後,單個按鈕可以在報告中產生所需的分析和可視化。最後但並非最不重要的是,定期更新可以通過一個按鈕按鈕定期生成。