Python3数据分析与挖掘建模(7)使用matplotlib和seaborn画图

news2024/12/23 5:21:55

1. 可视化分析

1.1 概述

可视化分析是数据分析中重要的一环,它可以帮助我们更直观地理解数据的特征、趋势和关系。在Python中,有多个库可以用于数据可视化,包括matplotlib、seaborn和plotly等。

1.2 常用的可视化方法和对应的库:

(1)折线图和曲线图:用于显示数据随时间或其他连续变量的变化趋势。可以使用matplotlib和seaborn来创建这些图形。

(2)柱状图和条形图:用于比较不同类别或组之间的数值。matplotlib和seaborn都可以创建这些图形。

(3)散点图:用于显示两个变量之间的关系和分布情况。matplotlib和seaborn都支持创建散点图。

(4)饼图:用于显示不同类别在总体中的比

例。matplotlib和seaborn都可以创建饼图。

(5)箱线图:用于显示数据的分布情况、中位数、四分位数和异常值等。matplotlib和seaborn都支持创建箱线图。

(6)热力图:用于显示两个变量之间的相关性,颜色的深浅表示相关性的强弱。seaborn和plotly都可以创建热力图。

(7)树状图:用于显示层次结构或分类关系。matplotlib和plotly都可以创建树状图。

这些只是常见的可视化方法,实际上还有很多其他类型的图表和图形可供选择。选择合适的可视化方法取决于数据的特点和分析目的。

2. 去除异常值

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("./HR.csv")
# 去除异常值
df =df.dropna(how="any",axis=0)
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
df.head(5)
df["salary"].value_counts()

3. 柱状图

3.1 matplotlib生成柱状图

以下是对代码进行注释的版本:

```python
import numpy as np
import pandas as pd

# 读取数据
df = pd.read_csv("data/HR.csv")

import matplotlib.pyplot as plt

# 创建柱状图
plt.title("Salary")  # 设置图表标题为"Salary"
plt.xlabel("salary")  # 设置x轴标签为"salary"
plt.ylabel("Number")  # 设置y轴标签为"Number"

# 设置x轴刻度,使用DataFrame中"salary"列的唯一值作为刻度标签
plt.xticks(np.arange(len(df["salary"].value_counts()))+0.5, df["salary"].value_counts().index)

plt.axis([0, 4, 0, 10000])  # 设置坐标轴范围

plt.grid(axis='y', linestyle='--', alpha=0.5)  # 添加y轴方向的网格线,线型为虚线,透明度为0.5

# 创建柱状图
plt.bar(np.arange(len(df["salary"].value_counts()))+0.5, df["salary"].value_counts(), width=0.5)

plt.legend(["Count"], loc='upper right')  # 添加图例,标注柱状图表示的是"Count"

# 在每个柱状条上添加数值标签
for x, y in zip(np.arange(len(df["salary"].value_counts()))+0.5, df["salary"].value_counts()):
    plt.text(x, y, y, ha="center", va="bottom")

# 显示图形
plt.show()

执行run()运行代码后生成的柱状图如下:

 3.2 seaborn生成柱状图

import numpy as np
import pandas as pd
import seaborn as sns

# 读取数据
df = pd.read_csv("data/HR.csv")

# 去除异常值
df = df.dropna(how="any", axis=0)  # 删除含有空值的行
df = df[df["last_evaluation"] <= 1][df["salary"] != "nme"]  # 过滤满足条件的数据
df.head(5)  # 打印前5行数据

import matplotlib.pyplot as plt

# 设置绘图风格
sns.set(style="whitegrid")  # 设置Seaborn的绘图风格为白色背景带网格线
sns.set_context(context="poster", font_scale=0.8)  # 设置绘图上下文为poster大小,字体缩放比例为0.8
sns.set_palette("summer")  # 设置调色板为summer风格的颜色
sns.set_palette(sns.color_palette("RdBu", n_colors=7))  # 设置调色板为RdBu风格的颜色,共有7种颜色

# 创建计数柱状图
sns.countplot(x="salary", hue="department", data=df)  # 根据"salary"列和"department"列绘制计数柱状图

plt.show()  # 显示图形

执行run()运行代码后生成的柱状图如下:

4. 直方图

# 读取数据
df = pd.read_csv("data/HR.csv")

# 去除异常值
df = df.dropna(how="any", axis=0)
df = df[df["last_evaluation"] <= 1][df["salary"] != "nme"]

# 设置绘图风格和字体大小
sns.set(style="whitegrid", font_scale=0.8)

# 创建子图,一行三列
fig, axes = plt.subplots(1, 3, figsize=(12, 4))

# 绘制第一个直方图
sns.histplot(df["satisfaction_level"], bins=10, kde=True, ax=axes[0])
axes[0].set_title("Satisfaction Level")

# 绘制第二个直方图
sns.histplot(df["last_evaluation"], bins=10, kde=True, ax=axes[1])
axes[1].set_title("Last Evaluation")

# 绘制第三个直方图
sns.histplot(df["average_monthly_hours"], bins=10, kde=True, ax=axes[2])
axes[2].set_title("Average Monthly Hours")

# 调整子图之间的间距
plt.tight_layout()

# 显示图形
plt.show()

效果图:

由上图,可以看出:satisfaction_level大部分集中在右边,last_evaluation有个小的波动,每个月的工作时长基本上呈现两极分布。

 代码段说明:

sns.histplot(df["average_monthly_hours"], bins=10, kde=True, ax=axes[2])
  • sns.histplot(): 这是 seaborn 库提供的函数,用于绘制直方图和核密度估计图。
  • df["average_monthly_hours"]: 这是从数据框 df 中选择 "average_monthly_hours" 列,表示要绘制直方图的数据。
  • bins=10: 这是直方图的箱体数目,指定了将数据划分成多少个等宽的区间。
  • kde=True: 这表示在直方图上绘制核密度估计曲线。核密度估计是一种对数据分布进行平滑估计的方法,可以用曲线表示数据的概率密度分布。
  • ax=axes[2]: 这表示将该直方图绘制在指定的子图 axes[2] 上。axes[2] 是在前面创建的子图数组中的第三个子图。

综合起来,该行代码的作用是在第三个子图上绘制 "average_monthly_hours" 列的直方图,并添加核密度估计曲线。通过指定箱体数目为 10,可以将数据分成 10 个区间,并在图上显示数据的分布情况。

5. 箱线图

# 读取数据
df = pd.read_csv("data/HR.csv")

# 去除异常值
df = df.dropna(how="any", axis=0)
df = df[df["last_evaluation"] <= 1][df["salary"] != "nme"]

# 设置绘图风格和字体大小
sns.set(style="whitegrid", font_scale=0.8)

# 绘制第一个直方图
sns.boxplot(df["time_spend_company"], saturation=0.75, whis=3)

# 显示图形
plt.show()

效果图:

 6. 折线图

# 读取数据
df = pd.read_csv("data/HR.csv")

# 去除异常值
df = df.dropna(how="any", axis=0)
df = df[df["last_evaluation"] <= 1][df["salary"] != "nme"]

# 设置绘图风格和字体大小
sns.set(style="whitegrid", font_scale=0.8)

# 创建图形和子图
fig, ax = plt.subplots()

# 绘制点图
sns.pointplot(x="time_spend_company", y="left", data=df, ax=ax)

# 设置图表标题和轴标签
ax.set_title("Employee Attrition by Time Spent in Company")
ax.set_xlabel("Time Spent in Company (years)")
ax.set_ylabel("Attrition Rate")

# 调整子图之间的间距
plt.tight_layout()

# 显示图形
plt.show()

效果图:

                    

我们可以看到,数据集中的员工在公司呆5年的时候,离职率最高4年其次6年第三所以,5年前后离职率比较大随着时间越来越久,离职率会下来时间越短,离职率也不高。 

7. 饼图

# 读取数据
df = pd.read_csv("data/HR.csv")

# 去除异常值
df = df.dropna(how="any", axis=0)
df = df[df["last_evaluation"] <= 1][df["salary"] != "nme"]

# 使用matplotlib绘制饼图,因为seaborn中没有饼图的功能

# 提取部门标签
labels = df["department"].value_counts().index

# 设置部门间隔,突出显示某个部门(这里以"sales"为例)
explodes = [0.1 if i == "sales" else 0 for i in labels]

# 绘制饼图
plt.pie(df["department"].value_counts(normalize=True), labels=labels, explode=explodes, autopct="%1.1f%%", colors=sns.color_palette("Reds"))

# 显示图形
plt.show()

效果图:

代码段解析:

plt.pie(df["department"].value_counts(normalize=True), labels=labels, explode=explodes, autopct="%1.1f%%", colors=sns.color_palette("Reds"))

该代码片段使用plt.pie()函数绘制饼图。

  • df["department"].value_counts(normalize=True):该部分计算df["department"]列中每个部门出现的频率,并使用normalize=True将频率转换为百分比,即每个部门在整个数据集中的占比。

  • labels=labels:将部门标签作为参数传递给labels参数,用于标记每个扇区的标签。

  • explode=explodesexplode参数用于控制是否将某个扇区凸显出来。在这里,我们根据部门是否为"sales"来决定是否设置凸显,使用预定义的explodes列表来设置。

  • autopct="%1.1f%%"autopct参数用于控制在饼图中显示每个扇区的百分比值。%1.1f%%表示显示一位小数的百分比值。

  • colors=sns.color_palette("Reds")colors参数用于设置饼图中每个扇区的颜色。在这里,我们使用sns.color_palette("Reds")生成红色调色板,以便更好地区分不同的部门。

最后,plt.show()用于显示绘制好的饼图。

结尾:除了上述的图形外,还有散点图,气泡图,雷达图等。

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

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

相关文章

4.3. 缓冲流

缓冲流是Java I/O中的一个重要概念&#xff0c;它可以提高文件读写的性能。在本节中&#xff0c;我们将详细讨论缓冲流的概念、使用方法以及实例。 缓冲流有两种类型&#xff1a;缓冲字节流和缓冲字符流。缓冲字节流包括BufferedInputStream和BufferedOutputStream&#xff0c…

vue中this.$set的用法

this.$set( target, key, value ) target&#xff1a;要更改的数据源(可以是对象或者数组) key&#xff1a;要更改的具体数据 value &#xff1a;重新赋的值 当我们给对象加了一个属性&#xff0c;在控制台能打印出来&#xff0c;但是却没有更新到视图上时&#xff0c;这个时…

【靶场】双重内网渗透测试场景

文章目录 前言一、开始渗透二、横向移动提交flag总结 前言 使用vulfocus搭建一个内网场景靶场拓扑如下&#xff1a; 入口有两个&#xff0c;一个是think PHP2.x命令执行和5x的命令执行漏洞&#xff0c;后续需要搭建二层隧道进行渗透测试。 一、开始渗透 目标&#xff1a; …

Vue为什么组件销毁后定时器会继续

原因 在 Vue 中&#xff0c;组件销毁后定时器可能会继续运行&#xff0c;这是因为这个框架使用了虚拟 DOM 技术。虚拟 DOM 可以提高渲染效率和性能&#xff0c;但也带来了一些问题。 当我们在 Vue 组件中创建定时器时&#xff0c;实际上是在组件的生命周期方法&#xff08;例如…

OJ练习第124题——叶值的最小代价生成树

叶值的最小代价生成树 力扣链接&#xff1a;1130. 叶值的最小代价生成树 题目描述 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节…

Arcgis for javascript 应用开发相关网站推荐(SDK,github社区等)

一、什么是arcgis for javascript ArcGIS for JavaScript是一种用于构建基于Web的GIS应用程序的开发框架。它允许开发人员使用Esri的地图和地理空间数据来构建具有交互性和可视化效果的应用程序。ArcGIS for JavaScript提供了丰富的API和组件&#xff0c;使开发人员可以将地理…

BLCY-6-5-90、、BLCY-6-25-90比例螺纹插装式溢流阀控制器

BLCY-6-5-90、BLCY-6-8-90、BLCY-6-16-90、BLCY-6-25-90比例螺纹插装式溢流阀是螺纹插装式的先导式溢流阀&#xff0c;可以作中小流量液压系统的压力控制阀&#xff0c;配置比例放大器输出电流&#xff0c;根据输入到线圈电流的大小比例控制系统压力。

【Rust 日报】2023-05-28 一个构建在TCP上的聊天工具

tcp-chat&#xff1a;构建在TCP上的简单快速轻量的聊天工具 tcp-chat通过TCP进行通信&#xff0c;该项目的目的是了解并行性和底层网络通信。 前端工具&#xff1a;Solid、Tauri、Vite 后端工具&#xff1a;Rust、Tokio、Serde GitHub: https://github.com/gatomod/tcp-chat ez…

信号链基础

信号链&#xff08;SIGNAL CHAIN&#xff09;&#xff1a;一个系统中信号从输入到输出的路径。 从信号的采集&#xff0c;放大&#xff0c;传输&#xff0c;处理一直到对相应功率器件产生执行的一整套信号流程叫信号链。具体来说&#xff0c;信号链是对从信号采集&#xff08;传…

WebGPU:下一代 Web 图形和计算 API

WebGPU 是一种新兴的 Web 标准&#xff0c;旨在为现代图形和计算应用提供高性能、低功耗的 API。本文将介绍 WebGPU 的背景、特点、用途以及和 WebGL 的对比。 一、背景 随着 Web 技术的不断发展&#xff0c;越来越多的高性能图形和计算应用开始出现在浏览器中。WebGL 是迄今为…

陈丹琦团队提出低内存高效零阶优化器MeZO,单卡A100可训练300亿参数模型

深度学习自然语言处理 原创作者&#xff1a;辰宜 今天下午突然发现了一篇陈丹琦大佬的巨作~ 大家一起来简单瞅瞅。 本文旨在介绍一种用于fine-tuning语言模型&#xff08;LM&#xff09;的低内存优化器——MeZO&#xff0c;内存减少多达12倍。使用单个A100 800G GPU&#xff0c…

中文完整版FL Studio21永久免费升级

集合最新FL基础操作、编曲技巧、混音技巧、乐理基础、声乐演奏等各类内容&#xff0c;比如更高端版本才有的必备原厂插件Pitcher和Sakura&#xff0c;还有智能编曲插件ORB&#xff0c;编曲软件FL Studio21版本更新现已发布&#xff0c;在这次更新中优化了很多功能&#xff0c;但…

基于 Amazon API Gateway 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway&#xff0c;通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境)&#xff0c;因为客观上不同业务…

Arm推出新一代高性能CPU内核Cortex-X4以及GPU Immortalis-720 GPU

每年差不多这个时候&#xff0c;智能手机芯片背后的大脑 Arm 都会推出高通、联发科等公司用于下一代SoC的构建模块。在 2023 年 Arm 技术日期间&#xff0c;Arm 推出了一系列涵盖高性能和低功耗用例的新 CPU 内核&#xff0c;以及其第五代 GPU&#xff0c;并提供光线追踪图形支…

chatgpt赋能python:Python中构造方法的介绍与应用

Python中构造方法的介绍与应用 在Python编程语言中&#xff0c;构造方法通常是类中的一个特殊方法&#xff0c;用于在对象创建时初始化其属性。构造方法使用__init__关键字来定义&#xff0c;而且通常会包含self参数&#xff0c;用于引用创建的新对象。在本文中&#xff0c;我…

本地服务器搭建PHP简单Imagewheel云图床

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

HVV的艺术系列 之 打点的艺术

渗透的本质是信息收集&#xff0c; 攻防的体系是知识点的串联。 打点的艺术 01 对靶标的分析 在HVV当中&#xff0c;获取到的靶标存在多种行业。对不同的靶标存在不同的打法&#xff0c;我通常分为两个大方向。其一为机关单位&#xff0c;其二为集团公司等。 其中二者区别对攻击…

【golang】2、http client、代理、爬图

文章目录 一、http client二、反向代理2.1 http2.2 gin 三、爬取并存储 jpg 用 golang 可以很方便的爬图&#xff08;http 下载图片&#xff0c;存储为 jpg 格式&#xff09;。 一、http client http client 有如下最佳实践&#xff1a; 尽量用 default http client&#xf…

小米万兆路由器里的 Docker 安装 chatgpt-next-web,打造自己的专属ChatGPT

小米万兆路由器里的 Docker 安装 chatgpt-next-web&#xff0c;打造自己的专属ChatGPT 0. 先体验一下效果1. 准备工作2. 查看Docker Hub镜像信息3. 拉取 ChatGPT-Next-Web 镜像和运行容器4. 感谢99. (Optional)其他 小米2022年12月份发布了万兆路由器&#xff0c;里面可以使用D…

挑战高通!智能座舱升级战

和智能驾驶相比&#xff0c;智能座舱无疑是智能化普及的领跑角色。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车搭载智能数字座舱&#xff08;大屏语音车联网OTA&#xff09;前装标配交付795.05万辆&#xff0c;同比增…