跳转到内容

【限时特惠】小白玩转Python数据分析_哔哩哔哩_bilibili

  • 使用 if query in slang_dict: 判断用户输入的 query 是否为字典中的键
    • 如果存在,先打印 '您查询的' + query + ' 含义如下:'
    • 然后打印 slang_dict[query] 获取并显示释义
  • 代码示例:
query = input("请输入您想要搜索的流行语:")
if query in slang_dict:
print("您查询的" + query + " 含义如下:")
print(slang_dict[query])

Python字典

00:07 00:07:06

00:00 00:00:32

  • 如果 query 不在 slang_dict 中,使用 else 分支
    • 打印 您查询的流行语暂未收录。
    • 告知词典当前收录词条数:当前本词典收录词条数为:{str(len(slang_dict))}
  • len函数:返回字典键值对数量(整数)
    • len(slang_dict) 返回整数,需要 str() 转换为字符串才能在 f-string 中使用

代码示例:

print(f"您查询的流行语暂未收录。")
print(f"当前本词典收录词条数为:{str(len(slang_dict))}")

00:07 00:07:23

  • 添加 else 分支:
    • 打印 当前本词典收集的流行语数为: + str(len(slang_dict)) + &;条,
    • 打印 您查询的流行语暂时未收录。
  • 完整代码示例:
query = input("请输入您想要的流行语:")
if query in slang_dict:
print("您查询的流行语是:" + query + " 含义如下:")
print(slang_dict[query])
else:
print("当前本词典收集的流行语数为:" + str(len(slang_dict)) + " 条,")
print("您查询的流行语暂时未收录。")
  • 运行演示:
    • 输入 YYDS(存在):打印查询提示 + 释义
    • 输入不存在词:打印词典条数 + 未收录提示
  • 迭代场景:处理大量数据,如全公司上万人体温自测信息,找高于38度的,手动一条条查太慢
    • Python用for循环进行迭代
  • 迭代对象:列表、字典、字符串等
    • 列表:按顺序对每个元素做事情
    • 字典:按顺序对每个键或值做事情
    • 字符串:按顺序对每个字符做事情
  • 基本结构
for 变量名 in 可迭代对象:
# 对每个变量做一些事情
# ...
- **for** 是关键字
- 空格后**变量名**:代表迭代对象里的每一个东西
  • 完整语法for 变量名 in 可迭代对象:
    • 关键词 in 后面跟迭代对象
    • 示例检查体温列表:
for temperature in temperature_list:
# 对每个变量做一些事情
# ...
  • 变量赋值机制temperature(自命名,无所谓具体叫什么)依次赋值为 temperature_list 中的每个元素,直到最后一个
    • temperature_list 已定义,包含全公司人员体温
  • 循环体:for下面一行开始的所有缩进语句视为循环内代码
    • 对每个元素执行一遍
  • 实际应用示例:检查每个体温,若超过38度打印数值和“完球了”
temperature_list = [36.4, 36.6, 36.2, 37.0, 36.] # 示例部分
for temperature in temperature_list:
if temperature > 38:
print(temperature)
print("完球了")
- 运行输出示例:
38.3
完球了
38.1
完球了
- **优势**:只需统计“完球了”出现次数,即知发烧人数
  • 列表迭代(如体温列表)只能知道有多少人发烧,但无法知道具体是谁
    • 示例:
temperature_list = [36.4, 36.6, 36.2, 37.0, 36.5, 36]
for temperature in temperature_list:
if temperature >= 38:
print(temperature)
print("完球了")
- 实际输出:**无输出**(列表中无温度≥38)
  • 使用工号-体温字典temperature_dict = {"111":36.4, "112":36.6, "113":36.2, "114":37.0, "115":36.5, "116":36}
    • 字典方法
      • 字典名.keys():返回所有(工号)
      • 字典名.values():返回所有(体温)
      • 字典名.items():返回所有键值对(元组形式,如 ("111", 36.4)
  • 结合for循环迭代items(),解包键值对筛选发烧工号:
for staff_id, temperature in temperature_dict.items():
if temperature >= 38:
print(staff_id)
- **解包机制**:`items()` 返回元组,第一个元素赋给 `staff_id`,第二个赋给 `temperature`
- 示例元组:`("111", 36.4)` → staff\_id="111", temperature=36.4
  • for循环items()解包等价写法for staff_id, temperature in temperature_dict.items(): 等同于元组逐元素赋值
    • 运行后打印所有体温≥38度的员工工号
  • range函数:生成整数数列
    • 语法:range(起始值, 结束值)(括号内第一个数字为起始,最后一个为结束值)
    • 应用场景:计算1到100和,手算累加太累
  • 高斯公式:小学时计算1+2+…+100 = 5050
    • 公式:首 + 尾 × 项数 ÷ 2
      • 没有高斯那么聪明,用while循环 + range实现
  • range(起始值, 结束值):生成从起始值到结束值-1的序列
    • 示例:range(5, 10) → i 依次为 5,6,7,8,9(结束值10不包含
for i in range(5, 10):
print(i)
输出:
5
6
7
8
9
  • range(起始值, 结束值, 步长):步长默认为1
    • 示例打印1-9奇数:range(1, 10, 2) → 1,3,5,7,9
for num in range(1, 10, 2):
print(num)
输出:
1
3
5
7
9
  • 高斯难题:用for循环秒算1+2+…+100
total = 0
for i in range(1, 101):
total = total + i
print(total) # 输出 5050
- **机制**:total初始0,循环中i依次为1,2,3...100,累加到total
- 第一次:total = 0 + 1 = 1
- 第二次:total = 1 + 2 = 3
- ... 直到total=5050

00:03 00:03:47

while函数

00:01 00:01:26

  • 需求:持续测量天空亮度,亮度≥500时拍照,直到亮度<500
  • 问题:仅用if measure_brightness() >= 500:
    • 只判断一次,最多拍一张照片,无法捕捉全过程
# measure_brightness() 返回当前天空亮度
if measure_brightness() >= 500:
# 拍照片
take_photo()
  • 局限:程序执行一次if即结束,需循环机制实现持续判断
  • for循环局限:固定执行100次(如for i in range(100):),计算机太快,可能日落前循环结束
    • 示例:重复if measure_brightness() >= 500 判断拍照,但次数未知
  • while循环:条件为真时反复执行,直到为假
    • 基本结构
while 条件A:
行动B
- **执行流程**:判断**条件A**(需为布尔值True/False)是否为真
- 为真:执行缩进的**行动B**,然后**再次判断条件**
- 为假:循环**结束**
+-------+
| 条件A |
+-------+
|
v
+-------+
| 行动B |
+-------+
|
+-----> 结束
  • 应用:日落拍照——亮度≥500时持续拍照,直到<500
  • 首次条件为假:行动B零次执行
# measure_brightness() 返回当前天空亮度
while measure_brightness() >= 500:
# 拍照片
take_photo()
  • 效果:亮度≥500时持续拍照,直到<500
  • 打印列表每个元素list1 = ["你", "好", "吗", "兄", "弟"])三种等价写法:

    1. 直接for迭代
for char in list1:
print(char)
1. **for + range(len())**
for i in range(len(list1)):
print(list1[i])
1. **while + 索引递增**
i = 0
while i < len(list1):
print(list1[i])
i = i + 1
  • range(len(list1)):只放一个值时,起始值默认为0,结束值为 len(list1)
    • i 依次赋值为 0,1,2,… 到 len(list1)-1
    • 0 是列表第一个元素的索引,len-1 是最后一个元素的索引
  • 等价于打印列表所有元素:print(list1[i])
  • 初始i = 0
  • 条件i < len(list1) 为真进入循环
    • 打印 list1[i](第一个元素)
    • i = i + 1(变为1)
    • 再次判断条件,继续循环直到 i >= len(list1)
  • 三种写法打印列表元素:for直接迭代、for+range(len())、while+i递增,完全等价
    • for循环优势:在既可用for又可用while时,for更简单直观,所需行数更少
  • while循环风险:比for更危险
    • 示例:忘记写 i = i + 1i一直=0,条件 i < len(list1) 一直为真,进入无限循环
  • while适用场景for做不到的事
    • 如日落拍照:循环结束次数未知,while更适合
  • 明确循环对象或次数时,for更方便
    • 列表、字典、range生成的序列等

  • for循环:有明确循环对象或次数
    • 👍 明确迭代对象(如列表、range)
  • while循环:循环次数未知
    • 👍 特别适合不知道需要循环多少次的情况
    • while更通用

while循环实践:用户输入数字求平均值计算器

Section titled “while循环实践:用户输入数字求平均值计算器”
  • 需求:用户输入任意数量数字,最后输入 q 表示完成,程序计算并输出平均值
    • 先暂停视频,自己尝试编写
    • 参考代码从打印欢迎信息开始

代码开头:

print('Hello ya 2 3.00 4.00 5.00')
print('我是一个求平均值的程序')

用户输入平均值计算器:持续输入逻辑

Section titled “用户输入平均值计算器:持续输入逻辑”
  • 打印程序提示:print('这是一个求平均值的程序。')
  • 获取用户输入:user_input = input('请输入数字(完成所有数字输入,请输入q停止程序):')
    • input返回字符串,必须赋值给变量才能保存结果
  • 持续输入需求:反复获取输入直到用户输入 q
    • 这种情况(持续执行直到条件为假)适合 while 循环

用户输入平均值计算器:while循环持续输入逻辑

Section titled “用户输入平均值计算器:while循环持续输入逻辑”
  • while循环条件while user_input != "q":
    • 因为要不等于q时继续循环,所以用**!=**(不等于)
    • 循环体内:再次执行 user_input = input(...) 获取下一个输入
  • 完整代码示例:
print('这是一个求平均值的程序。')
user_input = input('请输入数字(完成所有数字输入,请输入q停止程序):')
while user_input != "q":
user_input = input('请输入数字(完成所有数字输入,请输入q停止程序):')
  • 运行演示
    • 输入23 → 继续要输入
    • 输入2134 → 继续要输入
    • 输入5242 → 继续要输入
    • 输入qwhile循环结束,程序完成
  • 关键逻辑:不等于q时反复要输入,已搭建好持续输入框架

用户输入平均值计算器:total和count初始化

Section titled “用户输入平均值计算器:total和count初始化”
  • 计算平均值需要总和个数:平均值 = 总和 ÷ 个数
  • 初始化变量:
    • total = 0:记录所有输入数字的总和
    • count = 0:记录输入数字的个数

代码示例:

print("这是一个求平均值的程序")
total = 0
count = 0
while user_input != "q":
user_input = input("请输入数字(完成所有数字输入后,请输入q终止程序):")
  • 累加位置关键:必须在while循环内执行,否则只加一次
    • 若放user_input = input(...)后面,首次输入不会被累加
    • 若用户首次输入q,需避免无效累加
  • 对象封装:将所有相关属性方法写在一起
    • 结合属性和方法,更优雅处理复杂逻辑
  • 避免参数重复传递:如洗衣机容量作为对象属性
    • 对象创建时设置容量
    • 后续方法直接调用自身属性,无需每次传参
  • 导入pandas
import pandas as pd
- 同时使用 **pandas.all()** 函数
  • 创建name Series
    • 元素:'小明', '小红', '小王', '小李', '小华'
    • 索引:'001', '002', '003', '004', '005'
  • 创建height Series
    • 元素:172.5, 168.2, 178.1, 181.3, 161.7
    • 索引:'001', '002', '003', '004', '005'
  • 创建students DataFrame
    • 数据来源:name 和 height Series
    • index:'001' 到 '005'
  • 打印列名:显示students所有列名
  • 引入库:import pandas as pd
  • pd.Series创建:传入姓名列表
pd.Series([
'小李', '小王', '小张', '小陈', '小周'
])
  • 列表元素直接复制(引号、逗号为英文标点)
  • 创建多个Series并指定index
    • name = pd.Series(['张三', '李四', '王五', '赵六', '孙七'], index=['001', '002', '003', '004', '005'])
    • age = pd.Series([20, 22, 21, 23, 22], index=['001', '002', '003', '004', '005'])
    • score = pd.Series([80.0, 90.0, 70.0, 85.0, 95.0], index=['001', '002', '003', '004', '005'])
    • gender = pd.Series(['女', '男', '男', '女', '男'], index=['001', '002', '003', '004', '005'])
    • height = pd.Series([165.0, 170.0, 175.0, 168.0, 178.0], index=['001', '002', '003', '004', '005'])
    • 注意:写代码时留意中英文标点;index列表对应各元素位置,如’001’对应第一个元素
  • 组合成DataFrame
students = pd.DataFrame({
'name': name,
'age': age,
'score': score,
'gender': gender,
'height': height
})
- 各列直接用Series名作为键
  • 打印DataFramestudents 显示完整表格
  • 浮点数元素[172.5, 168.0, 178.2, 181.3, 180.0]5个元素
  • pd.Series自动类型:创建后变为浮点数
  • 默认索引:无指定index,使用整数0-4
  • 对比其他Series:name/gender/score有6元素(index 001-006),height仅5元素,标签001到005非006
height = pd.Series([172.5, 168.0, 178.2, 181.3, 180.0])

students DataFrame创建练习(考试成绩版)

Section titled “students DataFrame创建练习(考试成绩版)”
  • 任务:创建名为students的DataFrame
    • 索引:学号(‘001’, ‘002’, …, ‘006’)
    • :姓名、考试一、考试二、考试三
    • 输出完整DataFrame
学号 姓名 考试一 考试二 考试三
‘001’ ‘小明’ ‘95’ ‘92’ ‘94’
‘002’ ‘小红’ ‘85’ ‘92’ ‘93’
‘003’ ‘小王’ ‘79’ ‘88’ ‘85’
‘004’ ‘小李’ ‘91’ ‘79’ ‘89’
‘005’ ‘小张’ ‘96’ ‘91’ ‘91’
‘006’ ‘小刘’ ‘90’ ‘91’ ‘90’
  • 任务:创建名为average的DataFrame
    • 索引:学号
    • :‘姓名’、‘平均分’(三次考试平均值)
  • 工欲善其事,必先利其器:安装Jupyter Notebook
    • 基于网页的交互式计算环境
    • 用途:编写/运行代码、查看输出、可视化数据、分享文档
    • 流行领域:数据分析、数据科学、机器学习
import pandas as pd
# df = pd.DataFrame(...)
  • 日常Python学习:用代码编辑器(如PyCharmVSCode)编写**.py**文件
    • 运行时Python解释器从头到尾执行全部代码
  • 数据/算法分析场景:更喜欢Jupyter Notebook
    • 核心优势:按单元格单独运行代码
      • 编辑器运行:每次从开头执行全部,数据量大时读取/清洗数据需几秒
      • Notebook:修改分析公式时,只运行当前单元格
        • 未改动的前置步骤(如读取大文件)无需重复执行,节省等待时间
# 示例:数据分析流程
# In [1]: import pandas as pd
df = pd.read_csv("e_commerce.csv") # 耗时步骤,只跑一次
# In [2]: 修改分析公式,只运行此单元格
print(df.groupby("region")["revenue"].mean())
  • 单元格独立运行:不同步骤(如读取数据、分析)放在不同单元格
    • 只运行一次读取数据,修改分析代码时无需重复读取
  • 丰富展示格式:支持Markdown标记语言
    • 标题:# 一级标题## 二级标题
    • 列表:- 第一点
    • 加粗:**粗体**、斜体:*斜体*
    • 行内代码:`` 代码 ``
    • 代码块:
import math
print(math.pi)
  • LaTeX公式:插入数学公式和矩阵
f(x) = \int_{a}^{b} \left( \sum_{i=1}^{n} \frac{x^{i}}{i!} \right) dx
\int_{0}^{2\pi} \cos(x) dx = \left[ \sin(x) \right]_{0}^{2\pi} = 0
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
import pandas as pd
df = pd.read_csv('e_commerce.csv')
print(df.head(10))
df = df.dropna(subset=['Customer ID'])
print(df.groupby('Region')['Revenue'].mean())
df.to_csv('e_commerce_cleaned.csv', index=False)
  • 实际应用:数据读取、清洗、分析、分组统计、保存文件
  • 分享丰富格式:以HTML等格式分享时,Markdown和LaTeX效果原封不动展示
    • 帮助他人理解思考和分析过程,节省解答疑问时间
  • 交互式运行环境:无需print语句即可查看变量值和中间结果
    • 对比命令行模式:直接显示输出,便于快速探索数据、尝试分析方法
In [2]: 365 * 5
Out[2]: 1825
In [3]: 'hi' + 'i'
Out[3]: 'hii'
  • 步骤:打开CMD命令提示符
    • 安装过程简单直接
  • 打开终端:点击顶部放大镜图标,输入终端terminal回车进入黑窗口
  • 安装命令pip3 install notebook,回车开始安装
  • 验证安装:输入jupyter notebook启动,浏览器自动打开界面即成功
  • 关闭Jupyter:关闭浏览器窗口不够,还需终止后台服务器
  • 安装命令
Terminal window
pip3 install notebook
- 回车执行安装
  • 启动命令
Terminal window
jupyter notebook
- 安装完成后输入,回车启动
  • 安装输出:显示依赖包列表,最后“Successfully installed notebook-6.5.4”
    • pip更新提示:/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 -m pip install --upgrade pip

Jupyter Notebook 启动与关闭 (Windows/MacOS) 步骤

Section titled “Jupyter Notebook 启动与关闭 (Windows/MacOS) 步骤”
  • 启动:输入 jupyter notebook 命令

    • 验证:浏览器自动打开Jupyter Notebook界面
  • 关闭:

    1. 关闭浏览器窗口

    2. 在CMD或终端窗口按 Ctrl+C 终止后台服务器

      • 确认关闭提示,输入 y 回车
  • MacOS/Linux:需按 y 和回车二次确认

  • Windows:按一次 Ctrl+C 即可终止

  • 安装完成后验证:输入启动命令 jupyter notebook,回车执行
  • 成功标志:浏览器自动打开 Jupyter Notebook 界面
    • 看到界面即说明安装成功
  • 启动成功标志:显示本地地址
Terminal window
http://localhost:8888/?token=f83374a573d57f3353d53c57d353d53c4d4d4d42
or http://127.0.0.1:8888/tree?token=f83374a573d57f3353d53c57d353d53c4d4d4d42
  • 内核启动日志
Terminal window
[C 00:00:00.442] Kernel started: 209fac-2f4b-40fd-d65c-c337d
[I 17:49:52.242] NotebookApp: Serving notebooks from local directory: /Users/lexinlin
  • 关闭日志
Terminal window
Shutdown this notebook server (Ctrl+C)? y
[I 17:49:55.570] NotebookApp: Shutting down 1 kernel
[I 17:49:55.570] NotebookApp: Kernel shutdown. 209fac-2f4b-40fd-d65c-c337d
  • pip更新提醒
Terminal window
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/jupyter_notebook-6.5.4.dist-info/METADATA
install --upgrade
  • 数据分析核心工具:Jupyter Notebook贯穿数据分析全流程
  • 本视频学习内容:Jupyter Notebook的使用方法
  • 第一步:启动Jupyter Notebook
    • Windows系统:在菜单栏操作
  • Windows:搜索框输入CMD,点击命令提示符打开黑窗口
  • macOS:顶部菜单栏放大镜图标,输入终端terminal,回车打开黑窗口
  • 启动命令:在命令提示符或终端输入
Terminal window
jupyter notebook
- 按回车,默认浏览器自动打开**Notebook主界面**
- 显示当前目录下所有文件和文件夹
  • 浏览器意外关闭恢复:终端显示
Terminal window
The Jupyter Notebook is running at:
http://localhost:8888/?token=...
- 复制URL到浏览器重新打开
  • 重要提醒不要关闭输入启动命令的CMD或终端窗口
    • 否则Jupyter Notebook服务会被终止

Jupyter Notebook 主界面导航与创建Notebook

Section titled “Jupyter Notebook 主界面导航与创建Notebook”
  • 显示当前目录所有文件和文件夹
  • 点击文件夹进入子目录(如Desktop
  • 进入目标文件夹(如桌面)
  • 点击 NewNotebookPython 3
  • 自动打开新编辑界面
  • 目录中出现新文件(如Untitled.ipynbDemo.ipynb
  • 在编辑界面或目录列表中重命名新建文件
  • 浏览器访问URL
Terminal window
http://localhost:8888/?token=6f5f65f797cca2ca2a3f7f9e3a36fedffc35d27df808598d
or http://127.0.0.1:8888/?token=6f5f65f797cca2ca2a3f7f9e3a36fedffc35d27df808598d
  • 自动打开文件/Users/alinlin/Library/Jupyter/runtime/nbserver-15256-open.html
  • 服务目录:Serving notebooks from /Users/alinlin
  • 主界面文件示例ApplicationsbinDesktopDocumentsDownloadsawx1-20200905.pem (1.89 KB)
  • 重命名文件:点击标题(如Untitled),输入新名称(如Demo),点击重命名
  • 界面布局(标题下方):
    • 菜单栏:File、Edit、View、Insert、Cell、Kernel、Widgets、Help
    • 工具条:菜单栏中最常用操作的快捷按钮
    • 单元格:代码输入和执行区域
标题 → 菜单栏 → 工具条 → 单元格
  • 工具条:菜单栏中最常用操作的快捷方式,大部分时候通过工具条与单元格交互
  • 单元格:主要用来写Python代码文字
  • 演示简单代码:
print('hello world')
  • 编辑模式
    • 点击单元格内部,外框变绿色,底色为白色
    • 新版本特点:编辑模式底色白,命令模式底色灰
  • 命令模式
    • 输入完成后按 ESC键 或点击其他地方切换
  • 点击标题标签 [Untitled] [重命名],输入新名称
  • 编辑模式:点击单元格内部
    • 外框变绿色,底色白色
    • 用于输入和编辑代码/文字
  • 命令模式:按 ESC键 或点击其他地方切换
    • 外框变蓝色,底色灰色
    • 用于单元格整体操作
  • 第一个按钮:保存文件内容
  • 第二个加号按钮:在当前选中单元格下方新建单元格
  • 接下来三个按钮: - 剪切选中的单元格 - 复制选中的单元格 - 粘贴单元格
  • Shift键多选:按住Shift键选择多个单元格,然后统一操作
  • 移动单元格顺序
    • 上箭头:当前选中单元格往上移动一格
    • 下箭头:当前选中单元格往下移动一格
  • 运行按钮:执行当前单元格所有Python代码
    • 执行中:左边方括号显示星号*
    • 执行完毕:方括号变成数字,表示执行顺序
      • 第一个单元格运行后显示 1
      • 下一个显示 2
  • 灵活执行:可以任意顺序运行单元格
In [*]: # 运行中
In [1]: # 执行完毕,顺序1
In [2]: # 执行完毕,顺序2
  • 独立运行优势:可以运行第三格后回到第一格再执行,或多次重复运行同一个单元格
    • 旁边的数字(如 [1]、[2])记录和告知执行顺序
  • 顺序关键性:分别在第二格写读取文件、第三格写查看数据
    • 修改读取文件后,若第二格数字 > 第三格数字,则第三格输出仍是之前数据
    • 解决:重新运行第三格更新结果
  • 建议:顺序重要时,把所有代码单元格都运行一遍
# 示例:多次运行相同代码
In [1]: print("hello world")
hello world
In [2]: print("hello world")
hello world
# 数据读取示例
In [1]: import pandas as pd
In [2]: df = pd.read_csv('./DataAnalysisNotebook/e_commerce.csv')
In [3]: df.head()

df.head() 输出示例(e_commerce.csv 前5行):

InvoiceNo StockCode Description Quantity InvoiceDate UnitPrice CustomerID Country
0 536365 850366 WHITE HANGING HEART LANTERN 64 1/1/2011 8:26 6.95 17850 United Kingdom