资讯专栏INFORMATION COLUMN

python大数据可视化制作全球人口地形图

89542767 / 706人阅读

  本文主要是给大家介绍了python大数据可视化制作全球人口地形图的实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家尽可能发展,尽早涨薪


  序言


  信息来源:population_data.json,


  先看看数据信息长什么样


  [
  {
  "CountryName":"ArabWorld",
  "CountryCode":"ARB",
  "Year":"1960",
  "Value":"96388069"
  },
  {
  "CountryName":"ArabWorld",
  "CountryCode":"ARB",
  "Year":"1961",
  "Value":"98882541.4"
  },
  省去。。。
  ]


  '''这一个文档实际上是1个比较长的Python目录,在其中各个原素是一个包括4个键的词典:


  国家名、所在国码、年代及其表明人口总数数值。


  大家只关注各个国家2010年人口总数,所以我们最先撰写1个打印出这些数据的流程:'''


  importjson
  #将数据加载到了一个页面上
  filename='population_data.json'
  withopen(filename)asf:
  pop_data=json.load(f)
  #打印出各个国家2010年人口总数
  forpop_dicinpop_data:
  ifpop_dic["Year"]=='2010':
  country_name=pop_dic['CountryName']
  population=int(float(pop_dic['Value']))#population_data.json中的每一个键合值全是字符串数组。为处理这种人口统计,我们应该将表明人口总数的字符串数组转化为数字值,因此大家应用函数公式int():
  print(country_name+":"+str(population))
  rabWorld:357868000
  Caribbeansmallstates:6880000
  EastAsia&Pacific(allincomelevels):2201536674
  EastAsia&Pacific(developingonly):1961558757
  Euroarea:331766000
  Europe&CentralAsia(allincomelevels):890424544
  Europe&CentralAsia(developingonly):405204000


  获得两个字母的所在国码


  '''制作地图前,还要处理数据信息存有的最后的问题。Pygal里的地图设计专用工具规定数据信息为特殊的文件格式:用所在国码表明我国,及其用数字表示人口总数。处理自然地理政冶数据信息时,常常需要使用好多个规范化所在国码集。


  population_data.json其中包含是指三个英文字母的所在国码,但Pygal应用两个字母的所在国码。我们应该想尽办法依据国家名获得两个字母的所在国码。


  Pygal所使用的所在国码存放在控制模块i18n(internationalization的简称)中。


  词典COUNTRIES蕴含的键合值分别是两个字母的所在国码和国家名。


  要检查这种所在国码,可以从控制模块i18n中导进这一个词典,直接打印其键合值:'''


  from pygal_maps_world.i18n import COUNTRIES
  for country_code in sorted(COUNTRIES.keys()):
  print(country_code,COUNTRIES[country_code])
  ad Andorra
  ae United Arab Emirates
  af Afghanistan
  al Albania


  为获取国别码,我们将编写一个函数,它在COUNTRIES中查找并返回国别码。


  我们将这个函数放在一个名为country_codes的模块中,以便能够在可视化程序中导入它:


  from pygal_maps_world.i18n import COUNTRIES
  def get_country_code(country_name):
  #根据指定的国家,返回Pygal使用的两个字母的国别码
  for code,name in COUNTRIES.items():
  if name==country_name:
  return code
  #如果没有找到指定的国家,就返回None
  return None
  #打印每个国家2010年的人口数量
  for pop_dic in pop_data:
  if pop_dic["Year"]=='2010':
  country_name=pop_dic['Country Name']
  population=int(float(pop_dic['Value']))#population_data.json中的每个键和值都是字符串。为处理这些人口数据,我们需要将表示人口数量的字符串转换为数字值,为此我们使用函数int():
  code=get_country_code(country_name)
  if code:
  print(code+":"+str(population))
  else:
  print('error-'+":"+str(population))
  error-:357868000
  error-:6880000
  error-:2201536674
  error-:1961558757
  error-:331766000


  导致显示错误消息的原因有两个。首先,并非所有人口数量对应的都是国家,有些人口数量对应的是地区(阿拉伯世界)和经济类群(所有收入水平)。


  其次,有些统计数据使用了不同的完整国家名(如Yemen,Rep.,而不是Yemen)。当前,我们将忽略导致错误的数据,看看根据成功恢复了的数据制作出的地图是什么样的。


  制作世界地图


  import pygal_maps_world.maps#创建了一个Worldmap实例,并设置了该地图的的title属性
  wm=pygal_maps_world.maps.World()
  wm.title='North,Central,and South America'
  '''
  方法add(),它接受一个标签和一个列表,其中后者包含我们要突出的国家的国别码。每次调用add()都将为指定的国家
  选择一种新颜色,并在图表左边显示该颜色和指定的标签。我们要以同一种颜色显示整个北美地区,因此第一次调用add()
  时,在传递给它的列表中包含'ca'、'mx'和'us',以同时突出加拿大、墨西哥和美国。接下来,对中美和南美国家做同样
  的处理。
  '''
  wm.add('North America',['ca','mx','us'])
  wm.add('Central America',['bz','cr','gt','hn','ni','pa','sv'])
  wm.add('South America',['ar','bo','br','cl','co','ec','gf',
  'gy','pe','py','sr','uy','ve'])
  '''

01.png

  方法render_to_file()创建一个包含该图表的.svg文件,你可以在浏览器中打开它。输出是一幅以不同颜色突出北美、


  中美和南美的地图


  '''


  wm.render_to_file('americas.svg')


  绘制完整的世界人口地图


  '''要呈现其他国家的人口数量,需要将前面处理的数据转换为Pygal要求的字典格式:键为两个字母的国别码,值为人口数量。


  为此,在world_population.py中添加如下代码:


  import json
  #将数据加载到一个列表中
  filename='population_data.json'
  with open(filename)as f:
  pop_data=json.load(f)
  def get_country_code(country_name):
  #根据指定的国家,返回Pygal使用的两个字母的国别码
  for code,name in COUNTRIES.items():
  if name==country_name:
  return code
  #如果没有找到指定的国家,就返回None
  return None
  #创建一个包含人口数量是字典
  cc_populations={}
  #打印每个国家2010年的人口数量
  for pop_dic in pop_data:
  if pop_dic["Year"]=='2010':
  country_name=pop_dic['Country Name']
  population=int(float(pop_dic['Value']))#population_data.json中的每个键和值都是字符串。为处理这些人口数据,我们需要将表示人口数量的字符串转换为数字值,为此我们使用函数int():
  code=get_country_code(country_name)
  if code:
  cc_populations[code]=population
  import pygal_maps_world.maps#创建了一个Worldmap实例,并设置了该地图的的title属性
  wm=pygal_maps_world.maps.World()
  wm.title='world population in 2010,by country'
  wm.add('2010',cc_populations)
  wm.render_to_file('world_population.svg')
  根据人口数量将国家分组
  import json
  #将数据加载到一个列表中
  filename='population_data.json'
  with open(filename)as f:
  pop_data=json.load(f)
  def get_country_code(country_name):
  #根据指定的国家,返回Pygal使用的两个字母的国别码
  for code,name in COUNTRIES.items():
  if name==country_name:
  return code
  #如果没有找到指定的国家,就返回None
  return None
  #创建一个包含人口数量是字典
  cc_populations={}
  #打印每个国家2010年的人口数量
  for pop_dic in pop_data:
  if pop_dic["Year"]=='2010':
  country_name=pop_dic['Country Name']
  population=int(float(pop_dic['Value']))#population_data.json中的每个键和值都是字符串。为处理这些人口数据,我们需要将表示人口数量的字符串转换为数字值,为此我们使用函数int():
  code=get_country_code(country_name)
  if code:
  cc_populations[code]=population
  ###根据人口数量将国家分3组
  cc_pop_1,cc_pop_2,cc_pop_3={},{},{}
  for cc,pop in cc_populations.items():
  if pop<10000000:
  cc_pop_1[cc]=pop
  elif pop<1000000000:
  cc_pop_2[cc]=pop
  else:
  cc_pop_3[cc]=pop
  import pygal_maps_world.maps#创建了一个Worldmap实例,并设置了该地图的的title属性
  wm=pygal_maps_world.maps.World()
  wm.title='world population in 2010,by country'
  wm.add('0-10m',cc_pop_1)
  wm.add('10m-1bn',cc_pop_2)
  wm.add('>1bn',cc_pop_3)
  wm.render_to_file('world_population.svg')

  

02.png

       依据Pygal设定游戏地图的款式


  在这个图中,依据人口总数将我国分类虽然比较合理有效,但默认颜色调整好难看。比如,在这儿,Pygal选了鲜亮的粉色和绿色基本色。


  下边应用Pygal款式设定命令来调节色调。大家也让Pygal应用一类基本色,但将特定该基本色,然后让3个分类颜色区别更高


  ###依据Pygal设定游戏地图的款式


  '''


  在这个图中,依据人口总数将我国分类虽然比较合理有效,但默认颜色调整好难看。比如,在这儿,Pygal选了鲜亮的粉红色


  的绿色基本色。下边应用Pygal款式设定命令来调节色调。大家也让Pygal应用一类基本色,但将特定该基本色,然后让3个分类


  颜色区别更高


  '''
  ###依据人口总数将我国分类
  importjson
  #将数据加载到了一个页面上
  filename='population_data.json'
  with open(filename)as f:
  pop_data=json.load(f)
  def get_country_code(country_name):
  #根据指定的国家,返回Pygal使用的两个字母的国别码
  for code,name in COUNTRIES.items():
  if name==country_name:
  return code
  #如果没有找到指定的国家,就返回None
  return None
  #创建一个包含人口数量是字典
  cc_populations={}
  #打印每个国家2010年的人口数量
  for pop_dic in pop_data:
  if pop_dic["Year"]=='2010':
  country_name=pop_dic['Country Name']
  population=int(float(pop_dic['Value']))#population_data.json中的每个键和值都是字符串。为处理这些人口数据,我们需要将表示人口数量的字符串转换为数字值,为此我们使用函数int():
  code=get_country_code(country_name)
  if code:
  cc_populations[code]=population
  ###根据人口数量将国家分3组
  cc_pop_1,cc_pop_2,cc_pop_3={},{},{}
  for cc,pop in cc_populations.items():
  if pop<10000000:
  cc_pop_1[cc]=pop
  elif pop<1000000000:
  cc_pop_2[cc]=pop
  else:
  cc_pop_3[cc]=pop
  import pygal_maps_world.maps#创建了一个Worldmap实例,并设置了该地图的的title属性
  from pygal.style import RotateStyle
  from pygal.style import LightColorizedStyle#加亮颜色主题
  wm_style=RotateStyle('#336699',base_style=LightColorizedStyle)
  wm=pygal_maps_world.maps.World(style=wm_style)
  wm.title='world population in 2010,by country'
  wm.add('2010',cc_populations)
  wm.add('0-10m',cc_pop_1)
  wm.add('10m-1bn',cc_pop_2)
  wm.add('>1bn',cc_pop_3)
  wm.render_to_file('world_population.svg')

  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129086.html

相关文章

  • 常用的数据视化工具

    摘要:俗话说,不会使用工具来完成任务的都是进化不完全的表现,大数据时代,可视化已经深深钻进我们的生活,使用可视化工具也变的相当普遍,今天我们来总结下当下可视化工具都有哪些。是一个地图库,主要面向数据可视化用户。 俗话说,不会使用工具来完成任务的都是进化不完全的表现,大数据时代,可视化已经深深钻进我们的生活,使用可视化工具也变的相当普遍,今天我们来总结下当下可视化工具都有哪些。 showImg...

    philadelphia 评论0 收藏0
  • ArcGIS水文分析实战教程(10)河流平均比降计算

    摘要:水文分析实战教程河流平均比降计算本章导读河流比降指的是河流任意两端点间的高程差与两点间的水平距离之比值,简单的概括为单位河长内的落差,其单位一般都是。读者可以参考水文分析实战教程河流提取与河网分级的做法去提取。 ArcGIS水文分析实战教程(10)河流平均比降计算 本章导读:河流比降指的是河流任意两端点间的高程差与两点间的水平距离之比值,简单的概括为单位河长内的落差,其单位一般都是‰ ...

    zhangrxiang 评论0 收藏0
  • 爬取淘宝上4000条月饼数据制作了一个酷炫的视化屏!

    摘要:基于此,我爬取了淘宝上多条月饼的销售数据,为大家展示了一幅漂亮的可视化大屏,解决大家心目中的问题。模块的安装与配置这次爬取淘宝,采用的是最简单的方式控制浏览器进行自动化操作,中途只需要扫码登陆一次,即可完成整个数据的爬取。 ...

    cod7ce 评论0 收藏0
  • ⚡机器学习⚡中Python实现视化三维热力图(形图

    由于项目的需要,一直苦于将多层数据集累加起来做成一个呈堆积状的三维图,有点类似于地形图(实则热力图),但又不是地形图。 背景 先说说项目背景,本菜鸡是搞故障诊断的,所以免不了用上一些统计学的知识,看过之前我的Blog的都会发现, T 2 ...

    Acceml 评论0 收藏0
  • 小企业需要数据分析吗?

    摘要:这些功能和词汇听起来非常复杂,似乎对业务人员要求很高,但像网易有数这样的敏捷可视化分析工具不仅具备这样的能力,而且易学易用,业务人员只需简单拖拽,就能轻松制作出兼具敏捷分析与精美展示的报告。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 在回答小企业是否需要数据分析这个问题之前,不妨先想想下面两个问题: 你在电脑上建过表格吗? 你基于表格中的数据画过柱形图、饼状图、折线图吗? 可...

    baishancloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<