翼度科技»论坛 编程开发 python 查看内容

【matplotlib 实战】--折线图

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
折线图是一种用于可视化数据变化趋势的图表,它可以用于表示任何数值随着时间或类别的变化。
折线图由折线段和折线交点组成,折线段表示数值随时间或类别的变化趋势,折线交点表示数据的转折点。
折线图的方向表示数据的变化方向,即正变化还是负变化,折线的斜率表示数据的变化程度。
1. 主要元素

折线图主要由以下四个元素组成:

  • 数据点:折线图中的每个数据点都代表着一个时间点或一个数值。
  • 折线:折线图中的线条代表着数据的变化趋势。
  • X轴:一般是有序变量,表示数据点的变化区间。
  • Y轴:数据点在不同时刻的值。

2. 适用的场景

折线图适用于以下分析场景:

  • 趋势分析:折线图可以用于展示数据的增长、下降、波动等趋势,帮助分析人员了解数据的变化趋势。
  • 问题诊断:折线图可以用于数据异常检测,帮助分析人员快速发现数据的异常情况。
3. 不适用的场景

折线图不适用于以下分析场景:

  • 数据分类和分组:折线图不适用于数据分类和分组分析,因为折线图主要用于展示数据的变化趋势,而不是数据的分类和分组情况。
  • 数据回归分析:折线图不适用于数据回归分析,因为回归分析需要建立在数据样本中的线性关系,而折线图主要用于展示数据的变化趋势,不能很好地反映数据的线性关系。
4. 分析实战

4.1. 数据来源

数据来源国家统计局公开数据,已经整理好的csv文件在:https://databook.top/nation/A03
本次分析使用其中的 A0301.csv 文件(总人口数据)。
下面的文件路径 fp 要换成自己实际的文件路径。
  1. import pandas as pd
  2. fp = "d:/share/A0301.csv"
  3. df = pd.read_csv(fp)
  4. df
复制代码

4.2. 数据清理

首先看看 zbCN 字段中有多少种不同的人口统计类别。
  1. df.groupby(by="zbCN").count()
复制代码

这个数据集中一共有5种不同维度的人口统计:

  • 年末总人口
  • 男性人口
  • 女性人口
  • 城镇人口
  • 乡村人口
按照类别,将它们分离成5个不同的数据集,为了绘制折线图做准备。
  1. groups = df.groupby(by="zbCN")
  2. dict_group = {}
  3. for g in groups:
  4.     dict_group[g[0]] = g[1]
  5. for k, v in dict_group.items():
  6.     print("key = {}, value type = {}".format(k, type(v)))
复制代码

groupby 函数按照 by 参数指定的字段将数据集分组,每个group是一个二元的元组。
第一个元素是用来分组的字段值,第二个元素是分组之后的数据集。
4.3. 分析结果可视化

拆分好数据集之后,最就是可视化展示。
首先封装一个函数,用来显示2个数据:
(直接使用上面分割好的数据集dict_group)
  1. import pandas as pd
  2. import matplotlib
  3. import matplotlib.pyplot as plt
  4. from matplotlib.ticker import MultipleLocator
  5. %matplotlib inline
  6. #为了显示中文
  7. matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
  8. matplotlib.rcParams["axes.unicode_minus"] = False
  9. #根据key显示两个数据集
  10. def draw(key1, key2):
  11.     with plt.style.context("seaborn-v0_8"):
  12.         fig = plt.figure()
  13.         ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  14.         ax.xaxis.set_major_locator(MultipleLocator(4))
  15.         ax.xaxis.set_minor_locator(MultipleLocator(2))
  16.         data = dict_group[key1]
  17.         ax.plot(data["sjCN"], data["value"], "b--o", label=key1)
  18.         data = dict_group[key2]
  19.         ax.plot(data["sjCN"], data["value"], "g:d", label=key2)
  20.         ax.legend()
复制代码
首先看下男女人口的变化趋势:
  1. key1 = "女性人口(万人)"
  2. key2 = "男性人口(万人)"
  3. #男性人口和女性人口的变化趋势
  4. dict_group[key1] = dict_group[key1].sort_values("sj")
  5. dict_group[key2] = dict_group[key2].sort_values("sj")
  6. draw(key1, key2)
复制代码

看这个趋势变化,男女人口的差距长期都在几千万上下,所以找不到女朋友也许不是你的责任 : )
再看看城镇和乡村的人口变化。
  1. key1 = "乡村人口(万人)"
  2. key2 = "城镇人口(万人)"
  3. #乡村人口和城镇人口的变化趋势
  4. dict_group[key1] = dict_group[key1].sort_values("sj")
  5. dict_group[key2] = dict_group[key2].sort_values("sj")
  6. draw(key1, key2)
复制代码

从图中可以看出,1994年左右,乡村人口开始进入城镇;
2010年左右,城镇人口开始超越乡村人口,且人口差距越来越大。
折线图最适合的场景就是展示这类有趋势变化的数据。

来源:https://www.cnblogs.com/wang_yb/p/17735068.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具