DW动手学数据分析Task3:数据重构)

1 数据的合并

  • 首先将所有文件都载入
    import numpy as np
    import pandas as pd
    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")
    

1.1合并方法一:用concat函数

  • 将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up

    list_up = [text_left_up,text_right_up]
    result_up = pd.concat(list_up,axis=1)
    result_up.head()
    
    # 将train-left-down和train-right-down横向合并为一张表,并保存这张表为result_down。
    list_down=[text_left_down,text_right_down]
    result_down = pd.concat(list_down,axis=1)
    
    # 将上边的result_up和result_down纵向合并为result。
    result = pd.concat([result_up,result_down])
    result.head()
    

1.2 合并方法二:使用DataFrame自带的方法join方法和append

  • resul_up = text_left_up.join(text_right_up)
    result_down = text_left_down.join(text_right_down)
    result = result_up.append(result_down)
    result.head()
    

1.3 合并方法三:使用Panads的merge方法和DataFrame的append方法

  • result_up = pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
    result_down = pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)
    result = resul_up.append(result_down)
    result.head()
    
  • 合并方法:

    • 堆叠合并:堆叠合并就是简单的把两个表拼在一起
      • 横向堆叠(concat):axis=1将后一个表的数据堆叠到前一个表的后几列
      • 纵向堆叠(joinappendt):t(axis=0)指将后一个表的数据堆叠到前一个表的下几行
    • 主键合并:指前后两个表按照一个或者多个键匹配的方式连接起来,一般是以某一或多列为键,匹配其他列,很类似 SQL 中的 join。
      • merge 函数和 join 函数都可以实现主键合并
      • merge :不仅可以实现 SQL 中的 join 函数的全部功能,还可以在匹配的过程中对数据进行排序,通过其中的 sort 参数实现。
      • join :与 merge 函数 不同之处在于,join 函数要求两个主键的名称必须相同。
    • 重叠合并:数据处理的过程中会出现同样一份数据存储在两张表中,哪一张的数据都不算全,但是如果将其中一个表的数据补充进另外一个表中,生成的这张新表则是相对完整的数据。这种方法就叫重叠合并
      • combine_first函数

    参考文章

  • 分别介绍:

    • concat函数:
      • objs:参与连接的列表或字典,且列表或字典里的对象是pandas数据类型,唯一必须给定的参数
      • axis:指明连接的轴向,0是纵轴(上下合并),1是横轴,默认是0
      • join:指明轴向索引的索引是交集还是并集,‘inner’(交集),‘outer’(并集),默认是‘outer’

      注意:concat不会去重,要达到去重的效果可以使用drop_duplicates方法

    • join函数:
      • 参数意义基本和merge函数相同,只是join默认左外连接
    • merge函数:根据两组数据中的关键字key来合并(key在两组数据中是完全一致的)。
      • how:连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’
      • on:用于连接的列名,必须同时存在于左右两个DataFrame对象中
      • left_index:使用左则DataFrame中的行索引做为连接键
      • right_index:使用右则DataFrame中的行索引做为连接键
    • append函数:append只有纵向合并,没有横向合并

    注意:
    1 join方法默认为左外连接how=left。
    2 concat默认的是外连接(outer join)
    3 merge默认的是内连接(inner join)


2 换一种角度看数据

  • 将数据变为Series类型的数据

    # 将完整的数据加载出来
    text = pd.read_csv('result.csv')
    text.head()
    # 代码写在这里
    unit_result=text.stack().head(20)
    unit_result.head()
    

    在这里插入图片描述

    #将代码保存为unit_result.csv
    unit_result.to_csv('unit_result.csv')
    test = pd.read_csv('unit_result.csv')
    test.head()
    

    在这里插入图片描述

  • stack函数:堆叠数组
    参考


3 数据聚合与运算

3.1 groupby机制

  • groupby函数:数据的分组和分组运算
  • 格式:df[].groupby([df[属性],df[属性]).mean()
    • df[]:(指输出数据的结果属性名称)
    • df[属性]:(指分类的属性,数据的限定定语,可以有多个)
    • mean():(对于数据的计算方式——函数名称)

3.2 数据运算

  • 任务二:计算泰坦尼克号男性与女性的平均票价

    df  = text['Fare'].groupby(text['Sex'])
    means = df.mean()
    means
    

    在这里插入图片描述

  • 任务三:统计泰坦尼克号中男女的存活人数

    survived_sex = text['Survived'].groupby(text['Sex']).sum()
    survived_sex.head()
    

    在这里插入图片描述

  • 任务四:计算客舱不同等级的存活人数

    survived_pclass = text['Survived'].groupby(text['Pclass'])
    survived_pclass.sum()
    

    在这里插入图片描述

    思考:从上面的数据可以看出,男性平均票价约是女性的两倍,女性存活的人数约是男性的两倍,并不是客舱等级越高存活人数越多,三等略低于一等舱存活数,二等舱存活人数最少。

  • agg()函数:agg函数通常用于调用groupby()函数之后,对数据做一些聚合操作,包括sum,min,max以及其他一些聚合函数

  • 任务五:统计在不同等级的票中的不同年龄的船票花费的平均值

    text.groupby(['Pclass','Age'])['Fare'].mean().head()
    

    在这里插入图片描述

  • 任务六:将任务二和任务三的数据合并,并保存到sex_fare_survived.csv

    result = pd.merge(means,survived_sex,on='Sex')
    result
    result.to_csv('sex_fare_survived.csv')
    

    在这里插入图片描述

  • 任务七:得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率(存活人数/总人数)

    #不同年龄的存活人数
    survived_age = text['Survived'].groupby(text['Age']).sum()
    survived_age.head()
    

    在这里插入图片描述

    #找出最大值的年龄段
    survived_age[survived_age.values==survived_age.max()]
    

    在这里插入图片描述

    #总存活人数
    _sum = text['Survived'].sum()
    print(_sum)
    # 342
    
    #首先计算总人数
    _sum = text['Survived'].sum()
    
    print("sum of person:"+str(_sum))
    
    precetn =survived_age.max()/_sum
    
    print("最大存活率:"+str(precetn))
    '''
    sum of person:342
    最大存活率:0.043859649122807015
    '''
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值