使用Python进行数据可视化:从基础到实践

52分钟前 2阅读

在当今的数据驱动世界中,数据可视化(Data Visualization)是数据分析和决策支持的重要组成部分。通过图形化的方式展示数据,不仅可以帮助我们更直观地理解数据背后的信息,还能发现隐藏的模式和趋势。

Python 作为一种广泛使用的编程语言,在数据科学领域有着丰富的库和工具,如 matplotlibseabornplotlypandas 等。本文将介绍如何使用 Python 进行基本的数据可视化,并通过一个完整的项目示例来演示如何从原始数据中提取洞察力。


Python 数据可视化常用库简介

1. Matplotlib

Matplotlib 是 Python 中最常用的绘图库,提供了类似于 MATLAB 的绘图接口。它适用于创建静态、动态和交互式的图表。

pip install matplotlib

2. Seaborn

Seaborn 基于 matplotlib,封装了更高级的 API,使得绘制统计图表更加简单美观。

pip install seaborn

3. Plotly

Plotly 支持交互式图表,适合用于 Web 应用或 Jupyter Notebook 中展示动态数据。

pip install plotly

数据准备与探索

我们将使用 Kaggle 上的“泰坦尼克号”数据集(Titanic Dataset),该数据集包含了乘客的基本信息以及是否生还等字段。

你可以从 Kaggle - Titanic: Machine Learning from Disaster 下载数据集,或者直接使用 pandas 加载:

import pandas as pd# 加载训练数据df = pd.read_csv('train.csv')# 查看前5行数据print(df.head())

输出示例:

   PassengerId  Survived  Pclass  \0            1         0       3   1            2         1       1   2            3         1       3   3            4         1       1   4            5         0       3                                                   Name     Sex   Age  SibSp  \0                            Braund, Mr. Owen Harris    male  22.0      1   1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   2                             Heikkinen, Miss. Laina  female  26.0      0   3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   4                           Allen, Mr. William Henry    male  35.0      0      Parch            Ticket        Fare Cabin Embarked  0      0         A/5 21171  7.2500   NaN        S  1      0          PC 17599 71.2833     C85        C  2      0  STON/O2. 3101282  7.9250   NaN        S  3      0            113803 53.1000   NaN        S  4      0            373450  8.0500   NaN        S

数据可视化实战

1. 年龄分布直方图

我们可以使用 matplotlib 来查看乘客年龄的分布情况:

import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))plt.hist(df['Age'].dropna(), bins=20, color='skyblue', edgecolor='black')plt.title('Passenger Age Distribution')plt.xlabel('Age')plt.ylabel('Number of Passengers')plt.grid(True)plt.show()

这段代码展示了年龄分布的直方图,可以看出大多数乘客集中在 20-40 岁之间。


2. 生还率与性别的关系

我们可以使用 seaborn 来绘制柱状图,显示性别对生存率的影响:

import seaborn as snssns.set(style="whitegrid")plt.figure(figsize=(8, 6))sns.barplot(x='Sex', y='Survived', data=df, ci=None)plt.title('Survival Rate by Gender')plt.ylabel('Survival Rate')plt.xlabel('Gender')plt.show()

结果表明女性的生存率明显高于男性。


3. 不同舱位等级的生存率对比

我们也可以分析乘客的舱位等级(Pclass)与生存率之间的关系:

plt.figure(figsize=(8, 6))sns.barplot(x='Pclass', y='Survived', hue='Sex', data=df, ci=None)plt.title('Survival Rate by Pclass and Gender')plt.xlabel('Pclass')plt.ylabel('Survival Rate')plt.legend(title='Gender')plt.show()

可以看到,无论男女,一等舱乘客的生存率都高于其他舱位。


4. 使用 Plotly 绘制交互式散点图

我们可以使用 plotly 创建一个交互式图表,展示票价与年龄的关系:

import plotly.express as pxfig = px.scatter(df, x='Age', y='Fare', color='Survived',                 title='Age vs Fare by Survival Status',                 labels={'Age': 'Age of Passenger', 'Fare': 'Ticket Fare'},                 hover_data=['Name', 'Sex', 'Pclass'])fig.show()

这个交互式图表可以让你点击每个点查看详细信息,非常适合在报告或网页中嵌入。


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

我们可以使用 seaborn 绘制热力图来查看数值型变量之间的相关性:

corr = df[['Age', 'Fare', 'Survived']].corr()plt.figure(figsize=(8, 6))sns.heatmap(corr, annot=True, cmap='coolwarm')plt.title('Correlation Heatmap')plt.show()

虽然 AgeSurvived 的相关性较低,但 FareSurvived 有正相关趋势,说明票价越高的人生存几率可能更高。


总结

通过本篇文章,我们学习了如何使用 Python 中的几个主要可视化库(如 matplotlibseabornplotly)来分析和展示数据。具体包括:

直方图展示数据分布;柱状图比较分类数据;散点图展示两个变量之间的关系;热力图分析变量间的相关性;使用交互式图表增强用户体验。

这些技术不仅适用于泰坦尼克号数据集,也适用于任何结构化数据集的分析工作流。掌握这些技能,可以帮助你在数据科学、商业分析、科研等领域中更好地表达数据背后的故事。


完整代码汇总

以下是上述所有代码的整合版本:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport plotly.express as px# 加载数据df = pd.read_csv('train.csv')# 年龄分布直方图plt.figure(figsize=(10, 6))plt.hist(df['Age'].dropna(), bins=20, color='skyblue', edgecolor='black')plt.title('Passenger Age Distribution')plt.xlabel('Age')plt.ylabel('Number of Passengers')plt.grid(True)plt.show()# 性别与生还率关系plt.figure(figsize=(8, 6))sns.barplot(x='Sex', y='Survived', data=df, ci=None)plt.title('Survival Rate by Gender')plt.ylabel('Survival Rate')plt.xlabel('Gender')plt.show()# 舱位等级与性别对生还率影响plt.figure(figsize=(8, 6))sns.barplot(x='Pclass', y='Survived', hue='Sex', data=df, ci=None)plt.title('Survival Rate by Pclass and Gender')plt.xlabel('Pclass')plt.ylabel('Survival Rate')plt.legend(title='Gender')plt.show()# 交互式散点图fig = px.scatter(df, x='Age', y='Fare', color='Survived',                 title='Age vs Fare by Survival Status',                 labels={'Age': 'Age of Passenger', 'Fare': 'Ticket Fare'},                 hover_data=['Name', 'Sex', 'Pclass'])fig.show()# 特征相关性热力图corr = df[['Age', 'Fare', 'Survived']].corr()plt.figure(figsize=(8, 6))sns.heatmap(corr, annot=True, cmap='coolwarm')plt.title('Correlation Heatmap')plt.show()

拓展阅读建议

《Python for Data Analysis》—— Wes McKinney(pandas 创始人)《Storytelling with Data》—— Cole Nussbaumer KnaflicKaggle 官方文档与社区资源官方文档:MatplotlibSeabornPlotly

数据可视化不仅仅是画图,它是一门融合统计学、设计美学和讲故事的艺术。希望这篇文章能够为你打开通往数据可视化世界的大门,并激发你进一步探索的兴趣。

如果你喜欢这篇文章,欢迎点赞、收藏并分享给更多想入门数据可视化的朋友们!

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

目录[+]

您是本站第25454名访客 今日有17篇新文章

微信号复制成功

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