數(shù)據(jù)來自《利用python進(jìn)行數(shù)據(jù)分析》附加數(shù)據(jù)文件伺绽,本篇使用采集的用戶匿名數(shù)據(jù)
讀取一行數(shù)據(jù)
很亂,很難看懂
利用第三方轉(zhuǎn)換為易讀模式
每一行都是一個json格式數(shù)據(jù)牧牢,里面有不少數(shù)據(jù)纸兔,目前我能看出來幾個:時區(qū),國家较雕,瀏覽器碉哑,URL啥的
從第二行開始解釋一下:
列表推導(dǎo)式是經(jīng)常使用的挚币,后半句
for line in open(path)
一行一行讀取這個文件每一行為一個元素,最后輸出為一個列表而
json.loads(line)
又對每一行的json數(shù)據(jù)進(jìn)行了處理轉(zhuǎn)換為了dict(字典)所以最終的輸出是一個列表(當(dāng)然這是毋庸置疑的列表推導(dǎo)式肯定返回列表)扣典,里面的每一個元素都是字典妆毕。
可以看到輸出的第一個元素:一個字典
報錯keyerror
這里拋出了一個錯誤,咋一看語句沒啥錯誤贮尖,但是為什么拋出這個錯誤呢笛粘,這里我直接說了:這個列表中的每一個字典并不是都有(時區(qū))tz
字段,所以有的就會找不到key啊湿硝,所以會拋出keyerror
如何解決:列表推導(dǎo)式加判斷
可以看到這次可以了薪前,下面再來解釋下這個列表推導(dǎo)式:
首先明確
records
是一個列表,for rec in records
這里的rec
是records
中的元素:字典這里就是遍歷
records
中的每一個字典原先是直接將每一個字典中的時區(qū)字段取出來組成一個新的列表
但是并不是每一個字典中都有時區(qū)字段关斜,所有加了個判斷
if 'tz' in rec
如果這個字典存在這個key'tz'
再將它取出來綜上希望能完全理解這個列表推導(dǎo)式示括,會對我們后面的學(xué)習(xí)有很大幫助
最后輸出為一個列表可以切片操作取出前十個看一下
先用笨方法進(jìn)行計數(shù):
兩種方法
兩種方法都能實現(xiàn),第二種可以記一下痢畜,生成了一個字典垛膝,但是其中的所有value存在切默認(rèn)為0
美國紐約
第二個函數(shù)生成的字典很神奇,一個沒有設(shè)置的key丁稀,依然存在吼拥,且value為0
美國紐約的記錄數(shù)為1251
前十位時區(qū)及其計數(shù)值
count_dict.items()
返回一個可以遍歷的元組數(shù)組,然后計數(shù)和時區(qū)換下位置线衫,最后輸出一個列表sort()
方法對列表進(jìn)行升序排序(默認(rèn)升序凿可,可自己設(shè)定)
當(dāng)然有簡單的方法
簡單方法
標(biāo)準(zhǔn)庫
collections.Counter
類使用
Counter
類直接對這個列表進(jìn)行了計數(shù)使用
most_common(int)
函數(shù)直接進(jìn)行排序與取值
下面要學(xué)的是今天的重頭戲,利用科學(xué)計算庫pandas來對時區(qū)進(jìn)行計數(shù)
首先了解一下DataFrame
DataFrame是pandas中最重要的數(shù)據(jù)結(jié)構(gòu)授账,它用于將數(shù)據(jù)表示為一個表格先看一個簡單的例子
DataFrame
內(nèi)容太多枯跑,最好自己嘗試一下,這里的參數(shù)緊接上文矗积,是上文中的參數(shù)
這里輸出的是摘要視圖全肮,主要用于比較大的DataFrame對象
這個時候就已經(jīng)快要完工了,直接取時區(qū)就可以了
計數(shù)完成
這種通過字段查找返回的是一個Series對象棘捣,又一個自帶的value_counts函數(shù)可以自動計數(shù)排序,返回的依然是Series對象辜腺,并且可以進(jìn)行切片操作
替換操作
fillna
這里將值為NA的替換為missing,下面執(zhí)行了一個相當(dāng)于查找賦值語句(這一行想深究什么意思建議查資料)乍恐,將值為空的賦值Unknow评疗,
繪圖
這樣就繪制出了常見時區(qū)的條形圖,這里利用的是matplotlib庫茵烈,可能你沒有看到我導(dǎo)入這個庫百匆,這是因為我啟動Ipython的時候使用了
--pylab
指令,或者你也可以用--matplotlib
指令
獲取瀏覽器數(shù)據(jù)
可以看出來索引為a的是瀏覽器相關(guān)信息呜投,下面解釋下第56行的列表推導(dǎo)式是如何拿到瀏覽器數(shù)據(jù)的
首先
frame.a.dropna()
取到了所有的瀏覽器相關(guān)數(shù)據(jù)并刪除了為空的數(shù)據(jù)加匈,之后遍歷這些數(shù)據(jù)并利用空格切割字符串拿到索引為0的也就是瀏覽器字段
排序
這里解釋一下
where
的用法存璃,where
接收三個參數(shù),第一個是條件雕拼,第二個是滿足條件后的輸出纵东,第三個是不滿足條件的輸出,也就是查找a字段并區(qū)分為兩種啥寇,一種為windows一種為not windows偎球,最后并利用時區(qū)和操作系統(tǒng)排序生成一個新的DataFrame
轉(zhuǎn)載請注明出處
python自學(xué)技術(shù)互助扣扣群:670402334