首页 > Python资料 博客日记
EDA 2023 年世界国家suicide rate排名
2024-09-27 15:00:07Python资料围观48次
文章目录
前言:
随着社会的不断发展和变迁,人们对于各种社会问题的关注也在不断扩大。在这个信息爆炸的时代,数据分析成为了深入理解和解决社会问题的有力工具之一。在这篇博客中,我们将聚焦于一个备受关注的话题——suicide rate,并通过对 2023 年全球各国的suicide rate进行探索性数据分析(Exploratory Data Analysis, EDA),来了解这一问题在不同国家的表现。
suicide rate不仅是一个深刻的社会问题,也反映了一个国家在心理健康、社会福祉等方面的表现。通过对suicide rate进行综合分析,我们有望更全面地认识到这个问题的复杂性,为制定相应的预防和支持措施提供更科学、更精准的依据。
关于数据集
按性别和国家划分的suicide rate(年龄标准化,每 10 万人,世界卫生组织,2023 年)
列
- Country - 地区;
- All - 男 + 女;
- Male - 仅限男性;
- Female - 仅限女性;
- M/F - 女性与男性的比例;
- 2000 - 全部在 2000 年;
- Change% - 从 2000 年到 2023 年的百分比变化。
导入模块
-
import numpy as np: 引入NumPy库,通常用于进行数值计算和数组操作。
-
import pandas as pd: 引入Pandas库,用于数据操作和分析。常用的数据结构是DataFrame。
-
import matplotlib.pyplot as plt: 引入Matplotlib库,用于绘制静态图表。
-
%matplotlib inline: 这是一个Jupyter Notebook的魔术命令,用于在Notebook中直接显示Matplotlib图表。
-
import seaborn as sns: 引入Seaborn库,用于创建更美观的统计图表。
-
sns.set_theme(style=‘whitegrid’, palette=‘viridis’): 设置Seaborn的主题样式和调色板。
-
import plotly.express as px: 引入Plotly Express库,用于创建交互式图表。
-
import warnings 和 warnings.filterwarnings(‘ignore’): 用于忽略警告信息,可以使输出更整洁。
-
import os 和 for dirname, _, filenames in os.walk(‘/kaggle/input’): 用于遍历指定路径下的文件。
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set_theme(style='whitegrid', palette='viridis')
import plotly.express as px
import warnings
warnings.filterwarnings('ignore')
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
导入数据
df = pd.read_csv('/kaggle/input/world-countries-rankings-by-suicide-rate-2023/world_suicide_rate_2023.csv')
iso_map = pd.read_csv('/kaggle/input/country-mapping-iso-continent-region/continents2.csv')
df.head(10)
数据预处理
df.describe().T.style.background_gradient(cmap='Reds')
使用Pandas中DataFrame的describe()方法来获取数据集的基本统计信息,接着使用了.T进行转置,最后应用了样式,通过style.background_gradient(cmap=‘Reds’)实现了基于渐变色的背景。
这段代码的作用是创建一个渐变色的表格,以更直观地展示数据集的统计信息。颜色深浅表示数值的大小,通常在数据集较大时,这样的可视化方式有助于快速识别数据分布和趋势。
def summary(df):
summary_df = pd.DataFrame(df.dtypes, columns=['dtypes'])
summary_df['count'] = df.count().values
summary_df['unique'] = df.nunique().values
summary_df['missing#'] = df.isna().sum()
summary_df['missing%'] = df.isna().sum() / len(df)
return summary_df
summary(df).style.background_gradient(cmap='Reds')
生成了一个数据框,包含了数据框中每个列的一些摘要统计信息。具体来说:
- summary_df[‘dtypes’]: 列出每列的数据类型。
- summary_df[‘count’]: 计算每列的非缺失值数量。
- summary_df[‘unique’]: 计算每列的唯一值数量。
- summary_df[‘missing#’]: 计算每列的缺失值数量。
- summary_df[‘missing%’]: 计算每列缺失值在总数中的百分比。
通过.style.background_gradient(cmap=‘Reds’)为生成的摘要数据框应用了渐变色的样式,以提供更直观的可视化。
从返回结果可以得出,该数据中没有缺失值。
探索性数据分析
按性别划分的自杀率 [箱线图]
plt.figure(figsize=(8,6))
sns.boxplot(data=df[['Female', 'Male']])
plt.title('Box Plot: Suicide Rates by Gender')
plt.ylabel('Suicide Rate')
plt.tight_layout()
plt.show()
-
plt.figure(figsize=(8,6)): 设置图表的大小为8x6英寸。
-
sns.boxplot(data=df[[‘Female’, ‘Male’]]): 使用Seaborn的boxplot函数绘制箱线图,展示了"Female"和"Male"两列的数据分布情况。
-
plt.title(‘Box Plot: Suicide Rates by Gender’): 设置图表的标题。
-
plt.ylabel(‘Suicide Rate’): 设置y轴的标签。
-
plt.tight_layout(): 调整布局,确保图表不会被截断。
-
plt.show(): 显示图表。
男性自杀比例高
相关矩阵热图
num_cols = df.select_dtypes(include=['float64', 'int64']).columns.to_list()
ndf = df[num_cols].corr()
plt.figure(figsize=(8,6))
mask = np.triu(np.ones_like(ndf, dtype=bool))
sns.heatmap(ndf, annot=True, cmap='viridis', linewidths=.5, mask=mask)
plt.title('Heatmap of Correlation Matrix')
plt.tight_layout()
plt.show()
-
num_cols = df.select_dtypes(include=[‘float64’, ‘int64’]).columns.to_list(): 选择数据集中的数值型列,将列名存储在num_cols列表中。
-
ndf = df[num_cols].corr(): 创建一个包含数值型列之间相关系数的相关性矩阵。
-
plt.figure(figsize=(8,6)): 设置图表的大小为8x6英寸。
-
mask = np.triu(np.ones_like(ndf, dtype=bool)): 创建一个上三角形掩码,以隐藏相关性矩阵的下半部分,避免重复显示。
-
sns.heatmap(ndf, annot=True, cmap=‘viridis’, linewidths=.5, mask=mask): 使用Seaborn的heatmap函数创建热力图,颜色深浅表示相关性的强弱,同时在方格中显示相关系数的数值。
-
plt.title(‘Heatmap of Correlation Matrix’): 设置图表标题。
-
plt.tight_layout(): 调整布局,确保图表不会被截断。
-
plt.show(): 显示图表。
自杀率最高的 15 个国家
df[1:].head(15).style.background_gradient(cmap='Reds')
自杀率最高的是Lithuania.
变化百分比最高的 15 个国家/地区
top15_by_change = df[1:16].sort_values(by='Change%', ascending=False)
top15_by_change.head(15).style.background_gradient(cmap='Reds')
2023 年世界地图上自杀率的国家
df = df[1:]
iso_map = iso_map[['name', 'alpha-3']]
iso_map.rename(columns = {'name': 'Country', 'alpha-3': 'ISO_alpha'}, inplace=True)
iso_map['Country'] = iso_map['Country'].str.lower()
df['Country'] = df['Country'].str.lower()
-
iso_map = iso_map[[‘name’, ‘alpha-3’]]: 选择了iso_map数据框中的’name’和’alpha-3’两列。
-
iso_map.rename(columns={‘name’: ‘Country’, ‘alpha-3’: ‘ISO_alpha’}, inplace=True): 重命名了’iso_map’数据框的两列,将’name’列重命名为’Country’,将’alpha-3’列重命名为’ISO_alpha’。inplace=True表示直接在原始数据框上进行修改。
-
iso_map[‘Country’] = iso_map[‘Country’].str.lower(): 将’Country’列中的所有字符转换为小写字母,这样可以确保不同数据框中的国家名字的大小写一致。
-
df[‘Country’] = df[‘Country’].str.lower(): 同样,将’df’数据框中的’Country’列中的所有字符转换为小写字母。
df.head()
df = pd.merge(df, iso_map, on='Country', how='left')
-
pd.merge(df, iso_map, on=‘Country’, how=‘left’): 这行代码将df和iso_map两个数据框按照’Country’列进行左连接,即保留df中所有的行,并将iso_map中匹配的行合并进来。连接的方式由how参数指定,这里使用的是左连接(how=‘left’),表示以df为主表,按照’Country’列将两个数据框合并。
-
结果会生成一个新的数据框,包含了df中的所有列以及iso_map中的’ISO_alpha’列。on='Country’表示连接的键是’Country’列。
df.head(10)
xmap = px.choropleth(df, locations='ISO_alpha', color='All', scope='world', title='World Countries by Suicide Rates 2023',
color_continuous_scale='viridis', hover_name='Country')
xmap.show()
这里使用了Plotly Express库中的choropleth函数,创建了一个世界地图,用颜色表示不同国家的自杀率。让我为你解释一下:
- df: 指定要使用的数据框。
- locations=‘ISO_alpha’: 指定地理位置的列,这里是ISO_alpha,用于与地图上的国家/地区相匹配。
- color=‘All’: 指定用于着色的列,这里是’Suicide Rates’的总和(假设 ‘All’ 列在数据框中)。
- scope=‘world’: 指定地图的范围,这里是全球。
- title=‘World Countries by Suicide Rates 2023’: 设置地图的标题。
- color_continuous_scale=‘viridis’: 设置颜色的渐变色带。
- hover_name=‘Country’: 当鼠标悬停在地图上的特定国家时,显示国家名称。
- xmap.show(): 显示生成的地图。
结尾:
通过对 2023 年世界各国suicide rate的深入分析,我们不仅仅是在观察数字背后的故事,更是在寻找解决问题的线索。suicide rate问题是一个多维度的挑战,需要社会各界的共同努力来制定有效的预防和干预策略。通过数据分析,我们能够更清晰地看到suicide rate背后的社会、经济、文化等方面的影响因素,这为我们提供了更有针对性的解决方案的可能性。
希望这次的数据分析能够引起更多人对suicide 问题的重视,激发社会对心理健康的更深层关注。只有通过共同的关心和努力,我们才能够建设一个更加健康、关爱的社会。
标签:
上一篇:python 爬虫 selenium 笔记
下一篇:字典
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj