与数据帧集成的长数据和宽数据的简单绘图库

dexplot的Python项目详细描述


索引图

用于使数据可视化的python库。

dexplot当前的目标是使python中的数据可视化创建更加健壮和直观。dexplot构建在matplotlib之上,接受p and as数据帧作为输入。

安装

pip安装dexplot

目标

dexplot的主要目标是:

  • 保持一个非常一致的api,只需使用一些必要的函数就可以生成所需的统计图
  • 允许用户在不深入matplotlib的情况下调整绘图

整理熊猫的数据

dexplot只接受pandas数据帧作为"tidy"形式的绘图功能的输入。

样地

dexplot目前维护两个主要函数,aggplot用于聚合数据,jointplot用于将两个变量的原始值相互绘制。热图是另一个仅生成一个热图的功能。

aggplot可以创建五种不同的绘图。

  • hist
  • kde

jointplot可以创建四种不同类型的绘图

  • 分散性
  • 2dkde

有7个主要参数要aggplot

  • agg-要聚合的列的名称。如果是具有字符串/分类值的列,则将返回计数或相对频率百分比。
  • groupby-其唯一值将构成独立组的列的名称。这与GROUP BYSQL子句使用的方式类似。
  • 数据-熊猫数据框
  • 色调-在单个绘图中进一步分组数据的列的名称
  • -具有唯一值的列的名称将数据分割成不同的行
  • -具有唯一值的列的名称将数据拆分为多个列
  • 类型-要创建的绘图类型。上面五根弦中的一根。

jointplot使用xy而不是groupbyagg

休斯顿市数据

首先,我们将使用从2016年收集的休斯顿市员工数据。它包含大约1500名员工的公共信息,位于dexplot的github存储库中。

importpandasaspdimportdexplotasdxp
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
< div ><表><广告>< T/>标题部门 工资 比赛 性别 体验 体验级 < /广告><正文>< 0 >警官休斯顿警察局 45279.0白色男性新手 <1</th>工程师/操作员休斯顿消防局(HFD)63166.0白色男性老兵 <2</th>高级警官休斯顿警察局 66614.0黑色男性老兵 <3</th>工程师公共工程与工程 71680.0亚洲男性新手 <4</th>木匠休斯顿机场系统(HAS)42390.0白色男性新手<表>

按部门绘制平均工资

agg参数非常重要,它是将要聚合的内容(通过单点统计进行汇总,如平均值或中值)。它是第一个参数,也是您必须指定的唯一参数(除了data)。如果此列是数字,则默认情况下,将计算其平均值。在这里,我们指定了groupby参数,它的唯一值构成独立的组并标记x轴。

dxp.aggplot(agg='salary',groupby='dept',data=emp)
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>

pngdxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')

<matplotlib.axes._subplots.AxesSubplot at 0x1192f7160>

png>

控制图形大小

dexplot的目标之一是不要深入了解matplotlib的细节。我们可以使用figsize参数来更改绘图的大小。

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h',figsize=(8,4))
<matplotlib.axes._subplots.AxesSubplot at 0x119377b00>

png

使用色调添加另一个维度

色调参数可用于进一步细分分组方式列中的每个唯一值。请注意,长刻度标签是自动包装的。

dxp.aggplot(agg='salary',groupby='dept',data=emp,hue='gender')
importpandasaspdimportdexplotasdxp
0

png

聚合字符串/分类列

可以使用字符串/分类列作为聚合变量。在此实例中,将返回该列的唯一值的计数。因为这已经在执行groupby,所以不能在此实例中指定groupby列。让我们按种族统计雇员人数。

importpandasaspdimportdexplotasdxp
1
importpandasaspdimportdexplotasdxp
2

png

对字符串/分类列使用色调

在聚合字符串/分类列时,不允许使用groupby。但是,我们仍然可以通过指定hue

importpandasaspdimportdexplotasdxp
3
importpandasaspdimportdexplotasdxp
4

png

使用normalize获取相对频率百分比

通过将值传递给normalize,可以将原始计数转换为百分比。让我们按种族找出所有雇员的百分比。

importpandasaspdimportdexplotasdxp
5
importpandasaspdimportdexplotasdxp
6

png

可以对任何变量进行规格化

参数normalize可以是传递给参数'agg''hue''row''col'的值之一,也可以是包含任意数量或'all'的元组。例如,在下面的图中,您可以通过racedept

importpandasaspdimportdexplotasdxp
7
importpandasaspdimportdexplotasdxp
8

png

按种族规范化的数据

如您所见,数据是按种族标准化的。例如,从图表中,我们可以看出大约30%的黑人雇员是警察部门的成员。我们也可以按部门正常化。从图中可以看出,大约10%的卫生和公共服务员工是亚洲人。

importpandasaspdimportdexplotasdxp
9
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
0

png

堆积条形图

所有使用色调变量的条形图都可以堆叠。在这里,我们将最高工资按部门按种族分组。

emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
1
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
2

png

叠加计数

按经验级别列出的每个部门的原始计数在此堆叠。

emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
3
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
4

png

叠加相对频率

按种族和经验水平划分的各部门的相对频率。

emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
5
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
6

png

其他类型的绘图lineboxhistkde

aggplot能够生成其他四种类型的绘图。图与条形图非常相似,但只是将值连接在一起。让我们回到一个数字列,按部门计算每个性别的薪资中位数。

emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
7
emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
8

png

aggfunc可以接受pandas可以接受的任何字符串值

aggfunc可以接受十多个字符串值。这些只是传递给pandasgroupby进行聚合的方法。

所有绘图都可以是垂直和水平的

我们可以用方向旋转所有绘图

emp=pd.read_csv('notebooks/data/employee.csv')emp.head()
9
dxp.aggplot(agg='salary',groupby='dept',data=emp)
0

png

方块图

与方框图绘制的数据相同。这实际上不是一个聚合,因此这里的aggfunc参数没有意义。相反,将绘制特定组的所有值。

dxp.aggplot(agg='salary',groupby='dept',data=emp)
1
dxp.aggplot(agg='salary',groupby='dept',data=emp)
2

png

直方图和kde

与boxplots一样,直方图和kde不与aggfunc一起工作,因为它们不是聚合而是简单地为我们显示所有数据。此外,不可能在这些绘图中同时使用groupbyagg

dxp.aggplot(agg='salary',groupby='dept',data=emp)
3
dxp.aggplot(agg='salary',groupby='dept',data=emp)
4

png

dxp.aggplot(agg='salary',groupby='dept',data=emp)
5
dxp.aggplot(agg='salary',groupby='dept',data=emp)
6

png

分割成单独的图

参数可用于将数据分割成单独的绘图。的每个唯一值将创建一个新的绘图。返回一个由整个数字组成的单项元组。

dxp.aggplot(agg='salary',groupby='dept',data=emp)
7
dxp.aggplot(agg='salary',groupby='dept',data=emp)
8

png

使用wrap参数创建新行/列

wrap参数设置为整数,以确定新行/列的形成位置。

dxp.aggplot(agg='salary',groupby='dept',data=emp)
9
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
0

png

wrap行或列都有效
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
1
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
2

png

对整个网格同时使用行和

通过同时使用,可以最大化将数据划分为的变量数。

<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
3
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
4

png

由多个变量规格化

在这之前,我们只用一个变量来规范化。可以用一个元组通过多个变量进行规范化。在这里,我们按部门和性别进行正常化。将每个部门的所有蓝色条加起来应该等于1。

<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
5
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
6

png

用三个变量规格化

在这里,我们按种族、经验水平和性别进行正常化。每个图中的每组橙色/蓝色条将加1。

<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
7
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
8

imgalt="png" src="https://warehouse camo.cmh1.psfhosted.org/3123d5276c219892a3e2d5e44ab0bcd336239c1/68747470733a2f72f7261772e676974756275736572636f6e74656e742e636f6d2e646578706c6f2f646578706c6f742f6d617365722f696d616765732f6f757075745f34395f312e706e67" />

联合图

joinplot的工作方式与aggplot不同,因为不进行聚合。它在两个变量之间绘制原始值。它可以使用色调将数据分成组或新的绘图。默认绘图是散点图,但您也可以为kind参数提供字符串值,以生成线条、kde或条形图。

<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
9
dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
0

png

使用色调在同一绘图中分割数据

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
1
dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
2

png

通过设置fit_reg等于true绘制回归线

默认情况下,它在平均值周围绘制95%的置信区间。

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
3
dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
4

png>

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
5
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
0

png

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
7
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
4

png

使用s参数更改每个标记的大小

s等于包含数值的列名,以分别设置每个标记大小。我们需要先创建另一个数值变量,因为数据集只包含两个。

dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h')
9
<matplotlib.axes._subplots.AxesSubplot at 0x1192f7160>
0
<matplotlib.axes._subplots.AxesSubplot at 0x1190d2128>
0

png

线条图

<matplotlib.axes._subplots.AxesSubplot at 0x1192f7160>
2 < div > <;样式范围>; .dataframe tbody tr th:仅为{ 垂直对齐:中间; }
<matplotlib.axes._subplots.AxesSubplot at 0x1192f7160>
3 <;/样式>; <表><广告>< T/>日期 关闭符号增益百分比 年 月< /广告><正文>< 0 >2013年10月7日63.7997AAPL2013年 <1</th>2013年10月7日96.6579 CVX 2013年 <2</th>2013年10月7日35.0541 txn2013年 <3</th>2013年10月7日19.4912CSCO2013年1042013年10月7日 310.0300AMZN0.02013年10<表>

AAAAAAA 64 啊! <<<<<<<

AAAAAAA 66 啊! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪咪6E67" />

二维kde图

啊! AAAAAAA 69 <<<<<<<< 啊! 次级方案71 <<<<<<<聚合数据的条形图

如果您的数据已经聚合,您可以使用jointplot绘制它。

AAAAAAA 72 < div > <;样式范围>; .dataframe tbody tr th:仅限类型 垂直-对齐:中间; * AAAAAAA 63 <;/样式>; <表><广告>< T/>部门 工资 < /广告>< >0健康和人类服务51324.9805831休斯顿机场系统(HAS)53990.3689322休斯顿消防局(HFD)59960.4410963休斯顿警察局-HPD60428.7456144公园和娱乐39426.1509435公共工程与工程-普华永道 50207.806452<表>
AAAAAAA 74 啊! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<75747075745F37315F312E706E67" />

热图

热图可用于整理和聚合数据。

频率

当处理整洁的数据时,只传递它xy将绘制它们的唯一值的所有组合的出现频率。将计数作为文本放入annot框中。默认格式有两个小数。

啊! 啊! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

使用热图聚合变量

agg参数设置为聚合特定变量。选择如何使用aggfunc参数进行聚合,该参数接受pandas可以使用的任何字符串。默认值是平均值。

AAAAAAA 78 啊! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

按行、列或所有数据规格化热图

可以使用按行、列或所有数据规范化数据。使用列的字符串名称进行行和列规范化。下面我们找到了按种族划分的所有综合经验年的总百分比。例如,在所有白人雇员的工作年限中,89%是男性。

<matplotlib.axes._subplots.AxesSubplot at 0x119377b00>
0
dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h',figsize=(8,4))
7

png

<matplotlib.axes._subplots.AxesSubplot at 0x119377b00>
2
dxp.aggplot(agg='salary',groupby='dept',data=emp,orient='h',figsize=(8,4))
7

png

不聚合数据的热图

如果只将数据帧传递到热图中,则这些原始值将用于创建颜色。这里我们从正态分布中画出一些随机数。

<matplotlib.axes._subplots.AxesSubplot at 0x119377b00>
4

png

通过设置corr等于true来查找相关性

corr参数设置为true将计算列之间的成对相关矩阵。任何字符串列都将被丢弃。下面,我们使用流行的kaggle住房数据集。

<matplotlib.axes._subplots.AxesSubplot at 0x119377b00>
5

png

与Seaborn相比

如果你使用过Seaborn图书馆,那么你应该注意到很多相似之处。dexplot的大部分灵感来自于seaborn。下面是在seaborn中找不到的dexplot中的附加功能列表

  • 在任意数量的变量上绘制相对频率百分比和标准化的能力
  • 公共职能要少得多。目前只有两个
  • 不需要多个函数来做相同的事情。Seaborn同时具有countplotbarplot
  • 使用单个函数生成网格的能力,而不必使用更高级别的函数,如catplot
  • pandasgroupby方法可用作字符串
  • X/Y标签和标题都会自动包装,以免重叠
  • 图形大小(加上其他几个选项)可以更改,而无需深入到matplotlib
  • 没有像facetgrid这样的新类型。只返回matplotlib对象

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径