这篇文章用pandas对全球的人口数据做个简单分析。我收集全球各国1960-2019年人口数据,包含男女和不同年龄段,共6个文件。

pop_total.csv: 各国每年总人口

pop_female.csv:各国每年女性人口

pop_male.csv: 各国每年男性人口

pop_0_14.csv: 各国每年0-14岁人口

pop_15_64.csv: 各国每年15-64岁人口

pop_65up.csv:各国每年65岁以上人口

先用pandas读取文件数据import pandas as pd

pop_total = pd.read_csv('./data/pop_total.csv', skiprows=4)

pop_total.info()

pop_total.csv文件存放各国每年总人口数据,格式如下pop_total.head(2)

同样的方式,我们读取剩下的5个文件,对应的DataFrame分别是pop_female、pop_male、pop_0_14、pop_15_64、pop_65up。

为了直观观察全球人口分布,我们用pyecharts绘制2019年全球人口分布地图from pyecharts import options as opts

from pyecharts.charts import Timeline, Map

pop_total_2019 = pop_total[['Country Name', '2019']]

# 修改俄罗斯的英文名以便pyecharts能识别

pop_total_2019.loc[200, 'Country Name'] = 'Russia'

pop_world_map = (

Map()

.add("2019年", pop_total_2019.values, "world", is_map_symbol_show=False)

.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

.set_global_opts(

title_opts=opts.TitleOpts(title="全球人口"),

visualmap_opts=opts.VisualMapOpts(max_=100000000), # 超过1亿人口颜色最深(红色)

)

)

pop_world_map.render_notebook()

因为我们有50年的数据,所以我们还可以绘制一个全球人口分布变化的动图,类似之前写的全球疫情变化趋势图。因为代码跟上面类似,这里就不贴,源码包里能找到。

上面的图里我们只能定性的看到人口分布,下面我们定量地看看2019年全球人口top10的国家。# 2019年人口top10的国家

pop_total_2019_ordered = pop_total_2019.sort_values(by="2019" , ascending=False)

pop_total_2019_ordered.head()

排序后发现Country Name这列不只是单个国家,还包括了地区概念,这并不是我们想要的。记得之前做疫情地图的时候有一份国家中英文对应关系的名单,拿到这里用一下。from countries_ch_to_en import countries_dict

pop_top10 = pop_total_2019_ordered[pop_total_2019_ordered['Country Name']\

.isin(countries_dict.keys())][:10]

pop_top10

这样看起来就正常了,用seaborn将其绘制出来import seaborn as sns

sns.barplot(y=pop_top10['Country Name'], x=pop_top10['2019'])

可以看到,中国人口仍然位居全球第一,紧随其后的是印度,三哥也是拼了。令我惊讶的是巴基斯坦那么小的国土,人口超2亿,全球排第五,真是方方面面都要跟三哥死磕。

看完人口绝对值的排行,我们再来看看从2000年值2019年近20年时间各国人口增长率pop_tmp = pop_total[pop_total['Country Name']\

.isin(pop_top10['Country Name'])][['Country Name', '2000', '2019']]

pop_tmp['growth(%)'] = (pop_tmp['2019'] / pop_tmp['2000'] - 1) * 100

pop_tmp.sort_values(by="growth(%)" , ascending=False)

可以看到,中国虽然人口基数比较大,但近20年人口增长率确比较低,增加最快的top3分别是尼日利亚、巴基斯坦和印度。

看完总人口数据后,我们再看看性别分布,还是以2019年为例columns = ['Country Name', '2019']

# 抽数据,关联

pop_sex_2019 = pop_total[columns].merge(pop_male[columns], on = 'Country Name')

# 列名重命名

pop_sex_2019.rename(columns={'2019_x': 'total', '2019_y': 'male'}, inplace=True)

# 筛选出国家

pop_sex_2019 = pop_sex_2019[pop_sex_2019['Country Name'].isin(countries_dict.keys())]

# 计算女性人口

pop_sex_2019['female'] = pop_sex_2019['total'] - pop_sex_2019['male']

# 女性占比与男性占比的差值

pop_sex_2019['diff'] = (pop_sex_2019['female'] - pop_sex_2019['male']) / pop_sex_2019['total'] * 100

# 男性人口占比高于女性的 top15

sex_diff_top15 = pop_sex_2019.sort_values(by='diff')[0:15]

sns.barplot(y=sex_diff_top15['Country Name'], x=sex_diff_top15['diff'])

第一名是卡塔尔,男性人口比女性高50%,咱们中国男女比例也是失衡的,男性人口占比比女性高2%。

再来看看女性占比比男性高的国家sex_diff_top15 = pop_sex_2019.sort_values(by='diff', ascending=False)[0:15]

sns.barplot(y=sex_diff_top15['Country Name'], x=sex_diff_top15['diff'])

这个相差的幅度明显没那么大,top1也就差了8%,并且这些国家都不是人口大国。那我们来看看人口超过1亿的国家有哪些是女性占比超过男性pop_sex_2019[pop_sex_2019['total'] > 100000000].sort_values(by='diff', ascending=False)[0:5]

可以看到日本、墨西哥、巴西和美国这四个人口大国女性占比超过了男性。

性别也了解的差不多了,我们再来看看年龄分布。因为我比较关注各国年轻人群的占比,所以我们先对各国0-14岁人口占比进行排序。pop_0_14_2019 = pop_total[columns].merge(pop_0_14[columns], on = 'Country Name')

pop_0_14_2019.rename(columns={'2019_x': 'total', '2019_y': '0_14'}, inplace=True)

pop_0_14_2019['0_14_r(%)'] = pop_0_14_2019['0_14'] / pop_0_14_2019['total'] * 100

# 我们仍然只看大于1亿人的国家

pop_0_14_top = pop_0_14_2019[pop_0_14_2019['Country Name'].isin(countries_dict.keys())][pop_0_14_2019['total'] > 100000000]\

.sort_values(by='0_14_r(%)', ascending=False)[:15]

sns.barplot(y=pop_0_14_top['Country Name'], x=pop_0_14_top['0_14_r(%)'])

可以看到菲律宾、孟加拉国、印尼和印度等东南亚国家0-14岁人口占比远超中国,甚至美国也比我们要高。我们只有17%,这也是近几年世界工厂在往东南亚迁移的原因。

最后,我们再看看中国从1960年至2019年中国各年龄段人口占比的变化趋势# 筛选我们需要的列

pop_0_14_ch = pop_0_14[pop_0_14['Country Name'] == 'China'].drop(['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code',\

'Unnamed: 64'], axis=1)

#列(年份)转行

pop_0_14_ch_unstack = pop_0_14_ch.unstack()

# 重新构造DateFrame

pop_0_14_ch = pd.DataFrame(pop_0_14_ch_unstack.values, \

index=[x[0] for x in pop_0_14_ch_unstack.index.values], columns=['0_14'])

pop_0_14_ch.head()

同样的方式,处理一下其他两个年龄段# 15-64岁

pop_15_64_ch = pop_15_64[pop_15_64['Country Name'] == 'China'].drop(['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code',\

'Unnamed: 64'], axis=1)

pop_15_64_ch_unstack = pop_15_64_ch.unstack()

pop_15_64_ch = pd.DataFrame(pop_15_64_ch_unstack.values,\

index=[x[0] for x in pop_15_64_ch_unstack.index.values], columns=['15_64'])

# 65岁以上

pop_65up_ch = pop_65up[pop_65up['Country Name'] == 'China'].drop(['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code',\

'Unnamed: 64'], axis=1)

pop_65up_ch_unstack = pop_65up_ch.unstack()

pop_65up_ch = pd.DataFrame(pop_65up_ch_unstack.values, \

index=[x[0] for x in pop_65up_ch_unstack.index.values], columns=['65up'])

将各年龄人口按照年份关联起来,然后计算总人口以及各年龄段人口占比pop_age_level = pop_0_14_ch.merge(pop_15_64_ch.merge(pop_65up_ch, left_index=True, right_index=True), left_index=True, right_index=True)

pop_age_level['total'] = pop_age_level['0_14'] + pop_age_level['15_64'] + pop_age_level['65up']

pop_age_level['0_14(%)'] = pop_age_level['0_14'] / pop_age_level['total'] * 100

pop_age_level['15_64(%)'] = pop_age_level['15_64'] / pop_age_level['total'] * 100

pop_age_level['65up(%)'] = pop_age_level['65up'] / pop_age_level['total'] * 100

pop_age_level.head()

最后我们来画一个堆叠柱状图展示pop_age_level['year'] = pop_age_level.index

pop_age_level.plot.bar(x='year', y=['0_14(%)', '15_64(%)', '65up(%)'], stacked=True, figsize=(15,8), fontsize=10, rot=60)

可以放大后看看,蓝色的是0-14岁人口,六七十年代,中国0-14岁人口占比40%多,算是挺高的了,随着80年代实行计划生育,0-14岁人口开始下降,一直降到现在的17%,少的有点可怜了。现在国家放开二胎,也是希望未来我们能有更多的年轻人,这样才能增强我们的国际竞争力。

我的分析就到这里了,有兴趣的朋友可以自行探索,数据和源码已经打包,公众号回复关键字人口即可。

欢迎公众号 「渡码」,输出别地儿看不到的干货。

python人口数字预测_Python数据分析之全球人口数据相关推荐

  1. python计算人口增长率_Python数据分析之全球人口数据

    这篇文章用pandas对全球的人口数据做个简单分析.我收集全球各国1960-2019年人口数据,包含男女和不同年龄段,共6个文件. pop_total.csv: 各国每年总人口 pop_female. ...

  2. python 分位数计算代码_Python数据分析第十一节 数据运算

    数据运算不仅仅是加减乘除的基本运算,还要包括数据的比较,汇总和相关性的计算等等,这一节我们将计算的问题帮大家汇总出来- 目录 一. 加减乘除运算 二. 比较运算 三. 汇总运算 count 非空值计数 ...

  3. python按指定条件筛选_求Python筛选数字集合内满足指定条件的数据方法,python筛选,唯一匹配是指mdash...

    求Python筛选数字集合内满足指定条件的数据方法,python筛选,唯一匹配是指&mdash 唯一匹配是指----任何找出来的一对数中,位于一个集合中的数只能和另一个集合中的唯一 一个数匹配 ...

  4. Python数据分析之全球人口数据

    这篇文章用 pandas 对全球的人口数据做个简单分析.我收集全球各国1960-2019年人口数据,包含男女和不同年龄段,共6个文件. 很多人学习python,不知道从何学起. 很多人学习python ...

  5. python pd Series 添加行_Python数据分析与挖掘的常用工具

    Python语言:简要概括一下Python语言在数据分析.挖掘场景中常用特性: 列表(可以被修改),元组(不可以被修改) 字典(结构) 集合(同数学概念上的集合) 函数式编程(主要由lambda(). ...

  6. python模型预测_用Python如何进行预测型数据分析

    数据分析一般分为探索性数据分析.验证型数据分析和预测型数据分析.上一篇讲了如何用Python实现验证型数据分析(假设检验),文章链接:转变:用Python如何实现"假设检验"​zh ...

  7. 如何用Python进行股票预测,数据分析带你从小白开始

    在开始这个话题之前请先记住一句友情提醒:股市有风险,投资需谨慎 我们写这个文章并不是鼓励大家去入市,小编本人也不买股票.我们只是在探索Python在股票分析和预测上面能发挥什么样的作用! 对于和数据打 ...

  8. python范围数字求和_Python范围()

    python范围数字求和 Python range() function is a utility function to generate the list of numbers. The list ...

  9. python输出数字怎么办_python怎么输出数字

    Python数字运算 Python 解释器可以作为一个简单的计算器:您可以在解释器里输入一个表达式,它将输出表达式的值. 表达式的语法很直白: +, -, * 和/ 和在许多其它语言(如Pascal或 ...

最新文章

  1. 紫书 习题 10-44 UVa 11246 ( 容斥原理)
  2. 20159206 《网络攻防实践》第九周学习总结
  3. 借助office web apps实现在线预览和在线编辑
  4. IIS Express 使用详细说明
  5. cnn文本分类python实现_CNN文本分类
  6. 使TextView里面的文字滚动起来
  7. 科大讯飞输入法解锁高效语音输入
  8. 三言两语聊Python模块–文档测试模块doctest
  9. 软件项目开发与管理(单代号网络图参考例题)
  10. 计算机怎么取消账户密码怎么设置,电脑开机密码怎么设置以及取消
  11. 电脑使用小常识(2):新手装软件指南,防止流氓软件
  12. postgresql 数据库健康巡检 报告
  13. 【数据分析】基于RFM模型的线上零售中的客户细分(一):客户细分
  14. 看《我是特种兵》有感
  15. PaddlePaddle七日训练营心得体会
  16. 一、C++面向对象高级编程(下) (侯捷)
  17. 逆天了!看大二学生做的超写实CG卷尾猴!
  18. 信息化管理技术-制造执行系统(MES) – MES项目的规划和应用
  19. win10 蓝牙耳机 音量太小
  20. CSS3干货28:妙用 transition 实现中英文切换导航

热门文章

  1. 监控系统视频编码算法(REARCH PLAN)
  2. 企业内部管理英文缩写
  3. 自动语音识别技术(ASR)在聋哑儿童计算机辅助教学中的开发与应用
  4. 深信服防火墙多线路负载导致财务网银无法使用的解决办法
  5. 计算机显卡故障,电脑显卡故障如何解决_电脑显卡有问题怎么处理
  6. 干货 | 快速融入云原生,携程开源 Dubbo for Go 版本
  7. AI芯片领域的角逐才刚刚开始
  8. 计算机学院的学生该怎样提高自己的编程能力?
  9. PHPCMS v9 Getshell(Apache)
  10. 使用阿里云播放器时报错