数据导入与预处理-拓展-pandas可视化

news2024/11/24 16:56:29

数据导入与预处理-拓展-pandas可视化

  • 1. 折线图
    • 1.1 导入数据
    • 1.2 绘制单列折线图
    • 1.3 绘制多列折线图
    • 1.4 绘制折线图-双y轴
  • 2. 条形图
    • 2.1 单行垂直/水平条形图
    • 2.2 多行条形图
  • 3. 直方图
    • 3.1 生成数据
    • 3.2 透明度/刻度/堆叠直方图
    • 3.3 拆分子图
  • 4. 散点图
    • 4.1生成数据
    • 4.2 绘制大小不一的散点图
    • 4.3 设置渐变色/边缘/边缘宽度
    • 4.4 绘制多组散点图
    • 4.5 六边形箱型图
  • 5. 箱线图
    • 5.1 生成数据
    • 5.2 箱线图/颜色/标记
  • 6. 面积图
    • 6.1 生成数据
    • 6.2 绘制面积图
  • 7.其它图
    • 7.1 密度曲线图
    • 7.2 绘图主题
  • 8. 总结

参考:微信公众号「早起Python」

1. 折线图

1.1 导入数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

import matplotlib

%matplotlib inline
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)
matplotlib.rcParams['axes.unicode_minus']=False

创建时间数据

ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
ts

输出为:

2000-01-01   -0.329415
2000-01-02   -0.508904
2000-01-03    0.910287
2000-01-04   -0.071677
2000-01-05    1.093037
                ...   
2002-09-22   -0.105153
2002-09-23    0.154497
2002-09-24   -0.151585
2002-09-25    0.025427
2002-09-26    1.579653
Freq: D, Length: 1000, dtype: float64

进行累加操作:

ts = ts.cumsum() # 按照行进行累计 按列可以添加axis = 1
ts

输出为:

2000-01-01    -0.329415
2000-01-02    -0.838319
2000-01-03     0.071968
2000-01-04     0.000291
2000-01-05     1.093327
                ...    
2002-09-22    46.536297
2002-09-23    46.690793
2002-09-24    46.539208
2002-09-25    46.564635
2002-09-26    48.144288
Freq: D, Length: 1000, dtype: float64

创建DF

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
df

输出为:
在这里插入图片描述

DataFrame各列累加

df = df.cumsum()
df

输出为:
在这里插入图片描述

1.2 绘制单列折线图

绘制 df 第一列的折线图

# 绘制 df 第一列的折线图
df['A'].plot()
plt.show()

输出为:
在这里插入图片描述

1.3 绘制多列折线图

df 的四列分别放在四个子图上

# 折线图|子图
# 将 df 的四列分别放在四个子图上
df.plot(subplots=True)
plt.show()

输出为:
在这里插入图片描述

df 的四列分别放在一个图上

# 折线图|绘制 df 全部列的折线图
# 同时指定 画布大小  标题 显示网格线 x轴标签 y轴标签 轴字体大小
df.plot(figsize=(10, 6), # 画布大小 
        title='标题',  # 标题
        grid=True,  # 显示网格线
        xlabel='时间',  # x轴标签
        ylabel='数量', # y轴标签
        fontsize = 13) # 字体大小
# plt.legend(loc=4) # 指定图例的位置
plt.show()

输出为:
在这里插入图片描述

1.4 绘制折线图-双y轴

折线图–双y轴 A、C、D使用一个y轴,B使用一个y轴

# 折线图|双y轴
# A、C、D使用一个y轴,B使用一个y轴
ax = df.plot(secondary_y=['A', 'C', 'D'], 
             figsize=(10, 6), # 画布大小 
             title='标题',  # 标题
             grid=True,  # 显示网格线
             xlabel='时间',  # x轴标签
             # ylabel='数量', # y轴标签 左侧的y轴
             fontsize = 13) # 字体大小
ax.right_ax.set_ylabel('ACD')  # 设置右边轴的标签

ax.legend(loc=2) # 右侧坐标轴的图例位于右上角

plt.legend(loc=1) # 左侧坐标轴的图例位于左上角
ax.set_ylabel('B')  # 设置左侧坐标轴的label
 
plt.show()

输出为:
在这里插入图片描述

2. 条形图

2.1 单行垂直/水平条形图

单行垂直/水平条形图
生成数据:

# 生成数据
df2 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
df2

输出为:
在这里插入图片描述

# kind = 'bar'表示垂直,若kind = 'barh'表示为水平
# 重新生成数据,并对使用条形图可视化 df2 的第 3 行
df2.iloc[2].plot(kind = 'bar', figsize=(10, 6))
plt.show()

输出为:
在这里插入图片描述

2.2 多行条形图

多行堆叠

# 多行,堆叠对应着着stacked=True 
df2.plot(kind = 'bar', figsize=(10, 6),stacked=True)
plt.show()

输出为:
在这里插入图片描述

3. 直方图

3.1 生成数据

生成数据

# 直方图|默认
# 重新生成数据 df3 ,并制作直方图
df3 = pd.DataFrame(
    {
        "a": np.random.randn(1000) + 1,
        "b": np.random.randn(1000),
        "c": np.random.randn(1000) - 1,
    },
    columns=["a", "b", "c"],
)
df3

输出为:
在这里插入图片描述

3.2 透明度/刻度/堆叠直方图

df3.plot(kind = 'hist', # 直方图
         figsize=(10, 6), # 画布大小
         alpha = 0.5, # 透明度
         bins = 20, # 刻度
         stacked=True # 是否堆叠
        )
plt.show()

输出为:
在这里插入图片描述

3.3 拆分子图

# 将3个直方图拆分为3个子图
df3.diff().hist(alpha=0.5, bins=20, figsize=(10, 6))
plt.show()

输出为:
在这里插入图片描述

4. 散点图

4.1生成数据

# 散点图|常规
# 重新生成数据 df4 ,并制作散点图,X轴为 a,Y轴为 b

df4 = pd.DataFrame(np.random.rand(50, 4), columns=["a", "b", "c", "d"])

df4["species"] = pd.Categorical(
    ["setosa"] * 20 + ["versicolor"] * 20 + ["virginica"] * 10
)
df4

输出为:
在这里插入图片描述

4.2 绘制大小不一的散点图

# s=df4["c"] * 200 让散点的大小随着值变化
df4.plot.scatter(x="a", y="b", figsize=(8, 6), s=df4["c"] * 200)
plt.show()

输出为:
在这里插入图片描述

4.3 设置渐变色/边缘/边缘宽度

df4.plot.scatter(x="a", # x轴
                 y="b", # y轴 
                 c="c", # 渐变色
                 figsize=(8, 6), # 画布大小 
                 marker='o', # 标记点样式
                 s=100,  # 点大小
                 linewidths=1, # 新的宽度
                 alpha=0.8,  # 透明度
                 edgecolors='black' # 边缘演示
                )

plt.show()

输出为:
在这里插入图片描述

4.4 绘制多组散点图

ax = df4.plot.scatter(x="a", y="b", color="DarkBlue", label="Group 1", figsize=(8, 6), marker='o',
                 s=80, linewidths=1, alpha=0.8, edgecolors='black')

df4.plot.scatter(x="c", y="d", color="DarkGreen", label="Group 2", ax=ax, figsize=(8, 6), marker='o',
                 s=80, linewidths=1, alpha=0.8, edgecolors='black');

输出为:
在这里插入图片描述

4.5 六边形箱型图

# 如果数据太密集而无法单独绘制每个点,可使用六边形箱型图。
# 重新生成数据 df7,并使用 hexbin 图进行可视化

df7 = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"])
df7["b"] = df7["b"] + np.arange(1000)
df7

输出为:

    a	         b
0	-0.586607	-1.120616
1	-3.178678	1.180406
2	-2.113078	1.851595
3	-0.786777	1.880154
4	-0.597641	4.378188
...	...	...
995	-1.197119	995.413693
996	0.642450	996.515158
997	-1.157304	995.689765
998	0.874421	996.710751
999	-0.721021	997.697448
1000 rows × 2 columns

绘制六边形箱型图

df7.plot.hexbin(x="a", y="b", gridsize=25, figsize=(8, 6));

输出为:
在这里插入图片描述

5. 箱线图

5.1 生成数据

# 箱线图
df5 = pd.DataFrame(np.random.rand(10, 5), columns=["A", "B", "C", "D", "E"])
df5

输出为:
在这里插入图片描述

5.2 箱线图/颜色/标记

color = {
    "boxes": "DarkGreen",
    "whiskers": "DarkOrange",
    "medians": "DarkBlue",
    "caps": "Gray",
}

df5.plot.box(color=color, # 指定颜色
             sym="r+", # 标记
             # vert=False, # 水平箱型图
             figsize=(8, 6) # 画布大小
            ) 
plt.show()

输出为:
在这里插入图片描述

6. 面积图

6.1 生成数据

df6 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
df6

输出为:
在这里插入图片描述

6.2 绘制面积图

df6.plot.area(figsize=(8, 6),alpha = 0.7)
plt.show()

输出为:
在这里插入图片描述

7.其它图

7.1 密度曲线图

生成数据

df8 = pd.Series(np.random.randn(1000))
df8

输出为:

0      0.618861
1      1.634446
2      0.498904
3     -0.699357
4      0.686841
         ...   
995   -0.011310
996    2.153381
997   -0.723418
998   -0.324056
999    2.881972
Length: 1000, dtype: float64

绘制密度曲线图

df8.plot(kind='kde', figsize=(8, 6))
plt.show()

输出为:
在这里插入图片描述

7.2 绘图主题

通过 seaborn 来修改绘图主题


import seaborn as sns
sns.set_palette("pastel", 8) # "Blues_r" "magma"
df6.plot.area(figsize=(8, 6),alpha = 0.7)
plt.show()

输出为:
在这里插入图片描述

8. 总结

关于pandas的可视化的用法还有很多,这里不再拓展,但还是建议使用matplotlib,seaborn等库完成绘图。

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

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

相关文章

自动化测试的使用场景有哪些?如何正确使用?

目录 前言 什么是自动化测试? 自动化测试的使用场景有哪些? 自动化测试有什么好处? 总结 前言 本文将通过介绍 自动化测试是什么 , 哪些场景适用于自动化测试 , 自动化测试的好处 , 以及通过 具体的自…

vue如何二次封装一个高频可复用的组件

在我们的业务里,我们通常会二次封装一些高频业务组件,比如弹框,抽屉,表单等这些业务组件,为什么要二次封装?我们所有人心里的答案肯定是,同样类似的代码太多了,我想复用组件&#xf…

2004-2020中小企业板上市公司财务报表股票交易董事高管等面板数据

1200变量!中小企业板上市公司面板数据大全 2004-2020年 1、时间:2004-2020年 2、数据范围:共计973家上市公司 3、数据指标:包括财务报表、股票交易、董事高管等1200变量 4、用途:进行上市公司高管股权激励与公司绩…

C语言刷题系列——1.将三个整数按从大到小输出

将三个整数按从大到小输出1.输入三个整数2.最大的值放在a中&#xff0c;最小值放在c中&#xff0c;剩余的一个放在bstep1&#xff1a;a和b比较step2&#xff1a;a和c比较step3&#xff1a;b和c比较3.最终的代码1.输入三个整数 先写好main函数、头文件 #include <stdio.h&g…

用高并发技巧解决redis热key问题

​ 这篇文章我将介绍工作中处理热key问题的常用手段&#xff0c;可能介绍的不是很全&#xff0c;毕竟不同的业务场景可能有不同的解决方案&#xff0c;但是相信通过这部分的介绍能提供一个热key问题的思路。 热key问题&#xff0c;简单来说就是对某一资源的访问量过高问题&…

Unity学习shader笔记[一百零八]简单萤火效果

之前用粒子系统基于原有萤火虫的粒子改了一波慢萤火效果就被惊艳到了&#xff0c;开始大家讨论&#xff0c;就都觉得这样大数量的粒子消耗挺大的&#xff0c;后面测试过才发现单纯的粒子系统在总粒子数量3000&#xff0c;每秒300的生成数量&#xff0c;屏幕呈现有1000多个粒子的…

【黄啊码】MySQL入门—17、在没有备份的情况下,如何恢复数据库数据?

大家好&#xff01;我是黄啊码&#xff0c;MySQL的入门篇已经讲到第16个课程了&#xff0c;今天我们继续讲讲大白篇系列——科技与狠活之恢复数据库 在没做数据库备份&#xff0c;没有开启使用 Binlog 的情况下&#xff0c;尽可能地找回数据。 今天的内容主要包括以下几个部分…

2022NISCTF--web

easyssrf 打开题目&#xff0c;显示的是 尝试输入&#xff0c; 发现输入flag有东西 读取文件 访问下一个网站 读取文件 不能以file开头 直接伪协议&#xff0c;base64解码 checkIn 奇怪的unicode编码 当选中左边的时候右边也会被选中 我们在vscode看看 这样的额 展示的是UTF-1…

Linux系统中利用open函数多次打开同一个文件操作方法

大家好。 今天的话主要和大家聊一聊&#xff0c;在Linux系统中如果一个文件被打开多次会出现什么情况。 目录 第一&#xff1a;多次打开同一个文件 ​第二&#xff1a;一个文件被打开多次&#xff0c;在内存中不会存在多份动态文件 ​第三&#xff1a;多次open打开同一…

第一章 - Windows安装VMware Workstation Pro

文章目录前言一、VMware Workstation Pro安装的前提条件二、VMware Workstation Pro下载三、VMware Workstation Pro安装前言 Linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发已经得到业界认可&#xff0c;目前很多企业级的项目都会部署到Linux系统…

结构体内存对齐

在知道了结构体类型的基本使用之后&#xff0c;我们需要深入探讨一个问题&#xff0c;即计算结构体的大小&#xff0c;这也是一个热门的考点&#xff1a;结构体内存对齐。 目录 一、结构体的对齐规则 二、例题 2.1 例题一 2.2 例题二 2.3 例题三 ​编辑 三、为什么存在内存…

【C++】vector,list迭代器失效

1.vector迭代器失效 vector容器的物理基础是线性表&#xff0c;底层是指针变量实现的。 在这里导致vector迭代器失效的原因会有两种-----插入失效&#xff0c;删除失效。 1.2插入数值导致迭代器失效 1.21扩容导致迭代器失效 我们在一块vector空间插入pos&#xff08;20&…

第三章 单向链表的讲解与实现

初阶数据结构 第一章 时间复杂度和空间复杂度 第二章 动态顺序表的实现 第三章 单向链表的讲解与实现 文章目录初阶数据结构前言一、什么是链表&#xff1f;二、节点的定义&#xff1a;三、单向链表接口函数1、打印&#xff1a;2、尾插&#xff1a;3、头插&#xff1a;4、尾删…

改进YOLOv7系列: 最新结合用于小目标的新CNN卷积构建块

&#x1f4a1;统一使用 YOLOv7 代码框架&#xff0c;结合不同模块来构建不同的YOLO目标检测模型。&#x1f31f;本项目包含大量的改进方式,降低改进难度,改进点包含【Backbone特征主干】、【Neck特征融合】、【Head检测头】、【注意力机制】、【IoU损失函数】、【NMS】、【Loss…

Linux-进程控制

进程控制进程创建fork函数写时拷贝fork常规用法fork调用失败的原因进程终止进程等待进程程序替换程序替换的原理如何程序替换进程创建 fork函数 fork之前父进程独立运行&#xff0c;fork之后&#xff0c;父子两个执行流分别执行。 进程具有独立性&#xff0c;代码和数据必须独立…

机器学习HMM模型

目录1 马尔科夫链1.1 简介1.2 经典举例1.3 小结2 HMM简介2.1 简单案例2.2 案例进阶2.2.1 问题阐述2.2.2 问题解决3 HMM模型基础3.1 什么样的问题需要HMM模型3.2 HMM模型的定义3.3 一个HMM模型实例3.4 HMM观测序列的生成3.5 HMM模型的三个基本问题4 前向后向算法评估观察序列概率…

计算机毕业设计-SSM高校社团招新系统-JavaWeb大学生社团管理系统-源码+文档+讲解

注意&#xff1a;该项目只展示部分功能&#xff0c;如需了解&#xff0c;评论区咨询即可。 本文目录1.开发环境2.系统的设计背景3 前后台功能设计3.1 前台功能3.2 后台功能4 系统页面展示4.1 学生功能模块展示4.2 干部功能模块展示4.3 管理员功能模块展示5 更多推荐6 部分功能代…

如何用IDEA提高你的开发效率

前言 ​ 作为一名java开发工程师&#xff0c;IDEA无疑是我日常接触最多的工具。因此&#xff0c;能否高效使用IDEA软件&#xff0c;一定程度上决定了我们的开发效率。本文将主要介绍IDEA中的四个便于提高开发效率的功能&#xff0c;常用快捷键、实时模版、后缀补全、文件和代码…

《本地计算机DNS缓存文件》

C:\Windows\System32\drivers\etc 36.152.44.95 www.baidu.com 正常访问www.baidu.com可以DNS抓包&#xff0c;将百度的IP及域名加入文件位置的hosts文件中即该IP和域名将不再请求网络上的DNS服务器&#xff0c;即加快域名解析&#xff1b; 具体作用&#xff1a; 1.加快域名解…

什么是RPC框架?

什么是RPC&#xff1f; In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it wer…