帕累托图是一种显示类别的有序频率和类别的累积频率的图表:
本教程提供了一个如何在Python中创建帕累托图的分步示例。
第一步:创建数据
假设我们进行一项调查,要求350个不同的人在A、B、C、D和E品牌中找出他们最喜欢的麦片品牌。
我们可以创建以下pandas DataFrame来保存调查的结果:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'count': [97, 140, 58, 6, 17, 32]})
df.index = ['B', 'A', 'C', 'F', 'E', 'D']
#sort DataFrame by count descending
df = df.sort_values(by='count', ascending=False)
#add column to display cumulative percentage
df['cumperc'] = df['count'].cumsum()/df['count'].sum()*100
#view DataFrame
df
count cumperc
A 140 40.000000
B 97 67.714286
C 58 84.285714
D 32 93.428571
E 17 98.285714
F 6 100.000000
第二步:创建帕累托图
我们可以使用下面的代码来创建帕累托图表:
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
#define aesthetics for plot
color1 = 'steelblue'
color2 = 'red'
line_size = 4
#create basic bar plot
fig, ax = plt.subplots()
ax.bar(df.index, df['count'], color=color1)
#add cumulative percentage line to plot
ax2 = ax.twinx()
ax2.plot(df.index, df['cumperc'], color=color2, marker="D", ms=line_size)
ax2.yaxis.set_major_formatter(PercentFormatter())
#specify axis colors
ax.tick_params(axis='y', colors=color1)
ax2.tick_params(axis='y', colors=color2)
#display Pareto chart
plt.show()
x轴显示不同品牌的频率从高到低排序。
左边的y轴显示每个品牌的频率,右边的y轴显示各品牌的累积频率。
例如,我们可以看到。
- 品牌A约占总调查回复的40%。
- 品牌A和B约占总调查回复的70%。
- 品牌A、B和C约占总调查回复的85%。
以此类推。
第三步:自定义帕累托图(可选)
你可以改变条形图的颜色和累计百分比线的大小,使帕累托图看起来像你想要的那样。
例如,我们可以把条形图改成粉红色,把线改成紫色并略微粗一些:
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
#define aesthetics for plot
color1 = 'pink'
color2 = 'purple'
line_size = 6
#create basic bar plot
fig, ax = plt.subplots()
ax.bar(df.index, df['count'], color=color1)
#add cumulative percentage line to plot
ax2 = ax.twinx()
ax2.plot(df.index, df['cumperc'], color=color2, marker="D", ms=line_size)
ax2.yaxis.set_major_formatter(PercentFormatter())
#specify axis colors
ax.tick_params(axis='y', colors=color1)
ax2.tick_params(axis='y', colors=color2)
#display Pareto chart
plt.show()
其他资源
下面的教程解释了如何在Python中创建其他常见的可视化图表: