Datawhale分组学习—动手学数据分析(三)

动手学数据分析(三)主要是对数据进行重构,其任务为使用不同函数进行数据合并,以及数据聚合与运算groupby的运用。重点掌握数据合并函数concat、merge和join的用法及区别;groupby机制。

第二章 数据准备

2.2 数据重构——数据合并

有三种常见的数据合并方法:

[En]

There are three common methods of data merging:

1、pandas.concat方法—— 轴向堆叠数据

根据轴方向的不同(axis参数),可以将堆叠分成横向堆叠和纵向堆叠,默认采用的是纵向堆叠方式。在堆叠数据时,默认采用的是外连接,(join参数设为outer)的方式。

用法: pd.concat( [df数据1, df数据2, …… ], axis = 0或1, join = 连接方式, keys = 表明数据来源 )

参数说明:
axis:需要合并链接的轴,0是行,1是列
join:连接的方式 inner,或者outer
keys:为了明确哪些数据来源于哪个变量

2、pandas.merge方法 ——主键合并数据

主键合并根据一个或多个键将不同的DaraFrame对象连接起来,大多数是将两个DataFrame对象中重叠的列作为合并的键。

用法: pandas.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x’, ‘_y’))

参数说明:
how:默认为inner,可设为inner/outer/left/right
on:根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置)
left_on:左连接,以DataFrame1中用作连接键的列
right_on:右连接,以DataFrame2中用作连接键的列
left_index:将DataFrame1行索引用作连接键
right_index:将DataFrame2行索引用作连接键
sort:根据连接键对合并后的数据进行排列,默认为True
suffixes:对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别

3、DataFrame.join方法 ——根据行索引合并数据

用法: DataFrame.join(other, on=None, how=’left’, lsuffix=”, rsuffix=”, sort=False)

参数说明:
other:【DataFrame,或者带有名字的Series,或者DataFrame的list】如果传递的是Series,那么其name属性应当是一个集合,并且该集合将会作为结果DataFrame的列名
on:【列名称,或者列名称的list/tuple,或者类似形状的数组】连接的列,默认使用索引连接
how:【{‘left’, ‘right’, ‘outer’, ‘inner’}, default:’left’】连接的方式,默认为左连接
lsuffix:【string】左DataFrame中重复列的后缀
rsuffix:【string】右DataFrame中重复列的后缀
sort:【boolean, default,False】按照字典顺序对结果在连接键上排序。如果为False,连接键的顺序取决于连接类型(关键字)。

这里顺便提一下DataFrame.append的用法(后续task中要用到)

用法: DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)

参数说明:
other:【DataFrame,或者带有名字的Series,或者DataFrame的list】如果传递的是Series,那么其name属性应当是一个集合,并且该集合将会作为结果DataFrame的列名
on:【列名称,或者列名称的list/tuple,或者类似形状的数组】连接的列,默认使用索引连接
how:【{‘left’, ‘right’, ‘outer’, ‘inner’}, default:’left’】连接的方式,默认为左连接
lsuffix:【string】左DataFrame中重复列的后缀
rsuffix:【string】右DataFrame中重复列的后缀
sort:【boolean, default,False】按照字典顺序对结果在连接键上排序。如果为False,连接键的顺序取决于连接类型(关键字)。

介绍完数据合并的三种方法,开始完成本次的tasks。

#导入数据
lu=pd.read_csv('./data/train-left-up.csv')
ld=pd.read_csv('./data/train-left-down.csv')
rd=pd.read_csv('./data/train-right-down.csv')
ru=pd.read_csv('./data/train-right-up.csv')

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

#方法一 concat方法
result_up=pd.concat([lu,ru],axis =1)

#方法二 merge方法
result_up1=pd.merge(lu,ru,left_index=True,right_index=True)

#方法三 join方法
result_up2=lu.join(ru,lsuffix='_left',rsuffix='_right')

Task2:将train-left-down和train-right-down 横向合并为一张表,并保存这张表为result_down。然后将上边的result_up和result_down 纵向合并为result。

#方法一 concat方法
result_down=pd.concat([ld,rd],axis =1)
result=pd.concat([result_up,result_down],axis=0)
result

#方法二 merge方法+append方法
result_up1=pd.merge(ld,rd,left_index=True,right_index=True)
result1=result_up2.append(result_down2)
result1

#方法三 join方法+append方法
result_down2=ld.join(rd,lsuffix='_left',rsuffix='_right')
result2=result_up1.append(result_down1)
result1

【思考】对比merge、join以及concat的方法的不同以及相同。思考一下在task1和task2的情况下,为什么merge和join都要求使用DataFrame的append方法,如何只要求使用merge或者join可不可以完成task1和task2呢?

concat既可横向连接又可纵向连接;merge和join方法只能横向连接,所以在完成task2时需要使用append进行纵向连接。单独使用merge和join不能完成task2。

4、数据降维与升维

在pandas中Series和DataFrame类型数据之间可以切换。Series数据类型转换成DataFrame数据类型为升维;DataFrame数据类型转换成Series数据类型为降维。

stack:将数据的列”旋转”为行
可将DataFrame数据类型转换成Series数据类型

unstack:将数据的行”旋转”为列
可将层次化索引的Series数据类型转换成DataFrame数据类型

2.3 数据重构——数据聚合运算

在数据集合运算中,主要是掌握groupby函数的用法。groupby 三个阶段”split-apply-combine”(拆分-应用-合并)。

第一阶段——split:按照某一原则(groupby字段)进行拆分,相同属性分为一组。pandas对象(无论是Series、DataFrame还是其他的)中的数据会根据你所提供的一个或多个键被拆分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。其常用参数包括:
by,分组字段,可以是列名/series/字典/函数,常用为列名
axis,指定切分方向,默认为0,表示沿着行切分
as_index,是否将分组列名作为输出的索引,默认为True;当设置为False时相当于加了reset_index功能
sort,与SQL中groupby操作会默认执行排序一致,该groupby也可通过sort参数指定是否对输出结果按索引排序
如:df.groupby(‘列名’,as_index=False).mean()

第二阶段——apply:对拆分后的各组执行相应的转换操作。将一个函数应用(apply)到各个分组并产生一个新值。常用的执行操作方式有4种:
直接添加聚合函数,但只能实现单个函数

[En]

Add aggregate function directly, but can only achieve a single function

常用聚合函数包括:mean/sum/median/min/max/last/first等,最为简单直接的聚合方式
agg(或aggregate),执行更为丰富的聚合功能,常用列表、字典等形式作为参数。
如:df.groupby([‘列名1′,’列名2’]).agg(‘列名3’:[np.mean,min])

transform,其与agg和apply的区别相当于SQL中窗口函数和分组聚合的区别:transform并不对数据进行聚合输出,而只是对每一行记录提供了相应聚合结果;而后两者则是聚合后的分组输出。
如:dfm=df.groupby([‘列名’]).transforms(np.mean)

时间序列的groupby——resample
再次指出,groupby相当于是按照某一规则对数据进行分组聚合,当分组的规则是时间序列时,还存在另一种特殊的分组方式——重采样resample。groupby的4种转换操作自然也都适用于resample。
还可将groupby与resample链式使用,但仅可以是resample在groupby之后,反之则会报错。
如:df.groupby(‘列名’).resample(‘天数’).mean()

第三阶段——combine:输出汇总转换后的各组结果。所有这些函数的执行结果会被合并(combine)到最终的结果对象中。

接下来开始本次数据聚合运算的tasks练习。

Task1:计算泰坦尼克号男性与女性的平均票价

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

Task2:统计泰坦尼克号中男女的存活人数

sex_sum_survived=df['Survived'].groupby(df['Sex']).sum()
sex_sum_survived

Task3:计算客舱不同等级的存活人数

pclass_sum_survived=df['Survived'].groupby(df['Pclass']).sum()
pclass_sum_survived

思考1】从数据分析的角度,上面三个任务统计结果可以得出哪些结论?

1、女性平均票价接近是男性平均票价的两倍。
2、女性存活人数占总存活人数的68.1%,男性存活人数占总存活人数的31.9%;其中女性存活率占全部女性的74.2%,男性存活率占全部男性为18.9%, 女性存活率远高于男性
3、客舱等级1的存活人数最多,客舱等级3次之,客舱等级2最少;客舱等级1的存活率为62.96%,客舱等级2的存活率为47.29%,客舱等级3的存活率为24.25%,可以看出 客舱等级越高存活率越高 。

【思考2】从任务二到任务三中,这些运算可以通过agg()函数来同时计算。并且可以使用rename函数修改列名。

df.groupby('Sex').agg({'Fare':np.mean,'Pclass':'count'}).rename(columns={'Fare':'mean_fare','Pclass':'count_pclass'})

Task4:统计在不同等级的票中的不同年龄的船票花费的平均值

#方法一
df.groupby(['Pclass','Age'])['Fare'].mean()

#方法二
df.groupby(['Pclass','Age']).agg({'Fare': np.mean})

Task5:将task2和task3的数据合并,并保存到sex_fare_survived.csv

#方法一  concat
sex_fare_survived1=pd.concat([avg_fare,sex_sum_survived],axis=1)
sex_fare_survived1
sex_fare_survived1.to_csv('sex_fare_survived1.csv')

#方法二  merge
sex_fare_survived2=pd.merge(avg_fare,sex_sum_survived,on='Sex')
sex_fare_survived2
sex_fare_survived2.to_csv('sex_fare_survived2.csv')

#不能用join方法,因为任务二和任务三得到的数据都是Series类型,只有DataFrame中才有join方法

Task6:得出不同年龄的总的存活人数,然后找出存活人数最多
年龄组,并最终计算最高存活率(幸存者人数/总幸存者人数)

[En]

The age group, and finally calculate the highest survival rate (number of survivors / total number of survivors)

#step1 不同年龄的总的存活人数
age_survived=df['Survived'].groupby(df['Age']).sum()
age_survived

#step2 存活人数最多的年龄段
max_age_survived=age_survived[age_survived.values==age_survived.max()]
max_age_survived

#step3 总的存活人数
age_survived_sum=df['Survived'].sum()
age_survived_sum

#step4 计算存活人数最高的存活率
print("最大存活率:{}".format(max_age_survived.values/age_survived_sum))

Datawhale分组学习—动手学数据分析(三)

【总结】动手学数据分析(三)还是在做数据准备工作。其两大任务为数据合并和数据聚合运算。通过本节学习,主要掌握了合并函数concat、merge和join的用法及区别;以及在pandas中groupby的灵活运用。(PS:希望下次任务能早点完成。)

Original: https://blog.csdn.net/weixin_48410013/article/details/125353731
Author: weixin_48410013
Title: Datawhale分组学习—动手学数据分析(三)



相关阅读

Title: django学习03-创建django项目

创建项目

项目的创建一般有两种方式,一种通过cmd命令行模式,另一种是通过ide创建。其中cmd创建方式如下:

命令行模式创建django项目

在搜索栏输入cmd,出现命令提示符后,点击 打开或者 以管理员身份运行都可以,不过以管理员身份运行貌似保险一点,或者更具有专业性

Datawhale分组学习—动手学数据分析(三)
进入命令行模式后,如图所示:
[En]

After entering the command line mode, it is shown as follows:

Datawhale分组学习—动手学数据分析(三)

输入命令 d:使路径切换到D盘,使用 mkdir函数创建一个新目录,因为写这个的时候我已经把项目完成的差不多了,所以这个目录就是做一个例子

Datawhale分组学习—动手学数据分析(三)
打开D盘可以看到文件夹创建成功
Datawhale分组学习—动手学数据分析(三)
然后使用 cd函数,使路径切换到新创建的文件夹,随后输入指令:
django-admin startproject 项目名,这个指令的意思很明显,创建一个django类的项目
Datawhale分组学习—动手学数据分析(三)
项目创建成功后,原本空荡荡的Djangoxiangmu文件夹应该多了些许文件,如下:
Datawhale分组学习—动手学数据分析(三)
Datawhale分组学习—动手学数据分析(三)

; 查看项目

我们可以用IDE打开才创建的项目看一看

Datawhale分组学习—动手学数据分析(三)
找到项目文件夹所在,注意选的是刚才创建的 项目名,然后点击🆗
Datawhale分组学习—动手学数据分析(三)
打开后项目展示如下:
Datawhale分组学习—动手学数据分析(三)

文件讲解

您可以看到,在成功创建项目后,会自动生成许多文件

[En]

You can see that many files are automatically generated after the project is created successfully

Datawhale分组学习—动手学数据分析(三)
  • __init__.py
    初始化文件,开始为空,在django项目中可以告诉Django用pymysql来代替默认的MySQLdb
import pymysql
#告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()

__init__.py文件最常用的作用是标识一个文件夹是一个 python包。

__init__.py文件的另一个作用是定义模糊导入时要导入的内容。
如果想对该文件有更多了解【点链接】

  • asgi.py
    用于启动异步通信服务,如在线聊天等异步通信功能。
    [En]

    Used to start asynchronous communication services, such as online chat and other asynchronous communication functions.

    Datawhale分组学习—动手学数据分析(三)
  • settings.py
    项目的配置文件,通过settings可以看出这个文件夹有很大作用,基本功能有改变时区和语言等。
    Datawhale分组学习—动手学数据分析(三)
  • urls.py
    项目的路由设置文件,可以设置项目网站的具体URL内容。
    [En]

    The routing settings file of the project, which can set the specific URL content of the project website.

    Datawhale分组学习—动手学数据分析(三)
  • wsgi.py
    全称为 Python Web Server Gateway Interface,即 Python服务器网关接口,是 Python应用与Web服务器之间的接口,用于Django项目在服务器上的部署和上线,一般不需要修改。
    Datawhale分组学习—动手学数据分析(三)
  • manage.py
    命令行工具,内置多种方式与项目进行交互。在命令提示符窗口下,将路径切换到MyDjango项目并输入python manage.py help,可以查看该工具的指令信息。
    Datawhale分组学习—动手学数据分析(三)
    Datawhale分组学习—动手学数据分析(三)
    查看 manage.py
    Datawhale分组学习—动手学数据分析(三)

; 调试检查设置初设与运行

项目已创建,让我们运行并检查它。

[En]

The project has been created, let’s run it and check it.

Datawhale分组学习—动手学数据分析(三)
Datawhale分组学习—动手学数据分析(三)
点击网址
Datawhale分组学习—动手学数据分析(三)
英文界面显示你已经成功创建一个django项目了,英文看着不舒服就换成中文。
Datawhale分组学习—动手学数据分析(三)
再次双击该URL以查看语言是否已更改。
[En]

Double-click the URL again to see that the language has changed.

Datawhale分组学习—动手学数据分析(三)
项目自动生成的文件(或者说应用什么的)在网站搭建上显然是不够用的,我们需要新建一个应用,在后续的学习中说不定会新建更多应用。
  • 指令: python manage.py startapp 应用名
    将上述指令在终端(terminal)输入
    进入终端只需要点击一下terminal就好
    Datawhale分组学习—动手学数据分析(三)
    我以index01作新应用名,本来想用index的,后来出现错误显示是
  • 'index' conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name.
    翻译过来就是:
  • *“index”与现有Python模块的名称冲突,不能用作应用程序名称。请改名。

(我记得之前有用过这个单词做app名,不知道是不是这个原因。)
输入指令后没有返回参数。刷新左侧的项目列表。如果您键入正确,则应该是以下情况:

[En]

There are no return parameters after the instruction is entered. Refresh the list of items on the left. If you type correctly, it should be the following scenario:

Datawhale分组学习—动手学数据分析(三)

Datawhale分组学习—动手学数据分析(三)
当然,如果项目创建不止于此,还要在 settings.py文件配置好(添加该应用)。
首先,项目配置一般都在 settings.py文件进行,该文件只在主应用(也就是一开始用命令行模式创建的项目)下存在,不能进行偏移。
所以我们找到主应用下的该文件,找到 INSTALLED__APPS,在包括的应用中添加我们新建的应用,引号是英文引号,后面的英文逗号可以加上,以免后续在添加新应用时忘记(注册的应用之间用英文逗号隔开)。
Datawhale分组学习—动手学数据分析(三)
  • 主路由配置文件中的路由分布
    [En]

    Route distribution in the primary routing profile*

    在主应用中找到 urls.py文件,添加子路由

    Datawhale分组学习—动手学数据分析(三)
    随后在子应用中创建子路由文件 urls.py
    Datawhale分组学习—动手学数据分析(三)
  • 然后在子应用的尝试文件中配置view函数(先测试)
    [En]

    then, configure the view function in the attempt file of the sub-application (test it first)*

    Datawhale分组学习—动手学数据分析(三)
  • 然后配置子路由文件
    [En]

    then configure the child routing file*

    Datawhale分组学习—动手学数据分析(三)
  • 重新运行一下看看效果
    Datawhale分组学习—动手学数据分析(三)
    好的,没问题。在浏览器中输入它。
    [En]

    Oke, no problem. Enter it in the browser.

    Datawhale分组学习—动手学数据分析(三)
    奥凯有点不对劲。我看了配置文件,又看了一遍。有一段时间,我认为这是主线的问题。我想定期写这篇文章。
    [En]

    There is something wrong with Oke. I looked at the configuration file and looked at it again. For a time, I thought it was the problem of the main route. I wanted to write it regularly.

    Datawhale分组学习—动手学数据分析(三)
    后来发现
    Datawhale分组学习—动手学数据分析(三)
    我设置的路由路径是 index,输入网址却习惯性的写成了index01,将网址改正以后就好了(改正成index01)
    Datawhale分组学习—动手学数据分析(三)
  • 将文件迁移一下
  • 执行指令 python manage.py migrate
    Datawhale分组学习—动手学数据分析(三)
  • 创建一个超级管理员

首先用户名可以自己随便起,记得就好,电子邮件地址只要符合格式就好,输入密码时不会有显示,所以输入后敲回车就好,只不过需要二次确认,再次输入确认就好,最后在接下来的问题中输入 y超级管理员就创建好了

Datawhale分组学习—动手学数据分析(三)
进入后端查看一下:
输入网址 http://127.0.0.1:8000/admin
输入账号密码
Datawhale分组学习—动手学数据分析(三)
创建成功:
Datawhale分组学习—动手学数据分析(三)
  • 小知识:
    Python Web Server Gateway Interface,即Python Web服务器网关接口,实际上就是一种协议,我们的应用(Django、Flask)实现了WSGI,就可以配合实现了WSGI(uWSGI、gunicorn)的服务器工作了。

最后如果真有人照着我这个敲出问题了,试试 python manage.py migrate 这个命令,这东西我忘记在内容里添上去了

Original: https://blog.csdn.net/qq_52158380/article/details/121696014
Author: Bug码畜
Title: django学习03-创建django项目

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/297409/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【20天快速掌握Python】day12-文件操作

    1.文件的打开与关闭 想一想: 如果想用word编写一份简历,应该有哪些流程呢? 打开word软件,新建一个word文件 写入个人简历信息 保存文件 关闭word软件 同样,在操作…

    Python 2023年1月23日
    035
  • python 画图、折线图、柱状图

    主要只用三个模块:matplotlib、seaborn、plotly 柱状图内容显示中文 plt.rcParams[‘font.sans-serif’] = [‘SimHei’]&…

    Python 2023年1月15日
    017
  • 分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)

    计算机科学一大定律:许多看似过时的东西可能过一段时间又会以新的形式再次回归。 1 模型平均方法(MA) 1.1 算法描述与实现 我们在博客《分布式机器学习:同步并行SGD算法的实现…

    Python 2023年2月1日
    017
  • 知识图谱补全(KGC)论文阅读笔记

    文章目录 1. WHY 为什么需要KGC技术 2. HOW 怎样进行KGC 3. 概念层次知识补全 * 3.1 基于描述逻辑的规则推理机制 3.2 基于机器学习类型推理机制 3.3…

    Python 2023年2月1日
    018
  • python matplotlib 画图

    声明:本文仅提供一个思路,因本人较lan,且近期时间匆忙,因此代码实现有许多不足制之处(详情见正文 四、不足之处 ) 文章目录 * – 一、实验需求 – 二…

    Python 2023年1月14日
    023
  • Conda使用指南

    Conda使用指南 1.Conda是什么? 2.管理Conda 3.使用conda实现环境管理 4.包管理 5.配置管理 6.查询手册 1.Conda是什么? Conda是Anac…

    Python 2023年1月16日
    025
  • 关于 TWE-1 的使用

    由于在做项目的时候需要与主题模型进行对比,被 TWE 这个坑困惑了好几天😫,在这里就做一下记录~ 一、topical_word_embeddings 开源项目 二、gibbslda…

    Python 2023年2月1日
    031
  • Appium+Pytest+Allure实现APP自动化测试,小试牛刀!

    Hi,大家好。Appium结合Pytest开展App自动化测试时,你知道如何自动运行用例并发执行吗?费话不多说,直接上代码, 毕竟想让每个人都能看明白也不容易,所以附上代码,有兴趣…

    Python 2023年1月18日
    023
  • Python解析JSON为实体

    前几天有同事问如何将一个json字符串反序列化为实体,当时只是简单找了一下方案,并未对这个事情做深入的了解。一致感觉这个挺有意思于是今晚就搜索了一些资料并作了测试,感兴趣的同学可以…

    Python 2022年8月12日
    0132
  • pytest测试框架系列 – 一文搞定pytest-html自定义优化HTML测试报告!

    前言 在我们自动化测试过程中,我们最终肯定会生成一个测试报告,测试报告可能为一个txt、xml、json文件、Excel或者HTML报告,大家基本上都偏向于HTML报告,pytes…

    Python 2023年1月17日
    039
  • pandas学习

    列删除pop,del 行删除drop 列表嵌套创建data值,嵌套的是一行一行的数据。 字典创建data值,嵌套的是一列一列的数据。#字典的key为columns,values为S…

    Python 2022年12月31日
    042
  • Python发布微服务到注册中心Nacos

    文章目录 1.准备工作 * 1.1.安装python环境 1.2.安装Flask框架 1.3.安装requests函数库 1.4.安装注册中心nacos 2.python发布htt…

    Python 2023年1月4日
    031
  • jupyter notebook 安装教程

    目录 一、jupyter notebook 简介 二、安装jupyter notebook ​ 三、启动jupyter notebook 一、jupyter notebook 简介…

    2022年8月31日
    0248
  • python 简介

    1 Python 定义 Python 是一种简单易学并且结合了 解释性、编译性、互动性和面向对象的脚本语言。Python 提供了高级数据结构,它的语法和动态类型以及解释性使它成为广…

    Python 2023年1月26日
    018
  • python Numpy 的基础用法以及 matplotlib 基础图形绘制

    python Numpy 的基础用法以及 matplotlib 基础图形绘制 1. 环境搭建 1.1 Anaconda ​ anaconda 集成了数据分析,科学计算相关的所有常用…

    Python 2023年1月10日
    044
  • 感知器算法解决xor函数

    from itertools import count import numpy import random #用到的库。 step_function = lambda x: 1 …

    Python 2023年1月12日
    048
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总