1. 程式人生 > >python 資料探勘基礎 入門

python 資料探勘基礎 入門

 
一. 基於Python的資料探勘 基本架構
 
1. matplotlib, 圖形化


2. pandas,資料探勘的關鍵, 提供各種挖掘分析的演算法


3. numpy, 提供基本的統計
   scipy, 提供各種數學公式


4. python common lib,python基本框架


二. 環境搭建
1. 安裝python


2. 安裝pip
pandas依賴的pip版本,最低是8.0.0。如果pip是8以下的版本,如7.2.1,需要升級pip.
命令是“python -m pip install -U pip”,這是windows版本。
Linux是”pip install -U pip“

通過命令“pip --version”, 可以檢視pip版本號


3. 安裝pandas
  命令“pip install pandas", 這是windows版本。


Linux平臺可用
     sudo apt-get install python-pandas


4. 安裝matplotlib
     pip install matplotlib
     
          
三. 資料型別
pypython common type
string list tuple  dict set
6鍾學列
  list, tuple, string, unicode string, buffer object, xrange

pandas type
ndarray, series    dateFrame 

ndarray, 陣列型別,新增原因:
  list, tuple是基於指標+物件設計的。即list,tuple儲存的是void*指標,指標指向具體物件的資料。
  因為是void*指標,所以二者可以儲存各種資料型別,即資料型別可以不統一。
  雖然儲存豐富,但如果資料量過大時,即處理大資料時,有弊端。
  1. 儲存空間大,浪費記憶體。因為存兩部分,指標+資料
  2. 讀取慢,通過index,找到指標;基於指標,找到資料
所以在大資料處理時,新增ndarray,數字型別,類似C++ 陣列。儲存相同,讀取、修改快捷。
別名:array, 有利於節省記憶體、提高CPU的計算時間,有豐富的處理函式 
  
  series,變長字典,
  類似一維陣列的物件;有資料和索引組成  
  新增原因:
    dict是無序的,它的key和value存在對映關係。但key和value之間是不獨立的,儲存在一起。
    如果需要對一項進行操作,會影響到另外一項。所以有了series, series的key和value是獨立的,獨立儲存。
    series的key是定長有序的。通過series.key獲取整個索引, 通過series.values獲取所有values.
    series的key,可以通過series.index.name,設定唯一的名稱。
    series整體也可以設定唯一名稱,通過series.name
  
  DataFrame:
    1. 一個表格型的資料結構
    2. 含有一組有序的列(類似於index)
    3. 可以認為是,共享一個index的Series集合
    
    data1={'name':['java', 'c', 'python'], 'year': [2,2,3]}
    frame = pd.DataFrame(data1)
    
    
 ------------------------------------------------
 四. 基本的資料分析流程:
 1. 資料的獲取
 
 2. 資料準備--規格化,建立各種索引index
 
 3. 資料的顯示、描述,用於除錯
   如df.index, df.values, df.head(n), df.tail(n) df.describe
   
 4. 資料的選擇
   index獲取, 切片獲取, 行、列獲取, 矩形區域獲取
   
   index獲取,df.row1 或者 df['row1']   
   行列,df.loc[行list, 列list], 如df.loc[0:1,['co1','col2'] ]
        通過二位索引,取二維左上角,df.iloc[0,0],也可以列表 df.iloc[0:2,0:2],取前2行。
        
 5. 簡單的統計與處理
 統計平均值、最大值等
 
 6. Grouping 分組
 df.groupby(df.row1)
 
 7. Merge合併
   append追加, 
   contact連線, 包含append功能,也可以兩個不同的二維資料結構合併
   join連線, SQL連線,基於相同欄位連線,如 sql的where, a.row1 = b.row1
  
  
 ------------------------------------------------
 五. 高階的資料處理與視覺化:   
   1. 聚類分析
   聚類是資料探勘描述性任務和預測性任務的一個重要組成部分,它以相似性為基礎,
   把相似的物件通過靜態分類,分成不同的組別和子集。
   在python中,有很多第三方庫提供了聚類演算法。
    
   聚類演算法有很多, 其中K-均值演算法,因為其簡單、快捷的特點,被廣泛使用。
   基本原理是,
   1. 查詢某資料集的中心,
   2. 使用均方差,計算距離。使得每一個數據點都收斂在一個組內;各個組是完全隔離的
   
   案例:
    >>> from pylab import *
>>> from scipy.cluster.vq import *
>>>
>>> list1=[88,64,96,85]
>>> list2=[92,99,95,94]
>>> list3=[91,87,99,95]
>>> list4 = [78,99,97,81]
>>> list5=[88,78,98,84]
>>> list6=[100,95,100,92]
>>> tempdate = (list1, list2, list3, list4, list5, list6)
>>>
>>> tempdate
([88, 64, 96, 85], [92, 99, 95, 94], [91, 87, 99, 95], [78, 99, 97, 81], [88, 78
, 98, 84], [100, 95, 100, 92])
>>> date = vstack(tempdate)
>>>
>>> date
array([[ 88,  64,  96,  85],
      [ 92,  99,  95,  94],
      [ 91,  87,  99,  95],
      [ 78,  99,  97,  81],
      [ 88,  78,  98,  84],
      [100,  95, 100,  92]])

>>> centroids,abc=kmeans(date,2) #查詢聚類中心,第二個引數是設定分N類,如5類,則為5

>>> centroids  # 基於每列查詢的中心點,可能是平均值
array([[88, 71, 97, 84],
      [90, 95, 97, 90]])
>>>
>>> result,cde=vq(date,centroids) #對資料集,基於聚類中心進行分類
>>> result
array([0, 1, 1, 1, 0, 1])
  
  2. 繪圖基礎
    python描繪庫,包含兩部分,
    繪圖api, matplotlib提供各種描繪介面。
    整合庫,pylab(包含numpy和matplotlib中的常用方法),描繪更快捷、方便。
   
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,10)

plt.plot(t, t+2)
plt.plot(t,t, 'o', t,t+2, t,t**2, 'o') #(x,y)一組,預設是折線;‘o'是散點,
 plt.bar(t,t**2) # 柱狀圖 
 plt.show()
 
 --------------------
 import pylab as pl
 t = np.arange(0,10)
plt.plot(t, t+2)
plt.show()

3. matplotlib影象屬性控制
  色彩、樣式
  名稱: 圖、橫、縱軸, 
  plt.title('philip\'s python plot')
plt.xlabel('date')
plt.ylabel('value')
  其他: pl.figure(figsize=(8,6),dpi=100)
  pl.plot(x,y, color='red', linewidth=3, lable='line1')
  pl.legend(loc='upper left')
 
  子圖
  pl.subplot(211) # 整體圖片,可以分為二維部分;
  #第一個是圖的行,第二個是列;第三個是index, 從左上開始0遍歷 當前行,再下一行。
  #如果是2位數,如11,需要‘,’
  axes(left, bottom, width, height) # 引數取值範圍是(0,1), left,是到左邊的距離,bottom是到下面的距離
 
4. pandas作圖
   Series、DataFrame支援直接描繪,封裝了呼叫matplotlib的介面,如
   series.close.plot()  
   df.close.plot() #具體引數類似matplotlib普通介面
   
   屬性控制
   類似matplotlib普通介面,修改各種圖片的型別,柱形圖、折線等




  --------common-----------------
  list, tuple, dict
 
  --------numpy-----------------
  ndarray, Series, DataFrame