(12)Python初入坑之案例分析二

本節介紹第二個案例實操,根據聚數力的一份美國查塔努加市共享單車的騎行數據,進行簡單的分析。鏈接如下:

數據集 -- 美國查塔努加市共享單車騎行數據 | 聚數力平台 | 大數據應用要素託管與交易平台?

dataju.cn

文件為csv文件,首先我們使用read_csv讀取文件數據。

依舊是一個很長的路徑。

使用data.tail() 查看文件的後五行。

可以看到文件有20萬行,數據量非常多。並且後面有許多的空值,後面我們要把這些空值去掉。

然後我們看一下columns都有什麼。

分別有成員類型(註冊者或遊客),累積騎行時間,騎行日期,騎行開始時間(分data和time),出發站點及ID,結束日期時間,結束站點及ID等等。

首先,數據中有很多跨天的數據,我們不太想分析這類數據,時間難以定義。我們只想分析當天結束騎行的數據,那我們需要做一個篩選。開始日期=結束日期即可。startday=endday即可。

這樣就進行了第一步的數據篩選。

然後我們現在只想取出我們需要的列,不需要的數據不需要,那我們選取相應的列即可。我們選取成員類型,騎行累加時間,開始日期,開始時間,開始站點名,結束站點名,用雙中括弧,這樣可以取出dataframe。

然後我們要去除數據全部為空的行,使用dropna,指定how=『all』即可。

然後對於StartTime,我們可以看到都是21:36這樣的幾分幾秒的類型,我們不需要精確的分鐘,只需要到小時即可,這樣方便我們之後對某一時間段內的數據做分析,則用split分隔開,取第一個數據即可[0]。

同樣對於StartDate,我們也只想精確到月份,後面的時間都不需要,則方法是一樣的,只不過分隔符就是『/』了。這樣就可以取出月份了。

下面我們介紹一個方法,叫pivot_table。數據表透視。使用透視的方法,我們可以直接定義一個新表格,定義行索引是什麼,列索引是什麼,裡面需要放什麼數據。直接使用pivot就可以定義,非常強大。下面我們做一個示例。

以上我們定義了一個table,行索引是startday,列索引指定為menbertype,中間填充的內容是各個成員的一周中每天的騎行累加時間的平均值。指定aggfunc=np.mean 是對分組之後每一列的數據進行平均值計算,如果不設置的話,會默認求平均值。

下面,我們想看一下每一天,三種成員都分別騎行多少時間,大概在一天中的比例,那我們可以用堆積圖。plot.bar(stacked=True)。同時設置橫坐標標籤旋轉30度,不然標籤就是90度的,不方便閱讀。

可以看出,首先周六的時候,騎行時間總和非常多。其次,可以看出customer時間比其他時間都長,但是還不夠直觀。我們就想得到在100%之內,各個成員騎行時間分別佔多少。那麼可以使用以下辦法。

我們來理解這一行代碼,首先根據順序,先看括弧裡面。table.sum(axis=1),就是計算出每一行的騎行時間加總,就是每一天,三種成員的騎行加總時間。然後再用table每一個元素,axis=0的意思是,每一行的元素除以該行的加總,以行往下的順序計算。然後我們再來畫圖。

圖表的標籤擋住了,我們用legend=False去掉。同時標籤也需要定義傾斜度,定義rot=30吧。

現在我們想分析一下一天24小時之中,三種客戶累計騎行時間的情況。這個時候也可以使用pivot函數。

這個畫布設置的非常大。凌晨4點和晚上8點騎行時間非常長?(凌晨4點?這個時間有待探究。莫非是使用的時間區間有問題?例如他們的4點是我們的早上7點之類的??)

下面我們看一下,對於各個車站來說,在這個站點裡出去的車次和進來的車次,有多大的差異。直接對於起始站和終點站的元素個數加總,相減就行,數據會根據索引自動匹配相減的。然後計算完成之後進行sort_values,進行升序排列。

截取一部分數據,我們可以看到升序排列之後,前面的站點出發車次小於到達車次,所以這個站點會有很多車騎進來停車。那後面的站點就是每天很多車騎出去,需要給這些站點補充車輛。

以上我們的colunms都是選擇了一列,來作為列索引。那如果選擇了兩列呢?那自然就是層次化索引了。比如我們選擇menbertype,和startday。就是查看三種成員,每一種成員一周七天的騎行數據。如果我們想以stratstationname作為行索引,列索引選擇menbertype和startday,並且添加np.size。

意思就是查看各個站點,一周七天內,三種成員每天的騎行車次有多少。

因為反正是計算元素的個數,所以values選取starttime或者tripduration都無所謂。

margins=True的意思是,對每一行的數據求和,單獨添加ALL的一列,放在最右側。

fill_value=0的意思就是對於空值填充為0 。

這樣的層次化索引,我們還可以單獨取一列出來,形成一個dataframe。


推薦閱讀:

pandas dataFrame 繪圖函數—plot學習筆記
如何與pandas愉快地玩耍(二)
Pandas學習-8pandas plot圖表
【翻譯】《利用Python進行數據分析·第2版》第5章(中)pandas入門
Pandas學習-6concat合併

TAG:pandas包 | 數據分析 | Python入門 |