Python資料分析入門

at_1發表於2021-09-09

最近,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 。

相關文章