Python Pandas 箱线图的实现

  • Post category:Python

PythonPandas是一个用于数据分析的开源库,提供了各种数据处理和分析的工具。其中,箱线图是一种用于表示数据集分布的可视化方式。本篇文章将详细介绍PythonPandas箱线图的实现过程。

准备数据

首先,我们需要准备一些数据来绘制箱线图。我们可以使用Pandas的DataFrame来存储和管理数据。以下是一个例子:

import pandas as pd

# 准备数据
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'B': [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
    'C': [1, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    'D': [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
})

以上代码创建了一个DataFrame对象,包含了4列数据。我们将使用这个数据来绘制箱线图。

绘制箱线图

接下来,我们将使用Pandas的plot()方法来绘制箱线图。以下是一个示例:

# 绘制箱线图
boxplot = df.boxplot(column=['A', 'B', 'C', 'D'])

以上代码调用了DataFrame对象的boxplot()方法,并传入了需要绘制的列名。boxplot()方法返回一个AxesSubplot对象,我们可以使用它来自定义箱线图的各个属性。

如果需要在一个图中展示多个箱线图,可以使用下面的代码:

# 单独绘制箱线图
boxplot = df.boxplot(column=['A', 'B', 'C', 'D'])

# 多个箱线图并排展示
fig, axs = plt.subplots(ncols=2, nrows=2, figsize=(10, 6))
axs[0, 0].boxplot(df['A'])
axs[0, 0].set_title('Boxplot of A')
axs[0, 1].boxplot(df['B'])
axs[0, 1].set_title('Boxplot of B')
axs[1, 0].boxplot(df['C'])
axs[1, 0].set_title('Boxplot of C')
axs[1, 1].boxplot(df['D'])
axs[1, 1].set_title('Boxplot of D')
plt.show()

以上代码使用了Matplotlib库中的子图功能,在一个图中展示了4个箱线图。

自定义箱线图

箱线图有多个组成部分,包括箱体、须、离群值等。我们可以使用Pandas的boxplot()方法的参数来自定义这些部分的样式和属性。

以下列出了一些常用的参数:

  • column:需要绘制的列名
  • by:分组依据的列名
  • figsize:图形的尺寸
  • vert:是否使用垂直方向绘制箱线图
  • sym:用于表示离群值的符号
  • meanline:是否绘制均值线
  • showmeans:是否显示均值
  • showcaps:是否显示须端线条
  • notch:是否使用缺口箱体

以下是一个示例,展示如何自定义箱线图的颜色、均值线和离群值样式:

# 自定义箱线图
boxplot = df.boxplot(column=['A', 'B'], 
                     meanline=True, 
                     showmeans=True,
                     boxprops={'color': 'red'},
                     whiskerprops={'color': 'green'},
                     capprops={'color': 'blue'},
                     flierprops={'marker': 'o', 'markerfacecolor': 'black', 'markersize': 5})

以上代码将箱体的颜色设为红色,须的颜色设为绿色,离群值的标记设为黑色圆点。

示例1:使用Titanic数据集绘制箱线图

以下是一个示例,展示如何使用Pandas绘制Titanic数据集中男女乘客的生还比例箱线图:

import pandas as pd
import seaborn as sns

# 获取Titanic数据集
titanic = sns.load_dataset('titanic')

# 按性别生还比例作为数据
data = [titanic[titanic['sex'] == 'female']['survived'].values,
        titanic[titanic['sex'] == 'male']['survived'].values]

# 绘制箱线图
boxplot = pd.DataFrame(data).T.boxplot()
boxplot.set_xticklabels(['Female', 'Male'])
boxplot.set_ylabel('Survival')
boxplot.set_title('Survival Rate by Gender')

以上代码调用了Seaborn库的load_dataset()方法获取Titanic数据集,并按性别筛选出生还比例数据。然后,我们使用DataFrame的boxplot()方法绘制了箱线图,并添加了自定义的标签和标题。

示例2:绘制多组数据的箱线图

以下是一个示例,展示如何使用Pandas绘制多组数据的箱线图:

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

# 准备数据
np.random.seed(0)
data = np.random.randn(100, 5)
df = pd.DataFrame(data, columns=list('ABCDE'))

# 添加一列分类变量
df['group'] = ['G1' if i < 50 else 'G2' for i in range(100)]

# 绘制多组数据的箱线图
boxplot = df.boxplot(by='group', column=list('ABCDE'))
plt.suptitle('')
plt.title('Boxplot by Group')

以上代码使用NumPy的random模块生成了一个随机数据集合,然后将数据按一列分类变量进行分组,并使用DataFrame的boxplot()方法绘制了多个箱线图。我们还使用了Matplotlib库的suptitle()函数和title()函数添加了图标题和子标题。