Day 36:【99天精通Python】综合实战 - 爬虫与数据分析可视化(下) - 让数据“说话“

Day 36:【99天精通Python】综合实战 - 爬虫与数据分析可视化(下) - 让数据"说话"

前言

欢迎来到第36天!

在昨天(Day 35)的课程中,我们化身为"数据采集员",成功编写爬虫抓取了豆瓣 Top250 的电影数据,并将它们整整齐齐地存入了 SQLite 数据库中。

但是,躺在数据库里的冷冰冰的数字是产生不了价值的。今天,我们要转型为数据分析师,将这些数据提取出来,挖掘其中的规律,并用直观的图表展示出来。

本节内容:

  • 安装数据可视化库matplotlib
  • 从 SQLite 读取数据
  • 解决 Matplotlib 中文乱码问题
  • 绘制柱状图:评分分布分析
  • 绘制条形图:Top 10 电影排名
  • 项目总结与复盘

一、环境准备

我们需要一个强大的绘图库。Python 界最老牌、最经典的绘图库是Matplotlib

pipinstallmatplotlib

二、读取数据与中文设置

新建一个文件visualize.py。首先,我们需要连接数据库并配置绘图环境。

2.1 解决中文乱码 (巨坑预警)

Matplotlib 默认不支持中文字体,直接画图中文会显示成方块□□。我们需要手动设置字体。

# visualize.pyimportsqlite3importmatplotlib.pyplotasplt# --- 配置 Matplotlib ---# 设置中文字体 (Windows通常是SimHei, Mac可能需要Arial Unicode MS或Heiti TC)plt.rcParams['font.sans-serif']=['SimHei']# 解决负号显示为方块的问题plt.rcParams['axes.unicode_minus']=False# 设置分辨率 (让图表更清晰)plt.rcParams['figure.dpi']=100defget_data(sql):"""通用函数:执行SQL并返回结果"""conn=sqlite3.connect("movie.db")cursor=conn.cursor()cursor.execute(sql)data=cursor.fetchall()conn.close()returndata

三、分析1:评分分布 (柱状图)

问题:这 250 部经典电影中,哪个分数段的电影最多?是 9.0 分以上的封神之作多,还是 8.5 分左右的优秀作品多?

代码实现

defplot_rating_dist():# 1. 获取数据# 我们统计每个分数有多少部电影# SQL: SELECT rating, COUNT(*) FROM movies GROUP BY ratingsql="SELECT rating, COUNT(*) FROM movies GROUP BY rating ORDER BY rating"data=get_data(sql)# 解包数据:x轴是评分,y轴是数量ratings=[row[0]forrowindata]counts=[row[1]forrowindata]# 2. 创建画布plt.figure(figsize=(10,6))# 3. 绘制柱状图 (Bar Chart)# color: 柱子颜色, alpha: 透明度bars=plt.bar(ratings,counts,color='skyblue',width=0.1)# 4. 添加标题和标签plt.title("豆瓣Top250 电影评分分布",fontsize=16)plt.xlabel("评分",fontsize=12)plt.ylabel("电影数量",fontsize=12)# 5. 在柱子上显示具体数值forbarinbars:height=bar.get_height()plt.text(bar.get_x()+bar.get_width()/2,height,f'{int(height)}',ha='center',va='bottom')# 6. 保存并显示plt.grid(axis='y',linestyle='--',alpha=0.5)# 加个虚线网格更好看plt.savefig("rating_dist.png")plt.show()# 运行if__name__=="__main__":plot_rating_dist()

分析结果:运行后你会发现,Top250 中大部分电影集中在8.5 到 9.0分之间,能够达到 9.5 分以上的电影凤毛麟角(如《肖申克的救赎》、《霸王别姬》)。


四、分析2:排名最高的10部电影 (条形图)

问题:谁是榜单上的"十大天王"?虽然我们知道 Rank 1-10,但画个图看起来更有气势。

代码实现

defplot_top10():# 1. 获取数据# 取前10名,按排名逆序 (为了让第1名显示在图表最上方)sql="SELECT title, rating FROM movies ORDER BY rank LIMIT 10"data=get_data(sql)# 因为 matplotlib 的 barh 是从下往上画的,所以我们需要把数据反转一下data.reverse()titles=[row[0]forrowindata]ratings=[row[1]forrowindata]# 2. 创建画布plt.figure(figsize=(12,8))# 3. 绘制水平条形图 (Horizontal Bar)plt.barh(titles,ratings,color='orange',height=0.6)# 4. 设置坐标轴范围 (评分都在9分以上,为了差异明显,X轴从9.0开始)plt.xlim(9.0,9.8)# 5. 添加标签plt.title("豆瓣Top250 - 前十名神作",fontsize=16)plt.xlabel("评分",fontsize=12)# 6. 保存并显示plt.tight_layout()# 自动调整布局,防止文字被遮挡plt.savefig("top10.png")plt.show()# 在 main 中加入调用if__name__=="__main__":# plot_rating_dist()plot_top10()

五、综合实战项目复盘

至此,我们的豆瓣电影分析项目就全部完成了!让我们回顾一下整个流程:

spider.py

storage.py

visualize.py

Matplotlib

采集

存储

分析

展示

Requests (请求)
BeautifulSoup (解析)

SQLite (轻量级数据库)
SQL (增删改查)

SQL聚合 (GROUP BY)
Python列表处理

柱状图/条形图
可视化报表

你学会了什么?

  1. 全栈流程:体验了从"获取原料"(爬虫)到"加工存储"(数据库)再到"成品展示"(可视化)的完整数据链路。
  2. 问题解决:解决了反爬虫 User-Agent、数据库去重、Matplotlib 中文乱码等实际问题。
  3. 模块化思维:将不同功能的代码拆分到不同文件中,而不是写成一坨面条代码。

六、常见问题

Q1:Matplotlib 报错Font family ['SimHei'] not found

这是因为你的电脑里没有 SimHei 字体(常见于 Linux/Mac)。
解决

  • Mac: 尝试plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
  • Linux: 需要下载字体文件 (.ttf) 并配置,或者直接使用英文标签。

Q2:生成的图片里的字叠在一起了?

使用plt.figure(figsize=(宽, 高))调大画布尺寸,或者使用plt.tight_layout()自动调整间距。

Q3:我想做更炫酷的可交互图表(比如鼠标悬停显示数值)?

Matplotlib 生成的是静态图片。如果想要交互式图表(如网页版),推荐学习PyechartsPlotly(这属于进阶/项目篇的内容)。


七、小结

恭喜你完成了进阶篇的一半旅程!

通过这两个实战,你已经不再是一个只会写if/else的初学者了。你具备了获取数据分析数据的初步能力,这在当今"数据驱动"的职场中是非常核心的竞争力。


八、课后作业

  1. 词云图 (进阶挑战):安装wordcloudjieba库,从数据库中读取所有电影的quote(引言),进行分词,生成一张"豆瓣电影关键词"的词云图。
  2. 年代分析:(需要修改爬虫) 修改之前的爬虫,提取电影的"年份"。然后分析哪个年代(如90年代、00年代)上榜的电影最多。
  3. Excel 报表:将visualize.py里的分析结果(如评分统计数据),写入到一个新的 Excel 文件中,作为一个简单的数据分析报告。

下节预告

Day 37:虚拟环境 (Virtualenv/Venv)- 随着项目越来越多,安装的库也越来越杂(A项目要用 Django 2.0,B项目要用 Django 4.0,打架了怎么办?)。明天我们学习如何给每个项目创建独立的"平行宇宙"。


系列导航

  • 上一篇:Day 35 - 综合实战爬虫与可视化上
  • 下一篇:Day 37 - 虚拟环境管理(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导师推荐!8个AI论文平台测评:研究生开题报告全攻略

导师推荐!8个AI论文平台测评:研究生开题报告全攻略 学术写作工具测评:为什么需要一份精准的AI论文平台榜单 在研究生阶段,开题报告和论文撰写是科研工作的核心环节,而高效、专业的写作工具能显著提升研究效率与成果质…

Intel平台嵌入式SPI通信:新手教程

Intel平台嵌入式SPI通信:从零理解eSPI的实战指南你有没有遇到过这样的情况?在调试一块工业主板时,发现电源键按下后系统无法唤醒;或者在做低功耗设计时,明明进入了S3睡眠,传感器数据却断了传输。这些问题的…

Doris与Trino集成:统一SQL大数据查询引擎

Doris与Trino集成:统一SQL大数据查询引擎 关键词:Doris、Trino、SQL查询引擎、大数据分析、数据仓库、联邦查询、OLAP 摘要:本文深入探讨了Apache Doris与Trino两大流行SQL查询引擎的集成方案,旨在构建统一的大数据查询平台。文章首先分析了两者的架构特点和互补优势,然后…

Day 38:【99天精通Python】线程池与进程池 - 优雅地管理并发

Day 38:【99天精通Python】线程池与进程池 - 优雅地管理并发 前言 欢迎来到第38天! 在 Day 24 和 Day 25 中,我们学习了如何手动创建线程 (threading.Thread) 和进程 (multiprocessing.Process)。虽然原理都懂了,但在实际工程中&a…

“死了么”App爆火,我发现了个安卓版,代码开源!

最近看到一个特别搞笑的评论: 当代年轻人日常:用「饿了么」填饱肚子,「死了么」证明还活着 😂 随着前几天「死了么」APP 爆火,网上的段子手们就没停下来过,哈哈哈哈哈 iPhone版 「死了么」是iPhone手机上…

Figma中文插件完全配置指南:告别英文界面困扰

Figma中文插件完全配置指南:告别英文界面困扰 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma复杂的英文界面而头疼吗?面对专业设计工具,…

基于YOLOv8的小麦田间病害识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

基于YOLOv8的小麦田间病害识别项目|完整源码数据集PyQt5界面完整训练流程开箱即用! 源码包含:完整YOLOv8训练代码数据集(带标注)权重文件直接可允许检测的yolo检测程序直接部署教程/训练教程 基本功能演示 源码在文末哔哩哔哩视频简介处获…

基于Simulink的混合PO与INC切换MPPT策略仿真

目录 手把手教你学Simulink 一、引言:为什么需要“混合P&O与INC”? 二、系统整体架构 控制流程: 三、核心算法详解 1. P&O 算法(扰动观察法) 2. INC 算法(电导增量法) 3. 光照突…

多语言界面在screen中的实现:项目应用

用 GNU Screen 构建轻量级多语言终端界面:从原理到实战你有没有遇到过这样的场景?一位中国工程师深夜远程连接非洲基站的工控设备,刚准备执行配置命令时断网了。几小时后重新登录,发现之前的调试流程全中断了——日志没了、上下文…

学长亲荐8个一键生成论文工具,专科生毕业论文必备!

学长亲荐8个一键生成论文工具,专科生毕业论文必备! AI 工具让论文写作不再难 在当前的学术环境中,AI 工具已经成为许多学生和研究者不可或缺的助手。尤其是对于专科生而言,面对繁重的毕业论文任务,如何高效地完成内容撰…

Figma中文界面终极解决方案:5分钟完成专业设计工具全面汉化

Figma中文界面终极解决方案:5分钟完成专业设计工具全面汉化 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma英文操作界面而困扰?想要快速掌握这款国际…

基于Simulink的多时间常数储能配置优化仿真

手把手教你学Simulink--基础储能管理场景实例:基于Simulink的多时间常数储能配置优化仿真 手把手教你学Simulink ——基础储能管理场景实例:基于Simulink的多时间常数储能配置优化仿真 一、引言:为什么需要“多时间常数储能”? …

大模型微调技术详解:从全参数微调到RLHF的演进与应用

文章系统介绍了大模型微调技术的发展历程,从2018年全参数微调到2023年的偏好对齐技术,包括特征提取、Adapter、LoRA、提示微调、指令微调等方法。分析了各种微调技术的原理、特点和适用场景,解释了微调为何在大模型时代取代从零训练&#xff…

大模型微调技术详解:从全参数微调到RLHF的演进与应用

文章系统介绍了大模型微调技术的发展历程,从2018年全参数微调到2023年的偏好对齐技术,包括特征提取、Adapter、LoRA、提示微调、指令微调等方法。分析了各种微调技术的原理、特点和适用场景,解释了微调为何在大模型时代取代从零训练&#xff…

S32DS使用手把手教程:从零实现CAN通信配置

从零开始玩转S32DS:手把手教你搞定S32K芯片上的CAN通信你有没有遇到过这种情况?项目紧急,要让两个ECU通过CAN总线对话,结果在S32DS里点来点去,引脚配了、时钟设了、波特率也算了一遍又一遍——可就是收不到一帧数据。调…

学Simulink——基础储能管理场景实例:基于Simulink的多时间常数储能配置优化仿真

目录 手把手教你学Simulink 一、引言:为什么需要“多时间常数储能”? 二、系统整体架构 控制层级: 三、理论基础:功率频谱分解方法 1. 一阶IIR低通滤波器(最常用) 2. SOC 反馈修正(防越限…

基于深度学习的森林火灾识别系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)

基于深度学习的森林火灾识别系统(设计源文件万字报告讲解)(支持资料、图片参考_相关定制) yolov5 yolov8目标检测算法模型 用Python语言实现,深度学习和图像处理技术,pycharm运行,亲测可运行

RHEL9系统部署与Linux命令操作实验报告

实验名称:VMware搭建RHEL9虚拟机及Linux文件与vim操作实践 实验目的: 1. 掌握在VMware中创建虚拟机并安装RHEL9操作系统的方法,学会通过SSH实现远程连接。 2. 熟练运用Linux文件管理命令完成目录与文件的创建操作。 3. 掌握vi/vim编辑器的基本…

《嵌入式操作系统》_在ubuntu系统中使用wine环境安装source insight_20260113

全程 root 用户 操作,本次安装的 Wine 是 系统官方软件库内置的稳定版本,不是第三方源的 winehq 版本,不添加任何外部源、不做任何额外配置,直接从系统库安装。1.安装wine1.1. 启用 32 位架构(必做!Wine 运…

STM32调试技巧:Keil MDK实用操作指南

STM32调试进阶:用Keil MDK打造高效开发闭环你有没有遇到过这样的场景?程序跑着跑着突然死机,串口毫无输出;ADC采样值莫名其妙跳变;某个全局变量在中断里被悄悄改写却找不到源头……面对这些问题,靠“加打印…