Python數據分析與挖掘入門篇——挖掘工具與庫的介紹、數據取樣、探索、預處理等(附實例!)

初探Python數據分析

   自我介紹一下,我是一名大四應屆畢業生對數據挖掘方面很感興趣,最近開始着手系統學習,在這裏與大家分享我的學習筆記與心得,如果不足或錯誤請大家指出,感謝。

一、數據取樣

1、資料完整無缺,各類指標項齊全

2、數據準確無誤,反映的都是正常狀態下的水平

對獲取到的數據可以在從中進行抽樣操作:

​ ①隨機抽樣

​ ②等距抽樣

​ ③分層抽樣

​ ④從起始順序抽樣

​ ⑤分類抽樣

二、數據探索

​    數據抽樣多少是帶着人們對如何實現數據挖掘目標的先驗認識進行操作的。當我們拿到一個樣本數據集後,它是否能達到我們原來的設想、樣本中有沒有明顯的規律和趨勢、有沒有出現過從未設想的數據狀態、屬性之間有什麼相關性、他們可區分成怎樣一些類別…這些都是要探索的內容。

三、數據預處理

​    當採集數據維度過大的時候,如何進行降維操作、缺失值處理等都是數據預處理要解決的問題。由於採樣數據中常常包含許多含有噪聲、不完整、甚至不一致的數據,對數據挖掘所涉及的數據對象必須進行預處理。主要包括數據篩選、數據變量轉換、缺失值處理、壞數據處理、數據標準化、主成分分析、屬性選擇、數據違約等。

四、常用的數據挖掘工具

( 1 ) SAS Enterprise Miner

   Enterprise Miner (EM)是SAS推出的一個集成的數據挖掘系統,允許使用和比較不同的技術,同時還集成了複雜的數據庫管理軟件。它的運行方式是通過在一個工作空間( workspace)中按照一定的順序添加各種可以實現不同功能的節點,然後對不同節點進行相應的設置,最後運行整個工作流程(workflow), 便可以得到相應的結果。

(2 ) IBM SPSS Modeler

   IBMSPSSModeler原名Clementine,2009年被IBM公司收購後對產品的性能和功能進行了大幅度改進和提升。它封裝了最先進的統計學和數據挖掘技術來獲得預測知識,並將相應的決策方案部署到現有的業務系統和業務過程中,從而提高企業的效益。IBMSPSSModeler擁有直觀的操作界面、自動化的數據準備和成熟的預測分析模型,結合商業技術可以快速建立預測性模型。

(3) SQL Server

   Microsoft公司的SQL Server中集成了數據挖掘組件——Analysis Servers,藉助SQL Server的數據庫管理功能,可以無縫地集成在SQL Server數據庫中。在SQL Server 2008中提供了決策樹算法、聚類分析算法、Naive Bayes算法、關聯規則算法、時序算法、神經網絡算法、線性迴歸算法等9種常用的數據挖掘算法。但是,預測建模的實現是基於SQL Server 平臺的,平臺移植性相對較差。

(4) Python

   Python ( Matrix Laboratory, 矩陣實驗室)是美國Mathworks公司開發的應用軟件,具備強大的科學及工程計算能力,它不但具有以矩陣計算爲基礎的強大數學計算能力和分析功能,而且還具有豐富的可視化圖形表現功能和方便的程序設計能力。Python 並不提供一個專門的數據挖掘環境,但它提供非常多的相關算法的實現函數,是學習和開發數據挖掘算法的很好選擇。

在這裏,我選擇的主要分析工具是Python

​    Python本身的數據分析功能不強,需要安裝一些第三方擴展庫來增強它的能力。我將用到的庫有Numpy、Scipy、 Matplotib、 Pandas、 Scikit-Learn、 Keras 和Gensim等,下面將對這些庫的安裝和使用進行簡單的介紹。如果你安裝的是Anaconda發行版,那麼它已經自帶了以下庫: Numpy、 Scipy、Mat-plotlib、 Pandas 和Scikit-Learn。

擴展庫 簡介
Numpy 提供數組支持,以及相應的高效的處理函數
Scipy 提供矩陣支持,以及矩陣相關的數值計算模塊
Matplotlib 強大的數據可視化工具、做圖庫
Pandas 強大、靈活的數據分析和探索工具
StatsModels 統計建模和計量經濟學,包括描述統計、統計模型估計和推斷
Scikit-Learn 支持迴歸、分類、聚類等強大的機器學習庫
Keras 深度學習庫
Gensim 用作文本主題模型的庫,文本挖掘可能會用到

還有很多其他的庫沒有說到,我們後續再補充。

五、庫的介紹

1、Numpy

​    Python並沒有提供數組功能。雖然列表可以完成基本的數組功能,但它不是真正的數組,而且在數據量較大時,使用列表的速度就會慢得讓人難以接受。爲此,Numpy 提供了真正的數組功能,以及對數據進行快速處理的函數。Numpy還是很多更高級的擴展庫的依賴庫,後面章節介紹的Scipy. Matplotlib 、Pandas 等庫都依賴於它。值得強調的是Numpy內置函數處理數據的速度是C語言級別的,因此在編寫程序的時候,應當儘量使用它們內置的函數,避免出現效率瓶頸的現象(尤其是涉及循環的問題)。

安裝:

pip install numpy

Numpy基本操作:

# coding=utf8
import pandas as pd

s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])  # 創建一個序列s
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])  # 創建一個表
d2 = pd.DataFrame(s)

print(d.head())  # 預覽前五行數據
print(d.describe())  # 數據基本統計量

pd.read_csv('athlete_events.csv',encoding = 'utf-8')


參考鏈接:

http://www.numpy.org/
http://reverland.org/python/2012/08/22/numpy/

2、Scipy

​    如果說Numpy讓Python有了Matlab的味道,那麼Scipy就讓Python真正地成爲了半個Matlab了。Numpy 提供了多維數組功能,但它只是一般的數組, 並不是矩陣。例如,當兩個數組相乘時,只是對應元素相乘,而不是矩陣乘法。Scipy 提供了真正的矩陣,以及大量基於矩陣運算的對象與函數。Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算,顯然,這些功能都是挖掘與建模必的。

安裝:

pip install python-scipy

Scipy求解非線性方程組和數值積分:

# coding=utf8
# 求解的線性方程組爲:2x1-x2^2=1,x1^2-x2=2
from scipy.optimize import fsolve  # 導入求解方程組的函數


def f(x):
    x1 = x[0]
    x2 = x[1]
    return [2 * x1 - x2 ** 2 - 1, x1 ** 2 - x2 - 2]


result = fsolve(f, [1, 1])  # 輸入初值(1,1)
print(result)

# 數值積分
from scipy import integrate  # 導入積分函數


def g(x):  # 定義被積函數
    return (1 - x ** 2) ** 0.5


pi_2, err = integrate.quad(g, -1, 1)  # 積分結果和誤差,返回值是兩個,第一個是結果,第二個是誤差
# print(integrate.quad(g, -1, 1))
print(pi_2 * 2)


參考鏈接:

http://www.scipy.org/
http://reverland.org/python/2012/08/24/scipy/

3、Matplotlib

   不論是數據挖掘還是數學建模,都免不了數據可視化的問題。對Python來說,Matplotlib是最著名的繪圖庫,它主要用於二維繪圖,當然它也可以進行簡單的三維繪圖。它不但提供了–整套和Matlab相似但更爲豐富的命令,讓我們可以非常快捷地用Python可視化數據,而且允許輸出達出版質量的多種圖像格式。

安裝:

pip install python-matplotlib

Matplotlib作圖的基本代碼:

# coding=utf8
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 1000)  # 作圖的變量、自變量
y = np.sin(x) + 1  # 因變量y
z = np.cos(x ** 2) + 1  # 因變量z

plt.figure(figsize=(8, 4))  # 設置圖像大小
plt.plot(x, y, label='$\sin x +1$', color='red', linewidth=2)  # 作圖、設置標籤、線條顏色、線條大小
plt.plot(x, z, 'b--', label='$\cos x^2 + 1$')  # 作圖、設置標籤、線條類型
plt.xlabel('Time(s)  ')  # x軸名稱
plt.ylabel('Volt')  # y軸名稱
plt.title('A Simple Example')  # 標題名稱
plt.ylim(0, 2.2)  # 顯示的y軸範圍
plt.legend()  # 顯示圖例
plt.show()  # 顯示作圖結果

在這裏插入圖片描述
這裏爲大家提供一個matplotlib的畫廊:

http://matplotlib.org/gallery.html)

4、Pandas

​    Pandas的功能非常強大,支持類似於SQL的數據增、刪、查、改,並且帶有豐富的數據處理函數;支持時間序列分析功能;支持靈活處理缺失數據等。事實上,單純Pandas工具就足以寫一本書,大家可以閱讀Pandas的主要作者之一 —— Wes McKinney寫的《利用Python進行數據分析》一書,學習更詳細的內容。

安裝:

pip install pandas
pip install xlrd
pip install xlwt #這裏爲Python添加讀/寫Excel的功能

Pandas的簡單例子:

# coding=utf8
import pandas as pd

s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])  # 創建一個序列s
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])  # 創建一個表
d2 = pd.DataFrame(s)

print(d.head())  # 預覽前五行數據
print(d.describe())  # 數據基本統計量

pd.read_csv('athlete_events.csv',encoding = 'utf-8')


   注:Pandas是我在做數據分析過程中的主力工具,在後面會頻繁的使用~因此在這裏就先不詳細介紹了,後面使用中會盡可能詳細的講解它。

5、StatsModels

   Pandas着眼於數據的讀取、處理和探索,而StatsModels則更加註重數據的統計建模分析,它使得Python有了R語言的味道。StatsModels 支持與Pandas進行數據交互,因此,它與Pandas結合,成爲了Python下強大的數據挖掘組合。

安裝:

pip install statsmodels

ADF平穩性檢驗:

#coding=utf8
from statsmodels.tsa.stattools import adfuller as ADF #導入ADF檢驗
import numpy as np
print(ADF(np.random.rand(100))) #返回值中有ADF、p值等

6、Scikit-Learn

   從該庫的名字可以看出,這是一個機器學習相關的庫。不錯,Scikit-Learn 是Python下強大的機器學習工具包,它提供了完善的機器學習工具箱,包括數據預處理、分類、迴歸、聚類、預測和模型分析等。

安裝:

pip install scikit-learn

簡單的機器學習模型:

# coding=utf8
from sklearn.linear_model import LinearRegression  # 導入線性迴歸模型

# 一個很簡單的機器學習模型
model = LinearRegression()  # 建立線性迴歸模型
print(model)

簡單的例子:



from sklearn import datasets  # 導入數據集

iris = datasets.load_iris()  # 加載數據集
print(iris.data.shape)  # 查看數據集大小

from sklearn import svm  # 導入svm模型

clf = svm.LinearSVC()  # 建立線性svm分類器
clf.fit(iris.data, iris.target)  # 用數據進行訓練
clf.predict([[5.0, 3.6, 1.3, 0.25]])  # 訓練好模型後,輸入新的數據進行預測
print(clf.coef_)  # 查看訓練好的模型的參數

1.所有模型提供的接口有:
   model.fit() : 訓練模型,對於監督模型來說是fit(X,y),對於非監督模型是fit(X)

2.監督模型提供的接口有:
   model.predict(X_new): 預測新樣本
   model.predict_proba(X_new) :預測概率,僅對某些模型有用,比如LR
   model.score(): 得分越高,fit越好

3.非監督模型提供的接口有:
   model.transform(): 從數據中學到新的“基空間”
   model.fit_transform(): 從數據中學到新的基並將這個數據按照這組“基”進行轉換

7、Keras

   雖然Scikit-Learn足夠強大,但是它並沒有包含一種強大的模型——人工神經網絡。人工神經網絡是功能相當強大的、但是原理又相當簡單的模型,在語言處理、圖像識別等領域有着重要的作用。近年來逐漸火起來的“深度學習”算法,本質上也就是一種神經網絡,可見在Python中實現神經網絡是非常必要的。事實上,Keras 並非簡單的神經網絡庫,而是一個基Theano的強大的深度學習庫,利用它不僅僅可以搭建普通的神經網絡,還可以搭建各種深度學習模型,如自編碼器、循環神經網絡、遞歸神經網絡、卷積神經網絡等。由於它是基於Theano的,因此速度也相當快。有必要介紹一下Theano,它也是Python的一個庫,它是由深度學習專家Yoshua Bengio帶領的實驗室開發出來的,用來定義、優化和高效地解決多維數組數據對應數學表達式的模擬估計問題。它具有高效地實現符號分解、高度優化的速度和穩定性等特點,最重要的是它還實現了GPU加速,使得密集型數據的處理速度是CPU的數十倍。

安裝:

   安裝Keras之前首先需要安裝Numpy、Scipy和Theano。安裝Theano先要準備–個C++編譯器,這在Linux下是自帶的。因此,在Linux下安裝Theano和Keras非常簡單,只需要下載源代碼,然後用python setup.py install安裝就行了,具體可以參考官方文檔。可是在Windows下就沒有那麼簡單了,因爲它沒有現成的編譯環境。一般而言是先安裝MinGW(Windows’下的GCC和G++),然後再安裝Theano(提前裝好Numpy等依賴庫),最後安裝Keras。如果要實現GPU加速,還需要安裝和配置CUDA(天下沒有免費的午餐,想要速度、易用兩不誤,那麼就得花點心思)。限於篇幅,我就不詳細介紹在WindowsTheano和Keras的安裝配置方法。

簡單搭建一個MLP(多層感知器):

# coding=utf8
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD

model = Sequential()  # 模型初始化
model.add(Dense(20, 64))  # 添加輸入層(20節點)、第一隱藏層(64節點)的連接
model.add(Activation('tanh'))  # 第一隱藏層用tanh作爲激活函數
model.add(Dropout(0.5))  # 使用Dropout防止過擬合
model.add(Dense(64, 1))  # 添加第二隱藏層(64節點),輸出層(1節點)的連接
model.add(Activation('sigmoid'))  # 輸出層用sigmoid作爲激活函數

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)  # 定義求解算法
model.compile(loss='mean_squared_error', optimizer=sgd)  # 編譯生成模型,損失函數爲平均誤差平方和

model.fit(X_train, y_train, nb_epoch=20, batch_size=16)  # 訓練模型
score = model.evaluate(X_test, y_test, batch_size=16)  # 測試模型


要注意的是,Keras的預測函數與Scikit-Learn有所差別,Keras用的是model.predict()方法給出概率,model.predict_classes()方法給出分類結果。

參考鏈接:

http://www.52nlp.cn/ 如何計算兩個文檔的相似度二

8、Gensim

   在Gensim的官網中,它對自己的簡介只有一句話: topic modelling for humans!
   Gensim是用來處理語言方面的任務,如文本相似度計算、LDA、Word2Vec 等,這些領域的任務往往需要比較多的背景知識,通常的情況是:研究這方面的讀者,已經不需要我再多說什麼;不研究這方面的讀者,在這裏也說不清楚。(所以Gensim的介紹只有一句話也就不奇怪了。)
需要一提的是,Gensim把Google公司在2013年開源的著名的詞向量構造工具Word2Vec編譯好了作爲它的子庫,因此需要用到Word2Vec的讀者也可以直接用Gensim而無需自行編譯了。據說Gensim的作者對Word2Vec的代碼進行了優化,據說它在Gensim下的表現比原生的Word2Vec還要快。(爲了實現加速,需要準備C++編譯器環境,因此,建議用到Gensim的Word2Vec的讀者在Linux下環境運行。)

安裝:

pip install gensim

Gensim使用Word2Vec的簡單例子:

# coding=utf8
import gensim, logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : $(message)s', level=logging.INFO)
# logging是用來輸出訓練日誌的

# 分好詞的句子,每個句子以詞列表的形式輸入
sentences = [['first', 'sentence'], ['second', 'sentence']]

# 用以上的句子訓練向量模型
model = gensim.models.Word2Vec(sentences, min_count=1)

print(model['sentence'])  # 輸出單詞sentence的詞向量

參考鏈接:

http://radimrehurek .com/gensim/
htp://www.52nlp.cn/ (如何計算兩個文檔的相似度二)

小結:

   本次主要對Python進行簡單介紹,包括軟件安裝、使用入門及相關注意事項和Python數據分析及挖掘相關工具箱。由於Python包含多個領域的擴展庫,而且擴展庫的功能也相當豐富,本次也只介紹與數據分析及數據挖掘相關的一小部分,包括高維數組、數值計算、可視化、機器學習、神經網絡和語言模型等。

★學習Python數據挖掘純屬個人愛好,如有不足或錯誤請指出謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章