数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结

本系列是数据可视化基础与应用的第04篇seaborn,是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。

参考

参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》,快来看看吧

数据集地址
https://www.kesci.com/mw/project/5fde03b883e4460030a8dc3d/dataset

数据集介绍

2010年各地区分年龄,性别人口数据

背景描述
数据为中国2010年人口普查资料,包含2010年各地区分年龄、性别的人口,各地区分性别的户籍人口, 2010年(城市,乡村,镇)各地区分年龄、性别的人口

数据说明
1-7c 各地区分年龄、性别的人口(乡村).csv
1-7b 各地区分年龄、性别的人口(镇).csv
1-7a 各地区分年龄、性别的人口(城市).csv
1-3 各地区分性别的户籍人口.csv
各地区分年龄、性别的人口.csv
数据来源

中国2010年人口普查资料

问题描述
20年来出生男女比例变化?
男女找对象的合适年龄假设?初婚和再婚?
基于以上假设,哪个省份的男生以后找女朋友会越来越难?
结合结婚率、离婚率、民族、地域等信息,进一步猜测00后找女朋友的趋势变化

案例

#导入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.style.use('fivethirtyeight')from warnings import filterwarnings
filterwarnings('ignore')
#读取各地区分年龄、性别的人口
pcount = pd.read_csv('/home/kesci/input/GENDER8810/各地区分年龄、性别的人口.csv',skiprows=2)
"""
2010年各地区分年龄,性别人口数据
背景描述数据为中国2010年人口普查资料,包含2010年各地区分年龄、性别的人口,各地区分性别的户籍人口, 2010年(城市,乡村,镇)各地区分年龄、性别的人口
数据说明1-7c 各地区分年龄、性别的人口(乡村).csv
1-7b 各地区分年龄、性别的人口(镇).csv
1-7a 各地区分年龄、性别的人口(城市).csv
1-3 各地区分性别的户籍人口.csv
各地区分年龄、性别的人口.csv
"""

1. 探索性分析并处理数据

pcount.head()

输出为:
在这里插入图片描述

pcount.info()

输出为:
在这里插入图片描述

1.1 删除多余的列
#删除所有值为na的列 
pcount=pcount.dropna(axis=1,how='all') 
1.2 处理表头
def rename(frame):for i in range(frame.shape[1]):frame.iloc[1,0]='地区'if frame.iloc[1,i]=='小计':frame.iloc[1,i]='小计'+ '_'+str(frame.iloc[0,i])elif frame.iloc[1,i]=='男':frame.iloc[1,i]='男' + '_' + str(frame.iloc[0,i-1])elif frame.iloc[1,i]=='女':frame.iloc[1,i]='女' + '_' + str(frame.iloc[0,i-2])rename(pcount)
pcount.head()

输出为:
在这里插入图片描述

1.3 透视数据
pcount.columns = pcount.iloc[1,]
pcount.columns

输出为:
在这里插入图片描述

pcount = pcount.iloc[2:,:]
pcount

输出为:
在这里插入图片描述

pcounts = pcount.set_index("地区").stack().reset_index()
pcounts

输出为:
在这里插入图片描述

pcounts.columns = ['地区','类别','统计人数']
pcounts

输出为:
在这里插入图片描述

1.4 处理空格(数据量大的话不建议这么做)
def replace_r(frame):for i in range(frame.shape[0]):frame.iloc[i,0] = frame.iloc[i,0].replace(" ",'')frame.iloc[i,1] = frame.iloc[i,1].replace(" ",'')replace_r(pcounts)
pcounts

输出为:
在这里插入图片描述

1.5 增加统计列
pcounts['年龄段'] = pcounts['类别'].str.split('_').str[-1]
pcounts['性别'] = pcounts['类别'].str.split('_').str[0]
#将统计人数转换为数值
pcounts['统计人数']=pcounts['统计人数'].astype('int')

2. 可视化部分

2.1 我国人口总数
plt.figure(1,figsize=(16,6))
plt.subplot(1,2,1)
sns.barplot(y=['全国人口总数','男性人口总数','女性人口总数'],x=[1337376754,687562046,649814708],color='CadetBlue')
plt.title("全国人口总数",loc='left')
plt.xticks(fontsize=12)
plt.yticks(fontsize=13)plt.subplot(1,2,2)
patches,l_text,p_text=plt.pie([687562046,649814708],labels=['男性','女性'],autopct='%.2f%%',colors=['CadetBlue','DarkSalmon'],explode=[0,0.05],startangle=90)
plt.title('不同性别占全国人口总数的百分比')
plt.axis('equal')
plt.show()

输出为:
在这里插入图片描述

2.1 人口年龄结构金字塔(左边女右边男)
result = pcounts[(pcounts['性别'].isin(['男','女']))&(pcounts['地区']=='全国')&(pcounts['年龄段']!='合计')]
result

输出为:
在这里插入图片描述

result['人口占比'] =( result['统计人数']/result['统计人数'].sum()*100).round(2)
result

输出为:
在这里插入图片描述

# 女性占比
-result[result['性别']=='女']['人口占比'].values

输出为:
在这里插入图片描述

plt.figure(figsize=(12,8))bar_plot = sns.barplot(y = result['年龄段'].unique(), x = -result[result['性别']=='女']['人口占比'].values, color = "DarkSalmon", data = result,order = result['年龄段'].unique()[::-1],)
bar_plot = sns.barplot(y = result['年龄段'].unique(), x = result[result['性别']=='男']['人口占比'].values, color = "CadetBlue",data = result,order = result['年龄段'].unique()[::-1],)plt.xticks([-5,-3,-1,0,1,3,5],[5,3,1,0,1,3,5])
# plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = True
bar_plot.set(xlabel="人口占比(%)", ylabel="年龄层", title = "2010中国人口普查年龄结构金字塔")
plt.show()

输出为:
在这里插入图片描述

2.2 差异
data = {'index': result['年龄段'].unique(),'男': result[result['性别']=='男']['人口占比'].values,'女': result[result['性别']=='女']['人口占比'].values,}
Data = pd.DataFrame(data)
Data['差异']=Data['男']-Data['女']
plt.figure(1,figsize=(12,8))
sns.lineplot(x=Data['index'],y=Data['差异'],color='DarkSalmon')
plt.xlabel("年龄层")
plt.ylabel("人口占比(%)")
plt.title("各年龄层的 男 VS 女(占比)的差异")
plt.xticks(rotation=35)
plt.show()

输出为:
在这里插入图片描述

2.3 北京、上海、广东地区的人口年龄结构金字塔(左边女右边男)
plt.figure(1,figsize=(18,16))
n = 0
for x in ['北京','上海','广东']:result = pcounts[(pcounts['性别'].isin(['男','女']))&(pcounts['地区'] == x )&(pcounts['年龄段']!='合计')]result['人口占比'] =( result['统计人数']/result['统计人数'].sum()*100).round(2)n +=1plt.subplot(2,3,n)bar_plot = sns.barplot(y = result['年龄段'].unique(), x = -result[result['性别']=='女']['人口占比'].values, color = "DarkSalmon", data = result,order = result['年龄段'].unique()[::-1],)bar_plot = sns.barplot(y = result['年龄段'].unique(), x = result[result['性别']=='男']['人口占比'].values, color = "CadetBlue",data = result,order = result['年龄段'].unique()[::-1],)plt.xticks([-7,-5,-3,-1,0,1,3,5,7],[7,5,3,1,0,1,3,5,7])plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']plt.rcParams['axes.unicode_minus'] = Truebar_plot.set(xlabel="人口占比(%)", ylabel="年龄层", title = x )plt.ylabel('')
plt.show()   

输出为:
在这里插入图片描述

上图这三个地区还是比较突出的但不容易看出男女差异,我们再来一个性别的对比图

plt.figure(1,figsize=(18,16))
n = 0
for x in ['北京','上海','广东']:result = pcounts[(pcounts['性别'].isin(['男','女']))&(pcounts['地区'] == x )&(pcounts['年龄段']!='合计')]n +=1plt.subplot(2,3,n)sns.barplot(x='统计人数',y='年龄段',hue='性别',data=result,palette=['CadetBlue','DarkSalmon'],order=result['年龄段'].unique()[::-1])plt.title(x)plt.xticks(rotation=35)plt.ylabel('')
plt.show()

输出为:
在这里插入图片描述

不难发现这三个地区的男女比例失衡,在中青年这个年龄段较为严重

2.4 人口分布地图
result1 = pcounts[(pcounts['性别']=='小计')&(pcounts['地区']!='全国')&(pcounts['年龄段']!='合计')]
result1

输出为:
在这里插入图片描述

result2 = result1.groupby('地区')['统计人数'].sum().reset_index(name='统计人数')
result2

输出为:
在这里插入图片描述

# pip install pyecharts
# from pyecharts.globals import CurrentConfig,OnlineHostType
# CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST
from pyecharts.charts import Map
from pyecharts import options as opts
x_data = result2['地区'].tolist()
y_data = result2['统计人数'].tolist()
x_data

输出为:
在这里插入图片描述

name_translate = {"宁夏回族自治区":"宁夏","河南省":"河南","北京市":"北京","河北省":"河北","辽宁省":"辽宁","江西省":"江西",
"上海市":"上海","安徽省": "安徽","江苏省":"江苏","湖南省":"湖南","浙江省":"浙江","海南省":"海南",
"广东省":"广东","湖北省":"湖北", "黑龙江省": "黑龙江","陕西省":"陕西","四川省":"四川","内蒙古自治区":"内蒙古",
"重庆市":"重庆","广西壮族自治区":"广西","云南省":"云南","贵州省":"贵州","吉林省":"吉林","山西省":"山西",
"山东省":"山东","福建省":"福建","青海省":"青海","天津市":"天津","新疆维吾尔自治区":"新疆","西藏自治区":"西藏",
"甘肃省":"甘肃","大连市":"大连", "东莞市":"东莞","宁波市":"宁波","青岛市":"青岛","厦门市":"厦门","台湾省":" ","澳门特别行政区":" ",
"香港特别行政区":" ","南海诸岛":" "}
# 地图
map1 = Map()
map1.add("", [list(z) for z in zip(x_data, y_data)],"china",name_map=name_translate) 
map1.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
map1.set_global_opts(title_opts=opts.TitleOpts(title='全国各地区人口分布'),
visualmap_opts=opts.VisualMapOpts( max_=result2['统计人数'].max(),
min_ =result2['统计人数'].min(),is_piecewise=False))
map1.render_notebook() 

输出为:
在这里插入图片描述

2010年的人口普查数据显示:广东省、山东省、河南省、四川省、江苏省 是总人口数前 5 的地区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B3647 【模板】Floyd

【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三个整数 u …

dalle2介绍

dalle2是一个基于强化学习的图像生成模型,是dalle模型的改进版本。它由OpenAI团队开发,旨在生成高质量的、多样化的图像。 dalle2的核心思想是利用强化学习将图像生成过程转化为一个马尔可夫决策过程。它采用了一个称为"敌对生成网络"&#x…

7 种实现 CSS 三角形的原理与方法 以及 三角形在网页设计中的作用

三角形在网页设计中不仅是图形设计的基本元素,更是实现视觉引导、空间构建、情绪传达、品牌塑造、性能优化以及创新表达的重要工具。其广泛应用和多功能性使其成为设计师手中不可或缺的设计语言组成部分。本文介绍了7种CSS实现三角形的方法。 CSS实现三角形主要有以…

Gin中间件函数原理

在Gin框架中,Context.Next() 方法是中间件处理的核心,它控制着请求处理链(HandlersChain)中的执行流。下面是对这个函数及相关概念的详细解释: func (c *Context) Next() 这个方法定义在 Context 结构体上&#xff0c…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序,以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方,欢迎指出纠错&…

AdaBoost 算法

目录 什么是 AdaBoost 算法? Adaboost 的 7 个优缺点 集成学习:人多力量大: Bagging:民主。Boosting :挑选精英。长短期记忆网络:引入遗忘机制 生成对抗网络 :物竞天择适者生存 首先,了解一下集成学习及 Boosting 算法 集成学习归属于机器学习,他是一种「训练思路…

Project Euler_Problem 159_Digital Root Sums of Factorisations

原题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; void solve() {ll i, j,k,x,y,z,p,q,u,v;N 1000000, NN 1024;//N 20;double a, b, c,d;M.NT.get_prime_Euler(2000000);for (i 2; i < N; i) {x (i-1)%91;for (j 2; j<sqrt(i); j) {if (i % j 0) {x …

SynchronizedMap 和 ConcurrentHashMap 有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SynchronizedMap 和 ConcurrentHashMap 有什么区别 锁的粒度:SynchronizedMap 使用全局锁,而 ConcurrentHashMap 使用锁分离技术,每个段有自己的…

宝妈如何在家创造收入?五种兼职工作让你轻松赚钱!

许多宝妈为了陪伴孩子成长&#xff0c;毅然选择了全职妈妈的角色&#xff0c;然而&#xff0c;她们内心仍希望能有一份收入&#xff0c;实现经济独立。于是&#xff0c;寻找既能照顾家庭又能赚钱的工作成了她们的迫切需求。 然而&#xff0c;这样的需求也往往让宝妈们成为一些…

WLAN故障处理

目录 一.wlan基础知识 1.wlan是什么 2.WLAN配置步骤 &#xff08;1&#xff09;AP上线 &#xff08;2&#xff09;业务配置 二.WLAN故障处理一般步骤 1.评估故障严重程度 2.收集信息填写故障报告 &#xff08;1&#xff09;组网信息 (2)运行状态 &#xff08;3&#…

Linux三剑客-sed、awk、egrep(上)

一、知识梗概 二、正则表达式 定义&#xff1a;正则表达式是一种强大的文本处理工具&#xff0c;用于在文本中搜索符合特定模式的字符串。它由一系列特殊字符和普通字符组成&#xff0c;可以定义复杂的搜索模式。正则表达式被广泛应用于各种编程语言和文本处理工具中。 简单来…

antDesignVue 使用-持续更新

背景 vue3viteantdesignvuevue-router 1,全局完整注册 1.1下载antdesignvue npm i --save ant-design-vue 或者 npm install ant-design-vuenext --save 1.2在mian.ts中引入 import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue …

微信跳转页面时发生报错

报错如下图所示&#xff1a; 解决方法&#xff1a;&#xff08;从下面四种跳转方式中任选一种&#xff0c;哪种能实现效果就用哪个&#xff09; 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

读书笔记:高效能人士的七个习惯

前言 恐惧感和不安全感 现代社会&#xff0c;太多的人饱受恐惧感的折磨。他们恐惧将来&#xff0c;恐惧失业&#xff0c;恐惧无力养家。这种弱点&#xff0c;常常助长了一种倾向&#xff1a;无论在工作时&#xff0c;还是回到家中&#xff0c;都倾向于零风险的生活&#xff0…

MathType2024中文网站7.9最新版本数学公式编辑器下载

MathType是一款专业的数学公式编辑器&#xff0c;由Design Science公司开发。它为用户提供了一个便捷的方式来创建和编辑复杂的数学公式&#xff0c;适用于各种文档和出版物。MathType与常见的文字处理软件和演示程序配合使用&#xff0c;能够在各种文档中加入复杂的数学公式&a…

【MYSQL】MySQL整体结构

无论你是前端还是后端&#xff0c;只要是一个合格的开发者&#xff0c;对于MySQL这个名词相信都不陌生&#xff0c;MySQL逐渐成为了最受欢迎的关系型数据库&#xff0c;无论你是大前端&#xff0c;亦或是Java、Go、Python、C/C、PHP....等这些语言的程序员&#xff0c;对于MySQ…

Linux下SPI驱动:SPI主机驱动简介

一. 简介 SPI 驱动框架和 I2C 很类似&#xff0c;都分为主机控制器驱动和设备驱动&#xff0c;主机控制器也就是 SOC的 SPI 控制器接口。 例如&#xff0c;在裸机篇中的《第二十七章 SPI 实验》&#xff0c;我们编写了 bsp_spi.c 和 bsp_spi.h 这两个文件&#xff0c;这…

Java类与对象:面向对象编程的基石

Java类与对象&#xff1a;面向对象编程的基石 1. 类与对象的概念2. 类的创建与使用3. 对象的创建与使用4. 类与对象的关系5. 封装与继承6. 示例代码解析7. 总结 在Java编程中&#xff0c;类与对象是面向对象编程的基础&#xff0c;它们为我们提供了一种抽象和封装的方法来描述现…

【JavaScript】ECMAScript/DOM/BOM

JavaScript介绍 Web早期&#xff0c;客户端校验网页表单会频繁地与服务端进行通信而消耗大量的网络资源&#xff0c;在网速本就很慢的时代&#xff0c;这十分影响用户交互体验。为了解决这一问题&#xff0c;网景作为当时引领技术革新的公司&#xff0c;计划为客户端开发一个脚…

vulhub靶场shiro系列漏洞复现CVE-2010-3863、CVE-2016-4437(shiro550)、CVE-2020-1957、shiro721

目录 shiro简介 shiro漏洞成因 shiro550 shiro721 利用过程 CVE-2010-3863&#xff08;未授权访问&#xff09; 简介 CVE-2016-4437(shiro550) 简介 CVE-2020-1957&#xff08;未授权访问&#xff09; 漏洞影响 简介 url处理过程 shiro721 影响版本 简介 利用 …