内容正文:
第七单元 7.2 项目2 活动数据可视化
Python程序设计基础
同步精品课堂
高等教育出版社
任务一
安装matplotlib
任务二
绘制各班参赛人数柱形图
任务三
绘制参赛选手性别分布饼图
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
1、掌握 matplotlib 第三方库的安装方法
2、掌握 bar() 绘制柱状图的方法
3、掌握 pie() 绘制饼图的方法
4、能够对 CSV 数据进行统计并可视化
教学重难点
二
教学重点:
1、理解和掌握matplotlib的常用方法
2、能够对数据进行可视化操作
教学难点:
能够对数据进行可视化操作
导入新课
三
端午节是中华民族重要的传统佳节,包粽子和赛龙舟是端午节的重要节庆内容。学校在端午节举办了包粽子比赛,收集了大量参赛数据,包括:学号、姓名、性别、班级、评委评分等。
思考:我们如何直观地向校领导展示各班级的参与热情?
如何清晰地呈现男女生的参与比例?
任务一
安装matplotlib
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
1、Python库的分类与特点
Python标准库:Python安装时自带,可直接导入使用,例如csv(文件处理)、math(数学计算)、random(随机数生成)等,无需额外下载安装。
Python第三方库:需额外下载安装的扩展库,如matplotlib(数据可视化)、pandas(数据处理)、numpy(数值计算)等,提供更丰富的专业功能。
两类库的核心区别:标准库随Python环境一同部署,开箱即用;第三方库需通过工具(如pip)单独安装,以扩展Python在特定领域的应用能力。
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
2、matplotlib库简介
matplotlib是专门用于数据可视化的绘图库,可将抽象数据转化为直观图表,帮助用户快速理解数据特征与规律,能够与其他库(pandas、numpy)无缝配合。
高度可定制,如颜色、标签、图例、网格等
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
3、安装方法
方法一:命令行安装
① 打开命令提示符(Win+R → cmd)
② 输入 pip install matplotlib
③ 等待下载安装完成
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
3、安装方法
方法二:PyCharm安装
① 文件 → 设置 → Python解释器
② 点击“+”号
③ 搜索“matplotlib”
④ 选择版本,点击“安装”
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
4、实践操作
打开命令提示符
输入 pip install matplotlib
等待安装完成
输入 python 进入交互模式
输入 import matplotlib,无报错即成功
在自己的电脑上安装matplotlib并验证
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
5、安装常见问题与解决
网络问题:安装过程中出现网络连接超时或下载速度缓慢。
权限问题:在命令行安装时出现“Permission denied”等权限不足提示。
更换国内镜像源,使用命令“pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib”.
以管理员身份运行命令提示符,在开始菜单中找到“命令提示符”,右键点击并选择“以管理员身份运行”,然后再执行安装命令。
PyCharm中找不到解释器:在Python解释器设置中未找到已安装的Python环境。
点击“添加”按钮,选择“现有环境”,浏览并选择本地已安装Python的可执行文件(如python.exe),添加后再进行matplotlib的安装。
任务二
绘制各班参赛人数柱形图
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
1、柱状图的适用场景
比较不同类别之间的数据,通过柱子高度直观展示各类别数值差异。
各班级人数柱形图
各产品销量柱形图
各城市 GDP 柱形图
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
2、bar()函数参数详解
plt.bar(x, height, width=0.8, bottom=None, align='center', color=None, label=None)
参数 说明 示例
x x轴上的位置(可以是字符串列表或数字列表) ['计算机1班','计算机2班']
height 柱子的高度(数值) [3, 2, 2]
width 柱子宽度,默认0.8 width=0.5(窄一些)
color 柱子填充颜色 color='red' 或 color='#FF5733'
label 图例标签 label='参赛人数'
alpha 透明度(0~1) alpha=0.7
新知讲授
四
plt.title()
设置标题
4、图表美化函数汇总
如:plt.title('标题', fontsize=14)
plt.xlabel()
设置x轴标签
如:plt.xlabel('班级')
plt.ylabel()
设置y轴标签
如:plt.ylabel('人数')
plt.xticks()
设置x轴刻度
如:plt.xticks(rotation=45)(旋转45度)
plt.yticks()
设置y轴刻度
如:plt.yticks([0,2,4,6])
plt.ylim()
设置y轴范围
如:plt.ylim(0, 10)
plt.legend()
显示图例
如:plt.legend()
plt.grid()
显示网格
如:plt.grid(True, linestyle='--')
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
5、柱形图绘制实现思路:①读取CSV并提取班级
import csv
# 存储班级信息的列表
class_list = []
# 打开CSV文件
with open('zongzi_contest.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 跳过标题行
for row in reader:
class_list.append(row[3]) # 假设班级在第4列(索引3)
print(class_list) # 输出:['计算机1班', '计算机1班', '计算机2班', ...]
with open() 自动管理文件关闭
next(reader) 跳过标题行,防止把“班级”也算进去
row[3] 表示第4列(索引从0开始)
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
5、柱形图绘制实现思路:②统计班级人数
# 获取所有不重复的班级名称
unique_classes = set(class_list)
# 创建字典存储统计结果
class_count = {}
for cls in unique_classes:
class_count[cls] = class_list.count(cls)
print(class_count)
# 输出:{'计算机1班': 3, '计算机2班': 2, '计算机3班': 2}
class_list(列表)
计算机1班,计算机1班,计算机2班,计算机3班,计算机1班,计算机2班
set去重(集合)
计算机1班,计算机2班,计算机3班
字典统计
计算机1班:3,计算机2班:2,
计算机3班:1
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
5、柱形图绘制实现思路:③绘制柱状图
import matplotlib.pyplot as plt
x = list(class_count.keys()) # x轴:班级名称
y = list(class_count.values()) # y轴:人数
plt.bar(x, y, width=0.6, color='skyblue')
plt.title('各班级包粽子比赛参赛人数统计', fontsize=16)
plt.xlabel('班级', fontsize=12)
plt.ylabel('参赛人数(人)', fontsize=12)
for i, v in enumerate(y):
plt.text(i, v + 0.2, str(v), ha='center')
plt.show()
新知讲授
四
6、实践操作:使用提供的CSV文件,绘制各班参赛人数柱状图
正确读取CSV文件,提取班级列
统计各班人数
绘制柱状图,柱子颜色自选
添加标题、x轴标签、y轴标签
在每个柱子上方显示具体人数
将图表保存为图片文件
任务三
绘制参赛选手性别分布饼图
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
1、饼图的适用场景
用于展示各部分占总体的比例
性别比例饼图
市场份额饼图
预算分配饼图
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
2、pie()函数参数详解
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, startangle=0, radius=1)
参数 说明 示例
x 各部分的数据(列表) [15, 10]
labels 各部分标签 ['男', '女']
autopct 显示百分比格式 '%1.1f%%'(一位小数);%1.2f%%:保留2位小数;'%d%%'(整数);'%.0f%%'(四舍五入取整)
startangle 起始绘制角度(度) startangle=90(从顶部开始)
colors 颜色列表 ['blue', 'pink']
explode 分离某一块 [0.1, 0](第一块分离)
shadow 是否添加阴影 shadow=True
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
3、饼图绘制实现思路:①提取并统计性别
import csv
gender_list = []
with open('zongzi_contest.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader)
for row in reader:
gender_list.append(row[2]) # 假设性别在第3列(索引2)
male_count = gender_list.count('男')
female_count = gender_list.count('女')
print(f'男生人数:{male_count}')
print(f'女生人数:{female_count}')
机位固定:摄像机本身不移动(如不推、拉、摇、移)。
新知讲授
四
3、饼图绘制实现思路:②绘制饼图
import matplotlib.pyplot as plt
# 数据
sizes = [male_count, female_count]
labels = [f'男生 {male_count}人', f'女生 {female_count}人']
colors = ['lightblue', 'lightcoral']
# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors)
# 添加标题
plt.title('包粽子比赛参赛选手性别比例')
plt.show()
新知讲授
四
4、实践操作:使用提供的CSV文件,绘制性别分布饼图
基础任务
正确统计男女生人数
饼图显示人数和百分比
设置不同的颜色
添加标题
保存图片
进阶挑战
使用explode突出显示女生板块
添加阴影效果
调整起始角度为0度(从右侧开始)
师生互动
五
1、在绘制柱状图时,如何让每个柱子上方显示具体的人数数值?
2、plt.bar() 和 plt.pie() 分别适合展示什么类型的数据?
3、在绘制饼图时,图表中的中文显示为方框,可能是什么原因?如何解决?
答案:
1、使用 plt.text() 函数,遍历每个柱子的位置和高度,在上方添加文本,例如 plt.text(i, v+0.2, str(v))。
2、bar() 适合比较各类别数据大小;pie() 适合展示部分占比。
3、未设置中文字体。解决:添加 plt.rcParams['font.sans-serif'] = ['SimHei'] 和 plt.rcParams['axes.unicode_minus'] = False。
随堂练习
六
1 、在柱形图上添加数值标签使用的函数是( )
A. label()
B. annotate()
C. text()
D. show()
答案:C
解析:text()可以在指定坐标位置添加文本标签。
随堂练习
六
2 、下列( )参数用于设置饼图中每一块的分离程度?
A. labels
B. autopct
C. explode
D. shadow
答案:C
解析:explode参数用于设置饼图中某一块偏离圆心的距离。
随堂练习
六
3 、( )用于设置x轴刻度位置和标签。
A. xlabel()
B. xticks()
C. xlim()
D. axis()
答案:B
解析:xticks()用于设置x轴刻度的位置和对应的标签。
随堂练习
六
4 、在matplotlib中,用于创建新图形的函数是( )
A. plot()
B. figure()
C. show()
D. subplot()
答案:B
解析:figure()用于创建一个新的图形窗口或激活已有图形。
随堂练习
六
5 、(多项选择题)( )是plt.pie()常用的参数?
A. explode
B. labels
C. autopct
D. startangle
答案:ABCD
解析:explode(分离度)、labels(标签)、autopct(百分比格式)、startangle(起始角度)都是pie()常用参数。
随堂练习
六
6 、(多项选择题)下列( )方式可以安装matplotlib库?
A. pip install matplotlib
B. 在PyCharm解释器中安装
C. conda install matplotlib
D. 直接复制文件
答案:ABC
解析:可以通过pip、conda或IDE内置工具安装,直接复制文件不是正确安装方式。
随堂练习
六
7、(是非选择题)next(reader)函数用于读取CSV文件的最后一行。
A.正确
B.错误
答案:B
解析:next(reader)读取下一行,常用于跳过表头。
随堂练习
六
8、(是非选择题)savefig()函数必须在show()之后调用才能保存图片。
A.正确
B.错误
答案:B
解析:savefig()应在show()之前调用,否则可能保存空白图片。
随堂练习
六
9、matplotlib可以与 、 等 无缝集成,为数据分析师和科学家提供了从 到 的完整解决方案。
答案:Numpy Pandas 数据处理库 数据处理 可视化
解析:matplotlib可以与Numpy、Pandas等数据处理库无缝集成,为数据分析师和科学家提供了从数据处理到可视化的完整解决方案。
课堂小结
七
谢谢
$