|
数据集:
https://www.kaggle.com/ronitf/heart-disease-uci
print(data.target.value_counts())
1 165
0 138
Name: target, dtype: int64
sns.countplot(x='target',data=data)

target1 = len(data[data['target']==1])
target0 = len(data[data['target']==0])
NoHD = target0/len(data['target'])
IsHD = target1/len(data['target'])
0.45544554455445546 0.5445544554455446
pd.crosstab(data.age,data.target).plot(kind='bar',figsize=(18,6))
plt.title('Age distribution for heart attack')
plt.xticks(fontsize=20,rotation=45)
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.savefig('Heartdisease.eps')#eps可以到AI里改美观一点,个人喜好啦
plt.show()

交叉表的利用:crosstab
参照:https://blog.csdn.net/hustqb/article/details/78086394
交叉表(cross-tabulation, 简称crosstab)是一种用于计算分组频率的特殊透视表。

pd.crosstab(data.sex,data.target).plot(kind='bar')
plt.title('Sex distribution for heart attack')
plt.xlabel('Sex')
plt.ylabel('Frequency')
plt.show()

其实用seaborn的countplot效果也差不多吧(?
sns.countplot(x='sex',hue='target',data=data)
plt.show()

plt.scatter(x=data.age[data.target==1],y=data.thalach[data.target==1],c='red')#挑选有病的
plt.scatter(x=data.age[data.target==0],y=data.thalach[data.target==0])#没病的
plt.legend(['HD','NoHD'])
plt.xlabel('Age')
plt.ylabel('Maximum Heart Rate')
plt.show()

再用seaborn试试
g = sns.lmplot(x="age", y="thalach", data=data,
fit_reg=False,legend=False,hue='target',scatter=True)
plt.legend(['HD','NoHD'])
plt.xlabel('Age')
plt.ylabel('Maximum Heart Rate')
plt.show()


print(data.slope.value_counts())
2 142
1 140
0 21
Name: slope, dtype: int64
pd.crosstab(data.slope,data.target).plot(kind='bar')
plt.title('slope frequency')
plt.xlabel('The Slope of The Peak Exercise ST Segment ')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.show()

pd.crosstab(data.fbs,data.target).plot(kind='bar')
plt.title('fbs frequency')
plt.xlabel('The persons fasting blood sugar (> 120 mg/dl, 1 = true; 0 = false)')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.legend(['NoHD','IsHD'])
plt.show()

pd.crosstab(data.cp,data.target).plot(kind='bar')
plt.title('cp frequency')
plt.xlabel('Chest Pain Type')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.legend(['NoHD','IsHD'])
plt.show()

用countplot做效果一样。
sns.countplot(x='cp',hue='target',data=data)
plt.ylabel('Frequency')
plt.xlabel('Chest Pain Type')
plt.show()

sns.stripplot(x='target', y='trestbps', data=data)
plt.show()

有心脏病的人静息血压较低。
plt.figure(figsize=(15,9))
sns.heatmap(data.corr(),annot=True,cmap='coolwarm',linewidths=.1)
plt.show()

总结:分析数据时,离散数据使用了散点图,分类数据采用了crosstab统计不同类出现的频次。 |