本章節(jié)以及后續(xù)章節(jié)的源碼播玖,當(dāng)然也可以從我的github下載弧械,在源碼中我自己加了一些中文注釋界赔。
????????來(lái)自Bitly的USA.gov數(shù)據(jù) ,文件中各行的格式為JSON(即JavaScript Object Notation顶掉,這是一種常用的Web數(shù)據(jù)格式)。例如挑胸,如果我們只讀取某個(gè)文件中的第一行痒筒,那么所看到的結(jié)果應(yīng)該是下面這樣:
????????Python有內(nèi)置或第三方模塊可以將JSON字符串轉(zhuǎn)換成Python字典對(duì)象。這里,我將使用json模塊及其loads函數(shù)逐行加載已經(jīng)下載好的數(shù)據(jù)文件凸克,records對(duì)象就成為一組Python字典了:
一议蟆、用純Python代碼對(duì)時(shí)區(qū)進(jìn)行計(jì)數(shù)
假設(shè)我們想要知道該數(shù)據(jù)集中最常出現(xiàn)的是哪個(gè)時(shí)區(qū)(即tz字段)
計(jì)數(shù)的辦法是在遍歷時(shí)區(qū)的過程中將計(jì)數(shù)值保存在字典中:
得到前10位的時(shí)區(qū)及其計(jì)數(shù)值:
另一種更快捷的方法:
二、用pandas對(duì)時(shí)區(qū)進(jìn)行計(jì)數(shù)
1萎战、把數(shù)據(jù)建成表
下圖是DataFrame格式的frame表:
2咐容、計(jì)算時(shí)區(qū)數(shù)量
????????frame['tz']所返回的Series對(duì)象有一個(gè)value_counts方法,計(jì)算每個(gè)時(shí)區(qū)出現(xiàn)的數(shù)量蚂维,從大到小排列:
3戳粒、填充缺失值
????????fillna函數(shù)可以替換缺失值NA,而未知值(空字符串)可以通過布爾型數(shù)組索引加以替換
4虫啥、常出現(xiàn)的10個(gè)時(shí)區(qū)進(jìn)行繪圖
5蔚约、分離出瀏覽器
????????a字段含有執(zhí)行URL短縮操作的瀏覽器、設(shè)備涂籽、應(yīng)用程序的相關(guān)信息:
6苹祟、統(tǒng)計(jì)各個(gè)瀏覽器出現(xiàn)的數(shù)量
7、按照Windows和非Windows用戶對(duì)時(shí)區(qū)統(tǒng)計(jì)信息進(jìn)行分解
(1)由于有的agent缺失评雌,所以首先將他們從數(shù)據(jù)中移除树枫,其次根據(jù)a值計(jì)算出各行是否是Windows
(2)根據(jù)時(shí)區(qū)和新得到的操作系統(tǒng)列表對(duì)數(shù)據(jù)進(jìn)行分組
(3)分組計(jì)數(shù),通過size()對(duì)分組結(jié)果進(jìn)行計(jì)數(shù)景东,并利用unstack對(duì)計(jì)數(shù)結(jié)果進(jìn)行重塑
(4)我們來(lái)選取最常出現(xiàn)的時(shí)區(qū)砂轻。為了達(dá)到這個(gè)目的,我根據(jù)agg_counts中的行數(shù)構(gòu)造了一個(gè)間接索引數(shù)組:
(5)通過take按照這個(gè)順序截取了最后10行最大值:
(6)做柱狀圖
(7)上圖不太容易看清楚較小分組中Windows用戶的相對(duì)比例斤吐,因此標(biāo)準(zhǔn)化分組百分比之和為1:
快速學(xué)習(xí):
第四節(jié) 數(shù)據(jù)加載搔涝、存儲(chǔ)
第七節(jié) 數(shù)據(jù)聚合與分組運(yùn)算
數(shù)據(jù)分析案例--1880-2010年間全美嬰兒姓名的處理
數(shù)據(jù)分析案例--MovieLens 1M數(shù)據(jù)集
數(shù)據(jù)分析案例--USA.gov數(shù)據(jù)