讲座目标:让零基础的同学通过轻松有趣的方式初步掌握 Python 编程,并且能使用 Jupyter Notebook 进行实际操作。学习 Python 基础语法,了解 NumPy 的强大功能,最后通过可视化数据带给大家直观的成就感
本文内容配套代码指路:填空版,完整版
附贴心的vscode上安装配置python&jupyter的word文档:安装配置教程
一、欢迎来到“Python 冒险之旅”
1. Python介绍
-
Python 是由 Guido van Rossum 于 20 世纪 90 年代初期发明的编程语言。名字的灵感来源并非“蟒蛇”,而是他喜爱的英国喜剧团体 Monty Python’s Flying Circus。Python 的设计哲学强调代码的可读性和简洁性,因此,它成为了非常适合初学者的语言,同时又足够强大,适用于各种复杂任务。
-
Python 的特点
-
语法简洁:Python 的语法非常接近自然语言,减少了复杂的标点符号,使代码易读易写。
-
丰富的库:Python 拥有庞大的标准库和第三方库,可以轻松实现各种功能,从数据处理到机器学习。
-
跨平台:Python 能够在不同操作系统之间无缝运行,包括 Windows、Mac、Linux。
-
广泛应用:Python 被广泛应用于数据科学、人工智能、Web 开发、自动化脚本编写等多个领域,是一门通用性极强的编程语言。
-
2. 工具简介:编程的魔法助手
-
VSCode:代码编辑的利器
-
Visual Studio Code(VSCode) 是由 Microsoft 开发的轻量级代码编辑器,支持多种编程语言,是编写 Python 代码的理想选择。
-
主要功能:
-
语法高亮和自动补全:像给代码加上“标记”,帮助你快速理解和编写代码。
-
集成终端:可以直接在编辑器中运行代码,方便快捷。
-
调试工具:可以轻松设置断点,调试代码,追踪错误。
-
-
VSCode 就像是一个装满工具的“工具箱”,能帮助你快速、高效地编写、调试和运行 Python 代码。
-
-
Jupyter Notebook:交互式编程的理想工具
-
Jupyter Notebook 是一个基于浏览器的编程环境,适合交互式的编程和数据分析,常用于数据科学、机器学习和教学。
-
主要特点:
-
单元化结构:代码和文本分块展示,每个单元可以单独执行并立即查看结果,非常适合逐步调试代码和分析数据。
-
Markdown 支持:不仅可以编写代码,还能同时写下解释和文档,方便记录每一步的思路。
-
可视化集成:能直接嵌入图表和数据可视化,特别适合数据分析过程的展示。
-
-
Jupyter Notebook 就像是一个“笔记本”,你不仅可以记录想法,还能边写边计算,马上看到结果,是进行探索性编程和数据分析的理想工具。
-
3. 第一次编程体验
-
动手体验:让同学们打开 VSCode 和 Jupyter Notebook,输入并运行以下代码:
print("Hello, Python Adventurers!")
-
语法讲解:
-
print()
函数:print()
是 Python 中的输出函数,用于在屏幕上打印显示信息。函数调用时,必须使用小括号()
将参数(例如上面的字符串"Hello, Python Adventurers!"
)括起来,并将结果打印到控制台。 -
字符串:由双引号
"
或单引号'
包围的文本。字符串可以是任何字符的组合,在这里我们打印的是一段欢迎信息。
-
-
二、Python 基础语法
1. 打印输出与注释
-
print()
函数:-
规则:函数调用时必须使用小括号括起来,并且输出内容放在括号内。
-
示例:
print("让我们开始我们的冒险之旅吧!")
-
语法讲解:
print()
函数:输出括号内的信息。在本例中,字符串"让我们开始我们的冒险之旅吧!"
被传递给print()
函数,并显示在屏幕上。
-
-
注释:
-
注释以
#
开头,后面写上说明文字。可以用来记录思考或提醒。 -
示例:
# 这是一个注释,用来记录我们探险的线索
-
语法讲解:
- 注释:通过在代码中加入注释,可以让代码更易于理解。任何在
#
后面的内容都会被忽略。可以用来解释代码的功能或写下说明。
- 注释:通过在代码中加入注释,可以让代码更易于理解。任何在
-
2. 变量与数据类型
-
变量是什么:就像你在冒险途中找到的物品或线索,需要有个名字来存储它们。
-
规则:变量名必须以字母或下划线开头,后面可以跟字母、数字。
-
示例:
adventurer_name = "Alice" # 探险者的名字 adventurer_level = 1 # 探险者的等级
-
语法讲解:
-
变量赋值:变量用于存储数据。通过
=
可以将数据赋值给一个变量名(如adventurer_name
和adventurer_level
)。adventurer_name
被赋值为字符串"Alice"
,而adventurer_level
被赋值为整数1
。 -
数据类型:字符串、整数、浮点数、布尔值。通过有趣的冒险元素介绍这些类型:
-
字符串:描述探险者的名字、藏宝图位置等。
-
整数:表示探险者的等级、找到的宝藏数量。
-
浮点数:记录宝藏的重量或位置坐标。
-
布尔值:表示探险任务是否完成。
-
-
-
3. 条件判断与逻辑运算
-
if 语句:就像在冒险途中做决策——如果某个条件满足,则采取某种行动。
-
规则:
if
后面跟判断条件,条件为True
时执行缩进部分的代码。 -
示例:
found_treasure = True if found_treasure: print("恭喜你,找到了宝藏!") else: print("还需要继续探索...")
-
语法讲解:
- if 条件判断:
if
语句用于执行条件判断。if
后面的条件表达式adventurer_level > 1
被判断为True
或False
,如果为True
,则执行print("你已经做好了探险的准备!")
,否则执行else
语句中的代码。
- if 条件判断:
-
-
逻辑运算符:
-
==
、!=
、>
等运算符用于判断探险者是否达到了某个条件。 -
示例:
if adventurer_level > 1: print("你已经做好了探险的准备!") else: print("你还需要更多训练!")
-
语法讲解:
>
是一个比较运算符,用来比较两个值。类似的运算符还包括==
(等于)、!=
(不等于)、<
(小于)等
-
4. 循环结构:重复任务
-
for 循环:就像在冒险过程中不断重复的任务,例如翻看藏宝图 5 次以确定位置。
-
规则:
for
后面跟一个变量名和in
关键字。 -
示例:
for i in range(5): print(f"第{i+1}次检查藏宝图,继续寻找宝藏!")
-
语法讲解:
- for 循环:
for
循环用于遍历一系列值。在这里,i
是循环变量,通过range(5)
生成 0 到 4 的序列,循环 5 次。f"..."
是 Python 的格式化字符串,{i+1}
表示将i+1
的值插入到字符串中。
- for 循环:
-
-
while 循环:如果你还没有找到宝藏,就继续寻找,直到找到为止。
-
规则:当条件为
True
时不断执行的循环。 -
示例:
lives = 3 while lives > 0: print("你还有", lives, "条命,继续冒险!") lives -= 1 # 每次减少一条命
-
语法讲解:
- while 循环:
while
循环只要条件为True
就会持续执行。在这里,lives > 0
是循环条件,每次循环后,lives
的值通过lives -= 1
减少 1,直到lives
变为 0。
- while 循环:
-
三、NumPy 探索神秘宝石世界
1. NumPy 简介:处理“魔法宝石”的强大工具
-
NumPy 是什么?
-
NumPy 是 Python 的强大工具库,专门用来处理多维数组和矩阵。可以想象成我们在探险中找到的大批量“魔法宝石”,它们都有各种不同的属性,需要通过 NumPy 进行快速计算和处理。
-
用 NumPy,我们可以轻松处理大量“宝石”的属性变化、合成宝石、计算它们的总和或最大值等。
-
宝石类比:每个数组就像是一个宝石袋子,里面存储着许多具有不同属性的宝石,而 NumPy 就是帮助我们操作这些宝石的“魔法工具”。
-
-
NumPy 的应用场景:
-
在科学计算、数据分析、机器学习等领域,NumPy 都被广泛应用,帮助我们快速处理大规模数据。
-
类比:NumPy 就像冒险家手中的工具,能帮助他们快速整理、分析找到的宝石,为冒险决策提供依据。
-
2. NumPy 安装与基础操作
-
安装 NumPy:如果还没有安装 NumPy,可以使用以下命令安装:
pip install numpy
-
语法讲解:
- 安装库:
pip install
是 Python 包管理工具pip
的命令,用于安装第三方库。numpy
是我们要安装的库,专门用于处理数组和矩阵。
- 安装库:
-
-
导入 NumPy:导入 NumPy 并开始使用它处理我们的“宝石”:
import numpy as np # 导入并简化为 np
-
语法讲解:
- 导入库:
import
用于导入外部库。as np
表示将numpy
简化为np
,这样我们可以通过np
来调用 NumPy 的函数和方法,简化代码书写。
- 导入库:
-
3. 创建属于你的宝石袋:NumPy 数组
-
一维数组:单个宝石袋:
-
用
np.array()
创建一个包含多颗宝石的数组。可以类比为找到了一袋不同的宝石,每颗宝石都有其属性值。 -
示例:
gems = np.array([10, 20, 30, 40]) # 宝石的属性值 print(gems)
-
解释:这个数组就像一个宝石袋,里面有 4 颗宝石,它们的属性分别是 10、20、30 和 40。
-
语法讲解:
np.array()
:这是 NumPy 中用于创建数组的函数。我们传入一个 Python 列表[10, 20, 30, 40]
,它会被转换成一个 NumPy 数组。
-
-
多维数组:多个宝石袋或宝石组合:
-
示例:我们找到更多的宝石,或是把它们组合成一个宝石矩阵。可以用 NumPy 创建二维数组来表示这些“宝石袋”。
gem_matrix = np.array([[1, 2, 3], [4, 5, 6]]) # 两个宝石袋,每个袋子有3颗宝石 rint(gem_matrix)
-
解释:这两个“宝石袋”每袋装着 3 颗宝石,形成一个 2 行 3 列的宝石矩阵。
-
语法讲解:
- 二维数组:在 NumPy 中,数组可以有多维。这里创建的是一个二维数组。
-
-
宝石的维度和形状:
-
维度:我们可以用
ndarray.ndim
查看宝石矩阵的维度:print(gem_matrix.ndim) # 输出 2,表示这是二维数组
-
形状:用
ndarray.shape
查看矩阵的形状:print(gem_matrix.shape) # 输出 (2, 3),表示 2 行 3 列
-
4. 操作你的宝石:数组运算
-
宝石合成:使用 NumPy 对宝石数组进行加减乘除运算,类比合成或分解宝石来增强属性。
-
示例:
more_gems = np.array([1, 2, 3, 4]) # 另一个宝石袋中的宝石 combined_gems = gems + more_gems # 合成宝石,增强它们的属性 print(combined_gems)
-
解释:每一颗宝石的属性值都被合并增强,变成更强大的宝石。
-
语法讲解:
- 数组运算:NumPy 支持数组之间的加减乘除运算。在上面的例子中,两个数组
gems
和more_gems
相加,结果是它们对应位置的元素相加。
- 数组运算:NumPy 支持数组之间的加减乘除运算。在上面的例子中,两个数组
-
-
宝石的增幅:数组广播:
-
NumPy 支持广播机制,即当我们对数组和一个标量操作时,标量会被自动扩展为数组大小,以进行对应的计算。就像给每颗宝石增加相同的能量。
-
示例:
enhanced_gems = gems + 5 # 每颗宝石都获得了 +5 的增强 print(enhanced_gems)
-
解释:所有宝石的属性都增加了 5,变得更加强大。
-
语法讲解:
- 数组广播:NumPy 的广播机制允许不同形状的数组进行运算。在上面的例子中,
gems
是一个包含 4 个元素的数组,而5
是一个标量。当我们对它们进行加法运算时,NumPy 自动将标量5
扩展为一个与gems
相同形状的数组[5, 5, 5, 5]
,然后执行逐元素相加操作。结果是gems
中的每个元素都被加上了 5。
- 数组广播:NumPy 的广播机制允许不同形状的数组进行运算。在上面的例子中,
-
-
宝石选择:索引与切片:
-
我们可以像处理 Python 列表一样,通过索引选择某颗宝石,或者通过切片操作选择一部分宝石。
-
示例:
print(gems[0]) # 选择第一颗宝石 print(gems[1:3]) # 选择第二颗和第三颗宝石
-
语法讲解:
-
索引:
gems[0]
表示选择数组gems
中第一个元素。注意,Python 的索引从0
开始,因此gems[0]
选择的是第一颗宝石。 -
切片:
gems[1:3]
使用切片操作,表示从第 2 个元素(索引1
)到第 3 个元素(索引2
,不包含索引3
的元素)。切片的格式是start:stop
,其中start
是起始索引,stop
是结束索引(不包含该位置的元素)。
-
-
5. 进阶操作:变形和重组宝石
-
重塑宝石形状:
reshape()
:-
假设我们想把一个宝石袋重新整理成多行或多列,NumPy 的
reshape()
函数可以帮助我们快速调整宝石的排列。 -
示例:
reshaped_gems = gems.reshape(2, 2) # 将一维宝石袋变为 2 行 2 列的矩阵 print(reshaped_gems)
-
语法讲解:
reshape()
:reshape()
用于改变数组的形状。在这个例子中,原本的一维数组gems
通过reshape(2, 2)
被重塑为一个 2 行 2 列的矩阵。
-
-
合并与拆分宝石:
-
合并宝石袋:通过
concatenate()
将两个宝石袋合并成一个更大的袋子。gems_1 = np.array([10, 20]) gems_2 = np.array([30, 40]) combined_gems = np.concatenate((gems_1, gems_2)) # 合并两个袋子 print(combined_gems)
-
语法讲解:
np.concatenate()
:该函数用于将多个数组连接在一起。参数是一个包含数组的元组(gems_1, gems_2)
,concatenate()
会将gems_1
和gems_2
中的所有元素按顺序合并为一个新的数组。结果是[10, 20, 30, 40]
。
-
拆分宝石袋:用
split()
将一个大袋子拆成若干小袋。split_gems = np.split(combined_gems, 2) # 将合并的宝石袋拆成两个 print(split_gems)
-
语法讲解:
np.split()
:split()
函数用于将一个数组拆分成多个子数组。第一个参数是待拆分的数组,第二个参数表示拆分的数量。在这个例子中,np.split(combined_gems, 2)
将combined_gems
数组均分为 2 个子数组,结果是[[10, 20], [30, 40]]
。
-
6. NumPy 的统计与数学魔法:分析宝石的属性
-
统计属性:使用 NumPy 的统计函数快速分析宝石的各项属性,比如计算宝石的平均属性、总和或最大值。
-
示例:
print(np.mean(gems)) # 计算宝石属性的平均值 print(np.sum(gems)) # 计算宝石属性的总和 print(np.max(gems)) # 找出属性最强的宝石
-
语法讲解:
-
np.mean()
:计算数组中所有元素的平均值。例如,np.mean(gems)
会返回gems
数组中所有宝石属性的平均值。 -
np.sum()
:计算数组中所有元素的总和。np.sum(gems)
返回gems
数组中所有宝石属性的总和。 -
np.max()
:返回数组中的最大值。np.max(gems)
返回gems
数组中属性值最高的宝石。
-
-
-
数学魔法:除了基础运算,NumPy 还支持高级数学操作,比如计算宝石属性的平方根或三角函数值。
-
示例:
print(np.sqrt(gems)) # 计算宝石属性的平方根 print(np.sin(gems)) # 计算宝石属性的正弦
-
语法讲解:
np.sqrt()
:返回数组中每个元素的平方根。例如,np.sqrt(gems)
会计算gems
中每颗宝石的属性平方根。np.sin()
:计算数组中每个元素的正弦值。np.sin(gems)
会对gems
数组中的每个宝石属性进行三角函数计算,返回它们的正弦值。
-
7. 实践任务:设计你的“宝石装备”
-
创建一个包含 0 到 9 的数组,代表你找到的宝石编号:
gems = np.arange(10)
- 语法讲解:
np.arange()
:arange()
函数生成一个范围内的数组,类似于 Python 中的range()
。在这个例子中,np.arange(10)
创建了一个包含从0
到9
的数组[0, 1, 2, ..., 9]
。
- 语法讲解:
-
计算每个宝石的属性平方值,提升宝石的能力:
upgraded_gems = gems ** 2 print(upgraded_gems)
- 语法讲解:
*
运算符:*
是 Python 中的幂运算符。在这里,gems ** 2
表示将gems
数组中的每个元素平方,生成一个新的数组upgraded_gems
,其每个元素都是对应宝石的属性平方值。
- 语法讲解:
-
进一步挑战:使用
reshape()
将宝石数组变成 2 行 5 列的矩阵,然后计算每行的宝石总和,看看哪一行的宝石更强大:reshaped_gems = gems.reshape(2, 5) print(np.sum(reshaped_gems, axis=1)) # 计算每行的总和
- 语法讲解:
reshape()
:reshape()
函数用于改变数组的形状。在这个例子中,gems.reshape(2, 5)
将一维数组gems
转换为一个 2 行 5 列的二维矩阵。np.sum(axis=1)
:np.sum()
的axis
参数指定沿哪个轴进行求和操作。axis=1
表示按行求和,返回每行元素的总和。
- 语法讲解:
四、Matplotlib:绘制冒险路线图 与宝石数据 (可选)
1. Matplotlib 简介:绘制你的冒险地图
-
Matplotlib 是 Python 最常用的数据可视化库,专门用于生成二维图表(如折线图、柱状图、散点图等)。它可以帮助我们将数据以图形的形式直观地呈现出来,是科学计算和数据分析的常用工具之一。
- 为什么使用 Matplotlib?
-
灵活性:Matplotlib 提供了极大的灵活性,可以创建几乎所有常见的图表类型,从简单的折线图到复杂的多子图、嵌套图、热力图等。
-
高兼容性:它能与其他 Python 库(如 NumPy、Pandas 等)无缝协作,将数值数据转化为可视化输出。
-
广泛应用:Matplotlib 被广泛应用于科学研究、数据分析、机器学习等领域,特别适合那些需要展示数据变化趋势和模式的场景。
-
Matplotlib:像一个绘图工具,能帮你画出冒险的路线图,记录你前进的每一步。
-
- 适用场景:
-
数据分析中的结果展示,如观察数据的变化趋势、异常点、分布等。
-
机器学习中用于展示训练曲线或模型评估结果。
-
科学研究中用于生成高质量的图形展示实验数据。
-
2. Matplotlib 的核心组件
Matplotlib 的核心模块是 pyplot
,它提供了一系列函数来控制图表的生成和美化。以下是 Matplotlib 的几个关键概念:
-
Figure(图形):
- 整个图像的容器,通常包含一个或多个子图(axes),可以看作是一张图表的“画布”。
-
Axes(子图):
- 表示图表中的每一个子绘图区,Axes 是 Figure 的一部分。在一个 Figure 中可以有多个子图。Axes 是我们用来绘制数据的主要区域。
-
Axis(坐标轴):
- Axes 的一部分,表示图形的 x 轴和 y 轴。通过设置坐标轴的范围和标签,我们可以更好地展示数据的含义。
-
Plot(绘图):
- 我们可以用各种方式将数据绘制在 Axes 上,比如折线图、散点图、柱状图等。
3. 安装与导入 Matplotlib
-
如果还没有安装 Matplotlib,可以通过以下命令安装:
pip install matplotlib
-
导入 Matplotlib 的
pyplot
模块:import matplotlib.pyplot as plt # 简化引用 import matplotlib as mpl mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体为黑体
- 注意,最后两行是一个亲测最简单的可以使Matplotlib正常显示中文而非乱码的代码,非常好用
4. 实战:绘制“冒险路线图”
-
通过 NumPy 生成数据,用 matplotlib 绘制图表,我们将创建一个折线图来展示探险者前进的路线:
import numpy as np import matplotlib.pyplot as plt # 导入 Matplotlib 的 pyplot 模块 # 生成数据 x = np.arange(0, 10, 0.1) # 生成从 0 到 10,步长为 0.1 的数组 y = np.sin(x) # 用 NumPy 的 sin 函数生成正弦波,模拟探险路线的起伏 # 绘制折线图 plt.plot(x, y) # 使用 plot 函数绘制 x 和 y 的关系图(折线图) plt.title('冒险路线图') # 给图形添加标题 plt.xlabel('时间') # 给 x 轴添加标签 plt.ylabel('前进距离') # 给 y 轴添加标签 plt.show() # 显示图表
-
语法讲解:
-
数据生成:
-
使用
np.arange(0, 10, 0.1)
生成从 0 到 10 的等间隔数列,作为 x 轴数据,步长为 0.1,表示时间的进程。 -
使用
np.sin(x)
生成 y 轴数据,表示随时间变化的前进距离,这里使用了正弦函数来模拟路线的起伏。
-
-
图表绘制:
plt.plot(x, y)
:plot()
函数用于绘制二维折线图,这里表示随着时间x
的推移,探险者的前进距离y
发生的变化。
-
图表美化:
-
plt.title()
:设置图表的标题,这里我们命名为“探险路线图”。 -
plt.xlabel()
和plt.ylabel()
:分别设置 x 轴和 y 轴的标签,帮助我们理解横轴代表时间,纵轴代表前进的距离。
-
-
图表显示:
plt.show()
:在生成图表后,通过show()
函数显示最终的结果。在使用 Jupyter Notebook 时,图表会直接显示在输出区域
-
-
5. 实战:绘制“宝石数据”
-
除了折线图,Matplotlib 还支持很多常见的图表类型。下面列举了几个常用图表及其简单代码示例:
-
柱状图(Bar Chart):用于展示分类数据的大小比较。
categories = ['宝石A', '宝石B', '宝石C'] values = [10, 20, 15] plt.bar(categories, values) plt.title('宝石属性对比') plt.show()
-
散点图(Scatter Plot):用于展示两个变量之间的关系,常用于探索数据的分布情况。
x = np.random.rand(50) # 随机生成50个数据点 y = np.random.rand(50) plt.scatter(x, y) plt.title('宝石分布图') plt.xlabel('重量') plt.ylabel('价值') plt.show()
-
饼图(Pie Chart):用于展示部分与整体之间的比例关系。
labels = ['宝石A', '宝石B', '宝石C'] sizes = [40, 35, 25] plt.pie(sizes, labels=labels, autopct='%1.1f%%') plt.title('宝石比例分布') plt.show()
-
直方图(Histogram):用于展示数据的分布情况,常用于数据分析和统计中。
data = np.random.randn(1000) plt.hist(data, bins=30) plt.title('宝石属性分布') plt.xlabel('属性值') plt.ylabel('频率') plt.show()
-
6. Matplotlib 的图表定制与高级功能
Matplotlib 具有强大的定制功能,允许我们对图表进行细粒度的控制,包括颜色、线型、标记、图例、网格等。
-
颜色和线型:可以通过
color
、linestyle
等参数自定义线条颜色和样式。plt.plot(x, y, color='red', linestyle='--') # 红色虚线
-
图例:在复杂图表中,使用
legend()
添加图例,帮助解释不同数据线的含义。plt.plot(x, y, label='前进路线') plt.legend() # 添加图例
-
子图布局:使用
subplot()
函数可以在一个图形窗口中绘制多个子图,形成网格布局。plt.subplot(2, 1, 1) # 创建2行1列的子图,当前绘制第1个 plt.plot(x, np.sin(x)) plt.subplot(2, 1, 2) # 当前绘制第2个 plt.plot(x, np.cos(x)) plt.show()
恭喜!闯关成功!!
至此,你已经基本掌握了python、numpy、matplotlib、jupyter notebook的基础语法和基本使用方法啦!
欢迎你继续深入探索你的宝石寻觅之旅吧~