赞
踩
泰迪杯数据地址:https://www.tipdm.org/bdrace/jljingsai/20181008/1488.html#sHref
泰迪杯数据分析2018年B题任务1题目:
任务 1.1 根据附件 1 中的数据,提取每台售货机对应的销售数据,保存# 系列文章目录
任务 1.2 计算每台售货机 2017 年 4 月份的交易额、订单量及所有售货机交易总额和订单总量,以表格形式体现在报告中。
任务 1.3 计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中。
题目:根据附件 1 中的数据,提取每台售货机对应的销售数据,保存在 CSV 文件中,文件名分别为“task1-1A.csv”、“task1-1B.csv”、…、task1- 1E.csv”。
附件1数据:
代码内容:
import pandas as pd
from datetime import datetime
def task1(data1,level):
data=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\附件1.csv',encoding='gbk')#获取数据
data.支付时间=pd.to_datetime(data.支付时间,format='%Y/%m/%d')#对数据进行时间数据转换
data.drop(columns='设备ID',axis=1,inplace=True)#删除设备ID
data=data.loc[data['地点']==level,:]#取出地点
data.drop(columns='地点',axis=1,inplace=True)#删除地点
data.to_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data1,encoding='gbk')#保存数据
task1('task1-B.csv','B')
task1('task1-C.csv','C')
task1('task1-D.csv','D')
task1('task1-E.csv','E')
12345678910111213
代码思路:
通过python类方法进行统一的整合处理。在类中使用索引方法对地点数据进行索引便可得出数据集。
因提取出的地点数据中设备ID与地点是相同的,因此我将提取出的数据删除设备ID与地点,节省表单空间。
结果:
题目:计算每台售货机 2017 年 4 月份的交易额、订单量及所有售货机交易总额和订单总量,以表格形式体现在报告中。
分析:目标为计算4月份的交易额与订单量,但在表单中只有实际金额与商品,因此我们需要先对数据进行索引,先索引出4月份的数据,然后进行统计交易额与订单量。
实现代码:
import numpy as np import pandas as pd from datetime import datetime def task2(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#提取出月数据,并设立一列记录月数据,方便查询 data_t=data_2.loc[data_2['月']==4]#提取出月份为4的数据表 data_meny=data_t['实际金额'].sum() data_xs=data_t['商品'].size print('交易额:'+str(data_meny)+',订单量:'+str(data_xs)) task2('task1-A.csv') task2('task1-B.csv') task2('task1-C.csv') task2('task1-D.csv') task2('task1-E.csv') task2('附件1.csv') 1234567891011121314151617
代码思路:
此依旧使用类方法进行处理,首先对数据中的‘支付时间’进行时间标准化处理,然后使用datetime
中的datetime方法进行月份提取,并且将提取出来的月份数据添加入列表中,以便之后使用。
最后将‘实际金额’与‘商品’进行统计。
结果:
交易额:1804.5,订单量:447
交易额:2457.3999999999996,订单量:603
交易额:3232.3,订单量:734
交易额:1679.1,订单量:443
交易额:3723.1000000000004,订单量:895
交易额:12896.400000000001,订单量:3122
123456
题目:计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中。
分析:此题与1.2的处理方法是相似的,首先对月份数据进行提取,随后统计每月的交易额与订单量,每单平均交易额则是月总交易额除以月总订单量,日均订单量则是月总订单量除以当月天数。
实现代码:
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#此是因为后面任务需要使用到,所以返回data_sum #return task task3('task1-A.csv') task3('task1-B.csv') task3('task1-C.csv') task3('task1-D.csv') task3('task1-E.csv') 123456789101112131415161718192021222324252627282930
代码思路:与1.2的代码思路相同。
结果:
'''因为数据众多,因此这里显视A数据的结果'''
月份 每月的每单平均交易额 日均订单量
0 1 4.504478 10.806452
1 2 3.859649 4.071429
2 3 3.584314 8.225806
3 4 4.035794 14.900000
4 5 4.477513 24.387097
5 6 4.047334 55.633333
6 7 4.096639 15.354839
7 8 3.357357 21.483871
8 9 4.306731 34.666667
9 10 4.020447 50.483871
10 11 4.471552 38.666667
11 12 3.787818 64.612903
1234567891011121314
关于之后的任务2,3,4题目,我将会持续更新滴。泰迪杯数据分析比赛2018年B题解答-任务2
泰迪杯数据地址: https://www.tipdm.org/bdrace/jljingsai/20181008/1488.html#sHref.
泰迪杯数据分析2018年B题任务2题目:
任务 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 1234567891011121314151617181920
代码思路:与任务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()
123456789101112
结果:
绘制每台售货机每月总交易额折线图及交易额月环比增长率柱状图。
目标:得出每台售货机每月的总交易额与月环比增长率,并绘制折线图与柱状图。
分析:在前篇文章任务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') 123456789101112131415161718192021222324252627282930
以此可以得出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() 1234567891011121314151617
结果:
绘制完折线图后,开始绘制月环比增长率柱状图。
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的月环比增长率
123456789101112
结果:
绘制每台售货机毛利润占总毛利润比例的饼图(假设饮料类毛利率为 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() 123456789101112131415161718
结果:
绘制 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') 1234567891011121314151617181920
代码思路:此代码与前面的任务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
1234567891011
结果:
提取出数据后,对数据表提取出对本题有用信息,可使用透视表来完成。
实现代码:
import numpy as np
grouped=data_six.groupby(by=['日','时'])#将日与时进行分组
result=grouped.aggregate({'商品':np.size})#计算商品总数,并插入透视表中
Summary=result.pivot_table(index='时',columns='日',values='商品')
Summary
12345
结果:
此图片因数据过大,因此只展示一半数据,表中出现的NaN表示此数据为空
制作完透视表后,便可对数据表进行热力图绘制了。
实现代码:
sns.heatmap(data=Summary,cmap='PuBu',linewidths=.1,annot=False,fmt='.1e')
plt.title('销售热力图')
plt.show()
123
结果:
任务1.5总体代码:
%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) 1234567891011121314151617181920212223242526
还请各位大神指点我这小白的代码。
泰迪杯数据地址: https://www.tipdm.org/bdrace/jljingsai/20181008/1488.html#sHref.
泰迪杯数据分析2018年B题任务3题目:
任务 3.1 分析各售货机商品销售数据,总结规律,给出每台售货机饮料类商品的标签,结果保存在 CSV 文件中,文件名分别为 “task3-1A.csv”、 “task3-1B.csv”、…、“task3-1E.csv”,格式如下表所示。
任务 3.2 在任务 3.1 的基础上进行标签拓展,依据标签生成完整的售货机画像,结果保存在 CSV 文件中,文件名分别为“task3-2A.csv”、task3- 2B.csv”、…、“task3-2E.csv”。依据此画像进行总结描述,给出营销意见。
分析各售货机商品销售数据,总结规律,给出每台售货机饮料类商品的标签,结果保存在 CSV 文件中,文件名分别为 “task3-1A.csv”、 “task3-1B.csv”、…、“task3-1E.csv”,格式如下表所示。
目标:得出各售货机商品销售数据,并对各商品进行分类贴标签。
分析:首先我们得对各售货机的各商品销售量进行统计,然后使用聚类算法对商品进行分类。在此聚类算法中,我将会使用KMeans聚类算法。
首先我们需要对A-E五台售货机进行数据整理,将各商品的总实际金额与销售量制作成表单。
实现代码:
import pandas as pd
data=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\task1-A.csv',encoding='gbk')
dalei=data['商品'].unique().tolist()#提取出商品总列表,方便之后进行分类
dalei
datasum=[]
datasem=[]
for i in dalei:
data_x=data[data['商品']==i]['实际金额'].sum()
data_t=data[data['商品']==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)
task1_2
1234567891011121314
结果:
因为销售量的数据差值过大,因此我们需要对销售量列进行缩发处理,将数据缩发到[0~1]区间。
实现代码:
from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn import preprocessing
X = preprocessing.minmax_scale(task1_2['销售量'])#对销售量数据进行缩放处理
X = pd.DataFrame(X, columns=['销售量'])#将缩放后的数据整理成列表
X
123456
结果:
然后我们可以将销售量的列表数据进行KMeans聚类算法,算出分类结果。
实现代码:
kmeans=KMeans(n_clusters=3)
kmeans.fit(X)
#将标签插入在次插入之前task1_2表格中
task1_2['cluster']=kmeans.labels_
task1_2
12345
结果:
到此,聚类分析就已经完成了,后面我们只需要对cluster列进行数值替代就可以了,将‘2’换为热销,‘1’换为正常,‘0’为滞销。并进行保存
实现代码:
for i in range(len(task1)):
if(task1[i] == 2):
task1[i] = '热销'
elif(task1[i]==1):
task1[i]='正常'
elif(task1[i]==0):
task1[i]='滞销'
task1_2['cluster']=task1
task1=task1_2['商品']
task2=task1_2['cluster']
task=pd.DataFrame({'商品':task1,'标签':task2})#提取出商品与标签列,整合成题目要求的表单。
task.to_csv(r'D:\大数据学习\数据分析与挖掘\B题\result\task.csv',encoding='gbk')#将表单保存为csv表格形式
123456789101112
这样子就完成3.1啦。
另外,我们可以先查看一下销售数据的分布情况,以便之后的任务3.2的进行。使用散点图对销售量与总实际金额进行散点图绘制。
实现代码:
%matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
sns.lmplot(x='销售量',y='总实际金额',hue='cluster',markers=['^','o','s'],data=task1_2,fit_reg=False,scatter_kws={'alpha':0.8},legend_out=False)
plt.xlabel('销售量')
plt.ylabel('总实际金额')
plt.title('销售与总金额的散点图')
plt.show()
123456789
结果:
import pandas as pd from sklearn.cluster import KMeans from sklearn import metrics from sklearn import preprocessing def task9(data,data_1): data1=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data,encoding='gbk') dalei=data1['商品'].unique().tolist()#提取出商品总列表,方便之后进行分类 datasum=[] datasem=[] for i in dalei: data_x=data1[data1['商品']==i]['实际金额'].sum() data_t=data1[data1['商品']==i]['商品'].size datasum.append(data_x)#插入列表中 datasem.append(data_t) task1_2 = pd.DataFrame({'商品':dalei,'总实际金额':datasum,'销售量':datasem})#对列表进行整理,制作成表单 X = preprocessing.minmax_scale(task1_2['销售量']) X = pd.DataFrame(X, columns=['销售量']) kmeans=KMeans(n_clusters=3) kmeans.fit(X) #将标签插入players表格中 task1_2['cluster']=kmeans.labels_ task1=list(task1_2['cluster']) for i in range(len(task1)): if(task1[i] == 2): task1[i] = '热销' elif(task1[i]==1): task1[i]='正常' elif(task1[i]==0): task1[i]='滞销' task1_2['cluster']=task1 task1=task1_2['商品'] task2=task1_2['cluster'] task=pd.DataFrame({'商品':task1,'标签':task2}) #return task task.to_csv(r'D:\大数据学习\数据分析与挖掘\B题\result\\'+data_1,encoding='gbk') task9('task1-A.csv','task3-A.csv') task9('task1-B.csv','task3-B.csv') task9('task1-C.csv','task3-C.csv') task9('task1-D.csv','task3-D.csv') task9('task1-E.csv','task3-E.csv') 12345678910111213141516171819202122232425262728293031323334353637383940
任务3.2我是通过总实际金额与销售量进行整合,与3.1是相似的,因3.2可选择多种方式进行,因此在此并不做代码介绍啦。
泰迪杯数据地址: https://www.tipdm.org/bdrace/jljingsai/20181008/1488.html#sHref.
前言:由于许多码友咨询3.2的任务代码,因此为了实现码友们的期望,特此补充3.2的实现代码。
任务 3.2 在任务 3.1 的基础上进行标签拓展,依据标签生成完整的售货机画像,结果保存在 CSV 文件中,文件名分别为“task3-2A.csv”、task3- 2B.csv”、…、“task3-2E.csv”。依据此画像进行总结描述,给出营销意见。
因为任务3.2是基于任务3.1的代码,因此先展现出3.1的代码:
import pandas as pd from sklearn.cluster import KMeans from sklearn import metrics from sklearn import preprocessing def task9(data): data1=pd.read_csv(r'D:\大数据学习\数据分析与挖掘\B题\\'+data,encoding='gbk') dalei=data1['商品'].unique().tolist()#提取出商品总列表,方便之后进行分类 datasum=[] datasem=[] for i in dalei: data_x=data1[data1['商品']==i]['实际金额'].sum() data_t=data1[data1['商品']==i]['商品'].size datasum.append(data_x)#插入列表中 datasem.append(data_t) task1_2 = pd.DataFrame({'商品':dalei,'总实际金额':datasum,'销售量':datasem})#对列表进行整理,制作成表单 X = preprocessing.minmax_scale(task1_2['销售量']) X = pd.DataFrame(X, columns=['销售量']) kmeans=KMeans(n_clusters=3) kmeans.fit(X) #将标签插入players表格中 task1_2['cluster']=kmeans.labels_ task1=list(task1_2['cluster']) for i in range(len(task1)): if(task1[i] == 2): task1[i] = '热销' elif(task1[i]==1): task1[i]='正常' elif(task1[i]==0): task1[i]='滞销' task1_2['cluster']=task1 task1=task1_2['商品'] task2=task1_2['cluster'] task=pd.DataFrame({'商品':task1,'标签':task2,'销售金额':datasum}) return task #task.to_csv(r'D:\大数据学习\数据分析与挖掘\B题\result\\'+data_1,encoding='gbk') a=task9('task1-A.csv') b=task9('task1-B.csv') c=task9('task1-C.csv') d=task9('task1-D.csv') e=task9('task1-E.csv') 1234567891011121314151617181920212223242526272829303132333435363738394041
本人任务3.2的处理方式与3.1的是相似的,如想看整体思想可以翻看任务3.1的博客,在此就不多做解释了。
import pandas as pd from sklearn.cluster import KMeans from sklearn import metrics from sklearn import preprocessing def task10(date,date1): X=preprocessing.minmax_scale(date['销售金额']) X=pd.DataFrame(X,columns=['销售金额']) kmeans=KMeans(n_clusters=3) kmeans.fit(X) date['cluster']=kmeans.labels_ task1=list(date['cluster']) for i in range(len(task1)): if(task1[i] == 2): task1[i] = '高金额' elif(task1[i]==1): task1[i]='普通' elif(task1[i]==0): task1[i]='低金额' date['cluster']=task1 b=date['标签']+date['cluster'] task=pd.DataFrame({'商品':date['商品'],'销售标签':date['标签'], '总金额标签':date['cluster'],'商品总体画像':b}) task.to_csv(r'D:\大数据学习\数据分析与挖掘\B题\result\\'+date_1,encoding='gbk') return task task10(a,'task3-2A') task10(b,'task3-2B') task10(c,'task3-2C') task10(d,'task3-2D') task10(e,'task3-2E') 1234567891011121314151617181920212223242526272829
售货机A结果:
由此可以得出各商品的总销售金额与销售量形成的画像啦。
另外因本人技术问题,任务4得出的预算结果不如预期,因此任务4暂时不展现出来,等本人技术加深后,再更新任务4的博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。