【python数据分析】分组聚合操作

【python数据分析】分组聚合操作

使用python进行数据分析的基础知识:分组聚合操作:(1)分组聚合操作;(2)数据可视化

一、分组聚合操作

分组聚合操作指的是按照某项规则对数据进行分组,接着对分完组的数据执行描述性统计的操作(比如求总和、求平均值)。

练习数据如下(示例):

import pandas as pd
grade_df = pd.DataFrame({
 '班级': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
                         '性别': ['男', '男', '女', '女', '女', '男', '男', '男', '女', '女'],
                         '眼镜': ['是', '否', '是', '否', '是', '是', '是', '否', '否', '否'],
                         '成绩': [95, 90, 96, 92, 94, 85, 87, 80, 81, 86]})
grade_df # 查看grade_df

二、单层分组聚合操作

单层分组操作

(1)该语法的功能为:对DataFrame对象执行分组操作。其中,参数by代表了我们想要对哪一列数据进行分组操作。

(2)单层分组操作只能根据一列数据进行分组。

(3)如果要对班级进行分组,就可以将列索引’班级’传给参数 by。

(4)df.groupby(by)→df.groupby(‘班级’)

聚合操作

(1)mean()的作用是求平均值。df.groupby(by).mean()的功能是根据一列数据(代码中为’班级’列)进行分组,然后将分组结果的每列数据进行平均值的计算。

(2)对分组结果执行运算,默认会对整数或浮点数类型的数据进行运算。像’性别’、'眼镜’这两列数据的值均为字符串,默认不执行对应的操作。

grade_df2 = grade_df.groupby('性别')['成绩'].median() # 求出不同性别学生数学成绩的中位数

grade_df2 # 查看grader_df2

三、 多层分组聚合操作

多层分组聚合操作

1.利用多层分组聚合操作计算不同班级下不同性别的学生均分的过程.

2.多层分组聚合和单层分组聚合相比,代码是相同的,都是 df.groupby(by)[‘列索引’].mean().

3.代码的运行结果来看,多层分组聚合操作返回的也是一个Series对象.

4.单层分组聚合操作的索引只有一层,而多层分组聚合操作的索引至少有两层.

5.单层分组聚合操作的时候,只需要将一个列索引传给参数by,多层分组聚合操作需要传多个列索引给参数 by.

6.列索引在传进参数by之前,需要先被放进一个“容器”里,这个容器可以是列表.

多层分组聚合后的Series对象转变成DataFrame对象

1.unstack()函数就是解决这个问题的常见方法。它可以将一个多层分组聚合后的Series对象转变成 DataFrame对象.

2…unstack()这个方法是针对多层分组聚合后的Series对象来使用的.作用就是将其索引的最后一列转变成DataFrame对象的列索引,而剩下的索引则转变成DataFrame对象的行索引.

3.具体实现方式:df.unstack()

grade_df6 = grade_df.groupby([‘班级’, ‘眼镜’, ‘性别’])[‘成绩’].mean().unstack()

# 获取不同班级、不同性别、戴与不戴眼镜的学生的最高分
grade_df5 = grade_df.groupby(['班级','眼镜','性别'])['成绩'].max()

# 查看grade_df5
grade_df5 

# 组别信息都出现在一个Series对象的索引中
grade_df6 = grade_df5.unstack()
type(grade_df6)

grade_df6

四、数据可视化

数据可视化可以利用人对形状、颜色的感官敏感,有效地传递信息,帮助用户更直观地从数据中发现关系、规律、趋势,数据可视化可以将枯燥的数据变得生动。折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,一般用来展现数据随时间的变化趋势。折线图从类别上来分,又可以分为单条折线图与多条折线图。

(一)单条折线图

1.绘制单条折线图的代码是:Series 对象.plot(),三个参数:kind(图标类型-字符串),figsize(图标大小-元组),title(图标标题-字符串)

2.参数设置

(1)s.plot(kind=‘line’)绘制单条折线图,kind指的是图表类型

(2)传递一个代表图像宽和高的元组figsize,单位是英寸,figsize=(10,10)

(3)传递一个字符串(名字)给参数title

(二)多条折线图

1.多条折线图的绘制方法是:DataFrame对象.plot()

2.多条折线图是针对一个DataFrame对象来绘制的,而单条折线图是针对一个Series对象来绘制的

3.DataFrame对象.plot()默认会将每一列数据用Series对象.plot()绘制成单条折线图,然后合并到同一张图

(三)饼图

profession = my_data['行业'].value_counts()/my_data['行业'].value_counts().sum()
profession.plot(kind='pie', autopct='%.2f%%', figsize=(7, 7), title='行业频率分布图', label='')

(四)条形图

position = my_data['岗位'].value_counts()/my_data['岗位'].value_counts().sum() #  获取岗位的频率分布
position.plot(kind='bar', figsize=(13, 6), title='岗位频率分布条形图') # 绘制岗位的频率分布条形图

(五)实操代码

# plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

import matplotlib.pyplot as plt # 导入matplotlib库的pyplot模块
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

# 创建李健的数据,数据保存在了下方的Series对象中
li_jian = pd.Series([80, 85, 89, 91, 88, 95],
                    index=['2月', '3月', '4月', '5月', '6月', '7月'])
# 查看li_jian
li_jian
#  绘制单条折线图
li_jian.plot(kind='line', figsize=(10, 10), title='李健月考成绩', fontsize = 10)
# 多条折线图来将这三位学生的成绩同时呈现在一张折线图上,创建三个学生成绩的df
students_grade = pd.DataFrame({
 '李健': [80, 85, 89, 91, 88, 95],
                               '王聪': [95, 92, 90, 85, 75, 80],
                               '过凡': [90, 91, 92, 91, 90, 91]
                              }, index=['2月', '3月', '4月', '5月', '6月', '7月'])

# 绘制多条折线图
students_grade.plot(kind='line', figsize=(7, 7), title='月考成绩')

以上文章简单实现了Python中的分组聚合操作及数据可视化操作,如有兴趣可代码实操

2021年5月9日
                                                                                  青海·西宁

猜你喜欢

转载自blog.csdn.net/m0_59485658/article/details/124696295