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

明月AI 2021-10-28 12:22:27
Python 数据 入门 基础 零基

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

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

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

在第三第四课也还讲了:

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

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

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

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

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

0. 学生成绩数据说明

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

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

1. 简单统计

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

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。

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

# index=False:这是为了避免将数据的索引也保存到Excel文件中
data_save.to_excel('排序好的成绩表.xlsx', index=False)

3. 分组统计

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

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

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

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

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

list(groups)

在notebook中会显示:

[('女',
学生 性别 语文成绩 数学成绩 总分
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 测试数据生成

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是面向列的计算,例如计算某列的均值等。

本文分享自微信公众号 - 野生AI架构师(Moon-CV) ,作者:明月AI

原文出处及转载信息见文内详细说明,如有侵权,请联系 [email protected] 删除。

原始发表时间: 2020-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[明月AI]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1894226

  1. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  2. python给定两个函数和定义域,判定两个函数是否构造为复合函数。
  3. 求 python3.8 有条件的递增方法
  4. 如何让python的//运算得到一个小数点不是0的结果
  5. 关于#matlab# #算法# #python#的问题:校园导航制作
  6. python的字典编程练习。!
  7. Python类的实例化应用实现输入打印
  8. python的字典编程练习,!
  9. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  10. 求 python3.8 有条件的递增递减算法
  11. 如何才能在python中实现动态宽度对齐输出
  12. 14道Python基础练习题(附答案)
  13. python写一个正则,匹配内容以“关于”,(代转)开头的那句话,要怎么写正则?
  14. 来个Python能做的救救孩子.
  15. Python爬虫,写完程序获取不到结果,
  16. python for循环和while循环打印九九乘法表
  17. Python异常
  18. Python请设计一能产生某月份月历的程序,能提示用 户输入某月份第1天是星期几,并将该月份的月历打印出来,求
  19. Python入门语法(简洁不啰嗦)
  20. Python入门与各种系统安装部署应用
  21. 你只认识大众汽车的车标怎么能行?赶紧用python采集所有车标学习一下
  22. python回文词如何以文件形式解决python问题
  23. 工作排程中Bat调用Python 程式无发打开(一闪而过)?
  24. python题目不会写求朋友们帮帮忙
  25. pythonwx内进行for循环导致窗体未响应
  26. Python自动化测试框架,谁才是你的唯一?
  27. 如何删除anaconda文件夹里的python.exe
  28. python爬取数据报错求解决一下
  29. Python编写程序求复利率,复利计算公式为
  30. 每周最怕编程课,懂python的朋友看看我吧
  31. 使用python批量将csv文件转为txt文件
  32. 用python写程序!!救命!!
  33. Python编写程序,输入年龄和出生年份,输入姓名和年龄
  34. Python爬虫,关于Xpath定位与预期不符
  35. python 批量计算的数据 print()到console的数据如何全部保存到指定路径文档,目前只能保存最后一个文件的
  36. 安装Python时出现错误:显示发现windows7 怎么弄
  37. 关于python中的PiP升级,尝试过很多遍了还是这个问题
  38. 这个怎么整啊,刚接触python
  39. 用python做图形旋转,opencv如何自动旋转图片到正常的水平位置
  40. Python零基础入门:字符串使用详解(常用方法及使用案例)
  41. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  42. python中一维数组怎么转置
  43. 遇到一个问题,关于Python的复数的
  44. python批量将文件夹里的csv文件转成txt文件
  45. Python 彻底搞懂列表推导式|初级到进阶(实例30+)
  46. python爬虫,遇到urllib.error.URLError: &lt;urlopen error [Errno 11001] getaddrinfo failed&gt;错误
  47. Python程序设计输入五到十之间的整数n,生成并输出一个n位的验证码,不能把大小写字母和数字全写出来
  48. python程序打包之后没运行tkinter
  49. python提取多个Excel文件内目的格内容按一定格式写入新的Excel。
  50. pandas读取csv文件文件末尾都是NaN值,发生了什么?
  51. Python使用matplotlib可视化自定义背景色实战:自定义可视化图像的背景色(Background Color)
  52. 大学生Python实验的列表与元组
  53. python 关于线程的参数args的问题
  54. 如何用python将pdf转成网页html的格式
  55. python基础题 运行后卡在某一步 随后电脑疯狂运转发声 等待无果
  56. 求大神教怎么用python写字
  57. 云计算开发:Python3-expandtabs()方法详解
  58. 9000字深度整理: 全网最详细 Pandas 合并数据集操作总结!
  59. python这个代码有错误,请帮我修改
  60. python redis自带门神 lock 方法