Python & Jupyter入门

2024-10-19
讲座目标:让零基础的同学通过轻松有趣的方式初步掌握 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_nameadventurer_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 被判断为 TrueFalse,如果为 True,则执行 print("你已经做好了探险的准备!"),否则执行 else 语句中的代码。
  • 逻辑运算符

    • ==!=> 等运算符用于判断探险者是否达到了某个条件。

    • 示例

        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 的值插入到字符串中。
  • while 循环:如果你还没有找到宝藏,就继续寻找,直到找到为止。

    • 规则:当条件为 True 时不断执行的循环。

    • 示例

        lives = 3
        while lives > 0:
            print("你还有", lives, "条命,继续冒险!")
            lives -= 1  # 每次减少一条命
      
    • 语法讲解

      • while 循环while 循环只要条件为 True 就会持续执行。在这里,lives > 0 是循环条件,每次循环后,lives 的值通过 lives -= 1 减少 1,直到 lives 变为 0。

三、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 支持数组之间的加减乘除运算。在上面的例子中,两个数组 gemsmore_gems 相加,结果是它们对应位置的元素相加。
  • 宝石的增幅:数组广播

    • NumPy 支持广播机制,即当我们对数组和一个标量操作时,标量会被自动扩展为数组大小,以进行对应的计算。就像给每颗宝石增加相同的能量。

    • 示例

        enhanced_gems = gems + 5  # 每颗宝石都获得了 +5 的增强
        print(enhanced_gems)
      
    • 解释:所有宝石的属性都增加了 5,变得更加强大。

    • 语法讲解

      • 数组广播:NumPy 的广播机制允许不同形状的数组进行运算。在上面的例子中,gems 是一个包含 4 个元素的数组,而 5 是一个标量。当我们对它们进行加法运算时,NumPy 自动将标量 5 扩展为一个与 gems 相同形状的数组 [5, 5, 5, 5],然后执行逐元素相加操作。结果是 gems 中的每个元素都被加上了 5。
  • 宝石选择:索引与切片

    • 我们可以像处理 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_1gems_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. 实践任务:设计你的“宝石装备”

  1. 创建一个包含 0 到 9 的数组,代表你找到的宝石编号:

     gems = np.arange(10)
    
    • 语法讲解:
      • np.arange()arange() 函数生成一个范围内的数组,类似于 Python 中的 range()。在这个例子中,np.arange(10) 创建了一个包含从 09 的数组 [0, 1, 2, ..., 9]
  2. 计算每个宝石的属性平方值,提升宝石的能力:

     upgraded_gems = gems ** 2
     print(upgraded_gems)
    
    • 语法讲解
      • * 运算符* 是 Python 中的幂运算符。在这里,gems ** 2 表示将 gems 数组中的每个元素平方,生成一个新的数组 upgraded_gems,其每个元素都是对应宝石的属性平方值。
  3. 进一步挑战:使用 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 的几个关键概念:

  1. Figure(图形)

    • 整个图像的容器,通常包含一个或多个子图(axes),可以看作是一张图表的“画布”。
  2. Axes(子图)

    • 表示图表中的每一个子绘图区,Axes 是 Figure 的一部分。在一个 Figure 中可以有多个子图。Axes 是我们用来绘制数据的主要区域。
  3. Axis(坐标轴)

    • Axes 的一部分,表示图形的 x 轴和 y 轴。通过设置坐标轴的范围和标签,我们可以更好地展示数据的含义。
  4. 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 具有强大的定制功能,允许我们对图表进行细粒度的控制,包括颜色、线型、标记、图例、网格等。

  • 颜色和线型:可以通过 colorlinestyle 等参数自定义线条颜色和样式。

      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的基础语法和基本使用方法啦!

欢迎你继续深入探索你的宝石寻觅之旅吧~