2019年‘泰迪杯’数据分析职业技能大赛A题——个人代码分享

目录

题目

任务 1 数据预处理与统计

任务 2 数据分析与可视化

代码展示

任务一 

任务二


题目

任务 1 数据预处理与统计

任务 1.1 对数据作必要的预处理,在报告中列出处理步骤,将处理后的结 国保存为“task1_1.csv”。

任务 1.2 统计每个大类商品的销售金额,将结果保存为“task1_2.csv”。

任务 1.3 统计每个中类商品的促销销售金额和非促销销售金额,将结果保 存为“task1_3.csv”。

任务 1.4 统计生鲜类产品和一般产品的每周销售金额,将结果保存为 “task1_4.csv”。

任务 1.5 统计每位顾客每月的消费额及消费天数,将结果保存为 “task1_5.csv”,并在报告中列出用户编号为 0-10 的结果。

任务 2 数据分析与可视化

任务 2.1 绘制生鲜类商品和一般商品每天销售金额的折线图,并分析比较 两类产品的销售状况。

任务 2.2 按月绘制各大类商品销售金额的占比饼图,并分析其销售状况。

任务 2.3 绘制促销商品和非促销商品销售金额的周环比增长率柱状图。

代码展示

任务一 

代码展示:

#任务1.1
import pandas as pd
import numpy as np
data=pd.read_csv('D:\\桌面\\2019A题\\附件.csv',engine='python',encoding='gbk')
data.pop('规格型号')
data.pop('单位')
data.pop('销售月份')
data.pop('商品编码')
data.index=data['顾客编号']
data.pop('顾客编号')
data.销售日期=pd.to_datetime(data['销售日期'],format='%Y%m%d',errors='coerce')
data.to_csv('D:\\桌面\\2019A题\\task1_1.csv',encoding='utf-8-sig')

#任务1.2
data12=pd.read_csv('D:\\桌面\\2019A题\\task1_1.csv',engine='python')
df12=data12.groupby('大类名称').sum('销售金额')
sales=df12['销售金额']
sales.to_csv('D:\\桌面\\2019A题\\task1_2.csv',encoding='utf-8-sig')

#任务1.3
df13=data12.groupby(['中类名称','是否促销']).sum('销售金额')
sales13=df13['销售金额']
sales13.to_csv('D:\\桌面\\2019A题\\task1_3.csv',encoding='utf-8-sig')


#任务1.4
df14=data12.groupby('商品类型')
data14=df14.get_group('生鲜')
data141=df14.get_group('一般商品')
data141=data141.groupby('销售日期').sum('销售金额')
data14=data14.groupby('销售日期').sum('销售金额')
x=len(data14)
fresh=[]
ord=[]
sum14=0
sum141=0
lst14=data14['销售金额'].tolist()
lst141=data141['销售金额'].tolist()
for i in range(0,x):
    sum14=sum14+lst14[i]
    sum141=sum141+lst141[i]
    if (i+1)%7==0:
        fresh.append(sum14)
        ord.append(sum141)
        sum14=0
        sum141=0
data14=pd.DataFrame({'生鲜':fresh,'一般商品':ord},index=range(1,len(fresh)+1))
data14.to_csv('D:\\桌面\\2019A题\\task1_4.csv',encoding='utf-8-sig')

#任务1.5
data12.销售日期=pd.to_datetime(data12['销售日期'],format='%Y/%m/%d')
data12['月']=data12['销售日期'].dt.month
df15=data12.groupby('月')
data15={}
for i in range(1,5):
    df151=df15.get_group(i)
    con = df151.groupby('顾客编号').sum('销售金额')
    day = df151.groupby(['顾客编号','销售日期']).size()
    day=day.groupby('顾客编号').size()
    data15['{:d}月消费天数'.format(i)] = day
    data15['{:d}月消费额'.format(i)]=con['销售金额']
    data15['{:d}月消费天数'.format(i)]=day
data15=pd.DataFrame(data15)
data15=data15.fillna(value=0)
data15.to_csv('D:\\桌面\\2019A题\\task1_5.csv',encoding='utf-8-sig')

任务二

代码展示

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=["SimHei"]
plt.rcParams['axes.unicode_minus']=False

#任务2.1
data12=pd.read_csv('D:\\桌面\\2019A题\\task1_1.csv',engine='python')
df14=data12.groupby('商品类型')
data14=df14.get_group('生鲜')
data141=df14.get_group('一般商品')
data141=data141.groupby('销售日期').sum('销售金额')
data14=data14.groupby('销售日期').sum('销售金额')
plt.plot(data14.index,data14['销售金额'],label='生鲜')
plt.plot(data141.index,data141['销售金额'],label='一般商品')
plt.xticks(range(0,len(data14),5),rotation=90)
plt.title('生鲜类商品和一般商品每天销售金额折线图')
plt.legend()
plt.show()

#任务2.2
data12.销售日期=pd.to_datetime(data12['销售日期'],format='%Y/%m/%d')
data12['月']=data12['销售日期'].dt.month
data22=data12.groupby('月')
for i in range(1,5):
    df22=data22.get_group(i)
    df22=df22.groupby('大类名称').sum('销售金额')
    patches,l_text,p_text=plt.pie(df22['销售金额'],labels=df22.index,autopct='%.2f%%',textprops={'size':6},startangle=90)
    plt.title('各大类商品{:d}销售金额的占比饼图'.format(i))
    for t in p_text:
        t.set_size(5)
    for i in l_text:
        t.set_size(9)
    plt.show()

#任务2.3
data12=data12.groupby('是否促销')
def promotion(str):
    datay = data12.get_group(str)
    datay=datay.groupby('销售日期').sum('销售金额')
    sale23=datay['销售金额'].tolist()
    x=len(datay)
    sum=0
    sumy=[]
    rate=[]
    for i in range(0,x):
        sum=sum+sale23[i]
        if (i+1)%7==0:
            sumy.append(sum)
            sum=0
    for i in range(1,len(sumy)):
        rt=(sumy[i]-sumy[i-1])/sumy[i-1]
        rate.append(rt)
    x=[i for i in range(1,len(rate)+1) ]
    if str=='是':
        label='促销'
    else:
        label='非促销'
    plt.bar(x,rate,label=label)
    rate=np.array(rate)
    rate=np.round(rate,2)
    rate=rate.tolist()
    for x1 in x:
        plt.text(x1,rate[x1-1],rate[x1-1],va='bottom',ha='center')
promotion('是')
promotion('否')
plt.title('促销商品和非促销商品销售金额的周环比增长率柱状图')
plt.legend()
plt.show()

 

 

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

该用户不存在️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值