Python數據分析入門


原文:http://python.jobbole.com/81133/

本文由 伯樂在線 - Den 翻譯,toolate 校稿。未經許可,禁止轉載!
英文出處:alstatr.blogspot.ca。歡迎加入翻譯組

最近,Analysis with Programming加入了Planet Python。作為該網站的首批特約博客,我這里來分享一下如何通過Python來開始數據分析。具體內容如下:

  1. 數據導入
    • 導入本地的或者web端的CSV文件;
  2. 數據變換;
  3. 數據統計描述;
  4. 假設檢驗
    • 單樣本t檢驗;
  5. 可視化;
  6. 創建自定義函數。

數據導入

這是很關鍵的一步,為了后續的分析我們首先需要導入數據。通常來說,數據是CSV格式,就算不是,至少也可以轉換成CSV格式。在Python中,我們的操作如下:

為了讀取本地CSV文件,我們需要pandas這個數據分析庫中的相應模塊。其中的read_csv函數能夠讀取本地和web數據。

數據變換

既然在工作空間有了數據,接下來就是數據變換。統計學家和科學家們通常會在這一步移除分析中的非必要數據。我們先看看數據:

對R語言程序員來說,上述操作等價於通過print(head(df))來打印數據的前6行,以及通過print(tail(df))來打印數據的后6行。當然Python中,默認打印是5行,而R則是6行。因此R的代碼head(df, n = 10),在Python中就是df.head(n = 10),打印數據尾部也是同樣道理。

在R語言中,數據列和行的名字通過colnames和rownames來分別進行提取。在Python中,我們則使用columns和index屬性來提取,如下:

數據轉置使用T方法,

其他變換,例如排序就是用sort屬性。現在我們提取特定的某列數據。Python中,可以使用iloc或者ix屬性。但是我更喜歡用ix,因為它更穩定一些。假設我們需數據第一列的前5行,我們有:

順便提一下,Python的索引是從0開始而非1。為了取出從11到20行的前3列數據,我們有:

上述命令相當於df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]

為了舍棄數據中的列,這里是列1(Apayao)和列2(Benguet),我們使用drop屬性,如下:

axis 參數告訴函數到底舍棄列還是行。如果axis等於0,那么就舍棄行。

統計描述

下一步就是通過describe屬性,對數據的統計特性進行描述:

 

假設檢驗

Python有一個很好的統計推斷包。那就是scipy里面的stats。ttest_1samp實現了單樣本t檢驗。因此,如果我們想檢驗數據Abra列的稻谷產量均值,通過零假設,這里我們假定總體稻谷產量均值為15000,我們有:

返回下述值組成的元祖:

  • t : 浮點或數組類型
    t統計量
  • prob : 浮點或數組類型
    two-tailed p-value 雙側概率值

通過上面的輸出,看到p值是0.267遠大於α等於0.05,因此沒有充分的證據說平均稻谷產量不是150000。將這個檢驗應用到所有的變量,同樣假設均值為15000,我們有:

第一個數組是t統計量,第二個數組則是相應的p值。

可視化

Python中有許多可視化模塊,最流行的當屬matpalotlib庫。稍加提及,我們也可選擇bokeh和seaborn模塊。之前的博文中,我已經說明了matplotlib庫中的盒須圖模塊功能。

現在,我們可以用pandas模塊中集成R的ggplot主題來美化圖表。要使用ggplot,我們只需要在上述代碼中多加一行,

這樣我們就得到如下圖表:

比matplotlib.pyplot主題簡潔太多。但是在本博文中,我更願意引入seaborn模塊,該模塊是一個統計數據可視化庫。因此我們有:

 

多性感的盒式圖,繼續往下看。

 

創建自定義函數

在Python中,我們使用def函數來實現一個自定義函數。例如,如果我們要定義一個兩數相加的函數,如下即可:

順便說一下,Python中的縮進是很重要的。通過縮進來定義函數作用域,就像在R語言中使用大括號{…}一樣。這有一個我們之前博文的例子:

  1. 產生10個正態分布樣本,其中u=3o.
  2. 基於95%的置信度,計算x_barx_bar2 ;
  3. 重復100次; 然后
  4. 計算出置信區間包含真實均值的百分比

Python中,程序如下:

上述代碼讀起來很簡單,但是循環的時候就很慢了。下面針對上述代碼進行了改進,這多虧了 Python專家,看我上篇博文的15條意見吧。

 

更新

那些對於本文ipython notebook版本感興趣的,請點擊這里。這篇文章由Nuttens Claude負責轉換成 ipython notebook 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM