源码 | 国家统计局人口数据采集Python脚本

栏目: Python · 发布时间: 7年前

内容简介:中,州的先生(微信号:taoist_ling,公众号:zmister2016)通过采集国家统计局“国家数据”网站中提供的中国历年人口数据,并对数据进行可视化的探索,发现了一些有意思和令人深思的现象和趋势。有一些小伙伴后台留言希望公布一下采集“国家数据”网站人口数据的代码,在这里,就将总人口、人口出生率、人口年龄结构和人口平均寿命4项数据的代码公布出来,方便大家学习和使用。文章目录
在上一篇文章 《“一胎化”35年,Python可视化初探中国人口变化》

中,州的先生(微信号:taoist_ling,公众号:zmister2016)通过采集国家统计局“国家数据”网站中提供的中国历年人口数据,并对数据进行可视化的探索,发现了一些有意思和令人深思的现象和趋势。

有一些小伙伴后台留言希望公布一下采集“国家数据”网站人口数据的代码,在这里,就将总人口、人口出生率、人口年龄结构和人口平均寿命4项数据的代码公布出来,方便大家学习和使用。

文章目录

涉及到的模块

在这里使用到的第三方库有requests,通过pip命令即可直接安装:

pip install requests
 

使用到的内置库有:

  • json:用于解析接口返回的数据;
  • csv:用于将数据写入到CSV文件中;

同时使用到的header请求头为:

headers = {
    'Host': 'data.stats.gov.cn',
    'Connection': 'keep-alive',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Referer': 'http://data.stats.gov.cn/easyquery.htm?cn=C01',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}
 

生成年份列表

# 获取年份列表
def get_year_list():
    year_list = []
    for i in range(1949,2017):
        year_list.append(str(i))
    return year_list
 

总人口

总人口数据中包含年份、总人口、男性人口、女性人口、城镇人口、乡村人口5项,保存为总人口.csv文件:

# 总人口
def get_total_population():
    year_list = get_year_list()
    with open('总人口.csv', 'a+', encoding='utf-8', newline='') as files:
        fieldnames = ['年份', '年末总人口(万人)', '男性人口(万人)', '女性人口(万人)', '城镇人口(万人)', '乡村人口(万人)']
        writer = csv.DictWriter(files, fieldnames=fieldnames)
        writer.writeheader()
        for year in year_list:
            url = 'http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22sj%22%2C%22valuecode%22%3A%22{year}%22%7D%5D'.format(
                year=year)
            wbdata = requests.get(url, headers=headers)
            jsdata = json.loads(wbdata.text)
            data = jsdata['returndata']['datanodes']
            item = {
                '年份': year + '年',
                '年末总人口(万人)': data[0]['data']['data'],  # 年末总人口(万人)
                '男性人口(万人)': data[1]['data']['data'],  # 男性人口(万人)
                '女性人口(万人)': data[2]['data']['data'],  # 女性人口(万人)
                '城镇人口(万人)': data[3]['data']['data'],  # 城镇人口(万人)
                '乡村人口(万人)': data[4]['data']['data'],  # 乡村人口(万人)
            }
            print(item)
            writer.writerow(item)
 

人口出生率、死亡率和自然增长率

包含年份、出生率、死亡率、自然增长率4项数据,数据保存为出生死亡及自然增长率.csv文件:

# 人口出生率、死亡率和自然增长率
def get_birth_death_rate():
    year_list = get_year_list()
    with open('出生死亡及自然增长率.csv','a+',encoding='utf-8',newline='') as files:
        fieldnames = ['年份', '出生率', '死亡率', '自然增长率']
        writer = csv.DictWriter(files, fieldnames=fieldnames)
        writer.writeheader()
        for year in year_list:
            url = 'http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22sj%22%2C%22valuecode%22%3A%22{year}%22%7D%5D'.format(year=year)
            wbdata = requests.get(url,headers=headers)
            jsdata = json.loads(wbdata.text)
            data = jsdata['returndata']['datanodes']
            item = {
                '年份' : year+'年',
                '出生率' : data[0]['data']['data'], # 人口出生率
                '死亡率' : data[1]['data']['data'], # 人口死亡率
                '自然增长率' : data[2]['data']['data'], # 人口自然增长率
            }
            print(item)
            writer.writerow(item)
 

人口年龄结构及抚养比

包含年份、年末总人口、0-14岁人口、15-64岁人口、65岁及以上人口、总抚养比、少儿抚养比、老年抚养比8项数据,数据保存为人口年龄结构及抚养比.csv文件:

def get_age_structure():
    year_list = get_year_list()
    with open('人口年龄结构及抚养比.csv', 'a+', encoding='utf-8', newline='') as files:
        fieldnames = ['年份', '年末总人口(万人)', '0-14岁人口(万人)', '15-64岁人口(万人)', '65岁及以上人口(万人)', '总抚养比(%)', '少儿抚养比(%)', '老年抚养比(%)']
        writer = csv.DictWriter(files, fieldnames=fieldnames)
        writer.writeheader()
        for year in year_list:
            url = 'http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22sj%22%2C%22valuecode%22%3A%22{year}%22%7D%5D'.format(
                year=year)
            wbdata = requests.get(url, headers=headers)
            jsdata = json.loads(wbdata.text)
            data = jsdata['returndata']['datanodes']
            item = {
                '年份': year + '年',
                '年末总人口(万人)': data[0]['data']['data'],  # 年末总人口(万人)
                '0-14岁人口(万人)': data[1]['data']['data'],  # 0-14岁人口(万人)
                '15-64岁人口(万人)': data[2]['data']['data'],  # 15-64岁人口(万人)
                '65岁及以上人口(万人)': data[3]['data']['data'],  # 65岁及以上人口(万人)
                '总抚养比(%)': data[4]['data']['data'],  # 总抚养比(%)
                '少儿抚养比(%)': data[5]['data']['data'],  # 少儿抚养比(%)
                '老年抚养比(%)': data[6]['data']['data'],  # 老年抚养比(%)
            }
            print(item)
            writer.writerow(item)
 

人口平均预期寿命

包含年份、平均预期寿命、男性平均预期寿命、女性平均预期寿命4项数据,数据保存为人口平均预期寿命.csv文件:

def get_avg_life():
    year_list = get_year_list()
    with open('人口平均预期寿命.csv', 'a+', encoding='utf-8', newline='') as files:
        fieldnames = ['年份', '平均预期寿命(岁)', '男性平均预期寿命(岁)', '女性平均预期寿命(岁)']
        writer = csv.DictWriter(files, fieldnames=fieldnames)
        writer.writeheader()
        for year in year_list:
            url = 'http://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22sj%22%2C%22valuecode%22%3A%22{year}%22%7D%5D'.format(
                year=year)
            wbdata = requests.get(url, headers=headers)
            jsdata = json.loads(wbdata.text)
            data = jsdata['returndata']['datanodes']
            item = {
                '年份': year + '年',
                '平均预期寿命(岁)': data[0]['data']['data'],  # 男性平均预期寿命(岁)
                '男性平均预期寿命(岁)': data[1]['data']['data'],  # 人口死亡率
                '女性平均预期寿命(岁)': data[2]['data']['data'],  # 人口自然增长率
            }
            print(item)
            writer.writerow(item)
 

打包

同时,州的先生将 Python 代码和4类的人口数据打包在了一起并上传到了百度网盘上,有需要的小伙伴可以在州的先生微信公众号后台回复 0015 ,获取下载地址:

源码 | 国家统计局人口数据采集Python脚本

对代码有疑问的小伙伴欢迎添加州的先生私人微信号taoist_ling,交流讨论。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Music Recommendation and Discovery

Music Recommendation and Discovery

Òscar Celma / Springer / 2010-9-7 / USD 49.95

With so much more music available these days, traditional ways of finding music have diminished. Today radio shows are often programmed by large corporations that create playlists drawn from a limited......一起来看看 《Music Recommendation and Discovery》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具