ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Task03 数据重构

2021-06-19 19:59:57  阅读:182  来源: 互联网

标签:重构 right up down train result Task03 数据 left


这一节的任务为数据重构,它仍然是对数据的理解

1 数据合并

在python中,有三个函数可以将数据合并,分别是concat、join和merge、join,接下来将介绍这三个函数的用法。
1、pd.concat
pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
常用参数说明:
objs:需要合并的数据集,可以是series或dataframe构成的list。
axis=0:默认为根据行来合并,当axis=1时,是以列为轴来合并。
join=’outer‘:默认为外连接(数据的并集),当join=’inner‘时,是内连接(数据的交集)。
join_axes=None:该参数用于指定根据哪个轴来对齐数据。
ignore_index:当该参数为True时,两个表会根据列字段对齐,最后重新赋予一个index。

2、join
dataframe.join(other, on=None, how=‘left’, lsuffix=’’, rsuffix=’’, sort=False)
常用参数说明:
other:dataframe、series或dataframe组成的list形式。
on=None:用于指定依据哪一列合并,默认为依据index合并。
how=’left‘:数据合并的方式,默认数据为左连接,how的其他选项为’right‘、’outer‘、’inner‘。
lsuffix=’’:字符串,将左侧数据框的重复列重新命名为“原始列名+该字符串”。
rsuffix=’’:字符串,将右侧数据框的重复列重新命名为“原始列名+该字符串”。
sort=False:sort默认为False,当其为True时,连接键则按顺序排列。

3、pd.merge
pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None,left_index=False,
right_index=False,sort=False,suffixes=(’_x’, ‘_y’), copy=True,
indicator=False,validate=None)
常用参数说明:
left:一个dataframe。
right:需要合并的对象,也是dataframe。
how=‘inner’:数据合并的方式,默认为inner,其他选项:‘left’, ‘right’, ‘outer’。
on=None:要连接的列或索引,必须同时存在于两个dataframe中,未指定则默认为列名的交集。
left_on=None,right_on=None:左、右侧DataFarme中用作连接键的列。
left_index=False, right_index=False:将左、右侧的行索引用作其连接键。

三者的特点总结
concat:可用于纵向或横向拼接,默认为纵向拼接(即行拼接),连接方式只有内连接和外连接。
merge:可用于纵向或横向拼接,默认为横向拼接,how=’outer‘可实现纵向拼接。连接方式有内、外、左、右连接。
join:只可用于横向拼接,连接方式有内、外、左、右连接。可继续用append实现纵向拼接。

以下以泰坦尼克号数据为例展示这三个函数的用法:

import numpy as np
import pandas as pd
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
#数据的载入
train_left_up=pd.read_csv("./data/train-left-up.csv")
train_left_up.head()
train_left_down=pd.read_csv("./data/train-left-down.csv")
train_left_down.head()
train_right_down=pd.read_csv("./data/train-right-down.csv")
train_right_down.head()
train_right_up=pd.read_csv("./data/train-right-up.csv")
train_right_up.head()

在这里插入图片描述

在这里插入图片描述

可以明显看出的是,这四个数据集是将训练集分为了四部分,分为了左上、左下、右上、右下四个部分。

#使用concat方法将数据集合并
result_up=pd.concat([train_left_up,train_right_up],axis=1)
result_down=pd.concat([train_left_down,train_right_down],axis=1)
result=pd.concat([result_up,result_down])

#使用join和append的方法将数据集合并
result_up=train_left_up.join(train_right_up)
result_down=train_left_down.join(train_right_down)
result=result_up.append(result_down)

#使用merge和append的方法将数据集合并
result_up=pd.merge(train_left_up,train_right_up,left_index=True,right_index=True)
result_down=pd.merge(train_left_down,train_right_down,left_index=True,right_index=True)
result=result_up.append(result_down)

#仅使用merge将数据集合并
result_up=pd.merge(train_left_up,train_right_up,left_index=True,right_index=True)
result_down=pd.merge(train_left_down,train_right_down,left_index=True,right_index=True)
result=pd.merge(result_up,result_down,how='outer')

result

在这里插入图片描述

最后合并完的数据集是一个891行,12列的数据集,这与我们之前所见的训练集的大小相同。

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

使用stack函数能将dataframe转换成series的形式,便于我们以低维度形式处理高维度数据。

result.stack().head(25)

在这里插入图片描述

可以看到结果是经过美化的带有MultilIndex索引的Series的格式。

3 数据聚合与运算

此小节通过groupby函数来对数据进行聚合与运算。
groupby函数简单介绍:
groupby可以对数据进行分组,并对分组后的数据应用函数进行运算。
·groupby的实现方式有两种:
1、df.groupby(‘key2’)[‘key1’]
2、df[‘key1’].groupby(df[‘key2’])
上述代码表示df中key1列按照key2来分组。
·groupby可直接对分组后的函数进行运算(以求均值为例):
1、df.groupby(‘key2’)[‘key1’].mean()
2、df[‘key1’].groupby(df[‘key2’]).mean()

接下来以几个实例展示groupby的用法。

#1、计算泰坦尼克号男性与女性的平均票价
sex_fare=result['Fare'].groupby(result['Sex']).mean()
sex_fare

结果:
Sex
female 44.479818
male 25.523893
Name: Fare, dtype: float64

#2、统计泰坦尼克号中男女的存活人数
sex_survived=result['Survived'].groupby(result['Sex']).sum()
sex_survived

结果:
Sex
female 233
male 109
Name: Survived, dtype: int64

#3、计算客舱不同等级的存活人数
Pclass_survived=result['Survived'].groupby(result['Pclass']).sum()
Pclass_survived

结果:
Pclass
1 136
2 87
3 119
Name: Survived, dtype: int64

其中,任务1和2还可以使用agg函数同时实现

result.groupby('Sex').agg({'Fare':'mean','Survived':'sum'}).rename(columns=
                            {'Fare': 'fare_mean', 'Survived': 'survived_count'})

结果:

在这里插入图片描述

从上述结果可以得到:女性的平均船价为44.48,且女性的存活人数为233个;男性的平均船价为25.52,且男性的存活个数为109个。

#4、统计在不同等级的票中的不同年龄的船票花费的平均值
result['Fare'].groupby([result['Pclass'],result['Age']]).mean().head()

结果:
Pclass Age
1 0.92 151.5500
2.00 151.5500
4.00 81.8583
11.00 120.0000
14.00 120.0000
Name: Fare, dtype: float64

#5、
#得出不同年龄的总的存活人数,然后找出存活人数的最高的年龄,最后计算存活人数最高的存活率
age_survived=result['Survived'].groupby(result['Age']).sum()
age_survived[age_survived.values==age_survived.max()]

people_survived=result['Survived'].sum()
survived_max=age_survived.max()/people_survived
survived_max
#

结果:
Age
24.0 15
Name: Survived, dtype: int64

0.043859649122807015

存活人数最高的年龄为24岁,共有15人存活。该年龄的存活率为4.39%。

标签:重构,right,up,down,train,result,Task03,数据,left
来源: https://blog.csdn.net/weixin_43560929/article/details/118058289

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有