1. 数据分析:处理和总结实验数据
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 生成随机数据
df = pd.DataFrame(
np.random.random((10, 10)),
columns=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
)
# 计算描述性统计
desc_stats = df.describe().T # 转置,以便每列数据为行
desc_stats["range"] = desc_stats["max"] - desc_stats["min"] # 添加数据范围
# 可视化描述性统计数据为表格
plt.figure(figsize=(10, 4))
sns.set_theme(style="whitegrid")
sns.heatmap(desc_stats[['mean', 'std', 'min', '25%', '50%', '75%', 'max', 'range']].T, annot=True, fmt=".2f", cmap="coolwarm", cbar=False, linewidths=0.5, linecolor='gray')
# 添加标题
plt.title("Descriptive Statistics", fontsize=16)
# 调整布局
plt.tight_layout()
# 显示表格
plt.show()
2. 机器学习:预测模型的构建与验证
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, roc_auc_score, roc_curve
import seaborn as sns
import matplotlib.pyplot as plt
# 生成模拟的基因表达数据(10个基因,100个样本)
np.random.seed(42)
genes = ['Gene' + str(i) for i in range(1, 11)]
data = np.random.rand(100, 10)
# 生成目标变量(例如:0=健康,1=患病)
target = np.random.choice([0, 1], size=100)
# 创建DataFrame
df = pd.DataFrame(data, columns=genes)
df['Target'] = target
# 分割数据集
X = df.drop('Target', axis=1)
y = df['Target']
# 标准化特征数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 构建并训练随机森林模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 在测试集上预测
y_pred = rf.predict(X_test)
# 输出模型评估指标
print(classification_report(y_test, y_pred))
## precision recall f1-score support
##
## 0 0.44 0.78 0.56 9
## 1 0.50 0.18 0.27 11
##
## accuracy 0.45 20
## macro avg 0.47 0.48 0.41 20
## weighted avg 0.47 0.45 0.40 20
# 计算ROC AUC得分
roc_auc = roc_auc_score(y_test, y_pred)
print(f"ROC AUC: {roc_auc:.2f}")
## ROC AUC: 0.48
# 获取特征重要性
feature_importances = rf.feature_importances_
# 创建DataFrame并排序
importance_df = pd.DataFrame({
'Feature': genes,
'Importance': feature_importances
}).sort_values(by='Importance', ascending=False)
# 绘制特征重要性条形图
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df, palette='viridis')
plt.title("Feature Importance in Random Forest Model", fontsize=16)
plt.xlabel("Importance", fontsize=12)
plt.ylabel("Genes", fontsize=12)
plt.tight_layout()
plt.show()
# 计算预测概率
y_prob = rf.predict_proba(X_test)[:, 1]
# 计算FPR和TPR
fpr, tpr, thresholds = roc_curve(y_test, y_prob)
# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='b', label=f'ROC curve (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='gray', linestyle='--') # 随机分类器线
plt.xlabel('False Positive Rate', fontsize=12)
plt.ylabel('True Positive Rate', fontsize=12)
plt.title('ROC Curve', fontsize=16)
plt.legend(loc='lower right')
plt.tight_layout()
plt.show()
3. 数据可视化:高质量科学图表
# 加载包
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 生成随机数据
df = pd.DataFrame(
np.random.random((10, 10)),
columns=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
)
# 创建热力图
plt.figure(figsize=(12, 8)) # 增加图表宽度
sns.set_theme(style="whitegrid", font_scale=1.2) # 设置主题和字体比例
# 绘制热力图
sns.heatmap(df,
annot=True, # 显示数值
annot_kws={"size": 10, "weight": "bold", "color": "black"}, # 注释字体设置
cmap="coolwarm", # 选择配色方案
cbar_kws={"label": "Value"}, # 添加颜色条标签
linewidths=0.8, # 调整网格线粗细
linecolor="gray", # 网格线颜色
fmt=".2f", # 格式化显示的数字
square=True, # 保证图形是正方形
cbar=True) # 显示颜色条
# 添加标题和轴标签
plt.title("Heatmap of Random Data", fontsize=16, pad=20)
plt.xlabel("Columns", fontsize=14)
plt.ylabel("Rows", fontsize=14)
# 调整坐标轴刻度
plt.xticks(rotation=45, fontsize=12)
## (array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]), [Text(0.5, 0, 'a'), Text(1.5, 0, 'b'), Text(2.5, 0, 'c'), Text(3.5, 0, 'd'), Text(4.5, 0, 'e'), Text(5.5, 0, 'f'), Text(6.5, 0, 'g'), Text(7.5, 0, 'h'), Text(8.5, 0, 'i'), Text(9.5, 0, 'j')])
plt.yticks(rotation=0, fontsize=12)
## (array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]), [Text(0, 0.5, '0'), Text(0, 1.5, '1'), Text(0, 2.5, '2'), Text(0, 3.5, '3'), Text(0, 4.5, '4'), Text(0, 5.5, '5'), Text(0, 6.5, '6'), Text(0, 7.5, '7'), Text(0, 8.5, '8'), Text(0, 9.5, '9')])
# 显示图表
plt.show()
小结
👇👇👇关注公众号👇👇👇
我们将从关注我们的精选留言中随机抽取小伙伴赠书,中奖者可获得实体书籍一本,我们包邮赠送。
掌握Python,从零到一速成金融分析高手!实战案例深剖,让数字说话,让决策更精准!深入了解金融数据分析的具体过程和方法,提高实操能力。附赠书中案例源代码。
分享一下你“学习数据分析中遇到的困难”
祝您学习愉快,早日发表高水平论文!感兴趣的朋友,也可以通过下面的链接,直接购买,新年将至,折扣多多,仅需50.33元,立即拥有这本精美的Python数据分析手册。