【Python机器学习入门1】VSCode环境配置与Python基础
课程概述
欢迎来到Python机器学习世界!
亲爱的学习者,欢迎开启你的机器学习之旅!这是一套专为零基础初学者设计的完整课程,通过24个精心设计的课时,带你从完全不懂编程到能够独立完成机器学习项目。
课程设计理念
为什么选择机器学习? 机器学习是当今最具影响力的技术之一,它正在改变我们的生活:
-
🛍️ 智能推荐:淘宝、抖音的个性化推荐系统
-
🗣️ 语音助手:小爱同学、Siri的语音识别
-
🏥 医疗诊断:AI辅助疾病诊断
-
🚗 自动驾驶:特斯拉、百度的自动驾驶技术
-
💳 金融风控:银行欺诈检测系统
我们的教学理念:
-
从零开始:不需要任何编程基础
-
实战驱动:每个概念都配有可运行的代码示例
-
工具友好:使用完全免费的VSCode工具
-
项目导向:通过真实项目串联所有知识点
-
循序渐进:精心设计的学习路径,步步为营
学习路径规划
我们的24课时课程分为四个阶段:
第一阶段:基础准备(第1-6课时)
-
Python编程基础
-
数据处理与可视化
-
开发环境配置
第二阶段:核心概念(第7-12课时)
-
机器学习基础概念
-
数据预处理技术
-
模型评估方法
第三阶段:算法实战(第13-18课时)
-
常用机器学习算法
-
模型训练与调优
-
无监督学习技术
第四阶段:项目实战(第19-24课时)
-
端到端项目开发
-
模型部署基础
-
成果展示与总结
工具选择:为什么是VSCode?
VSCode的优势:
-
🆓 完全免费:无需担心许可证问题
-
🔧 功能强大:提供专业级的开发体验
-
📚 生态丰富:海量扩展插件
-
🌐 跨平台:Windows、macOS、Linux全支持
-
🤖 AI智能:内置AI代码补全功能
VSCode + Jupyter扩展 = 完美组合 我们将使用VSCode的Jupyter扩展,它结合了代码编辑器和交互式笔记本的优点,让你既能享受专业的代码编辑功能,又能进行交互式数据探索。
学习目标
完成本课程后,你将能够:
-
✅ 熟练使用Python进行数据处理和分析
-
✅ 理解并实现常见的机器学习算法
-
✅ 使用VSCode进行专业的项目开发
-
✅ 完成端到端的机器学习项目
-
✅ 具备继续学习深度学习的基础
所需基础
-
数学基础:高中数学水平即可
-
编程基础:零基础开始,我们会手把手教学
-
英语基础:能够阅读简单英文文档
-
学习态度:保持好奇心和坚持学习的决心
学习建议
-
动手实践:编程是技能,只看不练很难掌握
-
循序渐进:不要跳课,每个课时都是后续内容的基础
-
多问多查:遇到问题先尝试自己解决,再寻求帮助
-
坚持练习:每天进步一点点,比一次性学很多更有效
现在,让我们开始第一课时的学习!
第一课时:VSCode环境配置与Python基础
课时概览
学习目标:完成VSCode环境配置,掌握Python和Jupyter Notebook基础操作
预计时长:2-3小时(可按自己的节奏学习)
核心工具:VSCode + Jupyter扩展
学习成果:能够独立创建和运行Python程序,理解基本编程概念
本课时的重要性
第一课时就像建房子的地基,虽然可能有些枯燥,但这是成为机器学习工程师的重要第一步。正确的环境配置和基础概念理解,可以避免后续学习中的很多问题。
一、开发环境配置
1.1 为什么选择这个工具组合?
详细讲解:
在学习编程的初期,选择一个合适的开发工具非常重要。我们选择VSCode + Jupyter扩展的组合,原因如下:
VSCode的优势:
-
智能代码补全:输入代码时自动提示,减少拼写错误
-
实时错误检查:立即发现代码中的问题
-
强大的调试功能:像侦探一样追踪代码执行过程
-
丰富的扩展生态:可以通过插件扩展各种功能
-
完全免费:不用担心许可证问题
Jupyter扩展的优势:
-
交互式编程:可以分块运行代码,立即看到结果
-
混合文档:代码和说明文字可以写在一起
-
数据探索友好:特别适合数据分析和机器学习
-
可视化支持:图表可以直接在笔记本中显示
这个组合为什么适合初学者:
-
降低学习门槛:不需要记忆复杂的命令行操作
-
即时反馈:每写一行代码都能立即看到结果
-
错误友好:错误信息清晰,便于理解和修复
-
培养好习惯:从一开始就使用专业工具
1.2 安装步骤详解
详细讲解:
让我们一步步完成环境配置。请严格按照顺序操作:
步骤1:安装Python
Python是我们的编程语言,就像学英语需要先学字母一样。
安装步骤:
1. 访问Python官网:https://www.python.org/downloads/
2. 点击黄色的"Download Python"按钮
3. 运行下载的安装程序
4. **重要**:在安装向导中,务必勾选"Add Python to PATH"
5. 点击"Install Now"完成安装验证安装:
1. 打开命令行(Windows:按Win+R,输入cmd;macOS:打开终端)
2. 输入:python --version
3. 如果显示Python版本号(如Python 3.9.0),说明安装成功
为什么需要添加到PATH? PATH是系统寻找可执行文件的路径。添加到PATH后,你可以在任何位置运行Python,否则只能在特定目录运行。
步骤2:安装VSCode
VSCode是我们的代码编辑器,就像作家的笔一样。
安装步骤:
1. 访问VSCode官网:https://code.visualstudio.com/
2. 点击蓝色的"Download for ..."按钮
3. 运行安装程序,按照向导完成安装
4. 安装完成后打开VSCode
步骤3:安装必要扩展
扩展就像给VSCode安装插件,让它具备更多功能。
安装步骤:
-
打开VSCode
-
点击左侧的扩展图标(四个小方块)或按Ctrl+Shift+X
-
搜索并安装以下扩展:
-
Python (由Microsoft发布)
-
Jupyter (由Microsoft发布)
-
Chinese (Simplified) Language Pack(可选,中文语言包)
-
1.3 配置VSCode
详细讲解:
让我们配置VSCode,让它更适合Python开发:
# 配置步骤:# 1. 设置Python解释器
# - 按Ctrl+Shift+P打开命令面板
# - 输入"Python: Select Interpreter"
# - 选择刚才安装的Python
# 2. 推荐设置(可选但建议):
# - 文件 -> 首选项 -> 设置
# - 搜索"auto save",选择"onFocusChange"
# - 搜索"word wrap",选择"on"# 3. 测试配置
# - 新建文件(Ctrl+N)
# - 输入:print("Hello VSCode!")
# - 保存为test.py(Ctrl+S)
# - 按F5运行
二、创建第一个Jupyter Notebook
2.1 什么是Jupyter Notebook?
详细讲解:
Jupyter Notebook是一种交互式编程环境,它改变了传统的编程方式:
传统编程方式:
-
写完整的程序
-
运行整个程序
-
如果出错,从头开始调试
Jupyter Notebook方式:
-
将程序分成多个"单元格"
-
可以单独运行每个单元格
-
立即看到每个步骤的结果
-
特别适合数据探索和机器学习
类比理解: 把Jupyter Notebook想象成一个科学实验笔记本:
-
每个单元格是一个实验步骤
-
你可以记录实验过程(Markdown单元格)
-
可以执行实验操作(代码单元格)
-
立即看到实验结果
2.2 在VSCode中创建Notebook
详细讲解:
让我们创建第一个Jupyter Notebook:
# 创建步骤:# 1. 打开VSCode
# 2. 按Ctrl+Shift+P打开命令面板
# 3. 输入"Jupyter: Create New Jupyter Notebook"
# 4. 选择"Python"作为内核(Kernel)
# 5. 保存文件:按Ctrl+S,保存为"01_python_basics.ipynb"# 注意:文件扩展名是.ipynb,表示Jupyter Notebook文件
2.3 Jupyter Notebook界面详解
详细讲解:
让我们熟悉Jupyter Notebook的界面:
## Notebook界面组成:### 1. 工具栏
- [+ Code]:添加代码单元格
- [+ Markdown]:添加文档单元格
- [运行]:执行当前单元格
- [停止]:停止执行
- [重启内核]:重新开始(清空所有变量)### 2. 单元格类型
- **代码单元格**:灰色背景,用于编写和执行Python代码
- **Markdown单元格**:白色背景,用于写文档和说明### 3. 单元格状态
- [ ]:未执行
- [*]:正在执行
- [1]:已执行,数字表示执行顺序
### 4. 常用快捷键
- Shift+Enter:运行当前单元格并跳到下一个
- Ctrl+Enter:运行当前单元格并停留在当前
- A:在上方插入单元格
- B:在下方插入单元格
- D+D:删除当前单元格
- M:转换为Markdown单元格
- Y:转换为代码单元格
三、Python基础语法
3.1 第一个Python程序
详细讲解:
让我们编写第一个Python程序,理解基本的编程概念:
(%% [markdown] 表示markdown单元格, %%表示Python单元格)
# 在VSCode的Notebook中创建第一个单元格# %% [markdown]
# # 我的第一个Python程序
#
# 在这个Notebook中,我将学习Python的基础语法
# %%
# 单元格1:打印语句
print("Hello, Machine Learning!")
print("欢迎来到机器学习课程!")# 打印语句的作用:向屏幕输出信息
# print()是Python的内置函数,用于输出内容
# 引号内的内容会原样输出
# %%
# 单元格2:变量和基本运算
# 变量就像数学中的未知数,用于存储数据
a = 10 # 将数字10存储在变量a中
b = 3 # 将数字3存储在变量b中# 基本数学运算
print(f"{a} + {b} = {a + b}") # 加法
print(f"{a} - {b} = {a - b}") # 减法
print(f"{a} * {b} = {a * b}") # 乘法
print(f"{a} / {b} = {a / b:.2f}") # 除法,保留2位小数
print(f"{a} 的平方是 {a ** 2}") # 平方运算# 注意:f"..."是f-string,可以在字符串中嵌入变量
重要概念解释:
-
变量:就像数学中的x、y,用于存储数据
-
赋值:
=
不是相等,而是"赋值给" -
函数:
print()
是一个函数,用于输出内容 -
注释:
#
后面的内容不会被执行,用于解释代码
3.2 数据类型
详细讲解:
Python有多种数据类型,就像现实世界有不同种类的东西:
# %% [markdown]
# ## Python数据类型
#
# 数据类型决定了数据可以做什么操作
# %%
# 单元格3:基本数据类型
# 整数 (int) - 没有小数点的数字
age = 25
students_count = 30# 浮点数 (float) - 有小数点的数字
price = 19.99
temperature = 36.6# 字符串 (str) - 文本数据,用引号包围
name = "张三"
course = "机器学习"
message = 'Hello World'# 布尔值 (bool) - 只有两个值:True或False
is_student = True
has_graduated = False# 查看数据类型
print(f"年龄: {age} (类型: {type(age)})")
print(f"价格: {price} (类型: {type(price)})")
print(f"姓名: {name} (类型: {type(name)})")
print(f"是否学生: {is_student} (类型: {type(is_student)})")
# %%
# 单元格4:数据结构
# 列表 (List) - 有序的元素集合,用方括号[]
fruits = ["苹果", "香蕉", "橙子", "草莓"]
numbers = [1, 2, 3, 4, 5]print("水果列表:", fruits)
print("数字列表:", numbers)# 访问列表元素(索引从0开始)
print("第一个水果:", fruits[0]) # 索引0表示第一个元素
print("最后一个数字:", numbers[-1]) # 索引-1表示最后一个元素# 列表操作
fruits.append("葡萄") # 在末尾添加元素
print("添加葡萄后:", fruits)numbers.remove(3) # 删除元素3
print("删除3后:", numbers)# %%
# 单元格5:字典 (Dictionary)
# 字典存储键值对,用花括号{}
student = {"姓名": "李四","年龄": 20,"专业": "计算机科学","成绩": 85.5,"选修课程": ["机器学习", "深度学习", "自然语言处理"]
}print("学生信息:")
# 遍历字典的键值对
for key, value in student.items():print(f" {key}: {value}")# 访问特定值
print(f"学生姓名: {student['姓名']}")
print(f"选修课程: {student['选修课程']}")
数据类型总结:
数据类型 | 例子 | 用途 |
---|---|---|
int | 25, -10 | 整数计算 |
float | 3.14, -2.5 | 小数计算 |
str | "hello", 'Python' | 文本处理 |
bool | True, False | 逻辑判断 |
list | [1, 2, 3], ['a', 'b'] | 有序集合 |
dict | {'name': 'John', 'age': 20} | 键值对存储 |
3.3 控制流
详细讲解:
控制流让程序能够根据不同情况执行不同的代码:
# %% [markdown]
# ## 控制流
#
# 控制程序执行的流程
# %%
# 单元格6:条件判断 - if语句
score = 88# if-elif-else结构
if score >= 90:grade = "优秀"print("🎉 成绩优秀!")
elif score >= 80:grade = "良好"print("👍 成绩良好!") # 这个会被执行
elif score >= 70:grade = "中等"print("✅ 成绩中等")
elif score >= 60:grade = "及格"print("⚠️ 刚刚及格")
else:grade = "不及格"print("❌ 需要补考")print(f"分数: {score}, 等级: {grade}")# %%
# 单元格7:循环 - for循环
# 遍历数字序列
print("数字1-5的平方:")
for i in range(1, 6): # range(1,6)生成1,2,3,4,5square = i ** 2print(f"{i}² = {square}")# 遍历列表
print("\n水果列表:")
# enumerate同时获取索引和值
for index, fruit in enumerate(fruits):print(f"{index + 1}. {fruit}")
# %%
# 单元格8:while循环
# while在条件为真时重复执行
count = 1
print("使用while循环计数:")
while count <= 5:print(f"计数: {count}")count += 1 # 相当于 count = count + 1
控制流要点:
-
条件判断:让程序根据不同情况做出决策
-
循环:重复执行相似的操作
-
缩进:Python用缩进表示代码块,必须一致
-
条件表达式:
>=
,<=
,==
,!=
等比较运算符
3.4 函数定义
详细讲解:
函数让代码可以重复使用,就像数学中的函数一样:
# %% [markdown]
# ## 函数定义
#
# 函数是组织代码的基本单元
# %%
# 单元格9:自定义函数
def calculate_circle_area(radius):"""计算圆的面积参数:radius: 圆的半径返回:圆的面积"""pi = 3.14159area = pi * (radius ** 2)return areadef greet(name, time_of_day="早上"):"""问候函数参数:name: 姓名time_of_day: 时间,默认为"早上""""return f"{time_of_day}好,{name}!"# 使用函数
radius = 5
area = calculate_circle_area(radius)
print(f"半径为{radius}的圆面积: {area:.2f}")print(greet("张三"))
print(greet("李四", "下午"))
# %%
# 单元格10:带条件判断的函数
def evaluate_performance(score):"""根据分数评估表现"""if score >= 90:return "优秀", "🎉"elif score >= 80:return "良好", "👍"elif score >= 70:return "中等", "✅"elif score >= 60:return "及格", "⚠️"else:return "不及格", "❌"# 测试多个分数
test_scores = [85, 92, 78, 65, 55]
for score in test_scores:grade, emoji = evaluate_performance(score)print(f"分数 {score}: {grade} {emoji}")
函数要点:
-
def关键字:用于定义函数
-
参数:函数接收的输入
-
返回值:函数计算的结果
-
文档字符串:
"""..."""
用于说明函数用途 -
默认参数:可以为参数指定默认值
四、NumPy基础入门
4.1 为什么需要NumPy?
详细讲解:
NumPy是Python科学计算的基础库,对于机器学习至关重要:
Python列表的局限性:
-
数学运算不方便
-
处理大量数据时速度慢
-
缺少科学计算函数
NumPy的优势:
-
提供多维数组对象
-
高效的数学运算
-
丰富的科学计算函数
-
很多机器学习库基于NumPy
类比理解: 把NumPy想象成一个专业的数学工具箱,而Python列表就像普通的工具箱。
4.2 NumPy数组操作
详细讲解:
让我们学习NumPy的基本操作:
创建新的Notebook:02_numpy_basics.ipynb
接着在终端安装numpy库: pip3 install numpy
你也可以使用国内镜像源: pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
# %% [markdown]
# # NumPy基础入门
#
# NumPy是Python科学计算的基础库
# %%
# 单元格1:导入NumPy
import numpy as np# 惯例:将numpy重命名为np,这是社区标准做法
print("NumPy版本:", np.__version__)
# %%
# 单元格2:创建数组
# 从列表创建数组
arr1 = np.array([1, 2, 3, 4, 5]) # 一维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组print("一维数组:")
print(arr1)
print("形状:", arr1.shape) # 数组的维度print("\n二维数组:")
print(arr2)
print("形状:", arr2.shape) # (2,3)表示2行3列
-
在NumPy中,形状(shape) 描述的是数组的维度结构。它告诉我们数组在每个维度上有多少个元素。
-
(5,) 表示这是一个包含一个元素的元组。逗号是为了区分 (5,)(元组)和 5(整数)。
-
(2, 3) 表示:"有2行,每行有3列"
# %%
# 单元格3:创建特殊数组
# 全零数组
zeros = np.zeros((3, 4)) # 3行4列的全零数组
print("3x4全零数组:")
print(zeros)# 全一数组
ones = np.ones((2, 3)) # 2行3列的全一数组
print("\n2x3全一数组:")
print(ones)# 单位矩阵
identity = np.eye(3) # 3x3单位矩阵
print("\n3x3单位矩阵:")
print(identity)# 范围数组
range_arr = np.arange(0, 10, 2) # 从0到10(不含),步长2
print("\n0到10的数组(步长2):")
print(range_arr)
# %%
# 单元格4:数组属性
arr = np.array([[1, 2, 3], [4, 5, 6]])print("数组:")
print(arr)
print("形状 (shape):", arr.shape) # 数组维度 (2,3)
print("大小 (size):", arr.size) # 元素总数 6
print("维度 (ndim):", arr.ndim) # 轴数 2
print("数据类型 (dtype):", arr.dtype) # 元素类型 int64
# %%
# 单元格5:数组索引和切片
# 一维数组索引
arr1d = np.array([10, 20, 30, 40, 50, 60])
print("一维数组:", arr1d)
print("第一个元素:", arr1d[0]) # 索引从0开始
print("最后一个元素:", arr1d[-1]) # 负数索引从末尾开始
print("切片[1:4]:", arr1d[1:4]) # 索引1到3(不含4)
print("切片[::2]:", arr1d[::2]) # 步长为2的切片
# %%
# 单元格6:二维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("二维数组:")
print(arr2d)
print("第一行:", arr2d[0, :]) # 第一行所有元素
print("第二列:", arr2d[:, 1]) # 第二列所有元素
print("元素[1,2]:", arr2d[1, 2]) # 第二行第三列的元素# 布尔索引
print("大于5的元素:", arr2d[arr2d > 5])
# %%
# 单元格7:数组运算
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])print("数组a:", a)
print("数组b:", b)
print("a + b =", a + b) # 对应元素相加
print("a - b =", a - b) # 对应元素相减
print("a * b =", a * b) # 对应元素相乘
print("a / b =", a / b) # 对应元素相除
print("a ** 2 =", a ** 2) # 每个元素平方# 向量化运算的优势:不需要循环,代码简洁高效
# %%
# 单元格8:统计函数
data = np.array([23, 45, 67, 34, 89, 56, 72, 41])print("数据:", data)
print("平均值:", np.mean(data))
print("中位数:", np.median(data))
print("标准差:", np.std(data))
print("方差:", np.var(data))
print("最小值:", np.min(data))
print("最大值:", np.max(data))
print("总和:", np.sum(data))
# %%
# 单元格9:形状操作
# 创建数组
arr = np.arange(12) # 0到11的数组
print("原始数组:", arr)# 改变形状
reshaped = arr.reshape(3, 4) # 改为3行4列
print("重塑为3x4:")
print(reshaped)# 转置
transposed = reshaped.T
print("转置:")
print(transposed)# 展平
flattened = reshaped.flatten()
print("展平:", flattened)
NumPy核心概念:
-
数组:NumPy的核心数据结构
-
向量化运算:对整个数组进行运算,不需要循环
-
广播:对不同形状的数组进行运算的机制
-
通用函数:对数组元素进行操作的函数
五、项目实战:学生成绩分析系统
5.1 项目目标
详细讲解:
现在让我们综合运用所学知识,完成一个实际项目:学生成绩分析系统。
项目功能:
-
存储学生成绩数据
-
计算各种统计信息
-
分析成绩分布
-
可视化展示结果
5.2 项目实现
创建新的Notebook:03_student_analysis.ipynb
# %% [markdown]
# # 学生成绩分析系统
#
# 综合运用Python和NumPy分析学生成绩数据
# %%
# 单元格1:导入库
import numpy as np
import matplotlib.pyplot as plt# 设置中文字体(确保图表能显示中文)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号print("库导入成功!")
# %%
# 单元格2:准备数据
# 创建学生数据
students = ['张三', '李四', '王五', '赵六', '钱七']
math_scores = np.array([85, 92, 78, 65, 88])
english_scores = np.array([79, 85, 92, 70, 81])
programming_scores = np.array([90, 88, 76, 82, 95])print("学生成绩数据:")
for i, name in enumerate(students):print(f"{name}: 数学{math_scores[i]}, 英语{english_scores[i]}, 编程{programming_scores[i]}")
# %%
# 单元格3:计算基本统计信息
# 各科目平均分
math_avg = np.mean(math_scores)
english_avg = np.mean(english_scores)
programming_avg = np.mean(programming_scores)print("各科目平均分:")
print(f"数学: {math_avg:.1f}分")
print(f"英语: {english_avg:.1f}分")
print(f"编程: {programming_avg:.1f}分")# 各科目最高分和最低分
print(f"\n数学最高分: {np.max(math_scores)}分")
print(f"英语最低分: {np.min(english_scores)}分")
# %%
# 单元格4:计算学生总分和平均分
total_scores = math_scores + english_scores + programming_scores
average_scores = total_scores / 3print("\n学生总分和平均分:")
for i, name in enumerate(students):print(f"{name}: 总分{total_scores[i]}, 平均分{average_scores[i]:.1f}")
# %%
# 单元格5:成绩排名
# 按平均分排序
sorted_indices = np.argsort(average_scores)[::-1] # 从高到低排序print("\n成绩排名:")
for rank, idx in enumerate(sorted_indices):print(f"第{rank + 1}名: {students[idx]}, 平均分{average_scores[idx]:.1f}")
# %%
# 单元格6:成绩等级分析
def assign_grade(score):"""根据分数分配等级"""if score >= 90:return "优秀"elif score >= 80:return "良好"elif score >= 70:return "中等"elif score >= 60:return "及格"else:return "不及格"print("\n学生成绩等级:")
for i, name in enumerate(students):grade = assign_grade(average_scores[i])print(f"{name}: {grade}")
# %%
# 单元格7:成绩分布统计
def analyze_score_distribution(scores, subject):"""分析成绩分布"""excellent = np.sum(scores >= 90)good = np.sum((scores >= 80) & (scores < 90))medium = np.sum((scores >= 70) & (scores < 80))pass_grade = np.sum((scores >= 60) & (scores < 70))fail = np.sum(scores < 60)print(f"\n{subject}成绩分布:")print(f"优秀(90+): {excellent}人")print(f"良好(80-89): {good}人")print(f"中等(70-79): {medium}人")print(f"及格(60-69): {pass_grade}人")print(f"不及格: {fail}人")analyze_score_distribution(math_scores, "数学")
analyze_score_distribution(english_scores, "英语")
analyze_score_distribution(programming_scores, "编程")
# %%
# 单元格8:数据可视化
# 创建学生成绩对比图
plt.figure(figsize=(12, 6))# 设置位置
x = np.arange(len(students))
width = 0.25# 创建柱状图
plt.bar(x - width, math_scores, width, label='数学', alpha=0.8, color='skyblue')
plt.bar(x, english_scores, width, label='英语', alpha=0.8, color='lightgreen')
plt.bar(x + width, programming_scores, width, label='编程', alpha=0.8, color='lightcoral')# 设置图表属性
plt.xlabel('学生', fontsize=12)
plt.ylabel('分数', fontsize=12)
plt.title('学生各科成绩对比', fontsize=14)
plt.xticks(x, students)
plt.legend()# 添加网格
plt.grid(True, alpha=0.3, axis='y')# 显示图表
plt.tight_layout()
plt.show()
# %%
# 单元格9:平均分可视化
plt.figure(figsize=(10, 6))# 创建平均分柱状图
bars = plt.bar(students, average_scores, color='gold', alpha=0.7)# 在每个柱子上显示数值
for bar, score in zip(bars, average_scores):plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.5, f'{score:.1f}', ha='center', va='bottom')plt.xlabel('学生', fontsize=12)
plt.ylabel('平均分', fontsize=12)
plt.title('学生平均分对比', fontsize=14)
plt.ylim(0, 100)
plt.grid(True, alpha=0.3, axis='y')plt.tight_layout()
plt.show()
# %%
# 单元格10:项目总结
print("=" * 50)
print("项目总结")
print("=" * 50)# 找出最高分学生
top_student_index = np.argmax(average_scores)
top_student = students[top_student_index]
top_score = average_scores[top_student_index]print(f"最高分学生: {top_student} (平均分: {top_score:.1f})")# 总体统计
total_avg = np.mean(average_scores)
print(f"班级平均分: {total_avg:.1f}")# 各科目表现分析
best_subject = ""
best_avg = 0subjects = ['数学', '英语', '编程']
subject_scores = [math_scores, english_scores, programming_scores]for subject, scores in zip(subjects, subject_scores):avg = np.mean(scores)if avg > best_avg:best_avg = avgbest_subject = subjectprint(f"表现最好的科目: {best_subject} (平均分: {best_avg:.1f})")print("=" * 50)
六、VSCode高级功能
6.1 调试功能
详细讲解:
调试是编程中最重要的技能之一。VSCode提供了强大的调试工具:
# 在VSCode中调试Notebook:# 1. 设置断点:在代码行号左侧点击,出现红点
# 2. 开始调试:按F5或点击调试按钮
# 3. 单步执行:使用调试控制栏的按钮
# 4. 查看变量:在调试面板查看变量值# 调试示例:
def find_problematic_student(scores, threshold=60):"""找出需要特别关注的学生"""problematic = []for i, score in enumerate(scores):# 在这里设置断点if score < threshold:problematic.append(i)return problematic# 测试数据
test_scores = [85, 45, 92, 58, 78]# 调用函数进行调试
problem_indices = find_problematic_student(test_scores)
print(f"需要关注的学生索引: {problem_indices}")
调试技巧:
-
设置断点:在关键位置暂停执行
-
单步执行:一步步执行代码,观察变化
-
变量监视:跟踪重要变量的值
-
条件断点:只有满足条件时才暂停
6.2 代码补全和智能提示
详细讲解:
VSCode的智能功能可以大大提高编程效率:
## VSCode的智能功能:### 1. 代码补全
- 输入时自动显示可用函数和变量
- 按Tab键快速补全
- 减少拼写错误### 2. 参数提示
- 显示函数的参数信息
- 帮助理解函数用法### 3. 错误检查
- 实时检查语法错误
- 用红色波浪线标记问题### 4. 快速修复
- 自动导入缺失的库
- 代码格式优化建议### 5. 代码导航
- Ctrl+点击:跳转到函数定义
- Ctrl+Shift+O:快速跳转到符号
七、课后练习
7.1 基础练习
详细讲解:
现在轮到你自己动手了!完成以下练习来巩固所学知识:
创建新的Notebook:exercises.ipynb
# %% [markdown]
# # 课后练习
#
# 完成以下练习来巩固第一课时的知识
# %% [markdown]
# ## 练习1:员工工资分析
#
# 创建一个员工工资数据分析系统:
#
# 要求:
# 1. 创建5个员工的工资数据(姓名、基本工资、奖金)
# 2. 计算每个员工的实发工资(基本工资+奖金)
# 3. 找出工资最高的员工
# 4. 计算平均工资和工资标准差
# %% [markdown]
# ## 练习2:数组操作挑战
#
# 使用NumPy完成以下任务:
# 1. 创建5x5的随机矩阵(范围1-100)
# 2. 计算每行的平均值和每列的总和
# 3. 找出矩阵中所有大于50的元素及其位置
# 4. 对矩阵进行转置并计算特征值
# %% [markdown]
# ## 练习3:函数编写
#
# 编写一个函数,接受学生成绩列表,返回:
# - 平均分
# - 最高分和最低分
# - 及格率(60分以上)
# - 成绩分布(优秀、良好、中等、及格、不及格的人数)
# %% [markdown]
# ## 挑战练习(可选)
#
# 创建一个简单的数据可视化:
# 1. 生成正弦波数据
# 2. 添加随机噪声
# 3. 绘制原始正弦波和带噪声的正弦波
# 4. 计算信噪比
7.2 学习检查清单
完成第一课时后,检查你的掌握情况:
# 第一课时学习检查清单## 环境配置
- [ ] 成功安装Python 3.8+
- [ ] 成功安装VSCode
- [ ] 安装必要的扩展(Python、Jupyter)
- [ ] 能够创建和运行Jupyter Notebook## Python基础
- [ ] 理解变量和数据类型(int, float, str, bool)
- [ ] 掌握列表和字典的基本操作
- [ ] 能够使用条件判断(if-elif-else)
- [ ] 能够使用循环(for, while)
- [ ] 能够定义和调用函数## NumPy基础
- [ ] 能够创建NumPy数组
- [ ] 理解数组的索引和切片
- [ ] 掌握数组的基本运算
- [ ] 能够使用统计函数(mean, max, min等)## 项目实践
- [ ] 完成学生成绩分析项目
- [ ] 理解数据分析的基本流程
- [ ] 能够创建简单的数据可视化## 工具使用
- [ ] 掌握VSCode的基本操作
- [ ] 能够使用调试功能
- [ ] 理解代码补全和智能提示## 问题解决
- [ ] 知道如何阅读错误信息
- [ ] 能够使用搜索引擎解决问题
- [ ] 知道在学习群中如何提问
八、常见问题解答
8.1 安装问题
## 常见问题及解决方案### 1. Python安装问题
**问题**:命令行中输入`python`显示"不是内部或外部命令"
**解决**:
- 重新安装Python,确保勾选"Add Python to PATH"
- 或手动添加Python安装目录到系统PATH### 2. VSCode扩展安装失败
**问题**:无法安装Python或Jupyter扩展
**解决**:
- 检查网络连接
- 重启VSCode重试
- 手动下载扩展文件安装### 3. Jupyter Notebook无法运行
**问题**:单元格显示[*]但不执行
**解决**:
- 检查Python解释器选择是否正确
- 重启内核(点击工具栏的重启按钮)
- 重新安装jupyter包:`pip install jupyter --upgrade`### 4. 中文显示问题
**问题**:图表中中文显示为方框
**解决**:
- 安装中文字体
- 使用代码中的字体设置
- 或者使用英文标签
8.2 学习建议
详细讲解:
对于初学者,我建议:
-
不要怕犯错:每个程序员都会犯错,错误是学习的机会
-
多动手实践:只看不练很难真正掌握
-
从小项目开始:完成小项目获得成就感
-
学会求助:遇到问题先自己尝试,再寻求帮助
-
定期复习:编程技能需要不断练习巩固
下一课时预告
第二课时:Pandas数据处理与可视化
学习内容:
-
Pandas DataFrame基础操作
-
数据读取和清洗技术
-
数据筛选和分组聚合
-
使用Matplotlib和Seaborn进行高级可视化
课前准备:
-
完成第一课时的所有练习
-
确保环境配置正确
-
准备好问题在课前提问
结束语
恭喜你完成了第一课时的学习!这是你机器学习之旅的重要里程碑。
学习回顾
在这一课时中,你学习了:
-
如何配置专业的Python开发环境
-
Python编程的基础语法和概念
-
NumPy数组操作和科学计算
-
使用VSCode进行项目开发
-
完成了一个完整的学生成绩分析项目
学习成就
你已经从零开始,掌握了:
-
✅ 编程环境的配置和使用
-
✅ Python基础编程技能
-
✅ NumPy科学计算基础
-
✅ 数据分析和可视化入门
-
✅ 问题解决和调试技能
继续学习建议
-
巩固基础:如果有些概念还不够清晰,可以重新运行代码示例
-
完成练习:课后练习是检验学习成果的重要方式
-
探索扩展:尝试修改代码,看看不同的参数会有什么效果
-
加入社区:参与学习群讨论,与其他学习者交流
重要提醒
记住编程学习的几个关键点:
-
实践比理论更重要:多写代码,少只看不练
-
错误是朋友:从错误中学习比避免错误更重要
-
持续学习:每天进步一点点,比一次性学很多更有效
-
享受过程:编程是创造性的活动,享受解决问题的乐趣
你已经迈出了成为机器学习工程师的第一步!保持热情,继续前进!
在第二课时中,我们将学习更强大的数据处理工具Pandas,让你的数据分析能力更上一层楼。
Happy Coding! 🚀
备注:如果在学习过程中遇到任何问题,请保存错误信息像博主交流。建议将遇到的问题和解决方案记录下来,建立自己的知识库。