本博客旨在帮助学生自己巩固所学,若能帮得上他人也是荣幸之至
首先以下是借鉴过的几个github库,非常感谢:
https://github.com/apachecn/python_data_analysis_and_mining_action
https://github.com/keefecn/python_practice_of_data_analysis_and_mining
https://github.com/Stormzudi/Python-Data-Mining
https://github.com/Echo9573/DataAnalysisbyPython
本文主要参考博客https://blog.csdn.net/u012063773/article/details/79296539
https://blog.csdn.net/sinat_33519513/article/details/74086061
1 缺失位置查看
import pandas as pd
inputfile = 'missing_data.xls' #输入数据
data = pd.read_excel(inputfile, header=None)
# 判断DataFrame中的空值的位置
sij = []
for j in range(len(data.columns)):
s1 = data[data.columns[j]].isnull()
for i in range(len(s1)):
if s1[i]==True:
sij.append((j,i))
sij
2 CART决策树模型预测实例
# -*- coding: utf-8 -*-
# 构建并测试CART决策树模型
import pandas as pd # 导入数据分析库
from random import shuffle # 导入随机函数shuffle,用来打算数据
datafile = '../data/model.xls' # 数据名
data = pd.read_excel(datafile) # 读取数据,数据的前三列是特征,第四列是标签
data = data.values # 将表格转换为矩阵
shuffle(data) # 随机打乱数据
p = 0.8 # 设置训练数据比例
train = data[:int(len(data) * p), :] # 前80%为训练集
test = data[int(len(data) * p):, :] # 后20%为测试集
print(len(data), len(train), len(test))
# 构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier # 导入决策树模型
treefile = '../tmp/tree.pkl' # 模型输出名字
tree = DecisionTreeClassifier() # 建立决策树模型
tree.fit(train[:, :3], train[:, 3]) # 训练
# 保存模型
import joblib
joblib.dump(tree, treefile)
from plot import * # 导入自行编写的混淆矩阵可视化函数
plot_cm(train[:, 3], tree.predict(train[:, :3])).show() # 显示混淆矩阵可视化结果
# 注意到Scikit-Learn使用predict方法直接给出预测结果。
# show ROC
predict_result = tree.predict_proba(test[:, :3])[:, 1]
plot_roc(test, predict_result, 'ROC of CART')
3 混淆矩阵函数与ROC曲线函数
#-*- coding: utf-8 -*-
import matplotlib.pyplot as plt
def plot_cm(y, yp):
from sklearn.metrics import confusion_matrix # 导入混淆矩阵函数
cm = confusion_matrix(y, yp) # 混淆矩阵
plt.matshow(cm, cmap=plt.cm.Greens) # 画混淆矩阵图,配色风格使用cm.Greens,更多风格请参考官网。
plt.colorbar() # 颜色标签
for x in range(len(cm)): # 数据标签
for y in range(len(cm)):
plt.annotate(cm[x, y], xy=(
x, y), horizontalalignment='center', verticalalignment='center')
plt.ylabel('True label') # 坐标轴标签
plt.xlabel('Predicted label') # 坐标轴标签
return plt
def plot_roc(test, predict_result, label_name):
from sklearn.metrics import roc_curve # 导入ROC曲线函数
fpr, tpr, thresholds = roc_curve(test[:, 3], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of CART', color='green') # 作出ROC曲线
plt.xlabel('False Positive Rate') # 坐标轴标签
plt.ylabel('True Positive Rate') # 坐标轴标签
plt.ylim(0, 1.05) # 边界范围
plt.xlim(0, 1.05) # 边界范围
plt.legend(loc=4) # 图例
plt.show() # 显示作图结果
return plt