import pandas as pd
import numpy as np
df = pd.read_csv('/Users/Administrator/Desktop/组对学习/hands-on-data-analysis-master/第二章项目集合/data/train-left-up.csv')
df.head()
1.数据的合并
1.1将data文件夹里面的所有数据都载入,观察数据的之间的关系
df1 = pd.read_csv('train-left-up.csv')
df2 = pd.read_csv('train-left-down.csv')
df3 = pd.read_csv('train-right-up.csv')
df4 = pd.read_csv('train-right-down.csv')
1.2使用concat方法:将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up;将train-left-down和train-right-down横向合并为一张表,并保存这张表result_down。然后将上边的result_up和result_down纵向合并为result。
result_up = pd.concat([df1,df3],axis=1)
result_up.head()
result_down = pd.concat([df2,df4],axis=1)
result = pd.concat([result_up,result_down])
result.head()
1.3使用DataFrame自带的方法join方法和append:完成1.2
result_up = df1.join(df3)
result_down = df2.join(df4)
result = result_up.append(result_down)
result.head()
1.4使用Panads的merge方法和DataFrame的append方法:完成1.2
result_up = pd.merge(df1,df3,left_index=True,right_index=True)
result_down = pd.merge(df2,df4,left_index=True,right_index=True)
result = result_up.append(result_down)
result.head()
#pd.merge行对行连接,pd.concat是轴向进行黏合,join按照索引合并,但要没重复列。不用append只用merge,join不能实现上下合并。
1.5将我们的数据变为Series类型的数据
text = pd.read_csv('result.csv')
text.head()
unit_result=text.stack().head(20)
unit_result.head()
#stack()将行索引变成列索引,unstack()反一反。
text = pd.read_csv('result.csv')
text.head()
2.数据聚合与运算
2.1计算泰坦尼克号男性与女性的平均票价;统计泰坦尼克号中男女的存活人数;计算客舱不同等级的存活人数;统计在不同等级的票中的不同年龄的船票花费的平均值;将任务二和任务三的数据合并,并保存到sex_fare_survived.csv
#GroupBy:拆分-应用-联合。数据包含在pandas对象中,根据一个或多个分组键分离到其他组,分组后一个函数可以应用到各组,结果重新联合从成结果对象。
df1 = text['Fare'].groupby(text['Sex'])
mean = df1.mean()#任务二
df2 = text['Survived'].groupby(text['Sex']).sum()
df2.head()#任务三
df3 = text['Survived'].groupby(text['Pclass']).sum()
df3#任务四
结论:女性选择的平均票价为44.479818,男性为25.523893;女性存活人数233人,男性存活人数109人,女性存活人是男性的两倍;客舱等级1的存活136人,等级2的87人,等级3的119人,
根据票价的选择,女性的存活率很大程度和票价有关,票价高,仓位等级高,存活比例高。
text.groupby('Sex').agg({'Fare':'mean','Survived':'count'}).rename(columns={'Fare':'Fare_mean','Survived':'Survived_sum'})#任务二和三可以通过agg()函数来同时计算。并且可以使用rename函数修改列名。
text.groupby(['Pclass','Age'])['Fare'].mean()#任务五
result = pd.merge(mean,df2,on='Sex')
result.to_csv('sex_fare_survived.csv')#任务六
2.2得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)
age=text['Survived'].groupby(text['Age']).sum()
age.head()
age[age.values==age.max()]
a1=text['Survived'].sum()
a2=age.max()/text['Survived'].sum()
print('存活总人数'+str(a1))
print('最高存活率'+str(a2))