資料分析
參考python資料分析與挖掘實戰-張良均著
資料探索
資料質量分析
- 缺失值分析
- 例外值分析
- 一致性分析
- 利用箱線圖檢驗例外值,可以看出資料的分布范圍大致情況,和1/4值、1/2值、3/4值得情況,

代碼:
# -*- coding: utf-8 -*-
import pandas as pd
catering_sale = '../data/catering_sale.xls' # 餐飲資料
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(catering_sale, index_col = u'日期') # 讀取資料,指定“日期”列為索引列
print(data.describe())
import matplotlib.pyplot as plt # 匯入影像庫
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
plt.figure() # 建立影像
p = data.boxplot(return_type='dict') # 畫箱線圖,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即為例外值的標簽
y = p['fliers'][0].get_ydata()
y.sort() # 從小到大排序,該方法直接改變原物件
'''
用annotate添加注釋
其中有些相近的點,注解會出現重疊,難以看清,需要一些技巧來控制
以下引數都是經過除錯的,需要具體問題具體除錯,
'''
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() # 展示箱線圖
資料預處理階段
資料清洗:
-
缺失值處理
- 3種方式:
1.洗掉該行資料,
2.資料插補(均值/中位數/眾數插補、使用固定值、最近臨插補、回歸方法、插值法(拉格朗日插值法)參考地址:https://www.cnblogs.com/hjk-airl/p/15766870.html),
3.不處理
- 3種方式:
-
例外值處理
- 常用方法
- 洗掉含有例外值的資料
- 視為缺失值
- 平均值修正
- 不處理
- 常用方法
資料變換
- 簡單函式板換(開方、平方、取對數、差分)
- 規范化
- 最大最小規范化

- 零-均值規范化
*σ原始資料標準差, - 小數定標規范化

- 最大最小規范化
資料規范化代碼
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
datafile = '../data/normalization_data.xls' # 引數初始化
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(datafile, header = None) # 讀取資料
print(data)
(data - data.min()) / (data.max() - data.min()) # 最小-最大規范化
(data - data.mean()) / data.std() # 零-均值規范化
data / 10 ** np.ceil(np.log10(data.abs().max())) # 小數定標規范化
資料屬性規約
- 常用方法:決策樹歸納、主成分分析
主成分分析PCA代碼主要作用降維
#主成分分析 降維
import pandas as pd
#引數初始化
inputfile = '../data/principal_component.xls'
outputfile = '../tmp/dimention_reducted.xls' #降維后的資料
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(inputfile, header = None) #讀入資料
from sklearn.decomposition import PCA
a = 4
pca = PCA()#降低到的4維度
PCA(copy=True,n_components=None,whiten=False)#copy=Ture不改變原始資料
pca.fit(data)#訓練
low_d = pca.transform(data)##降低他的維度
print(pca.components_) #回傳模型的各個特征向量
print(low_d)
print(pca.explained_variance_ratio_) #回傳各個成分各自的方差百分比
挖掘建模
分類與預測
-回歸分析、決策樹、人工神經網路、貝葉斯網路、支持向量機
邏輯回歸代碼logistic
# -*- coding: utf-8 -*-
# 代碼5-1
import pandas as pd
from sklearn.linear_model import LogisticRegression as LR
# 引數初始化
filename = '../data/bankloan.xls'
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(filename)
x = data.iloc[:,:8].values
y = data.iloc[:,8].values
lr = LR(max_iter=5000) # 建立邏輯回歸模型
lr.fit(x, y) # 用篩選后的特征資料來訓練模型
print('模型的平均準確度為:%s' % lr.score(x, y))
神經網路分類
# -*- coding: utf-8 -*-
import pandas as pd
# 引數初始化
inputfile = '../data/sales_data.xls'
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(inputfile, index_col ='序號') # 匯入資料
# 資料是類別標簽,要將它轉換為資料
# 用1來表示“好”“是”“高”這三個屬性,用0來表示“壞”“否”“低”
data[data =https://www.cnblogs.com/hjk-airl/archive/2022/03/04/='好'] = 1
data[data =https://www.cnblogs.com/hjk-airl/archive/2022/03/04/='是'] = 1
data[data =https://www.cnblogs.com/hjk-airl/archive/2022/03/04/='高'] = 1
data[data != 1] = 0
x = data.iloc[:,:3].astype(int)
y = data.iloc[:,3].astype(int)
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers.core import Dense, Activation
model = Sequential() # 建立模型
model.add(Dense(input_dim = 3, units = 64))
model.add(Activation('relu')) # 用relu函式作為激活函式,能夠大幅提供準確度
model.add(Dense(input_dim = 64, units = 1))
model.add(Activation('sigmoid')) # 由于是0-1輸出,用sigmoid函式作為激活函式
model.compile(loss = 'binary_crossentropy', optimizer = 'adam')
# 編譯模型,由于我們做的是二元分類,所以我們指定損失函式為binary_crossentropy,以及模式為binary
# 另外常見的損失函式還有mean_squared_error、categorical_crossentropy等,請閱讀幫助檔案,
# 求解方法我們指定用adam,還有sgd、rmsprop等可選
model.fit(x, y, epochs = 100, batch_size = 10) # 訓練模型,學習一千次
yp = model.predict_classes(x).reshape(len(y)) # 分類預測
from cm_plot import * # 匯入自行撰寫的混淆矩陣可視化函式
cm_plot(y,yp).show() # 顯示混淆矩陣可視化結果
聚類分析
- 常用方法:劃分方法(k-means聚類演算法)、層次分析方法


# -*- coding: utf-8 -*-
import pandas as pd
# 引數初始化
inputfile = '../data/consumption_data.xls' # 銷量及其他屬性資料
outputfile = '../tmp/data_type.xls' # 保存結果的檔案名
k = 3 # 聚類的類別
iteration = 500 # 聚類最大回圈次數
data = https://www.cnblogs.com/hjk-airl/archive/2022/03/04/pd.read_excel(inputfile, index_col ='Id') # 讀取資料
data_zs = 1.0*(data - data.mean())/data.std() # 資料標準化
from sklearn.cluster import KMeans
model = KMeans(n_clusters = k, max_iter = iteration,random_state=1234) # 分為k類,并發數4
model.fit(data_zs) # 開始聚類
# 簡單列印結果
r1 = pd.Series(model.labels_).value_counts() # 統計各個類別的數目
print(r1)
r2 = pd.DataFrame(model.cluster_centers_) # 找出聚類中心
print(r2)
r = pd.concat([r2, r1], axis = 1) # 橫向連接(0是縱向),得到聚類中心對應的類別下的數目
r.columns = list(data.columns) + ['類別數目'] # 重命名表頭
print(r)
# 詳細輸出原始資料及其類別
r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) # 詳細輸出每個樣本對應的類別
r.columns = list(data.columns) + ['聚類類別'] # 重命名表頭
r.to_excel(outputfile) # 保存結果
print(r)
def density_plot(data): # 自定義作圖函式
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
p = data.plot(kind='kde', linewidth = 2, subplots = True, sharex = False)
[p[i].set_ylabel('密度') for i in range(k)]
plt.legend()
return plt
pic_output = '../tmp/pd' # 概率密度圖檔案名前綴
for i in range(k):
density_plot(data[r['聚類類別']==i]).savefig('%s%s.png' %(pic_output, i))
density_plot(data[r['聚類類別'] == i]).show()
from sklearn.manifold import TSNE
tsne = TSNE(random_state=105)
tsne.fit_transform(data_zs) # 進行資料降維
tsne = pd.DataFrame(tsne.embedding_, index = data_zs.index) # 轉換資料格式
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
# 不同類別用不同顏色和樣式繪圖
d = tsne[r['聚類類別'] == 0]
plt.plot(d[0], d[1], 'r.')
d = tsne[r['聚類類別'] == 1]
plt.plot(d[0], d[1], 'go')
d = tsne[r['聚類類別'] == 2]
plt.plot(d[0], d[1], 'b*')
plt.show()
在這里推薦兩個好用的網站
scikit-learn中文社區:https://scikit-learn.org.cn/
包含七種啟發式演算法的代碼庫檔案:https://scikit-opt.github.io/scikit-opt/#/zh/README
第一個

第二個

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437948.html
標籤:其他
上一篇:[20220303]oracle如何定位使用library cache mutex 3.txt
下一篇:MySQL多表查詢


