基于Python的数据统计分析、科研绘图及其代码(8.1版)

文摘   2024-10-27 02:00   四川  

前言:Python在统计、绘图方面也有较多的库,更强的扩展性,且机器学习目前主要为Python语言。源代码的意义在于调参。像很多科研绘图的大小、像素、色彩,还有机器学习的耦合效率,都需要经过调参,而这需要在源代码上调试。

一、 数据导入:
Python可读取与处理csv、excel。对于医务工作者,多采用excel格式。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsplt.rc('font',family='Times New Roman')a = 'C:/Users/46685/Desktop/科研数据/数据汇总/新建处理后后连续变量.xlsx'b= pd.read_excel(a,sheet_name = 'Sheet1')b.head()
二、 统计描述:
(一)对多列连续变量的分析,分析对象包括:总数、平均数、标准差、最小值、25%、50%、75%、最大值。
b.describe()   #b为数据

(二)计算方差:
np.std(b)**2

(三)正态分布检测:
a= pd.read_excel(filePath_01,sheet_name = 'Sheet1')ls1 = a["CA724"]ls2 = a["年龄"]data = pd.DataFrame({'CA724':ls1,'年龄':ls2 })# 首先绘制出各属性关系图sns.pairplot(data,kind='scatter',diag_kind='kde')for column in data.columns:    u = data[column].mean() # 计算均值    std = data[column].std() # 计算标准差    r,p = scipy.stats.kstest(data[column],'norm',(u,std))    if p>0.05:        print('拒绝原假设,显著性水平为{},变量{}服从正态分布'.format(p,column))    else:        print('接受原假设,显著性水平为{},变量{}不服从正态分布'.format(p,column))

(四)Pearson相关:
from scipy import statsstats.pearsonr(b.胆总管扩张,b.肿块最大直径)

二、科研制图:
(一) 两两连续变量,单纯散点图:
sns.scatterplot(x=b["胆总管扩张"], y=b["肿块硬度"])

(二)散点图+相关线+柱状图:
sns.jointplot(x='BMI',y='Waist',data=b,kind='reg',height=5,color='green')

(三)柱状图+hex图:
sns.jointplot(x='BMI',y='Waist',data=b,kind='hex',height=5)

(四)Kde图:
sns.jointplot(x='BMI',y='Waist',data=b,kind='kde',height=5)

(五)两两相关矩阵图(柱状+散点):
plt.figure(figsize=(10,8), dpi= 80)sns.pairplot(b, kind="scatter", plot_kws=dict(s=80, edgecolor="white", linewidth=2.5))plt.show()

(六)热力图Hotmap:
df_coor=df.corr()df_coor.head()plt.subplots(figsize=(14,14),dpi=100,facecolor='w')# 设置画布大小,分辨率,和底色fig=sns.heatmap(df_coor,annot=True, vmax=1, square=True, cmap="Blues", fmt='.3f')#annot为热力图上显示数据;fmt='.2f'为数据保留小数点后两位,square呈现正方形,vmax最大值为1figfig.get_figure().savefig('df_corr.png',bbox_inches='tight',transparent=True)#保存图片#bbox_inches让图片显示完整,transparent=True让图片背景透明

三、机器学习:
(一)特征筛选及权重:
 对复杂指标对目标的影响进行筛选,以及提前权重,可视化展现。
from feature_selector import FeatureSelectorfs = FeatureSelector( data= x, labels = y)fs.identify_collinear(correlation_threshold=0.8, one_hot=False)correlated_features = fs.ops['collinear']fs.identify_zero_importance(task = 'classification',  eval_metric = 'auc',  n_iterations = 100,    #n_iterations:模型训练的迭代次数;最终的特征重要性是n次迭代的平均值; early_stopping = False)   # early_stopping: True/False, 是否需要提前停止# list of zero importance featureszero_importance_features = fs.ops['zero_importance']lw = 2plt.figure (figsize=(5,5),dpi=1000)plt.rc('font',family='Times New Roman')fs.plot_feature_importances(threshold = 0.9, plot_n = 14 )plt.show()plt.close()

(二)决策树Decision Tree:
决策树就是通过不断的形成分支来实现最终的分类,一个待预测的数据从根部开始,沿着分支逐级向下,最终可以被分类到一个叶子节点,次叶子节点的值就是当前待预测数据的预测值。              
from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.15,random_state=0)from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier(criterion='entropy',max_depth=5)dtree.fit(x_train,y_train)y_predict = dtree.predict(x_test)
from sklearn.tree import plot_treefrom sklearn.metrics import classification_reportprint(classification_report(y_test,y_predict)) # 输出相关结果的函数
import matplotlib.pyplot as pltfig = plt.figure(figsize=(16,12))a = plot_tree(dtree, feature_names=x.columns, fontsize=12, filled=True, class_names=['0', '1'])

结语:期待更多科研合作,可以是论文、课题形式,协助制图、数据输出。     
咨询内容、联系方式(5.4版)                        

肝病梁韬
健康博主;丁香园最具影响力医生;丁香问答专家;四川消化微创学会委员;全网粉丝80+万;五星好评8千+;肝病、幽门螺杆菌、抗衰老、胃肠、人工智能。合作V: ganbingliangyi
 最新文章