前言
提供的数据:数据
一、绘制饼状图
饼状图可以表示数据的分布情况
针对数据提出要求:绘制每个地区毛利润占总毛利润比例的饼图(假设饮料类毛利率为25% ,非饮料类为20% )
- 加载必要的包
import pandas as pd
import matplotlib.pyplot as plt
- 读取数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
- 提取地点名称
place=list(set(data['地点'])) #提取地点
- 计算总毛利润
#计算饮料和非饮料的总收入
total_income=data.groupby(data['商品大类'])['金额'].sum()
#分别计算饮料和非饮料的毛利润
NonDrink_total_profit=total_income['非饮料']*0.2
Drink_total_profit=total_income['饮料']*0.25
#总的毛利润
total_profit=NonDrink_total_profit+Drink_total_profit
groupby函数是经常使用的分组函数,若对groupby函数尚有不解,可以参考此博客:groupby函数详解,以下为分组计算得出的总金额。

- 计算各个地区的毛利润
labels=list() #用于每块区域的标签
profit=list() #保存地区利润
for pla in place:
labels.append(str(pla)+'地区')
place_data=data[data['地点']==pla] #各个地区的数据
#分别计算各个地区的饮料和非饮料的总收入
place_income=place_data.groupby(place_data['商品大类'])['金额'].sum()
#分别计算各个地区的饮料和非饮料的毛利润
NonDrink_place_profit=place_income['非饮料']*0.2
Drink_place_profit=place_income['饮料']*0.25
#计算地区总利润
place_profit=NonDrink_place_profit+Drink_place_profit
#保存于列表中
profit.append(round(place_profit/total_profit*100,2)) #round函数用于保留小数点
- 绘制饼状图
plt.axes(aspect=1) #标准圆
plt.pie(x=profit,labels= labels,autopct='%0.2f%%')
plt.show()

由饼状图可以看出,C地区和E地区的毛利润占比较大,D地区毛利润占比最小。
代码汇总:
import pandas as pd
import matplotlib.pyplot as plt
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
place=list(set(data['地点'])) #提取地点
'''计算总毛利润'''
#计算饮料和非饮料的总收入
total_income=data.groupby(data['商品大类'])['金额'].sum()
#分别计算饮料和非饮料的毛利润
NonDrink_total_profit=total_income['非饮料']*0.2
Drink_total_profit=total_income['饮料']*0.25
#总的毛利润
total_profit=NonDrink_total_profit+Drink_total_profit
'''计算各个地区的毛利润'''
labels=list() #用于每块区域的标签
profit=list() #保存地区利润
for pla in place:
labels.append(str(pla)+'地区')
place_data=data[data['地点']==pla] #各个地区的数据
#分别计算各个地区的饮料和非饮料的总收入
place_income=place_data.groupby(place_data['商品大类'])['金额'].sum()
#分别计算各个地区的饮料和非饮料的毛利润
NonDrink_place_profit=place_income['非饮料']*0.2
Drink_place_profit=place_income['饮料']*0.25
#计算地区总利润
place_profit=NonDrink_place_profit+Drink_place_profit
#保存于列表中
profit.append(round(place_profit/total_profit*100,2))
'''绘图'''
plt.axes(aspect=1) #标准圆
plt.pie(x=profit,labels= labels,autopct='%0.2f%%')
plt.show()
f.close()