Python新手入门:从环境搭建到数据处理与可视化的完整实践指南
1. 从“安装”到“跑通”一个Python新手的真实起点如果你刚刚决定要学Python打开浏览器输入“python安装”大概率会看到一堆教程告诉你“去官网下载安装包一路Next然后打开命令行输入python --version”。这没错但作为一个过来人我想说这只是万里长征的第一步也是最容易埋下隐患的一步。很多人学Python的挫败感不是来自复杂的语法而是从一开始环境就没弄对——代码明明照着敲的就是报错想装个库提示“pip不是内部或外部命令”换了台电脑项目直接跑不起来。今天我们不聊那些高深的“进程线程协程”或者“FastAPI三层架构”就扎扎实实地聊聊一个新手如何搭建一个干净、可控、未来可扩展的Python学习环境。这比你想象的要重要得多。为什么环境如此重要因为Python的世界里“环境”指的是解释器版本、安装路径、第三方库集合的一个特定组合。不同的项目可能需要不同版本的Python比如老项目用Python 3.6新项目用3.10或者不同版本的同一个库比如pandas 1.0和pandas 2.0的API有变化。如果你把所有东西都装在系统默认的位置很快就会乱成一锅粥出现“库冲突”和“版本地狱”。因此我们的核心目标不是“装上Python”而是“学会管理多个Python环境”。基于最新的实践我强烈建议新手从Miniconda开始而不是直接安装官方的Python。下面我就带你走一遍这个更优的路径。1.1 为什么是Miniconda而不是Python官网下载Python官网提供的安装包是“发行版”它只包含Python解释器、标准库和基础的pip工具。而Miniconda是一个轻量级的Python环境和管理器。它核心包含两部分1. 一个基础的Python环境2. Conda这个强大的包和环境管理工具。相比之下Anaconda体积庞大预装了数百个科学计算库对新手来说既臃肿又容易造成依赖困惑。Miniconda则非常精简把安装什么、何时安装的控制权完全交给你。使用Conda管理环境有两大不可替代的优势 第一非Python依赖的管理。很多强大的库比如数据处理用的pandas、做机器学习的scikit-learn背后依赖C/C或Fortran写的数学库如numpy依赖BLAS/LAPACK。用pip install有时会因为缺少这些系统级的编译环境而失败尤其在Windows上错误信息令人崩溃。Conda安装的包是预编译好的二进制文件完美避开了编译问题真正做到了一键安装。 第二环境隔离极其方便。一行命令就能创建、切换、复制、删除一个完全独立的Python环境。你可以为“数据分析”创建一个环境里面装pandas,numpy,matplotlib为“网络爬虫”创建另一个环境里面装requests,beautifulsoup4,scrapy。它们互不干扰。注意网上很多教程会教你用系统自带的Python或者从官网安装。对于Windows和macOS用户我强烈建议跳过那一步直接使用Miniconda。对于Linux高级用户系统可能自带Python但那是系统组件不建议用来学习开发同样建议安装Miniconda进行隔离。1.2 一步步安装并验证Miniconda下载访问Miniconda官网根据你的操作系统Windows, macOS, Linux和系统架构通常是64位下载对应的安装包。对于Windows下载后缀为.exe的安装程序。安装运行安装程序。有几个关键选项需要注意安装路径建议不要装在C盘根目录或带有中文、空格的路径下。例如D:\Miniconda3就是一个好选择。添加环境变量安装程序通常会询问“Add Miniconda3 to my PATH environment variable”。对于新手我建议不勾选这个选项而是使用它提供的“Anaconda Prompt”来操作。如果勾选了Conda会覆盖系统的一些命令可能引起其他软件的问题。我们后续通过专门的终端来使用更干净。注册为系统Python这个选项可以勾选它让其他软件比如后期你可能用的PyCharm能自动发现Conda环境。验证安装安装完成后在Windows开始菜单中找到并打开“Anaconda Prompt (Miniconda3)”。这是一个已经配置好Conda环境的命令行窗口。在Mac或Linux的终端中如果你按上述方式安装需要先执行source ~/miniconda3/bin/activate来激活基础环境Windows的Anaconda Prompt自动完成了这一步。 在打开的命令行中依次输入以下命令并回车conda --version python --version如果这两条命令都能正确显示版本号如conda 24.x.x,Python 3.x.x那么恭喜你Miniconda安装成功。1.3 创建你的第一个专属学习环境现在我们不在基础环境base里折腾。基础环境就像你的系统桌面东西堆多了就乱。我们来创建一个专门用于初学练习的“书房”。在Anaconda Prompt中输入以下命令创建一个名为learn_py的新环境并指定安装Python 3.9这是一个兼顾稳定性和新特性的版本conda create -n learn_py python3.9执行后Conda会解析依赖并提示你将安装哪些包输入y确认。稍等片刻环境就创建好了。激活这个环境conda activate learn_py激活后你会发现命令行提示符前面变成了(learn_py)这表示你当前的所有操作都只在这个“书房”里生效。在这个环境下再安装几个初期最常用的库conda install numpy pandas matplotlib ipython jupyter这里安装了数据科学“三剑客”numpy,pandas,matplotlib一个增强的交互式Python shellipython以及一个强大的笔记本工具jupyter。同样输入y确认安装。至此你的第一个隔离、纯净、功能齐全的Python学习环境就准备好了。任何时候你想学习只需要打开Anaconda Prompt输入conda activate learn_py就进入了这个专属空间。2. 选择你的“主战场”编辑器、IDE与运行方式环境搭好了在哪写代码呢记事本不行。我们需要一个能提供语法高亮、代码提示、错误检查甚至调试功能的工具。对于新手选择很多但核心是从简单开始逐步升级。我推荐三条路径你可以根据喜好选择。2.1 路径一轻量快速 - VS Code Python扩展Visual Studio Code (VS Code) 是一个免费、开源、跨平台的代码编辑器通过安装扩展可以变身成强大的IDE。它启动快配置灵活社区活跃是当前非常流行的选择。安装VS Code从其官网下载安装。安装Python扩展打开VS Code点击左侧活动栏的扩展图标或按CtrlShiftX搜索“Python”找到由Microsoft发布的那个点击安装。这是最关键的一步它提供了Python语言支持、调试、测试、Jupyter笔记本等几乎所有功能。配置Python解释器按CtrlShiftP打开命令面板输入“Python: Select Interpreter”并选择。你应该能看到我们刚才创建的learn_py环境路径可能类似D:\Miniconda3\envs\learn_py\python.exe。选择它。这样VS Code就会使用这个环境来运行和调试你的代码。运行代码新建一个文件保存为hello.py写入print(Hello, Python!)。在编辑器内右键选择“在终端中运行Python文件”。你会在下方的终端看到输出。你也可以直接按F5进行调试。VS Code的优点轻量插件生态丰富对Git集成好适合各种语言的开发。需要注意的坑有时扩展会默认使用系统Python务必通过上述步骤确认解释器选择正确。如果遇到“请安装缺失的包以使用此工作流”这类提示通常是指你运行的脚本或笔记本依赖某个未安装的库在终端里pip install对应的包即可。2.2 路径二开箱即用 - PyCharm Community Edition如果你想要一个为Python量身定做、功能全集成、几乎无需额外配置的“重型武器”那么PyCharm社区版是你的不二之选。它是免费的专为Python开发设计。安装PyCharm从JetBrains官网下载社区版安装。创建新项目打开PyCharm点击“New Project”。在“Location”选择项目路径。最关键的一步在“Python Interpreter”这里点击下拉框选择“Conda Environment”然后勾选“Existing environment”并导航到你的learn_py环境下的python.exe文件例如D:\Miniconda3\envs\learn_py\python.exe。这样新项目就直接绑定了我们的学习环境。运行代码在项目中新建Python文件写代码然后右键文件选择“Run”或者直接点击代码行号旁边的绿色小三角。PyCharm的优点智能代码补全、重构、调试、数据库工具、科学计算模式视图等功能极其强大对新手非常友好能让你更专注于Python语言本身。需要注意的点它比VS Code更占用系统资源启动稍慢。2.3 路径三交互探索 - Jupyter Notebook/Lab如果你学习数据分析、可视化或者喜欢边写代码边记笔记、即时看到输出结果如图表那么Jupyter Notebook是绝佳选择。它以一种“单元格”的方式组织代码和文档特别适合教学、实验和探索性数据分析。启动Jupyter在我们已激活的learn_py环境中命令行输入jupyter notebook你的默认浏览器会自动打开一个本地页面这就是Jupyter的界面。创建笔记本在浏览器页面点击“New” - “Python 3 (ipykernel)”就会创建一个新的笔记本文件后缀为.ipynb。运行代码在单元格中输入代码例如import pandas as pd; print(pd.__version__)按ShiftEnter执行该单元格结果会直接显示在下方。你可以添加多个单元格分别执行。Jupyter的优点交互性强可视化结果直观便于分享和展示分析过程。需要注意的坑它本质上是一个Web服务代码是在后台的Python内核中运行的。务必确保启动Jupyter时所在的命令行环境是正确的即learn_py。有时在VS Code或PyCharm中也可以直接打开和运行.ipynb文件它们会帮你管理内核更加方便。我的建议新手可以以PyCharm或VS Code为主力用于系统性地编写脚本和项目。同时用Jupyter作为辅助用于快速测试代码片段、学习库的API、做数据可视化练习。两者结合效率最高。3. 跨越最初的语法障碍理解“变量”与“函数”环境工具齐备终于要面对Python代码本身了。网上的“python语法”教程多如牛毛但很多人看完一堆关键词列表、字典、循环、条件后依然不会写代码。问题在于缺乏一个将语法点串联起来的核心线索。我认为对于新手最核心的线索是两个概念变量和函数。几乎所有的Python程序都是数据存储在变量中被函数处理的过程。3.1 变量不只是名字更是“标签”很多教程说“变量是存储数据的盒子”。这个比喻在初期有帮助但容易产生误解特别是对于可变和不可变对象。我更倾向于“标签”比喻。在Python中变量是一个指向内存中某个对象的标签或名字。例如a 10 # 创建一个整数对象10并贴上标签a b a # 不是把10复制给b而是给同一个对象10再贴上一个标签b a 20 # 创建一个新的整数对象20把标签a从10身上撕下来贴到20上。此时b仍然贴着10。 print(b) # 输出 10对于列表这种可变对象list1 [1, 2, 3] # 创建一个列表对象贴上标签list1 list2 list1 # 给同一个列表对象再贴一个标签list2 list1.append(4) # 通过标签list1修改了这个列表对象 print(list2) # 输出 [1, 2, 3, 4]因为list2和list1贴的是同一个对象理解“标签”模型就能明白为什么修改list1会影响list2而修改a不会影响b因为整数是不可变的a20是创建了新对象并换标签。这是Python面试常考的基础也是后续理解函数参数传递是“传对象引用”的关键。实操心得多使用id()函数查看变量的内存地址直观感受“标签”指向哪里。print(id(a), id(b))如果id相同说明是同一个对象。3.2 函数封装与复用的基本单元函数是组织代码、避免重复的利器。新手常犯的错误是把所有代码都写在全局空间导致代码冗长难维护。从学习的第一天起就要有意识地将功能封装成函数。定义函数def calculate_volume(length, width, height): 计算长方体的体积。 volume length * width * height return volumedef是定义函数的关键字。calculate_volume是函数名应具有描述性。(length, width, height)是参数列表是函数的输入。三引号内是文档字符串说明函数用途这是个好习惯。return volume将计算结果输出。调用函数v calculate_volume(5, 3, 2) # 传递参数 print(f长方体的体积是{v}) # 输出长方体的体积是30为什么函数重要假设你需要在程序里多次计算不同长方体的体积。如果没有函数你就得把length * width * height这个公式写很多遍。一旦公式需要修改比如加上单位换算你就得修改所有地方极易出错。用函数你只需修改函数内部一处。进阶理解函数参数位置参数像上面那样按顺序传递(5, 3, 2)。关键字参数调用时指定参数名顺序可以打乱calculate_volume(width3, height2, length5)。默认参数定义时给参数默认值def greet(name, greetingHello):调用时greet(Alice)会使用默认的Hello。*args和**kwargs用于接收任意数量的位置参数和关键字参数初期知道有这么回事即可等遇到实际需要再深入学习。一个常见坑函数内修改可变参数def add_item(item, my_list[]): # 危险默认参数是可变对象 my_list.append(item) return my_list print(add_item(a)) # 输出 [a] print(add_item(b)) # 你以为会输出 [b]实际输出 [a, b]这是因为默认参数my_list[]在函数定义时就被创建了并且只创建一次。后续所有调用如果没有提供my_list参数都会共用这同一个列表对象。安全做法是使用None作为默认值def add_item(item, my_listNone): if my_list is None: my_list [] my_list.append(item) return my_list3.3 条件与循环让程序“思考”和“重复”有了变量存储数据函数处理数据我们还需要控制流程的语句条件判断和循环。它们是实现逻辑的骨架。条件判断if-elif-elsescore 85 if score 90: grade A elif score 80: # 如果上一个if不成立检查这个条件 grade B elif score 60: grade C else: # 以上所有条件都不成立 grade D print(grade) # 输出 B一句话条件赋值三元表达式这是搜索热词之一是一种简洁的写法。# 传统写法 if score 60: result 及格 else: result 不及格 # 三元表达式写法 result 及格 if score 60 else 不及格这种写法适合简单的条件赋值能让代码更紧凑但复杂逻辑不建议使用会影响可读性。循环for whilefor循环常用于遍历一个已知的序列如列表、字符串、字典。fruits [apple, banana, cherry] for fruit in fruits: # 依次将fruits中的每个元素赋值给fruit print(fI like {fruit}) # 输出三句话配合range()函数可以生成数字序列for i in range(5): # 生成0,1,2,3,4 print(i)while循环只要条件为真就重复执行代码块。count 0 while count 5: print(count) count 1 # 千万别忘了改变条件否则会无限循环循环控制break立即终止整个循环continue跳过本次循环剩余语句进入下一次循环。将变量、函数、条件、循环组合起来你已经能写出解决许多实际问题的程序了。例如计算一系列长方体的体积并筛选出大于某个值的def calculate_volume(l, w, h): return l * w * h # 一个包含长宽高元组的列表 boxes [(5,3,2), (10,2,1), (2,2,2), (8,4,3)] threshold 50 large_boxes [] # 用一个空列表存储结果 for box in boxes: vol calculate_volume(*box) # *box 将元组解包为三个参数 if vol threshold: large_boxes.append((box, vol)) # 将元组和体积一起存入列表 print(f体积超过{threshold}的箱子有{large_boxes})4. 与数据打交道初探列表、字典与文件操作当你掌握了基本语法下一步就是学习如何高效地组织和操作数据。Python内置了强大的数据结构最常用的就是列表List和字典Dict。同时如何从文件中读取数据或将处理结果保存下来也是必备技能。4.1 列表List你的万能有序容器列表用方括号[]表示可以存放任意类型的数据并且是有序的有明确的先后顺序。# 创建列表 fruits [apple, banana, orange] mixed [1, hello, 3.14, True] # 可以混合不同类型 numbers list(range(10)) # 通过list()函数将可迭代对象转为列表 # 访问元素通过索引从0开始 first_fruit fruits[0] # apple last_fruit fruits[-1] # orange负数表示从后往前数 # 切片获取子列表 [start:end:step]包含start不包含end sub_fruits fruits[1:3] # [banana, orange] reverse_fruits fruits[::-1] # [orange, banana, apple]反转列表 # 修改元素 fruits[1] grape # 列表变为 [apple, grape, orange] # 常用方法 fruits.append(peach) # 在末尾添加变为[... , peach] fruits.insert(1, mango) # 在索引1处插入mango其他元素后移 removed_item fruits.pop() # 移除并返回最后一个元素(peach) fruits.remove(grape) # 移除第一个匹配到的grape if apple in fruits: # 检查元素是否存在 print(Found apple!) length len(fruits) # 获取列表长度列表推导式一种优雅且高效地创建新列表的方法。# 传统方式创建一个包含0-9平方的列表 squares [] for i in range(10): squares.append(i**2) # 列表推导式 squares [i**2 for i in range(10)] # 带条件的列表推导式 even_squares [i**2 for i in range(10) if i % 2 0] # 只计算偶数的平方列表推导式是Pythonic具有Python风格的写法能让代码更简洁执行效率也通常更高。4.2 字典Dict通过“键”快速查找字典用花括号{}表示存储的是键值对Key-Value Pair。键必须是不可变类型如字符串、数字、元组值可以是任意类型。字典是无序的Python 3.7后字典会保持插入顺序但不应依赖此特性进行与顺序相关的操作。# 创建字典 student {name: Alice, age: 20, major: Computer Science} # 或者使用dict()函数 student dict(nameAlice, age20, majorCS) # 访问值通过键 name student[name] # Alice # 安全访问如果键不存在[]会报KeyErrorget()方法则返回None或默认值 score student.get(score) # 返回 None score student.get(score, 0) # 键不存在时返回默认值0 # 添加或修改键值对 student[score] 95 # 添加新的键值对 student[age] 21 # 修改已有键的值 # 删除键值对 del student[major] # 删除键为major的项 removed_value student.pop(age) # 删除并返回值 21 # 遍历字典 for key in student: # 遍历所有键 print(key) for value in student.values(): # 遍历所有值 print(value) for key, value in student.items(): # 同时遍历键和值 print(f{key}: {value}) # 字典推导式类似列表推导式 squared_dict {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}字典的查找速度极快因为它底层基于哈希表实现。当你需要根据某个标识如学号、产品ID来关联和查找数据时字典是最佳选择。4.3 文件读写让数据持久化程序运行时的数据都在内存里关闭程序就消失了。文件操作允许我们将数据保存到硬盘或从硬盘加载数据。基本模式r只读默认。文件必须存在。w写入。如果文件存在则清空不存在则创建。a追加。如果文件存在在末尾追加不存在则创建。x创建新文件并写入。如果文件已存在则报错。b二进制模式例如rb,wb用于处理图片、视频等非文本文件。t文本模式默认例如rt,wt。读取文件# 方法1一次性读取全部内容适合小文件 with open(example.txt, r, encodingutf-8) as file: content file.read() print(content) # 方法2逐行读取适合大文件 with open(example.txt, r, encodingutf-8) as file: for line in file: # file对象是可迭代的每次迭代返回一行 print(line.strip()) # strip()去除行尾换行符 # 方法3读取所有行到一个列表 with open(example.txt, r, encodingutf-8) as file: lines file.readlines() # 列表每个元素是一行写入文件data_to_write Hello, World!\nThis is a new line. with open(output.txt, w, encodingutf-8) as file: file.write(data_to_write) # 写入字符串 # 或者写入多行 lines [Line 1\n, Line 2\n, Line 3\n] file.writelines(lines) # 写入一个字符串列表关键点使用with语句这是最佳实践。它能确保文件在使用后被正确关闭即使发生异常也是如此。避免使用file open(...)然后手动file.close()容易忘记。指定编码特别是Windows系统默认编码可能是gbk。处理中文或确保跨平台兼容时显式指定encodingutf-8是明智之举。文件路径可以使用相对路径如data/input.txt相对于当前程序所在目录或绝对路径如C:/Users/Name/data.txt。在Windows中路径分隔符可以用/或\\。结合应用示例简易通讯录假设我们有一个contacts.txt文件每行存储一个联系人的“姓名,电话”。# 读取通讯录并存入字典 contacts {} with open(contacts.txt, r, encodingutf-8) as f: for line in f: name, phone line.strip().split(,) # 按逗号分割 contacts[name] phone print(contacts) # 例如 {Alice: 123456, Bob: 654321} # 添加新联系人 new_name input(输入姓名: ) new_phone input(输入电话: ) contacts[new_name] new_phone # 将更新后的字典写回文件 with open(contacts.txt, w, encodingutf-8) as f: for name, phone in contacts.items(): f.write(f{name},{phone}\n)这个例子综合运用了字典、文件操作和循环实现了一个简单的数据持久化功能。当你开始处理更复杂的数据如Excel、CSV、JSON时pandas库会成为更强大的工具但理解这些基础操作是前提。5. 迈向实用用第三方库解决具体问题当你熟悉了Python的核心语法和内置数据结构后就该利用丰富的第三方库来真正解决问题了。Python的强大一半在于语言本身另一半在于其庞大的生态系统PyPI。通过pip或conda你可以轻松安装任何你需要的库。下面我们围绕几个热搜词看看如何用库来解决实际问题。5.1 数据处理与分析Pandas初体验pandas是数据分析的基石它提供了DataFrame和Series这两种核心数据结构使得处理表格型数据如Excel、CSV变得异常简单。安装conda install pandas或pip install pandas核心概念DataFrame你可以把它想象成Excel中的一个工作表或者SQL里的一张表。它有行索引、列名每列可以是不同的数据类型。import pandas as pd # 从字典创建DataFrame data { Name: [Alice, Bob, Charlie], Age: [25, 30, 35], City: [New York, London, Tokyo] } df pd.DataFrame(data) print(df) # Name Age City # 0 Alice 25 New York # 1 Bob 30 London # 2 Charlie 35 Tokyo # 从CSV文件读取这是最常用的方式 # df pd.read_csv(data.csv) # 查看数据 print(df.head()) # 查看前5行 print(df.info()) # 查看数据概览列名、非空值数量、数据类型 print(df.describe()) # 查看数值列的统计摘要计数、均值、标准差等 # 选择数据 print(df[Name]) # 选择单列返回一个Series print(df[[Name, Age]]) # 选择多列返回一个DataFrame print(df.iloc[0]) # 通过整数位置选择行第一行 print(df.loc[df[Age] 28]) # 通过条件选择行年龄大于28的行 # 处理缺失值NaN df[Salary] [50000, None, 70000] # 添加一列包含一个缺失值 print(df.isnull()) # 检查缺失值 df_filled df.fillna({Salary: 60000}) # 用60000填充Salary列的缺失值 # 或者删除包含缺失值的行 df_dropped df.dropna() # 分组聚合 # 假设我们有一个销售数据df_sales包含Product, Sales, Region列 # grouped df_sales.groupby(Region)[Sales].sum() # 按地区汇总销售额搜索热词“python中如何替换某列特定数值”# 假设DataFrame df中有一列Status我们想将值为old的替换为new df[Status] df[Status].replace(old, new) # 或者更复杂的映射 replacement_map {old: new, pending: waiting} df[Status] df[Status].replace(replacement_map) # 也可以使用条件判断 df.loc[df[Status] old, Status] newpandas的功能远不止这些还包括数据合并、透视表、时间序列处理等。对于新手掌握read_csv/read_excel、数据查看、选择、过滤、简单的清洗和聚合就足以应对很多日常数据分析任务了。5.2 数据可视化Matplotlib画图“一图胜千言”。matplotlib是Python最基础的绘图库虽然API稍显底层但功能强大且灵活。pandas的.plot()方法底层就是调用matplotlib。安装conda install matplotlib基础绘图import matplotlib.pyplot as plt import numpy as np # 准备数据 x np.linspace(0, 10, 100) # 生成0到10之间均匀的100个数 y np.sin(x) # 创建图形和坐标轴 fig, ax plt.subplots(figsize(8, 5)) # fig是图形ax是坐标轴 # 在坐标轴上绘图 ax.plot(x, y, labelsin(x), colorblue, linewidth2) ax.set_xlabel(X Axis) # 设置X轴标签 ax.set_ylabel(Y Axis) # 设置Y轴标签 ax.set_title(A Simple Sine Wave) # 设置标题 ax.legend() # 显示图例 ax.grid(True, linestyle--, alpha0.6) # 显示网格线 # 显示图形 plt.show()搜索热词“python每隔一段时间画折线图” 这通常涉及到动态更新图表有两种常见场景实时监控数据需要用到动画功能matplotlib.animation。import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np import time fig, ax plt.subplots() x_data, y_data [], [] line, ax.plot([], [], b-) ax.set_xlim(0, 10) ax.set_ylim(-1.5, 1.5) def update(frame): # 模拟获取新数据点 new_x time.time() % 10 # 用时间模拟X值 new_y np.sin(new_x) x_data.append(new_x) y_data.append(new_y) # 保持最近100个点 if len(x_data) 100: x_data.pop(0) y_data.pop(0) line.set_data(x_data, y_data) ax.set_xlim(min(x_data), max(x_data)) # 动态调整X轴范围 return line, ani animation.FuncAnimation(fig, update, interval500) # 每500毫秒更新一次 plt.show()定期绘制静态图比如每小时将收集的数据画一次图并保存。这更简单用一个循环加time.sleep()即可。import time import matplotlib.pyplot as plt while True: # 1. 从数据库、文件或API获取最新数据 # data fetch_latest_data() # 2. 绘图 # plt.plot(data) # plt.savefig(fplot_{int(time.time())}.png) # 用时间戳命名保存 # plt.clf() # 清除当前图形为下一次绘图准备 print(Plot generated and saved.) time.sleep(3600) # 休眠一小时3600秒对于更美观、更简单的统计图表可以后续学习seaborn或plotly库。5.3 网络请求与简单爬虫Requests入门requests库让HTTP请求变得极其简单是获取网络数据爬虫基础或调用Web API的必备工具。安装conda install requests或pip install requests基本使用import requests # 发送一个GET请求获取数据 url https://api.github.com/events response requests.get(url) # 检查请求是否成功状态码200表示成功 if response.status_code 200: # 响应内容文本格式 print(response.text[:500]) # 打印前500个字符 # 如果响应是JSON可以直接解析为Python字典/列表 data response.json() # 处理data... else: print(fRequest failed with status code: {response.status_code}) # 发送带参数的GET请求 params {key1: value1, key2: value2} response requests.get(https://httpbin.org/get, paramsparams) # 发送POST请求提交数据 payload {username: admin, password: secret} response requests.post(https://httpbin.org/post, datapayload)一个简单的静态页面内容抓取示例import requests from bs4 import BeautifulSoup # 一个HTML解析库需额外安装pip install beautifulsoup4 url https://example.com try: resp requests.get(url, timeout5) # 设置超时时间 resp.raise_for_status() # 如果状态码不是200抛出异常 soup BeautifulSoup(resp.text, html.parser) # 解析HTML # 例如获取页面标题 page_title soup.title.string print(fPage Title: {page_title}) # 获取所有段落文本 paragraphs soup.find_all(p) for p in paragraphs: print(p.get_text()) except requests.exceptions.RequestException as e: print(fError fetching the page: {e})重要提示网络爬虫涉及法律和道德问题。务必遵守网站的robots.txt协议尊重版权不要对目标网站造成过大访问压力添加延时。对于动态加载的内容JavaScript渲染requestsBeautifulSoup可能不够需要用到Selenium或Playwright等工具。通过这几个库的初探你应该能感受到Python生态的强大。从处理本地数据pandas到绘制图表matplotlib再到获取网络数据requests你已经具备了用Python解决一系列实际问题的基本能力。接下来就是通过项目实践将这些点串联成线构建你自己的知识体系。