揭秘数据之美:【Seaborn】在现代【数学建模】中的革命性应用

news2025/1/15 21:46:58

目录

已知数据集 tips

生成数据集并保存为CSV文件 

数据预览:

导入和预览数据

步骤1:绘制散点图(Scatter Plot)

步骤2:添加回归线(Regression Analysis)

步骤3:分类变量分析(Categorical Variables)

步骤4:箱线图(Box Plot)

步骤5:小提琴图(Violin Plot)

步骤6:绘制热力图(Heatmap)

 ​编辑

总结

1. 生成数据集并保存为CSV文件

2. 导入和预览数据

3. 绘制散点图(Scatter Plot)

4. 添加回归线(Regression Analysis)

5. 分类变量分析(Categorical Variables)

6. 绘制箱线图(Box Plot)

7. 绘制小提琴图(Violin Plot)

8. 绘制热力图(Heatmap)


 

ce6fbd68767d465bbe94b775b8b811db.png

731bd47804784fa2897220a90a387b28.gif

 

专栏:数学建模学习笔记

python相关库的安装:pandas,numpy,matplotlib,statsmodels

总篇:【数学建模】—【新手小白到国奖选手】—【学习路线】

第一卷:Numpy

第二卷:Pandas

第三卷:Matplotlib

在数据科学和数学建模的过程中,数据可视化是非常重要的一环。通过可视化,我们能够更直观地理解数据的分布和关系,从而为后续的分析和建模打下坚实的基础。本篇文章将围绕一个具体的实例,详细讲解如何使用Seaborn库进行数据可视化。我们将使用Seaborn内置的数据集tips,该数据集包含了一些餐馆的小费数据。我们的目标是通过数据可视化,探索影响小费金额的因素,并尝试建立一个数学模型。

已知数据集 tips

tips 数据集包含以下几个主要字段:

  • total_bill: 总账单金额
  • tip: 小费金额
  • sex: 性别
  • smoker: 是否吸烟
  • day: 就餐日期
  • time: 就餐时间(午餐或晚餐)
  • size: 就餐人数

生成数据集并保存为CSV文件 

import pandas as pd
import numpy as np

# 设置随机种子
np.random.seed(0)

# 生成数据
n = 1000
total_bill = np.round(np.random.uniform(5, 50, n), 2)
tip = np.round(total_bill * np.random.uniform(0.1, 0.3, n), 2)
sex = np.random.choice(['Male', 'Female'], n)
smoker = np.random.choice(['Yes', 'No'], n)
day = np.random.choice(['Thur', 'Fri', 'Sat', 'Sun'], n)
time = np.random.choice(['Lunch', 'Dinner'], n)
size = np.random.randint(1, 6, n)

# 创建DataFrame
tips = pd.DataFrame({
    'total_bill': total_bill,
    'tip': tip,
    'sex': sex,
    'smoker': smoker,
    'day': day,
    'time': time,
    'size': size
})

# 保存数据集到CSV文件
tips.to_csv('tips.csv', index=False)

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

数据预览

total_billtipsexsmokerdaytimesize
29.706.49FemaleNoFriLunch5
37.183.79FemaleYesThurLunch2
32.126.27FemaleNoThurLunch4
29.527.14FemaleNoFriLunch5
24.062.62FemaleYesSunDinner5

导入和预览数据

在生成数据后,我们导入必要的可视化库,并预览数据。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 读取本地示例数据集
tips = pd.read_csv('tips.csv')

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

详解:

  1. 导入必要的库

    • seaborn: 用于数据可视化的主要库。
    • matplotlib.pyplot: Seaborn是基于Matplotlib构建的,所以我们需要同时导入Matplotlib来进行图表的展示。
  2. 读取数据

    • 使用pandas.read_csv函数从CSV文件中读取数据。
  3. 预览数据

    • 使用print(tips.head())函数来显示数据集的前几行,帮助我们快速了解数据的结构和内容。

步骤1:绘制散点图(Scatter Plot)

我们首先绘制一个散点图,展示总账单(total_bill)与小费(tip)之间的关系。

# 绘制散点图
sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Scatter plot of Total Bill vs Tip')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

 

  1. 绘制散点图

    • 使用seaborn.scatterplot函数,其中data参数指定数据集,xy参数分别指定横轴和纵轴的数据字段。
  2. 设置图表标题和标签

    • 使用plt.title设置图表标题。
    • 使用plt.xlabelplt.ylabel分别设置横轴和纵轴的标签。
  3. 显示图表

    • 使用plt.show()函数来显示图表。

散点图是一种常用的图表类型,用于展示两个变量之间的关系。在这个例子中,使用seaborn.scatterplot函数绘制总账单(total_bill)与小费(tip)之间的散点图。通过散点图,可以直观地看到总账单和小费之间的关系。从图中可以看出,小费随总账单的增加而增加,但这种关系是否是线性的还需要进一步分析。

步骤2:添加回归线(Regression Analysis)

为了更好地了解总账单和小费之间的关系,我们可以使用Seaborn的 lmplot 函数来添加一条回归线。

# 绘制带回归线的散点图
sns.lmplot(data=tips, x='total_bill', y='tip')
plt.title('Total Bill vs Tip with Regression Line')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

 

  1. 绘制带回归线的散点图

    • 使用seaborn.lmplot函数,其中data参数指定数据集,xy参数分别指定横轴和纵轴的数据字段。
    • lmplot函数不仅绘制散点图,还会自动添加一条回归线,用于展示两个变量之间的线性关系。
  2. 设置图表标题和标签

    • 同样使用plt.titleplt.xlabelplt.ylabel设置图表的标题和轴标签。
  3. 显示图表

    • 使用plt.show()函数来显示图表。

回归分析是一种统计方法,用于研究两个变量之间的关系。在这个例子中,使用Seaborn的lmplot函数来绘制带有回归线的散点图。通过添加回归线,可以更清楚地看到总账单和小费之间的线性关系。这条回归线表示小费随总账单增加的趋势,图中还会显示回归线的置信区间。

步骤3:分类变量分析(Categorical Variables)

接下来,我们分析性别、吸烟情况等分类变量对小费的影响。

# 使用hue参数根据性别绘制不同颜色的散点图
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex')
plt.title('Total Bill vs Tip by Gender')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

 

  1. 根据分类变量绘制散点图

    • 使用seaborn.scatterplot函数,通过hue参数指定分类变量(例如性别),从而根据不同类别绘制不同颜色的点。
  2. 设置图表标题和标签

    • 使用plt.titleplt.xlabelplt.ylabel设置图表的标题和轴标签。
  3. 显示图表

    • 使用plt.show()函数来显示图表。

分类变量(如性别、吸烟情况等)在数据分析中非常重要,因为它们能够提供关于数据分布的更多信息。在这个例子中,使用seaborn.scatterplot函数,根据性别绘制不同颜色的散点图。通过这种方式,可以看到性别对总账单和小费关系的影响。例如,可以观察到男性和女性在小费上的差异。

步骤4:箱线图(Box Plot)

箱线图可以帮助我们了解数据的分布及其异常值。

# 绘制箱线图展示不同日期的总账单分布
sns.boxplot(data=tips, x='day', y='total_bill')
plt.title('Box plot of Total Bill by Day')
plt.xlabel('Day')
plt.ylabel('Total Bill')
plt.show()

 

  1. 绘制箱线图

    • 使用seaborn.boxplot函数,其中data参数指定数据集,xy参数分别指定分类变量和连续变量。
    • 箱线图可以展示数据的中位数、四分位数及其异常值。
  2. 设置图表标题和标签

    • 使用plt.titleplt.xlabelplt.ylabel设置图表的标题和轴标签。
  3. 显示图表

    • 使用plt.show()函数来显示图表。

箱线图是一种统计图表,用于展示数据分布的五个统计量:最小值、第一四分位数、中位数、第三四分位数和最大值。箱线图还可以展示异常值。在这个例子中,使用seaborn.boxplot函数绘制不同日期(day)的总账单(total_bill)分布。通过箱线图,可以看到不同日期的总账单分布情况,并识别出哪些数据点是异常值。例如,可以观察到在某些日期,总账单的分布范围较广,而在另一些日期,分布范围较窄。

步骤5:小提琴图(Violin Plot)

小提琴图结合了箱线图和核密度图,可以提供关于数据分布的更多信息。

# 绘制小提琴图展示不同日期的小费分布
sns.violinplot(data=tips, x='day', y='tip')
plt.title('Violin plot of Tip by Day')
plt.xlabel('Day')
plt.ylabel('Tip')
plt.show()

  1. 绘制小提琴图

    • 使用seaborn.violinplot函数,其中data参数指定数据集,xy参数分别指定分类变量和连续变量。
    • 小提琴图展示了数据分布的核密度估计,并结合了箱线图的元素。
  2. 设置图表标题和标签

    • 使用plt.titleplt.xlabelplt.ylabel设置图表的标题和轴标签。
  3. 显示图表

    • 使用plt.show()函数来显示图表。

小提琴图结合了箱线图和核密度图的优点,可以更详细地展示数据分布的特征。在这个例子中,使用seaborn.violinplot函数绘制不同日期(day)的小费(tip)分布。通过小提琴图,可以看到不同日期的小费分布情况,并识别出数据分布的密度和异常值。例如,可以观察到在某些日期,小费的分布较为集中,而在另一些日期,分布较为分散。

步骤6:绘制热力图(Heatmap)

热力图适合展示矩阵数据,比如相关矩阵。例如,绘制数据集的相关矩阵:

# 选择数值列
numeric_tips = tips.select_dtypes(include='number')

# 计算相关矩阵并绘制热力图
corr = numeric_tips.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Heatmap of Correlation Matrix')
plt.show()

  1. 计算相关矩阵

    • 使用DataFrame.corr()函数计算数据集中数值变量之间的相关系数。
  2. 绘制热力图

    • 使用seaborn.heatmap函数绘制热力图。
    • corr:相关矩阵,作为热力图的数据输入。
    • annot=True:在每个单元格中显示相关系数的数值。
    • cmap='coolwarm':设置热力图的颜色映射,coolwarm颜色映射使得正相关和负相关的数据点能够通过颜色区分开来。
    • linewidths=0.5:设置每个单元格之间的间隔线宽度。
  3. 设置图表大小:使用plt.figure(figsize=(10, 8))设置图表的大小,确保图表清晰可读。

  4. 设置图表标题:使用plt.title设置图表的标题。

  5. 显示图表:使用plt.show()函数来显示热力图。

相关矩阵热力图解释:

  • 对角线:热力图的对角线上的值都是1,因为每个变量与自身的相关系数都是1。
  • 变量之间的相关性:热力图的非对角线单元格显示了不同变量之间的相关系数。颜色的深浅表示相关性强弱,颜色的方向(冷暖)表示正相关或负相关。

通过这些详细的步骤,我们能够全面地分析和可视化餐馆小费数据,深入了解影响小费的各种因素,为进一步的数学建模和决策提供有力的支持。

 

总结

1. 生成数据集并保存为CSV文件

首先,我们生成了一个包含餐馆小费信息的模拟数据集,并将其保存为CSV文件。数据集包含以下字段:total_billtipsexsmokerdaytimesize

2. 导入和预览数据

使用Pandas库读取本地CSV文件,并预览数据集的前几行,以了解数据的结构和内容。

3. 绘制散点图(Scatter Plot)

使用Seaborn的scatterplot函数绘制散点图,展示总账单(total_bill)与小费(tip)之间的关系。

4. 添加回归线(Regression Analysis)

使用Seaborn的lmplot函数在散点图上添加回归线,以更清晰地展示总账单和小费之间的线性关系。

5. 分类变量分析(Categorical Variables)

使用scatterplot函数的hue参数,根据性别绘制不同颜色的散点图,分析性别对总账单和小费关系的影响。

6. 绘制箱线图(Box Plot)

使用Seaborn的boxplot函数绘制箱线图,展示不同日期的总账单分布,帮助识别数据的中位数、四分位数及其异常值。

7. 绘制小提琴图(Violin Plot)

使用Seaborn的violinplot函数绘制小提琴图,结合箱线图和核密度图,提供更多关于数据分布的信息。

8. 绘制热力图(Heatmap)

计算数据集中数值变量之间的相关矩阵,使用Seaborn的heatmap函数绘制热力图,直观地展示各变量之间的相关性。

通过这些步骤,可以全面地分析和可视化餐馆小费数据,深入了解影响小费的各种因素,为进一步的数学建模和决策提供有力的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[数据集][目标检测]护目镜检测数据集VOC+YOLO格式888张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):888 标注数量(xml文件个数):888 标注数量(txt文件个数):888 标注类别…

Python爬虫教程第0篇-写在前面

为什么写这个系列 最近开发了个Python爬虫的脚本,去抢一个名额,结果是程序失败了,中间有各种原因,终究还是准备不足的问题。我想失败的经验或许也可贵,便总结一下当初从0开始学Python,一步步去写Python脚本…

windows中使用nssm设置nginx开机自启动

1、下载nssm工具 https://nssm.cc/release/nssm-2.24.zip 2、解压并根据自己电脑的位数定位到64或32 3、执行nssm.exe install 4、执行命令启动服务并设置开机自启动 #启动服务 net start nginxService #开机自启动 sc config nginx-service startauto

延边幼儿园1*3 OLED柔性屏翻页一体机安装项目

一、产品介绍 本次项目在吉林省延吉市延边幼儿园内,引入了先进的55寸1*3 OLED柔性屏翻页一体机。该设备集高清显示、灵活翻页、互动教学等功能于一体,专为现代幼儿教育环境设计,旨在通过科技手段提升教学质量,丰富教学手段&#x…

某积分商城任意金额支付漏洞分析利用及思考

扫码领取网安教程 大部分开发人员在开发时都会有一种思维惯性,传参处处有校验处处都可信,但这个等式并非恒成立 前言 这个漏洞是在工作中例行渗透测试的时候发现的,虽然前端做了防篡改措施,但这是很经典的没有后端校验导致的任意…

获取VC账号,是成为亚马逊供应商的全面准备与必要条件

成为亚马逊的供应商,拥有VC(Vendor Central)账号,是众多制造商和品牌所有者的共同目标。这不仅代表了亚马逊对供应商的高度认可,也意味着获得了更多的销售机会和更广阔的市场前景。 全面准备与必要条件是获取VC账号的关…

如何选择小红书矩阵系统

在内容营销领域,小红书已成为一个不可忽视的平台,尤其是对于品牌和个人创作者来说。小红书矩阵系统,指的是一系列策略和工具,它们可以帮助用户在小红书上高效地管理和分发内容。本文将探讨如何选择适合自己需求的小红书矩阵系统&a…

光伏储能电厂设备连接iec61850平台解决方案

在当今日益发展的电力系统中,光伏储能技术以其独特的优势逐渐崭露头角,成为可再生能源领域的重要组成部分。而在光伏储能系统的运行与监控中,通信协议的选择与实现则显得至关重要。本文将重点介绍光伏储能系统中的Modbus协议、电力IEC 61850平…

数字经济时代:AI+引领企业数字化新高度

随着新一轮科技革命和产业变革深入发展,5G、大数据、云计算等技术的广泛应用,数字经济不仅在中国,且在全球范围内,都被视为推动经济增长的关键动力。以人工智能(AI)为例,《全球数字经济白皮书&a…

C++:Level3阶段测试

1、黑客小知识: (1)常用的黑客头文件有____和____。 (2)创建文件的函数叫做________。 (3)我更新了____个黑客头文件。 (4)万能头文件包含的黑客头文件是________。 …

【国产开源可视化引擎Meta2d.js】图层

独立图层 每个图元都有先后绘画顺序,即每个图元拥有一个独立图层,即meta2d.data().pens的数组索引。 可以通过meta2d.top/bottom/up/down等函数改变独立图层顺序。 分组图层 通过标签可以标识一个分组图层,通过meta2d.find(图层标签)获取…

TCP 的安全可靠

TCP的安全可靠 重传机制往返时间测量快速重传 流量控制拥塞控制 重传机制 T C P确认从另一端收到的数据以提供可靠的运输层,但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该…

AI大模型在各国政务领域应用深度研究报告 2024_龙政智搜

当前,生成式人工智能大模型成为各行各业关注重点和热议话题。以 ChatGPT、Bard 为代表的大模型是人工智能技术的一次飞跃,代表着 AI 技术从感知世界、理解世界向创造世界的跃迁。政务领域涉及大量内容生产及人与人交互环节,与生成式 AI 大模型…

Vue2基础 14:自定义指令

自定义指令 1 函数式1.1 案例--v-text放大10倍 2 对象式2.1 案例--v-fbind默认获取焦点(函数式)2.2 案例--v-fbind默认获取焦点(对象式) 3 自定义指令容易犯的错4 全局指令写法(参考过滤器写法)&#xff1a…

如何在 Odoo 16 中向新视图添加字段

例如,让我们看看如何在新视图或新操作窗口中创建“many2one”字段。 请考虑下面的屏幕截图,它表示不包含任何字段的新视图类型或客户端操作窗口。 我们现在可以将与“res.partner”关联的“多对一”字段引入到我们的新视图或客户端操作窗口中。 为了实现这一点,在 XML 模板…

趣玩双色球APP-PyQt5实现

开发环境及软件主要功能说明 开发环境 win10 Vscode Python10.5-64_bit 使用的python库 requests,bs4,pandas,PyQt5 主要功能说明: 数据库更新,保存,另存为功能过滤显示,根据期数,开奖日期,开间期号过…

如何利用Kimi解读Kimi的KVCache技术细节

最近Kimi公布了一篇Mooncake: Kimis KVCache-centric Architecture for LLM Serving的文章,详细介绍了Kimi背后的推理架构,因此笔者想到用Kimi解读Kimi,梳理相关技术要点如下,供大家参考: 文章 "Mooncake: A KVCa…

深入讲解C++基础知识(二)

目录 一、复合类型1.引用1.1 引用的定义和使用1.2 引用的注意事项 2. 指针2.1 指针的定义和使用2.2 指针的四种状态2.3 指针的注意事项2.4 其他指针操作2.5 void* 指针 3. 理解复合类型变量的声明4. const 限定符4.1 const 对象的注意事项4.2 const 和引用4.2.1 术语&#xff1…

MAS马氏数控制榫机控制面板维修显示屏MDK3113B

马氏数控榫头机触摸屏/显示面板维修型号:MX3810A;MDK3113B;MXK2815B MAS马氏数控开榫机触摸屏/显示面板维修型号: MX2108B;MD2108A;MJ105А 数控面板维修包括:马氏数控榫头机、开榫机、制榫机…

STM32自己从零开始实操07:电机电路原理图

一、LC滤波电路 其实以下的滤波都可以叫低通滤波器。 1.1倒 “L” 型 LC 滤波电路 1.1.1定性分析 1.1.2仿真实验 电感:通低频阻高频的。仿真中高频信号通过电感,因为电感会阻止电流发生变化,故说阻止高频信号 电容:隔直通交。…