ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python打卡第9天

Python打卡第9天 浙大疏锦行001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165importpandas as pdimportmathfrompathlibimportPathimportmatplotlib.pyplot as pltimportnumpy as npimportseaborn as snsimportwarningswarnings.filterwarnings(ignore)plt.rcParams[font.sans-serif][SimHei,Microsoft YaHei]# 优先黑体备选微软雅黑plt.rcParams[axes.unicode_minus]False# 解决坐标轴负号显示方框问题# 用脚本所在目录定位数据文件避免因当前工作目录不同而找不到文件data_pathPath(__file__).resolve().parent.parent/Python打卡训练营/python60-days-challenge-master/heart.csvdatapd.read_csv(data_path)# 在所有特征列中找到标签列label_candidates[target,output,y,label,class,diagnosis]label_colNoneforcandidateinlabel_candidates:ifcandidateindata.columns:label_colcandidatebreak# 如果没找到常见名称则取“最后一列且只包含0/1”的列作为标签iflabel_colisNone:forcolindata.columns[::-1]:ifset(data[col].dropna().unique()).issubset({0,1}):label_colcolbreakiflabel_colisNone:raiseValueError(未找到标签列请手动指定 label_col)print(标签列, label_col)feature_cols[colforcolindata.columnsifcol !label_col]discrete_cols[]continuous_cols[]# 总样本数量n_rowsdata.shape[0]# 只对特征列分类标签列不当作普通特征forcolinfeature_cols:# 不算NaN的唯一值个数nuniquedata[col].nunique(dropnaTrue)dtypedata[col].dtype# 判断条件# 条件1object字符串类型肯定离散# 条件2数值类型但唯一值少这里阈值取15可以自己调ifdtypeobjectornunique 15:discrete_cols.append(col)else:continuous_cols.append(col)print(离散特征列, discrete_cols)print(连续特征列, continuous_cols)# 连续特征合并小提琴图ifcontinuous_cols:n_contlen(continuous_cols)ncols3nrowsmath.ceil(n_cont/ncols)fig, axesplt.subplots(nrows, ncols, figsize(15,4*nrows))axesaxes.flatten()ifisinstance(axes, np.ndarray)else[axes]fori, colinenumerate(continuous_cols):sns.violinplot(datadata, ycol, axaxes[i])axes[i].set_title(f{col} 小提琴图)axes[i].set_xlabel()# 删除多余的空白子图forjinrange(n_cont,len(axes)):fig.delaxes(axes[j])fig.suptitle(连续特征小提琴图合集, fontsize16)plt.tight_layout()save_pathPath(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\day09 pic\continuous_violin_plots.png)plt.savefig(save_path, dpi300, bbox_inchestight)# 离散特征合并核密度图ifdiscrete_cols:n_disclen(discrete_cols)ncols3nrowsmath.ceil(n_disc/ncols)fig, axesplt.subplots(nrows, ncols, figsize(15,4*nrows))axesaxes.flatten()ifisinstance(axes, np.ndarray)else[axes]fori, colinenumerate(discrete_cols):sns.kdeplot(datadata, xcol, fillTrue, axaxes[i])axes[i].set_title(f{col} 核密度图)axes[i].set_xlabel()# 删除多余的空白子图forjinrange(n_disc,len(axes)):fig.delaxes(axes[j])fig.suptitle(离散特征核密度图合集, fontsize16)plt.tight_layout()save_pathPath(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\day09 pic\discrete_kde_plots.png)plt.savefig(save_path, dpi300, bbox_inchestight)# 连续特征与标签的关系箱线图ifcontinuous_cols:n_contlen(continuous_cols)ncols3nrowsmath.ceil(n_cont/ncols)fig, axesplt.subplots(nrows, ncols, figsize(15,4*nrows))axesaxes.flatten()ifisinstance(axes, np.ndarray)else[axes]fori, colinenumerate(continuous_cols):sns.boxplot(datadata, xlabel_col, ycol, axaxes[i])axes[i].set_title(f{col} vs {label_col})axes[i].set_xlabel(label_col)# 删除多余的空白子图forjinrange(n_cont,len(axes)):fig.delaxes(axes[j])fig.suptitle(连续特征与标签关系图箱线图, fontsize16)plt.tight_layout()save_pathPath(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\day09 pic\continuous_vs_label_boxplots.png)plt.savefig(save_path, dpi300, bbox_inchestight)# 离散特征与标签的关系计数图ifdiscrete_cols:n_disclen(discrete_cols)ncols3nrowsmath.ceil(n_disc/ncols)fig, axesplt.subplots(nrows, ncols, figsize(15,4*nrows))axesaxes.flatten()ifisinstance(axes, np.ndarray)else[axes]fori, colinenumerate(discrete_cols):sns.countplot(datadata, xcol, huelabel_col, axaxes[i])axes[i].set_title(f{col} vs {label_col})axes[i].set_xlabel(col)# 删除多余的空白子图forjinrange(n_disc,len(axes)):fig.delaxes(axes[j])fig.suptitle(离散特征与标签关系图计数图, fontsize16)plt.tight_layout()save_pathPath(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\day09 pic\discrete_vs_label_countplots.png)plt.savefig(save_path, dpi300, bbox_inchestight)# 特征间相关系数热力图绿色配色显示相关系数corrdata[feature_cols[label_col]].select_dtypes(includenumber).corr()plt.figure(figsize(12,10))sns.heatmap(corr, annotTrue, fmt.2f, cmapGreens,linewidths0.5, cbar_kws{label:相关系数})plt.title(特征间相关系数热力图, fontsize16)plt.tight_layout()save_pathPath(rD:\Desktop\Postgraduate\PythonStudy\Python打卡训练营\Python打卡训练营\day09 pic\feature_correlation_heatmap.png)plt.savefig(save_path, dpi300, bbox_inchestight)
返回列表