【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
- 一、引言
- 二、数据探索
- 2.1 数据集介绍
- 2.2 数据清洗探索
- 三、单维度特征可视化
- 3.1 特征关系图
- 3.2 年龄和收入分布
- 3.3 婚姻状况柱状图
- 3.4 各职业平均收入
- 3.5 收入分布箱线图
- 33.6 性别与年龄的小提琴图
- 四、各个特征与收入关系的可视化
- 4.1 年龄与收入的散点图
- 4.2 教育水平与收入的散点图
- 4.3 性别与收入的箱线图
- 4.4 定居点规模与收入的关系
- 4.5 教育程度与收入的关系图
- 4.6 性别和教育与收入的关系
- 4.7 职业和婚姻与收入的关系
- 4.8 定居点规模和性别与收入的关系
- 4.9 年龄组和职业与收入的关系
- 4.10 教育和职业与收入的关系
- 4.11 性别、婚姻状况和教育与收入的关系
- 4.12 定居点规模和职业与收入的关系
- 4.13 年龄组和性别与收入的关系
一、引言
在社会经济研究中,数据可视化是揭示变量间关系、探索数据模式的强大工具。本文将利用包含2000个人口统计和社会经济信息的数据集,从多个维度进行可视化分析,深入探讨影响收入分配的因素以及各变量之间的关系。以下分析包括完整的Python代码实现,可供读者参考和复现。
二、数据探索
2.1 数据集介绍
该数据集包含以下变量:
- ID:唯一标识符
- 性别:0(女性)和1(男性)
- 婚姻状况:单身或非单身
- 年龄:个人年龄
- 教育程度:最高学历
- 收入:年收入
- 职业:工作分类
- 定居点规模:居住区域类型
2.2 数据清洗探索
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 加载数据
df = pd.read_csv('population_data.csv') # 请替换为实际文件路径
df['Marital status'] = df['Marital status'].apply(lambda x:x.replace(" (divorced / separated / married / widowed)",""))
df.info()
从上图我们可以发现:
- 数据有8个维度;
- 婚姻状况、教育程度、职业为类别型变量,其它的特征为数字型变量;
- 数据中一共有2000个样本,且缺失值的存在
三、单维度特征可视化
3.1 特征关系图
sns.pairplot(df,hue='Sex')
3.2 年龄和收入分布
plt.figure(figsize=(12, 5))plt.subplot(1, 2, 1)
sns.histplot(df['Age'], kde=True, color='teal', bins=40)
plt.title('Age Distribution')
plt.xlabel('Age')plt.subplot(1, 2, 2)
sns.histplot(df['Income'], kde=True, color='coral', bins=40)
plt.title('Income Distribution')
plt.xlabel('Income')plt.tight_layout()
plt.show()
3.3 婚姻状况柱状图
plt.figure(figsize=(8, 5))
sns.countplot(x='Marital status', data=df)
plt.title('Marital Status Distribution')
plt.xlabel('Marital Status')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
3.4 各职业平均收入
plt.figure(figsize=(10, 6))
order = df.groupby('Occupation')['Income'].mean().sort_values().index
sns.barplot(x='Income', y='Occupation', data=eda_df)
plt.title('Average Income by Occupation')
plt.xlabel('Average Income')
plt.ylabel('Occupation')
plt.tight_layout()
plt.show()
3.5 收入分布箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(y='Income', data=df)
plt.title('Income Distribution Box Plot')
plt.ylabel('Income')
plt.tight_layout()
plt.show()
33.6 性别与年龄的小提琴图
plt.figure(figsize=(8, 6))
sns.violinplot(x='Gender', y='Age', data=df)
plt.title('Age Distribution by Gender')
plt.xlabel('Gender')
plt.ylabel('Age')
plt.tight_layout()
plt.show()
四、各个特征与收入关系的可视化
4.1 年龄与收入的散点图
# 11. 年龄与收入的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Age', y='Income', data=df, hue='Sex')
plt.title('Age vs Income Relationship')
plt.xlabel('Age')
plt.ylabel('Income')
plt.legend(title='Gender')
plt.tight_layout()
plt.show()
4.2 教育水平与收入的散点图
plt.figure(figsize=(10, 6))
sns.stripplot(x='Education', y='Income', data=df)
plt.title('Income Distribution Across Education Levels')
plt.xlabel('Education Level')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.3 性别与收入的箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(x='Sex', y='Income', data=df)
plt.title('Income Distribution by Gender')
plt.xlabel('Gender')
plt.ylabel('Income')
plt.tight_layout()
plt.show()
4.4 定居点规模与收入的关系
plt.figure(figsize=(10, 6))
sns.boxplot(x='Settlement size', y='Income', data=df)
plt.title('Income Distribution by Settlement Size')
plt.xlabel('Settlement Size')
plt.ylabel('Income')
plt.tight_layout()
plt.show()
4.5 教育程度与收入的关系图
education_income_corr = df.groupby('Education')['Income'].mean().reset_index()
plt.figure(figsize=(8, 6))
sns.barplot(x='Education', y='Income', data=education_income_corr)
plt.title('Average Income by Education Level')
plt.xlabel('Education Level')
plt.ylabel('Average Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.6 性别和教育与收入的关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='Education', y='Income', hue='Gender', data=df)
plt.title('Income Variation with Education and Gender')
plt.xlabel('Education Level')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.7 职业和婚姻与收入的关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='Occupation', y='Income', hue='Marital status', data=df)
plt.title('Income Variation with Occupation and Marital Status')
plt.xlabel('Occupation')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.8 定居点规模和性别与收入的关系
plt.figure(figsize=(10, 6))
sns.barplot(x='Settlement size', y='Income', hue='Gender', data=df)
plt.title('Income Variation with Settlement Size and Gender')
plt.xlabel('Settlement Size')
plt.ylabel('Average Income')
plt.tight_layout()
plt.show()
4.9 年龄组和职业与收入的关系
# 创建年龄组
eda_df['Age Group'] = pd.cut(eda_df['Age'], bins=[0, 20, 30, 40, 50, 60, np.inf], labels=['0-20', '21-30', '31-40', '41-50', '51-60', '60+'])
plt.figure(figsize=(12, 6))
sns.boxplot(x='Occupation', y='Income', hue='Age Group', data=df, palette='viridis')
plt.title('Income Variation with Occupation and Age Group')
plt.xlabel('Occupation')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.10 教育和职业与收入的关系
plt.figure(figsize=(12, 6))
sns.barplot(x='Education', y='Income', hue='Occupation', data=df, palette='tab20')
plt.title('Income Variation with Education and Occupation')
plt.xlabel('Education Level')
plt.ylabel('Average Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.11 性别、婚姻状况和教育与收入的关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='Education', y='Income', hue='Gender', data=df[eda_df['Marital status'] == 'Married'], palette='Set2')
plt.title('Income Variation with Education and Gender (Married Individuals)')
plt.xlabel('Education Level')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.12 定居点规模和职业与收入的关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='Occupation', y='Income', hue='Settlement size', data=df, palette='coolwarm')
plt.title('Income Variation with Occupation and Settlement Size')
plt.xlabel('Occupation')
plt.ylabel('Income')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.13 年龄组和性别与收入的关系
plt.figure(figsize=(10, 6))
sns.barplot(x='Age Group', y='Income', hue='Sex', data=df, palette='pastel')
plt.title('Income Variation with Age Group and Gender')
plt.xlabel('Age Group')
plt.ylabel('Average Income')
plt.tight_layout()
plt.show()
从以上可视化结果可以看出:
- 年龄与收入:通常存在一定的正相关关系,但也会因职业和教育水平而异。
- 性别与收入:可能存在差异,帮助识别性别收入差距。
- 婚姻状况:不同婚姻状况对收入的影响可能反映出社会经济模式。
- 教育水平:与收入显著相关,较高教育水平通常对应较高收入。
- 职业与收入:不同职业的收入水平差异明显。
- 定居点规模:反映城乡收入差异,城市地区通常收入更高。
以上分析为理解影响收入分配的关键因素提供了多维度视角,并揭示了各变量之间的潜在关系,为进一步的社会经济研究和政策制定提供了数据支持。