任务,从excel中读取啤酒销售订单,然后算出每个品牌的铺店率。我的想法是按照铺店率从大到小排序作为横坐标,然后纵坐标是销售量。那么 常理先搞定头文件
import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd用pandas读取excel中文也可以,之前直接用xlrd折腾了很久中文读入不了。 因为要在图片中显示中文 所以 需要对matplotlib进行设置,中文设置如下
mpl.rcParams['font.sans-serif'] = ['KaiTi'] mpl.rcParams['font.serif'] = ['KaiTi']我的环境是win10 补充一些Python基础知识
a={}#创建字典 a=[]#创建list class node(object): def __init__(self):#重载初始化的过程 self.brand='';self.coverage=0; self.sales=0;self.sales_num=0; self.dict={}; def __lt__(self, other):#重载运算符 return self.coverage>other.coverage其他Python里面的类所有得函数名称需要去百度搜索一下
import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['KaiTi'] mpl.rcParams['font.serif'] = ['KaiTi'] import numpy as np import pandas as pd class node(object): def __init__(self): self.brand='';self.coverage=0; self.sales=0;self.sales_num=0; self.dict={}; def __lt__(self, other): return self.coverage>other.coverage excel_='bud.xlsx';dict={} data1= pd.read_excel(excel_,sheet_name='菜品数据') brand_name=list(data1['beer_brand_enum'].values) poc_name=list(set(data1['poc_name_dummy'].values)) t=set(brand_name);t=list(t) data=[node() for i in range(len(t))] for i in range(len(t)): data[i].brand=t[i] dict[t[i]]=i for j in range(len(poc_name)): data[i].dict[poc_name[j]]=0 poc_name1=poc_name poc_name=list(data1['poc_name_dummy'].values) sales_num=list(data1['sales_volume_num'].values) sales=list(data1['sales_value_cny_amt'].values) def check(x): t=dict[brand_name[x]] # print(t);print(poc_name[x]) data[t].sales_num+=sales_num[x] data[t].sales+=sales[x] if data[t].dict[poc_name[x]]==0: data[t].dict[poc_name[x]]=1 data[t].coverage+=1 print(len(brand_name)) for i in range(len(brand_name)): check(i) for i in range(len(t)): data[i].coverage=data[i].coverage/(len(poc_name1)+1) #print(data[i].brand,data[i].coverage,data[i].sales,data[i].sales_num) data.sort() for i in range(len(t)): print(data[i].brand,data[i].coverage,data[i].sales,data[i].sales_num) x=[];y=[];x1=[];y1=[]; for i in range(len(t)): x.append(data[i].brand);x1.append(data[i].brand) y.append(data[i].sales_num/1000);y1.append(data[i].sales) plt.figure(figsize=(len(t),10)) plt.bar(x, y, align = 'center') #plt.bar(x1, y1, color = 'g', align = 'center') plt.title(u'覆盖率与销售量的关系',fontsize=65,color='r') plt.ylabel(u'销售额(千瓶)',fontsize=65) plt.xlabel(u'品牌(按照覆盖率从大到小排序)',fontsize=65) plt.show() # for i in range(len(brand_name)): # print(brand_name[i])http://www.elijahqi.win/archives/4038