任务 2.1 绘制 2017 年 6 月销量前 5 的商品销量柱状图。
任务 2.2 绘制每台售货机每月总交易额折线图及交易额月环比增长率柱
状图。
任务 2.3 绘制每台售货机毛利润占总毛利润比例的饼图(假设饮料类毛
利率为 25%,非饮料类为 20%)。
任务 2.4 绘制 4 月每台售货机交易额与订单量气泡图,横轴为售货机编
号,纵轴为月订单量。
任务 2.5 绘制售货机 C 6、7、8 三个月订单量的热力图,横轴以天为单
位,纵轴以小时为单位。从热力图可以分析得出哪些结论?
绘制 2017 年 6 月销量前 5 的商品销量柱状图。
老规矩,首先查看一下数据:
目标:此是得出6月份销量前5的商品,并绘制柱状图
分析:首先面对数据,我们得读取数据,然后提取出6月份的数据,紧接着需要对6月份数据中的商品进行总计算,算出商品月销售量。之后进行排序提取出前五数据,并制作柱状图。
实现代码:
import pandas as pd
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
data=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\附件1.csv',encoding='gbk')
data.支付时间=pd.to_datetime(data.支付时间,format='%Y/%m/%d')
data['月']=data['支付时间'].dt.month#提取出月数据,并设立一列记录月数据,方便查询
data_1=data.loc[data['月']==6]
dalei=data_1['商品'].unique().tolist()#提取出商品总列表,方便之后进行分类
datasum=[]#设立列表,以便之后使用
datasem=[]#设立列表,以便之后使用
for i in dalei:#对dalei商品数据进行筛选循环,以便提取出对于商品
data_x=data_1[data_1['商品']==i]['实际金额'].sum()#提取出各商品对应的“实际金额”的总金额
data_t=data_1[data_1['商品']==i]['商品'].size#提取出各商品的总数
datasum.append(data_x)#插入列表中
datasem.append(data_t)
task1_2 = pd.DataFrame({
'商品':dalei,'总实际金额':datasum,'销售量':datasem})#对列表进行整理,制作成表单
task1_2.sort_values(by='销售量',ascending=False,inplace=True)#对列表进行以销售量为标准的降序排列
taen=task1_2.head()#取出前5行数据
taen
代码思路:与任务1一样,先对数据进行处理,将时间数据标准化,然后提取出月份数据,以便之后的索引。
然后提取出6月份的数据,对6月份的商品数据进行整合。
最后将数据插入列表中,建立新的表单,对表单进行以销售量为标准的降序处理,再提取出前五行数据。
%matplotlib#将图置于外窗口显视
plt.rcParams['font.sans-serif']=['SimHei']#将文字设置为微软雅黑
plt.style.use('ggplot')#设置背景图
plt.bar(x=range(taen.shape[0]),#设置柱个数
tick_label=taen.商品,#设置x轴命名
height=taen.销售量,#设置y轴数据
color='red')#颜色取红色
plt.ylabel('销售量')
plt.title('6月份商品销售量前五排名')
for x,y in enumerate(taen.销售量):
plt.text(x,y+0.5,'%s'%round(y),ha='center')#将销售量显视于柱之上
plt.show()
绘制每台售货机每月总交易额折线图及交易额月环比增长率柱状图。
目标:得出每台售货机每月的总交易额与月环比增长率,并绘制折线图与柱状图。
分析:在前篇文章任务1.3中已计算出每台售货机的月总交易额,可以直接调用1.3的类进行计算。而月环比增长率=(本月交易额-上月交易额)/上月交易额×100%。
任务1.3代码:
def task3(data1):
data_2=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data1,encoding='gbk')
data_2.支付时间=pd.to_datetime(data_2.支付时间,format='%Y/%m/%d')
data_2['月']=data_2['支付时间'].dt.month#提取出月数据,并设立一列记录月数据,方便查询
date=[31,28,31,30,31,30,31,31,30,31,30,31]
a=0
data_vm=[]
data_vs=[]
data_mone=[]
data_sum=[]
while a<12:
a+=1
data_t=data_2.loc[data_2['月']==a]#提取出月份为4的数据表
data_meny=data_t['实际金额'].sum()
data_xs=data_t['商品'].size
data_vmeny=int(data_meny)/int(data_xs)
data_vxs=int(data_xs)/int(date[a-1])
data_vm.append(data_vmeny)
data_vs.append(data_vxs)
data_mone.append(a)
data_sum.append(data_meny)
task=pd.DataFrame({
'月份':data_mone,'每月的每单平均交易额':data_vm,'日均订单量':data_vs})
print(task)
return data_sum
#return task
sum_A=task3('task1-A.csv')
sum_B=task3('task1-B.csv')
sum_C=task3('task1-C.csv')
sum_D=task3('task1-D.csv')
sum_E=task3('task1-E.csv')
以此可以得出sum_A至sum_E的每台售货机月总交易额,之后就可以绘制折线图啦。
'''为使各代码尽力独立,因此在这设置月份,不进行调用'''
mone=[]
a=0
while a<12:
a+=1
mone.append(a)
plt.plot(task.月份,sum_A,linestyle='-',linewidth=2,label='A')
plt.plot(task.月份,sum_B,linestyle='-',linewidth=2,label='B')
plt.plot(task.月份,sum_C,linestyle='-',linewidth=2,label='C')
plt.plot(task.月份,sum_D,linestyle='-',linewidth=2,label='D')
plt.plot(task.月份,sum_E,linestyle='-',linewidth=2,label='E')
plt.ylabel('交易额')
plt.ylabel('月份')
plt.title('每月交易额折线图')
plt.legend()
plt.show()
def task5(sum_t):
i=0
plt.rcParams['axes.unicode_minus']=False#使图可正常显视负数
sum_v=[]#建立列表方便统计
for i in range(1,12):
sum_i=(sum_t[i]-sum_t[i-1])/sum_t[i-1]#计算月环比增长率
sum_v.append(sum_i)
plt.bar(x=range(11),tick_label=task.月份[1:],height=sum_v,color='steelblue')
plt.ylabel('增长比例')
plt.title('增长比例图')
plt.show()
task5(sum_A)#调用函数,查看售货机A的月环比增长率
绘制每台售货机毛利润占总毛利润比例的饼图(假设饮料类毛利率为 25%,非饮料类为 20%)。
目标:整合各售货机的总金额,并且绘制饼状图(假设饮料与非饮料类的毛利率,需要对各商品进行分类计算,然后对饮料与非饮料类进行毛利率计算,在此不做此计算。)
实现代码:
def task6(data):
data_m=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data,encoding='gbk')
data_meny=data_m['实际金额'].sum()#得出各售货机的总实际金额
return data_meny
A=task6('task1-A.csv')
B=task6('task1-B.csv')
C=task6('task1-C.csv')
D=task6('task1-D.csv')
E=task6('task1-E.csv')
tsum=task6('附件1.csv')
data_sum=[A,B,C,D,E]#将数据进行整合
labels=['A','B','C','D','E']
data_sum
plt.pie(x=data_sum,labels=labels,autopct='%.1f%%',colors=['blue','red','purple','green','orange'],
pctdistance=0.6,labeldistance=1.2)
plt.title('各售货机占总金额饼状图')
plt.show()
绘制 4 月每台售货机交易额与订单量气泡图,横轴为售货机编号,纵轴为月订单量。
目标:提取出4月份各售货机的交易额与订单量,并绘制气泡图。
实现代码:
def task7(data1,name):
data_2=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data1,encoding='gbk')
data_2.支付时间=pd.to_datetime(data_2.支付时间,format='%Y/%m/%d')
data_2['月']=data_2['支付时间'].dt.month#提取出月数据,并设立一列记录月数据,方便查询
data_t=data_2.loc[data_2['月']==4]#提取出月份为4的数据表
data_meny=data_t['实际金额'].sum()#统计整体金额
data_xs=data_t['商品'].size
```气泡图的绘制```
plt.scatter(x=name,y=data_xs,s=(data_meny/2),color='black',label=name,alpha=0.6)
plt.xlabel('售货机名称')
plt.ylabel('订单量')
plt.title('4月份订单量与销售量气泡图')
plt.legend()
plt.show
task7('task1-A.csv','A')
task7('task1-B.csv','B')
task7('task1-C.csv','C')
task7('task1-D.csv','D')
task7('task1-E.csv','E')
代码思路:此代码与前面的任务1.2是相似的,主要考验气泡图绘制。
注:在此我没有将各气泡进行颜色区分,如果要对颜色进行区分,只要将绘制气泡图的代码拉出类,然后对各销售与订单量进行逐步插入便可啦。
绘制售货机 C 6、7、8 三个月订单量的热力图,横轴以天为单位,纵轴以小时为单位。从热力图可以分析得出哪些结论?
目标:得出6,7,8三个月的各天的各时的订单量,然后再绘制热力图。
分析:首先将数据中的时间数据进行提取出月、天、时,三个列数据,然后对总体数据进行透视表绘制,最后画出热力图。
最初数据:
提取月、天、时数据实现代码:
%matplotlib
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data_c=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\task1-C.csv',encoding='gbk')
data_c.支付时间=pd.to_datetime(data_c.支付时间,format='%Y/%m/%d')#将时间数据标准化
data_c['月']=data_c['支付时间'].dt.month#提取出月数据,并设立一列记录月数据,方便查询
data_c['日']=data_c['支付时间'].dt.day#同上
data_c['时']=data_c['支付时间'].dt.hour
data_c
结果:
提取出数据后,对数据表提取出对本题有用信息,可使用透视表来完成。
实现代码:
import numpy as np
grouped=data_six.groupby(by=['日','时'])#将日与时进行分组
result=grouped.aggregate({
'商品':np.size})#计算商品总数,并插入透视表中
Summary=result.pivot_table(index='时',columns='日',values='商品')
Summary
此图片因数据过大,因此只展示一半数据,表中出现的NaN表示此数据为空
制作完透视表后,便可对数据表进行热力图绘制了。
实现代码:
sns.heatmap(data=Summary,cmap='PuBu',linewidths=.1,annot=False,fmt='.1e')
plt.title('销售热力图')
plt.show()
%matplotlib
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data_c=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\task1-C.csv',encoding='gbk')
data_c
data_c.支付时间=pd.to_datetime(data_c.支付时间,format='%Y/%m/%d')
data_c['月']=data_c['支付时间'].dt.month#提取出月数据,并设立一列记录月数据,方便查询
data_c
data_c['日']=data_c['支付时间'].dt.day
data_c
data_c['时']=data_c['支付时间'].dt.hour
data_c
def task8(month):
plt.rcParams['font.sans-serif']=['SimHei']
data_month=data_c.loc[data_c['月']==month]
grouped=data_month.groupby(by=['日','时'])
result=grouped.aggregate({
'商品':np.size})
Summary=result.pivot_table(index='时',columns='日',values='商品')
sns.heatmap(data=Summary,cmap='PuBu',linewidths=.1,annot=False,fmt='.1e')
plt.title('销售热力图')
plt.show()
task8(6)
task8(7)
task8(8)
任务2的可视化到这里就完成啦,之后我也将会对任务3与任务4进行编写。
还请各位大神指点我这小白的代码。