前言
提供的数据:数据
一、气泡图能做什么?
气泡图(bubble chart)是可用于展示三个变量之间的关系。它与散点图类似,绘制时将一个变量放在横轴,另一个变量放在纵轴,而第三个变量则用气泡的大小来表示。排列在工作表的列中的数据(第一列中列出 x 值,在相邻列中列出相应的 y 值和气泡大小的值)可以绘制在气泡图中。气泡图与散点图相似,不同之处在于:气泡图允许在图表中额外加入一个表示大小的变量进行对比。(摘自百度百科)

其实气泡图是在散点图的基础上增加了数据的大小对比,在一些问题中经常使用。
二、绘制气泡图
针对数据提出要求:绘制每月交易额均值气泡图,横轴为时间,纵轴为商品的二级类目
- 加载必要的包
import pandas as pd
import matplotlib.pyplot as plt
- 读取数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
data=data.loc[:,['支付时间','金额','商品二级类']] #绘制气泡图只与该三个属性有关,为方便起见,将其提取出来
- 分组计算金额
data['支付时间'] = pd.to_datetime(data['支付时间'])
group=data.groupby(['商品二级类',data['支付时间'].dt.month])['金额'].mean()
groupby函数是经常使用的分组函数,若对groupby函数尚有不解,可以参考此博客:groupby函数详解,以下为分组计算得出的交易均值。

由结果可以看出,索引中是我们给出的分组依据,分别是“二级类”和“支付时间的月份”,格式是元组类型。
- 处理元组数据
#处理元组数据,元组数据中包含二级类和月份,主要是分离两个属性,构成一个列表
m=list(map(list,zip(*list(group.index))))
#分离三种数据
x=m[1] #月份数据
y=m[0] #二级类
z=group.values #总交易额
绘制气泡图的需要数据一一对应,不得以才使用如此麻烦的方法,如果您有更好的解决方法,请您不吝赐教。
- 绘制气泡图
names = ['一月', '二月', '三月', '四月']
plt.scatter(x,y,s=z*10,alpha=0.6,c=x) #前两个参数为横纵坐标,第三个参数是数据大小,控制气泡的大小,可以统一扩大一定倍数。alpha表示透明度。c表示气泡颜色,令c=x表示颜色个数与横坐标匹配。
plt.xticks(x, names)
plt.xlabel("月份") #X轴标签
plt.ylabel("二级类") #Y轴标签
plt.show()

由图可以看出,香烟产品在四个月份销量都是最高的,其次是蜜饯/果干产品;糖果/巧克力产品在一、三月份销量较佳,在二、四月份较为一般。
代码汇总:
import pandas as pd
import matplotlib.pyplot as plt
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
data=data.loc[:,['支付时间','金额','商品二级类']]
data['支付时间'] = pd.to_datetime(data['支付时间'])
group=data.groupby(['商品二级类',data['支付时间'].dt.month])['金额'].mean()
#处理元组数据,元组数据中包含二级类和月份,主要是分离两个属性,构成一个列表
m=list(map(list,zip(*list(group.index))))
#分离三种数据
x=m[1] #月份数据
y=m[0] #二级类
z=group.values #总交易额
names = ['一月', '二月', '三月', '四月']
plt.scatter(x,y,s=z*10,alpha=0.6,c=x)
plt.xticks(x, names)
plt.xlabel("月份") #X轴标签
plt.ylabel("二级类") #Y轴标签
plt.show()
f.close()