Task04:数据可视化

第二章第三节:数据可视化

  • 柱状图-Bar
  • 折线图Plot

导库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

导数据

text = pd.read_csv(r'result.csv')
text.head()

一、柱状图-Bar

柱状图是最常见的图表,也最容易解读

  • 适用场合:二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较
  • 局限:只适用中小规模的数据集
  • 可视化展示泰坦尼克号数据集中男女中生存人数分布情况

生成数据

sex=text.groupby('Sex')['Survived'].sum()

简单绘制

sex.plot.bar()
plt.title('Survived_count')
plt.show()

image

泰坦尼克号数据集中男女中生存人与死亡人数的比例图,性别可能会影响存活率

text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

image
lady first!女性存活远高于男性,说明性别也是影响模型的因素

可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况

1表示生存,0表示死亡

pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
pclass_sur

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

image
舱等级为1,即头等舱的获救率最高,超过死亡人数;而舱等级位3的死亡人数最多。舱位等级与钱和地位有一定关联

舱位等级和性别的关系

设置中文显示问题

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

显示所有列

pd.set_option('display.max_columns',None)
显示所有行

pd.set_option('display.max_rows', None)

设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

设置1000列的时候才换行
pd.set_option('display.width', 1000)

plt.figure()

axes1=fig.add_subplot(1,4,1)
axes2=fig.add_subplot(1,4,2)
axes3=fig.add_subplot(1,4,3)
axes4=fig.add_subplot(1,4,4)

text.Survived[text.Sex == 'female'][text.Pclass != 3].value_counts().plot(kind='bar',color='#FA2479')
axes1.set_xticklabels(["获救","未获救"], rotation=0)
plt.legend(["女性/高级舱"], loc='best')

text.Survived[text.Sex == 'female'][text.Pclass == 3].value_counts().plot(kind='bar',color='pink')
axes2.set_xticklabels(["未获救","获救"], rotation=0)
plt.legend(["女性/低级舱"], loc='best')

text.Survived[text.Sex == 'male'][text.Pclass != 3].value_counts().plot(kind='bar',color='lightblue')
axes3.set_xticklabels(["未获救","获救"], rotation=0)
plt.legend(["男性/高级舱"], loc='best')

text.Survived[text.Sex == 'male'][text.Pclass == 3].value_counts().plot(kind='bar',color='steelblue')
axes4.set_xticklabels(["未获救","获救"], rotation=0)
plt.legend(["男性/低级舱"], loc='best')

fig.set(alpha=0.65) # 设置图像透明度,无所谓
plt.title("根据舱等级和性别的获救情况")
plt.show()

绘制登船口岸人数统计

text.Embarked.value_counts().plot(kind='bar')
plt.title("各登船口岸上岸人数")
plt.ylabel('人数')
plt.show()

image

登船港口与获救情况分析

fig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数

Survived_0 = text.Embarked[text.Survived == 0].value_counts()
Survived_1 = text.Embarked[text.Survived == 1].value_counts()
df=pd.DataFrame({'获救':Survived_1, '未获救':Survived_0})
df.plot(kind='bar', stacked=True)
plt.title("各登录港口乘客的获救情况")
plt.xlabel("登录港口") 
plt.ylabel("人数") 

plt.show()

image

堂兄弟妹个数与获救情况分析

Survived_0 = text.SibSp[text.Survived == 0].value_counts()
Survived_1 = text.SibSp[text.Survived == 1].value_counts()
df=pd.DataFrame({'获救':Survived_1,'未获救':Survived_0})
df.plot(kind='bar',stacked=True)
plt.title("堂兄弟妹个数与乘客的获救情况")
plt.xlabel("堂兄弟妹个数")
plt.ylabel("人数") 

plt.show()

image

孩子父母个数与获救情况分析

Survived_0 = text.Parch[text.Survived == 0].value_counts()
Survived_1 = text.Parch[text.Survived == 1].value_counts()
df=pd.DataFrame({'获救':Survived_1,'未获救':Survived_0})
df.plot(kind='bar',stacked=True)
plt.title("父母与小孩个数与乘客的获救情况")
plt.xlabel("父母与小孩个数")
plt.ylabel("人数") 

plt.show()

image
女性存活人数多于男性,且女性存活率更高;头等舱的获救人数最多;S登船口岸死亡人数最多,但是不同口岸与存活率无规律,堂兄弟妹个数和父母小孩个数也没有明细影响

二、折线图Plot

  • 折线图适合二维的大数据集,尤其是那些趋势比单个数据点更重要的场合。还适合多个二维数据集的比较。
  • 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况

计算不同票价中生存与死亡人数 1表示生存,0表示死亡

fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fare_sur

排序后绘折线图

fig = plt.figure(figsize=(20, 8))
fare_sur.plot(grid=True)
plt.legend()
plt.xlabel('Fare')
plt.ylabel('Survived_count')
plt.show()

排序前绘折线图

fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()
fare_sur1

fig = plt.figure(figsize=(20, 8))
fare_sur1.plot(grid=True)
plt.legend()
plt.show()

初步总结:基本上,女性存活高于男性,票价高存活高,舱位等级越高存活越高

可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况

facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()

去除日志警告

import warnings 
warnings.filterwarnings("ignore")
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况

font={"family":"SimHei",
       "size":10}
plt.rc('font',**font)
text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.ylabel('密度')
plt.title('各等级的乘客年龄分布')
plt.legend(('头等舱','2等舱','3等舱'),loc="best")

image

fig,axes=plt.subplots(3,1,figsize=(20,10))
for ind,group in text.groupby(by='Pclass'):
    axes[ind-1].plot(group.groupby(['Age']).size())
    axes[ind-1].set_xlabel('Age')
    axes[ind-1].set_title(str(ind))


【总结】: 1.女性存活率远高于男性,舱位等级越高,存活率越高; 2.舱位等级为1级的乘客年龄分布较平均,集中在青年,中年和老年 3.舱位等级为2级的乘客年龄分布集中在青年和中年,主要在22-35岁 4.舱位等级为3级的乘客年龄分布集中在青年和中年,主要在17-27岁左右

浙ICP备19012682号