python_day8_综合案例

综合案例,全球GDP排行榜

1、知识点补充:sort()方法

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

my_list = [['a', 33], ['b', 55], ['c', 11]]def choose_sort_key(element):return element[1]  # 列表中每个元素传进来,按照元素下标1排序# 逆序
my_list.sort(key=choose_sort_key, reverse=True)  # 注意此处调用函数方式
print(my_list)

在这里插入图片描述

匿名函数写法

my_list = [['a', 33], ['b', 55], ['c', 11]]
my_list.sort(key=lambda element: element[1], reverse=True)
print(my_list)

在这里插入图片描述

2、实战案例 ,全球GDP数据可视化

导包

from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import *

数据准备

f = open("D:/1960-2019全球GDP数据.csv", "r", encoding="ansi")  # 本机编码为GB2312
data = f.readlines()  # readlines()返回列表,read()返回字符串
f.close()
print(data)
print(type(data))

在这里插入图片描述
在这里插入图片描述

第一行为标头,非数据,使用pop()方法去除

data.pop(0)
print(data)

在这里插入图片描述

将数据转为字典格式

错误思路

{年份:[国家,GDP],年份:[国家,GDP],int:[str,float]…} ,实际上,同年应有多个国家GDP数据,故此格式错误

for element in data:element = element.strip()element = element.split(',')print("element:",element)

在这里插入图片描述
此方法错误,年份key相同时,为更新value操作!!!!!严重丢失数据!!!

data_dict = {}
# {年份:[国家,GDP],年份:[国家,GDP],int:[str,float]......},实际上,同年应有多个国家GDP数据,故此格式错误
for element in data:element = element.strip()element = element.split(',')# print("element:",element)# 注意字典添加/更新数据方式:my_dict[key] = value# 此方法错误,年份key相同时,为更新value操作!!!!!严重丢失数据!!!# data_dict = {element[0]: [element[1], element[2]]}data_dict[int(element[0])] = [element[1], float(element[2])]
print(data_dict)
print(type(data_dict))

在这里插入图片描述

正确思路

{年份:[[国家,GDP],[国家,GDP],…],年份:[[国家,GDP],[国家,GDP],…],int:[[str,float],[str,float],…],…}
正确数据格式,年份:value,而value是一个列表,包含不同国家的数据,其中每个元素又是一个列表;而某一国家具体数据列表为[国家,GDP]。

data_dict = {}
for line in data:print(line)

在这里插入图片描述

	print(type(line))

在这里插入图片描述

	print(line.split(','))  # ['2018', '巴巴多斯', '5086500000\n']

在这里插入图片描述

split()方法生成列表,取0号索引元素为年份,1号索引元素为国家,2号索引元素为GDP
data_dict = {}
# {年份:[[国家,GDP],[国家,GDP],......],年份:[[国家,GDP],[国家,GDP],......],int:[[str,float],[str,float],......],......},正确数据格式,年份:value,而value是一个列表,包含不同国家的数据,其中每个元素又是一个列表;而某一国家具体数据列表为[国家,GDP]。
for line in data:# print(line)# print(type(line))# print(line.split(','))  # ['2018', '巴巴多斯', '5086500000\n']# split()方法生成列表,取0号索引元素为年份,1号索引元素为国家,2号索引元素为GDPyear = int(line.split(',')[0])country = line.split(',')[1]GDP = float(line.split(',')[2])  # 换行符消失 543300000000.0print(GDP)

在这里插入图片描述

注意此处灵活使用try捕获异常语句,妙

"""{key:value} --> value = [元素一,元素二,......] --> 元素一 = [country,GDP]try:无异常的情况,向列表(value)中使用append()方法追加元素(list)data_dict[year].append([country,GDP])except:出现异常情况,data_dict[year]此时无对应value,构建空列表,再向列表中追加元素data_dict[year] = []data_dict[year].append([country,GDP])"""
    try:data_dict[year].append([country, GDP])except:data_dict[year] = []data_dict[year].append([country, GDP])print(data_dict)
print(type(data_dict))

在这里插入图片描述
在这里插入图片描述

将数据转为字典格式完整代码

# 将数据转为字典格式"""
data_dict = {}
# {年份:[国家,GDP],年份:[国家,GDP],int:[str,float]......},实际上,同年应有多个国家GDP数据,故此格式错误
for element in data:element = element.strip()element = element.split(',')# print("element:",element)# 注意字典添加/更新数据方式:my_dict[key] = value# 此方法错误,年份key相同时,为更新value操作!!!!!严重丢失数据!!!# data_dict = {element[0]: [element[1], element[2]]}data_dict[int(element[0])] = [element[1], float(element[2])]
print(data_dict)
print(type(data_dict))
"""data_dict = {}
# {年份:[[国家,GDP],[国家,GDP],......],年份:[[国家,GDP],[国家,GDP],......],int:[[str,float],[str,float],......],......},正确数据格式,年份:value,而value是一个列表,包含不同国家的数据,其中每个元素又是一个列表;而某一国家具体数据列表为[国家,GDP]。
for line in data:# print(line)# print(type(line))# print(line.split(','))  # ['2018', '巴巴多斯', '5086500000\n']# split()方法生成列表,取0号索引元素为年份,1号索引元素为国家,2号索引元素为GDPyear = int(line.split(',')[0])country = line.split(',')[1]GDP = float(line.split(',')[2])  # 换行符消失 543300000000.0# print(GDP)# 注意此处灵活使用try捕获异常语句,妙"""{key:value} --> value = [元素一,元素二,......] --> 元素一 = [country,GDP]try:无异常的情况,向列表(value)中使用append()方法追加元素(list)data_dict[year].append([country,GDP])except:出现异常情况,data_dict[year]此时无对应value,构建空列表,再向列表中追加元素data_dict[year] = []data_dict[year].append([country,GDP])"""try:data_dict[year].append([country, GDP])except:data_dict[year] = []data_dict[year].append([country, GDP])# print(data_dict)
# print(type(data_dict))

可转为json,放入格式化工具查看一下

data_json = json.dumps(data_dict)
print(data_json)
print(type(data_json))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时间线柱状图timeline的时间节点应有序,故先对年份进行排序(实际上字典中year(key)已是升序)

sorted_year_list = sorted(data_dict.keys())  # keys()方法取出字典所有关键字,可用for循环遍历字典
print(sorted_year_list)

在这里插入图片描述

每年国家数量非常多,取GDP排名前十作柱状图

print(data_dict[1960])  # 每年国家数量非常多,取GDP排名前十作柱状图

在这里插入图片描述

构建时间线对象

timeline = Timeline({"theme": ThemeType.LIGHT}  # 设置主题
)

每年GDP降序排序

for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1],reverse=True)  # sort()方法:  列表.sort(key=选择排序依据的函数,reverse=True|False)print(data_dict[year]) # [['美国', 543300000000.0], ['英国', 73233967692.0], ['法国', 62225478000.0], ['中国', 59716467625.0],......]

在这里插入图片描述

取出本年度GDP前十的国家, 数据类型为列表,可通过切片[::],取出前十名

print(type(data_dict[year]))  # 数据类型为列表,可通过切片[::],取出前十名prior_gdp = data_dict[year][0:10]

在这里插入图片描述

每一年都构建一个柱状图

# 创建两个列表分别存放X轴数据与Y轴数据x_data = []y_data = []

前十名

print(prior_gdp)

在这里插入图片描述

取国家名存入列表作为X轴数据,取GDP值存入列表作为Y轴数据

    for country_gdp in prior_gdp:print(country_gdp)  # ['美国', 17527200000000.0]x_data.append(country_gdp[0])y_data.append(country_gdp[1] / 100000000)

在这里插入图片描述

print(x_data)  # ['美国', '英国', '法国', '中国', '日本', '加拿大', '意大利', '印度', '澳大利亚', '瑞典']print(y_data)  # [5433.0, 732.33967692, 622.25478, 597.16467625, 443.0734295, 404.61721692, 403.85288344, 370.29883875, 185.77668271, 158.22585033]

在这里插入图片描述

构建柱状图对象

反转X轴与Y轴,此操作导致GDP高的国家在最下面,故上方使用reverse()方法逆置X轴与Y轴数据

# 构建柱状图对象bar = Bar()# 逆置X轴与Y轴数据,使GDP值高的排在前面x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)# Y轴设置图例,数据,以及数据在右侧显示bar.add_yaxis("GDP(亿元)", y_data, label_opts=LabelOpts(position="right"))bar.reversal_axis()  # 反转X轴与Y轴,此操作导致GDP高的国家在最下面,故上方使用reverse()方法逆置X轴与Y轴数据

设置每年图的标题

bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前十GDP"),toolbox_opts=ToolboxOpts(is_show=True))timeline.add(bar, str(year))  # 要求为字符串

设置自动播放

timeline.add_schema(play_interval=500,is_loop_play=False,is_auto_play=True,is_timeline_show=True
)

绘图

timeline.render("GDP排行榜.html")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PS完整代码(含思路注释版)

from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import *
import json# 实战案例 ,全球GDP数据可视化# 数据准备
f = open("D:/1960-2019全球GDP数据.csv", "r", encoding="ansi")  # 本机编码为GB2312
data = f.readlines()  # readlines()返回列表,read()返回字符串
f.close()
# print(data)
# print(type(data))# 第一行为标头,非数据,使用pop()方法去除
data.pop(0)
# print(data)# 将数据转为字典格式"""
data_dict = {}
# {年份:[国家,GDP],年份:[国家,GDP],int:[str,float]......},实际上,同年应有多个国家GDP数据,故此格式错误
for element in data:element = element.strip()element = element.split(',')# print("element:",element)# 注意字典添加/更新数据方式:my_dict[key] = value# 此方法错误,年份key相同时,为更新value操作!!!!!严重丢失数据!!!# data_dict = {element[0]: [element[1], element[2]]}data_dict[int(element[0])] = [element[1], float(element[2])]
print(data_dict)
print(type(data_dict))
"""data_dict = {}
# {年份:[[国家,GDP],[国家,GDP],......],年份:[[国家,GDP],[国家,GDP],......],int:[[str,float],[str,float],......],......},正确数据格式,年份:value,而value是一个列表,包含不同国家的数据,其中每个元素又是一个列表;而某一国家具体数据列表为[国家,GDP]。
for line in data:# print(line)# print(type(line))# print(line.split(','))  # ['2018', '巴巴多斯', '5086500000\n']# split()方法生成列表,取0号索引元素为年份,1号索引元素为国家,2号索引元素为GDPyear = int(line.split(',')[0])country = line.split(',')[1]GDP = float(line.split(',')[2])  # 换行符消失 543300000000.0# print(GDP)# 注意此处灵活使用try捕获异常语句,妙"""{key:value} --> value = [元素一,元素二,......] --> 元素一 = [country,GDP]try:无异常的情况,向列表(value)中使用append()方法追加元素(list)data_dict[year].append([country,GDP])except:出现异常情况,data_dict[year]此时无对应value,构建空列表,再向列表中追加元素data_dict[year] = []data_dict[year].append([country,GDP])"""try:data_dict[year].append([country, GDP])except:data_dict[year] = []data_dict[year].append([country, GDP])# print(data_dict)
# print(type(data_dict))# 可转为json,放入格式化工具查看一下
# data_json = json.dumps(data_dict)
# print(data_json)
# print(type(data_json))# 时间线柱状图timeline的时间节点应有序,故先对年份进行排序(实际上字典中year(key)已是升序)
sorted_year_list = sorted(data_dict.keys())  # keys()方法取出字典所有关键字,可用for循环遍历字典
# print(sorted_year_list)# print(data_dict[1960])  # 每年国家数量非常多,取GDP排名前十作柱状图# 构建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT}  # 设置主题
)for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1],reverse=True)  # sort()方法:  列表.sort(key=选择排序依据的函数,reverse=True|False)# print(data_dict[year]) # [['美国', 543300000000.0], ['英国', 73233967692.0], ['法国', 62225478000.0], ['中国', 59716467625.0],......]# 取出本年度GDP前十的国家# print(type(data_dict[year]))  # 数据类型为列表,可通过切片[::],取出前十名prior_gdp = data_dict[year][0:10]# 每一年都构建一个柱状图# 创建两个列表分别存放X轴数据与Y轴数据x_data = []y_data = []# print(prior_gdp)for country_gdp in prior_gdp:# print(country_gdp)  # ['美国', 17527200000000.0]x_data.append(country_gdp[0])y_data.append(country_gdp[1] / 100000000)# print(x_data)  # ['美国', '英国', '法国', '中国', '日本', '加拿大', '意大利', '印度', '澳大利亚', '瑞典']# print(y_data)  # [5433.0, 732.33967692, 622.25478, 597.16467625, 443.0734295, 404.61721692, 403.85288344, 370.29883875, 185.77668271, 158.22585033]# 构建柱状图对象bar = Bar()# 逆置X轴与Y轴数据,使GDP值高的排在前面x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)# Y轴设置图例,数据,以及数据在右侧显示bar.add_yaxis("GDP(亿元)", y_data, label_opts=LabelOpts(position="right"))bar.reversal_axis()  # 反转X轴与Y轴,此操作导致GDP高的国家在最下面,故上方使用reverse()方法逆置X轴与Y轴数据# bar.render()# 设置每年图的标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前十GDP"),toolbox_opts=ToolboxOpts(is_show=True))timeline.add(bar, str(year))  # 要求为字符串# 设置自动播放
timeline.add_schema(play_interval=500,is_loop_play=False,is_auto_play=True,is_timeline_show=True
)
# 绘图
timeline.render("GDP排行榜.html")

PS完整代码(清爽版)

from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import *# 实战案例 ,全球GDP数据可视化# 数据准备
f = open("D:/1960-2019全球GDP数据.csv", "r", encoding="ansi")  # 本机编码为GB2312
data = f.readlines()  # readlines()返回列表,read()返回字符串
f.close()# 第一行为标头,非数据,使用pop()方法去除
data.pop(0)# 将数据转为字典格式
data_dict = {}
# {年份:[[国家,GDP],[国家,GDP],......],年份:[[国家,GDP],[国家,GDP],......],int:[[str,float],[str,float],......],......},正确数据格式,年份:value,而value是一个列表,包含不同国家的数据,其中每个元素又是一个列表;而某一国家具体数据列表为[国家,GDP]。
for line in data:# split()方法生成列表,取0号索引元素为年份,1号索引元素为国家,2号索引元素为GDPyear = int(line.split(',')[0])country = line.split(',')[1]GDP = float(line.split(',')[2])  # 换行符消失 543300000000.0# 注意此处灵活使用try捕获异常语句,妙"""{key:value} --> value = [元素一,元素二,......] --> 元素一 = [country,GDP]try:无异常的情况,向列表(value)中使用append()方法追加元素(list)data_dict[year].append([country,GDP])except:出现异常情况,data_dict[year]此时无对应value,构建空列表,再向列表中追加元素data_dict[year] = []data_dict[year].append([country,GDP])"""try:data_dict[year].append([country, GDP])except:data_dict[year] = []data_dict[year].append([country, GDP])# 时间线柱状图timeline的时间节点应有序,故先对年份进行排序(实际上字典中year(key)已是升序)
sorted_year_list = sorted(data_dict.keys())  # keys()方法取出字典所有关键字,可用for循环遍历字典# 构建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT}  # 设置主题
)for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1],reverse=True)  # sort()方法:  列表.sort(key=选择排序依据的函数,reverse=True|False)# 取出本年度GDP前十的国家prior_gdp = data_dict[year][0:10]# 每一年都构建一个柱状图# 创建两个列表分别存放X轴数据与Y轴数据x_data = []y_data = []for country_gdp in prior_gdp:x_data.append(country_gdp[0])y_data.append(country_gdp[1] / 100000000)# 构建柱状图对象bar = Bar()# 逆置X轴与Y轴数据,使GDP值高的排在前面x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)# Y轴设置图例,数据,以及数据在右侧显示bar.add_yaxis("GDP(亿元)", y_data, label_opts=LabelOpts(position="right"))bar.reversal_axis()  # 反转X轴与Y轴,此操作导致GDP高的国家在最下面,故上方使用reverse()方法逆置X轴与Y轴数据# 设置每年图的标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前十GDP"),toolbox_opts=ToolboxOpts(is_show=True))timeline.add(bar, str(year))  # 要求为字符串# 设置自动播放
timeline.add_schema(play_interval=500,is_loop_play=False,is_auto_play=True,is_timeline_show=True
)
# 绘图
timeline.render("GDP排行榜.html")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Office如何通过VSTO进行PPT插件开发?

文章目录 0.引言1.工具准备2.PPT外接程序创建和生成3.外接程序生成并使用 0.引言 VSTO(Visual Studio Tools for Office )是VBA的替代,是一套用于创建自定义Office应用程序的Visual Studio工具包。VSTO可以用Visual Basic 或者Visual C#扩展O…

(转载)从0开始学matlab(第11天)—关系运算符和逻辑运算符

选择结构的运算由一个表达式控制的,这个表达式的结果只有 true(1)和 false(0)。有两种形式的运算符可以在 MATLAB 中关系得到 true/false:关系运算符和逻辑运算符。跟 C 语言一样,MATLAB 没有布尔型和逻辑数据类型。MATLAB 把 0 值作为结果fa…

android JSBridge的加载时机问题

https://github.com/lzyzsd/JsBridge 也算是比较悠久和使用了。 可供参考的android和IOS,以及前端的使用 https://segmentfault.com/a/1190000018208609 遇到的问题: 比如: 从前端在加载WebView的时候,执行了某些动作&#xff0c…

FreeRTOS 低功耗模式设计 STM32平台

1. STM32F105RBT6 的三种低功耗模式 1.1 sleep睡眠模式、stop停机模式、standby 待机模式 1.2 STM32中文参考手册有介绍STM32 低功耗模式的介绍 2. FreeRTOS 采用的是时间片轮转的抢占式任务调度机制,其低功耗设计思路一般是: ① 当运行空闲任务&#…

【UE4 C++】08-生成抛射物来模拟攻击效果

步骤 新建一个C类,父类为Actor,命名为“ASMagicProjectile” 在“ASMagicProjectile.h”中添加如下代码: 在“ASMagicProjectile.cpp”中添加如下代码: 编译后在虚幻编辑器中新建一个蓝图,选择父类为我们刚创建的C类…

Java设计模式之行为型-迭代器模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式,它主要用于遍历集合对象,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 举个简单的…

分布式微服务架构下网络通信的底层实现原理

在分布式架构中,网络通信是底层基础,没有网络,也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作,共同完成一件事情。 同样,在大规模的系统架构中,应用吞吐量上不去、网络存在通信延迟、…

Android Framework岗位面试真题分享

Handler是Android中的消息处理机制,是一种线程间通信的解决方案,同时你也可以理解为它天然的为我们在主线程创建一个队列,队列中的消息顺序就是我们设置的延迟的时间,如果你想在Android中实现一个队列的功能,不妨第一时…

【UE】运行游戏时就获取鼠标控制

问题描述 我们经常在点击运行游戏后运行再在视口界面点击一下才能让游戏获取鼠标控制。其实只需做一个设置就可以在游戏运行后自动获取鼠标控制。 解决步骤 点击编辑器偏好设置 如下图,点击“播放”,再勾选“游戏获取鼠标控制” 这样当你运行游戏后直…

shardingsphere mybatisplus properties和yml配置实现

shardingsphere mybatisplus properties和yml配置实现 目录结构 model package com.oujiong.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date;/*** user表*/ TableName("user") Data public class Use…

开发工具VSCODE的使用记录

vscode简介 Visual Studio Code(简称“VS Code” [1] )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, [2] 可在桌面上运行…

python详解(8)——进阶(2):初步算法

目录 🏆一、前言 🏆二、时间复杂度 🏆三、递推 🚩1.简介 🚩2.爬楼梯 🚩3、猴子吃桃 🏆四、递归 🚩1、简介 🚩2、递归求斐波那契数列 🚩3、递归求阶乘 &#x…