使用python進行數據分析

1.數據分析步驟

數據分析五個步驟

數據分析步驟

提出問題

提出一個好問題,是成功的一半。面對一堆數據,同樣也需要提出問題,這樣才能為後面的具體步驟找到方向和側重點。

如某遊戲公司想找一位明星為其新開發的遊戲進行代言。明星那麼多,如何才能話最少的錢,起到最大的宣傳的效果呢?問題一旦提出來,就會從明星擁有粉絲的數量,最近的活躍度,明星的代言大概價位這個方面進行重點分析。

理解數據

包括三個方面:第一,採集數據。從定義的問題開始,採集相關的數據。第二,導入數據。要分析的數據會存儲資料庫或者excel文件中,也有可能在web的api的介面中。第三,查看數據集信息。包括數據統計信息。對數據整理理解,會數據分析建立一個宏觀的認識。

數據清洗

數據清洗,也成數據預處理。因為數據在採集或存儲過程中,有些數據不符合要求,不方面的後續的處理。因此需要對數據進行處理,變成能夠被我們使用的格式。

構建模型

構建模型,也就是數學建模。根據問題難易程度,那麼建模也有差異。簡單的數據,如果一個餐館一年的消費總金額,客單價,月均收入等。還有一些複雜的,需要利用機器學習,進行數據建模。

數據可視化

數據的分析,一定會有數據分析報告。我們既要會做,也要會說。為了更好的表達自己,那麼展示的自己的成果的方式就是圖標。通過可視化的方式,把自己的成果展示給自己的領導或客戶看。

2. 要點總結

數據分析我們會用到numpy和pandas相關的庫。對其中核心的要點總結如下

numpy

  • ndarray 是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同的類型。每個數組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象)。
  • 認為np.empty會返回全0數組的想法是不安全的。如下述例子

numpy 中empty的用法

  • 跟列表最重要的一個區別就是數組切片是原始數組的視圖,意味數據不會被賦值,視圖上的任何修改都反應到源數組上。但是需要注意,切片的數組,其地址並不是和說原數組的地址一樣。
  • 花式索引。可以整數數組的方式進行索引。索引值可以整數數組列表或ndarray。使用負數,可以從尾部進行索引數組每行數組。但是返回的是一維數組,對應每個索引元組。
  • 使用np.ix_函數,也可以將兩個一維整數數組轉換為一個用於選取方形區域的索引器。花式索引跟切片不一樣,它總是將數據複製到新數組中。
  • 轉置和軸對換。 轉置是重塑的一種特殊形式,它返回的是源數據的視圖(不會進行任何複製操作)。數組不僅有transpose方法,還有一個特殊的T屬性。對於高維數組,transpose需要得到一個由軸編號組成的元組才能對這些軸進行轉置。
  • 通用函數(即ufunc)是一種對ndarray 中的數據執行元素級運算的函數。你可以將其看做簡單函數(接受一個或多個標量值,併產生一個或多個標量值)的矢量化包裝器。

許多ufunc是簡單的元素級變體,如sqrt,exp

  • 一些函數,如rint,四捨五入取最近的整數。modf,將數組的小數和整數部分分成兩個獨立數組。
  • NumPy 數組使你可以將許多種數據處理任務表述為簡潔的數組表達式。用數組表達式代替循環的做法,通常稱為矢量化。矢量化數組運算要比等價的純python方式快上一兩個數量級,尤其是各種數值計算。
  • numpy.where函數是三元表達式x if condition else y 的矢量化版本。np.where 的第二個和第三個參數不必是數組,它們都可以標量值。在數據分析工作中,where通常用於根據另一個數組而產生一個新的數組。
  • 布爾值會被強制轉換為1(True)和0(False)。因此,sum可以用來對布爾型數組中的True 值進行計數。
  • 布爾數組還有兩個方法any,all,它們對布爾型數組非常有用。any用於測試數組中是否存在一個或多個True,而all則檢查數組中所有值是否都是True
  • 跟python 內置的列表類型一樣,Numpy數組也可以通過sort 方法就地排序。頂級方法np.sort返回的是數組已排序副本,而就地排序則會修改數組本身。計算數組分位數最簡單的辦法是對其進行排序,然後選取特定位置的值。
  • Numpy 提供了一些針對一維ndarray 的基本集合運算。最常用的可能要數np.unique。它用於找出數組中的唯一值並返回已排序的結果。
  • np.in1d用於測試一個數組中的值在另個一個數組中的成員資格,返回一個布爾型數組。
  • np.save 和np.load是讀寫磁碟數組數據的兩個主要函數,默認情況下,數組是以未壓縮的原始二進位格式保存在擴展名為.npy的文件中。
  • 通過np.savez可以將多個數組保存到一個壓縮文件中,將數組以關鍵字參數的形式傳入即可。
  • dot函數,用於實現矩陣的點積。任何一個二維矩陣和一個合適的一維數組進行點積,得到是一個一維數組。x。dot(y) = np.dot(x,y)
  • 矩陣論中,行列式,本徵值,本徵向量,矩陣的逆,QR分解,奇異值分解,最小二乘解,線性方程求解,需要再複習
  • 隨機數生成。numpy.random模塊對python 內置random進行補充,可以生成多種概率分布的樣本值函數。用normal 得到一個標準正太分布。而python的random函數只能一次只能生產一個。

pandas

  • Series, DataFrame,是pandas兩種常用的數據類型;
  • Series 類似於一維數組的對象,數據類型包含numpy的數據類型,以及與之相對的數據標籤構成
  • 將Series 看成是一個定長的有序字典,因為他是索引值到數據值的一個映射。它可以用在許多原本需要字典參數的函數中。可以將數據存放在一個python的字典中,也可以直接通過這個字典來創建Series。
  • pandas 中有函數isnull,notnull 用於判斷數組中數據是否為空,可以用於檢測缺失數據。
  • Series最重要的功能在算術運算中將不同索引的數據進行自動對齊。
  • series 數組進行加法運算,兩個數組都有的數據,那麼會對裡面的數據進行加法運算。沒有的數據,會進行集合運算,但是對應的數據是NAN。
  • Series 對象本身及其索引都一個name的屬性。該屬性跟pandas其它的關鍵功能關係非常密切。
  • Series 的索引可以通過賦值來進行就地修改。
  • DataFrame是一個表格型數據結構,它含有一組有序的列,每列可以是不同的值類型。既有行索引,也有列索引,它可以被看做是Series 組成的字典。DataFrame 中面向行和面向列的操作基本上是平衡的。
  • DataFrame列用 columns,index 用於行索引
  • 對DataFrame 的數據進行修改時,必須保證列表或數字和DataFrame的長度相匹配。
  • 如果用Series進行賦值,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值。
  • DataFrame常見的數據形式是嵌套字典,就是字典中中的字典。對應的DataFrame,鍵的外層對是DataFrame的列,內層對應的是DataFrame的行索引。

DataFrame 的行列索引

  • 如果有讀取execl 文件,需要裝載 xlrd 或openpyxl 安裝包

3.遇到的問題

  • 數據清洗時,出現告錯

出現float 沒有split屬性的告警

當時出現這個告警時,一直沒有找到原因。『銷售時間』,本來的數據是string,怎麼會變成float的呢?打開數據表格,發現『銷售時間』這一列空的數據。而python中,空的數據是用NaN表示。NaN 和None 型是有差別的。差別如下

NaN型,對應的float的數據格式,所以他不具有split()這個方法。

因此需要『銷售時間』這一列數據進行清洗,把含有NaN的數據項清除出去。因此在前面執行如下命令行

salesDf=salesDf.dropna(subset=[ ],how=any)

在dropna的函數中,sunset 設定為空集。以為不指定,表示對所有範圍進行清除。但是實際執行時,如果為空,表示不執行數據集任何為空的行。因此需要重新制定,才能被正確清除。正確的代碼如下:

salesDf=salesDf.dropna(subset=[銷售時間,社保卡號],how=any)

。執行的上述,後面的告警才正式消除。

  • 數據索引的方式

DataFram 的數據進行索引時,經常使用loc的屬性。加入要索引某列,使用的代碼如下

data1.loc[:,列號索引]。而在實際應用中,如果寫成data1[列號索引],是否有問題?

實際應用中,沒有發現問題。而且通過id函數,發現這個兩個指向是一個內存單元,可以理解為這兩種索引方式是等價。

如下:

4.總結

本次主要學習《利用python進行數據分析》的知識學習。書中有對numpy,pandas,還有文件的讀寫進行初步講解。由於主要進行基礎性入門的講解,對這兩種數據格式有一個初步了解,對文件的操作,有一個大概認識。而要加深了解,還需要持續的學習和實踐。

學習一個東西真的有難度,可能剛開始有一腔熱血,但是能夠在長期的枯燥中,還能不停的進步,不停的學習,這個才是難的。但是,也正是這樣,人與人之間才能拉開距離。希望自己的通過不停的闖關,不停的進步,成為真正入門人工智慧的人。或許因為是人工智慧魅力,吸引著我往前走。


推薦閱讀:

Kaggle數據分析——Titanic
霍金已逝,這些物理學家也慢慢被淡忘了
帆軟2017百城巡展啟動在即,力掀數據化管理之風
2017年3D列印行業大數據報告,3D列印品牌數據分析
吉利帝豪GS--車主洞察研究

TAG:數據分析 | Python |