Python数据分析实战:自动售货机销售数据分析

项目背景

本项目旨在利用 Python 对自动售货机的销售数据进行全面分析,通过数据可视化等手段,揭示数据背后的商业价值,为运营决策提供数据支持。

数据准备

本项目使用的数据集包含了自动售货机的销售记录,包括下单时间、商品详情、购买数量、总金额、退款金额、城市等字段。

# 导入需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re

# 读取数据
data = pd.read_excel('自动售货机.xlsx')

数据清洗

在进行数据分析之前,需要对原始数据进行清洗,以确保数据的准确性和一致性。

# 删除“序号”列
data.drop('序号', axis=1, inplace=True)

# 将“下单时间”列转换成datetime类型
data['下单时间'] = pd.to_datetime(data['下单时间'])

# 将“总金额(元)”和“退款金额(元)”列转换成float类型
data['总金额(元)'] = data['总金额(元)'].astype(float)
data['退款金额(元)'] = data['退款金额(元)'].astype(float)

数据分析

3.1 销售额趋势分析

3.1.1 按日期分析

# 按照日期计算销售额
data['date'] = data['下单时间'].dt.date
data['income'] = data['总金额(元)'] - data['退款金额(元)']
num = data[['date', 'income']].groupby('date').sum().sort_index()

# 可视化
plt.plot(num.index, num)
plt.xticks(num.index[::8], num.index[::8], rotation=90)
plt.show()

3.1.2 按星期分析

# 按照星期计算销售额
data['weekday'] = data['下单时间'].dt.weekday
num = data[['weekday', 'income']].groupby('weekday').sum().sort_index()

# 可视化
num = num.loc[[0,1,2,3,4,5,6],:]
plt.plot(num.index, num)
plt.xticks(num.index, num.index, rotation=90)
plt.show()

3.2 销售额构成分析

# 提取商品名称和数量
data['goods'] = data['商品详情'].apply(lambda x: re.sub('[Xx]1[;,]?', '', x))
new_goods_data = pd.DataFrame(data['goods'].str.split(' ', 1).tolist(), columns=['产品名称', '规格'])
new_goods_data['购买数量'] = data['购买数量(个)']

# 计算每个商品的销售额
new_goods_data['单价'] = data['总金额(元)'] / data['购买数量(个)']
new_goods_data['销售额'] = new_goods_data['单价'] * new_goods_data['购买数量']

# 按照销售额排序
num = new_goods_data[['产品名称', '销售额']].groupby('产品名称').sum().sort_values('销售额')

# 可视化
plt.barh(num.index,num['销售额'])
plt.show()

3.3 销售区域分析

3.3.1 按城市分析

# 按照城市计算销售额
num = data[['city', 'income']].groupby('city').sum().sort_values('income')

# 可视化
plt.barh(num.index,num['income'])
plt.show()

3.3.2 地理图表可视化

# 绘制地理图表展示城市之间的空间关系
from pyecharts.charts import Geo, Map
import pyecharts.options as opts
from pyecharts.globals import ChartType

(
    Geo()
    .add_schema(maptype='广东')
    .add('', [(i, int(j)) for i,j in zip(num.index, num['income'])],
         type_=ChartType.EFFECT_SCATTER)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title='各个城市销售量情况', subtitle='2018/4-2018/9'),
        visualmap_opts=opts.VisualMapOpts(max_=max(num.max()), is_piecewise=True)
    )
).render('./各个城市销售量情况.html')

# 绘制地理图表展示不同月份不同城市之间的空间关系
from pyecharts.charts import Geo, Timeline
import pyecharts.options as opts
from pyecharts.globals import ChartType

data['month'] = data['下单时间'].dt.month
num = data[['month', 'income', 'city']].groupby(['month', 'city']).sum()
num2 = num.unstack()
num2 = num2.fillna(0)

tmp = {}
for i in range(4, 10):
    num = num2.loc[i, :]
    tmp[i] = (
        Geo()
            .add_schema(maptype='广东')
            .add('', [(i[1], int(j)) for i, j in zip(num.index, list(num.values))],
                 type_=ChartType.EFFECT_SCATTER)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(
            title_opts=opts.TitleOpts(title='各个城市销售量情况', subtitle='2018/4-2018/9'),
            visualmap_opts=opts.VisualMapOpts(max_=max(num2.max()), is_piecewise=True)
        )
    )

tl = Timeline()
for i in range(4, 10):
    tl.add(tmp[i], str(i)+'月')

tl.render('./各个城市销售量情况(含时间轴).html')

3.4 销售额环比分析

3.4.1 周环比

# 计算周的销售额环比
data['week'] = data['下单时间'].dt.week

#  1 计算每一周的销售额
tmp = data[['week','income']].groupby('week').sum()

#  2 计算销售额环比: (本期销售额-上期销售额)/上期销售额
t2 = tmp.diff().iloc[1:, :]  #第一个数据是空,因为没得比
t2.index = tmp.index[:-1 ]
num = t2/tmp  #销售额的周环比

# 可视化:双Y轴图像
fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(111)  # 添加子图
ax1.bar(tmp.index, tmp['income'])
ax1.set_ylabel('收入')
ax1.set_xlabel('周数')
ax1.set_title('自动售货机收入趋势图')

ax2 = ax1.twinx()
ax2.plot(tmp.index[1:], num.iloc[:-1, 0], 'b')
ax2.set_ylabel('环比增长率')
plt.show()

3.4.2 月环比

# 计算月的销售额环比
# 1、计算每月的销售额
tmp = data[['month', 'income']].groupby('month').sum()
# 2、计算销售额环比:(本期销售额-上期销售额)/上期销售额
t2 = tmp.diff().iloc[1:, :]
t2.index = tmp.index[:-1]
num = t2/tmp  # 销售额的月环比

# 可视化:双Y轴图像
fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(111)  # 添加子图
ax1.bar(tmp.index, tmp['income'])
ax1.set_ylabel('收入')
ax1.set_xlabel('月份')
ax1.set_title('自动售货机收入趋势图')

ax2 = ax1.twinx()
ax2.plot(tmp.index[1:], num.iloc[:-1, 0], 'b')
ax2.set_ylabel('环比增长率')
plt.show()

3.4.3 广州地区周环比

# 计算广州地区周的销售额环比
data_gz = data.loc[data['city'] == '广州市', :]
data_gz['week'] = data_gz['下单时间'].dt.week
# 1、计算每一周的销售额
tmp = data_gz[['week', 'income']].groupby('week').sum()
# 2、计算销售额环比:(本期销售额-上期销售额)/上期销售额
t2 = tmp.diff().iloc[1:, :]
t2.index = tmp.index[:-1]
num = t2/tmp  # 销售额的周环比

# 可视化:双Y轴图像
fig = plt.figure(figsize=(6, 4))
ax1 = fig.add_subplot(111)  # 添加子图
ax1.bar(tmp.index, tmp['income'])
ax1.set_ylabel('收入')
ax1.set_xlabel('周数')
ax1.set_title('自动售货机收入趋势图--广州地区')

ax2 = ax1.twinx()
ax2.plot(tmp.index[1:], num.iloc[:-1, 0], 'b')
ax2.set_ylabel('环比增长率')
plt.show()

结论

通过对自动售货机销售数据的分析,我们可以得出以下结论:

  • 销售额呈现季节性波动,夏季销售额较高,冬季销售额较低。
  • 不同商品的销售额差异较大,部分商品销售火爆,部分商品销售平淡。
  • 不同城市的销售额也存在差异,广州地区的销售额最高。

建议

  • 根据销售趋势,合理调整备货策略,避免出现缺货或库存积压的情况。
  • 针对不同商品的销售情况,制定差异化的营销策略,提高整体销售额。
  • 加强对重点销售区域的市场调研,挖掘潜在客户,进一步提高市场份额。

未来展望

随着数据的积累和分析技术的不断发展,我们可以对自动售货机销售数据进行更深入的挖掘,例如:

  • 建立预测模型,预测未来销售趋势,为运营决策提供更精准的数据支持。
  • 分析用户购买行为,进行精准营销,提高用户粘性和复购率。
  • 结合外部数据,如天气、节假日等因素,分析其对销售额的影响,制定更合理的运营策略。
Python数据分析实战:自动售货机销售数据分析

原文地址: https://www.cveoy.top/t/topic/jjUf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录