美文网首页数据分析Python新世界
国家统计局居然也能用的上Python?人口数据Python脚本了

国家统计局居然也能用的上Python?人口数据Python脚本了

作者: 919b0c54458f | 来源:发表于2018-11-07 14:01 被阅读16次

    通过采集国家统计局“国家数据”网站中提供的中国历年人口数据,并对数据进行可视化的探索,发现了一些有意思和令人深思的现象和趋势。

    有一些小伙伴后台留言希望公布一下采集“国家数据”网站人口数据的代码,在这里,就将总人口、人口出生率、人口年龄结构和人口平均寿命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)

    人口平均预期寿命

    进群:548377875 即可获取数十套PDF哦!

    包含年份、平均预期寿命、男性平均预期寿命、女性平均预期寿命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?人口数据Python脚本了

        本文链接:https://www.haomeiwen.com/subject/fgqvxqtx.html