当前位置:   article > 正文

Python08_数据可视化

Python08_数据可视化

声明

文章是基于文章是基于:哔哩哔哩上的《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》视频教程所做的学习笔记,仅为学习使用!!如有侵权,联系删除

目录

 0、Matplotlib

(一)绘制简单图形

(二)pyplot的功能

(三)显示图像

​编辑

一、折线图        

(一)Json

1、Json数据转化

2、Python数据和Json数据的相互转化

(二)pyecharts模块介绍

(三)pyecharts快速入门

1、基础折线图

2、配置选项

(四)数据处理

(五)创建折线图

二、地图可视化

(一)基础地图

1、视觉映射器

(二)全国疫情地图

1、获取数据

2、处理数据

3、创建地图

4、设置全局配置

5、绘制地图

(三)河南省级疫情地图

1、读取文件

2、获取河南省数据

3、处理数据

4、构建地图

5、设置全局选项

6、绘图

三、动态柱状图

(一)基础柱状图

1、通过Bar构建基础柱状图

2、反转x轴和y轴

3、数值标签显示在图标右侧

(二)基础时间线柱状图

1、Timeline() -- 时间线

2、根据时间线创建对应数量的柱状图

3、创建时间线

4、设置自动播放

5、时间线设置主题

(三)GDP动态柱状图绘制

1、列表的sort方法

2、需求分析

3、获取数据

4、读取数据

5、处理数据


0、Matplotlib

        在深度学习的实验中,图形的绘制数据的可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

(一)绘制简单图形

        可以使用 matplotlib 的 pyplot 模块绘制图形。看一个绘制sin函数曲线的例子。

  1. import numpy as np
  2. import matplotlib
  3. import matplotlib.pyplot as plt
  4. matplotlib.use('TkAgg') # 修改 backend 配置
  5. # 生成数据
  6. x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据。即 [0, 0.1, 0.2,... 5.8, 5.9]
  7. y = np.sin(x) # 应用NumPy的sin函数
  8. # 绘制图像
  9. plt.plot(x, y) # 将 x 、y 的数据传给 plt.plot 方法,然后绘制图形
  10. plt.show() # 显示图形

         这里使用NumPy的 arange 方法生成了 [0, 0.1, 0.2, ..., 5.8, 5.9] 的数据,将其设为 x 。对 x 的各个元素,应用NumPy的sin函数 np.sin() ,将 x 、y 的数据传给 plt.plot 方法,然后绘制图形。最后,通过 plt.show() 显示图形

(二)pyplot的功能

        在刚才的sin函数的图形中,我们尝试追加cos函数的图形,并尝试使用pyplot 的添加标题x轴标签名等其他功能。

  1. import numpy as np
  2. import matplotlib
  3. import matplotlib.pyplot as plt
  4. matplotlib.use('TkAgg')
  5. # 生成数据
  6. x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
  7. # 计算正弦 和 余弦值
  8. y1 = np.sin(x)
  9. y2 = np.cos(x)
  10. # 绘制图像
  11. # label参数指定了每条曲线的标签,将用于图例
  12. plt.plot(x, y1, label="sin")
  13. plt.plot(x, y2, linestyle = "--", label = "cos")# 指定线型用虚线绘制
  14. plt.xlabel("x")# x轴标签
  15. plt.ylabel("y")# y轴标签
  16. plt.title("sin & cos")# 标题
  17. plt.legend()# 显示图例
  18. plt.show()

(三)显示图像

        pyplot 中还提供了用于显示图像的方法 imshow() 。另外,可以使用matplotlib.image 模块的 imread() 方法读入图像。

  1. import matplotlib
  2. import matplotlib.pyplot as plt
  3. from matplotlib.image import imread
  4. matplotlib.use('TkAgg')
  5. # python.png存储在python文件的同目录下
  6. img = imread("python.png") # 用imread函数读取名为"python.png"的图片,将图片数据保存在变量 img中
  7. plt.imshow(img) # 使用imshow函数显示图片,这个函数会在当前图形中显示图像
  8. plt.show()


        使用技术:Echarts是个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而Python 是门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时pyecharts诞生了。

一、折线图        

(一)Json

  • JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据

  • JSON本质上是一个带有特定格式的字符串

  • JSON就是一种在各个编程语言中流通的数据格式,负责不同编程语言中数据传递交互

  • JSON就是一种非常良好的中转数据格式

1、Json数据转化

  1.  # json数据的格式:
  2.  ​
  3.  # 类似于字典
  4.  {"name":"admin", "age":18}
  5.  ​
  6.  # 也可是
  7.  # 类似于列表
  8.  [{"name":"admin", "age":18}, {"name":"root", "age":16}, {"name":"张三", "age":24}]

2、Python数据和Json数据的相互转化

  1. # 导入json模块
  2.  import json
  3.  ​
  4.  # 准备符合格式json格式要求的python数据
  5.  # 准备列表,列表内每一个元素都是字典
  6.  data = [ {"name":"老王", "age":16} , {"name":"张三", "age":20} ]
  7.  ​
  8.  # 通过json.dumps(data)方法把python数据转化为了json数据
  9.  # 字典 、列表 式子数据,转化成json,本质上转化结果是字符串
  10.  # 如果有中文可以带上ensure_ascii = False来确保中文正常转换
  11.  json_Str = json.dumps(data, ensure_ascii = False)
  12.  ​
  13.  # 准备字典,将字典转换为JSON
  14.  # 字典 、列表 式子数据,转化成json,本质上转换结果是字符串
  15.  d = {"name":"周杰伦", "addr":"台北"}
  16.  # # 如果有中文可以带上ensure_ascii = False来确保中文正常转换
  17.  json_str = json.dumps(d, ensure_ascii = False)
  18.  ​
  19.  # 将JSON字符串转换为python数据类型,[{k:v, k:v}, {k:v, k:v}]
  20.  s = "[ {"name":"张三", "age":11}, {"name":"王大锤", "age":13} ]"
  21.  j = json.load(s)
  22.  print(type(j)) # <class 'list'>
  23.  print(j) # [ {'name':'张三', 'age':11}, {'name':'王大锤', 'age':13}]
  24.  ​
  25.  # 将JSON字符串转化为python数据类型,{k:v, k:v}
  26.  s = "{"name":"周杰伦", "addr":"台北"}"
  27.  d = json.load(s)
  28.  print(type(d)) # <class 'dict'>
  29.  print(d)# {'name':'周杰伦', 'addr':'台北'}

(二)pyecharts模块介绍

  • 如果想要做出数据可视化效果图, 可以借助pyecharts模块来完成

  • 本体是Echarts框架,由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可; Python是门富有表达力的语言,很适合用于数据处理.。当数据分析遇上数据可视化时pyecharts 诞生了

  • 官方示例:Document

  • 安装PyEcharts模块

(三)pyecharts快速入门

1、基础折线图

  1.  """
  2.  演示pyecharts的基础折线图
  3.  """
  4.  ​
  5.  # 导包
  6.  # pyecharts这个包中的charts模块下的Line功能对象
  7.  from pyecharts.charts import Line
  8.  ​
  9.  # 创建一个折线图对象
  10.  # 本质得到一个空的二维坐标系
  11.  line = Line()
  12.  # 给折线图对象添加x轴的数据
  13.  line.add_xaxis(["中国", "美国", "英国"])
  14.  # 给折线图对象添加y轴的数据 和 图名称
  15.  line.add_yaxis("GDP数据", [30, 20, 10])
  16.  # 通过render方法,将代码生成为图像
  17.  line.render()

2、配置选项

  • 全局配置选项(通用设置)

    • set_global_opts方法来进行配置

      1. """
      2.  演示pyecharts的基础折线图
      3.  """
      4.  ​
      5.  # 导包
      6.  from pyecharts.charts import Line
      7.  # 所有可配置的选项都在options里
      8.  from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
      9.  ​
      10.  # 创建一个折线图对象
      11.  line = Line()
      12.  # 给折线图对象添加x轴的数据
      13.  line.add_xaxis(["中国", "美国", "英国"])
      14.  # 给折线图对象添加y轴的数据
      15.  line.add_yaxis("GDP", [30, 20, 10])
      16.  ​
      17.  # 设置全局配置项set_global_opts来设置
      18.  line.set_global_opts(
      19.      # 设置标题,关键字传参             pos:position 位置
      20.      title_opts = TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"),
      21.      # 控制图例
      22.      legend_opts = LegendOpts(is_show = True),
      23.      # 控制工具箱
      24.      toolbox_opts = ToolboxOpts(is_show = True),
      25.      # 视觉映射:鼠标悬停在图上的点,会提供相关信息
      26.      visualmap_opts = VisualMapOpts(is_show = True) # 视觉映射:鼠标悬浮在图上的点会提示点的信息
      27.  )
      28.  ​
      29.  # 通过render方法,将代码生成为图像
      30.  line.render()

(四)数据处理

通过json模块对数据进行处理

  • 原始数据格式:

  • 导入模块:

      1.  # 导入json模块
      2.  import json
  • 对数据进行整理,让数据符合json格式

      1. # 处理数据
      2.  # 文件对象要记得关闭
      3.  ​
      4.  # 读取数据
      5.  file_usa = open("E:/Heima_Python_Learning/09_折线图/美国.txt", "r", encoding = "UTF-8")
      6.  usa_data = file_usa.read() # 美国数据的全部内容
      7.  # 去掉不符合JSON规范的开头 jsonp_1629344292311_69436(
      8.  # 将更改结果赋值回去,等同于更新
      9.  usa_data = usa_data.replace("jsonp_1629344292311_69436(", "")
      10.  # 去掉不符合JSON规范的结尾 ); 序列的切片 从正数第0个一直到倒数第二个,且不包括结尾,步长为1
      11.  # 注意切片的格式,可以当做经验积累
      12.  usa_data = usa_data[:-2]
      13.  # JSON转Python字典
      14.  usa_dict = json.loads(usa_data)
      15.  # 获取trend key
      16.  trend_data = usa_dict["data"][0]["trend"]
      17.  # 获取日期数据,用于x轴,取2020年(到314下标结束)
      18.  x_data = trend_data["updateDate"][:314]
      19.  # 获取确诊数据,用于y轴,取2020年(到314下表结束)
      20.  y_data = trend_data["list"][0]["data"][:314]

(五)创建折线图

  • 导入模块

      1.  # 导入折线图模块
      2.  from pyecharts.charts import Line
      3.  # 导入配置选项模块
      4.  from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
  • 折线图相关配置项

    • 创建折线图

        1.  # 创建折线图
        2.  l = Line(init_opts = opts.InitOpts(width = "1600px", height="800px"))
      • 这里的Line()是构建类对象

    • 添加数据

        1. # 添加x轴数据
        2.  line.add_xaxis(usa_x_data) # 3个国家x轴数据(日期)是公用的,任选其一使用即可
        3.  ​
        4.  # 添加y轴数据
        5.  line.add_yaxis("美国确诊人数", usa_y_data)
        6.  line.add_yaxis("日本确诊人数", jp_y_data)
        7.  line.add_yaxis("印度确诊人数", in_y_data)
    • .add_yaxis相关配置选项

  • 全局配置选项

    • .set_global_opts全局配置选项

      1. # 设置全局配置项set_global_opts来设置
      2.  line.set_global_opts(
      3.      # 关键字传参          pos:position 位置                            距离底部1%,即在最底部
      4.      title_opts = TitleOpts(title="2020年美日印三国确认人数对比折线图", pos_left="center", pos_bottom="1%"),
      5.      legend_opts = LegendOpts(is_show = True),
      6.      toolbox_opts = ToolboxOpts(is_show = True),
      7.      visualmap_opts = VisualMapOpts(is_show = True) # 视觉映射:鼠标悬浮在图上的点会提示点的信息
      8.  )

二、地图可视化

  • 掌握使用pyecharts构建基础的全国地图可视化图表

(一)基础地图

  1. from pyecharts.charts import Map
  2.  ​
  3.  # 准备地图对象
  4.  map = Map()
  5.  # 准备数据
  6.  data = [
  7.     ("北京", 99),
  8.     ("上海", 199),
  9.     ("湖南", 299),
  10.     ("台湾", 399),
  11.     ("广东", 499),
  12.  ]
  13.  # 添加数据,默认显示中国地图
  14.  map.add("测试地图", data, "china")
  15.  # 绘图
  16.  map.render()

1、视觉映射器

  1.  # 设置全局选项
  2.  china_map.set_global_opts(
  3.      visualmap_opts = VisualMapOpts(
  4.          is_show = True, # 图示 + 地图颜色
  5.          is_piecewise=True, # 开启手动校准
  6.          pieces = [ # 具体的校准范围 列表
  7.              # 手动指定分成3段 字典
  8.             {"min":1, "max":9, "label":"1-9人", "color":"#CCFFFF"},
  9.             {"min":10, "max":99, "label":"10-99人", "color":"#FF6666"},
  10.             {"min":100, "max":500, "label":"100-500人", "color":"#990033"}
  11.         ]
  12.     )
  13.  )

(二)全国疫情地图

1、获取数据

  1.  file_yq = open("E:/Heima_Python_Learning/10_地图/疫情.txt", "r", encoding = "UTF-8")
  2.  data = file_yq.read() # 全部数据
  3.  # 关闭文件
  4.  file_yq.close()

2、处理数据

  1. import json
  2.  # 取出各省数据
  3.  # 将字符串json转换为python的字典
  4.  data_dict = json.loads(data) # 基础数据字典
  5.  # 从字典中取出省份的数据
  6.  province_data_list = data_dict["areaTree"][0]["children"]
  7.  # 组装每个省份和确诊人数为元组,并各个省的数据都封装入列表内
  8.  data_list = [] # 绘图所需要的数据列表
  9.  for province_data in province_data_list:
  10.      province_name = province_data["name"]   # 省份名称
  11.      province_people = province_data["total"]["confirm"] # 确诊人数
  12.      data_list.append((province_name, province_people)) # 变成元组添加到数据列表中

3、创建地图

  1.  # 读取数据文件
  2.  from pyecharts.charts import Map
  3.  ​
  4.  # 创建地图对象
  5.  china_map = Map()
  6.  # 添加数据
  7.  # 第一个参数表示地图的顶部显示,legend 的图例筛选,解释标签
  8.  china_map.add("各省份确诊人数", data_list, "china")

4、设置全局配置

  1. from pyecharts.options import *
  2.  ​
  3.  # 设置全局配置,定制分段的视觉映射
  4.  china_map.set_global_opts(
  5.      # title表示地图的标题
  6.      title_opts=TitleOpts(title = "全国疫情地图"),
  7.      # 视觉映射配置选项
  8.      visualmap_opts = VisualMapOpts(
  9.          is_show=True, # 是否显示
  10.          is_piecewise=True, # 是否分段
  11.          pieces = [
  12.             {"min": 1, "max": 99, "lable": "1-99人", "color": "#CCFFFF"},
  13.             {"min": 100, "max": 999, "lable": "100-999人", "color": "#FFFFF99"},
  14.             {"min": 1000, "max": 4999, "lable": "1000-4999人", "color": "#FF9966"},
  15.             {"min": 5000, "max": 9999, "lable": "5000-9999人", "color": "#FF6666"},
  16.             {"min": 10000, "max": 99999, "lable": "10000-99999", "color": "#CC3333"},
  17.             {"min": 100000, "lable": "10000-99999", "color": "#990033"}
  18.         ]
  19.     )
  20.  )

5、绘制地图

  1.  # 绘图
  2.  # 指定生成的网页名称
  3.  china_map.render("全国疫情地图.html")

(三)河南省级疫情地图

  • 河南省为例

1、读取文件

  1.  file_henan = open("E:/Heima_Python_Learning/10_地图/疫情.txt", "r", encoding = "UTF-8")
  2.  data = file_henan.read() # 全部数据
  3.  # 关闭文件
  4.  file_henan.close()

2、获取河南省数据

  1.  import json
  2.  ​
  3.  # json数据转化为python字典
  4.  data_dict = json.loads(data)
  5.  # 取到河南省数据
  6.  cities_data = data_dict["areaTree"][0]["children"][3]["children"]

3、处理数据

  1.  data_list = []
  2.  for city_data in cities_data:
  3.   city_name = city_data["name"] + "市"
  4.   city_people = city_data["total"]["confirm"]
  5.   data_list.append((city_name, city_people))

4、构建地图

  1.  # 读取数据文件
  2.  from pyecharts.charts import Map
  3.  ​
  4.  hn_map = Map()
  5.  map.add("河南省疫情分布",data_list,"河南")

5、设置全局选项

  1.  from pyecharts.options import *
  2.  ​
  3.  # 设置全局配置,定制分段的视觉映射
  4.  hn_map.set_global_opts(
  5.      # title表示地图的标题
  6.      title_opts=TitleOpts(title = "河南省疫情地图"),
  7.      # 视觉映射配置选项
  8.      visualmap_opts = VisualMapOpts(
  9.          is_show=True, # 是否显示
  10.          is_piecewise=True, # 是否分段
  11.          pieces = [
  12.             {"min": 1, "max": 99, "lable": "1-99人", "color": "#CCFFFF"},
  13.             {"min": 100, "max": 999, "lable": "100-999人", "color": "#FFFFF99"},
  14.             {"min": 1000, "max": 4999, "lable": "1000-4999人", "color": "#FF9966"},
  15.             {"min": 5000, "max": 9999, "lable": "5000-9999人", "color": "#FF6666"},
  16.             {"min": 10000, "max": 99999, "lable": "10000-99999", "color": "#CC3333"},
  17.             {"min": 100000, "lable": "10000-99999", "color": "#990033"}
  18.         ]
  19.     )
  20.  )

6、绘图

  1.  # 绘图
  2.  # 指定生成的网页名称
  3.  china_map.render("河南省疫情地图.html")

三、动态柱状图

(一)基础柱状图

  • 构建一个基础的柱状图并能够反转x和y轴

1、通过Bar构建基础柱状图

  1.  from pyecharts.charts import Bar
  2.  # 使用Bar构建基础柱状图
  3.  bar = Bar()
  4.  # 添加x轴的数据
  5.  bar.add_xaxis(["中国", "美国", "英国"])
  6.  # 添加y轴数据
  7.  # 第一个参数是顶部提示框
  8.  bar.add_yaxis("GDP", [30, 20, 10])
  9.  # 绘图
  10.  bar.render("基础柱状图.html")

2、反转x轴和y轴

  1.  # 反转x和y轴
  2.  bar.reversal_axis()
  3.  # 绘图
  4.  bar.render("基础柱状图.html")

3、数值标签显示在图标右侧

  1.  from pyecharts.options import LabelOpts
  2.  ​
  3.  # 添加y轴数据
  4.  # label_opts=LabelOpts(position = "right",关键字参数,设置数值标签在图右侧
  5.  bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position = "right"))

(二)基础时间线柱状图

1、Timeline() -- 时间线

  • 如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上每一个点就是一个图表对象

  • 一个时刻对应一个图表,在x轴上提供多个点(时刻),很多个时刻的图表连续起来,就像是动画的帧数一样,形成动态的效果

2、根据时间线创建对应数量的柱状图

  1.  from pyecharts.charts import Bar
  2.  ​
  3.  bar1 = Bar()
  4.  bar1.add_xaxis(["中国", "美国", "英国"])
  5.  bar1.add_yaxis("GDP", [30, 30, 20], label_opts=LabelOpts(position="right"))
  6.  bar1.reversal_axis()
  7.  ​
  8.  bar2 = Bar()
  9.  bar2.add_xaxis(["中国", "美国", "英国"])
  10.  bar2.add_yaxis("GDP", [50, 50, 50], label_opts=LabelOpts(position="right"))
  11.  bar2.reversal_axis()
  12.  ​
  13.  bar3 = Bar()
  14.  bar3.add_xaxis(["中国", "美国", "英国"])
  15.  bar3.add_yaxis("GDP", [70, 60, 80], label_opts=LabelOpts(position="right"))
  16.  bar3.reversal_axis()

3、创建时间线

  1. from pyrcharts.charts import Timeline
  2.  ​
  3.  # 构建时间线对象
  4.  timeline = Timeline()
  5.  # 在时间线内添加柱状图对象
  6.  timeline.add(bar1,"点1")
  7.  timeline.add(bar2,"点2")
  8.  timeline.add(bar3,"点3")
  9.  # 绘图是用时间线对象绘图,而不是bar对象
  10.  timeline.render("基础时间线柱状图.html")

4、设置自动播放

  1.  # 自动播放设置
  2.  timeline.add_schema(
  3.      play_interval = 1000, # 自动播放的时间间隔,单位毫秒
  4.      is_timeline_show = True,# 是否在自动播放的时候,显示时间线
  5.      is_auto_play = True, # 是否自动播放
  6.      is_loop_play = True # 是否循环自动播放
  7.  )

5、时间线设置主题

(三)GDP动态柱状图绘制

1、列表的sort方法

  • 列表.sort(key=选择排序依据的函数, reverse=True|False)

    • 参数key是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据

    • 参数reverse是否反转排序结果,True表示降序,False表示升序

    1. # 排序:基于带名函数
    2. # 排序的依据是内层列表的第二个元素数字
    3.  ​
    4. # 准备列表
    5. my_list = [ ["a", 33], ["b", 66], ["c", 11] ]
    6.  ​
    7. # 定义排序方法
    8. def choose_sort_key(element):
    9.     # 列表的每一个元素传入,函数指定按照传入元素的下标1(也就是数字)来排序
    10.     return element[1]
    11.  ​
    12. # true表示实现降序排序
    13. # 将元素传入choose_sort_key函数中,用来确定按照谁来排序
    14. # 关键字传参,因为不是函数的第一个参数
    15. my_list.sort(key=choose_sort_key, reverse=True)
    16. print(my_list)
    1.  # 准备列表
    2.  my_list = [ ["a", 33], ["b", 66], ["c", 11] ]
    3.  ​
    4.  # 排序:基于lambda匿名函数
    5.  # lambda 函数形参: 函数体
    6.  my_list.sort(key=lambda element: element[1] , reverse=True)
    7.  print(my_list)

2、需求分析

  • GDP数据处理单位为亿级

  • 有时间轴,按照年份为时间轴的点

  • x轴和y轴反转,同时每一年的数据只要前8名国家

  • 有标题,标题的年份会动态更改

  • 设置了主题为LIGHT

3、获取数据

  • .csv:内存逗号分隔数据。year,GDP,rate 1960,瑞士,9522746719

  • 读取数据,删除第一条表头

      1.  # 读取数据
      2.  # 使用记事本打开csv文件后发现格式编码为ANSI,表示的是windows系统的默认编码格式,表示跟随操作系统语言,win10中文,就是GB2312
      3.  f = open("E:/Heima_Python_Learning/11_柱状图/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
      4.  data_lines = f.readlines()
      5.  ​
      6.  # 关闭文件
      7.  f.close()
      8.  ​
      9.  # 删除第一条表头数据
      10.  # readlines()方法返回的是一个列表对象
      11.  data_lines.pop(0)
      12.  # 等同于 data_lines.del[0]

4、读取数据

  • 将得到的数据转化为字典存储

  • { 年份: [ [国家, gdp], [国家,gdp], ...... ], 年份: [ [国家, gdp], [国家,gdp], ...... ], ...... }

    1.  # 将数据转换为字典存储,格式为:
    2.  # Key是年份【字符串】,Value是对应年份下,世界各个国家的国家名字,gdp的值【列表】
    3.  # { 年份 :[   [国家,gdp] , [国家,gdp], [国家,jdp]..... ] , 年份: [ [国家,gdp], [国家, gdp],....] }
    4.  # 先定义一个字典对象作为后续存储使用
    5.  data_dict = {}
    6.  for line in data_lines:
    7.      year = int(line.split(",")[0])  # 年份
    8.      country = line.split(",")[1]    # 国家
    9.      # gdp数据某些比较大的使用了科学计数法的,通过float将其转换成正常的浮点数
    10.      gdp = float(line.split(",")[2]) # gdp数据
    11.  ​
    12.      # 使用年份作为字典的key,其余的国家+GDP数据放到 列表 里
    13.      # 如果是第一次执行的话,字典为空,需要构建一个list放入;如果不是空表明for循环不是第一次进入,取出list然后用append添加即可
    14.      # 如何判断字典里有没有指定的key?
    15.      # 若获取字典中不存在的key,则会报出KeyError,所以通过异常抛出
    16.      try:
    17.          # 没有报出异常说明已经有年份数据,说明list已经存在
    18.          # 调用list的append方法来进行追加,实现嵌套
    19.          data_dict[year].append([country, gdp])
    20.      except KeyError:
    21.          # 如果不存在则构建一个空的列表
    22.          data_dict[year] = []
    23.          data_dict[year].append([country, gdp])

5、处理数据

  • 对年份排序

      1.  # 从1960到2019大约有59个柱状图,通过for循环年份,从小到大绘图
      2.  # 原始数据中的年份可能是乱序,所以取出year来进行排序
      3.  # 排序年份
      4.  sorted_year_list = sorted(data_dict.keys())
  • 对国家的gdp排序

      1.  for year in sorted_year_list:
      2.      # 从大到小排序
      3.      # lambd匿名函数决定排序的依据,用每个元素中的下标1也就是gdp来进行排序
      4.      data_dict[year].sort(key=lambda element: element[1], reverse=True)
      5.      # 取出本年份前8名的国家
      6.      year_data = data_dict[year][0:8] # 列表,有序容器,包含切片功能
      7.      x_data = []
      8.      y_data = []
      9.      for country_gdp in year_data:
      10.          # x轴添加国家数据
      11.          x_data.append(country_gdp[0])
      12.          # y轴添加gdp数据
      13.          # 数据单位是以“亿”为单位
      14.          y_data.append(country_gdp[1] / 100000000)
  • 构建柱状图

      1. # 构建柱状图
      2.  bar = Bar()
      3.  ​
      4.  # 当前创建出的图像是将gdp从小打大,上到下排序
      5.  # x轴和y轴排序颠倒,就可以实现大到小排序绘图
      6.  # x轴代表着国家
      7.  x_data.reverse()
      8.  # y轴代表着gdp数据
      9.  y_data.reverse()
      10.  bar.add_xaxis(x_data)
      11.  # 数值标签在右侧
      12.  bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
      13.  # 反转x轴和y轴
      14.  bar.reversal_axis()
      15.  # 设置每一年的图标的标题
      16.  bar.set_global_opts(
      17.      title_opts=TitleOpts(title=f"{year}年全球前8GDP数据")
      18.  )
  • 创建时间线

      1.  # 穿创建时间线对象
      2.  timeline = Timeline(
      3.     {"theme": ThemeType.LIGHT}
      4.  )
      5.  ​
      6.   # 添加时间线每个值名字,参数类型是字符串,时间线就是以年份为基准
      7.    timeline.add(bar, str(year))
      8.  # for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
      9.  # 在for中,将每一年的bar对象添加到时间线中
      10.  ​
      11.  # 设置时间线自动播放
      12.  timeline.add_schema(
      13.      play_interval = 1000, # 自动播放的时间间隔,单位毫秒
      14.      is_timeline_show = True,# 是否在自动播放的时候,显示时间线
      15.      is_auto_play = True, # 是否自动播放
      16.      is_loop_play = True # 是否循环自动播放
      17.  )
  • 绘图

      1. # 绘图
      2. timeline.render("1960-2019全球GDP前8国家.html")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/111541
推荐阅读
相关标签
  

闽ICP备14008679号