数据分析实战—饼状图

5,520 阅读2分钟

前言

  提供的数据:数据

一、绘制饼状图

  饼状图可以表示数据的分布情况

  针对数据提出要求:绘制每个地区毛利润占总毛利润比例的饼图(假设饮料类毛利率为25% ,非饮料类为20% )

  1. 加载必要的包
import pandas as pd
import matplotlib.pyplot as plt
  1. 读取数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
  1. 提取地点名称
place=list(set(data['地点'])) #提取地点
  1. 计算总毛利润
#计算饮料和非饮料的总收入
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函数详解,以下为分组计算得出的总金额。

  1. 计算各个地区的毛利润
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函数用于保留小数点
  1. 绘制饼状图
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()

二、其它问题

数据

python画图 中文字体不显示的问题

数据分析实战—柱状图

数据分析实战—折线图

数据分析实战—饼状图

数据分析实战—气泡图

数据分析实战—热力图

参考

matplotlib官方资料