Python 数据可视化入门 5 - 数据可视化

힘센캥거루
2023년 11월 14일(수정됨)
4
14

在上一篇文章中,我们简单了解了如何使用 Pandas 和 Matplotlib。

这次,我们将用 Pandas 导入的 Excel 数据进行 Matplotlib 可视化

由于 Matplotlib 支持数据框,我们只需简单地在导入的 Excel 中指定 x 值和 y 值

1. 使用 Pandas 导入 Excel

好,接下来让我们从起初村开始。使用我们上次看到的山雀文件夹使用 pandas 导入按地区的高温天数

Python 数据可视化入门 5 - 数据可视化-1

然后,将我们在上一篇关于使用 Matplotlib 的文章中看到的设置韩文字体的代码复制并粘贴。

import pandas as pd

# 模块调用及韩文字体设置
import matplotlib.pyplot as plt
import matplotlib

# MacOS 字体设置
# matplotlib.rcParams["font.family"] = "AppleGothic"

# Windows 字体设置
matplotlib.rcParams["font.family"] = "Malgun Gothic"

# 字体大小设置
matplotlib.rcParams["font.size"] = 13

# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False

hot = pd.read_excel("./hot_wave.xlsx")
hot.head(3)

由于使用结构化数据,所以这样做就完成了为数据可视化做准备

现在,让我们利用这些数据绘制图表。

Python 数据可视化入门 5 - 数据可视化-2

2. 用 Matplotlib 可视化

既然已经导入了数据,那么让我们试着直接放入

像下面这样直接放入整个数据框

plt.plot(hot)

结果将得到如下图表。

你可能直觉上觉得有些不对。

Python 数据可视化入门 5 - 数据可视化-3

这是因为Excel 数据中的年份被作为 y 值

除非指定 x 轴和 y 轴,否则plot 将解释给定值为 y 值并进行显示。

Python 数据可视化入门 5 - 数据可视化-4

如图所示,将x 轴值给为按年份,y 轴值为除年份以外的所有值

plt.plot(hot["연도별"], hot.loc[:, "서울(일)":])

这一次,你会发现有些符合我们期望的图表形式

Python 数据可视化入门 5 - 数据可视化-5

3. 加工为理想形式

现在,只需将数据加工为所需形式即可放入 plot。

按照上次文章的顺序进行即可。

  1. 选择 x 轴和 y 轴 数据

  2. 设置标题

  3. 设置图例

  4. 设置坐标轴名称

  5. 座标轴间隔设置(如有必要)

  6. 更改图表样式

有关代码的详细说明,请参考上一篇文章。

本文将尽量专注于代码的应用示例

1) 选择 x 轴、y 轴数据

首先,我们计划比较首尔、大田、大邱的高温天数

由于在上面的输出中可以看到数据,轻松地用iloc 提取进行了图表绘制。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
Python 数据可视化入门 5 - 数据可视化-6

如果图表输出如下图所示,则成功。

Python 数据可视化入门 5 - 数据可视化-7

2) 设置标题

标题确定为“按地区的高温天数”

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
plt.title("시도별 폭염일수") # <-- 添加!
Python 数据可视化入门 5 - 数据可视化-8

3) 设置图例

由于很难知道图表的值是什么,所以设置图例。可以使用columns轻松显示图例。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns) # <-- 添加!
plt.legend() # <-- 添加!
plt.title("시도별 폭염일수")
Python 数据可视化入门 5 - 数据可视化-9

4) 设置坐标轴名称

为坐标轴指定名称。 x 轴是年度,y 轴是高温天数

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns)
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도") # <-- 添加!
plt.ylabel("폭염일수") # <-- 添加!
Python 数据可视化入门 5 - 数据可视化-10

5) 设置轴间隔

即便如此,我仍觉得坐标间隔很不错。

我们直接跳过这一步。

6) 更改图表样式

希望图表样式在黑白情况下也能清晰区分。由于无法一次性设置样式,所以通过for 循环遍历数据列来指定样式

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"] # <-- 添加!
for i in range(len(y.columns)): # <-- 添加!
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
Python 数据可视化入门 5 - 数据可视化-11

4. 后期处理

若有不满意之处,稍加修改。

看图表时,我希望有一些虚线以便更清晰地查看值。

在谷歌中搜索“matplotlib grid”

Python 数据可视化入门 5 - 数据可视化-12

我们心爱的维基文档排在最前面。

进去看看吧。

Python 数据可视化入门 5 - 数据可视化-13

轻轻将内容复制,粘贴到我的代码中

当然,可以根据需要进行更改。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
plt.grid(linestyle="--") # <-- 添加!
Python 数据可视化入门 5 - 数据可视化-14

这样我就满意了。

但为什么从 2008 年开始……?

好像太长了。

减少输出年份并更改 x 轴。

x = hot.iloc[6:,0] # <-- 添加!
y = hot.iloc[6:,[1,3,4]] # <-- 添加!
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.grid(linestyle="--")
plt.legend()
plt.title("시도별 폭염일수")
plt.xlabel("연도")
plt.ylabel("폭염일수")
plt.xticks(x) # <-- 添加!

这样一来,最近 10 年的首尔、大田、大邱高温天数图表完成了。

Python 数据可视化入门 5 - 数据可视化-15

可以用于考试问题或提出所需结论时使用。

5. 总结

这次我们使用高温天数数据进行了简单的可视化

下一篇文章中,我们将解决一个相同图表的练习问题

관련 글

学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
学校事务自动化——利用 AI 检查学生综合素质评价(生记簿)科目别“细部能力及特长事项”
如果要在学校工作里选出一项最无意义、最辛苦、最无聊的,我会选生记簿检查。在初中,学生综合素质评价(生活记录簿)并不那么重要,但在高中它与升学直接相关,因此极其重要。问题在于,这样的生记簿检查最终找的无非就是简单的错别字、禁止填写用语、拼写等。这篇文章就是从这样的疑问开始的。现在这种简单检查,是不是已...
从零构建中学习 LLM 第7章读书心得与挑战回顾
从零构建中学习 LLM 第7章读书心得与挑战回顾
第7章的内容是让模型遵循指令进行微调的过程。也就是让它针对某个问题给出我们期望的回答。果然,最需要的还是数据。1. 指令微调步骤这里的核心是准备好问答数据集,用作输入-输出对来进行训练。这就叫做提示(prompt)风格。其他部分就像之前的流程一样,对内容进行分词(tokenize)、训练和评估,过程...
从零开始构建中学习 LLM 第 6 章读后感
从零开始构建中学习 LLM 第 6 章读后感
第 6 章是为分类进行微调。作为例子给出的任务是构建垃圾邮件分类器。垃圾邮件分类器需要判断一封邮件是不是垃圾邮件,因此输出结果要是类似 0、1 这样的值。1. 微调的顺序微调的过程和训练模型的过程很相似。准备数据集,加载权重值,然后进行训练和评估。稍微不同的一点是,会有一个把输出层映射到 0(非垃圾...
从零开始构建中学习 LLM 第5章读书后记
从零开始构建中学习 LLM 第5章读书后记
今天是12月14日。其实挑战期已经过去整整两周了,但也不能因此就放弃写后记。像这样留下的 TIL(Today I Learned),以后都会变成自己的血和肉。这次打算比起代码本身,更专注在“意义”上来写一写。1. 模型的损失计算这一部分讲的是,在构建好 GPT 模型之后,用什么方式来计算损失。GPT...
从零开始动手实现 LLM 第4章读书心得
从零开始动手实现 LLM 第4章读书心得
今天是11月26日,如果每天读一章并看完的话,这次挑战就算成功。在老大和老二的各种干扰下,不知道能不能做到。1. Dummy Transformer在实现 GPT 模型的过程中,看到是从 PyTorch 里拿来一个 Transformer 的 dummy 模块用的。一查才发现,在 PyTorch 的...
通过从头构建学习的LLM第3章读后感
通过从头构建学习的LLM第3章读后感
我在MacBook上泼了一大杯水后,崩溃了,浪费了大约3-4天。现在回想起来,反正MacBook已经坏了,应该想着送修,干点别的事情。无论如何,虽然有点晚了,但我觉得必须坚持到底,所以留下了第3章的读后感。1. 注意力机制第3章...

댓글을 불러오는 중...