案例数据集"/>
python案例数据集
在前面的文章中,我们对肝炎数据集进行了缺失值填充,同时采用决策树构建等方法进一步地对数据集进行研究。在这个过程中,我们也对数据集的数据结构和基本信息有了一定的了解。今天我们将继续对这个数据集进行研究学习。
主要内容:数据分析、可视化
先和还没有数据的同学分享一下数据:
链接:pan.baidu
提取码:jmx7
下面开始我们的实例学习之路~
在进行实例操作之前,我们首先要明确我们的研究目的,由于是学习向,因此开始试验前我们先定几个研究方向:
(1)计算数据集中的 治愈/死亡 病例占比
(2)研究数据集中,“年龄”特征对肝炎是否存在影响
一、导入数据,并进行基本的数据预处理
(包括特征名修改,缺失值填充等,这里想了解更多的同学可以看我之前的文章,有详细讲述)侦探L:Pandas与机器学习实例——肝炎数据集(1)zhuanlan.zhihu
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
df = pd.read_excel(r'C:\Users\Administrator\Desktop\data_feiyan.xlsx',encoding='utf-8')
df.replace('?',np.nan,inplace=True)
df.columns=['是否生还', '年龄', '性别', '类固醇', '抗病毒药','疲惫','不适','厌食','肝大','肝硬化','脾可触','蛛状','腹腔积水','静脉曲张','胆红素'
,'碱性磷酸酯','谷草转氨酶','血蛋白','凝血酶原时间','组织学']
df_mode=['类固醇','疲惫','不适','厌食','肝大','肝硬化','脾可触','蛛状','腹腔积水','静脉曲张']
for i in df_mode:
df.loc[:,i]=df.loc[:,i].fillna(df.loc[:,i].mode()[0])
df_mean=['胆红素','碱性磷酸酯','谷草转氨酶','血蛋白']
for i in df_mean:
df.loc[:,i]=df.loc[:,i].fillna(df.loc[:,i].mean())
df_full=df.drop(labels='凝血酶原时间',axis=1)
df_nan=df.loc[:,'凝血酶原时间']
Ytrain = df_nan[df_nan.notnull()]
Ytest = df_nan[df_nan.isnull()]
Xtrain = df_full.iloc[Ytrain.index]
Xtest = df_full.iloc[Ytest.index]
rfc = RandomForestRegressor(n_estimators=100)
rfc = rfc.fit(Xtrain, Ytrain)
Ypredict = rfc.predict(Xtest)
df_nan[df_nan.isnull()] = Ypredict
查看数据:
df.head()
df.shape
二、开始数据分析工作
先导入我们的绘图库:
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()
1、计算数据集中的 治愈/死亡 病例占比
(在“是否生还”这一列中,1代表死亡病例,2代表治愈病例。)
df_counts=df['是否生还'].replace([1,2],['死亡','治愈']).value_counts()
df_counts
可以看到,在155个患者样本中,治愈123人,病逝32人。
df['是否生还'].replace([1,2],['死亡','治愈']).value_counts(normalize=True)
利用标准化的方式计算出占比。
下面绘制饼状图:
explode = (0, 0.2) # 各类别的偏移半径
color = ['g', 'r']
labels =['治愈','死亡']
plt.pie(df_counts, colors=color, explode=explode,labels=labels,
shadow=True, autopct='%1.1f%%') #设置阴影,偏移度,颜色
# 饼状图呈正圆
plt.axis('equal')
plt.legend()
可以看到,我们的数据集里总共有155个病例。其中,治愈生还率为79.4%,死亡率为20.6%。
2、分析数据集中“年龄”特征与肝炎发病的关系病患者年龄的各项主要数据
死亡病例年龄的各项主要数据
病患者的年龄分布
死亡病例的年龄分布
(1)病患者年龄的各项主要数据:
df_age=df['年龄'].agg(['min','max','mean'])
df_age
可以看到,在数据集中,年龄最小的患者仅7岁,最大的为78岁,平均年龄为41岁。
(2)死亡病例年龄的各项主要数据:
df_age_dead = df[df['是否生还']==1]['年龄'].agg(['min','max','mean'])
df_age_dead
在死亡病例中,年龄最小的为30岁,最大的为70岁,平均年龄为47岁。
(3)病患者的年龄分布:
首先,使用 drop_duplicates()+nunique(),统计病患者的年龄具体有多少个不重复的值:
也就是说,病患者的年龄有49个不重复的值。
下面,我们利用上述得到的信息,作出病患者的年龄分布曲线。
import matplotlib
myfont = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
plt.figure(figsize=(8,6),dpi=80,num=4)
x=range(1,50)
df_age=df['年龄'].sort_values().drop_duplicates()
plt.title('病患者的年龄分布曲线',FontProperties=myfont,fontsize=15)
plt.plot(x,df_age,color='yellow')
plt.ylabel('各个年龄值',FontProperties=myfont,fontsize=15)
plt.show()
可以看到,病患者的年龄分散在在20-70岁这个年龄段,且分布较为均匀。
下一步统计一下各个年龄段的患病人数:
在这里我们总共划分了四个年龄段,分别是:婴幼/少年/青少年时期:18岁以下
青年时期:18岁~45岁
中年时期:46~69岁
老年时期:70岁以上
接着,按照我们划分的年龄段,对数据进行划分:
a=0;b=0;c=0;d=0;
for i in df['年龄']:
if(i<18):
a+=1
elif(i>=18 and i<=45):
b+=1
elif (i>=46 and i<=69):
c+=1
else:
d+=1
print("婴/幼/少年患病:{}".format(a))
print("青年患病人数:{}".format(b))
print("中年患病人数:{}".format(c))
print("老年患病人数:{}".format(d))
接着绘制成饼图:
df_age_divi=[a,b,c,d]
df_age1=pd.Series(df_age_divi,index=['婴/幼/少年患病','青年患病人数','中年患病人数','老年患病人数'])
labels=['婴/幼/少年患病','青年患病人数','中年患病人数','老年患病人数']
plt.figure(figsize=(8,6),dpi=80,num=4)
explode = (0, 0.2, 0.1,0) # 各类别的偏移半径
color = ['g', 'r','b','y']
plt.pie(df_age1, colors=color, explode=explode,labels=labels,
shadow=True, autopct='%1.1f%%') #设置阴影,偏移度,颜色
# 饼状图呈正圆
plt.axis('equal')
plt.legend()
plt.show()
从上图可以看到,在我们的数据集中,中、青年患者占了绝大部分。
(4)死亡病例的年龄分布
df_dead = df[df['是否生还']==1]['年龄']
a1=0;b1=0;c1=0;d1=0;
for i in df_dead:
if(i<18):
a1+=1
elif(i>=18 and i<=45):
b1+=1
elif (i>=46 and i<=69):
c1+=1
else:
d1+=1
df_age_divi1=[a1,b1,c1,d1]
df_age2=pd.Series(df_age_divi1,index=['婴/幼/少年','青年','中年','老年'])
查看死亡病例的年龄分布:
print("婴/幼/少年:{}".format(a1))
print("青年 :{}".format(b1))
print("中年 :{}".format(c1))
print("老年 :{}".format(d1))
绘制水平柱形图:
index=['婴/幼/少年','青年','中年','老年']
plt.xlabel('人数')
plt.barh(index,df_age2,color="#87CEFA")
进一步分析可知,
青年患者的治愈率约为:85%
中年患者的治愈率约为:68%
可以看到,在我们的数据集中,青年患者的治愈率明显高于中年患者(其他两个年龄段的数据量太少,因此不做分析)
以上便是的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~
更多推荐
python案例数据集
发布评论