任務,從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])