《Python数据预处理》第二章
文章目录
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第1课时教学设计
- 主题:
- 常见的数据类型与数据格式认识
- 一、课程基本信息
- 二、本课教学目标
- 三、教学重点与难点
- (一)教学重点
- (二)教学难点
- 四、教学导入(10分钟)
- 五、知识讲授
- 5.1 数据分类概念
- 5.2 结构化数据
- (2)结构化数据特点
- (3)结构化数据应用
- 5.3 非结构化数据
- (1)概念
- (2)特点
- (3)应用
- 5.4 半结构化数据
- (2)典型格式
- (3)优势
- 六、课堂案例分析
- 七、实验1
- 数据类型识别与分类实验
- 1. 实验名称
- 2. 实验目的
- 3. 实验环境
- 4. 实验内容
- 5. 实验结果
- 6. 实验分析
- 八、课堂总结
- 九、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第2课时教学设计
- 主题:
- 常见数据文件格式与数据准备
- 一、课程基本信息
- 二、本课教学目标
- 三、教学重点与难点
- (一)教学重点
- (二)教学难点
- 四、教学导入(10分钟)
- 五、知识讲授
- 5.1 Excel文件
- (2)Excel特点
- (3)应用场景
- 5.2 CSV文件
- (1)概念
- 示例
- (2)CSV特点
- (3)Python读取CSV
- 5.3 JSON文件
- (1)概念
- 示例
- (2)JSON结构
- (3)JSON转换
- 5.4 XML文件
- (1)概念
- 示例
- (2)XML特点
- 六、四种数据格式比较
- 七、实验2
- 常见文件格式读取实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验准备
- 4. 实验步骤
- 实验2:
- 实验3:
- 八、实验分析
- 九、课堂总结
- 十、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第3课时教学设计
- 主题:
- 网络爬虫获取数据
- 一、课程基本信息
- 二、本课教学目标
- 三、本课教学内容分析
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 什么是网络爬虫
- 6.2 网络爬虫工作流程
- 第一步:
- 请求数据
- 第二步:
- 解析数据
- 第三步:
- 保存数据
- 6.3 URL结构认识
- 示例分析
- 6.4 静态网页与动态网页
- 七、Python网络请求工具
- 7.1 urllib库
- 7.2 requests库
- 八、实验3
- 使用Python获取网页数据实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验原理
- 4. 实验步骤
- 五、实验结果
- 六、保存网页数据
- 实验结果
- 九、实验分析
- 十、课堂讨论
- 十一、课堂总结
- 十二、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第4课时教学设计
- 主题:
- HTML网页解析与Beautiful Soup数据提取
- 一、课程基本信息
- 二、本课教学目标
- 三、本课内容分析
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 HTML基础
- (2)HTML标签结构
- 6.2 网页解析思想
- 6.3 Beautiful Soup介绍
- (2)安装
- 6.4 Beautiful Soup基本使用
- 6.5 find()方法
- 6.6 find_all()方法
- 七、网页图片获取原理
- 八、百度Logo爬取案例讲解
- 九、实验4
- 使用Beautiful Soup爬取网页图片实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验原理
- 4. 实验代码
- 5. 获取图片地址
- 6. 下载图片
- 十、实验结果
- 十一、实验分析
- 十二、课堂案例扩展
- 十三、课堂讨论
- 十四、课堂总结
- 十五、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第5课时教学设计
- 主题:
- 数据读写基础
- 一、课程基本信息
- 二、本课教学目标
- 三、本课内容分析
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 数据读取与写入概念
- 6.2 Python文件操作
- (1)open函数
- (2)读取文件
- (3)关闭文件
- 6.3 文件写入
- 6.4 CSV文件读取
- 方法1:
- 方法2:
- 6.5 CSV文件写入
- 七、Pandas数据输入输出体系
- 八、实验5
- Pandas文件读写实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验准备
- 4. 实验步骤
- 步骤3:
- 步骤4:
- 步骤5:
- 九、实验结果
- 十、实验分析
- 十一、课堂案例拓展
- 十二、课堂讨论
- 十三、课堂总结
- 十四、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第6课时教学设计
- 主题:
- JSON与XML数据读写
- 一、课程基本信息
- 二、本课教学目标
- 三、本课内容分析
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 JSON数据格式
- (2)JSON基本结构
- 6.2 JSON与Python转换
- (1)序列化
- (2)反序列化
- 6.3 JSON文件读写
- 6.4 XML数据格式
- (1)XML概念
- (2)XML结构
- (3)XML组成
- 6.5 Python解析XML
- 七、JSON与XML比较
- 八、实验6
- JSON与XML数据处理实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验一:JSON文件读写
- 4. 实验二:XML解析
- 实验结果
- 九、实验分析
- 十、课堂案例拓展
- 十一、课堂讨论
- 十二、课堂总结
- 十三、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第7课时教学设计
- 主题:
- 数据库存储数据
- 一、课程基本信息
- 二、本课教学目标
- 三、本课内容分析
- 数据库。
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 数据库概念
- (2)数据库组成
- 6.2 为什么使用数据库
- 6.3 关系型数据库
- 常见关系型数据库
- 6.4 MySQL数据库介绍
- 6.5 SQL语言基础
- (1)创建表
- (2)插入数据
- (3)查询数据
- (4)修改数据
- (5)删除数据
- 6.6 Python连接数据库
- 七、Python操作MySQL
- 7.1 创建连接
- 7.2 创建游标
- 7.3 执行SQL
- 7.4 获取结果
- 八、实验7
- Python连接数据库实验
- 实验名称
- 1. 实验目的
- 2. 实验环境
- 3. 实验准备
- 4. 实验步骤
- 实验结果
- 步骤3:
- 输出结果
- 步骤4:
- 九、实验分析
- 十、课堂案例拓展
- 十一、课堂讨论
- 十二、课堂总结
- 十三、课后作业
- 《Python数据预处理》
- 第二章 数据获取与存储
- 第8课时教学设计
- 主题:
- 综合实战:遍历文件批量抽取文本内容
- 一、课程基本信息
- 二、本课教学目标
- 三、本课内容分析
- 四、教学重点与难点
- (一)教学重点
- (二)教学难点
- 五、教学导入(10分钟)
- 六、知识讲授
- 6.1 文件和目录
- 6.2 Python文件路径管理
- 获取当前目录
- 查看目录文件
- 拼接路径
- 6.3 文件遍历
- 方法2:
- 6.4 文本文件读取
- 6.5 文本信息抽取
- 6.6 批量处理流程
- 七、综合案例分析
- 八、实验8
- 遍历文件批量抽取文本内容实验
- 1. 实验名称
- 2. 实验目的
- 3. 实验环境
- 4. 实验准备
- 5. 实验步骤
- 步骤3:
- 步骤4:
- 步骤5:
- 九、实验结果
- 十、实验分析
- 十一、综合项目扩展
- 十二、课堂讨论
- 十三、第二章总结
- 第二章知识结构图
- 十四、第二章实验汇总
- 十五、第二章综合作业
- 章节教学分析
- 课时定位
- 教学目标(知识、能力、素养)
- 重点难点分析
- 教学过程(导入→讲授→案例→总结)
- 知识点详细展开
- 课堂案例
- 实验编号
- 实验目的
- 实验环境
- 实验原理
- 实验步骤
- 完整代码
- 实验结果
- 结果分析
- 课堂讨论问题
- 课后作业
同时,实验会统一编号,例如:
| 编号 | 实验名称 | 对应课时 |
|---|---|---|
| 实验1 | 数据类型识别实验 | 第1课时 |
| 实验2 | Excel/CSV/JSON/XML格式读取实验 | 第2课时 |
| 实验3 | Requests网页数据获取实验 | 第3课时 |
| 实验4 | BeautifulSoup网页解析实验 | 第4课时 |
| 实验5 | Pandas文件读写实验 | 第5课时 |
| 实验6 | JSON/XML数据处理实验 | 第6课时 |
| 实验7 | Python数据库操作实验 | 第7课时 |
| 实验8 | 批量文本抽取综合实战 | 第8课时 |
《Python数据预处理》
第二章 数据获取与存储
第1课时教学设计
主题:
常见的数据类型与数据格式认识
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第1课时 |
| 主题 | 认识不同类型的数据 |
| 教学方式 | 理论讲授+案例分析+实验 |
| 实验编号 | 实验1 |
二、本课教学目标
(一)知识目标
学生能够:
1. 理解数据分类的意义
在实际数据处理中,不同来源的数据具有不同形式。
例如:
企业销售系统:
商品编号
商品名称
销售数量
销售金额
属于:
结构化数据。
而:
用户评论
商品图片
宣传视频
属于:
非结构化数据。
如果不能正确识别数据类型,就无法选择合适的数据获取、存储和处理方法。
2. 掌握三类数据类型
本节重点:
- 结构化数据;
- 半结构化数据;
- 非结构化数据。
教材指出:
按照数据类型分类,大数据领域主要包括:
结构化数据、半结构化数据和非结构化数据三类。
(二)能力目标
学生能够:
- 判断实际数据属于哪种类型;
- 根据数据特点选择存储方式;
- 理解不同数据类型的数据处理方法。
(三)素养目标
培养学生:
- 数据分类意识;
- 数据管理意识;
- 数据工程思维。
让学生认识:
数据处理不是从算法开始,而是从认识数据开始。
三、教学重点与难点
(一)教学重点
重点1:结构化数据
理解:
为什么Excel表格、数据库属于结构化数据。
重点2:半结构化数据
理解:
为什么JSON既不像数据库表格,又不是完全无规则的数据。
重点3:不同数据类型的处理方式
例如:
| 数据 | 处理工具 |
|---|---|
| Excel | Pandas |
| CSV | Pandas/csv |
| JSON | json库 |
| 图片 | OpenCV |
| 文本 | NLP工具 |
(二)教学难点
难点1:
学生容易认为:
“只要是数据,全部都可以放Excel。”
实际上:
Excel适合二维结构数据。
但是:
一张照片:
包含:
- 像素矩阵;
- 颜色信息;
- 文件属性。
无法简单转换为:
姓名—年龄—成绩形式。
难点2:
理解半结构化数据。
例如:
学生信息:
传统数据库:
| 姓名 | 年龄 | 专业 |
|---|---|---|
| 张三 | 20 | 计算机 |
但是学生简历:
{
"name":"张三",
"skill":["Python","Java"],
"project":{
"name":"AI系统"
}
}
字段数量可能变化。
因此:
属于半结构化。
四、教学导入(10分钟)
案例:
某电商平台每天产生的数据:
1. 用户订单
订单编号
用户ID
商品ID
价格
时间
2. 用户评价
这个手机很好用
物流速度快
3. 商品图片
手机.jpg
4. 商品详情接口
{
"name":"手机",
"price":3999
}
提问:
这些数据能否使用同一种方式保存?
学生讨论。
教师总结:
不能。
因为数据结构不同。
引入:
数据分类。
五、知识讲授
5.1 数据分类概念
什么是数据分类?
数据分类:
就是按照数据的属性和特点,将具有相同特征的数据归为同一类别。
目的:
方便:
- 查询;
- 管理;
- 分析;
- 存储。
教材指出:
数据分类是将具有相同属性或特征的数据归集分类,方便查询、识别、管理和使用。
5.2 结构化数据
(1)概念
结构化数据:
也称:
行数据。
特点:
具有固定的数据结构。
通常表现为:
二维表。
例如:
学生信息:
| ID | 姓名 | 性别 | 年龄 |
|---|---|---|---|
| 1 | 李明 | 男 | 12 |
| 2 | 张千 | 女 | 13 |
教材中给出了员工信息、学生信息等二维表示例。
(2)结构化数据特点
① 数据格式固定
例如:
员工表:
必须包含:
员工编号
姓名
部门
工资
新增字段:
需要修改表结构。
② 存储规则明确
常见:
关系数据库。
例如:
MySQL:
employee表
id
name
salary
③ 查询效率高
例如:
查询工资:
SQL:
SELECT salary
FROM employee;
(3)结构化数据应用
教材列举:
- 企业ERP;
- 财务系统;
- 医疗HIS数据库;
- 教育一卡通;
- 政府行政审批系统。
5.3 非结构化数据
(1)概念
非结构化数据:
没有固定数据模型的数据。
例如:
图片:
cat.jpg
视频:
movie.mp4
文本:
新闻.txt
教材指出:
非结构化数据没有预定义数据模型,不方便使用二维逻辑表表示。
(2)特点
① 格式多样
包括:
文本:
txt
doc
ppt
图像:
png
jpeg
gif
音频:
mp3
wav
视频:
mp4
avi
教材列出了文本、图像、音频、视频等常见形式。
② 难以直接分析
例如:
一张医学CT图片:
人可以理解:
“肺部异常”
但是计算机需要:
- 图像矩阵;
- 特征提取;
- 深度学习模型。
(3)应用
主要应用:
图像识别
例如:
人脸识别。
医疗影像
例如:
CT辅助诊断。
文本分析
例如:
情感分析。
教材列举:
图片识别、人脸识别、医疗影像、文本分析等领域。
5.4 半结构化数据
(1)概念
半结构化数据:
介于结构化和非结构化之间。
具有:
部分结构。
但是:
结构不固定。
教材指出:
半结构化数据也称自描述结构,介于结构化和非结构化之间。
(2)典型格式
JSON
例如:
{
"name":"Tom",
"age":20,
"skill":[
"Python",
"Java"
]
}
XML
例如:
<student>
<name>Tom</name>
<age>20</age>
</student>
教材指出:
常见半结构化数据包括XML和JSON。
(3)优势
相比数据库:
扩展性强。
例如:
原:
{
"name":"Tom"
}
增加:
{
"name":"Tom",
"phone":"123456"
}
无需修改整体结构。
六、课堂案例分析
案例:
智慧校园数据
判断类型:
学生成绩数据库
答案:
结构化。
原因:
二维表。
学生照片
答案:
非结构化。
原因:
图片。
学生档案JSON
答案:
半结构化。
原因:
字段可变化。
七、实验1
数据类型识别与分类实验
1. 实验名称
现实数据类型分类实验
2. 实验目的
通过实际案例:
- 理解三类数据;
- 掌握数据分类方法;
- 建立数据处理思维。
3. 实验环境
无需代码。
工具:
Excel
文本编辑器
4. 实验内容
判断以下数据类型:
| 编号 | 数据 | 类型 |
|---|---|---|
| 1 | 学生成绩Excel表 | |
| 2 | 医院CT图片 | |
| 3 | 用户评论文本 | |
| 4 | 商品JSON接口 | |
| 5 | 企业MySQL数据库 |
5. 实验结果
| 编号 | 数据 | 类型 |
|---|---|---|
| 1 | 学生成绩Excel表 | 结构化 |
| 2 | 医院CT图片 | 非结构化 |
| 3 | 用户评论文本 | 非结构化 |
| 4 | 商品JSON接口 | 半结构化 |
| 5 | 企业MySQL数据库 | 结构化 |
6. 实验分析
通过实验可以发现:
数据类型不同:
决定:
- 获取方式不同;
- 存储方式不同;
- 分析方法不同。
例如:
结构化数据:
重点:
查询统计。
非结构化:
重点:
特征提取。
八、课堂总结
本节学习:
数据三分类
结构化数据
|
|
半结构化数据
|
|
非结构化数据
核心思想:
数据获取和存储的第一步,是认识数据。
九、课后作业
理论题
-
什么是结构化数据?
-
为什么JSON属于半结构化数据?
-
图片为什么属于非结构化数据?
实践题
收集:
5种生活中的数据。
例如:
照片、Excel、聊天记录、网页数据。
完成:
数据名称 + 数据类型 + 推荐存储方式。
《Python数据预处理》
第二章 数据获取与存储
第2课时教学设计
主题:
常见数据文件格式与数据准备
Excel、CSV、JSON、XML文件认识与处理
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第2课时 |
| 主题 | 常见数据文件格式 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验2 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解数据文件存储格式的意义;
- 掌握Excel、CSV、JSON、XML四种常见数据格式;
- 了解不同格式的数据结构特点;
- 理解不同格式在数据处理中的应用场景。
(二)能力目标
学生能够:
- 根据数据特点选择合适的数据格式;
- 使用Python读取常见数据文件;
- 使用Pandas完成简单数据导入;
- 使用JSON模块完成数据转换。
(三)素养目标
培养学生:
- 数据规范意识;
- 数据交换意识;
- 数据工程实践能力。
三、教学重点与难点
(一)教学重点
重点1:CSV数据格式
原因:
CSV是数据分析中最常见的数据交换格式。
教材指出:
CSV文件是最常见的供机器读取的文件格式,以纯文本形式存储表格数据。
重点2:JSON数据格式
JSON目前广泛用于:
- Web接口;
- 数据传输;
- 前后端交互。
教材指出:
JSON是数据存储和传输的重要格式,经常用于服务器向网页发送数据。
重点3:Python读取不同格式数据
数据预处理第一步:
不是分析数据,
而是:
获取数据。
(二)教学难点
难点1:
理解:
文件扩展名 ≠ 数据结构。
例如:
.csv
只是文件格式。
真正的数据结构:
取决于:
字段、分隔符、组织方式。
难点2:
理解JSON和Python对象转换。
例如:
Python:
dict
转换:
↓
JSON字符串
再转换:
↓
Python对象
四、教学导入(10分钟)
教师展示:
某企业员工数据:
方式1:
Excel:
| 姓名 | 年龄 | 工资 |
|---|---|---|
| 张三 | 25 | 8000 |
方式2:
CSV:
姓名,年龄,工资
张三,25,8000
方式3:
JSON:
{
"name":"张三",
"age":25,
"salary":8000
}
方式4:
XML:
<Employee>
<Name>张三</Name>
<Age>25</Age>
</Employee>
提问:
这些数据表达的是同一个信息,
为什么形式不同?
引出:
数据格式。
五、知识讲授
5.1 Excel文件
(1)概念
Excel是一种常见电子表格数据格式。
常见扩展名:
| 格式 | 说明 |
|---|---|
| xls | Excel 2003格式 |
| xlsx | Excel 2007以后格式 |
| xlsm | 带宏Excel格式 |
| et | WPS表格格式 |
教材列出了常见Excel格式及特点。
(2)Excel特点
优点:
① 可视化强
用户可以直接查看。
② 操作简单
适合:
人工录入。
③ 支持公式计算。
缺点:
① 数据规模有限
大量数据:
可能运行缓慢。
② 人工操作容易出错
例如:
输入:
年龄:
20
错误:
200
(3)应用场景
常见:
- 企业报表;
- 实验数据;
- 调查问卷;
- 财务统计。
5.2 CSV文件
(1)概念
CSV:
Comma-Separated Values
中文:
逗号分隔值。
特点:
纯文本保存表格数据。
教材指出:
CSV文件由多个记录组成,记录之间通过换行符分隔,每条记录具有相同字段序列。
示例
name,age,score
Tom,20,90
Jack,21,85
结构:
第一行:
字段名。
后续:
数据。
(2)CSV特点
优点
1. 文件小
没有复杂格式。
2. 通用性强
几乎所有数据软件支持。
3. 适合机器处理。
缺点
1. 不保存格式
例如:
字体、颜色。
2. 不支持复杂结构。
(3)Python读取CSV
方法1:
csv库
import csv
with open(
"student.csv",
"r"
) as f:
reader=csv.reader(f)
for row in reader:
print(row)
方法2:
Pandas读取
import pandas as pd
df=pd.read_csv(
"student.csv"
)
print(df)
教材介绍Pandas可以通过read_csv()读取CSV,并自动转换为DataFrame对象。
5.3 JSON文件
(1)概念
JSON:
JavaScript Object Notation
是一种轻量级数据交换格式。
示例
{
"student":
{
"name":"Tom",
"age":20
}
}
(2)JSON结构
JSON主要由:
对象
对应Python:
dict
数组
对应Python:
list
教材指出:
JSON对象对应Python字典,JSON数组对应Python列表。
(3)JSON转换
Python → JSON
叫:
序列化。
函数:
json.dumps()
JSON → Python
叫:
反序列化。
函数:
json.loads()
教材列出了:
- json.dumps
- json.loads
- json.dump
- json.load
等常用函数。
5.4 XML文件
(1)概念
XML:
Extensible Markup Language
可扩展标记语言。
示例
<Student>
<Name>
Tom
</Name>
<Age>
20
</Age>
</Student>
(2)XML特点
优点:
1. 可读性强
人和机器都可以读取。
教材指出:
XML数据既便于机器读取,也便于人工读取。
2. 扩展性强
标签可以自定义。
例如:
<Height>
180
</Height>
六、四种数据格式比较
| 格式 | 结构 | 应用 |
|---|---|---|
| Excel | 二维表 | 人工管理数据 |
| CSV | 二维文本 | 数据交换 |
| JSON | 键值结构 | 网络接口 |
| XML | 标签结构 | 数据传输 |
七、实验2
常见文件格式读取实验
实验名称
Python读取Excel、CSV、JSON文件
1. 实验目的
掌握:
- CSV读取;
- JSON解析;
- Excel读取;
- 数据转换为DataFrame。
2. 实验环境
软件:
- Python3
- Jupyter Notebook
库:
pandas
json
3. 实验准备
创建:
student.csv
内容:
姓名,年龄,成绩
张三,20,90
李四,21,85
王五,19,95
创建:
student.json
内容:
[
{
"name":"张三",
"age":20,
"score":90
},
{
"name":"李四",
"age":21,
"score":85
}
]
4. 实验步骤
实验1:
读取CSV
代码:
import pandas as pd
df=pd.read_csv(
"student.csv"
)
print(df)
结果
输出:
姓名 年龄 成绩
张三 20 90
李四 21 85
王五 19 95
实验2:
读取JSON
代码:
import json
with open(
"student.json",
"r",
encoding="utf-8"
) as f:
data=json.load(f)
print(data)
结果:
[
{'name':'张三',
'age':20,
'score':90}
]
实验3:
JSON转换DataFrame
代码:
df=pd.DataFrame(data)
print(df)
结果:
| name | age | score |
|---|---|---|
| 张三 | 20 | 90 |
| 李四 | 21 | 85 |
八、实验分析
通过实验可以发现:
不同格式的数据:
最终可以统一转换为:
DataFrame
方便后续:
- 数据清洗;
- 数据统计;
- 数据分析。
数据处理流程:
CSV/JSON/Excel
↓
Pandas
↓
DataFrame
↓
数据分析
九、课堂总结
本节核心:
数据格式决定数据处理方式
掌握:
- Excel
适合人工管理。
- CSV
适合机器交换。
- JSON
适合网络传输。
- XML
适合结构化描述。
十、课后作业
理论题
-
CSV为什么适合机器读取?
-
JSON为什么适合网络传输?
-
Excel和CSV有什么区别?
实践题
完成:
- 创建一个学生信息CSV文件;
- 使用Pandas读取;
- 转换为JSON;
- 保存结果。
《Python数据预处理》
第二章 数据获取与存储
第3课时教学设计
主题:
网络爬虫获取数据
——从互联网中采集外部数据
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第3课时 |
| 主题 | 网络爬虫基础与数据获取流程 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验3 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解网络爬虫的基本概念;
- 理解网络数据获取的基本流程;
- 掌握HTTP请求基本原理;
- 认识Python常用爬虫工具。
(二)能力目标
学生能够:
- 使用Python向网站发送请求;
- 获取网页HTML源码;
- 保存网络数据;
- 理解简单爬虫程序结构。
(三)素养目标
培养学生:
- 合法获取数据意识;
- 网络数据安全意识;
- 数据采集工程思维。
三、本课教学内容分析
第二章前两课时介绍:
数据是什么;
数据有哪些格式。
但是:
数据从哪里来?
现实数据来源包括:
- 企业内部数据库;
- 文件数据;
- 互联网公开数据。
教材指出:
数据可以分为内部数据和外部数据,随着互联网发展,网页成为大量信息载体,网络爬虫成为获取外部数据的重要方法。
因此:
本节进入:
网络数据采集。
四、教学重点与难点
(一)教学重点
重点1:网络爬虫概念
理解:
爬虫不是“自动浏览网页”,而是一套:
请求
↓
解析
↓
保存
的数据采集流程。
教材定义:
网络爬虫(Web Spider)又称网络蜘蛛或网络机器人,是从网站获取数据信息的过程,可以将网页中的半结构化、非结构化数据抽取出来并保存。
重点2:爬虫工作流程
三个核心步骤:
请求数据
↓
解析数据
↓
保存数据
教材指出:
网络爬虫基本执行流程可以总结为:
请求数据、解析数据、保存数据三个过程。
重点3:Python请求工具
主要介绍:
- urllib
- requests
- BeautifulSoup
(二)教学难点
难点1:
理解网页不是数据表。
学生习惯:
Excel:
|姓名|年龄|
但是网页:
<div>
<h1>新闻标题</h1>
</div>
需要:
解析。
难点2:
理解爬虫不是无限制抓取。
需要遵守:
- 网站规则;
- robots协议;
- 法律法规。
教材强调:
爬虫是一把双刃剑,应遵守robots协议,不应非法获取个人信息或攻击网站。
五、教学导入(10分钟)
案例:
某公司想分析:
全国房价变化趋势。
数据来源:
方法1:
人工收集。
问题:
- 慢;
- 成本高;
- 数据更新困难。
方法2:
互联网公开数据。
例如:
房产网站:
城市
面积
价格
时间
自动采集。
引出:
网络爬虫。
六、知识讲授
6.1 什么是网络爬虫
(1)概念
网络爬虫:
英文:
Web Spider
也称:
- 网络蜘蛛;
- 网络机器人。
作用:
自动访问网页;
提取需要的数据。
(2)爬虫应用
搜索引擎
例如:
百度、Google。
搜索引擎实际上大量使用爬虫程序。
教材指出:
百度、搜狗、360、Google等搜索服务都拥有自己的爬虫程序。
数据分析
例如:
采集:
- 新闻;
- 商品价格;
- 用户评价。
企业应用
例如:
市场监测:
竞争产品价格变化。
6.2 网络爬虫工作流程
完整流程:
目标网站
↓
发送请求
↓
获取网页数据
↓
解析网页
↓
提取目标信息
↓
保存数据
第一步:
请求数据
什么是请求?
客户端:
向服务器发送:
“我要这个网页”。
服务器:
返回:
网页内容。
请求内容包括:
- HTML;
- JSON;
- 图片;
- 视频;
- 音频。
教材指出:
请求的数据除了HTML,还包括JSON、字符串、图片、视频、音频等。
第二步:
解析数据
服务器返回:
大量网页代码。
例如:
<html>
<h1>
Python教程
</h1>
</html>
需要提取:
标题:
Python教程。
常用解析工具:
- BeautifulSoup;
- lxml。
第三步:
保存数据
保存格式:
- CSV;
- JSON;
- 数据库。
教材指出:
提取后的数据可以保存为CSV、JSON、pickle等格式,也可以存储到MySQL、MongoDB等数据库。
6.3 URL结构认识
网络请求需要地址:
URL。
例如:
https://www.example.com/news?id=10
URL组成:
- 协议;
- 域名;
- 端口;
- 路径;
- 查询参数。
教材介绍URL基本组成包括协议、域名、端口号、路径和查询字符串。
示例分析
URL:
http://www.test.com/article?id=100
拆分:
| 部分 | 含义 |
|---|---|
| http | 协议 |
| www.test.com | 域名 |
| article | 路径 |
| id=100 | 参数 |
6.4 静态网页与动态网页
(1)静态网页
特点:
网页内容固定。
例如:
.html
可以直接获取。
(2)动态网页
特点:
网页内容通过程序生成。
例如:
- AJAX;
- JSP;
- ASP。
教材指出:
动态网页可以通过技术实现页面局部更新,不需要重新加载整个页面。
七、Python网络请求工具
7.1 urllib库
特点
Python标准库。
无需额外安装。
作用:
获取网页HTML。
教材指出:
urllib属于Python标准库,是Python爬虫常用模块。
主要模块:
| 模块 | 作用 |
|---|---|
| urllib.request | 打开读取URL |
| urllib.error | 处理异常 |
| urllib.parse | 解析URL |
| robotparser | 解析robots协议 |
7.2 requests库
requests:
用于HTTP请求。
示例:
import requests
response=requests.get(
"https://www.baidu.com"
)
print(response.text)
返回:
网页HTML源码。
教材指出:
requests主要用于发送HTTP请求,并且比urllib更加简洁。
八、实验3
使用Python获取网页数据实验
实验名称
Requests网页数据获取
1. 实验目的
掌握:
- HTTP请求方法;
- requests库使用;
- 获取网页源码;
- 保存网页数据。
2. 实验环境
软件:
- Python3
- Jupyter Notebook
安装:
pip install requests
3. 实验原理
流程:
Python程序
↓
requests.get()
↓
服务器
↓
返回HTML
↓
Python读取
4. 实验步骤
步骤1:
导入requests
import requests
步骤2:
发送请求
url="https://www.baidu.com"
response=requests.get(url)
print(response.status_code)
步骤3:
查看网页内容
print(response.text[:500])
五、实验结果
运行结果:
状态码:
200
说明:
请求成功。
网页返回:
<html>
<head>
<title>百度一下</title>
</head>
</html>
六、保存网页数据
代码:
with open(
"baidu.html",
"w",
encoding="utf-8"
) as f:
f.write(response.text)
实验结果
当前目录生成:
baidu.html
打开:
浏览器显示网页源码。
九、实验分析
通过实验:
学生理解:
网络数据获取过程
不是直接读取数据,
而是:
- 发送请求;
- 获取响应;
- 解析内容;
- 保存数据。
十、课堂讨论
问题1
为什么爬虫不能无限制访问网站?
答案:
因为可能:
- 消耗服务器资源;
- 侵犯隐私;
- 违反网站规则。
问题2
爬虫获取的数据属于什么类型?
答案:
通常:
半结构化数据。
例如:
HTML。
十一、课堂总结
本节学习:
网络爬虫流程
请求数据
↓
解析数据
↓
保存数据
核心工具:
| 工具 | 作用 |
|---|---|
| urllib | 基础请求 |
| requests | HTTP请求 |
| BeautifulSoup | 网页解析 |
十二、课后作业
理论题
-
什么是网络爬虫?
-
爬虫有哪些基本步骤?
-
为什么爬虫需要遵守robots协议?
实践题
完成:
使用requests获取一个公开网页:
要求:
- 输出网页状态码;
- 保存HTML文件;
- 截取前100行源码。
《Python数据预处理》
第二章 数据获取与存储
第4课时教学设计
主题:
HTML网页解析与Beautiful Soup数据提取
——从网页源码中提取有效信息
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第4课时 |
| 主题 | 网页解析与数据提取 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验4 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解HTML网页结构;
- 理解网页数据提取的基本思想;
- 掌握Beautiful Soup解析网页的方法;
- 掌握find()和find_all()基本用法。
(二)能力目标
学生能够:
- 从网页源码中定位目标信息;
- 使用Beautiful Soup解析HTML;
- 提取网页中的文本、图片、链接等内容;
- 完成简单网页数据采集任务。
(三)素养目标
培养学生:
- 网络数据分析能力;
- 信息筛选能力;
- 合法采集网络数据意识。
三、本课内容分析
上一课学习:
requests获取网页。
但是:
requests得到的是:
原始网页源码。
例如:
<html>
<body>
<h1>
Python教程
</h1>
<img src="logo.png">
</body>
</html>
如果直接处理:
需要人工寻找:
- 标签;
- 属性;
- 内容。
因此需要:
HTML解析工具。
教材在网络爬虫部分介绍:
网页数据获取后,需要对HTML/XML文档进行解析,并提取需要的数据。Beautiful Soup可以快速从HTML或XML文档中提取指定数据。
四、教学重点与难点
(一)教学重点
重点1:HTML网页结构
理解网页由:
- HTML
- CSS
- JavaScript
组成。
教材指出:
网页一般由HTML、CSS和JavaScript三部分组成,分别负责网页内容、布局和行为。
重点2:Beautiful Soup解析
掌握:
find()
find_all()
方法。
教材指出:
find_all()和find()是解析HTML文档常用方法,可以按照条件查找需要内容。
重点3:图片资源提取
理解:
网页图片不是直接存在HTML中,而是通过:
<img src="">
引用。
(二)教学难点
难点1:
理解HTML不是数据表。
例如:
学生成绩:
| 姓名 | 成绩 |
|---|---|
| 张三 | 90 |
网页:
<div>
<span>
张三
</span>
<span>
90
</span>
</div>
需要解析标签。
难点2:
理解网页结构变化。
例如:
今天:
<img class="logo">
明天:
<img class="new-logo">
爬虫可能失效。
因此:
实际爬虫需要维护。
五、教学导入(10分钟)
教师展示百度首页源码:
<img src="xxx.png">
提问:
浏览器显示:
一张图片。
但是Python看到:
只是:
一段文字。
为什么?
学生思考。
教师总结:
网页本质:
HTML代码。
浏览器:
负责解释代码。
爬虫:
需要解析代码。
六、知识讲授
6.1 HTML基础
(1)HTML作用
HTML:
HyperText Markup Language
中文:
超文本标记语言。
作用:
描述网页结构。
例如:
标题:
<h1>
数据分析
</h1>
图片:
<img src="a.jpg">
链接:
<a href="www.baidu.com">
百度
</a>
(2)HTML标签结构
基本形式:
<tag>
内容
</tag>
例如:
<p>
Hello Python
</p>
其中:
标签:
<p>
文本:
Hello Python
6.2 网页解析思想
网页:
↓
HTML源码
↓
解析标签
↓
提取数据
例如:
目标:
网页标题。
源码:
<title>
Python教程
</title>
提取:
Python教程。
6.3 Beautiful Soup介绍
(1)概念
Beautiful Soup:
简称:
BS4。
作用:
从HTML/XML中提取数据。
教材指出:
Beautiful Soup是Python第三方库,可以从HTML或XML文档快速提取指定数据。
(2)安装
命令:
pip install bs4
同时:
需要解析器:
pip install lxml
教材指出:
BS4解析页面需要依赖文档解析器,因此需要安装lxml。
6.4 Beautiful Soup基本使用
第一步:
导入库
from bs4 import BeautifulSoup
第二步:
创建解析对象
soup=BeautifulSoup(
html,
"html.parser"
)
6.5 find()方法
作用:
寻找第一个满足条件的标签。
例如:
HTML:
<h1>
Python
</h1>
代码:
soup.find("h1")
结果:
<h1>
Python
</h1>
6.6 find_all()方法
作用:
寻找全部符合条件标签。
例如:
HTML:
<img>
<img>
<img>
代码:
soup.find_all("img")
返回:
图片列表。
七、网页图片获取原理
网页:
<img src="logo.png">
其中:
img:
图片标签
src:
图片地址
爬虫步骤:
获取网页
↓
寻找img标签
↓
读取src地址
↓
下载图片
八、百度Logo爬取案例讲解
教材案例:
爬取百度首页Logo,并保存为:
logo.png。
程序流程:
- 获取百度网页;
- 使用BeautifulSoup解析;
- 找到img标签;
- 获取logo地址;
- 下载图片。
教材给出了完整程序,包括:
urllib获取网页;
BeautifulSoup解析HTML;
urlretrieve下载图片。
九、实验4
使用Beautiful Soup爬取网页图片实验
实验名称
百度Logo图片爬取
1. 实验目的
掌握:
- requests网页请求;
- BeautifulSoup解析;
- HTML标签查找;
- 图片下载保存。
2. 实验环境
Python3
安装:
pip install requests
pip install bs4
pip install lxml
3. 实验原理
流程:
百度网页
↓
requests获取HTML
↓
BeautifulSoup解析
↓
查找img标签
↓
获得图片URL
↓
保存图片
4. 实验代码
import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
url="https://www.baidu.com"
html=requests.get(url).text
soup=BeautifulSoup(
html,
"html.parser"
)
imgs=soup.find_all("img")
print(imgs)
5. 获取图片地址
代码:
for img in imgs:
if img.get("src"):
print(img["src"])
6. 下载图片
img_url="图片地址"
urlretrieve(
img_url,
"logo.png"
)
十、实验结果
运行后:
控制台输出:
图片地址:
http://www.baidu.com/img/xxx.png
项目目录生成:
logo.png
打开:
可以看到百度Logo图片。
十一、实验分析
实验完成了完整爬虫流程:
数据请求
requests
↓
数据解析
BeautifulSoup
↓
数据保存
图片文件
说明:
网页中的非结构化数据可以通过解析转换为可利用数据。
十二、课堂案例扩展
案例:
爬取新闻标题。
网页:
<h2>
人工智能发展趋势
</h2>
代码:
title=soup.find("h2")
print(title.text)
结果:
人工智能发展趋势
十三、课堂讨论
问题1:
为什么requests不能直接得到结构化数据?
答案:
因为网页返回的是HTML源码,需要解析。
问题2:
BeautifulSoup作用是什么?
答案:
解析HTML/XML,提取目标信息。
问题3:
为什么不能随意爬取网站?
答案:
可能:
- 违反网站规则;
- 造成服务器压力;
- 涉及隐私安全。
十四、课堂总结
本节核心:
网页爬虫完整流程
requests
↓
HTML源码
↓
BeautifulSoup
↓
目标数据
↓
保存
掌握工具:
| 工具 | 作用 |
|---|---|
| requests | 网页请求 |
| BeautifulSoup | HTML解析 |
| lxml | 解析器 |
| urlretrieve | 文件下载 |
十五、课后作业
理论题
-
HTML、CSS、JavaScript分别有什么作用?
-
BeautifulSoup主要解决什么问题?
-
find()和find_all()有什么区别?
实践题
选择一个公开网页:
完成:
- 获取HTML源码;
- 提取网页标题;
- 提取3个链接;
- 保存结果到CSV文件。
《Python数据预处理》
第二章 数据获取与存储
第5课时教学设计
主题:
数据读写基础
——利用Python读取、写入和管理数据文件
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第5课时 |
| 主题 | 数据文件读写 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验5 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解数据读取与写入的基本概念;
- 掌握Python文件操作方法;
- 掌握CSV文件读取与保存方法;
- 了解Pandas数据输入输出(I/O)工具。
(二)能力目标
学生能够:
- 使用Python打开本地文件;
- 使用read/write完成文件操作;
- 使用Pandas读取CSV数据;
- 将处理后的数据保存为新的文件。
(三)素养目标
培养学生:
- 数据文件管理意识;
- 数据保存规范意识;
- 数据分析工程流程意识。
三、本课内容分析
上一部分学习:
如何从网络获取数据。
但是获取的数据需要进一步:
- 保存;
- 读取;
- 转换;
- 分析。
数据处理流程:
数据来源
↓
文件/数据库
↓
读取数据
↓
数据处理
↓
保存结果
教材指出:
数据从被使用到保存的过程称为数据读取和写入过程,读取数据可以分为读取本地文件和读取网络数据两类。
四、教学重点与难点
(一)教学重点
重点1:Python文件操作
掌握:
open()
函数。
重点2:CSV数据读写
CSV是数据处理中最常见的数据格式。
掌握:
读取:
pd.read_csv()
写入:
df.to_csv()
重点3:Pandas I/O工具
Pandas提供大量数据读取和写入接口。
教材列举:
| 读取 | 写入 |
|---|---|
| read_csv | to_csv |
| read_excel | to_excel |
| read_json | to_json |
| read_sql | to_sql |
(二)教学难点
难点1:
理解文件路径。
例如:
Windows路径:
C:\Users\Admin\data.csv
Python中:
需要注意:
反斜杠。
难点2:
理解文件打开模式。
例如:
| 模式 | 作用 |
|---|---|
| r | 读取 |
| w | 写入 |
| a | 追加 |
| rw | 读写 |
教材介绍了open函数模式,包括r、w、rw和a。
五、教学导入(10分钟)
教师提出问题:
上一节爬取百度Logo:
图片保存在哪里?
如果爬取:
10000条新闻:
怎么办?
答案:
必须:
自动保存。
引出:
数据读写。
六、知识讲授
6.1 数据读取与写入概念
(1)数据读取
读取:
将外部数据加载到程序中。
例如:
CSV文件:
↓
Python对象。
(2)数据写入
写入:
将程序中的数据保存到文件。
例如:
DataFrame:
↓
CSV文件。
6.2 Python文件操作
(1)open函数
基本格式:
open(
文件路径,
打开模式,
encoding
)
例如:
f=open(
"student.txt",
"r",
encoding="utf-8"
)
(2)读取文件
read()
一次读取全部内容。
示例:
content=f.read()
print(content)
readline()
读取一行。
示例:
line=f.readline()
print(line)
readlines()
读取所有行。
返回:
列表。
教材指出:
readline()用于逐行读取,readlines()用于一次性读取所有数据,并将每行存储为字符串列表。
(3)关闭文件
方式1:
f.close()
方式2:
推荐:
with open():
内容
优点:
自动关闭。
教材案例使用with open方式读取CSV文件。
6.3 文件写入
write()
写入字符串。
例如:
with open(
"test.txt",
"w"
) as f:
f.write(
"Hello Python"
)
结果:
生成:
test.txt
内容:
Hello Python
6.4 CSV文件读取
CSV结构:
姓名,年龄,成绩
张三,20,90
李四,21,85
方法1:
csv模块
import csv
with open(
"student.csv",
"r",
encoding="utf-8"
) as f:
reader=csv.reader(f)
for row in reader:
print(row)
输出:
['姓名','年龄','成绩']
['张三','20','90']
方法2:
Pandas读取
import pandas as pd
df=pd.read_csv(
"student.csv"
)
print(df)
结果:
| 姓名 | 年龄 | 成绩 |
|---|---|---|
| 张三 | 20 | 90 |
| 李四 | 21 | 85 |
教材给出了Pandas读取CSV文件的方法:
df = pd.read_csv(filepath)
并将CSV自动转换为DataFrame对象。
6.5 CSV文件写入
DataFrame保存CSV
代码:
df.to_csv(
"new_student.csv"
)
结果:
生成:
new_student.csv
教材指出:
Pandas提供to_csv()函数,可以将DataFrame转换为CSV数据。
七、Pandas数据输入输出体系
Pandas常用:
读取
CSV
read_csv()
Excel
read_excel()
JSON
read_json()
数据库
read_sql()
写入
对应:
to_csv()
to_excel()
to_json()
to_sql()
八、实验5
Pandas文件读写实验
实验名称
学生数据文件读取与保存
1. 实验目的
掌握:
- CSV文件创建;
- Pandas读取数据;
- DataFrame处理;
- 数据保存。
2. 实验环境
软件:
- Python3
- Jupyter Notebook
库:
pandas
3. 实验准备
创建:
student.csv
内容:
姓名,数学,英语
张三,90,85
李四,80,90
王五,95,88
4. 实验步骤
步骤1:
导入Pandas
import pandas as pd
步骤2:
读取CSV
df=pd.read_csv(
"student.csv"
)
print(df)
结果:
| 姓名 | 数学 | 英语 |
|---|---|---|
| 张三 | 90 | 85 |
| 李四 | 80 | 90 |
| 王五 | 95 | 88 |
步骤3:
查看数据
查看前几行
df.head()
查看信息
df.info()
统计
df.describe()
步骤4:
计算平均成绩
df["数学"].mean()
结果:
88.33
步骤5:
保存数据
df.to_csv(
"result.csv",
index=False
)
九、实验结果
运行完成后:
生成:
result.csv
内容:
| 姓名 | 数学 | 英语 |
|---|---|---|
| 张三 | 90 | 85 |
| 李四 | 80 | 90 |
| 王五 | 95 | 88 |
十、实验分析
通过实验完成:
数据读取
CSV
↓
DataFrame
数据处理
统计分析
数据保存
DataFrame
↓
CSV
形成完整数据处理闭环。
十一、课堂案例拓展
案例:
企业销售数据分析
原始:
sales.csv
包含:
| 日期 | 商品 | 销售额 |
|---|---|---|
| 1月1日 | 手机 | 5000 |
读取:
pd.read_csv()
分析:
销售总额。
保存:
to_csv()
形成:
销售报告。
十二、课堂讨论
问题1:
为什么推荐使用with open?
答案:
自动关闭文件,避免资源占用。
问题2:
为什么CSV比Excel更适合机器处理?
答案:
CSV结构简单,文本格式,容易解析。
问题3:
Pandas读取CSV后为什么转换为DataFrame?
答案:
方便后续:
- 清洗;
- 筛选;
- 统计。
十三、课堂总结
本节重点:
数据读写流程
文件
↓
读取
↓
DataFrame
↓
处理
↓
保存
掌握:
| 工具 | 作用 |
|---|---|
| open | 基础文件操作 |
| csv | CSV处理 |
| Pandas | 数据分析读写 |
十四、课后作业
理论题
-
open函数有哪些常用模式?
-
read_csv和read_excel有什么区别?
-
为什么数据分析中经常使用DataFrame?
实践题
完成:
创建一个学生成绩CSV文件:
要求:
- Python读取;
- 计算平均成绩;
- 添加排名字段;
- 保存新CSV。
《Python数据预处理》
第二章 数据获取与存储
第6课时教学设计
主题:
JSON与XML数据读写
——实现半结构化数据的解析与交换
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第6课时 |
| 主题 | JSON/XML数据读写 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验6 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解半结构化数据存储特点;
- 掌握JSON数据结构;
- 掌握JSON文件读写方法;
- 理解XML文件结构;
- 掌握XML基本解析方法。
(二)能力目标
学生能够:
- 使用Python处理JSON数据;
- 完成Python对象与JSON数据转换;
- 使用XML解析工具读取节点信息;
- 根据数据特点选择合适的数据交换格式。
(三)素养目标
培养学生:
- 数据交换意识;
- 接口数据处理能力;
- 多源异构数据处理能力。
三、本课内容分析
前面学习:
- CSV;
- Excel;
这些数据主要用于:
二维表数据。
但是现实应用中:
大量数据来自:
- 网站接口;
- 网络服务;
- 软件系统。
例如:
天气接口返回:
{
"city":"Beijing",
"temperature":25
}
这种数据:
不是传统二维表,
而是:
半结构化数据。
教材指出:
半结构化数据介于结构化数据和非结构化数据之间,具有一定结构但结构不固定,常见形式包括XML和JSON。
四、教学重点与难点
(一)教学重点
重点1:JSON数据结构
掌握:
- 对象;
- 数组;
- 键值对。
重点2:JSON与Python转换
掌握:
Python对象:
↓
JSON
以及:
JSON:
↓
Python对象
重点3:XML节点解析
掌握:
- 标签;
- 属性;
- 节点。
(二)教学难点
难点1:
JSON和Python字典关系。
学生容易认为:
JSON就是Python字典。
实际上:
两者类似,但格式不同。
例如:
Python:
student={
"name":"Tom"
}
JSON:
{
"name":"Tom"
}
难点2:
理解XML树结构。
例如:
<Student>
<Name>
Tom
</Name>
<Age>
20
</Age>
</Student>
结构:
Student
|
├──Name
|
└──Age
五、教学导入(10分钟)
教师展示:
某天气APP获取数据:
返回内容:
{
"city":"Shanghai",
"weather":"sunny",
"temperature":30
}
问题:
为什么天气软件不用Excel返回数据?
原因:
因为:
网络传输需要:
- 结构清晰;
- 易解析;
- 易扩展。
引出:
JSON/XML。
六、知识讲授
6.1 JSON数据格式
(1)JSON概念
JSON:
JavaScript Object Notation
是一种轻量级数据交换格式。
主要特点:
- 易阅读;
- 易解析;
- 易传输。
教材指出:
JSON是一种轻量级数据交换格式,常用于服务器向网页发送数据。
(2)JSON基本结构
JSON主要包括:
① 对象
形式:
{
"key":"value"
}
对应Python:
dict
例如:
{
"name":"张三",
"age":20
}
Python:
{
"name":"张三",
"age":20
}
② 数组
形式:
[
数据1,
数据2
]
对应Python:
list
例如:
[
"Python",
"Java",
"C++"
]
教材指出:
JSON对象对应Python字典,JSON数组对应Python列表。
6.2 JSON与Python转换
Python提供:
json模块。
导入:
import json
(1)序列化
Python对象
转换为:
JSON字符串。
方法:
json.dumps()
示例:
import json
student={
"name":"Tom",
"age":20
}
json_data=json.dumps(student)
print(json_data)
结果:
{
"name":"Tom",
"age":20
}
(2)反序列化
JSON字符串
转换:
Python对象。
方法:
json.loads()
示例:
data='{"name":"Tom"}'
student=json.loads(data)
print(student)
结果:
{
'name':'Tom'
}
6.3 JSON文件读写
写JSON文件
方法:
json.dump()
示例:
import json
student={
"name":"张三",
"score":90
}
with open(
"student.json",
"w",
encoding="utf-8"
) as f:
json.dump(
student,
f,
ensure_ascii=False
)
生成:
student.json
内容:
{
"name":"张三",
"score":90
}
读取JSON文件
方法:
json.load()
示例:
with open(
"student.json",
"r",
encoding="utf-8"
) as f:
data=json.load(f)
print(data)
6.4 XML数据格式
(1)XML概念
XML:
Extensible Markup Language
中文:
可扩展标记语言。
特点:
通过标签描述数据。
教材指出:
XML允许用户自定义标签,同时数据既便于机器读取,也便于人工阅读。
(2)XML结构
示例:
<Student>
<Name>
张三
</Name>
<Age>
20
</Age>
<Score>
90
</Score>
</Student>
结构:
Student
├──Name
├──Age
└──Score
(3)XML组成
标签
例如:
<Name>
元素
例如:
<Name>
Tom
</Name>
属性
例如:
<Student id="001">
6.5 Python解析XML
Python常用:
ElementTree
导入:
import xml.etree.ElementTree as ET
读取:
tree=ET.parse(
"student.xml"
)
root=tree.getroot()
遍历节点:
for child in root:
print(child.tag)
print(child.text)
七、JSON与XML比较
| 特点 | JSON | XML |
|---|---|---|
| 结构 | 键值 | 标签 |
| 可读性 | 较高 | 较高 |
| 数据量 | 较小 | 较大 |
| 解析难度 | 简单 | 较复杂 |
| 应用 | 接口传输 | 配置文件 |
八、实验6
JSON与XML数据处理实验
实验名称
半结构化数据读取与解析
1. 实验目的
掌握:
- JSON文件创建;
- JSON读取;
- Python对象转换;
- XML节点解析。
2. 实验环境
软件:
- Python3
- Jupyter Notebook
使用模块:
json
xml.etree.ElementTree
3. 实验一:JSON文件读写
创建数据
student={
"name":"张三",
"age":20,
"score":90
}
写入JSON
import json
with open(
"student.json",
"w",
encoding="utf-8"
) as f:
json.dump(
student,
f,
ensure_ascii=False
)
结果:
生成:
student.json
读取JSON
with open(
"student.json",
"r",
encoding="utf-8"
) as f:
data=json.load(f)
print(data)
输出:
{
'name':'张三',
'age':20,
'score':90
}
4. 实验二:XML解析
创建:
student.xml
内容:
<Student>
<Name>
张三
</Name>
<Age>
20
</Age>
<Score>
90
</Score>
</Student>
读取:
import xml.etree.ElementTree as ET
tree=ET.parse(
"student.xml"
)
root=tree.getroot()
for item in root:
print(
item.tag,
item.text
)
实验结果
输出:
Name 张三
Age 20
Score 90
九、实验分析
实验完成:
JSON流程
Python对象
↓
JSON文件
↓
Python对象
XML流程
XML文件
↓
节点解析
↓
目标数据
说明:
半结构化数据虽然不是二维表,
但是可以通过程序转换为可分析数据。
十、课堂案例拓展
案例:
天气数据接口
返回:
{
"city":"Beijing",
"temperature":25,
"humidity":60
}
处理:
temperature=data["temperature"]
得到:
温度:
25℃
十一、课堂讨论
问题1:
为什么网络接口喜欢使用JSON?
答案:
- 结构简单;
- 数据量小;
- 易解析。
问题2:
JSON和CSV哪个更适合复杂数据?
答案:
JSON。
因为支持:
嵌套结构。
例如:
{
"user":{
"name":"Tom",
"address":{
"city":"Beijing"
}
}
}
十二、课堂总结
本节核心:
半结构化数据处理流程
JSON/XML
↓
Python解析
↓
结构化对象
↓
数据分析
掌握:
| 工具 | 作用 |
|---|---|
| json.dumps | 对象转JSON |
| json.loads | JSON转对象 |
| json.dump | 写文件 |
| json.load | 读文件 |
| ElementTree | XML解析 |
十三、课后作业
理论题
-
JSON为什么适合网络传输?
-
JSON对象和Python字典有什么关系?
-
XML数据有什么特点?
实践题
完成:
创建一个学生信息JSON文件:
包含:
- 姓名
- 年龄
- 成绩
- 兴趣列表
要求:
- Python读取;
- 修改成绩;
- 保存新JSON。
《Python数据预处理》
第二章 数据获取与存储
第7课时教学设计
主题:
数据库存储数据
——利用数据库实现结构化数据管理
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第7课时 |
| 主题 | 数据库存储数据 |
| 教学方式 | 理论讲授+案例分析+代码实验 |
| 实验编号 | 实验7 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解数据库在数据存储中的作用;
- 了解关系型数据库基本概念;
- 理解数据表、字段、记录之间的关系;
- 掌握Python连接数据库的方法;
- 了解SQL基本操作。
(二)能力目标
学生能够:
- 创建简单数据库;
- 建立数据表;
- 使用Python连接数据库;
- 完成数据插入、查询、修改和删除;
- 将Python数据分析流程与数据库结合。
(三)素养目标
培养学生:
- 数据管理意识;
- 大规模数据存储意识;
- 数据库工程应用能力。
三、本课内容分析
前面学习:
文件存储方式
例如:
CSV:
student.csv
JSON:
student.json
这些方式适合:
小规模数据。
但是:
如果数据规模达到:
百万级;
千万级;
文件方式存在:
- 查询慢;
- 管理困难;
- 并发能力不足。
因此需要:
数据库。
教材指出:
数据库能够有效组织、存储和管理数据,是数据存储的重要方式。
四、教学重点与难点
(一)教学重点
重点1:数据库基本结构
理解:
数据库:
↓
数据表
↓
字段
↓
记录
例如:
数据库:
student_db
数据表:
student
字段:
| id | name | score |
|---|---|---|
| 1 | 张三 | 90 |
重点2:SQL基本操作
包括:
增加:
INSERT
查询:
SELECT
修改:
UPDATE
删除:
DELETE
重点3:Python连接数据库
理解:
Python不是数据库本身。
Python:
负责操作。
数据库:
负责保存。
(二)教学难点
难点1:
理解数据库和文件区别。
比较:
| 项目 | 文件 | 数据库 |
|---|---|---|
| 规模 | 小 | 大 |
| 查询 | 慢 | 快 |
| 管理 | 简单 | 专业 |
| 并发 | 弱 | 强 |
难点2:
理解SQL和Python关系。
例如:
Python:
cursor.execute()
执行:
SQL:
SELECT * FROM student;
五、教学导入(10分钟)
教师提出问题:
学校有:
10万学生信息。
保存方式1:
Excel:
student.xlsx
查询:
某学院所有学生。
需要:
打开文件;
逐行搜索。
问题:
效率如何?
保存方式2:
数据库:
student数据库
student表
执行:
SELECT *
FROM student
WHERE major='计算机';
立即得到结果。
引出:
数据库存储。
六、知识讲授
6.1 数据库概念
(1)数据库定义
数据库:
Database
简称:
DB。
是一种:
按照一定结构组织的数据集合。
主要功能:
- 存储数据;
- 管理数据;
- 查询数据。
(2)数据库组成
数据库系统通常包括:
数据库
存储数据。
例如:
学生数据库。
数据表
组织数据。
例如:
student表。
字段
描述数据属性。
例如:
姓名、年龄。
记录
一条完整数据。
例如:
张三,20岁。
6.2 为什么使用数据库
1. 提高数据管理能力
例如:
企业:
用户信息:
1000万人。
数据库:
统一管理。
2. 快速查询
例如:
查询:
年龄大于30岁的用户。
数据库:
快速完成。
3. 支持多用户访问
例如:
银行系统:
多个工作人员同时查询。
6.3 关系型数据库
(1)概念
关系型数据库:
Relational Database
通过二维表存储数据。
例如:
MySQL:
student表
| 学号 | 姓名 | 成绩 |
|---|---|---|
| 001 | 张三 | 90 |
| 002 | 李四 | 85 |
常见关系型数据库
| 数据库 | 应用 |
|---|---|
| MySQL | Web应用 |
| Oracle | 大型企业 |
| SQL Server | 微软生态 |
| SQLite | 轻量应用 |
6.4 MySQL数据库介绍
MySQL:
开源关系数据库。
特点:
- 免费;
- 性能较好;
- 应用广泛。
常见应用:
- 网站后台;
- 企业系统;
- 数据分析平台。
6.5 SQL语言基础
SQL:
Structured Query Language
用于:
操作数据库。
(1)创建表
示例:
CREATE TABLE student
(
id INT,
name VARCHAR(20),
score INT
);
创建:
student表。
(2)插入数据
INSERT INTO student
VALUES
(
1,
'张三',
90
);
(3)查询数据
SELECT *
FROM student;
结果:
| id | name | score |
|---|---|---|
| 1 | 张三 | 90 |
(4)修改数据
UPDATE student
SET score=95
WHERE id=1;
(5)删除数据
DELETE FROM student
WHERE id=1;
6.6 Python连接数据库
Python连接数据库流程:
Python程序
↓
数据库驱动
↓
MySQL数据库
↓
SQL执行
↓
返回结果
常用库:
pymysql
安装:
pip install pymysql
七、Python操作MySQL
7.1 创建连接
代码:
import pymysql
conn=pymysql.connect(
host="localhost",
user="root",
password="123456",
database="student"
)
7.2 创建游标
cursor=conn.cursor()
游标:
用于执行SQL。
7.3 执行SQL
例如查询:
sql="SELECT * FROM student"
cursor.execute(sql)
7.4 获取结果
result=cursor.fetchall()
print(result)
八、实验7
Python连接数据库实验
实验名称
Python操作MySQL数据库
1. 实验目的
掌握:
- 数据库连接;
- SQL执行;
- 数据查询;
- Python读取数据库结果。
2. 实验环境
软件:
- Python3
- MySQL
- Jupyter Notebook
Python库:
pymysql
3. 实验准备
创建数据库:
CREATE DATABASE school;
创建数据表:
USE school;
CREATE TABLE student
(
id INT,
name VARCHAR(20),
score INT
);
插入数据:
INSERT INTO student
VALUES
(1,'张三',90),
(2,'李四',85),
(3,'王五',95);
4. 实验步骤
步骤1:
安装pymysql
pip install pymysql
步骤2:
连接数据库
import pymysql
conn=pymysql.connect(
host="localhost",
user="root",
password="123456",
database="school"
)
print("连接成功")
实验结果
输出:
连接成功
步骤3:
查询数据
代码:
cursor=conn.cursor()
cursor.execute(
"SELECT * FROM student"
)
result=cursor.fetchall()
print(result)
输出结果
(
(1,'张三',90),
(2,'李四',85),
(3,'王五',95)
)
步骤4:
转换为DataFrame
import pandas as pd
df=pd.DataFrame(
result,
columns=[
"id",
"name",
"score"
]
)
print(df)
结果:
| id | name | score |
|---|---|---|
| 1 | 张三 | 90 |
| 2 | 李四 | 85 |
| 3 | 王五 | 95 |
九、实验分析
通过实验完成:
数据库:
↓
Python连接
↓
SQL查询
↓
DataFrame
↓
数据分析
形成:
数据库+Python数据分析流程。
十、课堂案例拓展
案例:
电商用户分析。
数据库:
user表
字段:
| 字段 |
|---|
| 用户ID |
| 年龄 |
| 消费金额 |
Python:
读取:
pd.read_sql()
分析:
用户消费规律。
十一、课堂讨论
问题1:
为什么大型数据不推荐使用Excel保存?
答案:
因为:
- 查询效率低;
- 数据管理能力弱。
问题2:
数据库和CSV有什么区别?
答案:
CSV:
文件。
数据库:
管理系统。
问题3:
Python为什么需要数据库驱动?
答案:
Python需要通过驱动与数据库通信。
十二、课堂总结
本节核心:
数据库存储流程
数据库
↓
数据表
↓
SQL
↓
Python
↓
数据分析
掌握:
| 技术 | 作用 |
|---|---|
| MySQL | 数据存储 |
| SQL | 数据库操作 |
| PyMySQL | Python连接数据库 |
| Pandas | 数据分析 |
十三、课后作业
理论题
-
数据库相比文件存储有什么优势?
-
SQL有哪些基本操作?
-
Python如何连接数据库?
实践题
完成:
建立学生数据库:
要求:
- 创建学生表;
- 插入10条数据;
- Python读取;
- 查询平均成绩;
- 保存为CSV。
《Python数据预处理》
第二章 数据获取与存储
第8课时教学设计
主题:
综合实战:遍历文件批量抽取文本内容
——从单文件处理到批量数据处理
一、课程基本信息
| 项目 | 内容 |
|---|---|
| 章节 | 第二章 数据获取与存储 |
| 课时 | 第8课时 |
| 主题 | 文件遍历与批量文本抽取 |
| 教学方式 | 案例教学+代码实践+综合实验 |
| 实验编号 | 实验8 |
| 对应教材 | 2.5 实战1:遍历文件批量抽取文本内容 |
二、本课教学目标
(一)知识目标
学生能够:
- 理解批量数据处理思想;
- 掌握文件遍历基本方法;
- 掌握Python读取文本文件方法;
- 理解数据采集、读取、整理的完整流程。
(二)能力目标
学生能够:
- 使用Python遍历指定文件夹;
- 批量读取多个文本文件;
- 提取文件中的有效信息;
- 将处理结果保存为新的数据文件。
(三)素养目标
培养学生:
- 自动化处理意识;
- 数据工程思维;
- 面向实际问题编程能力。
三、本课内容分析
前面课程学习了:
单个数据处理
例如:
读取:
student.csv
处理:
student.json
保存:
result.csv
但是实际工作中:
数据通常不是一个文件。
例如:
企业每天产生:
销售数据/
|
├──2026-01.csv
|
├──2026-02.csv
|
├──2026-03.csv
|
└──2026-04.csv
如果人工处理:
效率低。
因此需要:
批量数据处理。
教材本节设计的实战任务为:
通过遍历文件夹中的文件,批量读取文本内容并进行抽取处理。
四、教学重点与难点
(一)教学重点
重点1:文件遍历
掌握:
Python访问:
- 文件夹;
- 文件列表;
- 文件路径。
重点2:批量处理思想
从:
单个文件:
open("a.txt")
发展到:
多个文件:
for file in files:
open(file)
重点3:文本信息抽取
包括:
- 文件读取;
- 字符串处理;
- 结果保存。
(二)教学难点
难点1:
理解路径管理。
例如:
文件:
data/a.txt
程序需要知道:
文件在哪里。
难点2:
循环处理多个文件。
学生容易写:
open("a.txt")
open("b.txt")
open("c.txt")
但是实际:
文件数量可能:
10000个。
需要:
循环。
五、教学导入(10分钟)
教师提出案例:
某企业拥有:
10000份客户反馈文本。
目录:
feedback
├──001.txt
├──002.txt
├──003.txt
...
└──10000.txt
需求:
统计所有反馈中:
“满意”
出现次数。
如果人工:
打开一个文件;
复制内容;
统计。
需要:
几天。
如果Python:
几秒完成。
引出:
批量文本处理。
六、知识讲授
6.1 文件和目录
文件
数据存储基本单位。
例如:
student.txt
目录
管理文件的容器。
例如:
data
├──a.txt
├──b.txt
6.2 Python文件路径管理
常用模块:
os模块
作用:
操作系统接口。
导入:
import os
获取当前目录
os.getcwd()
结果:
C:\data
查看目录文件
os.listdir()
结果:
[
'a.txt',
'b.txt'
]
拼接路径
os.path.join(
"data",
"a.txt"
)
结果:
data/a.txt
6.3 文件遍历
方法1:
for循环
示例:
import os
files=os.listdir(
"data"
)
for file in files:
print(file)
结果:
a.txt
b.txt
c.txt
方法2:
递归遍历
适用于:
多层文件夹。
例如:
data
├──2025
│ ├──01.txt
│
└──2026
└──02.txt
使用:
os.walk()
6.4 文本文件读取
方法1:
read()
读取全部内容。
with open(
"a.txt",
"r",
encoding="utf-8"
) as f:
text=f.read()
方法2:
逐行读取
for line in f:
print(line)
6.5 文本信息抽取
文本:
姓名:张三
年龄:20
成绩:90
目标:
提取:
张三
20
90
方法:
字符串处理。
常用:
split()
分割字符串。
例如:
text="姓名:张三"
text.split(":")
结果:
['姓名','张三']
replace()
替换文本。
例如:
text.replace(
"旧",
"新"
)
6.6 批量处理流程
完整流程:
获取文件列表
↓
遍历文件
↓
读取内容
↓
提取信息
↓
保存结果
七、综合案例分析
案例:
新闻文本批量分析
文件:
news
├──01.txt
├──02.txt
├──03.txt
每个文件:
标题:人工智能发展
作者:张三
内容:……
目标:
提取:
标题。
处理流程:
第一步
获取所有txt文件。
第二步
逐个打开。
第三步
读取文本。
第四步
提取标题。
第五步
保存CSV。
八、实验8
遍历文件批量抽取文本内容实验
1. 实验名称
批量文本文件信息提取
2. 实验目的
掌握:
- 文件夹遍历;
- 批量文件读取;
- 文本内容处理;
- 结果保存。
3. 实验环境
软件:
- Python3
- Jupyter Notebook
使用模块:
os
4. 实验准备
创建文件夹:
text_data
创建三个文件:
a.txt
内容:
姓名:张三
成绩:90
b.txt
内容:
姓名:李四
成绩:85
c.txt
内容:
姓名:王五
成绩:95
5. 实验步骤
步骤1:
导入模块
import os
步骤2:
获取文件列表
path="text_data"
files=os.listdir(path)
print(files)
结果:
[
'a.txt',
'b.txt',
'c.txt'
]
步骤3:
循环读取文件
for file in files:
filepath=os.path.join(
path,
file
)
with open(
filepath,
"r",
encoding="utf-8"
) as f:
content=f.read()
print(content)
结果:
姓名:张三
成绩:90
姓名:李四
成绩:85
姓名:王五
成绩:95
步骤4:
提取成绩
代码:
results=[]
for file in files:
filepath=os.path.join(
path,
file
)
with open(
filepath,
"r",
encoding="utf-8"
) as f:
text=f.read()
score=text.split(
"成绩:"
)[1]
results.append(score)
print(results)
结果:
['90','85','95']
步骤5:
保存结果
with open(
"result.txt",
"w",
encoding="utf-8"
) as f:
for score in results:
f.write(
score+"\n"
)
九、实验结果
生成:
result.txt
内容:
90
85
95
十、实验分析
本实验完成:
多文件数据采集流程
文件夹
↓
多个文本
↓
批量读取
↓
信息抽取
↓
结果保存
相比人工:
优势:
- 速度快;
- 不易出错;
- 可处理大量文件。
十一、综合项目扩展
项目:
企业客户反馈分析
数据:
10000份txt文件。
任务:
任务1
统计文件数量。
任务2
统计关键词:
满意
投诉
退款
出现次数。
任务3
生成统计表:
CSV。
十二、课堂讨论
问题1:
为什么批量处理比人工处理更适合大数据?
答案:
因为:
- 数据规模大;
- 规则固定;
- 自动化效率高。
问题2:
如果文件夹中有100万个文件怎么办?
答案:
需要:
- 分批处理;
- 数据库存储;
- 并行计算。
问题3:
文本数据属于什么类型?
答案:
通常属于:
非结构化数据。
十三、第二章总结
第二章核心知识体系:
数据来源
↓
数据获取
↓
数据存储
↓
数据读取
↓
数据处理
第二章知识结构图
数据获取与存储
│
├── 数据类型
│ ├──结构化
│ ├──半结构化
│ └──非结构化
│
├── 网络爬虫
│ ├──请求
│ ├──解析
│ └──保存
│
├── 文件读写
│ ├──CSV
│ ├──Excel
│ ├──JSON
│ └──XML
│
├── 数据库
│ ├──MySQL
│ └──SQL
│
└── 批量数据处理
十四、第二章实验汇总
| 编号 | 实验名称 | 课时 |
|---|---|---|
| 实验1 | 数据类型识别实验 | 第1课时 |
| 实验2 | Excel/CSV/JSON/XML读取实验 | 第2课时 |
| 实验3 | Requests网页数据获取实验 | 第3课时 |
| 实验4 | BeautifulSoup网页解析实验 | 第4课时 |
| 实验5 | Pandas文件读写实验 | 第5课时 |
| 实验6 | JSON/XML解析实验 | 第6课时 |
| 实验7 | Python数据库操作实验 | 第7课时 |
| 实验8 | 批量文本抽取综合实验 | 第8课时 |
十五、第二章综合作业
理论部分
-
数据获取有哪些主要来源?
-
结构化数据和非结构化数据有什么区别?
-
网络爬虫有哪些基本步骤?
-
JSON为什么适合网络数据传输?
-
数据库相比文件存储有什么优势?
实践部分
完成一个小型数据处理项目:
要求:
数据获取:
任选一种:
- CSV;
- 网络数据;
- JSON接口。
数据处理:
完成:
- 数据读取;
- 数据清洗;
- 数据统计。
数据保存:
保存为:
- CSV;
- JSON;
- 数据库。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)