用pandas包实现数据可视化

在Excel内置Python中,使用pandas包封装的绘图功能也可以实现数据可视化。该绘图功能也是在Matplotlib包的基础上开发而成,一些Matplotlib包的语法可以直接使用。本节介绍用pandas包绘制柱状图、面积图和直方图。

柱状图

图7-25所示工作表中,单元格A7在Python模式下,在公式栏输入下面的代码,绘制复合柱状图:

code.python
df=xl("A1:C5",headers=True)
df.plot.bar()
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域B7:E17,绘图效果如图7-25中左图所示。可见,使用pandas包绘制复合柱状图比用Matplotlib包绘制方便得多。

单元格F7在Python模式下,在公式栏输入下面的代码,绘制堆叠柱状图:

code.python
df=xl("A1:C5",headers=True)
df.plot.bar(stacked=True)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域G7:J17,绘图效果如图7-25中右图所示。代码中给bar函数指定stacked参数的值为True,实现堆叠柱状图的绘制。

Document Image

图7-25 用pandas包绘制柱状图

面积图

图7-26所示工作表中,单元格A7在Python模式下,在公式栏输入下面的代码,绘制面积图:

code.python
df=xl("A1:C5",headers=True)
df.plot.area(stacked=False)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域B7:E17,绘图效果如图7-26中左图所示。默认时,多组数据绘制面积图会绘制堆叠面积图。代码中将area函数的stacked参数的值设置为False,取消堆叠。所以单独绘制各组数据的简单面积图,并半透明显示。

单元格F7在Python模式下,在公式栏输入下面的代码,绘制堆叠面积图:

code.python
df=xl("A1:C5",headers=True)
df.plot.area()
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域G7:J17,绘图效果如图7-25中右图所示。

Document Image

图7-26 用pandas包绘制面积图

直方图

图7-27所示工作表中,A-C列为汽车相关指标的实测数据,对这三组数据进行标准化,标准化数据放在D-F列,利用它们绘制复合直方图。

单元格D1在Python模式下,在公式栏输入下面的代码,对A列数据进行标准化:

code.python
df=xl("A1:A407",headers=True)
std_mpg=((df['MPG']-df['MPG'].mean())/df['MPG'].std()).round(4)

在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_mpg中。

单元格E1在Python模式下,在公式栏输入下面的代码,对B列数据进行标准化:

code.python
df=xl("B1:B407",headers=True)
std_acc=((df['Acceleration']-df['Acceleration'].mean())/df['Acceleration'].std()).round(4)

在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_acc中。

单元格F1在Python模式下,在公式栏输入下面的代码,对C列数据进行标准化:

code.python
df=xl("C1:C407",headers=True)
std_dis=((df['Displacement']-f['Displacement'].mean())/df['Displacement'].std()).round(4)

在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_dis中。

然后利用标准化后的数据绘制复合直方图。

单元格G2在Python模式下,在公式栏输入下面的代码:

code.python
df2=pd.concat([std_mpg,std_acc,std_dis],axis=1)
df2.plot.hist(alpha=0.5)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
plt.ylabel('Frequency',fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域H2:L13,绘图效果如图7-27中上图所示。代码中设置hist函数的alpha参数的值为0.5,生成半透明的复合直方图。

单元格G14在Python模式下,在公式栏输入下面的代码:

code.python
df2=pd.concat([std_mpg,std_acc,std_dis],axis=1)
df2.plot.hist(stacked=True,bins=20)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
plt.ylabel('Frequency',fontsize=16)

在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域H14:L26,绘图效果如图7-27中下图所示。代码中设置hist函数的stacked参数的值为True,绘制堆叠直方图,设置bins参数的值为20,直方图共有20个分箱或柱形。

Document Image

图7-27 用pandas包绘制直方图