2018年“泰迪杯”数据分析职业技能大赛B题

提示:以下是本篇文章正文内容,下面案例可供参考

目录

题目

任务 1 数据处理与分析

任务 2 数据可视化分析

任务 3 自动售货机画像

任务一

任务二

任务2.1

任务2.2

任务2.3

任务2.4

任务2.5


题目

任务 1 数据处理与分析

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

任务 1. 2 计算每台售货机 2017 年 4 月份的交易额、订单量及所有售货机 交易总额和订单总量,以表格形式体现在报告中。 任务 1. 3 计算每台售货机每个月的每单平均交易额与日均订单量,以表 格形式体现在报告中。

任务 2 数据可视化分析

任务 2. 1 绘制 2017 年 6 月销量前 5 的商品销量柱状图。

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

任务 2. 3 绘制每台售货机毛利润占总毛利润比例的饼图(假设饮料类毛 利率为 25%,非饮料类为 20%)。

任务 2. 4 绘制 4 月每台售货机交易额与订单量气泡图,横轴为售货机编 号,纵轴为月订单量。

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

任务 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”。依据此画像进行总结描述,给出营销意见。

任务一

#任务1.1
import pandas as pd
import numpy as np
from datetime import datetime
def task1(file, level):
    data = pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\附件1.csv', engine='python', encoding='utf-8')
    df = data.groupby('地点')
    A = df.get_group(level)
    A.to_csv('D:\\桌面\\2018 B题\\2018 B题\\' + file, encoding='utf-8-sig')
task1('task1-A.csv', 'A')
task1('task1-B.csv', 'B')
task1('task1-C.csv', 'C')
task1('task1-D.csv', 'D')
task1('task1-E.csv', 'E')


#任务1.2
money=[]
goods=[]
def task2(file):
    data=pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\'+file,engine='python',encoding='utf-8')
    if file=='task1-C.csv' or file=='附件1.csv':
        data=data[~data['支付时间'].isin(['2017/2/29/ 3:44:00 PM'])]
    data.支付时间=pd.to_datetime(data.支付时间,format='%Y/%m/%d %H:%M')
    data['月']=data['支付时间'].dt.month
    data_t=data.loc[data['月']==4]
    data_money=data['实际金额'].sum()
    data_goods=data_t['商品'].size
    money.append(data_money)
    goods.append(data_goods)
task2('task1-A.csv')
task2('task1-B.csv')
task2('task1-C.csv')
task2('task1-D.csv')
task2('task1-E.csv')
task2('附件1.csv')
taskt=pd.DataFrame({'交易额':money,'订单量':goods},index=['A','B','C','D','E','合计'])
taskt.to_csv('D:\\桌面\\2018 B题\\2018 B题\\task2.csv',encoding='utf-8-sig')


# 任务1.3
df = {}
def task3(file, level):
    Month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    money3 = []
    goods3 = []
    data = pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\' + file, engine='python', encoding='utf-8')
    if file == 'task1-C.csv' or file == '附件1.csv':
        data = data[~data['支付时间'].isin(['2017/2/29/ 3:44:00 PM'])]
    data.支付时间 = pd.to_datetime(data.支付时间, format='%Y/%m/%d %H:%M')
    data['月'] = data['支付时间'].dt.month
    for i in range(1, 13):
        data_t = data.loc[data['月'] == i]
        data_money3 = data['实际金额'].sum()
        data_goods3 = data_t['商品'].size
        mean_money3 = data_money3 / data_goods3
        mean_goods3 = data_goods3 / Month[i - 1]
        money3.append(mean_money3)
        goods3.append(mean_goods3)
    df[level + '每单平均交易额'] = money3
    df[level + '日均订单量'] = goods3
task3('task1-A.csv', 'A')
task3('task1-B.csv', 'B')
task3('task1-C.csv', 'C')
task3('task1-D.csv', 'D')
task3('task1-E.csv', 'E')
df1 = pd.DataFrame(df, index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
df1.to_csv('D:\\桌面\\2018 B题\\2018 B题\\task3.csv', encoding='utf-8-sig')

任务二

任务2.1

#任务2.1
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
data=pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\附件1.csv',engine='python')
data=data[~data['支付时间'].isin(['2017/2/29  3:44:00 PM'])]
data.支付时间=pd.to_datetime(data.支付时间,format='%Y/%m/%d')
data['月']=data['支付时间'].dt.month
data_six=data.loc[data['月']==6]
data_six2=data_six['商品'].unique().tolist()
sum=[]
size=[]
for i in data_six2:
    data_six3=data_six.loc[data_six['商品']==i]
    data_six_sum=data_six3['实际金额'].sum()
    data_six_size=data_six3['商品'].size
    sum.append(data_six_sum)
    size.append(data_six_size)
data1=pd.DataFrame({'商品':data_six2,'销量':size,'销售额':sum})
data1.sort_values(by='销量',ascending=False,inplace=True)
data2=data1.iloc[0:5]
x=np.arange(len(data2['商品']))
plt.bar(x-0.2,data2['销量'],width=0.4,label='销量')
plt.bar(x+0.2,data2['销售额'],width=0.4,label='销售额')
data3=data2['销量'].tolist()
data4=data2['销售额'].tolist()
data5=data2['商品'].tolist()
for i in x :
    plt.text(i-0.2,data3[i],data3[i],va='bottom',ha='center')
    plt.text(i+0.2, data4[i], data4[i], va='bottom', ha='center')
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False
plt.xticks(x,labels=data5,rotation=15)
plt.title('六月销量排名前五商品')
plt.legend()
plt.show()

2885065bbf664369a8c409015dc23c1e.png

任务2.2

代码如下:

#任务2.2
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
def task22(file,level):
    datatask2 = pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\'+file)
    if file=='task1-C.csv':
        datatask2=datatask2[~datatask2['支付时间'].isin(['2017/2/29  3:44:00 PM'])]
    datatask2.支付时间 = pd.to_datetime(datatask2.支付时间, format='%Y/%m/%d')
    datatask2['月'] = datatask2['支付时间'].dt.month
    sumtask2 = datatask2.groupby('月').sum('实际金额')
    month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    sumlist = sumtask2['实际金额'].tolist()
    disl = []
    for i in range(1, 12):
        dis = (sumlist[i] - sumlist[i - 1]) / sumlist[i - 1]
        disl.append(dis)
    plt.subplot(121)
    plt.plot(month, sumtask2['实际金额']
    plt.legend()
    plt.title('每月总交易额折线图')
    plt.subplot(122)
    plt.bar(month[1:], disl,label=level)
    plt.title('交易额月环比增长率柱状图')
    plt.legend()
task22('task1-A.csv','A')
task22('task1-B.csv','B')
task22('task1-C.csv','C')
task22('task1-D.csv','D')
task22('task1-E.csv','E')
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False
plt.show()

49b39be37ad14412a93dd2299df82c54.png

任务2.3

#任务2.3
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
datatask31=pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\附件2.csv')
datatask32=datatask31['商品'].tolist()
drink=datatask31.groupby('大类').groups
dlist=drink['饮料'].tolist()
s_profit=[]
def task23(file):
    datatask23 = pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\'+file)
    dsum = 0
    for i in dlist:
        ddrink = datatask23.loc[datatask23['商品'] == datatask32[i]]
        s = ddrink['实际金额'].sum()
        dsum += s
    sum1 = datatask23['实际金额'].sum()
    ndsum = sum1 - dsum
    profit = dsum * 0.25 + ndsum * 0.2
    s_profit.append(profit)
task23('task1-A.csv')
task23('task1-B.csv')
task23('task1-C.csv')
task23('task1-D.csv')
task23('task1-E.csv')
plt.pie(s_profit,labels=['A','B','C','D','E'],autopct='%.2f%%')
plt.title('售货机毛利润占总毛利润比例的饼图')
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()

 f78fb77a08fc4917ac04043bb2dc61dc.png

任务2.4

#任务2.4
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
sum4=[]
size4=[]
def task24(file):
    data24=pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\'+file)
    data24=data24[~data24['支付时间'].isin(['2017/2/29  3:44:00 PM'])]
    data24['支付时间']=pd.to_datetime(data24['支付时间'],format='%Y/%m/%d')
    data24['月']=data24['支付时间'].dt.month
    data24=data24[data24['月']==4]
    sum24=data24['实际金额'].sum()
    size24=data24['商品'].size
    sum4.append(sum24)
    size4.append(size24)
task24('task1-A.csv')
task24('task1-B.csv')
task24('task1-C.csv')
task24('task1-D.csv')
task24('task1-E.csv')
index=['A','B','C','D','E']
plt.scatter(index,size4,s=size4,color='pink')
plt.title('4月售货机交易额与订单量气泡图')
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()

 40a6382b70ec48e4b96e5aa82a1eead6.png


任务2.5

#任务2.5
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
dataC=pd.read_csv('D:\\桌面\\2018 B题\\2018 B题\\task1-C.csv')
dataC=dataC[~dataC['支付时间'].isin(['2017/2/29  3:44:00 PM'])]
dataC['支付时间']=pd.to_datetime(dataC['支付时间'],format='%Y/%m/%d')
dataC['月']=dataC['支付时间'].dt.month
dataC['日']=dataC['支付时间'].dt.day
dataC['时']=dataC['支付时间'].dt.hour
def task25(month):
    dataC1 = dataC[dataC['月'] == month]
    dataC1 = dataC1.groupby(['日', '时'])
    grp = dataC1.aggregate({'商品': np.size})
    grp1 = grp.pivot_table(index='时', columns='日', values='商品')
    sns.heatmap(data=grp1,cmap='Greens', linewidths=.1, annot=False, fmt='.1')
    plt.title('售货机C{:d}月订单量的热力图'.format(month))
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.show()
task25(6)
task25(7)
task25(8)

8d569be961b94e178eb0e8ee6b7d996f.png 7bc01d1996974f91a9620a5aa1c54293.png

7a746f23e01f429f97ec7eb0fa4571d3.png

 

物联沃分享整理
物联沃-IOTWORD物联网 » 2018年“泰迪杯”数据分析职业技能大赛B题

发表评论