Python数据分析之用sklearn预测糖尿病
在Python中,可以使用sklearn库对糖尿病数据进行预测。本文将为您详细讲解Python数据分析之用sklearn预测糖尿病的完整攻略,包括数据收集、数据预处理、特征工程、模型训练、模型评估等。程中将提供两个示例说明。
数据收集
糖尿病数据可以从多个数据源中获取,如UCI Machine Learning Repository等。在本文中,我们将使用UCI Machine Learning Repository提供的糖尿病数据作为示例。您可以从以下链接中下载数据:
数据预处理
在进行数据清洗之前,我们需要对数据进行预处理。预处理的目的是去除数据中的空值、重复值等,使数据更加准确、可靠、完整。以下数据预处理的示例代码:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('diabetes.csv')
# 去除空值和重复值
df = df.dropna().drop_duplicates()
# 保存处理后的数据
df.to_csv('cleaned_data.csv', index=False)
在上面的代码中,我们使用pandas库读取了一个CSV文件,并使用dropna()方法去除了空值,使用drop_duplicates()方法去除重复值。最后,我们使用to_csv()方法将处理后的数据保存到磁盘上。
特征工程
在进行特征工程之前,我们需要对数据进行初步处理。以下是特征工程的示例代码:
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 读取CSV文件
df = pd.read_csv('cleaned_data.csv')
# 将特征和标签分开
X = df.drop('Outcome', axis=1)
y = df['Outcome']
# 标准化特征
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 保存处理后的数据
pd.DataFrame(X).to_csv('features.csv', index=False)
pd.DataFrame(y).to_csv('labels.csv', index=False)
在上面的代码中,我们使用pandas库读取了一个CSV文件,并使用drop()方法去除了标签列。然后,我们使用StandardScaler()方法对特征进行标准化处理。最后,我们使用to_csv()方法将处理后的数据保存到磁盘上。
模型训练
在进行模型训练之前,我们需要将数据分为训练集和测试集。以下是模型训练的示例代码:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# 读取CSV文件
X = pd.read_csv('features.csv')
y = pd.read_csv('labels.csv')
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 保存模型
import joblib
joblib.dump(model, 'model.pkl')
在上面的代码中,我们使用pandas库读取了两个CSV文件,并使用train_test_split()方法将数据分为训练集和测试集。然后,我们使用LogisticRegression()方法训练了一个逻辑回归模型,并使用joblib.dump()方法将模型保存到磁盘上。
模型评估
在进行模型评估之前,我们需要使用测试集对模型进行评估。以下是模型评估的示例代码:
import pandas as pd
import joblib
from sklearn.metrics import accuracy_score
# 读取CSV文件
X_test = pd.read_csv('features.csv')
y_test = pd.read_csv('labels.csv')
# 加载模型
model = joblib.load('model.pkl')
# 预测结果
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 输出准确率
print('Accuracy:', accuracy)
在上面的代码中,我们使用pandas库读取了两个CSV文件,并使用joblib.load()方法加载了一个保存的模型。然后,我们使用predict()方法对测试集进行预测,并使用accuracy_score()方法计算了模型的准确率。最后,我们输出了模型的准确率。
示例说明
示例一
以下是一个Python程序,它使用sklearn库预测了糖尿病数据。
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import joblib
# 读取CSV文件
df = pd.read_csv('diabetes.csv')
# 去除空值和重复值
df = df.dropna().drop_duplicates()
# 将特征和标签分开
X = df.drop('Outcome', axis=1)
y = df['Outcome']
# 标准化特征
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 保存模型
joblib.dump(model, 'model.pkl')
# 加载模型
model = joblib.load('model.pkl')
# 预测结果
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 输出准确率
print('Accuracy:', accuracy)
在上面的代码中,我们使用sklearn库预测了糖尿病数据,并输出了模型的准确率。
示例二
以下是一个Python程序,它使用sklearn库预测了糖尿病数据,并绘制了一个ROC曲线。
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# 读取CSV文件
df = pd.read_csv('diabetes.csv')
# 去除空值和重复值
df = df.dropna().drop_duplicates()
# 将特征和标签分开
X = df.drop('Outcome', axis=1)
y = df['Outcome']
# 标准化特征
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测结果
y_pred = model.predict_proba(X_test)[:, 1]
# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)
# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
在上面的代码中,我们使用sklearn库预测了糖尿病数据,并绘制了一个ROC曲线。最后,我们使用show()方法显示了绘制的图形。
总结
本文为您详细讲解了Python数据分析之用sklearn预测糖尿病的完整攻略,包括数据收集数据预处理、特征工程、模型训练、模型评估等。通过学习本文,您可以更好地掌握Python中的数据分析技巧,提高自的数据分析能力。