122万人的生活工作和死亡数据分析

Posted lanxiaofang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了122万人的生活工作和死亡数据分析相关的知识,希望对你有一定的参考价值。

一、数据概览

该数据集包含了超过100多万名已故人的生活、工作和死亡的结构化信息。

​ 数据集: ​​AgeDatasetV1.csv​​ 数据集来自kaggle 一共1223009条数据。

通过全球122万名人的死亡数据,我们可以了解大部分人的寿命,在过去哪些年份的死亡人数较多,哪些年份出生的人死亡人数较多,以及不同性别的死亡年龄趋势,不同职业的男性和女性的死亡人数。

在本案例中我们用到pandas,pyplot,seaborn绘饼状图、长条图、堆积条形图、折线图

列名

描述

Id,

编号

Name,

名字

Short description,

简述

Gender,

性别

Country,

国家

Occupation,

职业

Birth year,

出生年份

Death year,

逝世年份

Manner of death,

死亡方式

Age of death

去世年龄

二、数据预处理

发现有出生年份为负数的,其实是正常值,负值表示公元前。

import pandas as pd

df = pd.read_csv(.\\data\\AgeDatasetV1.csv)
df.info()

df.describe().to_excel(r.\\result\\describe.xlsx)
df.isnull().sum().to_excel(r.\\result\\nullsum.xlsx)
df[df.duplicated()].to_excel(r.\\result\\duplicated.xlsx)

df.rename(columns=lambda x: x.replace( , _).replace(-, _), inplace=True)
print(df.columns)
print(df[df[Birth_year] < 0].to_excel(r.\\result\\biryear0.xlsx))

122万人的生活工作和死亡数据分析_数据集

三、数据可视化

0、导入包和数据
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams[font.sans-serif] = [SimHei] # 显示中文标签
plt.rcParams[axes.unicode_minus] = False

df1 = pd.read_csv(./data/AgeDatasetV1.csv)
# 列名规范化 重命名
df1.rename(columns=lambda x: x.replace( , _).replace(-, _), inplace=True)
print(df1.columns)
1、按不同年龄范围的死亡率百分比
plt.figure(figsize=(12, 10))
count = [df1[df1[Age_of_death] > 100].shape[0],
df1.shape[0] - df1[(df1[Age_of_death] <= 100) & (df1[Age_of_death] > 90)].shape[0],
df1[(df1[Age_of_death] <= 90) & (df1[Age_of_death] > 70)].shape[0],
df1[(df1[Age_of_death] <= 70) & (df1[Age_of_death] > 50)].shape[0],
df1.shape[0] - (df1[df1[Age_of_death] > 100].shape[0] +
df1[(df1[Age_of_death] <= 100) & (df1[Age_of_death] > 90)].shape[0]
+ df1[(df1[Age_of_death] <= 70) & (df1[Age_of_death] > 50)].shape[0]
+ df1[(df1[Age_of_death] <= 90) & (df1[Age_of_death] > 70)].shape[0])
]

age = [> 100, > 90 & <= 100, > 70 & <= 90, > 50 & <= 70, < 50]
explode = [0.1, 0, 0.02, 0, 0] # 设置各部分突出

palette_color = sns.color_palette(pastel)

plt.rc(font, family=SimHei, size=16)
plt.pie(count, labels=age, colors=palette_color,
explode=explode, autopct=%.4f%%)
plt.title("按不同年龄范围的死亡率百分比")
plt.savefig(r.\\result\\不同年龄范围的死亡率百分比.png)
plt.show()

122万人的生活工作和死亡数据分析_折线图_02

我们可以发现90岁以上的死亡比例占了至少一半,70岁以上死亡的占了75%,大部分人还是长寿的,50岁之前就死亡的不到18%。

2、死亡人数前20的职业
Occupation = list(df1[Occupation].value_counts()[:20].keys())
Occupation_count = list(df1[Occupation].value_counts()[:20].values)
plt.rc(font, family=SimHei, size=16)
plt.figure(figsize=(14, 8))
# sns.set_theme(style="darkgrid")
p = sns.barplot(x=Occupation_count, y=Occupation) # 长条图
p.set_xlabel("人数", fontsize=20)
p.set_ylabel("职业", fontsize=20)
plt.title("前20的职业", fontsize=20)
plt.subplots_adjust(left=0.18)
plt.savefig(r.\\result\\死亡人数前20的职业.png)
plt.show()

122万人的生活工作和死亡数据分析_折线图_03

3、死亡人数前10的死因
top_causes = df1.groupby(Manner_of_death).size().reset_index(name=count)
top_causes = top_causes.sort_values(by=count, ascending=False).iloc[:10]
fig = plt.figure(figsize=(10, 6))
plt.barh(top_causes[Manner_of_death], top_causes[count], edgecolor=black) # 堆积条形图
plt.title(死亡人数前10的死因.png)
plt.xlabel(人数)
plt.ylabel(死因)
plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.savefig(r.\\result\\死亡人数前10的死因.png)
plt.show()

122万人的生活工作和死亡数据分析_数据_04

4、死亡人数前20的出生年份
birth_year = df1.groupby(Birth_year).size().reset_index(name=count)
birth_year = birth_year.sort_values(by=count, ascending=False).iloc[:20]
fig = plt.figure(figsize=(10, 6))
plt.barh(birth_year[Birth_year], birth_year[count])
plt.title(死亡人数前20的出生年份)
plt.xlabel(人数)
plt.ylabel(出生年份)
plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
plt.savefig(r.\\result\\死亡人数前20的出生年份.png)
plt.show()

122万人的生活工作和死亡数据分析_数据集_05

5、死亡人数前20的去世年份
death_year = df1.groupby(Death_year).size().reset_index(name=count)
print(death_year)
death_year = death_year.sort_values(by=count, ascending=False).iloc[:20]
fig = plt.figure(figsize=(10, 10))
plt.barh(death_year[Death_year], death_year[count])
plt.title(死亡人数前20的去世年份)
plt.xlabel(人数)
plt.ylabel(去世年份)
plt.tight_layout()
plt.savefig(r.\\result\\死亡人数前20的去世年份.png)
plt.show()

122万人的生活工作和死亡数据分析_折线图_06

6、按性别分列的死亡年龄趋势
data = pd.DataFrame(
df1.groupby([Gender, Age_of_death]).size().reset_index(name=count).sort_values(by=count, ascending=False))

fig = plt.figure(figsize=(10, 10))
sns.lineplot(data=data, x=Age_of_death, y=count, hue=Gender, linewidth=2) # 折线图
plt.legend(fontsize=8)
plt.title(按性别分列的死亡年龄趋势)
plt.xlabel(死亡年龄)
plt.ylabel(人数)
plt.tight_layout()
plt.savefig(r.\\result\\死亡人数前20的去世年份.png)
plt.show()

122万人的生活工作和死亡数据分析_折线图_07

7、前10的职业中 男性与女性的人数
occupation = pd.DataFrame(df1[Occupation].value_counts())
top10_occupation = occupation.head(10)
top_index = [i for i in top10_occupation.index]
age_data = df1[df1[Occupation].isin(top_index)]
age_data = age_data[age_data[Gender].isin([Male, Female])]
sns.catplot(data=age_data, x=Occupation, kind=count, hue=Gender, height=10)
plt.xticks(rotation=20)
plt.xlabel(职业)
plt.ylabel(人数)
plt.tight_layout()
plt.savefig(r.\\result\\前10的职业中男女性人数.png)
plt.show()

122万人的生活工作和死亡数据分析_数据_08


以上是关于122万人的生活工作和死亡数据分析的主要内容,如果未能解决你的问题,请参考以下文章

迈克尔·杰克逊的死因

大数据分析:车企不应轻视“隔壁老王”的实力,2020~2025年再婚人数有望突破500万人

10期末大作业

透彻影像:基于 TensorFlow 的病理辅助诊断系统

Redis:我承载了上千万人的火影青春

春节期间小游戏同时在线人数最高达2800万人/小时