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

重点关注本文思路,用python分析,方便大家实验复现,代码每次都用全量的,其他工具自行选择。

全文3000字,阅读10min,操作1小时

企业案例实战欢迎关注专栏 每日更新:https://blog.csdn.net/cciehl/category_12615648.html

背景

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

实施步骤

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

使用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()

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/497649.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习语义分割篇——DeepLabV2原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

Java八股文(数据结构)

Java八股文の数据结构 数据结构 数据结构 请解释以下数据结构的概念:链表、栈、队列和树。 链表是一种线性数据结构,由节点组成,每个节点包含了指向下一个节点的指针; 栈是一种后进先出(LIFO)的数据结构&a…

linux中查看内存占用空间

文章目录 linux中查看内存占用空间 linux中查看内存占用空间 使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 注意这里是当前目录下的文件大小,查看系统的可以回到根目录 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&a…

安全上网,防止上网被记录(v2ray实现加密通信)

近期听一位亲威说,她在公司休闲的时候上了哪个网站,浏览了过的网站IT部门的人都会知道,这是因为现在大多数网络设备,像路由与交换机都有记录访问网站地址记录功能,涉及还可以设置成记录到交互的内容。要想保密&#xf…

第4章.精通标准提示,引领ChatGPT精准输出

标准提示 标准提示,是引导ChatGPT输出的一个简单方法,它提供了一个具体的任务让模型完成。 如果你要生成一篇新闻摘要。你只要发送指示词:汇总这篇新闻 : …… 提示公式:生成[任务] 生成新闻文章的摘要: 任务&#x…

5.6 物联网RK3399项目开发实录-Android开发之(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

机器学习-生存分析:基于QHScrnomo模型的乳腺癌患者风险评估与个性化预测

一、引言 乳腺癌作为女性常见的恶性肿瘤之一,对女性健康构成威胁。随着医疗技术的不断进步,个性化医疗逐渐成为乳腺癌治疗的重要方向。通过深入研究乳腺癌患者的风险评估和个性化预测,可以帮助医生更准确地制定治疗方案,提高治疗效…

【R语言从0到精通】-1-下载R语言与R最基础内容

在本科,没有人教的情况下,艰难的自学了R语言,因此我想能出一个R语言系列教程,在帮助大家的同时,温故而知新,特别如果你是生物或者医学从业者,那本教程正好合适,因为我也是生物人&…

【计算机网络篇】数据链路层(4.1)可靠传输的相关概念

文章目录 🍔可靠传输的相关概念⭐分组丢失⭐分组失序⭐分组重复 🥚注意 🍔可靠传输的相关概念 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可以检测出帧在传输过程中是否产生了误码&…

Yarn简介及Windows安装与使用指南

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

“预防儿童烧烫伤”科普安全课堂走进嘉鱼县第一小学

为提高嘉鱼县儿童烧烫伤安全意识、隐患识别能力以及突发应急处置能力,3月26日下午,在中国社会福利基金会烧烫伤关爱公益基金、嘉鱼县妇女联合会、嘉鱼县教育局的支持下,嘉鱼县蒲公英社会工作服务中心走进嘉鱼县第一小学开展预防儿童烧烫伤科普…

Unity2018发布安卓报错 Exception: Gradle install not valid

Unity2018发布安卓报错 Exception: Gradle install not valid Exception: Gradle install not valid UnityEditor.Android.GradleWrapper.Run (System.String workingdir, System.String task, System.Action1[T] progress) (at <c67d1645d7ce4b76823a39080b82c1d1>:0) …

探索智慧农业精准除草,基于高精度YOLOv5全系列参数【n/s/m/l/x】模型开发构建农田作物场景下杂草作物分割检测识别分析系统

智慧农业是未来的一个新兴赛道&#xff0c;随着科技的普及与落地应用&#xff0c;会有更加广阔的发展空间&#xff0c;关于农田作物场景下的项目开发实践&#xff0c;在我们前面的博文中也有很堵相关的实践&#xff0c;单大都是偏向于目标检测方向的&#xff0c;感兴趣可以自行…

QT布局管理和空间提升为和空间间隔

QHBoxLayout&#xff1a;按照水平方向从左到右布局&#xff1b; QVBoxLayout&#xff1a;按照竖直方向从上到下布局&#xff1b; QGridLayout&#xff1a;在一个网格中进行布局&#xff0c;类似于HTML的table&#xff1b; 基本布局管理类包括&#xff1a;QBoxLayout、QGridL…

ubuntu编译OpenCV and seetaFace2

opencv opencv-4.5.2 opencv_contrib-4.5.2 SeetaFace2 SeetaFace2-master https://github.com/seetafaceengine 指定安装目录&#xff0c;和OpenCV放一个目录下了 安装前 安装 安装后 Qt安装 Windows下 Linux下 报错1 原因&#xff1a; 报错…

20221124 kafka实时数据写入Redis

一、上线结论 实现了将用户线上实时浏览的沉浸式视频信息&#xff0c;保存在Redis中这样一个功能。为实现沉浸式视频离线推荐到实时推荐提供了强有力的支持。目前只是应用在沉浸式场景&#xff0c;后续也能扩展到其他所有场景。用于两个场景&#xff1a;&#xff08;1&#xf…

【SQL】1661. 每台机器的进程平均运行时间 (四种写法;自连接;case when;窗口函数lead();)

前述 Sql窗口分析函数【lead、lag详解】 Hive 分析函数lead、lag实例应用 lag &#xff1a;用于统计窗口内往上第n行值lead &#xff1a;用于统计窗口内往下第n行值 lead(列名,1,0) over (partition by 分组列 order by 排序列 rows between 开始位置 preceding and 结束位置…

ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异

引言 随着互联网的快速发展&#xff0c;信息的获取变得比以往任何时候都更加便捷。在数字化时代&#xff0c;人们对于获取准确、及时信息的需求愈发迫切。传统搜索引擎通过关键词匹配的方式为用户提供了大量的信息&#xff0c;然而&#xff0c;这种机械式的检索方式有时候并不…

Mysql数据库-DQL查询

Mysql数据库-DQL基本查询 1 DQL基本查询1.1 基础查询1.2 WHERE子句1&#xff09;算术运算符2&#xff09;逻辑运算符3&#xff09;比较运算符A&#xff09;BETWEEN... AND ...B&#xff09;IN(列表)C&#xff09;NULL值判断 4&#xff09;综合练习 2 DQL高级查询2.1 LIKE 模糊查…

Triton推理服务器部署YOLOv8实战

课程链接&#xff1a;Triton推理服务器部署YOLOv8实战_在线视频教程-CSDN程序员研修院 Triton Inference Server&#xff08;Triton 推理服务器&#xff09;是一个高性能、灵活、可扩展的推理服务器&#xff0c;支持多种机器学习框架&#xff08;PyTorch、ONNX等&#xff09;和…
最新文章