探索性数据分析(EDA)的数据可视化 | 附代码

数据可视化是探索性数据分析的重要组成部分,因为它有助于分析和可视化数据,以获得对数据分布、变量之间的关系和潜在异常值的启示性见解。Python具有丰富的库,可以快速高效地创建可视化。在Python中,通常使用以下几种类型的可视化进行探索性数据分析:

  • 柱状图:用于显示不同类别之间的比较。

  • 折线图:用于显示随时间或不同类别的趋势。

  • 饼图:用于显示不同类别的比例或百分比。

  • 直方图:用于显示单个变量的分布。

  • 热图:用于显示不同变量之间的相关性。

  • 散点图:用于显示两个连续变量之间的关系。

  • 箱线图:用于显示变量的分布并识别异常值。

使用Python创建数据可视化的步骤:

  1. 理解业务问题:这是第一步,非常重要,因为我们将能够专注于获取正确的可视化。

  2. 导入必要的库:导入必要的库,例如Pandas、Seaborn、Matplotlib、Plotly等。

  3. 加载数据集:加载要可视化的数据集。

  4. 数据清理和预处理:清理和预处理数据,删除缺失值、重复值和异常值。此外,将分类数据转换为数值数据。

  5. 统计摘要:计算描述性统计量,例如均值、中位数、众数、标准差和相关系数,以了解变量之间的关系。

  6. 数据可视化与解释:创建可视化图表以了解数据的分布、关系和模式。之后解释可视化结果,从中获得关于数据的启示性见解和结论。

1. 理解业务问题

心血管疾病是全球死亡的主要原因。根据世界卫生组织的数据,每年约有1,790万人死于心脏病。其中85%的死亡是由心脏病发作和中风引起的。在本文中,我们将探索来自Kaggle的心脏病数据集,并使用Python创建用于探索性数据分析的数据可视化。

该数据集包含有关患者的数据,包括年龄、性别、血压、胆固醇水平以及是否患有心脏病发作等各种变量。该数据集的目标是根据患者的医疗属性预测其是否有心脏病发作的风险。

2.导入必要的库

python 复制代码
# import libraries
import pandas as pd
import numpy as np


# data visualization
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

3. 加载数据集

让我们将数据加载到一个Pandas DataFrame中,并开始探索它。

ini 复制代码
heart = pd.read_csv('heart.csv')

现在我们已经加载了数据,让我们看一下DataFrame的前几行,以了解数据的大致情况。

css 复制代码
heart.head()

我们可以看到数据集包含14列,包括目标列(输出),该列指示患者是否患有心脏病发作。现在让我们开始创建可视化图表。

4. 数据清理和预处理

数据清理的目的是准备好我们的数据进行分析和可视化。

cs 复制代码
# 检查是否存在任何空值
heart.isnull().sum().sort_values(ascending=False).head(11)

正如我们在这里看到的,这种情况下没有缺失值。

css 复制代码
# 检查重复值
heart.duplicated().sum()
php 复制代码
# 删除重复值
heart.drop_duplicates(keep='first', inplace=True)

现在我们的数据已经清理好了。

5. 统计摘要

css 复制代码
# 获取数据集的统计摘要
heart.describe().T

我们可以得出的主要结论是,对于大多数列,平均值与中位数(50th percentile: 50%)相似。

6. 数据可视化与解释

基于性别的数据可视化

bash 复制代码
# Compare Heart Attack vs Sex 
df = pd.crosstab(heart['output'],heart['sex'])


sns.set_style("white")


df.plot(kind="bar",
        figsize=(6,6),
        color=['#c64343', '#e1d3c1']);


plt.title("Heart Attack Risk vs Sex ", fontsize=16)
plt.xlabel("0 = Lower Risk                  1 = Higher Risk", fontsize=16)
plt.ylabel("Amount", fontsize=16)
plt.legend(["Female","Male"], fontsize=14)
plt.xticks(rotation=0)
php 复制代码
fig = px.pie(heart2,
            names= "sex",
            template= "presentation",
            hole= 0.6,
            color_discrete_sequence=['#e1d3c1', '#c64343']
            #color_discrete_sequence=px.colors.sequential.RdBu
            )


# layout
fig.update_layout(title_text='Gender Distribution',
                  title_x=0.5,
                  font=dict( size=18),
                  autosize=False,
                  width=500,
                  height=500,
                  showlegend=False)


fig.add_annotation(dict(x=0.5, y=0.5,  align='center',
                        xref = "paper", yref = "paper",
                        showarrow = False, font_size=22,
                        text="<span style='font-size: 26px; color=#555; font-family:Arial'>Gender<br></span>"))


fig.update_traces(textposition='outside',  textinfo='percent+label', rotation=20)
fig.show()

解释:男性患心脏病的风险更高。

基于年龄的数据可视化

cs 复制代码
plt.figure(figsize=(14,8))
sns.set(font_scale=1.2)
sns.set_style("white")


sns.countplot(x=heart["age"],
              palette='Reds')




plt.title("Count of Patients Age",fontsize=20)
plt.xlabel("Age",fontsize=16)
plt.ylabel("Count",fontsize=16)
plt.show()
cs 复制代码
# age based analysis
sns.set(font_scale=1.3)


plt.figure(figsize=(8,6))
sns.set_style("white")
sns.distplot(heart['age'],
             color='red',
             kde=True)




plt.title("Distribution of Patients Age",fontsize=20)
plt.xlabel("Age",fontsize=16)
plt.ylabel("Density",fontsize=16)
plt.show()

解释:大多数患者的年龄在50-60岁之间。其中,患者中年龄为58岁的人数最多。

基于胆固醇水平的数据可视化

markdown 复制代码
# Attack vs Cholesterol analysis
sns.set(font_scale=1.3)
plt.figure(figsize=(8,6))
sns.set_style("white")


sns.distplot(heart[heart["output"]==0]["chol"],
             color="blue")
sns.distplot(heart[heart["output"]==1]["chol"],
             color="red")


plt.title("Heart Attack Risk vs Cholesterol", size=20)
plt.xlabel("Cholesterol Level", fontsize=16)
plt.ylabel("Density", fontsize=16)
plt.legend(["Lower Risk","Higher Risk"], fontsize=14)
plt.show()
powershell 复制代码
plt.figure(figsize=(8,6))


sns.lineplot(y="chol",
             x="age",
             data=heart,
             color="red")
plt.title("Cholesterol with Age",fontsize=20)
plt.xlabel("Age",fontsize=16)
plt.ylabel("Cholesterol Level",fontsize=16)
plt.show()

解释:

  • 大多数患者的胆固醇水平在200-300之间。

  • 随着年龄的增长,体内胆固醇水平增加的可能性很高。

基于胸痛类型的数据可视化

cs 复制代码
# 心脏病发作与胸痛类型的关系
df = pd.crosstab(heart3['cp'], heart['output'])
# 使交叉表更加直观
sns.set(font_scale=1.3)
sns.set_style("white")
df.plot(kind='bar',
figsize=(11,7),
color=['#e1d3c1', '#c64343']);
plt.title("心脏病发作风险与胸痛类型的关系", fontsize=20)
plt.xlabel("胸痛类型", fontsize=16)
plt.ylabel("数量", fontsize=16)
plt.legend(['低风险','高风险'], fontsize=14)
plt.xticks(rotation=0);

解释:

  • 大多数患者属于典型心绞痛类型。

  • 非心绞痛患者患心脏病的风险更高。

基于相关性的数据可视化

makefile 复制代码
plt.figure(figsize=(12,10))
sns.set(font_scale=0.9)
sns.heatmap(heart.corr(),
annot=True,
cmap='Reds')
plt.title("变量间的相关性", size=15)
plt.show()

解释:

热图显示了以下变量之间的相关性:

  • 胸痛类型(cp)和输出

  • 达到的最大心率(thalachh)和输出

  • 斜率(sp)和输出

我们还可以看到以下变量之间存在较弱的相关性:

  • oldpeak:之前的峰值和输出

  • caa:主要血管数量和输出

  • exng:运动诱发性心绞痛

结论

在本文中,我们使用数据可视化来检查我们的数据集,创建了多个图表,如条形图、饼图、线图、直方图、热图。探索性数据分析(EDA)和数据可视化的主要目的是在做出任何假设之前帮助理解数据。它们帮助我们查看分布、摘要统计信息、变量之间的关系和异常值。

· END ·

HAPPY LIFE

本文仅供学习交流使用,如有侵权请联系作者删除

相关推荐
落魄君子2 小时前
GA-BP回归-遗传算法(Genetic Algorithm)和反向传播神经网络(Backpropagation Neural Network)
神经网络·数据挖掘·回归
martian6652 小时前
【人工智能数学基础】——深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用
人工智能·数学·分类·数据挖掘·贝叶斯
码农君莫笑2 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
終不似少年遊*2 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
界面开发小八哥6 小时前
「实战应用」如何用图表控件SciChart WPF实现应用程序的DPI感知?
信息可视化·wpf·数据可视化·图表·scichart wpf·scichart
梦想画家6 小时前
DuckDB:pg_duckdb集成DuckDB和PostgreSQL实现高效数据分析
postgresql·数据分析·duckdb·pg_duckdb
m0_748248657 小时前
解决前端笔记本电脑屏幕显示缩放比例125%、150%对页面大小的影响问题--数据可视化大屏
前端·信息可视化·电脑
終不似少年遊*9 小时前
美国加州房价数据分析02
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
BJ_bafangonline10 小时前
SPSS上传数据有缺失怎么办?
数据分析
赵钰老师13 小时前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言