1. 程式人生 > >Python for Data Analysis 學習心得(一)

Python for Data Analysis 學習心得(一)

一、簡介

Python for Data Analysis這本書的特點是將numpy和pandas這兩個工具介紹的很詳細,這兩個工具是使用Python做資料分析非常重要的一環,numpy主要是做矩陣的運算,pandas主要是做資料的預處理,另外本書還教了其他資料分析相關的工具,比如matplotlib用來作圖,iPython用來測試、除錯程式碼。本書著重在工具介紹,所以在閱讀前最好要對資料分析的理論有一定的瞭解。

 

二、Jupyter和Python的介紹

Jupyter是結合程式碼輸入、執行到結果顯示為一體的工具,安裝後可以直接在瀏覽器上面使用,非常方便,這邊先略過介紹。如果對Python熟悉的話也可以先跳過前面的基礎介紹,Python在資料分析方面要對列表(list)和字典(dict)這兩個元素的操作非常熟悉,如果還不太熟悉的本書有非常完整的介紹。下面就挑幾個重點指令來介紹吧。

1、decode

以前在做NLP爬蟲、NLP專案上面在Unicode上面搞了很久,一般網頁都會使用unicode來編碼,所以用requests抓取下來的通常是編碼後的字元,這個時候必須要先去檢視網頁的編碼方式(看是用GBK還是utf-8),再使用decode+編碼方式進行解碼。

2、range

自動生成一個數列,range(開始值,結束值,間距)若是隻輸入一個預設開始值為0,間距為1。range在測試練習的時候很好用,也可以限制迴圈次數,避免一次跑過多的迴圈,或是拉資料的時候可以限制顯示的數量,挺常用的一個指令。

3、sort、sorted

排序指令,可以將序列由小到大排好,也可以指定排列方式。排序我之前比較常用的是在推薦系統,可以將相似度比較高的前幾名展示出來。reversed也是排序指令,只是他是順序顛倒的(大的在前面)

4、lambda(匿名函式)

 之前看過,當時不太瞭解用法,學完後覺得很簡單,就是將函式匿名化並且寫在同一行,例如lambda x : x+2,就是將這個函式定為傳進來的數加2。

5、生成器

也是我之前比較不瞭解的東西,簡單來說就是我編了一個數據生成規則,生成器會按照要求依次產生資料,比如gen = (x*2 for x in range(1000)), 每次呼叫gen他就會依次給我0,2,4,6...

 

三、Numpy的介紹

本書的精華之一,就是將numpy講的很仔細,熟練numpy就可以更好的操控矩陣,利用矩陣代替for迴圈來做遍歷檢查可以節省大量的計算時間,是numpy最大的功效,之前看吳恩達的機器學習時也是花了很多時間才理解矩陣要怎麼去使用。下面就是一些numpy的主要操作。

1、矩陣生成

要使用numpy需要先將numpy匯入,程式碼為import numpy as np,接著就可以用np來進行操作了。data = np.random.randn(2,3)就可以生成一個2x3的隨機數字矩陣。如果要生成矩陣就用data2 = np.array([1,2,3], [4,5,6])。使用data.shap來檢視矩陣的行列數,data.dtype來檢視矩陣裡面的資料型別。

2、矩陣切片

矩陣切片可以將矩陣做切割,方式和序列的切片有點類似,首先要先了解numpy矩陣的選取方式,以上面的data2舉例

data2 = [1, 2, 3],

             [4, 5, 6]

data2[0]就是指[1, 2, 3],而data2[0][1]或是data2[0, 1]就是在指‘2’這個數。瞭解了numpy矩陣的定位方式,就要說明切片了,在python切片使用冒號(:),在numpy也是,比如data2[:1] = [1, 2, 3],而data2[:1, :2] = [1, 2],活用切片可以更好的從矩陣裡選取要分析的資料。

3、軸對換、相乘

軸對換在矩陣計算中是一個很重要的概念,由於矩陣相乘的條件是前面的列需要=後面的行, 假如兩個data2要相乘,需要把後面的先做行列轉換,也就是軸對換,使用方式就是data2.T,變換後會變成

data2.T = [1, 4],

                 [2, 5],

                 [3, 6]

再使用np.dot做矩陣相乘的計算,程式碼為np.dot(data2, data2.T)或是data2.dot(data2.T),就可得到( [1*1 + 2*2 + 3*3, 1*4 + 2*5 + 3*6], [4*1 + 5*2 + 6*3, 4*4 + 5*5 + 6*6] )這個新的矩陣。

3、條件填入(where)

假如我們希望可以將矩陣裡面的資料進行條件式的替換,例如將矩陣裡面小於0的數字用0代替,就可以用where這個函式,where(條件,填入,否則),第一格輸入填入條件,在這個案例就是arr<0,第二個是填入0,第三個就是所有arr>=0的都不變,就是arr。

4、通用函式

numpy提供了許多的通用函式,提供了快速計算的功能,就不逐個介紹,可以直接看下面的列表,或是需要的時候再去查詢。

一元通用函式表

二元通用函式表

5、資料處理

前面提到,numpy在資料分析裡面有個重要的任務,就是利用“矩陣”取代“for迴圈”,下面就來介紹如何取代和取代的成效。

假定我要對序列X = np.range(10000)做平方,下面為用for迴圈寫和numpy運算的結果

可以發現用for迴圈要處理226秒的程式,numpy只用了1.84秒,可以見用numpy來替代for迴圈可以節省多少時間,另外numpy是將矩陣儲存在連續的記憶體裡做運算,所以記憶體佔用也會減少,在處理TB級以上的資料運算可以大幅的提升效率。

 

這邊先介紹numpy,接下來的文章將繼續介紹pandas。