您的当前位置:首页正文

2021泰迪杯数据分析技能赛A题:Python实现通讯产品销售和盈利能力分析(含原始数据)

2024-11-27 来源:个人技术集锦

这周复习了python数据处理的实战,把之前竞赛的题目重新做了一遍。这里侧重数据分析与数据处理的部分。文末含原始题目与数据,需要的小伙伴自取~

【事先说明】:本文只是在技术维度上进行分析及展示,在业务维度上没有做过多分析。事实上在竞赛或工作中,数据分析都是离不开业务的,不过现在就先练练技术啦~

先来看看赛题要求吧

赛题要求

目标

任务

任务 1 数据分析与预测 根据附件“非洲通讯产品销售数据”中的数据,分别实现以下任务:

任务 1.1 统计各个年度/季度中,地区、国家、服务分类的销售额和利润数 据,并计算各国、各服务分类销售额和利润的同比增长率。

任务 1.2 统计各地区、国家有关服务分类销售额和利润数据。

任务 1.3 统计各个销售经理的成交合同数和成交率。

任务 1.4 分别预测各个地区、国家、服务分类 2021 年第一季度销售额和利 润。

任务 2 可视化展示和撰写分析报告 对各地区、国家、服务分类的产品销售额和利润等数据,以及销售经理的业 绩数据,进行同比、类比、相关性等分析或预测,发现趋势。根据分析和预测结 果,设计一个数字大屏,根据目标,合理布局,展示能够代表产品销售情况和盈 利能力的数据指标和可视化图表等。 在下面任务不同的维度分析中,必要时,可以设置选择框,使用联动的方式, 根据选择框,查看和展示该选择框范围的数据和可视化图表。例如,设立国家选 择框,选项包括“全部”和国家名称,可以查看全部或某个国家的指标数据和可 视化图表。其他类推。 数字化大屏至少包括以下任务:

任务 2.1 绘制非洲各国产品的销售地图,并能够查看该国的销售额和利润。 根据销售额的降序排列,绘制非洲各国产品销售额和利润数据的图表。

任务 2.2 根据地区、国家等维度,绘制各服务分类的销售额和利润的年增 长率及各季度同比增长率的图表。

任务 2.3 根据地区、国家等维度,绘制 2021 年第一季度各服务分类的销售 额和利润预测值的图表。

任务 2.4 绘制销售经理的销售合同数前 5 名排行榜。

任务 2.5 绘制销售额后 10 名的国家排行榜。

任务 2.6 分析数字大屏的指标数据和图表,撰写公司产品的销售情况和盈 利能力的分析报告。

以下是各题的实现代码

1导入相关库和数据

import pandas as pd
import numpy as np
import datetime as dt
data01=pd.read_excel(r'C:\Users\章ky\Desktop\非洲通讯产品销售数据.xlsx')
data02=pd.read_excel(r'C:\Users\章ky\Desktop\非洲通讯产品销售数据.xlsx',sheet_name=1)

2数据预处理

查看数据前五行

data01.head()

data02.head()

查看数据类型、有无缺失值

#查看数据信息
data01.info()

没有缺失值,非常完美

data02.info()

我们发现,在读取数据的时候,将第6、7列读进去了,这两列是没有意义的,我们直接删掉。

#对data02的数据清洗
data02=data02.iloc[:,0:5]

查看数值数据

粗略看看有无异常

data01.describe()

data02.describe()

3任务一 数据分析与预测

任务 1.1

统计各个年度/季度中,地区、国家、服务分类的销售额和利润数据,并计算各国、各服务分类销售额和利润的同比增长率。

销售额和利润数据

各个年度/季度中,地区的销售额利润数据

# 各个年度/季度中,地区的销售额和利润数据
#将日期设置为索引
ind=pd.DatetimeIndex(data01['日期'])
data01=data01.set_index(ind)
#分组
data01['year']=data01['日期'].dt.year
data01['quarter']=data01['日期'].dt.quarter
#统计各个年度/季度中,地区、国家、服务分类的销售额和利润数据

writer = pd.ExcelWriter('result1.1.xlsx')
diqu=data01.pivot_table(['利润','销售额'],index=['year','quarter'],columns='地区',aggfunc=['sum','mean','median'],margins=True)
diqu.to_excel(writer,index=True,sheet_name='年度地区')
gj=data01.pivot_table(['利润','销售额'],index=['year','quarter'],columns='国家',aggfunc=['sum','mean','median'],margins=True)
gj.to_excel(writer,index=True,sheet_name='年度国家')
fw=data01.pivot_table(['利润','销售额'],index=['year','quarter'],columns='服务分类',aggfunc=['sum','mean','median'],margins=True)
fw.to_excel(writer,index=True,sheet_name='年度服务分类')

writer.save()
writer.close()

这里利用 pd.ExcelWriter()更加来方便的将数据一个sheet一个sheet的写到excel中

各个年度/季度中,地区的销售额和利润数据

同比增长率

计算各国、各服务分类销售额和利润的同比增长率。

#计算各国、各服务分类销售额和利润的同比增长率
# 同比增长率一般是指去年和同期相比较的增长率。

#各服务分类年度销售额和利润的同比增长率
fw=data01.pivot_table(['销售额','利润'],index='year',columns='服务分类',aggfunc='sum')
fw_y=fw/fw.shift(1)-1
fw_y=fw_y.loc[2018:,:]
#各服务分类季度销售额和利润的同比增长率
fwq=data01.pivot_table(['销售额','利润'],index=['year','quarter'],columns='服务分类',aggfunc='sum')
fw_q=fwq/fwq.shift(4)-1
fw_q=fw_q.iloc[4:,:]

#各国家年度销售额和利润的同比增长率
gj=data01.pivot_table(['销售额','利润'],index='year',columns='国家',aggfunc='sum')
gj_y=gj/gj.shift(1)-1
gj_y=gj_y.loc[2018:,:]


#各国家各季度销售额和利润的同比增长率
gjq=data01.pivot_table(['销售额','利润'],index=['year','quarter'],columns='国家',aggfunc='sum')
gj_q=gjq/gjq.shift(4)-1
gj_q=gj_q.iloc[4:,:]

【知识点:shift()、pivot_table()的使用】

结果如下:

各年各国同比增长:

各年各服务分类同比增长:

各季度各国同比增长:

各季度各服务分类同比增长:

任务1.2

统计各地区、国家有关服务分类销售额和利润数据。

# 相比任务1.1,没有考虑时间
data1_2gj=data01.pivot_table(['销售额','利润'],index='国家',columns='服务分类',aggfunc=['sum','mean'])
data1_2dq=data01.pivot_table(['销售额','利润'],index='地区',columns='服务分类',aggfunc=['sum','mean'])

各国家有关服务分类销售额和利润数据。

各地区有关服务分类销售额和利润数据。

任务1.3

统计各个销售经理的成交合同数和成交率。

合同数

#合同数量
grouped=data02[['销售经理','销售合同']].groupby('销售经理').sum()
grouped_sorted=grouped.sort_values(by='销售合同',ascending=False)
grouped_sorted

各销售经理的合同数

成交率

这里注意,成交率直接相加的意义不大

#成交率:由于每行的销售合同数量不一样,成交率不应该直接相加
def deal(data):
    s=data02['销售合同']*data02['成交率']
    rate=s.sum()/data['销售合同'].sum()
    return rate
data02.groupby('销售经理').apply(deal)    

4任务2 可视化展示

我是用tableau实现的,就进行个展示吧

任务 2.1

绘制非洲各国产品的销售地图,并能够查看该国的销售额和利润。 根据销售额的降序排列,绘制非洲各国产品销售额和利润数据的图表。

任务 2.2

根据地区、国家等维度,绘制各服务分类的销售额和利润的年增长率及各季度同比增长率的图表。

任务 2.4

绘制销售经理的销售合同数前 5 名排行榜。

任务 2.5

绘制销售额后 10 名的国家排行榜。

5 数据

百度网盘:
链接:https://pan.baidu.com/s/1Zs24s1UMXJcnZ-ooq38pQA
提取码:56qa

ps:任务1.4和2.3涉及到预测的部分,需用到数据挖掘,挖个坑xx本人打算复习机器学习后再做对应的实践~

总结:

  • 考察点:时间序列数据的处理与分析、数据重组聚合、数据可视化
  • 难易程度:偏简单
  • 个人结合:任务一主要运用数据重组和时间序列分析。pivot_table()函数的可用性极强。时间序列分析中用到较多的方法是:提取年份、季节;同比、环比的计算(shift);时间序列索引的应用。在可视化的部分用tableau来实现既快速又简单。
显示全文