第二章:数据重构
2.4 数据的合并
2.4.1 将data文件夹里面的所有数据都载入,观察数据的之间的关系
text_left_up=pd.read_csv('data/train-left-up.csv')
text_left_down=pd.read_csv('data/train-left-down.csv')
text_right_up =pd.read_csv('data/train-right-up.csv')
text_right_down=pd.read_csv('data/train-right-down.csv')
2.4.2:使用concat方法:将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up
result_up=pd.concat([text_left_up,text_right_up],axis=1)
result_up.head(3)
2.4.3 使用concat方法:将train-left-down和train-right-down横向合并为一张表,并保存这张表为result_down。然后将上边的result_up和result_down纵向合并为result。
list_down=[text_left_down,text_right_down]
result_down=pd.concat(list_down,axis=1)
result_down.head(3)
list_result=[result_up,result_down]
result=pd.concat(list_result,axis=0)
result.head(5)
2.4.4 使用DataFrame自带的方法join方法和append:完成任务二和任务三的任务
result_up1=text_left_up.join(text_right_up)
result_down1=text_left_down.join(text_right_down)
result1=result_up1.append(result_down1)
result1.head(5)
2.4.5 任务五:使用Panads的merge方法和DataFrame的append方法:完成任务二和任务三的任务
注意:merge这里是根据索引合并,须将left_index=True,right_index=True,否则会报错(你们可以自己试试)
result_up2=pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
result_down2=pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)
result2=result_up2.append(result_down2)
result2.head()
2.4.6 完成的数据保存为result.csv
result.to_csv('result.csv')
2.5 换一种角度看数据
2.5.1 将我们的数据变为Series类型的数据
text=pd.read_csv('result.csv')
#转成series类型
unit_result=text.stack() # stack:行变列,相当于转置了
unit_result
2.6 数据聚合与运算和应用
2.6.2:计算泰坦尼克号男性与女性的平均票价
text=pd.read_csv('result.csv')
means=text['Fare'].groupby(text['Sex']).mean()
means
2.6.3:任务三:统计泰坦尼克号中男女的存活人数
survived_sex =text['Survived'].groupby(text['Sex']).sum()
survived_sex.head()
#也可以先分组:survived_sex =text.groupby('Sex')['Survived'].sum()
2.6.4:计算客舱不同等级的存活人数
text['Survived'].groupby(text['Pclass']).sum()
【思考】从数据分析的角度,上面的统计结果可以得出那些结论
1.从男女的存活人数看:女性大概是男性的两倍(猜测在灾难面前,女生优先救助)
2.客舱等级最高的存活人数最高
【思考】:如果将上面完成的聚合,写在一起怎么搞?利用agg
text.groupby(['Survived']).agg([('Sex','mean'),('Pclass','count')]).rename(columns=
{'Sex': 'mean_sex', 'Pclass': 'count_pclass'})
还有一些列没显示,由于图片太长了
2.6.5:统计在不同等级的票中的不同年龄的船票花费的平均值
text.groupby(['Pclass','Age'])['Fare'].mean().head()
2.6.6将2.6.2和2.6.3的数据合并
result = pd.merge(means,survived_sex,on='Sex')
result
2.6.7:得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)
#不同年龄的总存活人数
survived_age=text.groupby(['Age'])['Survived'].sum()
survived_age
2.6.7:得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)
#找出最大值的年龄段
survived_age[survived_age.values==survived_age.max()]
# 总人数
sum=text['Survived'].sum()
sum
# 存活人数最高的存活率(存活人数/总人数)
precetn =survived_age.max()/sum
print("最大存活率:"+str(precetn))