1. 程式人生 > >利用Python進行資料分析——筆記2

利用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

]=1return counts

將程式碼寫到函式中是為了獲得更高的可重用性。要用它對時區進行處理,只需將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

value_key_pairs[-n:]
引用
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)]