步骤分析
Python在数据分析中的步骤通常包括以下几个阶段:
- 明确问题:确定你想要通过数据分析解决的具体问题或回答的问题。
- 收集数据:根据分析目标,从不同的来源收集所需的数据。这些数据可能来自数据库、文件(如CSV, Excel等)、网络API、爬虫等。
- 数据清洗:处理缺失值、异常值,去除重复数据,转换数据类型,标准化或归一化数据等,以确保数据的质量和分析的准确性。
- 数据探索:使用描述性统计分析、可视化工具(如Matplotlib, Seaborn, Plotly等)对数据进行初步的探索性分析,以便更好地理解数据的结构和特征。
- 数据建模:应用统计学方法或机器学习算法对数据进行建模,以发现数据中的模式和关联,进行预测或分类等任务。
- 模型评估:使用适当的评估指标(如准确率、召回率、F1分数、ROC曲线等)对模型的性能进行评估,并调整模型参数以优化性能。
- 结果解释:将数据分析的结果以易于理解的方式呈现出来,解释模型的结论和意义,确保非技术背景的决策者也能够理解。
- 决策支持:根据数据分析的结果提供决策支持,帮助企业或组织做出更加明智的决策。
- 结果部署:将经过测试和验证的数据分析模型部署到生产环境中,用于实际的数据处理和预测。
- 持续监控与维护:定期监控模型的表现,并根据新收集的数据对模型进行必要的维护和更新,以保持模型的准确性和有效性。
Python提供了强大的库和框架(如Pandas, NumPy, Scikit-learn, TensorFlow, PyTorch等)来支持这些步骤的执行
步骤
导入相关包
import seaborn as sns
import matplotlib.pyplot as plt
读入数据
# 读取CSV文件
data = pd.read_csv('heart_failure.csv')
数据探索(结合数据可视化)
import pandas as pd
# 查看数据的前几行
print("数据的前几行:")
print(data.head())
# 查看数据的整体信息
print("数据的整体信息:")
print(data.info())
# 描述性统计信息
print("描述性统计信息:")
print(data.describe())
# 查看"example"列的唯一值
print("example列的唯一值:")
print(data['example'].unique())
# 统计"example"列的计数
print("example列的计数:")
print(data['example'].value_counts())
# 查找缺失值
print("缺失值统计:")
print(data.isnull().sum())
# 分类变量的计数统计(这里的数据是假设)
categorical_cols =
['红细胞或血红蛋白减少', '是否有糖料病',
'是否有高血压', '性别',
'是否抽烟', '随访期是否死亡']
for col in categorical_cols:
print(f"列名: {col}")
print(data[col].value_counts())
print()
# 目标变量分布
target_col = '随访期是否死亡'
print(f"目标变量: {target_col}")
print(data[target_col].value_counts())
特征相关性分析 (通过热力图的可视化方式来观察)
具体热力图怎么看可自行搜索
#计算特征相关系数
correlation = data.corr()
# 打印特征相关系数矩阵
print(correlation)
# 计算特征相关系数
correlation = data.corr()
# 创建相关热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.title('特征相关热力图')
plt.show()
可视化分析
目标变量的柱状图:
# 目标变量分布
target_col = '随访期是否死亡'
# 统计目标变量的计数
target_counts = data[target_col].value_counts()
# 创建柱状图
plt.bar(target_counts.index, target_counts.values)
plt.xlabel(target_col)
plt.ylabel('计数')
plt.title('目标变量分布')
plt.show()
数值型特征的直方图
# 数值型特征列表
numeric_cols = ['年龄', '血液中CPK酶的水平(mcg/L)', '射血分数', '血液中的血小板(kiloplatelets/mL)', '血肌酐水平', '血清钠', '随访期']
# 创建直方图
for col in numeric_cols:
plt.hist(data[col], bins=10)
plt.xlabel(col)
plt.ylabel('频数')
plt.title(f'{col}的分布')
plt.show()
建立预测模型
# 将特征和目标变量分开
X = data.drop('随访期是否死亡', axis=1)
y = data['随访期是否死亡']
# 将数据分为训练集和测试集
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(X_test)
# 计算模型的准确率、精确率和召回率
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
# 打印模型评估指标
print("准确率:", accuracy)
print("精确率:", precision)
print("召回率:", recall)
完整代码案例
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
# 数据加载
#读取训练集
df = pd.read_csv('http://fdp.csmar.com:7092/group1/M00/15/8C/wKhlJmNfc2aAPCoZABLiIV8SXRM751.csv'
#,index_col=0, #设置第一列ID为行索
)
# 读取测试集
df_new = pd.read_csv('http://fdp.csmar.com:7092/group1/M00/15/8C/wKhlJmNfc2KAC6M2AAPInHU5tGk473.csv'
#,index_col=0, #设置第一列ID为行索
)
# 选择所有数值型的特征
numerical_df = df.select_dtypes(include=['int64', 'float64'])
# 提取特征和目标变量
X = numerical_df.drop(columns=['评分等级'])
y = df['评分等级']
# 用众数补上缺失值
X.mode().to_csv('mode.csv')
for column in X.columns:
X[column].fillna(X[column].mode()[0],inplace=True)
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 对特征进行规范化或规范化。这在数据具有不同范围时非常有用
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 建立随机森林模型
model = RandomForestClassifier()
# 在训练集上训练模型
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算模型的准确率、精确率、召回率和 F1 分数
accuracy = accuracy_score(y_test, y_pred)
#precision = precision_score(y_test, y_pred, average='weighted')
#recall = recall_score(y_test, y_pred, average='weighted')
#f1 = f1_score(y_test, y_pred, average='weighted')
print(accuracy)
# 进行预测
# 选择所有数值型的特征
numerical_df_new = df_new.select_dtypes(include=['int64', 'float64'])
# 提取特征和目标变量
X_new = numerical_df_new.drop(columns=['评分等级'])
y_new = df_new['评分等级']
# 用众数补上缺失值
X_new.mode().to_csv('mode_new.csv')
for column in X_new.columns:
X_new[column].fillna(X_new[column].mode()[0],inplace=True)
# 对特征进行规范化或规范化。这在数据具有不同范围时非常有用
scaler = StandardScaler()
X_new = scaler.fit_transform(X_new)
# 开始预测
predictions = model.predict(X_new)
# 打印预测结果
#print(predictions)
# 输出成CSV文件
df_new["评分等级"]=predictions
df_new[["ID号","评分等级"]].to_csv('predictions.csv',index=False)