首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >零基础5天入门Python数据分析:第五课

零基础5天入门Python数据分析:第五课

作者头像
明月AI
发布2021-10-28 11:27:06
发布2021-10-28 11:27:06
1.8K00
代码可运行
举报
文章被收录于专栏:野生AI架构师野生AI架构师
运行总次数:0
代码可运行

在第一第二课已经讲了notebook的基础使用,python的基础语法及常用的数据结构及其运算,包括:

  • 整型: int
  • 浮点型: float
  • 布尔型: bool
  • 字符串: str
  • 元组: tuple
  • 列表: list
  • 集合: set
  • 字典: dict

其中,前五种类型是不可变类型,后三种是可变类型,而不可变类型才能作为集合的元素或者字典的键。(实际上,基础类型还有一个None类型,该类型只有一个值None)

在第三第四课也还讲了:

  • 格式化输出
  • 错误信息
  • 条件语句
  • 循环语句
  • 推导式
  • 函数

有了这些,基本上可以使用python实现基础的数据分析了。本次课从解决问题入手,假设我们有一个班级的学生的期末考试的成绩的Excel表格,我们现在要实现一些简单的数据分析,主要解决以下问题:

  • 统计班级人数
  • 统计各科平均分
  • 统计总分的平均分
  • 按总分进行排序,并导出数据
  • 统计班级男生女生的人数
  • 统计不同性别的总分的平均分
  • 统计不同性别下,各科的及格人数和不及格人数
  • 学生成绩的分布情况

作为这个系列的最后一篇,今天要要用Python来完成这些基础的数据分析。

说明:下面都是基于notebook进行。

0. 学生成绩数据说明

Excel表格包含4个字段:姓名,性别,语文成绩,数学成绩等,如下:

这就是一个普通的Excel表格。

1. 简单统计

在统计之前,需要先将Excel表格的内容读入内存:

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd

data = pd.read_excel('学生成绩表.xlsx')
# 查看前几行
# 该函数通常是用来查看数据的
data.head()

我们使用pandas这个包来进行数据分析之前,需要先将Excel表格读入内存中,head方法可以显示前几行(默认是5行):

Excel表格中的第一行自动作为列名(也成为列索引),第一列“学生”的左边还有一列数字0,1,2,3...,这是行索引。通过行索引可以找到对应的行,通过列名也可以找到对应的列,下面会有使用。

类似head方法的,还有一个tail方法,用来查看表格数据的最后几行。

1.1 统计班级人数

在我们的例子里,每一行表示一个学生,所以统计人数,只需要计算行数即可:

len函数可以直接返回行数,而常用的应该是使用shape这个属性,返回的是数据的shape,如上的(50, 4),表示该数据集有50行4列的数据。

1.2 统计各科平均分

在pandas中,计算均值的方法是mean:

mean可以直接用在整个数据集(表格)上,这样会直接计算所有数值型字段的均值;也可以单独用着某个字段(列)上,在pandas中访问某个列,只需要使用列名做下标进行访问即可。

类似mean的方法,还有好几个,如max,min,std等。

1.3 统计总分的平均分

计算总分的平均分,如果有一个叫总分的列,那就简单了,不过我们的表格本没有总分这一列,所以我们可以先增加一个总分的列,然后计算这一列的均值。

这个思路可以比对在Excel中的操作。

从上,我们可以看到,往表格增加一个列是非常简单的,这个其实跟在Excel中是非常类似的。

2. 排序

对数据进行排序经常也是经常需要进行的。

2.1 按照总分排序

在pandas中,可以使用sort_values来对数据进行排序:

如果ignore_index设置为False,则学生这一列的左侧的索引就会跟原来的索引一样,例如学生30的索引原来是29。

排序好的数据,我们可以进行导出:

代码语言:javascript
代码运行次数:0
运行
复制
# index=False:这是为了避免将数据的索引也保存到Excel文件中
data_save.to_excel('排序好的成绩表.xlsx', index=False)

3. 分组统计

分组统计有两种方式可以用,一种是分组(groupby),另一种是透视表。

我们在做数据分析时,分组统计是最基础的操作之一。

3.1 统计班级男生女生的人数

在pandas中,groupby可以用来做分组,它返回的是一个可循环的对象,这个对象有一个size方法,就能计算出男生和女生的人数。

对于groupby方法返回值的结构,因为其实一个可循环的对象,所以我们可以直接转化为列表,来查看这个对象的结构:

代码语言:javascript
代码运行次数:0
运行
复制
list(groups)

在notebook中会显示:

代码语言:javascript
代码运行次数:0
运行
复制
[('女',
        学生 性别  语文成绩  数学成绩   总分
  3   学生04  女    40    56   96
  4   学生05  女    67    79  146
  5   学生06  女    84    55  139
  ......
  48  学生49  女    39    51   90),
 ('男',
        学生 性别  语文成绩  数学成绩   总分
  0   学生01  男    93    55  148
  1   学生02  男    85    82  167
  2   学生03  男    21    91  112
  ......
  49  学生50  男    87    52  139)]

这个列表有两个元素,每个元素又是一个元组,元组的第一个元素值是性别,第二个元素其实是一个pandas表格(DataFrame)。

3.2 统计不同性别的总分的平均分

分组对象(GroupBy)其实也是有mean方法的:

类似的还有min,max,std等。

3.3 统计不同性别下,各科的及格人数和不及格人数

要计算及格人数和不及格人数,那我们首先需要判断每一个人是否及格:

这已经成功计算了每一个学生的各科成绩是否及格。不过作为一个强迫症患者,True和False实在看不下去:

这样看着才算比较顺眼一点。有了及格和不及格字段,类似Excel表格中的透视表功能,pandas也有透视表函数:

所谓透视表,涉及到的重要参数有:列字段(columns),行字段(index),值字段(values),还有就是值字段的计算函数aggfunc。图示如下:

这个和Excel中的透视表是非常类似的:

不同版本的Excel会略有不同。

4. 成绩的分布

查看某列数据的值的分布,这也是常见的分析。

4.1 学生成绩的分布情况

我们将总分的划分到不同的区间上,每10分一个区间,统计各个区间上的人数:

然后我们使用plot来画一个直方图:

可视化是分析非常重要的手段,我们在画一个饼图:

对于一些简单的可视化,使用pandas的plot基本也是够的,如果是一些比较复杂的,那就需要使用Matplotlib包了。要想做好数据分析,可视化是必备的技能之一。

5. 练习

上面我们已经讲解完了使用pandas来进行数据分析的基础功能,作为练习:

  1. 带着问题,不看代码自己实现一遍功能。
  2. 把自己能想到的问题,自己试着解决。

6. 附录

6.1 测试数据生成

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np
import pandas as pd

names = ['学生%02d' % i for i in range(1, 51)]
sexes = ['男' if i >= 0.5 else '女' for i in np.random.rand(50)]
scores1 = 65 + np.int64(20*np.random.randn(50))
scores2 = 60 + np.int64(25*np.random.randn(50))
scores1 = [i if i < 100 else 100 for i in scores1]
scores1 = [i if i > 0 else 0 for i in scores1]
scores2 = [i if i < 100 else 100 for i in scores2]
scores2 = [i if i > 0 else 0 for i in scores2]
df = pd.DataFrame([names, sexes, scores1, scores2]).T
df.columns = ['学生', '性别', '语文成绩', '数学成绩']
df.to_excel('学生成绩表.xlsx')

6.2 Pandas介绍

Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。

Pandas 适用于处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy 开发,可以与其它第三方科学计算支持库完美集成。

Pandas 就像一把万能瑞士军刀,做数据分析优势明显。

文档:https://www.pypandas.cn/intro/

Pandas有两种基础数据结构:

维数

名称

描述

1

Series

带标签的一维同构数组

2

DataFrame

带标签的,大小可变的,二维异构表格

从理解上说,可以将Series理解为Excel中的列,一列就对应一个Series结构的数据,而DataFrame可以理解为对应一个Excel表格,一个表格可以包含多列(Series)。

通常情况下,Pandas是面向列的计算,例如计算某列的均值等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 学生成绩数据说明
  • 1. 简单统计
    • 1.1 统计班级人数
    • 1.2 统计各科平均分
    • 1.3 统计总分的平均分
  • 2. 排序
    • 2.1 按照总分排序
  • 3. 分组统计
    • 3.1 统计班级男生女生的人数
    • 3.2 统计不同性别的总分的平均分
    • 3.3 统计不同性别下,各科的及格人数和不及格人数
  • 4. 成绩的分布
    • 4.1 学生成绩的分布情况
  • 5. 练习
  • 6. 附录
    • 6.1 测试数据生成
    • 6.2 Pandas介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档