这是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