参考教材

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分析相关推荐

  1. python3菜鸟-菜鸟笔记Python3——数据可视化(一)

    参考教材 chapter16 数据可视化 引言 在参考教材 <Python编程--从入门到实践>的* 第 16 章 -- 数据可视化 进行 Python3 的学习时, 我们发现了一道很值得 ...

  2. Python 将JSON格式文件进行数据可视化制作世界人口地图

    (一) 制作世界人口地图:JSON格式 下载JSON格式的人口数据,并使用json模块来处理它,Pygal提供一个适合初学者使用的地图创建工具,使用它来对人口数据进行可视化,用来探索全球人口的分布情况 ...

  3. 用python进行简单的数据分析和数据可视化

    用python进行简单的数据分析和数据可视化 本篇文章主要是初步探索数据分析,简单了解数据分析大致流程 数据来源:来自于Kaggle平台上的一个项目:Explore San Francisco cit ...

  4. 在R、Python和Julia中常用的数据可视化技术

    俗话说"一图胜千言".通过各种图片和图形化展示,我们可以更清晰地表达很多抽象概念.理论.数据模式或某些想法.在本章中,我们首先解释为什么应该关心数据可视化.然后,我们将讨论几种在R ...

  5. Python+vtk 实现激光点云数据可视化学习(2021.7.12)

    Python+VTK实现激光点云数据可视化学习 2021.7.12 1.激光点云与VTK简介 2.配置Python环境(Conda+PyCharm+Python3.6+VTK) 3.点云数据(大约60 ...

  6. python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

    本篇文章适用于Python小白的教程篇,如果有哪里不足欢迎指出来,希望对你帮助. 本篇文章用到的模块: requests,re,os,jieba,glob,json,lxml,pyecharts,he ...

  7. 学习笔记之数据可视化(二)—— 页面布局(下)

    续上一章 2.7 地图区域(.map) 2.7.1 实现步骤: 2.8 用户统计模块 2.8.1 布局: 2.8.2 柱状图 2.9 订单模块 2.9.1 订单区域布局 2.9.2 订单区域(orde ...

  8. 学习笔记之数据可视化(二)——页面布局(中)

    续上一章 2.6 监控区域布局 2.6.1 布局结构解析: 2.6.2 样式描述: 2.6.3 HTML结构及CSS样式代码 2.6.3 ### 监控区域-效果 2.6.7 点位区域(point) 2 ...

  9. 学习笔记之数据可视化(二)——页面布局(上)

    ~续上一章 2. 项目页面布局 2.1 基础布局 2.1.1 PC端屏幕宽度适配设置 2.1.2 主体容器viewport背景图片 2.1.3 HTML结构 2.1.4 css样式代码 2.2 边框图 ...

  10. 学习笔记之数据可视化(一)——项目适配方案

    目录 最终效果展示 1. 数据可视化适配方案 1.1 项目需求 1.2 PC端适配方案 1.3 使用到的技术 2. 数据可视化项目开发 项目准备 1.1 文件准备 1.2 引入js和css文件 1.3 ...

最新文章

  1. java中的注解(二)
  2. linux下的软件使用——抛弃Windows的历程
  3. ping C类地址是否在线
  4. linux 上传工具 lr,Linux传输工具lrzsz
  5. 12-order by和group by 原理和优化 sort by 倒叙
  6. android语法高亮插件,安卓语法高亮编辑器 HighlightTextEditor
  7. 深入理解mysql百度网_深入理解mysql
  8. 2019交大计算机考研分数线,上海交大2019考研计算机软件与理论的复式分数..._考研_帮考网...
  9. 怎样加入社区项目Karbor的Review?
  10. linux系统支持什么输入法,Linux系统常用输入法框架
  11. python b站弹幕分析_关于《后浪》的B站弹幕分析总结(五)——Python实现情感分析、情绪分析以及可视化...
  12. 算术平均数、几何平均数、
  13. mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  14. [转载]NFC问题分析
  15. 傅里叶变换和逆变换公式的我理解意义
  16. CSharp中的集合与字典:不同数据量的内存占用情况
  17. 测距仪控制c语言程序,激光测距仪系统设计(机械图电路图c语言程序)
  18. 采用FFMPEG开源库和vs2008 mfc 写一个H264播放器(1)
  19. 锐捷mpls 解决BGP路由黑洞问题
  20. 报错h is not defind

热门文章

  1. 国内android第三方rom,安卓手机第三方rom大盘点,曾经火到不行,如今几乎全军覆没...
  2. Java 程序员 金三银四面试必备:高速突击学习框架 + 性能优化
  3. 什么是云服务举例说明_什么是云服务(什么是云服务举例说明)
  4. Ceisum 计算向量夹角及垂足
  5. 压缩卷时可压缩空间远小于实际剩余空间解决方法
  6. Lenient assertions(Unitils介绍三)
  7. FPC柔性印制电路板学习一
  8. 移动安全-Frida hook安卓So层函数实战
  9. java瀑布图表,瀑布图的完美解决方案 [Excel图表]
  10. bcm5396交换机级联配置_「收藏」Cisco交换机安全配置设定