找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3276

积分

0

好友

422

主题
发表于 23 小时前 | 查看: 1| 回复: 0

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 1

像数据侦探一样,用Python发现数据背后的故事。

本节课,我们将借助 Python 中两个强大的第三方库,一起动手探索中国二手车市场的奥秘。你将体验到数据分析从数据加载到可视化的完整流程。

今天你将掌握的核心技能

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 2

学习建议:建议按顺序逐个运行代码块,观察每一步的输出结果。遇到不理解的地方,可以随时向 AI 助手提问!


实战场景:分析某二手车平台数据

本节课目标:在本节课中,你将动手体验两个超实用的第三方 Python 库——pandasmatplotlib,帮助你轻松地探索和可视化数据!


启动项目:认识第三方库

是不是对“第三方库”有点疑问?不知道它是可以直接用,还是需要额外操作?

简单来说,除了 Python 自带的“标准库”(如 csv、json),社区开发的强大工具(如 pandasmatplotlib)都需要先安装才能使用。最常用的安装方式是通过 pip 命令,在终端中输入 pip install pandas matplotlib 即可。下图清晰地解释了标准库与第三方库的区别及安装方法:

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 3


我们将使用一份 真实的中国二手车交易数据,包含各种热门品牌,通过数据分析来回答以下问题:

  • 💰 哪些车的价格最高?
  • 📅 不同年份的二手车价格有什么规律?
  • 📈 里程数和价格之间有什么关系?

为什么选择二手车数据? 二手车市场是一个典型的结构化数据场景,数据维度清晰(车型、价格、年份、里程),非常适合作为数据分析的入门案例。通过这个实战项目,你将体会到数据分析在现实生活中的应用价值。

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 4

使用 pandas 加载和探索数据

pandas 是 Python 中最受欢迎的数据分析库之一,它的名字来源于“Panel Data”(面板数据)的缩写。pandas 非常适合用来加载和分析结构化数据,比如电子表格和 .csv 文件中的内容。它提供了一种叫做 DataFrame(数据框)的数据结构,你可以把它想象成一个功能强大的“智能表格”。

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 5

在使用 pandas 之前,首先需要导入它:

# 导入 pandas 库并设置别名为 pd
# 为什么使用 pd 作为别名?这是数据科学社区的约定俗成,
# 几乎所有的 pandas 教程和文档都使用这个别名
import pandas as pd

import pandas as pd 这行代码相当于给 pandas 起了个简写别名 pd,这样你就不用每次都敲完整的 pandas 了。

💡 为什么使用别名? 在数据分析领域,pdpandas 的约定俗成的别名,就像 npnumpy 的别名一样。使用这些标准别名可以让你的代码更易读,也方便与其他开发者交流。

注意: 在调用 pandas 里的函数时,记得用 . 来访问,比如 pd.read_csv()。如果你对这部分有疑问,可以回去复习一下本课程中“从本地文件调用函数”的那节内容!


加载中国二手车数据

接下来,我们将使用 pandasread_csv() 函数加载一份来自某二手车平台的交易数据。

这份数据包含以下字段:

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 6

让我们加载数据并查看其内容:

# 使用 pandas 的 read_csv() 函数加载 CSV 格式的数据文件
# read_csv() 会自动将数据解析为 DataFrame(数据框)格式
# 数据来源:模拟的中国二手车平台交易数据
data = pd.read_csv('china_car_data.csv')

# 打印整个 DataFrame,查看数据的整体结构
# pandas 会自动格式化输出,显示前几行和后几行
print(data)

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 7

数据筛选实战

在实际的数据分析工作中,我们经常需要根据特定条件筛选数据。比如,如何只显示售价超过 100,000 元的汽车呢?

这里我们将展示一个非常实用的技巧——借助 AI 助手来生成代码。当你不确定如何实现某个功能时,可以向 AI 描述你的需求,让它帮你生成代码。

让我们来请教一下 AI 吧!(此处 print_llm_response 是一个假设的辅助函数,用于模拟与AI对话的输出)

# 向 AI 描述我们的需求:筛选价格 >= 100000 元的车辆
# 注意:在提问时,清晰地描述数据结构和需求是获得准确答案的关键
print_llm_response("""
我已经用这段代码加载了一些数据:
data = pd.read_csv('china_car_data.csv')
print(data)
打印出来的数据包含:车型、价格、年份、里程 这几列。
请帮我筛选出价格大于或等于 100000 元的车辆。
""")

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 8

接下来,让我们运行 AI 生成的代码,根据价格筛选数据。

🔍 代码解析data[data[“价格”] >= 100000] 这行代码使用了 布尔索引 技术。data[“价格”] >= 100000 会返回一个 True/False 的序列,然后用这个序列来筛选出符合条件的行。

# 使用布尔索引筛选价格 >= 100000 元的汽车
# 工作原理:
# 1. data["价格"] >= 100000 生成一个布尔序列(True/False)
# 2. 将这个布尔序列作为索引,筛选出 True 对应的行
# 这种语法简洁高效,是 pandas 数据筛选的核心技巧
print(data[data["价格"] >= 100000])

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 9

你也可以根据数据中的其他列进行筛选,比如按年份筛选。

💡 举一反三:布尔索引的语法非常灵活,你可以使用各种比较运算符(==!=><>=<=)来构建筛选条件。

# 使用布尔索引筛选特定年份的数据
# 这里使用 == 运算符进行精确匹配
# 显示所有 2020 年出厂的二手车
print(data[data["年份"] == 2020])

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 10

描述性统计:计算中位数

pandas 内置了方便的统计工具,可以帮我们快速计算各种描述性统计指标

📚 什么是中位数? 中位数(Median)是将一组数据从小到大排列后,位于中间位置的数值。与平均值相比,中位数不受极端值的影响,更能反映数据的“典型”水平。在分析房价、工资等容易出现极端值的数据时,中位数往往比平均值更有参考价值。

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 11

接下来,我们来计算 2020 年二手车的价格中位数

# 第一步:筛选出 2020 年的数据子集
# 将筛选结果保存到变量 filtered_data 中,方便后续操作
filtered_data = data[data["年份"] == 2020]

# 第二步:计算价格列的中位数
# .median() 是 pandas Series 对象的内置方法
# 它会自动处理数据排序和中间值计算
median_price = filtered_data["价格"].median()

# 使用 f-string 格式化输出结果
# :.2f 表示保留两位小数
print(f"2020 年二手车的价格中位数为:{median_price:.2f} 元")

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 12


使用 matplotlib 绘制数据图表

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 13

matplotlib 是 Python 中最经典的数据可视化库,几乎是每个数据科学家和开发者的必备工具。它的名字来源于 MATLAB(一款商业数学软件)的绘图功能,因此语法风格与 MATLAB 非常相似。

🎨 为什么要做数据可视化? 人类大脑对图像的处理速度远快于文字和数字。通过将数据转化为图表,我们可以更直观地发现数据中的规律、趋势和异常值。

首先,让我们加载必要的工具:

# 导入 matplotlib 的 pyplot 模块,设置别名为 plt
# pyplot 提供了类似 MATLAB 的绘图接口,简单易用
import matplotlib.pyplot as plt

# 加载中文字体支持
# 这是一个自定义模块,用于解决 matplotlib 默认不支持中文显示的问题
# 如果不加载中文字体,图表中的中文会显示为方块
import chinese_font

在使用时,你可能会有疑问:import matplotlib.pyplot as plt 是不是可以写成 from matplotlib import pyplot as plt

答案是肯定的,这两种写法完全等价,功能上没有任何区别。下图为你详细解析了这两种导入方式:

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 14

探索关系:里程 vs. 价格

不用担心记住这些命令,你随时可以通过问 AI 来找到它们。这里用到了 import 命令的 as 形式来创建别名——这样你就可以用 plt 代替 matplotlib.pyplot,大大减少了输入量!

接下来,我们用 matplotlib.pyplot 来绘制汽车售价与行驶里程的关系图

🤔 思考题:你觉得里程数和价格之间会是什么关系?是里程越高价格越低,还是没有明显关系?让我们通过散点图来验证你的猜测!

# 绘制散点图(Scatter Plot)
# 散点图适合展示两个数值变量之间的关系
# 参数说明:
#   - 第一个参数:x 轴数据(里程)
#   - 第二个参数:y 轴数据(价格)
plt.scatter(data["里程"], data["价格"])

# 显示图表
# plt.show() 会打开一个窗口展示绘制好的图表
plt.show()

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 15

定制图表样式

从上面的散点图可以看出,数据点分布比较分散,里程和价格之间似乎没有非常明显的线性关系。这可能是因为影响二手车价格的因素很多,里程只是其中之一。

matplotlib 提供了丰富的配置选项,方便你定制图表的样式,让图表更加专业、易读。接下来,让我们请 AI 帮忙添加标题和坐标轴标签:

# 向 AI 请求帮助:为图表添加标题和坐标轴标签
# 清晰地描述当前代码和期望的效果
print_llm_response("""
我用下面的代码绘制了一个散点图:
plt.scatter(data[“里程”], data[“价格”])
plt.show()
请帮我添加标题‘二手车里程与价格关系图’,并为 x 轴添加标签‘行驶里程(公里)’,为 y 轴添加标签‘价格(元)’。
""")

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 16

# 绘制带有标题和标签的散点图
# 这是一个更专业、更易读的图表版本

# 绘制散点图
plt.scatter(data["里程"], data["价格"])

# 添加图表标题
# 标题应该简洁明了,概括图表的主要内容
plt.title('二手车里程与价格关系图')

# 添加 x 轴标签(说明横轴代表的含义和单位)
plt.xlabel('行驶里程(公里)')

# 添加 y 轴标签(说明纵轴代表的含义和单位)
plt.ylabel('价格(元)')

# 显示图表
plt.show()

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 17

课后练习

太棒了!你已经学完了本课的核心内容。现在是时候动手实践了!

练习 1:数据筛选

编写代码,筛选出 2018 年之后(包括 2018 年)的所有二手车数据。

💡 提示:使用 >= 运算符进行筛选。

# 练习 1:筛选 2018 年及之后的二手车数据
# 提示:使用 >= 运算符和布尔索引
# 在此处编写你的代码
print(data[data["年份"] >= 2018])

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 18

练习 2:数据可视化

请编写代码,绘制价格与年份的散点图,观察年份对价格的影响。

💡 提示:参考前面绘制“里程 vs. 价格”散点图的代码,只需要修改 x 轴和 y 轴对应的列名即可。

# 练习 2:绘制价格与年份的散点图
# 提示:参考前面的 plt.scatter() 用法
# 在此处编写你的代码
# 这是一个更专业、更易读的图表版本

# 绘制散点图
plt.scatter(data["年份"], data["价格"])

# 添加图表标题
plt.title('二手车年份与价格关系图')

# 添加 x 轴标签
plt.xlabel('年份(年)')

# 添加 y 轴标签
plt.ylabel('价格(元)')

# 显示图表
plt.show()

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 19

挑战练习!

这是一道进阶挑战题,需要你综合运用今天学到的知识。

请让 AI 帮助你绘制一个饼图(Pie Chart),展示数据集中不同年份二手车的数量占比

💡 提示

  • 使用 value_counts() 方法统计每个年份出现的次数
  • 使用 plt.pie() 函数绘制饼图
  • 可以向 AI 描述你的需求,让它帮你生成完整的代码

⚠️ 注意:饼图适合展示各部分占总体的比例关系,但当类别过多时,饼图会变得难以阅读。在实际工作中,要根据数据特点选择合适的图表类型。

(以下为示例代码,展示了解决中文显示和绘制饼图的一种方法)

# 挑战练习:绘制饼图展示不同年份二手车的数量占比

# 导入库
import pandas as pd
import matplotlib.pyplot as plt

# ========== 核心:解决中文显示方框问题 ==========
plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei", "DejaVu Sans"]  # Windows系统字体
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示方框
# ==============================================

# 加载数据
data = pd.read_csv('china_car_data.csv')

# 统计年份数量
year_counts = data["年份"].value_counts().sort_index()

# 绘制饼图
plt.figure(figsize=(10, 8))
patches, texts, autotexts = plt.pie(
    year_counts.values,
    labels=year_counts.index,
    autopct="%1.1f%%",
    startangle=90,
    explode=[0.05]*len(year_counts),
    shadow=True
)

# 美化文字
for autotext in autotexts:
    autotext.set_color("white")
    autotext.set_fontsize(11)

# 设置标题
plt.title('各年份二手车数量占比')
plt.axis("equal")
plt.show()

# 打印统计
print("各年份二手车数量统计:")
print(year_counts)
print(f"\n总计车辆数量:{year_counts.sum()} 辆")

Python数据分析实战:用pandas与matplotlib探索二手车市场 - 图片 - 20


本课总结

恭喜你完成了本课的学习!让我们回顾一下今天掌握的核心知识点:

关键知识点回顾

知识模块 核心内容 常用方法/函数
pandas 数据加载 从 CSV 文件读取数据到 DataFrame pd.read_csv()
数据筛选 使用布尔索引过滤数据 data[data[“列名”] >= 值]
描述性统计 计算数据的统计指标 .median(), .mean(), .count()
matplotlib 可视化 绘制散点图展示数据关系 plt.scatter(), plt.show()
图表定制 添加标题、坐标轴标签 plt.title(), plt.xlabel(), plt.ylabel()

核心概念解析

DataFrame(数据框)pandas 中最核心的数据结构,可以理解为一个“智能表格”。它不仅能存储数据,还内置了丰富的数据处理方法。

布尔索引:通过条件表达式(如 data[“价格”] >= 100000)生成一个 True/False 的序列,再用这个序列筛选出符合条件的行。这是数据分析中最常用的筛选技巧。

散点图(Scatter Plot):用于展示两个变量之间关系的图表类型。每个数据点在图上的位置由其在两个变量上的值决定,非常适合探索变量间的相关性。

延伸学习建议

  1. 深入 pandas:尝试学习 groupby() 分组聚合、merge() 数据合并等高级功能。
  2. 丰富可视化:探索 matplotlib 的柱状图、折线图、饼图等更多图表类型。
  3. 实战练习:尝试用今天学到的技能分析其他数据集(如天气数据、股票数据),并借助 AI 辅助解决更复杂的问题。

🎉 你做得很棒! 数据分析是一项需要不断练习的技能。建议多动手实践,你会进步得越来越快!我们后续的课程将在 云栈社区 持续更新,欢迎关注更多实战教程。




上一篇:在 Cloudflare Workers 上零成本自托管 Bitwarden:手把手部署 NodeWarden 指南
下一篇:春节假期,我用千道题大模型评测集找出了各领域的最强者
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 23:30 , Processed in 0.366329 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表