泰坦尼克

# coding: utf-8

# In[25]:


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


# In[26]:


plt.rcParams['axes.unicode_minus'] = False #允许坐标轴上显示负数
plt.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
plt.style.use('ggplot')   # 使用自带的样式进行美化


# In[27]:


data = pd.read_csv('C:/Users/Administrator/Desktop/train.csv') #读取csv文件


# In[28]:


data.head(10)


# In[29]:


data.describe()


# In[30]:


#data.isnull().sum()将缺失项的数据全部加起来
print("缺少数据:\n",data.isnull().sum())


# In[38]:


#对Age填补空值
data['Age'] = data['Age'].fillna(data['Age'].median())
data.describe()


# In[39]:


#首先设定一个画布或者叫图纸,尺寸为10x10
fig = plt.figure(figsize=(10,10))
fig.set(alpha=0.5)  #设定图标颜色alpha参数

#其次,统计生还者与遇难者的比例
#用pandas的value_count()函数就可以统计出survived取不同值的总数
plt.subplot2grid((2,3),(0,0)) #在一张大图里,(2,3)表示图像分布为2行3列,(0,0)指的是第一行第一列
data.Survived.value_counts().plot(kind = 'bar') #bar表示画条形图,value_counts()表示字段中相同数据的个数
plt.title("获救情况(1为获救)")#puts a title on our graph
plt.ylabel("人数")


# In[40]:


#同理统计一下乘客等级分布的情况
plt.subplot2grid((2,3),(0,1)) #画第二幅图
data.Pclass.value_counts().plot(kind='bar')
plt.ylabel("人数")
plt.title("乘客等级分布")


# In[64]:


#同理统计一下乘客年龄分布的情况
plt.subplot2grid((2,3),(0,2)) #画第二幅图
data['Age2']=0
data.loc[(data['Age']>0)&(data['Age']<18),'Age2']='少年'
data.loc[(data['Age']>=18)&(data['Age']<45),'Age2']='青年'
data.loc[(data['Age']>=45)&(data['Age']<60),'Age2']='中年'
data.loc[data['Age']>=60,'Age2']='老年'
data.Age2.value_counts().plot(kind='bar')
#利用布尔过滤的方法,从乘客等级列表中抽出生还者和遇难者,再进行统计各等级乘客的生还者个数
Survived_0 = data.Age2[data.Survived == 0].value_counts() 
Survived_1 = data.Age2[data.Survived == 1].value_counts()
df0 = pd.DataFrame({'获救':Survived_1, '未获救':Survived_0}) 
df0.plot(kind='bar', stacked=True) #设置stacked=True即可为DataFrame生成堆积柱形图
plt.title("各乘客年龄等级的获救情况")
plt.xlabel("乘客年龄等级") 
plt.ylabel("人数") 
plt.show()


# In[41]:


plt.subplot2grid((2,3),(1,0), colspan=2)#colspan=2表示在选中区域的延伸
data.Age[data.Pclass == 1].plot(kind='kde')#从年龄表中抽出乘客等级为1的名单,作出密度曲线  
data.Age[data.Pclass == 2].plot(kind='kde')
data.Age[data.Pclass == 3].plot(kind='kde')
plt.xlabel("年龄")  #横轴标签设为年龄
plt.ylabel("密度") 
plt.title("各等级的乘客年龄分布")
plt.legend(('1等舱', '2等舱','3等舱'),loc='best')  #legend表示增加图例,loc表示图例所放位置


# In[42]:


plt.subplot2grid((2,3),(1,2))
data.Embarked.value_counts().plot(kind='bar')
plt.title("各登船口岸上船人数")
plt.ylabel("人数")
plt.show()


# In[43]:


#看看各乘客等级的获救情况
fig = plt.figure(figsize=(5,5))
fig.set(alpha=0.2)  # 设定图表颜色alpha参数
#利用布尔过滤的方法,从乘客等级列表中抽出生还者和遇难者,再进行统计各等级乘客的生还者个数
Survived_0 = data.Pclass[data.Survived == 0].value_counts() 
Survived_1 = data.Pclass[data.Survived == 1].value_counts()
df = pd.DataFrame({'获救':Survived_1, '未获救':Survived_0}) 
df.plot(kind='bar', stacked=True) #设置stacked=True即可为DataFrame生成堆积柱形图
plt.title("各乘客等级的获救情况")
plt.xlabel("乘客等级") 
plt.ylabel("人数") 
plt.show()


# In[44]:


#看看各登录港口的获救情况
ig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数
Survived_0 = data.Embarked[data.Survived == 0].value_counts()
Survived_1 = data.Embarked[data.Survived == 1].value_counts()
df=pd.DataFrame({u'获救':Survived_1, u'未获救':Survived_0})
df.plot(kind='bar', stacked=True)
plt.title(u"各登录港口乘客的获救情况")
plt.xlabel(u"登录港口") 
plt.ylabel(u"人数") 
plt.show()


# In[45]:


#看看各性别的获救情况
fig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数
Survived_m = data.Survived[data.Sex == 'male'].value_counts()
Survived_f = data.Survived[data.Sex == 'female'].value_counts()
df=pd.DataFrame({u'男性':Survived_m, u'女性':Survived_f})
df.plot(kind='bar', stacked=True)
plt.title(u"按性别看获救情况")
plt.xlabel(u"性别") 
plt.ylabel(u"人数")
plt.show()


# In[46]:


#然后我们再来看看各种舱级别情况下各性别的获救情况
fig=plt.figure()
fig.set(alpha=0.65) # 设置图像透明度,无所谓
plt.title(u"根据舱等级和性别的获救情况")
 
ax1=fig.add_subplot(141)   #subplot和add_subplot区别
data.Survived[data.Sex == 'female'][data.Pclass != 3].value_counts().plot(kind='bar', label="female highclass", color='#FA2479')#label??
ax1.set_xticklabels([u"获救", u"未获救"], rotation=0) #将0,1换成未获救,获救
ax1.legend([u"女性/高级舱"], loc='best')

ax2=fig.add_subplot(142, sharey=ax1)  #sharey=???
data.Survived[data.Sex == 'female'][data.Pclass == 3].value_counts().plot(kind='bar', label='female, low class', color='pink')
ax2.set_xticklabels([u"获救", u"未获救"], rotation=0)
plt.legend([u"女性/低级舱"], loc='best')

ax3=fig.add_subplot(143, sharey=ax1)
data.Survived[data.Sex == 'male'][data.Pclass != 3].value_counts().plot(kind='bar', label='male, high class',color='lightblue')
ax3.set_xticklabels([u"获救", u"未获救"], rotation=0)
plt.legend([u"男性/高级舱"], loc='best')

ax4=fig.add_subplot(144, sharey=ax1)
data.Survived[data.Sex == 'male'][data.Pclass == 3].value_counts().plot(kind='bar', label='male low class', color='steelblue')
ax4.set_xticklabels([u"获救", u"未获救"], rotation=0)
plt.legend([u"男性/低级舱"], loc='best')

plt.show()


# In[47]:


g = data.groupby(['SibSp','Survived'])
df = pd.DataFrame(g.count()['PassengerId'])
df


# In[48]:


g = data.groupby(['Parch','Survived'])
df = pd.DataFrame(g.count()['PassengerId'])
df


# In[49]:


#ticket是船票编号,应该是unique的,和最后的结果没有太大的关系,不纳入考虑的特征范畴
#cabin只有204个乘客有值,我们先看看它的一个分布
data.Cabin.value_counts()


# In[50]:


#cabin的值计数太分散了,绝大多数Cabin值只出现一次。感觉上作为类目,加入特征未必会有效
#那我们一起看看这个值的有无,对于survival的分布状况,影响如何吧
fig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数

Survived_cabin = data.Survived[pd.notnull(data.Cabin)].value_counts()
Survived_nocabin = data.Survived[pd.isnull(data.Cabin)].value_counts()
df=pd.DataFrame({u'有':Survived_cabin, u'无':Survived_nocabin}).transpose()
df.plot(kind='bar', stacked=True)
plt.title(u"按Cabin有无看获救情况")
plt.xlabel(u"Cabin有无") 
plt.ylabel(u"人数")
plt.show()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值