Python学习题目3(泰坦尼克沉船分析)

这是python系统学习的一个大作业,因为更加综合,所以可能存在更多的问题,谨慎参考。

题目

泰坦尼克号的沉没是历史上最著名的沉船事件之一。1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难。

1.数据获取与整理

使用数据集“泰坦尼克生存数据集”,对数据进行预处理(清洗等)

2.数据统计分析:

(1)分类统计分析,如按性别、乘客所持票类、年龄、船舱、港口等

(2)存活率分析:按性别、乘客所持票类、年龄、船舱等

(3)预测分析:基于上述分析结果,预测存活率最高的乘客特征

(4)按获取的数据信息扩展其他分析……

数据集

给出一个891行的csv文件,对此文件进行数据分析。

代码

 1.分类统计分析
# 用于数据分析
import pandas as pd
import numpy as np

# 用于绘图
import matplotlib.pyplot as plt
import seaborn as sns

#%matplotlib inline
#用在Jupyter notebook中具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像。效果如下:


# 读取前五行数据
data_t = pd.read_csv(r'D:\\Python\\experiment11\\泰坦尼克生存数据集.csv')
data_t.head()
# 数据集信息,包含数据集大小,列名,类型
data_t.info()
data_t.columns.values
# 字段分析
def y(x):
    return data_t[x].unique()
print('='*20 + 'Survived字段内容' + '='*20)
print(y('Survived'))
print('='*20 + 'Sex字段内容' + '='*20)
print(y('Sex'))
print('='*20 + 'Pclass字段内容' + '='*20)
print(y('Pclass'))
print('='*20 + 'Embarked字段内容' + '='*20)
print(y('Embarked'))

# 显示重复的数据数量
data_t.duplicated().value_counts()
# 显示有空值的列
print(data_t['Age'].isnull().value_counts())
print('-'*50)
print(data_t['Cabin'].isnull().value_counts())
print('-'*50)
print(data_t['Embarked'].isnull().value_counts())
print('-'*50)
# 描述性分析
print("描述性分析")
data_t.describe()
print("描述性分析 结束")
# 处理空值
data_t['Age'] = data_t['Age'].fillna(data_t['Age'].mean()).astype(np.int64)
data_t['Embarked'] = data_t['Embarked'].fillna({"Embarked":"S"},inplace=True)
# 删除无关的列       Ticket票名字 Cabin船舱(缺失太多) 
data_t = data_t.drop(['Ticket','Cabin'],axis='columns')
print("data_t.info()-->")
data_t.info()


plt.figure(figsize = (15,8)) # 创建画布

#221表示分成2*2即两行两列共4个区域,需要的时候在22后面分别补1,2,3,4
plt.subplot(221) # 添加第一个子图 生死人数对比柱状图
sns.countplot(x='Survived',data=data_t)
plt.ylabel("人数")
plt.xlabel("柱状图")
plt.title('生还统计')

plt.subplot(222) # 添加第二个子图 生存占比 饼图
total_survived = data_t['Survived'].sum()
total_no_survived = 891 - total_survived
plt.pie([total_survived,total_no_survived],labels=['生','死'],autopct='%1.0f %%')
plt.title('生存率')

plt.subplot(223) # 添加第3个子图 所有票类人数 柱状图
sns.countplot(x='Pclass',data=data_t)
plt.xlabel("票 类")
plt.ylabel("所有人数")
plt.title('不同票类 所有人数')

plt.subplot(224) # 添加第4个子图 不同票类 人数占比 饼图
plt.pie(list(data_t.Pclass.value_counts().sort_index() ),labels=['1','2','3'],autopct='%1.0f%%')


#如何显示中文 / 中文处理
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

plt.show()

运行结果

2. 相关性分析
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv(r'D:\\Python\\experiment11\\泰坦尼克生存数据集.csv',sep=',')
df_survived= df['Survived']
plt.rcParams['font.sans-serif']=['SimHei']
df_corr = [df_survived.corr(df['Age']),
            df_survived.corr(df['Pclass']),
            df_survived.corr(df['Fare']),
            df_survived.corr(df['Parch']),
            df_survived.corr(df['SibSp'])]
plt_x = [1,2,3,4,5]
df_corr_name = ['年龄','票类','票价','父母/孩子个数','兄弟姐妹/配偶个数']
for i in range(len(df_corr)):
    plt.annotate(df_corr[i],xy=(plt_x[i],df_corr[i])) 
print('存活与年龄的相关性为:',df_survived.corr(df['Age']))
print('存活与乘客所持票类的相关性为:',df_survived.corr(df['Pclass']))
print('存活与票价的相关性为:',df_survived.corr(df['Fare']))
print('存活与父母/孩子的个数的相关性为:',df_survived.corr(df['Parch']))
print('存活与兄弟姐妹/配偶的个数的相关性为:',df_survived.corr(df['SibSp']))
plt.bar(plt_x,df_corr)
plt.xticks(plt_x,df_corr_name)
plt.ylabel('相关性(-1~1)', fontdict={'family' : 'SimHei','size' : 18})
plt.yticks(fontproperties = 'Times New Roman', size = 14)
plt.xticks(fontproperties = 'SimHei', size = 14)
plt.xlabel('因素' , fontdict={'family' : 'SimHei','size' : 18})
plt.title('存活率与各因素的相关性',fontdict= {'family':'SimHei', 'size' : 20} )
plt.show()

运行结果

在学习的过程中,参考了不少已有的分享,表示衷心感谢!

相关链接:Python学习题目综合1

相关链接:Python学习题目综合2

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值