当前位置:   article > 正文

泰迪杯数据分析比赛2018年B题解答_根据预处理后的数据,提取每台售货机对应的销售数据,保存在csv文件中,文件名分别为

根据预处理后的数据,提取每台售货机对应的销售数据,保存在csv文件中,文件名分别为

泰迪杯数据分析比赛2018年B题解答-任务1

任务1-文章目录

泰迪杯数据地址:https://www.tipdm.org/bdrace/jljingsai/20181008/1488.html#sHref
泰迪杯数据分析2018年B题任务1题目:

任务 1.1 根据附件 1 中的数据,提取每台售货机对应的销售数据,保存# 系列文章目录
任务 1.2 计算每台售货机 2017 年 4 月份的交易额、订单量及所有售货机交易总额和订单总量,以表格形式体现在报告中。
任务 1.3 计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中。


任务1 数据处理与分析

任务1.1

题目:根据附件 1 中的数据,提取每台售货机对应的销售数据,保存在 CSV 文件中,文件名分别为“task1-1A.csv”、“task1-1B.csv”、…、task1- 1E.csv”。

附件1数据:

附件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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

代码思路:
通过python类方法进行统一的整合处理。在类中使用索引方法对地点数据进行索引便可得出数据集。
因提取出的地点数据中设备ID与地点是相同的,因此我将提取出的数据删除设备ID与地点,节省表单空间。
结果:

提取后的数据表

任务1.2

题目:计算每台售货机 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

代码思路:
此依旧使用类方法进行处理,首先对数据中的‘支付时间’进行时间标准化处理,然后使用datetime中的datetime方法进行月份提取,并且将提取出来的月份数据添加入列表中,以便之后使用。
最后将‘实际金额’与‘商品’进行统计。
结果:

交易额:1804.5,订单量:447
交易额:2457.3999999999996,订单量:603
交易额:3232.3,订单量:734
交易额:1679.1,订单量:443
交易额:3723.1000000000004,订单量:895
交易额:12896.400000000001,订单量:3122
123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

任务1.3

题目:计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中。

分析:此题与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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

代码思路:与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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结尾

关于之后的任务2,3,4题目,我将会持续更新滴。泰迪杯数据分析比赛2018年B题解答-任务2

任务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 三个月订单量的热力图,横轴以天为单
位,纵轴以小时为单位。从热力图可以分析得出哪些结论?


任务2 数据可视化

任务2.1

绘制 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

代码思路:与任务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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:
结果图片

任务2.2

绘制每台售货机每月总交易额折线图及交易额月环比增长率柱状图。

目标:得出每台售货机每月的总交易额与月环比增长率,并绘制折线图与柱状图。

分析:在前篇文章任务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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

以此可以得出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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

结果:
结果图片
绘制完折线图后,开始绘制月环比增长率柱状图。

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:
结果图片

任务2.3

绘制每台售货机毛利润占总毛利润比例的饼图(假设饮料类毛利率为 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

结果:
结果图片

任务2.4

绘制 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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

代码思路:此代码与前面的任务1.2是相似的,主要考验气泡图绘制。

结果:
结果图片

注:在此我没有将各气泡进行颜色区分,如果要对颜色进行区分,只要将绘制气泡图的代码拉出类,然后对各销售与订单量进行逐步插入便可啦。

任务2.5

绘制售货机 C 6、7、8 三个月订单量的热力图,横轴以天为单位,纵轴以小时为单位。从热力图可以分析得出哪些结论?

目标:得出6,7,8三个月的各天的各时的订单量,然后再绘制热力图。

分析:首先将数据中的时间数据进行提取出月、天、时,三个列数据,然后对总体数据进行透视表绘制,最后画出热力图。
最初数据:
c表数据

提取月、天、时数据实现代码:

%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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:
结果图片
提取出数据后,对数据表提取出对本题有用信息,可使用透视表来完成。

实现代码:

import numpy as np
grouped=data_six.groupby(by=['日','时'])#将日与时进行分组
result=grouped.aggregate({'商品':np.size})#计算商品总数,并插入透视表中
Summary=result.pivot_table(index='时',columns='日',values='商品')
Summary
12345
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果:
结果图片

此图片因数据过大,因此只展示一半数据,表中出现的NaN表示此数据为空

制作完透视表后,便可对数据表进行热力图绘制了。

实现代码:

sns.heatmap(data=Summary,cmap='PuBu',linewidths=.1,annot=False,fmt='.1e')
plt.title('销售热力图')
plt.show()
123
  • 1
  • 2
  • 3
  • 4

结果:
结果图片
任务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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

还请各位大神指点我这小白的代码。

泰迪杯数据分析比赛2018年B题解答-任务3

任务3-文章目录

泰迪杯数据地址: 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”。依据此画像进行总结描述,给出营销意见。


任务3.1

分析各售货机商品销售数据,总结规律,给出每台售货机饮料类商品的标签,结果保存在 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

结果:
结果图片
因为销售量的数据差值过大,因此我们需要对销售量列进行缩发处理,将数据缩发到[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果:
结果图片
然后我们可以将销售量的列表数据进行KMeans聚类算法,算出分类结果。
实现代码:

kmeans=KMeans(n_clusters=3)
kmeans.fit(X)
#将标签插入在次插入之前task1_2表格中
task1_2['cluster']=kmeans.labels_
task1_2
12345
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果:
结果图片

到此,聚类分析就已经完成了,后面我们只需要对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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这样子就完成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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果:
结果图片

任务3.1全部代码

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

任务3.2我是通过总实际金额与销售量进行整合,与3.1是相似的,因3.2可选择多种方式进行,因此在此并不做代码介绍啦。

泰迪杯数据分析比赛2018年B题解答-任务3补充3.2

任务3-文章目录

泰迪杯数据地址: 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的代码:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

本人任务3.2的处理方式与3.1的是相似的,如想看整体思想可以翻看任务3.1的博客,在此就不多做解释了。

任务3.2实现代码:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

售货机A结果:
结果图片

由此可以得出各商品的总销售金额与销售量形成的画像啦。
另外因本人技术问题,任务4得出的预算结果不如预期,因此任务4暂时不展现出来,等本人技术加深后,再更新任务4的博客。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号