資料:
bit.ly 的 1.usa.gov資料
讀取:
### read data
import json
path = 'pydata-book-master/ch02/usagov_bitly_data2012-03-16-1331923249.txt'
records = [json.loads(line) for line in open(path)]
任務:
主要使用python代碼和pandas庫等方式來計算各時區對應的數量,最後嘗試用plot來繪制top10時區對應的資料。
方式一:自定義python函數
### own functions
# func1: count each time_zone
def get_counts(sequence):
counts = {}
for x in sequence:
if x in counts:
counts[x] += 1
else:
counts[x] = 1
return counts
# func2: count each time_zone
from collections import defaultdict
def get_counts2(sequence):
counts = defaultdict(int)
for x in sequence:
counts[x] += 1
return counts
# func3: get top-n counts
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:]
備注:
可以看出使用标準庫defaultdict來初始化字典對象時,可以不用判斷該元素‘x’是否存在,預設不存在時,會自動初始化該元素,并将對應的預設值指派為0。
#### method 1: own python functions
time_zones = [rec['tz'] for rec in records if 'tz' in rec]
counts = get_counts(time_zones)
top_counts(counts)
方式二:利用 pandas 庫中的 DataFrame
#### method 2: pandas library
from pandas import DataFrame, Series
import pandas as pd; import numpy as np
frame = DataFrame(records)
tz_counts = frame['tz'].value_counts()
備注:
其實這裡:
from pandas import DataFrame, Series
import pandas as pd; import numpy as np
可以簡化為:
from pandas import DataFrame
其他的功能暫時未使用到
處理預設值:
### deal with missing value
clean_tz = frame['tz'].fillna('Missing')
clean_tz[clean_tz == ''] = 'Unknown'
tz_counts = clean_tz.value_counts()
繪制:
### draw
tz_counts[:10].plot(kind='barh', rot=0)
效果如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIXZ05WZD9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVPzdlWzZVbhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TN4EDMyEDM2EjMwQDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
備注:
再如果需要對顯示的圖像進行調整的話,可以點選'Configure subplots',彈出的視窗中可以對繪畫區域的上下左右等進行調整。
比如圖中縱坐标的文字可能顯示不完整,則可以調整'Borders->left'的值來達到合适的效果,若放棄已調整的内容,則可以選擇'Reset'按鈕即可。
說明:
本文内容主要來自《利用Python進行資料分析》一書,
筆者以學習的方式進行整理,相關資料連結:http://github.com/pydata/pydata-book
轉載請注明。