利用Python進行資料分析——筆記2
用純Python程式碼對時區進行計數
(注:原來使用pylab輸入程式碼,不太方便,就換成了Pycharm編輯器)
假設我們想要知道該資料集中最常出現的是哪個時區(即tz欄位),得到答案的辦法有很多。
import json
path ='G:/python/pydata-book-master/ch02/1.txt'records=[json.loads(line) for
line in open(path)]
time_zones=[rec['tz']
for rec in
records if 'tz'
in rec]
time_zones[:10]
首先,我們用列表推導式取出一組時區:
出現錯誤,這是因為不是所有記錄都有時區欄位。
這種情況,只需在列表推導式末尾加上一個if ’tz’ in rec判斷即可
只看前10個時區,我們發現有些是未知的,也就是空的。雖然可以將它們過濾掉,但現在暫時保留。接下來,為了對時區進行計數,書中提到了兩種方法:
1 只使用標準Python庫
2 使用pandas
計數的方法之一是在遍歷時區的過程中將計數值儲存在字典中:
def get_counts(sequence):
counts={}
for x in
sequence:
if x in
counts:
counts[x]+=1else:
counts[x
將程式碼寫到函式中是為了獲得更高的可重用性。要用它對時區進行處理,只需將time_zones傳入即可:
counts=get_counts(time_zones)
counts['America/New_York']
len(time_zones)
如果想要得到前10位的時區及其計數,我們需要用到一些有關字典的處理技巧:
def top_counts(count_dict,n=10):
value_key_pairs=[(count,tz) for
tz,count in count_dict.items()]
value_key_pairs.sort()
return
引用
line=top_counts(counts)
print line
得到結果:
[(33, u'America/Sao_Paulo'),
(35, u'Europe/Madrid'),
(36, u'Pacific/Honolulu'),
(37, u'Asia/Tokyo'),
(74, u'Europe/London'),
(191, u'America/Denver'),
(382, u'America/Los_Angeles'),
(400, u'America/Chicago'),
(521, u''), (1251, u'America/New_York')]
當然,也可以在Python標準庫中找到collections.Counter類,它能使這個任務簡化:
from collections
import Counter
counts = Counter(time_zones)
print counts.most_common(10)
得到結果:
[(u'America/New_York', 1251),
(u'', 521), (u'America/Chicago', 400),
(u'America/Los_Angeles', 382),
(u'America/Denver', 191),
(u'Europe/London', 74),
(u'Asia/Tokyo', 37),
(u'Pacific/Honolulu', 36),
(u'Europe/Madrid', 35),
(u'America/Sao_Paulo', 33)]