使用Python进行数据可视化:从入门到实战

今天 5阅读

在当今的数据驱动世界中,数据可视化已经成为数据分析、科学研究和商业智能中的核心技能之一。通过图表、图形和交互式可视化,我们可以更直观地理解数据、发现趋势,并将复杂的分析结果以简洁的方式呈现给决策者。

本文将介绍如何使用 Python 进行数据可视化,涵盖常用库如 Matplotlib 和 Seaborn 的基本用法,并结合一个实际案例,展示如何对真实数据进行探索性分析与可视化呈现。


Python 中的数据可视化工具简介

Python 拥有丰富的第三方库用于数据可视化,其中最常用的包括:

Matplotlib:基础绘图库,功能强大,灵活性高。Seaborn:基于 Matplotlib,提供更高层次的接口,专注于统计图表。Plotly:支持交互式图表,适合网页应用。Bokeh:专为现代 Web 浏览器设计的交互式可视化库。Pandas 内置绘图功能:简化 DataFrame 数据的快速可视化。

在本篇文章中,我们将重点使用 matplotlibseaborn 来完成数据可视化任务。


环境准备

首先,确保你已经安装了以下库:

pip install matplotlib seaborn pandas numpy

然后导入必要的模块:

import matplotlib.pyplot as pltimport seaborn as snsimport pandas as pdimport numpy as np

加载示例数据集

我们使用 Seaborn 自带的“泰坦尼克号”数据集来进行演示:

# 加载数据集df = sns.load_dataset('titanic')# 查看前几行数据print(df.head())

输出结果大致如下:

   survived  pclass     sex   age  sibsp  parch     fare embarked  class    who  adult_male deck  embark_town alive  alone0         0       3    male  22.0      1      0   7.2500        S  Third    man        True  NaN  Southampton    no  False1         1       1  female  38.0      1      0  71.2833        C  First  woman       False    C    Cherbourg   yes  False2         1       3  female  26.0      0      0   7.9250        S  Third  woman       False  NaN  Southampton   yes   True3         1       1  female  35.0      1      0  53.1000        S  First  woman       False  NaN  Southampton   yes  False4         0       3    male  35.0      0      0   8.0500        S  Third    man        True  NaN  Southampton    no   True

基本图表绘制

1. 直方图(Histogram)

直方图用于显示数值型变量的分布情况。例如,我们可以查看乘客年龄的分布:

plt.figure(figsize=(10, 6))sns.histplot(df['age'].dropna(), bins=30, kde=True)plt.title('Passenger Age Distribution')plt.xlabel('Age')plt.ylabel('Frequency')plt.show()

这段代码会生成一张带有 KDE 曲线的年龄分布图。


2. 箱形图(Boxplot)

箱形图可以展示数据的离散程度和异常值。例如,查看不同舱位等级(pclass)的票价分布:

plt.figure(figsize=(10, 6))sns.boxplot(x='pclass', y='fare', data=df)plt.title('Fare Distribution by Passenger Class')plt.xlabel('Passenger Class')plt.ylabel('Fare')plt.show()

3. 散点图(Scatter Plot)

散点图用于观察两个连续变量之间的关系。例如,查看年龄与票价的关系:

plt.figure(figsize=(10, 6))sns.scatterplot(x='age', y='fare', hue='survived', data=df)plt.title('Age vs Fare (Colored by Survival)')plt.xlabel('Age')plt.ylabel('Fare')plt.legend(title='Survived')plt.show()

4. 分类计数图(Count Plot)

分类计数图可以展示某个类别变量中各分类的数量。例如,查看性别与生存率的关系:

plt.figure(figsize=(10, 6))sns.countplot(x='sex', hue='survived', data=df)plt.title('Survival Count by Gender')plt.xlabel('Gender')plt.ylabel('Count')plt.legend(title='Survived')plt.show()

进阶技巧:热力图与相关性分析

我们还可以使用热力图来展示变量之间的相关性矩阵。为了实现这一点,我们需要先对数据进行预处理:

# 对分类变量进行独热编码df_encoded = pd.get_dummies(df[['survived', 'pclass', 'age', 'sibsp', 'parch', 'fare', 'sex', 'embarked']])# 计算相关性矩阵corr = df_encoded.corr()# 绘制热力图plt.figure(figsize=(12, 10))sns.heatmap(corr, annot=True, cmap='coolwarm')plt.title('Correlation Heatmap')plt.show()

这张热力图可以帮助我们识别哪些变量之间存在较强的相关性,从而指导后续建模时的特征选择。


综合案例:探索性数据分析(EDA)

下面我们将综合使用以上技术,对泰坦尼克号数据集进行一次完整的探索性数据分析。

步骤 1:缺失值检查与处理

print(df.isnull().sum())

输出可能如下所示:

survived         0pclass           0sex              0age            177sibsp            0parch            0fare             0embarked         2...

我们发现 ageembarked 存在缺失值。这里我们采用填充策略:

df['age'].fillna(df['age'].median(), inplace=True)df['embarked'].fillna(df['embarked'].mode()[0], inplace=True)

步骤 2:构建组合特征

比如,我们可以创建一个新的特征:“家庭人数”:

df['family_size'] = df['sibsp'] + df['parch'] + 1

步骤 3:绘制新特征与生存率的关系

plt.figure(figsize=(10, 6))sns.barplot(x='family_size', y='survived', data=df)plt.title('Survival Rate by Family Size')plt.xlabel('Family Size')plt.ylabel('Survival Rate')plt.show()

总结

通过本文的学习,你应该掌握了以下内容:

如何使用 Python 中的 Matplotlib 和 Seaborn 库进行数据可视化;常见图表类型及其适用场景;如何处理数据并进行探索性数据分析;如何通过图表发现数据中的模式和潜在关系。

数据可视化不仅是数据分析的第一步,也是沟通数据洞察的重要手段。掌握这些技能将有助于你在数据分析、机器学习、产品优化等领域更加得心应手。


参考资料

Seaborn 官方文档Matplotlib 官方文档Kaggle Titanic Dataset

如果你对数据可视化还有兴趣,不妨尝试使用 Plotly 或 Bokeh 创建交互式图表,或者使用 Dash 构建仪表盘应用,进一步提升你的数据展示能力!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第772名访客 今日有15篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!