pandas從Excel中讀取數據 matplotlib繪圖 python結構體(類)學習

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章