Python--GDP动态柱状图开发

实现思路

  1. 数据准备:首先需要有数据源,本例中为CSV文件,包含了1960-2019年全球GDP数据。     

  2. 数据集链接:https://pan.quark.cn/s/88cf257eba13

  3. 数据读取与处理:使用Python的文件操作读取CSV文件,并将数据转换为字典格式,便于后续处理。

  4. 创建时间线:使用pyecharts的Timeline对象来管理多个时间点的数据,实现动态展示。

  5. 构建柱状图:对于每个时间点,创建一个Bar对象,添加x轴和y轴数据,并设置标签显示位置。

  6. 排序与筛选:对每个年份的数据进行排序,并筛选出前8名国家的数据。

  7. 反转坐标轴:通过reversal_axis方法反转x轴和y轴,以适应数据展示需求。

  8. 设置图表选项:为每个柱状图设置全局选项,如标题等。

  9. 添加到时间线:将每个年份的柱状图添加到时间线对象中。

  10. 设置时间线选项:配置时间线的行为,如自动播放、循环播放等。

  11. 渲染图表:最后将时间线对象渲染为HTML文件,供浏览器展示。

代码解释

  • Bar():创建柱状图对象。
  • add_xaxis()add_yaxis():向柱状图中添加x轴和y轴的数据。
  • reversal_axis():反转柱状图的x轴和y轴。
  • LabelOpts(position="right"):设置数值标签显示在右侧。
  • Timeline():创建时间线对象,用于动态展示不同时间点的数据。
  • sorted():对字典的键进行排序,以便按年份顺序处理数据。
  • sort(key=lambda element: element[1], reverse=True):对列表进行排序,根据元素的第二个值(GDP)降序排列。
  • set_global_opts():设置全局配置选项,如标题等。
  • render():将图表渲染为HTML文件。

Python中语法难点的解释扩展

  1. 字典推导与异常处理:在构建data_dict时,使用try...except结构来处理可能的KeyError,即在字典中添加新键时如果键不存在则创建它。                                                                      

    try: data_dict[year].append([country, gdp]) 
    
    except KeyError: 
        data_dict[year] = [] 
        data_dict[year].append([country, gdp])

  2. lambda表达式:在排序时使用lambda表达式来指定排序的依据,这里根据GDP值进行排序。

    data_dict[year].sort(key=lambda element: element[1], reverse=True)
  3. 列表切片:使用列表切片来获取排序后的前8个国家的数据。

    year_data = data_dict[year][0:8]
  4. 文件操作:使用open()函数打开文件,并使用readlines()读取所有行,最后使用close()关闭文件。

    f = open("path_to_file", "r", encoding="GB2312")
    data_lines = f.readlines()
    f.close()
  5. 列表反转:在添加数据到柱状图之前,使用列表的reverse()方法反转x轴数据,以适应图表展示。

    x_data.reverse()
    y_data.reverse()
  6. 动态图表渲染:通过Timeline对象的add()方法动态地将多个图表添加到时间线中,并使用render()方法将整个时间线渲染为HTML文件。

    timeline.add(bar, str(year))
    timeline.render("output_file.html")

总代码

# 1. 通过Bar()构建一个柱状图对象
# 2. 和折线图一样,通过add_xaxis()和add_yaxis()添加x和y轴数据
# 3. 通过柱状图对象的:reversal_axis(),反转x和y轴
# 4. 通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示

# 创建时间线
# Timeline()-时间线
# 柱状图描述的是分类数据,回答的是每一个分类中『有多少?』这个问题. 这是柱状图的主要特点,同时柱状图很难动态的描述一个趋势性的数据. 这里pyecharts为我们提供了一种解决方案-时间线
# 如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个
# 一维的x轴,轴上每一个点就是一个图表对象

# 列表的sort方法
# 在前面我们学习过sorted函数,可以对数据容器进行排序。
# 在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。
# 我们补充学习列表的sort方法。
# 使用方式:
# 列表.sort(key=选择排序依据的函数, reverse=True|False)
# 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
# 参数reverse,是否反转排序结果,True表示降序,False表示升序

"""
演示第三个图表:GDP动态柱状图开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

# 读取数据
f = open("GDP动态柱状图数据集.csv", "r", encoding="GB2312")
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一条数据
data_lines.pop(0)
# 将数据转换为字典存储,格式为:
# { 年份: [ [国家, gdp], [国家,gdp], ......  ], 年份: [ [国家, gdp], [国家,gdp], ......  ], ...... }
# { 1960: [ [美国, 123], [中国,321], ......  ], 1961: [ [美国, 123], [中国,321], ......  ], ...... }
# 先定义一个字典对象
data_dict = {}
for line in data_lines:
    year = int(line.split(",")[0])      # 年份
    country = line.split(",")[1]        # 国家
    gdp = float(line.split(",")[2])     # gdp数据
    # 如何判断字典里面有没有指定的key呢?
    try:
        data_dict[year].append([country, gdp])
    except KeyError:
        data_dict[year] = []
        data_dict[year].append([country, gdp])

# print(data_dict[1960])
# 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT})
# 排序年份
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 取出本年份前8名的国家
    year_data = data_dict[year][0:8]
    x_data = []
    y_data = []
    for country_gdp in year_data:
        x_data.append(country_gdp[0])   # x轴添加国家
        y_data.append(country_gdp[1] / 100000000)   # y轴添加gdp数据

    # 构建柱状图
    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
    # 反转x轴和y轴
    bar.reversal_axis()
    # 设置每一年的图表的标题
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全球前8GDP数据")
    )
    timeline.add(bar, str(year))


# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
# 在for中,将每一年的bar对象添加到时间线中

# 设置时间线自动播放
timeline.add_schema(
    play_interval=1000,
    is_timeline_show=True,
    is_auto_play=True,
    is_loop_play=False
)
# 绘图
timeline.render("1960-2019全球GDP前8国家.html")

HTML 

HTML,全称为HyperText Markup Language(超文本标记语言),是一种用于创建网页和网页应用的标准标记语言。HTML文件由一系列的标签(tags)组成,这些标签定义了网页的结构和内容。

HTML文件的基本结构

一个基本的HTML文件通常包括以下几个部分:

  1. 文档类型声明(Document Type Declaration, DOCTYPE):告诉浏览器这个文件是HTML5文档。

    <!DOCTYPE html>
  2. HTML元素:是页面的主要容器。

    <html>
        <head>
        </head>
        <body>
        </body>
    </html>
  3. 头部<head>):包含了文档的元数据,比如文档的标题(<title>)和链接到CSS样式表或JavaScript文件的链接。

    <head>
        <title>页面标题</title>
    </head>
  4. 主体<body>):包含了网页的所有内容,比如文本、图片、链接、列表等。

    <body>
        <p>这是一个段落。</p>
    </body>

HTML标签

  • 开始标签:比如<p>,表示一个元素的开始。
  • 结束标签:比如</p>,表示一个元素的结束。
  • 属性:提供有关HTML元素的额外信息,比如<img src="image.jpg">中的src属性指定了图片的来源。

HTML元素类型

  • 块级元素(Block-level elements):通常用于较大结构的布局,比如<div><p><h1>-<h6>等。
  • 内联元素(Inline elements):用于行内布局,比如<span><a><img>等。

网页渲染过程

当浏览器加载一个HTML文件时,它会解析文件中的HTML标签,并根据这些标签构建一个DOM(Document Object Model)树。DOM树是一个文档的编程接口,它将文档表示为一个节点树,每个节点代表一个HTML元素。然后浏览器会使用CSS样式和JavaScript脚本进一步渲染页面,最终呈现给用户。

HTML与其他技术的关系

  • CSS(Cascading Style Sheets):用于设置HTML元素的样式和布局。
  • JavaScript:一种脚本语言,用于增加网页的交互性。

HTML是构建网页的基础,而CSS和JavaScript则用于增强网页的外观和功能。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值