python 计算gdp_菜鸟笔记Python3——数据可视化(三)世界GDP分析
参考教材
chapter16 数据可视化
引言
经过世界地图的练习,我们现在来进行自己的数据可视化小项目。Open Konwledge Foundation 提供了一个数据集,其中包含各国的国内生产总值(GDP),我们可以在
section 1:中国GDP的数据可视化练习
下载完成这个 json 文件之后,用记事本打开,搜索一下 'China' , 观察一下数据格式
{"Country Name":"China","Country Code":"CHN","Year":"1960","Value":"59184116448.734"}
后面的事情就很简单了
step 1: 绘制中国历年 GDP 情况直方图
直接贴代码
#! /usr/bin/python
# -*- coding: utf8 -*-
import json
import pygal
filename = 'gdp.json'
with open(filename) as f:
gdp = json.load(f)
china_gdp = []
year_list = []
for gdp_dict in gdp:
if gdp_dict['Country Name'] == 'China':
year = gdp_dict['Year']
value = gdp_dict['Value']
year_list.append(int(year))
china_gdp.append(int(float(value)))
hist = pygal.Bar()
hist.title = 'Chinese GDP from '+str(year_list[0])+' to '+str(year_list[-1])+''
hist.x_labels = year_list
hist.x_title = 'Year'
hist.y_title = 'GDP (dollars)'
hist.add('Chinese GDP',china_gdp)
hist.render_to_file(hist.title+'.svg')
step 2: 进阶一点,GDP年增长率
数据都分类好了,直接玩数学游戏就行了
代码
#GDP增长率
num = len(china_gdp)
zero = [0 for count in range(0,num-1)]
growth_rate = [int(10000*(china_gdp[count+1] - china_gdp[count])/china_gdp[count])/100
for count in range(0,num-1)]
plt.figure(figsize=(10,6))
plt.title('Chinese GDP \'s growth rate from '+str(year_list[0])+' to '+str(year_list[-2])+'')
plt.plot(year_list[:-1],growth_rate,'r--')
plt.plot(year_list[:-1],zero,'b--')
plt.scatter(year_list[:-1],growth_rate,c='r')
plt.xlim([year_list[0], year_list[-2]])
plt.ylim([growth_rate[0]-2, max(growth_rate)+2])
plt.xlabel('Year From 1960 to 2013',fontsize = 14)
plt.ylabel('GDP growth rate ( % )',fontsize = 14)
plt.tick_params(axis='both', labelsize=14)
plt.savefig('Chinese GDP \'s growth rate from '+str(year_list[0])+' to '+str(year_list[-2])+'.png',
bbox_inches='tight')
plt.show()
结果图
Chinese GDP 's growth rate from 1960 to 2013.png
其实还可以画折点图
line_chart = pygal.Line()
line_chart.title = 'Chinese GDP \'s growth rate from ' \
''+str(year_list[0])+' to '+str(year_list[-2])+' ( % )'
line_chart.x_labels = map(str,year_list[:-1])
line_chart.add('GDP growth rate',growth_rate)
line_chart.render_to_file(''+line_chart.title+'v2.svg')
效果图
额。。。。 ( ̄▽ ̄") 数据太多横坐标显示不过来了
不过可以发现,在数据比较少的时候这样的图还是很不错的 o(*≧▽≦)ツ
section 2: 世界 GDP 数据统计
step 1 : 世界地图
原理跟之前统计世界人口一模一样,改一下代码中的关键字
import pygal
import json
from country_codes import get_country_code
from pygal.style import RotateStyle
from pygal.style import LightColorizedStyle
from countries import get_countries
#将数据加载到一个列表中
filename = 'gdp.json'
#创建一个字典
cc_GDP = {}
cc_GDP1,cc_GDP2,cc_GDP3 = {},{},{}
cc_GDP = get_countries(filename)
for cc,GDP in cc_GDP.items():
if GDP < 1E9:
cc_GDP1[cc] = GDP
elif GDP < 1E12:
cc_GDP2[cc] = GDP
else:
cc_GDP3[cc] = GDP
wm_style = RotateStyle('#EE2C2C',base_style=LightColorizedStyle)
wm = pygal.maps.world.World(style=wm_style)
wm.title = 'World GDP in 2014, by Country'
wm.add('0-billion',cc_GDP1)
wm.add('1billion-1trillion',cc_GDP2)
wm.add('>1trillion',cc_GDP3)
wm.render_to_file('world_GDP_v8.svg')
成果图
step 2: GDP 前10 排行
存储数据的字典完成之后,如果我们想根据 GDP 排序, 那么需要考虑 对字典中的键值对排序
经过网络,我们发现了这样一种办法 :
dic = sorted(cc_GDP1.items(), key=lambda d:d[1], reverse = True)
分析一下:
第一个参数 cc_GDP.items() 给 sorted 传递了字典中的键值对信息
第二个参数 key=lambda d:d[1] 告诉 sorted 要按照 字典中第2个键的值来排序 (d:d[1])
第三个参数 reverse = Ture 告诉 sorted 按照从小到大的顺序排列
第二个注意的点, 为了绘制美观的图标,我们需要在图表中显示完整的地区名称
为了显示完整的地区名称,我们需要重新写一个函数,这个函数返回一个包含完整地区名称的字典,代码如下
def get_cm_countries(filename):
cm_countries = {}
with open(filename) as f:
pop_data = json.load(f)
key = True
for pop_dict in pop_data:
if pop_dict['Year'] == '2014':
country_name = pop_dict['Country Name']
value = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if country_name == 'World':
key = False
cm_countries[country_name] = value # 'World' 不在 COUNTRIES 字典里面
if code and (key == False):
cm_countries[country_name] = value
return cm_countries
相应的主程序也要修改
#! /usr/bin/python
# -*- coding: utf8 -*-
import pygal
import json
from country_codes import get_country_code
from pygal.style import RotateStyle
from pygal.style import LightColorizedStyle
from countries import get_cm_countries
#将数据加载到一个列表中
filename = 'gdp.json'
#创建一个包含字典
cc_GDP = {}
cc_GDP1={}
cc_GDP = get_cm_countries(filename)
#把GDP达到万亿以上的国家存进字典 cc_GDP1
for cc,GDP in cc_GDP.items():
if GDP > 1E12:
cc_GDP1[cc] = GDP
dic = sorted(cc_GDP1.items(), key=lambda d:d[1], reverse = True)
dic = dic[0:10]
line_chart = pygal.HorizontalBar()
line_chart.title='The top 10 countries in 2014-GDP-Rank'
for element in dic:
line_chart.add(element[0],int(element[1]))
line_chart.render_to_file('top 10 in 2014.svg')
看一下成果
最后进行一下代码重构,将生成svg文件的画图程序重构成一个接受年份的函数,方便多次画图
重构一下 得到包含完整国家名称的字典的函数
def get_cm_countries(filename,year):
cm_countries = {}
with open(filename) as f:
pop_data = json.load(f)
key = True
for pop_dict in pop_data:
if pop_dict['Year'] == str(year):
country_name = pop_dict['Country Name']
value = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if country_name == 'World':
key = False
cm_countries[country_name] = value # 'World' 不在 COUNTRIES 字典里面
if code and (key == False):
cm_countries[country_name] = value
return cm_countries
重构一下主函数
def one_plot(filename,year):
cc_GDP = {}
cc_GDP1={}
cc_GDP = get_cm_countries(filename,year)
#把GDP达到万亿以上的国家存进字典 cc_GDP1
for cc,GDP in cc_GDP.items():
if GDP > 1E12:
cc_GDP1[cc] = GDP
dic = sorted(cc_GDP1.items(), key=lambda d:d[1], reverse = True)
dic = dic[0:10]
line_chart = pygal.HorizontalBar()
line_chart.title='The top 10 countries in '+str(year)+'-GDP-Rank'
for element in dic:
line_chart.add(element[0],int(element[1]))
line_chart.render_to_file('top 10 in '+str(year)+'.svg')
for year in range(2008,2015):
one_plot(filename,year)
这样我们一下就生成了从2008年到2015年全部的数据图
贴一下几张图
其实,我们也可以直接把文件写入到csv文件中,然后用excel来画图
最后贴一下 GitHub 链接
python 计算gdp_菜鸟笔记Python3——数据可视化(三)世界GDP分析相关推荐
- python3菜鸟-菜鸟笔记Python3——数据可视化(一)
参考教材 chapter16 数据可视化 引言 在参考教材 <Python编程--从入门到实践>的* 第 16 章 -- 数据可视化 进行 Python3 的学习时, 我们发现了一道很值得 ...
- Python 将JSON格式文件进行数据可视化制作世界人口地图
(一) 制作世界人口地图:JSON格式 下载JSON格式的人口数据,并使用json模块来处理它,Pygal提供一个适合初学者使用的地图创建工具,使用它来对人口数据进行可视化,用来探索全球人口的分布情况 ...
- 用python进行简单的数据分析和数据可视化
用python进行简单的数据分析和数据可视化 本篇文章主要是初步探索数据分析,简单了解数据分析大致流程 数据来源:来自于Kaggle平台上的一个项目:Explore San Francisco cit ...
- 在R、Python和Julia中常用的数据可视化技术
俗话说"一图胜千言".通过各种图片和图形化展示,我们可以更清晰地表达很多抽象概念.理论.数据模式或某些想法.在本章中,我们首先解释为什么应该关心数据可视化.然后,我们将讨论几种在R ...
- Python+vtk 实现激光点云数据可视化学习(2021.7.12)
Python+VTK实现激光点云数据可视化学习 2021.7.12 1.激光点云与VTK简介 2.配置Python环境(Conda+PyCharm+Python3.6+VTK) 3.点云数据(大约60 ...
- python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例
本篇文章适用于Python小白的教程篇,如果有哪里不足欢迎指出来,希望对你帮助. 本篇文章用到的模块: requests,re,os,jieba,glob,json,lxml,pyecharts,he ...
- 学习笔记之数据可视化(二)—— 页面布局(下)
续上一章 2.7 地图区域(.map) 2.7.1 实现步骤: 2.8 用户统计模块 2.8.1 布局: 2.8.2 柱状图 2.9 订单模块 2.9.1 订单区域布局 2.9.2 订单区域(orde ...
- 学习笔记之数据可视化(二)——页面布局(中)
续上一章 2.6 监控区域布局 2.6.1 布局结构解析: 2.6.2 样式描述: 2.6.3 HTML结构及CSS样式代码 2.6.3 ### 监控区域-效果 2.6.7 点位区域(point) 2 ...
- 学习笔记之数据可视化(二)——页面布局(上)
~续上一章 2. 项目页面布局 2.1 基础布局 2.1.1 PC端屏幕宽度适配设置 2.1.2 主体容器viewport背景图片 2.1.3 HTML结构 2.1.4 css样式代码 2.2 边框图 ...
- 学习笔记之数据可视化(一)——项目适配方案
目录 最终效果展示 1. 数据可视化适配方案 1.1 项目需求 1.2 PC端适配方案 1.3 使用到的技术 2. 数据可视化项目开发 项目准备 1.1 文件准备 1.2 引入js和css文件 1.3 ...
最新文章
- java中的注解(二)
- linux下的软件使用——抛弃Windows的历程
- ping C类地址是否在线
- linux 上传工具 lr,Linux传输工具lrzsz
- 12-order by和group by 原理和优化 sort by 倒叙
- android语法高亮插件,安卓语法高亮编辑器 HighlightTextEditor
- 深入理解mysql百度网_深入理解mysql
- 2019交大计算机考研分数线,上海交大2019考研计算机软件与理论的复式分数..._考研_帮考网...
- 怎样加入社区项目Karbor的Review?
- linux系统支持什么输入法,Linux系统常用输入法框架
- python b站弹幕分析_关于《后浪》的B站弹幕分析总结(五)——Python实现情感分析、情绪分析以及可视化...
- 算术平均数、几何平均数、
- mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
- [转载]NFC问题分析
- 傅里叶变换和逆变换公式的我理解意义
- CSharp中的集合与字典:不同数据量的内存占用情况
- 测距仪控制c语言程序,激光测距仪系统设计(机械图电路图c语言程序)
- 采用FFMPEG开源库和vs2008 mfc 写一个H264播放器(1)
- 锐捷mpls 解决BGP路由黑洞问题
- 报错h is not defind
热门文章
- 国内android第三方rom,安卓手机第三方rom大盘点,曾经火到不行,如今几乎全军覆没...
- Java 程序员 金三银四面试必备:高速突击学习框架 + 性能优化
- 什么是云服务举例说明_什么是云服务(什么是云服务举例说明)
- Ceisum 计算向量夹角及垂足
- 压缩卷时可压缩空间远小于实际剩余空间解决方法
- Lenient assertions(Unitils介绍三)
- FPC柔性印制电路板学习一
- 移动安全-Frida hook安卓So层函数实战
- java瀑布图表,瀑布图的完美解决方案 [Excel图表]
- bcm5396交换机级联配置_「收藏」Cisco交换机安全配置设定