Python数据分析与挖掘实战总结
《Python數據分析與挖掘實戰》
一、書籍及源代碼下載鏈接:
鏈接:https://pan.baidu.com/s/1oTde4_W1-0GcltkcGtG33A? ?提取碼:1234
GitHub - GoAlers/python_data_analysis_and_mining_action: 《python數據分析與挖掘實戰》的代碼筆記
數據挖掘比賽筆記參考這篇:
數據挖掘比賽筆記總結_GoAl的博客-CSDN博客
一、Python數據分析工具
二、數據探索
一、對數據的質量分析
異常值的分析:
1. 簡單的統計量分析:查看最大最小值是否在合理范圍
2.3δ原則,在正態分布下異常值被定義為一組定值與平均值的距離超過3倍的標準差。
3.箱形圖分析:
異常值被定義為小于QL-1.5IQR 或大于QR+1.5IQR??
QL是所有數據的下四分位,QR是所有數據的上四分位。IQR是QR-QL
DataFrame中describe()已經給出了基本的統計
二、數據特征分析
1.可以使用pandas、matplotlib繪制統計圖
散點圖矩陣可以分析每兩個變量的關系。
2.計算相關系數
①Pearson相關系數
②Spearman秩相關系數
③判定系數
使用pandas的corr()計算相關系數
繪制條形圖和折線圖:
三、數據預處理
缺失:
二、Python數據分析入門
Python入門
基本命令:
# for 循環 s = 0 for k in range(101): #1-100s = s + k print s# 函數 def add2(x):return x+2 print add2(1)def add2(x=0, y=0):return [x+2, y+2] #返回列表def add3(x, y):return x+3, y+3 #雙重返回 a,b = add3(1, 2)# 匿名函數 f = lambda x : x+2 #定義函數f(x)= x+2 g = lambda x, y : x+y #定義函數g(x,y)= x+y, g(1,2)結果為3# 數據結構 # a, b是列表 # 列表函數cmp(a, b) len(a) max(a) min(a) sum(a) sorted(a) # 列表對象方法 a.append(1) a.count(1) a.extend([1,2]) a.index(1) a.insert(2,1) a.pop(1) b = a # b是a的別名 b = a[:] #數據復制# 列表解析 a = [1, 2, 3] b = [] for i in a:b.append(i+2) # 等價于 a =[1, 2, 3] b =[i + 2 for i in a]# 集合 d = {'today' : 20, "tomorrow" : 30} #創建 d['today'] #訪問 # 其他創建方法 dict(['today', 20], ['tomorrow', 30]) dict.fromkeys(['today', 'tomorrow'], 20)# 集合 s = {1, 2, 2, 4} s = set([1,2,2,4]) #自動去除多余的值# 函數式編程 lambda, map, reduce, filter b = map(lambda x :x+2, a) b = list(b); #2.x中不需要,3.x中需要,因為map僅僅創建了一個待運行的命令容器,只有其他函數調用時才返回結果 # map命令將函數逐一運用到map列表的每個元素中,,最后返回一個數組,效率比for循環高一點# reduce函數用于遞歸運算 reduce(lambda x, y: x*y, range(1, n+1))# filter 用于篩選列表中符合條件的元素 b = filter(lambda x :x > 5 and x <8, range(10)) b = list(b) # 同map# 導入庫 import math math.sin(1)import math as m m.sin(1)from math import exp as e e(1) sin(1) #出錯from math import * #直接導入,大量導入會引起命名沖突,不建議 exp(1) sin(1)# 導入future特征(2.x) # 將print變為函數形式,即用print(a)格式輸出 from __future__ import print_function # 3.x中3/2=1.5, 3//2=1;2.x中3/2=1 from __future__ import division第三方庫
安裝
Windows中
pip install numpy或者下載源代碼安裝
python setup.py installPandas默認安裝不能讀寫Excel文件,需要安裝xlrd和xlwt庫才能支持excel的讀寫
pip install xlrd pip install xlwtStatModel可pip可exe安裝,注意,此庫依賴于Pandas和patsy
Scikit-Learn是機器學習相關的庫,但是不包含人工神經網絡
model.fit() #訓練模型,監督模型fit(X,y),非監督模型fit(X)# 監督模型接口model.predict(X_new) #預測新樣本model.predict_proba(X_new) #預測概率model.score() #得分越高,fit越好# 非監督模型接口model.transform() #從數據中學到新的“基空間”model.fit_transform() #從數據中學到新的基,并按照這組基進行轉換Keras是基于Theano的強化的深度學習庫,可用于搭建普通神經網絡,各種深度學習模型,如自編碼器,循環神經網絡,遞歸神經網絡,卷積神經網絡。Theano也是一個Python庫,能高效實現符號分解,速度快,穩定性好,實現了GPU加速,在密集型數據處理上是CPU的10倍,缺點是門檻太高。Keras的速度在Windows會大打折扣。
Windows下:安裝MinGWindows--安裝Theano---安裝Keras--安裝配置CUDA
Gensim用來處理語言方面的任務,如文本相似度計算、LDA、Word2Vec等,建議在Windows下運行。
Linux中
sudo apt-get install python-numpy sudo apt-get install python-scipy sudo apt-get install python-matplotlib使用
Matplotlib默認字體是英文,如果要使用中文標簽,
plt.rcParams['font.sans-serif'] = ['SimHei']保存作圖圖像時,負號顯示不正常:
plt.rcParams['axes.unicode_minus'] = False三、數據探索
臟數據:缺失值、異常值、不一致的值、重復數據
異常值分析
分布分析
定量數據的分布分析:求極差(max-min),決定組距和組數,決定分點,列出頻率分布表,繪制頻率分布直方圖。
定性數據的分布分析:餅圖或條形圖
對比分析
統計量分析
集中趨勢度量:均值、中位數、眾數
離中趨勢度量:極差、標準差、變異系數、四份位數間距
變異系數為:s表示標準差,x表示均值
#-*- coding: utf-8 -*-#餐飲銷量數據統計量分析from __future__ import print_functionimport pandas as pdcatering_sale = '../data/catering_sale.xls' #餐飲數據,一列為日期,一列為銷量data = pd.read_excel(catering_sale, index_col = u'日期') #讀取數據,指定“日期”列為索引列data = data[(data[u'銷量'] > 400)&(data[u'銷量'] < 5000)] #過濾異常數據statistics = data.describe() #保存基本統計量print(statistics)print("--------------")statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #極差statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #變異系數statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位數間距print(statistics)周期性分析
貢獻度分析
又稱帕累托分析,原理是帕累托法則,即20/80定律,同樣的投入放在不同的地方會產生不同的收益。
#-*- coding: utf-8 -*-#菜品盈利數據 帕累托圖from __future__ import print_functionimport pandas as pd#初始化參數dish_profit = '../data/catering_dish_profit.xls' #餐飲菜品盈利數據,菜品ID,菜品名 盈利data = pd.read_excel(dish_profit, index_col = u'菜品名')data = data[u'盈利'].copy()#保留兩列數據data.sort(ascending = False)import matplotlib.pyplot as plt #導入圖像庫plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號plt.figure()data.plot(kind='bar')plt.ylabel(u'盈利(元)')p = 1.0*data.cumsum()/data.sum()p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9),arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注釋,即85%處的標記。這里包括了指定箭頭樣式。plt.ylabel(u'盈利(比例)')plt.show()相關性分析
途徑:繪制散點圖、散點圖矩陣、計算相關系數
Pearson相關系數:要求連續變量的取值服從正態分布。
相關系數r的取值范圍[-1, 1]
Spearman相關系數:不服從正態分布的變量、分類或等級變量之間的關聯性可用該系數,也稱等級相關系數。
對兩個變量分別按照從小到大的順序排序,得到的順序就是秩。R_i表示x_i的秩次,Q_i表示y_i的秩次。
判定系數:相關系數的平方,用來解釋回歸方程對y的解釋程度。
#-*- coding: utf-8 -*-#餐飲銷量數據相關性分析 from __future__ import print_function import pandas as pdcatering_sale = '../data/catering_sale_all.xls' #餐飲數據,含有其他屬性 data = pd.read_excel(catering_sale, index_col = u'日期') #讀取數據,指定“日期”列為索引列data.corr() #相關系數矩陣,即給出了任意兩款菜式之間的相關系數 data.corr()[u'百合醬蒸鳳爪'] #只顯示“百合醬蒸鳳爪”與其他菜式的相關系數 data[u'百合醬蒸鳳爪'].corr(data[u'翡翠蒸香茜餃']) #計算“百合醬蒸鳳爪”與“翡翠蒸香茜餃”的相關系數數據探索函數
| D.sum() | 按列計算總和 |
| D.mean() | 計算算數平均 |
| D.var() | 方差 |
| D.std() | 標準差 |
| D.corr(method = ' pearson') | Spearman(Pearson)相關系數矩陣 |
| D.cov() | 協方差矩陣 |
| D.skew() | 偏度(三階矩) |
| D.kurt() | 峰度(四階距) |
| D.describe() | 給出樣本的基礎描述 |
| cumsum() | 依次給出前1-n個數的和 |
| cumprod() | 依次給出前1-n個數的積 |
| cummax() | 依次給出前1-n個數的最大值 |
| cummin() | 依次給出前1-n個數的最小值 |
| rolling_sum() | 按列計算數據樣本的總和 |
| rolling_mean() | 算數平均數 |
| rolling_var() | 方差 |
| rolling_std() | 標準差 |
| rolling_corr() | 相關系數矩陣 |
| rolling_cov() | 協方差 |
| rolling_skew() | 偏度 |
| rolling_kurt() | 峰度 |
| plot() | 繪制線性二維圖,折線圖 |
| pie() | 繪制餅形圖 |
| hist() | 繪制二維條形直方圖,可現實數據的分配情形 |
| boxplot() | 繪制箱型圖 |
| plot(logy = True) | 繪制y軸的對數圖形 |
| plot(yerr = error) | 繪制誤差條形圖 |
四、數據預處理
數據清洗
包括:刪除原始數據中的無關數據、重復數據,平滑噪聲數據,處理缺失值。
拉格朗日插值法:
當插值節點增減時,插值多項式就會發生變化,在實際計算中不方便。
牛頓插值法:P(x)是牛頓插值逼近函數,R(x)是誤差函數
Python的Scipy庫中只提供了拉格朗日插值法的函數(實現上比較容易)
#-*- coding: utf-8 -*-# 插值時存在問題,不同的位置選取的數據點不一樣,并且保證最后的數據是正確的# 目前沒有考慮連續臟數據的情況#拉格朗日插值代碼import pandas as pd #導入數據分析庫Pandasfrom scipy.interpolate import lagrange #導入拉格朗日插值函數inputfile = '../data/catering_sale.xls' #銷量數據路徑outputfile = '../tmp/sales.xls' #輸出數據路徑data = pd.read_excel(inputfile) #讀入數據data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] = None #過濾異常值,將其變為空值#自定義列向量插值函數#s為列向量,n為被插值的位置,k為取前后的數據個數,默認為5,插值不要超過20def ployinterp_column(s, n, k=5):y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數,y是長度為10的列表y = y[y.notnull()] #剔除空值return lagrange(y.index, list(y))(n) #插值并返回插值多項式,代入n得到插值結果#逐個元素判斷是否需要插值k = 2for i in data.columns:for j in range(len(data)):if (data[i].isnull())[j]: #如果為空即插值。if (j >= k) and (j < len(data) - k):y = data[i][list(range(j-k, j)) + list(range(j+1, j+1+k))] #取數,y是長度為10的列表elif j < k :y = data[i][list(range(0, j)) + list(range(j+1, 2 * k + 1))]elif j >= len(data) - k:y = data[i][list(range(len(data) - 1 - 2 * k, j)) + list(range(j+1, len(data)))]y = y[y.notnull()] #剔除空值data[i][j] = lagrange(y.index, list(y))(j) #插值并返回插值多項式,代入j得到插值結果data.to_excel(outputfile) #數據集成
包括實體識別,冗余屬性識別
數據變化
簡單函數變換
規范化
連續屬性離散化
等寬法(至于相同寬度)、等頻法(將相同數量的記錄放進每個區間)、基于聚類分析的方法(K-means)
import pandas as pdfrom sklearn.cluster import KMeans #引入KMeansimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號datafile = '../data/discretization_data.xls' #參數初始化data = pd.read_excel(datafile) #讀取數據data = data[u'肝氣郁結證型系數'].copy()k = 4 #分為4類d1 = pd.cut(data, k, labels = range(k)) #等寬離散化,各個類比依次命名為0,1,2,3#等頻率離散化w = [1.0*i/k for i in range(k+1)] #為describe確定分位數0%,25%,50%,75%,100% w = data.describe(percentiles = w)[4:4+k+1] #使用describe函數自動計算分位數并取出分位數w[0] = w[0]*(1-1e-10) #確保比最小值小d2 = pd.cut(data, w, labels = range(k))kmodel = KMeans(n_clusters = k, n_jobs = 1) #建立模型,n_jobs是并行數,一般等于CPU數較好kmodel.fit(data.reshape((len(data), 1))) #訓練模型c = pd.DataFrame(kmodel.cluster_centers_).sort(0) #輸出聚類中心,并且排序(默認是隨機序的)w = pd.rolling_mean(c, 2).iloc[1:] #相鄰兩項求中點,作為邊界點w = [0] + list(w[0]) + [data.max()] #把首末邊界點加上d3 = pd.cut(data, w, labels = range(k))def cluster_plot(d, k): #自定義作圖函數來顯示聚類結果 plt.figure(figsize = (8, 3))for j in range(0, k):plt.plot(data[d==j], [j for i in d[d==j]], 'o')plt.ylim(-0.5, k-0.5)return pltcluster_plot(d1, k).show()cluster_plot(d2, k).show()cluster_plot(d3, k).show()屬性構造:比如利用供入電量和供出電量計算線損率。
#-*- coding: utf-8 -*- #線損率屬性構造 import pandas as pd#參數初始化 inputfile= '../data/electricity_data.xls' #供入供出電量數據 outputfile = '../tmp/electricity_data.xls' #屬性構造后數據文件data = pd.read_excel(inputfile) #讀入數據 data[u'線損率'] = (data[u'供入電量'] - data[u'供出電量'])/data[u'供入電量']data.to_excel(outputfile, index = False) #保存結果小波變換
用于非平穩信號的時頻分析。基于小波變換的主要方法有:多尺度空間能量分布特征提取、多尺度空間的模極大值特征提取、小波包變換的特征提取、適應性小波神經網絡的特征提取。
小波基函數:Harry小波基,db系列小波基,均值為0。積分為0.
小波變換:a是伸縮因子,b是平移因子,對小波基函數進行伸縮和平移變換
任意函數f(t)的連續小波變換(CWT)為:
在約束條件下有逆變換:
python中scipy本身提供了信號處理函數,更好的信號處理庫是PyWavelets(pywt)。
#小波特征變換提取代碼 import pywt #導入PyWavelets from scipy.io import loadmat #mat是MATLAB專用格式,需要用loadmat讀取它#參數初始化 inputfile= '../data/leleccum.mat' #提取自Matlab的信號文件mat = loadmat(inputfile) signal = mat['leleccum'][0]coeffs = pywt.wavedec(signal, 'bior3.7', level = 5) #返回結果為level+1個數字,第一個數組為逼近系數數組,后面的依次是細節系數數組數據規約
屬性規約:合并屬性,逐步向前選擇,逐步向后刪除,決策樹歸納,主成分分析。
主成分分析步驟:
其中,
求R的特征方程
的特征根
數值規約:通過選擇替代的、較小的數據來減少數據量。
Python主要數據預處理函數
| interpolate | 一維、高維數據插值 |
| unique | 去除數據終端額重復數據 |
| isnull | 判斷是否空值 |
| notnull | 判斷是否非空值 |
| PCA | 主成分分析 |
| random | 生成隨機矩陣 |
五、挖掘建模
分類與預測
常用算法:回歸分析、決策樹、人工神經網絡、貝葉斯網絡、支持向量機。
Logistic回歸
Logistic函數:
回歸模型:
#-*- coding: utf-8 -*-#邏輯回歸 自動建模import pandas as pdfrom sklearn.linear_model import LogisticRegression as LRfrom sklearn.linear_model import RandomizedLogisticRegression as RLR #參數初始化filename = '../data/bankloan.xls'data = pd.read_excel(filename)x = data.iloc[:,:8].as_matrix()##變成矩陣y = data.iloc[:,8].as_matrix()rlr = RLR() #建立隨機邏輯回歸模型,篩選變量rlr.fit(x, y) #訓練模型rlr.get_support() #獲取特征篩選結果,也可以通過.scores_方法獲取各個特征的分數print(u'通過隨機邏輯回歸模型篩選特征結束')#join() 表示連接,使用逗號,括號內必須是一個對象。如果有多個就編程元組,或是列表。print(u'有效特征為:%s' % ','.join(data.columns[rlr.get_support()]))x = data[data.columns[rlr.get_support()]].as_matrix() #篩選好特征lr = LR() #建立邏輯貨柜模型lr.fit(x, y) #用篩選后的特征數據來訓練模型print(u'邏輯回歸模型訓練結束。')print(u'模型的平均正確率為:%s' % lr.score(x, y)) #給出模型的平均正確率,本例為81.4%Scikit-Learn提供了REF包可以用于特征消除。還提供了REFCV,可以通過交叉驗證來對特征進行排序。
決策樹
ID3、C4.5、CART算法
ID3:在決策樹的各級節點上都用信息增益作為判斷標準進行屬性的選擇,使得在每個節點上都能獲得最大的類別分類增益,使分類后的額數據集的熵最小,這樣使得樹的平均深度最小,從而有效地提高了分類效率。
步驟:
人工神經網絡
#-*- coding: utf-8 -*-#使用神經網絡算法預測銷量高低import pandas as pd#參數初始化inputfile = '../data/sales_data.xls'data = pd.read_excel(inputfile, index_col = u'序號') #導入數據#數據是類別標簽,要將它轉換為數據#用1來表示“好”、“是”、“高”這三個屬性,用0來表示“壞”、“否”、“低”data[data == u'好'] = 1data[data == u'是'] = 1data[data == u'高'] = 1data[data != 1] = 0x = data.iloc[:,:3].as_matrix().astype(int)y = data.iloc[:,3].as_matrix().astype(int)from keras.models import Sequentialfrom keras.layers.core import Dense, Activationmodel = Sequential() #建立模型model.add(Dense(3, 10))model.add(Activation('relu')) #用relu函數作為激活函數,能夠大幅提供準確度model.add(Dense(10, 1))model.add(Activation('sigmoid')) #由于是0-1輸出,用sigmoid函數作為激活函數model.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = 'binary')#編譯模型。由于我們做的是二元分類,所以我們指定損失函數為binary_crossentropy,以及模式為binary#另外常見的損失函數還有mean_squared_error、categorical_crossentropy等,請閱讀幫助文件。#求解方法我們指定用adam,還有sgd、rmsprop等可選model.fit(x, y, nb_epoch = 1000, batch_size = 10) #訓練模型,學習一千次yp = model.predict_classes(x).reshape(len(y)) #分類預測from cm_plot import * #導入自行編寫的混淆矩陣可視化函數cm_plot(y,yp).show() #算法評價:相對誤差、均方誤差、識別準確度、識別精確率、ROC曲線
聚類分析
K-Means算法
#-*- coding: utf-8 -*-#使用K-Means算法聚類消費行為特征數據import pandas as pdfrom sklearn.cluster import KMeansimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號#參數初始化inputfile = '../data/consumption_data.xls' #銷量及其他屬性數據outputfile = '../tmp/data_type.xls' #保存結果的文件名k = 3 #聚類的類別iteration = 500 #聚類最大循環次數data = pd.read_excel(inputfile, index_col = 'Id') #讀取數據data_zs = 1.0*(data - data.mean())/data.std() #數據標準化model = KMeans(n_clusters = k, n_jobs = 1, max_iter = iteration) #分為k類,并發數4model.fit(data_zs) #開始聚類#簡單打印結果r1 = pd.Series(model.labels_).value_counts() #統計各個類別的數目r2 = pd.DataFrame(model.cluster_centers_) #找出聚類中心r = pd.concat([r2, r1], axis = 1) #橫向連接(0是縱向),得到聚類中心對應的類別下的數目r.columns = list(data.columns) + [u'類別數目'] #重命名表頭print(r) #打印分類中心和分類數量#詳細輸出原始數據及其類別r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #詳細輸出每個樣本對應的類別r.columns = list(data.columns) + [u'聚類類別'] #重命名表頭r.to_excel(outputfile) #保存分類結果def density_plot(data): #自定義作圖函數 p = data.plot(kind='kde', linewidth = 2, subplots = True, sharex = False)[p[i].set_ylabel(u'密度') for i in range(k)]plt.legend()return pltpic_output = '../tmp/pd_' #概率密度圖文件名前綴for i in range(k):density_plot(data[r[u'聚類類別']==i]).savefig(u'%s%s.png' %(pic_output, i))聚類算法評價:purity評價法、RI評價法、F值評價法
| KMeans | K均值聚類 |
| AffinityPropagation | 吸引力傳播聚類 |
| SpectralClustering | 譜聚類,由于KMeans |
| AgglomerativeClustering | 層次聚類 |
| DBSCAN | 具有噪聲的基于密度的聚類算法 |
| MeanShift | 均值漂移聚類算法 |
| BIRCH | 層次聚類算法,可以處理大規模數據 |
先用對應的函數建立模型,然后使用fit方法訓練模型,之后用label_方法給出樣本數據的標簽,或者用predict方法預測新的輸入的標簽。
TENSE:提供一種有效地數據降維的方式,在2維或者3維戰士聚類結果。
#-*- coding: utf-8 -*-#接k_means.pyfrom sklearn.manifold import TSNEimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號tsne = TSNE()tsne.fit_transform(data_zs) #進行數據降維tsne = pd.DataFrame(tsne.embedding_, index = data_zs.index) #轉換數據格式#不同類別用不同顏色和樣式繪圖d = tsne[r[u'聚類類別'] == 0]plt.plot(d[0], d[1], 'r.')d = tsne[r[u'聚類類別'] == 1]plt.plot(d[0], d[1], 'go')d = tsne[r[u'聚類類別'] == 2]plt.plot(d[0], d[1], 'b*')plt.show()關聯分析
常用算法:Apriori、FP-Tree、Eclt算法、灰色關聯法
Ariori算法
支持度:?
,A、B同時發生的概率
置信度:
A發生B發生的概率
同時滿足最小支持度和最小置信度稱滿足強規則
算法步驟:
時序模式
非平穩時間序列分析:許多非平穩序列差分后會顯示出平穩序列的性質,這時稱之為差分平穩序列,可以先做差分然后用ARMA模型進行擬合。這種方法稱之為ARIMA模型。
#-*- coding: utf-8 -*-#arima時序模型import pandas as pdimport matplotlib.pyplot as pltfrom statsmodels.graphics.tsaplots import plot_acffrom statsmodels.tsa.stattools import adfuller as ADFfrom statsmodels.graphics.tsaplots import plot_pacffrom statsmodels.stats.diagnostic import acorr_ljungboxfrom statsmodels.tsa.arima_model import ARIMAplt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號#參數初始化discfile = '../data/arima_data.xls'forecastnum = 5#讀取數據,指定日期列為指標,Pandas自動將“日期”列識別為Datetime格式data = pd.read_excel(discfile, index_col = u'日期')#時序圖data.plot()plt.show()plt.title('Time Series')#自相關圖plot_acf(data).show()#平穩性檢測print(u'原始序列的ADF檢驗結果為:', ADF(data[u'銷量']))#返回值依次為adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore#差分后的結果D_data = data.diff().dropna()D_data.columns = [u'銷量差分']D_data.plot() #時序圖plt.show()plot_acf(D_data).show() #自相關圖plot_pacf(D_data).show() #偏自相關圖print(u'差分序列的ADF檢驗結果為:', ADF(D_data[u'銷量差分'])) #平穩性檢測#白噪聲檢驗print(u'差分序列的白噪聲檢驗結果為:', acorr_ljungbox(D_data, lags=1)) #返回統計量和p值data[u'銷量'] = data[u'銷量'].astype(float)#定階pmax = int(len(D_data)/10) #一般階數不超過length/10qmax = int(len(D_data)/10) #一般階數不超過length/10bic_matrix = [] #bic矩陣for p in range(pmax+1):tmp = []for q in range(qmax+1):try: #存在部分報錯,所以用try來跳過報錯。tmp.append(ARIMA(data, (p,1,q)).fit().bic)except:tmp.append(None)bic_matrix.append(tmp)bic_matrix = pd.DataFrame(bic_matrix) #從中可以找出最小值p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。print(u'BIC最小的p值和q值為:%s、%s' %(p,q)) model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型model.summary2() #給出一份模型報告model.forecast(5) #作為期5天的預測,返回預測結果、標準誤差、置信區間。| acf | 計算自相關系數 |
| plot_acf | 畫自相關系數圖 |
| pacf | 計算偏相關系數 |
| plot_pacf | 畫圖 |
| adfuller | 單位根檢驗 |
| diff | 差分運算 |
| ARIMA | 創建模型 |
| summary | 給出ARIMA模型的報告 |
| aic/bic/hqic | 計算ARIMA模型的指標 |
| forecast | 預測 |
| acorr_ljungbox | Ljung-Box檢驗,是否白噪聲 |
離群點檢測
方法:基于統計、基于鄰近度、基于密度、基于聚類。
基于統計:一元正態分布若數據點在3倍標準差之外。
混合模型的離群點檢測:數據的統計分布未知或者沒有訓練數據可用,很難建立模型。
基于原型的聚類:聚類所有的對象,然后評估對象屬于簇的程度。如果刪除一個對象導師制該目標顯著改進,則可將該對象視為離群點。離群點可能形成小簇從而逃避檢測。
電力竊漏電用戶自動識別
數據分析:
數據預處理
模型構建
航空公司客戶價值分析
數據分析:缺失值分析和異常值分析,異常值看最大和最小值
數據預處理:
模型構建
中醫證型關聯規則挖掘
數據預處理
模型構建
采用Apriori關聯規則算法對模型的樣本數據進行分析,以模型參數設置的最小支持度和最小置信度作為條件,輸出關聯規則結果。
基于水色圖像的水質評價
數據預處理
模型構建
為提高區分度,將所有特征乘以常數k。然后建立支持向量機模型。
水質評價
對新增的水質圖像作評價。
家用電器用戶行為分析與事件識別
數據預處理
模型構建:訓練神經網絡
模型檢驗:使用測試數據
應用系統負載分析與磁盤容量預測
數據分析:通過時序圖觀察數據的平穩性和周期性
數據預處理
模型構建
模型評價:計算平均絕對誤差,均方根誤差
電子商務網站用戶行為分析及服務推薦
數據抽取:建立數據庫--導入數據--搭建Python數據庫操作環境
數據分析
數據預處理
模型構建
基于物品的協同濾波算法:計算物品之間的相似度,建立相似度矩陣;根據物品的相似度和用戶的歷史行為給用戶生成推薦列表。
相似度計算方法:夾角余弦、Jaccard系數、相關系數
財政收入影響因素分析及預測模型
數據分析
模型構建
對于財政收入、增值稅、營業稅、企業所得稅、政府性基金、個人所得稅
基于基站定位數據的商圈分析
數據預處理
模型構建
電商產品評論數據情感分析
文本采集:八爪魚采集器(爬蟲工具)
文本預處理:
文本評論分詞:采用Python中文分詞包“Jieba”分詞,精度達97%以上。
模型構建
總結
以上是生活随笔為你收集整理的Python数据分析与挖掘实战总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深圳大学移动互联网应用期末大作业——垃圾
- 下一篇: websocket python爬虫_p