泰迪杯数据地址: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')
代码思路:
通过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')
代码思路:
此依旧使用类方法进行处理,首先对数据中的‘支付时间’进行时间标准化处理,然后使用datetime
中的datetime方法进行月份提取,并且将提取出来的月份数据添加入列表中,以便之后使用。
最后将‘实际金额’与‘商品’进行统计。
结果:
交易额:1804.5,订单量:447
交易额:2457.3999999999996,订单量:603
交易额:3232.3,订单量:734
交易额:1679.1,订单量:443
交易额:3723.1000000000004,订单量:895
交易额:12896.400000000001,订单量:3122
题目:计算每台售货机每个月的每单平均交易额与日均订单量,以表格形式体现在报告中。
分析:此题与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')
代码思路:与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
关于之后的任务2,3,4题目,我将会持续更新滴。
还请各位大神指点我这小白的代码。