小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

統(tǒng)計師的Python日記#第5天:Pandas,露兩手#

 kieojk 2016-08-10


本文是【統(tǒng)計師的Python日記】第5天的日記


回顧一下:


第1天學(xué)習(xí)了Python的基本頁面、操作,以及幾種主要的容器類型;

第2天學(xué)習(xí)了python的函數(shù)、循環(huán)和條件、類。

第3天了解了Numpy這個工具庫。

第4天初步了解了Pandas這個庫


原文復(fù)習(xí)(點擊查看):


【第1天:誰來給我講講Python?】


【第2天:再接著介紹一下Python唄】


【第3天:Numpy你好】


【第4天:歡迎光臨Pandas】


【第四天的補(bǔ)充


今天將帶來第5天的學(xué)習(xí)日記。


目錄如下:


前言


一、描述性統(tǒng)計

1. 加總

2. 描述性統(tǒng)計

3. 相關(guān)系數(shù)


二、缺失值處理

1. 丟棄缺失值

2. 填充缺失值


三、層次化索引

1. 用層次索引選取子集

2. 自定義變量名

3. 變量名與索引互換

4. 數(shù)據(jù)透視表


四、數(shù)據(jù)導(dǎo)入導(dǎo)出

1. 數(shù)據(jù)導(dǎo)入

2. 數(shù)據(jù)導(dǎo)出




統(tǒng)計師的Python日記【第5天:Pandas,露兩手】


前言


根據(jù)我的Python學(xué)習(xí)計劃:


Numpy → Pandas → 掌握一些數(shù)據(jù)清洗、規(guī)整、合并等功能 → 掌握類似與SQL的聚合等數(shù)據(jù)管理功能 → 能夠用Python進(jìn)行統(tǒng)計建模、假設(shè)檢驗等分析技能 → 能用Python打印出100元錢 → 能用Python幫我洗衣服、做飯 → 能用Python給我生小猴子......


上一集開始學(xué)習(xí)了Pandas的數(shù)據(jù)結(jié)構(gòu)(Series和DataFrame),以及DataFrame一些基本操作:改變索引名、增加一列、刪除一列、排序。


今天我將繼續(xù)學(xué)習(xí)Pandas。


一、描述性統(tǒng)計


想拿一個簡單的數(shù)據(jù)試試手,翻到了一份我國2012-2015年季度GDP的數(shù)據(jù),如下表(單位:萬億),



想整理到DataFrame中,如何處理?


用DataFrame:


gdp=DataFrame([[11.61,13.08, 13.67, 15.05],[12.81, 14.30, 15.07, 16.62], [13.87, 15.52, 16.35, 17.87], [14.80, 16.62,17.36, 18.94]], index=['2012', '2013', '2014', '2015'], columns=['s1', 's2','s3', 's4'])




得到了一張非常清爽的DataFrame數(shù)據(jù)表。


現(xiàn)在我要對這張表進(jìn)行簡單的描述性統(tǒng)計:


1. 加總


.sum()是將數(shù)據(jù)縱向加總(每一列加總)




這就很奇怪了,2012、2013、2014、2015四個年份的第一季度加總,這是什么鬼?其實我更想看橫向加總,就是每一年四個季度加總,得到一年的總和,原來,指定axis=1即可:




特別注意的是缺失值的情況!


如果有缺失值,比如四個數(shù)值2,3,1,NaN,那么加總的結(jié)果是2+3+1+NaN=6,也就是缺失值自動排除掉了!這點特別注意,因為這可能會導(dǎo)致你的數(shù)據(jù)不必苛,比如某一年少一個季度的值,那么這一年其實就是三個季度的加總,跟其他年份四個季度怎么比?


因為剛?cè)胄械臅r候在excel上犯過這類錯誤,所以在此記錄一下。


解決辦法是指定 skipna=False,有缺失值將不可加總:


>>>df=DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])

>>>df




這是一組有缺失值的數(shù)據(jù),現(xiàn)在來加總:




還可以累積加總:




關(guān)于缺失值,在后面還要專門學(xué)習(xí)(二、缺失值)。


2. 描述性統(tǒng)計


pandas除了加總,還可以利用 .describe() 得到每列的各種描述性分析:




當(dāng)然,除了用 .describe() 還可以自己用函數(shù)來得到,比如:



一些函數(shù)記錄在此(參考書本《利用Python進(jìn)行數(shù)據(jù)分析》):


方法

描述

count()

NA值的數(shù)量

describe()

各列的匯總統(tǒng)計

min()、max()

最小、最大值

argmin()、argmax()

最小、最大值對應(yīng)的索引位置

idxmin()、idxmax()

最小、最大值對應(yīng)的索引值

quantile()

樣本分位數(shù)

sum()

加總

mean()

均值

median()

中位數(shù)

mad()

根據(jù)平均值計算的平均絕對離差

var()

方差

std()

標(biāo)準(zhǔn)差

skew()

偏度

kurt()

峰度

cumsum()

累計和

cummax()、cummin()

累計最大值和累計最小值

cumprod()

累計積

diff()

一階差分

pct_change()

百分?jǐn)?shù)變化



3. 相關(guān)系數(shù)


利用 .corr() 可以計算相關(guān)系數(shù),比如計算四個季度的相關(guān)系數(shù):




計算年份的相關(guān)系數(shù)呢?轉(zhuǎn)置一下就可以了:




然而可惜的是——沒有P值!


也可以單獨只計算兩列的系數(shù),比如計算S1與S3的相關(guān)系數(shù):





二、缺失值處理


Pandas和Numpy采用NaN來表示缺失數(shù)據(jù),




1. 丟棄缺失值


兩種方法可以丟棄缺失值,比如第四天的日記中使用的的城市人口數(shù)據(jù):




將帶有缺失的行丟棄掉:




這個邏輯是:“一行中只要有一個格缺失,這行就要丟棄?!?/p>


那如果想要一行中全部缺失才丟棄,應(yīng)該怎么辦?傳入 how=’all‘ 即可。




Chu那行被丟棄掉了。


另一種丟棄缺失值的方法是 data[data.notnull()] ,但是只能處理 數(shù)值型 數(shù)據(jù)。





2. 填充缺失值


.fillna() 方法對缺失值進(jìn)行填充,比如將缺失值全部變?yōu)?:




還可以指定填充方法:


method=

  • 'ffill' 向前填充,即將前面的內(nèi)容填充進(jìn)來;

  • 'bffill' 向后填充,即將后面的內(nèi)容填充進(jìn)來。


舉個例子:




后面baoding的pop被填充進(jìn)來了。



三、層次化索引


我們前面的索引就是Chu、Bao、Ha、Hu......,單一層次索引,如果索引為亞洲-中國-各個省-各個市,變量為人口,這就是典型的層次化索引。


>>> worldPop = pd.Series([13.74,13.41, 13.08, 1.27, 3.21, 3.09],index=[['China','China','China','Japan','US','US'],[2015,2010,2005,2015,2015,2010]])



這個例子中索引有兩層,國家和年份,來學(xué)習(xí)一些簡單的操作。


1. 用層次索引選取子集:






選取多個子集呢?





2. 自定義變量名


自定義變量名的好處很多,可以更方便的對數(shù)據(jù)進(jìn)行選擇。使用 columns= 自定義變量名:




索引的名字也可以當(dāng)變量一樣命名,分別命名country和year兩個索引名:




.swaplevel() 可以調(diào)換兩個索引contry和year的位置:





3. 將索引與變量互換


使用 .reset_index([]) 可以將索引變成列變量。




使用 .set_index([]),也可以講變量變成索引:




4. 數(shù)據(jù)透視表


大家都用過excel的數(shù)據(jù)透視表,把行標(biāo)簽和列標(biāo)簽隨意的布局,pandas也可以這么實施,使用 .unstack() 即可:





四、數(shù)據(jù)的導(dǎo)入導(dǎo)出


1. 數(shù)據(jù)導(dǎo)入


表格型數(shù)據(jù)可以直接讀取為DataFrame,比如用 read_csv 直接讀取csv文件:


有文件testSet.csv:




存在D盤下面,現(xiàn)在讀?。?/p>





發(fā)現(xiàn)了一個問題——第一行被當(dāng)做變量名了!所以要指定 header=None




變量名變成了0、1,還是變扭啊,我們來指定個變量吧:




names= 可以指定變量名。


看到var1那列,如果想用這列做索引,咋辦?好辦!




index_col= 即可指定索引。


除了read_csv,還有幾種讀取方式:


函數(shù)

說明

read_csv

讀取帶分隔符的數(shù)據(jù),默認(rèn)分隔符為逗號

read_table

讀取帶分隔符的數(shù)據(jù),默認(rèn)分隔符為制表符

read_fwf

讀取固定寬格式數(shù)據(jù)(無分隔符)

read_clipboard

讀取剪貼板中的數(shù)據(jù)


read_table可以讀取txt的文件,說到這里,想到一個問題——如果txt文件的分隔符很奇怪怎么辦?


比如——




這個testSet.txt文件用“l(fā)oves”做分隔符!


隱隱覺得有人向我表白,但是有點惡心......


在實際中,更可能是某種亂碼,解決這種特殊分隔符,用 sep= 即可。




忽略紅色背景的部分。


還有一種情況是開頭帶有注釋的:




使用 skiprows= 就可以指定要跳過的行:




從我多年統(tǒng)計師從業(yè)經(jīng)驗來看,學(xué)會了如何跳過行,也要學(xué)如何讀取某些行,使用 nrows=n 可以指定要讀取的前n行,以數(shù)據(jù)



為例:




2. 數(shù)據(jù)導(dǎo)出


導(dǎo)出csv文件使用 data.to_csv 命令:


data.to_csv(outFile, index=True, encoding='gb2312')


index=True 指定輸出索引,當(dāng)數(shù)據(jù)中有中文的時候用 encoding= 來解碼,否則會出現(xiàn)亂碼,一般 gb2312 即可,有些例外的情況用 gb18030 基本都能解決。



無私的把日記給大家分享,覺得我?guī)浺操澮幌掳?,越多人覺得我?guī)洠揖驮较牍_越多的日記給大家看。


因為我?guī)洶



1. 關(guān)于數(shù)據(jù)分析的提問求助直接在微信后臺留言。


2. 轉(zhuǎn)載、投稿、免費發(fā)布招聘、合作,請加數(shù)說君個人微信AnselT,或Email:jiayounet@163.com。

數(shù)說工作室

數(shù)據(jù)分析師之家 | 金融 生物 零售 互聯(lián)網(wǎng)

微信ID:shushuojun


長按二維碼關(guān)注數(shù)說工作室

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多