工具:jupyter notebook
目標:統(tǒng)計顏色分類該屬性每一種類型的銷售數(shù)量占比。
如下圖,該圖是源數(shù)據(jù),顏色分類即auctionSku列的數(shù)據(jù)內(nèi)容。

實驗步驟:
導(dǎo)入包:
import pandas as pd
import re
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from pylab import *
from datetime import date,datetime
讀取數(shù)據(jù):
df=pd.read_excel('perfectdiary_data.xlsx',index_col=None)
print(len(df['auctionSku']))
df['auctionSku'].values
print(type(df['auctionSku'].values))
清洗數(shù)據(jù):
content = ' '?
c_list = []
for i in df['auctionSku'].values:
????content += i # 拼接成字符串
# 替換每一項字符串內(nèi)容不需要的字詞、符號;注意?:replace('顏色分類:',' 這里有空格'),空格為標記,方便后面分割字符串
? ? data = content.replace('顏色分類:',' ').replace('[New]','').replace('【預(yù)售】','').replace('.','').replace('預(yù)售','').replace('-','')
? ? c_list=data.split(' ') #以空格分割字符串,返回的數(shù)據(jù)類型為列表
print(c_list)
結(jié)果如下圖:

統(tǒng)計每個字段出現(xiàn)的頻數(shù):
result_dic={}
for item_str in c_list[1:]: #c_list[1:]表示從索引1(即第二個值)開始取到。因為前面用空格分割字符串,所以索引0取到的值為空
????if item_str not in result_dic:
????????result_dic[item_str]=1
????else:
????????result_dic[item_str]+=1
result_dic
結(jié)果如圖:

列表a和b中的值進行基本的數(shù)學(xué)計算,算出每種相同的數(shù)據(jù)類型在總的類型數(shù)量中所占的比例;統(tǒng)計Excel中表格中相同的對象數(shù)據(jù),同時把它存入a、b。
a=[]
b=[]
for key in result_dic:
????a.append(key) ???????
????b.append(result_dic[key])
繪制圖形:
plt.rcParams['font.sans-serif']=['SimHei']#正常顯示中文標簽
size=[]
t=sum(b)#統(tǒng)計總的發(fā)表篇幅
label=a
#算出每種相同的數(shù)據(jù)類型在總的類型數(shù)量中所占的比例
for u in b:
????i=u/t
????size.append(i)
????plt.plot(size)
plt.title('顏色分類屬性餅狀圖')
plt.pie(size,labels=label,colors="rgb",autopct='%1.lf%%',shadow=False,startangle=90)
plt.show()
結(jié)果如圖:

完結(jié),撒花