利用Python 進(jìn)行數(shù)據(jù)分析

2017.06.07

先是安裝了Enthought Canopy (64-bit)的軟件

閱讀了《利用Python進(jìn)行數(shù)據(jù)分析》(Wes Mckinney 唐學(xué)韜等譯)

書本相關(guān)的數(shù)據(jù)文件網(wǎng)址為? http://github.com/pydata/pydata-book

引入慣例

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

(1)引入pandas,繪制一個(gè)簡單的matplotlib

import pandas

plot(arange(10))

(2)給一個(gè)文本數(shù)據(jù)進(jìn)行操作

文件各行的格式為JavaScript objection notation

閱讀第一行的代碼如下

path='E:\python\usa.govdecommissioning-1-usa-gov.txt'

open(path).readline()

將jason字符串轉(zhuǎn)化成python中的字典對象代碼如下

import json

path='E:\python\usa.govdecommissioning-1-usa-gov.txt'

records=[json.loads(unicode(line,'ISO-8859-1')) for line in open(path)] ? ? ? #書上原本只用json loads(line)但運(yùn)行編碼出現(xiàn)錯(cuò)誤拣展。找到的新的代碼可以運(yùn)行妆艘,原因暫未知旁趟。

索引字典中對應(yīng)的解釋

records[0]['tz'] #得到字符串對象形式

print records[0]['tz']#打印形式

(3)用python代碼對時(shí)區(qū)進(jìn)行計(jì)數(shù)

用列表推導(dǎo)式取出一組時(shí)區(qū)

time_zones=[rec['tz'] for rec in records if 'tz' in rec]

time_zones[:10] #前10條tz的記錄

(3.1)用標(biāo)準(zhǔn)python庫

def get_counts(sequence):

counts={}

for x in sequence:

if x in counts:

counts[x]+=1

else:

counts[x]=1

return counts


counts=get_counts(time_zones)

counts['America/New_York']

運(yùn)行后發(fā)現(xiàn)得到的結(jié)果是1恼布,顯然不對傻工。網(wǎng)上找的原因是觸發(fā)了key erro回右,解決辦法如下


def get_counts(sequence):? ?

?counts={}?

? for x in sequence:

? if x in counts:? ? ? ? ? ?

? ? ?? print(x) ? ? ? ?

? ? ?? print(counts)? ? ? ? ? ?

? ? ?? counts[x]+=1

else:? ? ? ? ? ?

? ? ?? counts[x]=1

return counts


counts=get_counts(time_zones)

counts['America/New_York']


有點(diǎn)問題得到的結(jié)果雖然正確境钟,但是輸出的數(shù)據(jù)太多了。循環(huán)的次數(shù)偏多阻桅,需要改進(jìn)

(3.2)使用pandas

from collections import defaultdict

def get_counts2(sequence):

counts=defaultdict(int)

for x in sequence:

? ? counts[x]+=1

? return counts


print(get_counts2(time_zones))


counts=get_counts2(time_zones)

counts['America/New_York']

(3.3)使用python標(biāo)準(zhǔn)庫種找到collections.Counter類凉倚,更簡單

from collections import Counter

counts=Counter(time_zones)

print(counts)


counts['America/New_York']

(4) 得到前10位的時(shí)區(qū)及其計(jì)數(shù)值


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:]


top_counts(counts)

(5)用pandas對時(shí)區(qū)進(jìn)行計(jì)數(shù)

from pandas import DataFrame,Series

import pandas as pds;import numpy as np

frame=DataFrame(records)

frame

#得到的結(jié)果和書上不太一致

frame['tz'][:10]

得到前10條tz的解釋

對于計(jì)數(shù)可以采用

tz_counts=frame['tz'].value_counts()

tz_counts[:10]

通過布爾型數(shù)組索引用fillna函數(shù)替換缺失值(NA)

clean_tz=frame['tz'].fillna('Missing')

clean_tz[clean_tz=='']='unknown' ? ?? #沒有空格符號

tz_counts=clean_tz.value_counts()

得到新的前10位時(shí)區(qū)及計(jì)數(shù)值

利用counts對象的plot方法得到水平條形圖

tz_counts[:10].plot(kind='barh',rot=0)

a字段含有執(zhí)行URL短縮操作的瀏覽器、設(shè)備嫂沉、應(yīng)用程序的相關(guān)信息

frame['a'][1]

(6)將字符串的第一節(jié)分離出來得到另外一份用戶行為摘要

results=Series([x.split()[0] for x in frame.a.dropna()])

results[:5]

results.value_counts()[:8]

區(qū)分windows和非windows用戶

cframe=frame[frame.a.notnull()]

operating_system=np.where(cframe['a'].str.contains('Windows'),'Windows','not Windows')

operating_system[:5]

根據(jù)時(shí)區(qū)和操作系統(tǒng)列表對數(shù)據(jù)進(jìn)行分組

by_tz_os=cframe.groupby(['tz',operating_system])

用size對分組結(jié)果進(jìn)行計(jì)數(shù)稽寒,并用unstack對計(jì)數(shù)結(jié)果重塑

agg_counts=by_tz_os.size().unstack().fillna(0)

選取最常出現(xiàn)的時(shí)區(qū)根據(jù)行數(shù)構(gòu)成一個(gè)間接索引數(shù)組

index=agg_counts.sum(1).argsort()

index[:10]

截取最后10行

count_subset=agg_counts.take(index)[-10:]

用stack=True生成一張堆積條形圖

count_subset.plot(kind='barh',stacked=True)

規(guī)范化重新畫圖

normed_subset=count_subset.div(count_subset.sum(1),axis=0)

normed_subset.plot(kind='barh',stacked=True)

2017.06.08

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趟章,隨后出現(xiàn)的幾起案子杏糙,更是在濱河造成了極大的恐慌慎王,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搔啊,死亡現(xiàn)場離奇詭異柬祠,居然都是意外死亡北戏,警方通過查閱死者的電腦和手機(jī)负芋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜愈,“玉大人旧蛾,你說我怎么就攤上這事∪浼蓿” “怎么了锨天?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剃毒。 經(jīng)常有香客問我病袄,道長,這世上最難降的妖魔是什么赘阀? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任益缠,我火速辦了婚禮,結(jié)果婚禮上基公,老公的妹妹穿的比我還像新娘幅慌。我一直安慰自己,他們只是感情好轰豆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布胰伍。 她就那樣靜靜地躺著,像睡著了一般酸休。 火紅的嫁衣襯著肌膚如雪骂租。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天斑司,我揣著相機(jī)與錄音渗饮,去河邊找鬼。 笑死陡厘,一個(gè)胖子當(dāng)著我的面吹牛抽米,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糙置,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼云茸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谤饭?” 一聲冷哼從身側(cè)響起标捺,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤懊纳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亡容,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤疯,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年闺兢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茂缚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屋谭,死狀恐怖脚囊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桐磁,我是刑警寧澤悔耘,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站我擂,受9級特大地震影響衬以,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜校摩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一看峻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秧耗,春花似錦备籽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尺锚,卻和暖如春珠闰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘫辩。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工伏嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伐厌。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓承绸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挣轨。 傳聞我的和親對象是個(gè)殘疾皇子军熏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容