使用Pandas和Matplotlib实现数据探索性可视化

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

使用 Pandas 和 Matplotlib 实现数据探索性可视化

在数据分析和机器学习领域,数据可视化是一项至关重要的任务。它不仅能够帮助我们更好地理解数据,还可以揭示数据之间的关系和趋势。Pandas 和 Matplotlib 是 Python 中两个强大的库,它们可以协同工作,为数据探索性可视化提供了丰富的工具和功能。在本文中,我们将探讨如何使用这两个库来进行数据探索性可视化。

安装 Pandas 和 Matplotlib

首先,我们需要确保已经安装了 Pandas 和 Matplotlib。你可以使用 pip 命令来安装它们:

pip install pandas matplotlib

加载数据

在开始之前,让我们先加载一些示例数据。假设我们有一个名为 “sales.csv” 的 CSV 文件,其中包含销售数据。我们可以使用 Pandas 的 read_csv() 函数来加载数据:

import pandas as pd

# 加载数据
df = pd.read_csv('sales.csv')

# 显示数据的前几行
print(df.head())

数据探索

在可视化数据之前,让我们先对数据进行一些探索。我们可以使用 Pandas 来查看数据的基本统计信息,例如平均值、标准差等:

# 查看数据的基本统计信息
print(df.describe())

数据可视化

现在,让我们开始利用 Matplotlib 对数据进行可视化。以下是一些常用的数据可视化技巧:

直方图

直方图可以用来展示数值型数据的分布情况。我们可以使用 Matplotlib 的 hist() 函数来绘制直方图:

import matplotlib.pyplot as plt

# 绘制直方图
plt.hist(df['sales'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Sales')
plt.ylabel('Frequency')
plt.title('Distribution of Sales')
plt.show()
散点图

散点图适用于展示两个数值型变量之间的关系。我们可以使用 Matplotlib 的 scatter() 函数来绘制散点图:

# 绘制散点图
plt.scatter(df['sales'], df['profit'], color='green', alpha=0.5)
plt.xlabel('Sales')
plt.ylabel('Profit')
plt.title('Sales vs Profit')
plt.show()
箱线图

箱线图可以用来展示数值型数据的分布情况以及离群值。我们可以使用 Matplotlib 的 boxplot() 函数来绘制箱线图:

# 绘制箱线图
plt.boxplot(df['sales'])
plt.xlabel('Sales')
plt.title('Boxplot of Sales')
plt.show()

自定义可视化

除了常见的可视化技巧之外,Pandas 和 Matplotlib 还提供了丰富的功能,使我们能够进行更加个性化和复杂的数据可视化。

多图形式展示

有时候,我们需要在同一张图中展示多个子图,以便比较不同数据之间的关系。我们可以使用 Matplotlib 的 subplots() 函数来实现:

# 创建包含多个子图的图形
fig, axs = plt.subplots(2, 2, figsize=(10, 8))

# 绘制子图1:直方图
axs[0, 0].hist(df['sales'], bins=20, color='skyblue', edgecolor='black')
axs[0, 0].set_xlabel('Sales')
axs[0, 0].set_ylabel('Frequency')
axs[0, 0].set_title('Distribution of Sales')

# 绘制子图2:散点图
axs[0, 1].scatter(df['sales'], df['profit'], color='green', alpha=0.5)
axs[0, 1].set_xlabel('Sales')
axs[0, 1].set_ylabel('Profit')
axs[0, 1].set_title('Sales vs Profit')

# 绘制子图3:箱线图
axs[1, 0].boxplot(df['sales'])
axs[1, 0].set_xlabel('Sales')
axs[1, 0].set_title('Boxplot of Sales')

# 隐藏多余的子图
axs[1, 1].axis('off')

plt.tight_layout()
plt.show()
自定义样式

Matplotlib 允许我们自定义图形的样式,包括颜色、线型、标记等。例如,我们可以使用不同的颜色和标记来区分不同类别的数据:

# 根据不同类别绘制散点图
plt.scatter(df[df['category'] == 'A']['sales'], df[df['category'] == 'A']['profit'], color='red', label='Category A', alpha=0.5)
plt.scatter(df[df['category'] == 'B']['sales'], df[df['category'] == 'B']['profit'], color='blue', label='Category B', alpha=0.5)
plt.scatter(df[df['category'] == 'C']['sales'], df[df['category'] == 'C']['profit'], color='green', label='Category C', alpha=0.5)

plt.xlabel('Sales')
plt.ylabel('Profit')
plt.title('Sales vs Profit by Category')
plt.legend()
plt.show()
添加注释和标题

为了更好地解释图形中的内容,我们可以添加注释和标题:

# 绘制散点图
plt.scatter(df['sales'], df['profit'], color='green', alpha=0.5)
plt.xlabel('Sales')
plt.ylabel('Profit')
plt.title('Sales vs Profit')

# 添加注释
plt.text(200, 800, 'Outlier', fontsize=12, color='red')

plt.show()

高级数据可视化技巧

除了基本的数据探索性可视化方法外,Pandas 和 Matplotlib 还提供了一些高级的数据可视化技巧,能够更深入地探索数据的特征和关系。

热力图

热力图是一种用颜色变化来表示数据矩阵值的图表。它适用于展示两个变量之间的相关性或者在一个数据集中多个变量之间的关系。我们可以使用 Matplotlib 的 imshow() 函数来绘制热力图:

import seaborn as sns

# 计算变量之间的相关系数
correlation_matrix = df.corr()

# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
柱状图

柱状图可以用来比较不同类别或组之间的数据。我们可以使用 Matplotlib 的 bar() 函数来绘制柱状图:

# 按照类别计算销售总额
total_sales_by_category = df.groupby('category')['sales'].sum().reset_index()

# 绘制柱状图
plt.bar(total_sales_by_category['category'], total_sales_by_category['sales'], color=['red', 'blue', 'green'])
plt.xlabel('Category')
plt.ylabel('Total Sales')
plt.title('Total Sales by Category')
plt.show()
时间序列可视化

如果数据包含时间序列信息,我们可以使用 Matplotlib 绘制时间序列图来分析数据随时间的变化趋势:

# 将日期列转换为日期时间类型
df['date'] = pd.to_datetime(df['date'])

# 按照日期计算每日销售总额
daily_sales = df.groupby('date')['sales'].sum()

# 绘制时间序列图
plt.plot(daily_sales.index, daily_sales.values, color='orange')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.title('Daily Sales Trend')
plt.xticks(rotation=45)
plt.show()

数据分组和可视化

除了单纯的数据可视化之外,我们还可以通过对数据进行分组,并对每个组别进行可视化分析,以进一步挖掘数据的特征和规律。

分组柱状图

通过对数据进行分组,我们可以将柱状图分成多个子类别,以展示不同组别之间的比较情况。

# 按照月份计算每月销售总额
df['month'] = pd.to_datetime(df['date']).dt.month
monthly_sales = df.groupby('month')['sales'].sum()

# 绘制分组柱状图
plt.bar(monthly_sales.index, monthly_sales.values, color='skyblue')
plt.xlabel('Month')
plt.ylabel('Total Sales')
plt.title('Monthly Sales')
plt.xticks(range(1, 13), ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
plt.show()
分组盒须图

盒须图可以展示不同组别数据的分布情况和离群值。我们可以使用 Matplotlib 的 boxplot() 函数绘制分组盒须图。

# 按照不同类别绘制分组盒须图
plt.boxplot([df[df['category'] == 'A']['sales'], df[df['category'] == 'B']['sales'], df[df['category'] == 'C']['sales']])
plt.xlabel('Category')
plt.ylabel('Sales')
plt.title('Boxplot of Sales by Category')
plt.xticks([1, 2, 3], ['A', 'B', 'C'])
plt.show()

高级数据可视化工具

除了 Pandas 和 Matplotlib 外,还有其他一些强大的数据可视化工具,如 Seaborn、Plotly 等,它们提供了更多样化和丰富的可视化选项。

Seaborn

Seaborn 是基于 Matplotlib 的 Python 可视化库,提供了更高级的统计图表和美观的样式。例如,我们可以使用 Seaborn 绘制分类散点图:

import seaborn as sns

# 绘制分类散点图
sns.scatterplot(data=df, x='sales', y='profit', hue='category')
plt.xlabel('Sales')
plt.ylabel('Profit')
plt.title('Sales vs Profit by Category')
plt.show()
Plotly

Plotly 是一个交互式可视化库,可以生成漂亮且可交互的图形。例如,我们可以使用 Plotly 绘制交互式散点图:

import plotly.express as px

# 绘制交互式散点图
fig = px.scatter(df, x='sales', y='profit', color='category', hover_data=['date'], title='Sales vs Profit by Category')
fig.show()

数据可视化的进阶应用

除了基本的数据探索和分析之外,数据可视化还有一些进阶的应用,可以帮助我们更深入地理解数据和模式。

时间序列分解

时间序列分解可以帮助我们将时间序列数据拆分成趋势、季节性和残差三个部分,以便更好地理解数据的变化趋势和周期性。

from statsmodels.tsa.seasonal import seasonal_decompose

# 进行时间序列分解
result = seasonal_decompose(daily_sales, model='additive', period=30)

# 绘制分解后的图形
result.plot()
plt.show()
地理信息可视化

如果数据包含地理信息,我们可以使用地图来展示数据在空间上的分布情况。

import geopandas as gpd

# 加载地图数据
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# 将数据与地图数据合并
merged_data = world.merge(df, how='left', left_on='iso_a3', right_on='country_iso')

# 绘制地理信息可视化图
merged_data.plot(column='sales', cmap='OrRd', legend=True, figsize=(10, 6))
plt.title('Global Sales Distribution')
plt.show()

数据交互性可视化

在现代数据分析中,交互式可视化越来越受欢迎,因为它可以让用户更深入地探索数据,进行自定义的查询和分析。

使用Dash创建交互式可视化应用

Dash 是一个基于 Flask 和 React 的 Python 框架,可以用来创建交互式的 Web 应用。我们可以使用 Dash 来构建数据可视化的仪表盘,并添加各种交互功能。

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

# 创建 Dash 应用
app = dash.Dash(__name__)

# 布局
app.layout = html.Div([
    html.H1('Interactive Sales Dashboard'),
    dcc.Graph(id='sales-graph'),
    dcc.Dropdown(
        id='category-dropdown',
        options=[
            {'label': 'Category A', 'value': 'A'},
            {'label': 'Category B', 'value': 'B'},
            {'label': 'Category C', 'value': 'C'}
        ],
        value='A'
    )
])

# 回调函数
@app.callback(
    Output('sales-graph', 'figure'),
    [Input('category-dropdown', 'value')]
)
def update_graph(selected_category):
    filtered_data = df[df['category'] == selected_category]
    fig = px.scatter(filtered_data, x='sales', y='profit', color='category', title='Sales vs Profit by Category')
    return fig

# 启动应用
if __name__ == '__main__':
    app.run_server(debug=True)

总结

本文探讨了使用 Pandas 和 Matplotlib 实现数据探索性可视化的技术方法,从基础到进阶,介绍了多种可视化技巧和工具。我们从加载数据开始,通过直方图、散点图、箱线图等基本可视化方法,深入了解了数据的分布、关系和异常情况。随后,我们介绍了如何进行数据分组可视化,包括分组柱状图和分组盒须图,以及如何利用时间序列分析和地理信息可视化来挖掘数据的更多特征和规律。进一步地,我们探讨了高级数据可视化工具,如 Seaborn 和 Plotly,以及如何使用 Dash 创建交互式可视化应用,使数据分析更加灵活和深入。通过本文的介绍,读者可以掌握丰富多样的数据可视化技巧,提升数据分析和解读的效率,为更深层次的数据探索和发现打下坚实的基础。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/586106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

实验八智能手机互联网程序设计(微信程序方向)实验报告

请在上一次实验的基础之上完成“手机快速注册”页面、“企业用户注册”页面&#xff0c;并实现点击手机快速注册和企业用户注册后转跳至该页面在“手机快速注册”页面&#xff0c;输入框内输入内容并失去焦点后&#xff0c;下方的按钮会变化 在企业用户注册页面&#xff0c;用户…

思考!思考!jmeter线程数≠用户并发数

最近又在搞性能测试了&#xff0c;相较于之前的写脚本出数据就完事&#xff0c;这次深入的思考了一下测试出来的指标&#xff0c;到底有什么意义&#xff1f;&#xff1f;&#xff1f; 绞尽脑汁思考了好几天&#xff0c;终于有了点思路&#xff0c;写出来与大家分享&#xff0…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象基础、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

基于RK1126的小型化低功耗AI相机,支持人体特征识别、人脸特征识别、案例帽识别等

提供可定制的⼀套 AI相机软硬件开发平台&#xff0c; 硬件采⽤ RockchipRV1126处理器解决 ⽅案&#xff0c;可选择搭配 SonyIMX系列传感器&#xff0c;POE供电与数据传输&#xff0c;采⽤ 38板标准结构设计&#xff0c;快速按需定制外壳&#xff0c;⽀撑从开发到验证到批量⽣产…

基于Matlab使用深度学习的多曝光图像融合

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在图像处理领域&#xff0c;多曝光图像融合技术是一种重要的技术&#xff0c;它可以将不同曝光条件下…

Ubuntu安装Neo4j

Ubuntu&#xff08;在线版&#xff09; 更新软件源 sudo apt-get update 添加Neo4j官方存储库 wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo deb https://debian.neo4j.com stable latest | su…

update_min_vruntime()流程图

linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单&#xff0c;总一句话&#xff0c;将 cfs_rq->min_vruntime 设置为&#xff1a; max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…

第十四届蓝桥杯国赛:2023次方的思考(指数塔,数论)

首先我们要知道&#xff0c;正常计算的话&#xff0c;指数优先级最高&#xff0c;因此得先计算指数&#xff0c;比如&#xff1a; 2 3 2 512 2^{3^2}512 232512 欧拉定理的关键在于&#xff0c;它允许我们通过减少计算的指数大小来简化模运算。 经过仔细研究&#xff08;看题…

手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1波形设计 本篇内容&#xff1a; 一、RS232的回环测试 上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据&a…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

用C实现通讯录(详细讲解+源码)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容会给大家带来通讯录的讲解&#xff0c;主要是利用结构体来实现通讯录&#xff0c;该通讯…

一周学会Django5 Python Web开发 - Django5 ORM数据库事务

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

如何给MP3添加专辑封面

MP3的专辑封面可以直接显示在音频播放器上&#xff0c;但如果我们的音乐文件没有专辑封面怎么办&#xff1f;下面来给大家介绍如何添加mp3封面 打开智游剪辑&#xff08;官网&#xff1a;zyjj.cc&#xff09;&#xff0c;搜索音乐封面添加 我们上传一下音乐文件和专辑封面&…

8 聚类算法

目录 0 背景 1 Kmeans 1.1 聚类数量k的确定 2 DBSCAN 2.1 三个点 2.2 算法流程 3 层次聚类 3.1 过程 4 基于分布的聚类:高斯混合模型 0 背景 聚类算法是一种无监督学习技术&#xff0c;用于将数据集中的数据点划分为不同的组或簇&#xff0c;使得同一组内的数据点彼此相…

【微信公众平台】扫码登陆

文章目录 前置准备测试号接口配置 带参数二维码登陆获取access token获取Ticket拼装二维码Url编写接口返回二维码接收扫描带参数二维码事件编写登陆轮训接口测试页面 网页授权二维码登陆生成ticket生成授权地址获取QR码静态文件支持编写获取QR码的接口 接收重定向参数轮训登陆接…

Linux的vim下制作进度条

目录 前言&#xff1a; 回车和换行有区别吗&#xff1f; 回车和换行的区别展示&#xff08;这个我在Linux下演示&#xff09; 为什么会消失呢? 回车和换行的区别 为什么\r和\n产生的效果不同&#xff1f; 打印进度条&#xff1a; &#xff08;1&#xff09;打印字符串 …

【再探】设计模式—抽象工厂及建造者模式

抽象工厂模式和建造者模式都属于创建型模式。两者都能创建对应的对象&#xff0c;而创建者模式更侧重于创建复杂对象&#xff0c;将对象的创建过程封装起来&#xff0c;让客户端不需要知道对象的内部细节。 1 抽象工厂模式 需求&#xff1a; 在使用工厂方法模式时&#xff0…

TCP协议关于速率的优化机制-滑动窗口详解

在上一章中&#xff0c;我们讲述了TCP协议在传输过程中的可靠性http://t.csdnimg.cn/BsImO&#xff0c;这里衔接上一篇文章继续讲&#xff0c;TCP协议的特性&#xff0c;TCP协议写完之后就写&#xff0c;Http和Https等内容吧 1. 滑动窗口 这里的滑动窗口不是指算法里面的双指…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片&#xff0c;更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片&#xff0c;品牌百度百科词条创建需要什么资料&#xff0c;今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息&#xff1a;品牌身份的明确 品…
最新文章