【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

简介: 【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。

会一些的技术:数据分析、算法、SQL、大数据相关、python

欢迎加入社区:码上找工作

作者专栏每日更新:

LeetCode解锁1000题: 打怪升级之旅

python数据分析可视化:企业实战案例

备注说明:方便大家阅读,统一使用python,带必要注释,公众号 数据分析螺丝钉

背景

一家电商公司希望分析其过去一年的各项成本,包括材料、劳动力、市场营销、固定成本和杂项支出。目标是了解成本结构,识别成本控制和优化的机会。

实施步骤

首先,收集并整理全年各月份的成本数据。

使用Python的数据分析和可视化库(如Pandas和Matplotlib)进行分析或者其他工具

对生成的图表进行深入分析,提取关键洞察。

成本数据

每个月提供了五种成本类型(材料、劳动力、市场营销、固定成本和杂项支出)的具体数字和对应的用量,并计算了每个月的总成本

import pandas as pd
import numpy as np
# 设置随机数种子以确保数据的一致性
np.random.seed(42)
# 创建模拟的月份数据
months = ['January', 'February', 'March', 'April', 'May', 'June',
          'July', 'August', 'September', 'October', 'November', 'December']
# 创建不同成本类型的模拟数据,包括总成本和用量
data = {
    'Month': months,
    'Material Cost ($)': np.random.randint(10000, 30000, size=12),
    'Material Quantity': np.random.randint(100, 300, size=12),
    'Labor Cost ($)': np.random.randint(8000, 25000, size=12),
    'Labor Hours': np.random.randint(200, 500, size=12),
    'Marketing Cost ($)': np.random.randint(5000, 15000, size=12),
    'Marketing Campaigns': np.random.randint(1, 5, size=12),
    'Fixed Cost ($)': np.random.randint(4000, 8000, size=12),
    'Fixed Assets': np.random.randint(10, 20, size=12)
}
# 转换为DataFrame
cost_df = pd.DataFrame(data)
pd.set_option('expand_frame_repr', False)
print(cost_df)

初步的分析

分析方法: 初始分析仅涉及计算每个月的总成本和成本构成,并通过简单的趋势图展示。

成本构成组成图,可以看到主要的成本应该是材料费用,但是具体占比多少其实还看不清楚,然后波动趋势的话 因为组合型柱形图没法做每个月的对比

成本构成趋势图,如果仔细看的话,可以看到材料费用的波动比较大,但是原因是什么不清楚,因为费用跟使用情况有关系

这个是一个热力图,可以看到材料和市场活动的波动会比较大,导致的总成本的波动也比较大

问题:

  • 缺乏细节:总成本的展示忽略了成本结构的复杂性,无法识别哪些成本类型对总支出的贡献最大。
  • 无法识别趋势:没有展示各成本类型随时间的变化趋势,难以分析季节性变化或特定事件对成本的影响。
  • 决策困难:缺少深入分析,管理层难以基于这些数据做出有针对性的成本控制或优化决策。

代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(42)
# Creating DataFrame from provided data
cost_data = {
    'Month': months,
    'Material Cost ($)': np.random.randint(10000, 30000, size=12),
    'Labor Cost ($)': np.random.randint(8000, 25000, size=12),
    'Marketing Cost ($)': np.random.randint(5000, 15000, size=12),
    'Fixed Cost ($)': np.random.randint(4000, 8000, size=12),
}
cost_df = pd.DataFrame(cost_data)
cost_df['Total Cost'] = cost_df['Material Cost ($)']+cost_df['Labor Cost ($)']+cost_df['Marketing Cost ($)']+cost_df['Fixed Cost ($)']
plt.figure(figsize=(12, 6))
plt.plot(cost_df.index, cost_df['Total Cost'], marker='o')
plt.title('Monthly Total Cost - Unclear Visualization')
plt.ylabel('Cost ($)')
plt.xlabel('Month')
plt.xticks()
plt.tight_layout()
plt.show()
# Set 'Month' as index
cost_df.set_index('Month', inplace=True)
# 1. Stacked Bar Chart for Monthly Costs
cost_df.plot(kind='bar', stacked=True, figsize=(10, 6))
plt.title('Stacked Bar Chart of Monthly Costs')
plt.ylabel('Amount ($)')
plt.xticks(rotation=45)
plt.legend(title='Cost Type')
plt.tight_layout()
plt.show()
# 2. Trend Line Chart for Each Cost Type
plt.figure(figsize=(12, 6))
for column in cost_df.columns:
    plt.plot(cost_df.index, cost_df[column], marker='o', label=column)
plt.title('Trend Lines for Each Cost Type')
plt.xticks(rotation=45)
plt.ylabel('Amount ($)')
plt.legend()
plt.tight_layout()
plt.show()
# 3. Heatmap for Monthly Costs
# Creating a new DataFrame suitable for heatmap
heatmap_data = cost_df.T  # Transpose to get cost types as rows and months as columns
plt.figure(figsize=(12, 6))
sns.heatmap(heatmap_data, cmap="YlGnBu", annot=True, fmt="d")
plt.title('Heatmap of Monthly Costs')
plt.xlabel('Month')
plt.ylabel('Cost Type')
plt.tight_layout()
plt.show()

改进后的分析

为了克服这些限制,我们需要采用更合理的数据可视化方法,首先是查看各项占比,组合柱形图如果不展示各项占比,这个图的会变得很难解读,所以从图中可以看出材料费用的占比在30%-50%左右,还有就是劳动力成本,这两个成本需要重点分析。

代码

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(42)  # 确保结果可复现
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
# 使用提供的数据创建DataFrame
cost_data = {
    'Month': months,
    'Material Cost ($)': np.random.randint(10000, 30000, size=12),
    'Labor Cost ($)': np.random.randint(8000, 25000, size=12),
    'Marketing Cost ($)': np.random.randint(5000, 15000, size=12),
    'Fixed Cost ($)': np.random.randint(4000, 8000, size=12),
}
cost_df = pd.DataFrame(cost_data)
# 计算每个月总成本
cost_df['Total Cost ($)'] = cost_df.drop('Month', axis=1).sum(axis=1)
# 计算各成本项占总成本的比例
for column in cost_df.columns[1:-1]:  # 排除'Month'和'Total Cost ($)'
    cost_df[f'{column} Percentage'] = (cost_df[column] / cost_df['Total Cost ($)']) * 100
# 绘制各成本项的柱状图
cost_df.set_index('Month').iloc[:, :4].plot(kind='bar', stacked=True, figsize=(14, 7))
plt.title('Monthly Costs with Percentages')
plt.ylabel('Cost ($)')
# 添加占比标签
for i, month in enumerate(cost_df['Month']):
    total_cost = cost_df.loc[i, 'Total Cost ($)']
    cumulative_height = 0
    for column in cost_df.columns[1:5]:  # 选择四个成本列
        cost = cost_df.loc[i, column]
        percentage = (cost / total_cost) * 100
        label_y_position = cumulative_height + cost / 2  # 计算标签的y位置
        plt.text(i, label_y_position, f'{percentage:.1f}%', ha='center', color='white', fontsize=9)
        cumulative_height += cost
plt.xticks(rotation=45)
plt.legend(title='Cost Type')
plt.tight_layout()
plt.show()

接着需要去掉用量的影响,因为成本金额大不一定有问题,可能是量也比较大,我们构建一个单位成本的指标,单位成本是指对应成本总额除以相应的量度(如材料成本除以材料量,劳动力成本除以工时等。

这里是单位材料成本和单位劳动力成本,可以看到在3月、10月的单位材料成本大涨,经过分析发现这两个月进入了一批新的材料比以往的采购价都更贵。发现单位工时成本在2月和12月上涨比较多,是因为这两个月招聘了高技术的人才,之后下降是由于上线了平台系统提高了整体的工作效率。

单位成本代码

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 设置随机数种子以确保数据的一致性
np.random.seed(42)
# 创建模拟的月份和成本数据
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
data = {
    'Month': months,
    'Material Cost ($)': np.random.randint(10000, 30000, size=12),
    'Material Quantity': np.random.randint(100, 300, size=12),
    'Labor Cost ($)': np.random.randint(8000, 25000, size=12),
    'Labor Hours': np.random.randint(200, 500, size=12),
}
cost_df = pd.DataFrame(data)
cost_df['Unit Material Cost ($)'] = cost_df['Material Cost ($)'] / cost_df['Material Quantity']
cost_df['Unit Labor Cost ($)'] = cost_df['Labor Cost ($)'] / cost_df['Labor Hours']
# 绘制没有网格线和边框的折线图
plt.figure(figsize=(10, 6))
plt.plot(cost_df['Month'], cost_df['Unit Material Cost ($)'], label='Unit Material Cost ($)')
plt.plot(cost_df['Month'], cost_df['Unit Labor Cost ($)'], label='Unit Labor Cost ($)')
plt.title('Monthly Unit Cost Analysis')
plt.xlabel('Month')
plt.ylabel('Unit Cost ($)')
plt.legend()
# 移除边框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['bottom'].set_visible(False)
plt.gca().spines['left'].set_visible(False)
# 移除网格线
plt.grid(False)
plt.show()

总结

除了要在展示的时候能更清晰的从图中看出具体的数值外,我们在分析成本的时候需要去掉用量的因素的影响,单位成本是一个常见的分析指标


欢迎关注微信公众号 数据分析螺丝钉

相关文章
|
7天前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
44 11
|
7天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
75 9
|
4天前
|
消息中间件 安全 开发者
Python global关键字分析
Python 是一种高级编程语言,拥有非常强大的功能和灵活性。在 Python 中,global 关键字可以用于在函数内部修改全局变量的值。本篇技术博客将介绍 global 关键字的使用方法和实现原理。
19 5
|
4天前
|
存储 Python
Python的命名空间和作用域分析
在Python中,命名空间(Namespace)是用来存储变量名和对象引用之间映射关系的字典,而作用域(Scope)是指程序中变量可以被访问的区域范围。Python中的命名空间是用来存储变量名和对象引用之间映射关系的字典,Python中存在3种命名空间:内置命名空间、全局命名空间和局部命名空间。Python中存在3种命名空间:内置命名空间、全局命名空间和局部命名空间。局部作用域:由局部命名空间定义,在函数内部定义的变量只能在该函数内部访问。在全局命名空间中定义的变量可以在模块内的任何函数或类中直接使用。
14 3
|
6天前
|
算法 搜索推荐 开发者
解锁Python代码的速度之谜:性能瓶颈分析与优化实践
探索Python性能优化,关注解释器开销、GIL、数据结构选择及I/O操作。使用cProfile和line_profiler定位瓶颈,通过Cython减少解释器影响,多进程避开GIL,优化算法与数据结构,以及借助asyncio提升I/O效率。通过精准优化,Python可应对高性能计算挑战。【6月更文挑战第15天】
12 1
|
8天前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
36 3
|
9天前
|
机器学习/深度学习 数据采集 分布式计算
如何用Python处理大数据分析?
【6月更文挑战第14天】如何用Python处理大数据分析?
23 4
|
9天前
|
数据采集 前端开发 Python
Python3网络开发实战读后感
Python3网络开发实战读后感
|
8天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
5天前
|
开发者 Python
【干货】Python编程惯例
【干货】Python编程惯例
11 1