【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 = 0for column in cost_df.columns[1:5]:  # 选择四个成本列cost = cost_df.loc[i, column]percentage = (cost / total_cost) * 100label_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.mzph.cn/news/777833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[git]Git 撤销与 回滚操作

[git]Git 撤销与 回滚操作 开发过程中,你肯定会遇到这样的场景: 场景一: 糟了,我刚把不想要的代码,commit到本地仓库中了,但是还没有做push操作! 场景二: 彻底完了,刚线…

C# OpenCvSharp 轮廓检测

目录 效果 代码 下载 效果 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.…

刚租用的服务器被恶意攻击怎么办?

如果你的服务器受到恶意攻击,以下是一些应对措施: 1.立即隔离受影响的系统: 立即将受攻击的服务器与其他系统隔离,以防止攻击进一步蔓延。这可以通过断开网络连接、关闭受影响的服务或者停止服务器实例等方式来实现。 2.通知相关人…

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回:OpenCV系列文章目录(持续更新中......) 上一篇:如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍: 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目?如何对 OpenCV …

随记----单链表

随便记录一些代码 1.编写算法将带头结点的链表逆置,空间复杂度为1 void Reverse(LinkLNode &L){LNode *pL->next,*r;L->nextNULL;while(r!NULL){rp->next;p->nextL->next;L->nextp;pr;} } 6.有一个带头节点的单链表L,设计一个算法…

镜视界 | DevSecOps CI/CD 管道中数字供应链安全的集成策略

目录 前言 数字供应链(DSC)的定义 数字供应链安全的重点内容和风险因素 CI/CD管道的安全目标和可信实体 将数字供应链安全集成到CI/CD管道中 结语 本文字数:7715,阅读时长:19分钟 1.前言 在敏捷开发的模式下&…

CSS 结构伪类选择器 伪元素选择器 盒子模型

目录 1. 结构伪类选择器1.1 :nth-child(公式) 2. 伪元素选择器3. 盒子模型3.1 盒子模型的重要组成部分3.2 盒子模型 - 边框线3.3 盒子模型 - 内边距3.4 盒子模型 - 尺寸计算3.5 盒子模型 - 外边距3.6 盒子模型 - 元素溢出3.7 外边距问题 - 合并现象3.8 外边距问题 - 塌陷问题3.…

玩电脑突然停电对电脑有影响吗

在现代社会中,电脑已成为我们日常生活和工作中不可或缺的一部分。然而,当我们正在专注于工作或娱乐时,突然停电可能会给我们带来不小的困扰。那么,玩电脑时突然停电会对电脑产生哪些影响呢?本文将深入探讨这一问题&…

Android 14.0 SystemUI下拉状态栏时间格式的修改(二)

1.概述 在14.0的系统rom产品开发中,在通过上一篇博客已经实现修改了时间显示格式,但是客户修改下拉状态栏时间显示格式为分行显示,即第一行显示时间用大字体显示, 第二行用小字体显示当前日期和周几这样的显示格式 于是继续进行修改 2.SystemUI下拉状态栏时间格式的修改(…

快速上手Spring Cloud 七:事件驱动架构与Spring Cloud

快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring …

【OpenAI援引马斯克评价中国】小米汽车 SU7 顶配版或超 30 万/OpenAI 加持机器人亮相/荣耀已投入 100 亿研发 AI

雷军:共建一个更良性包容的汽车市场舆论环境 Figure 与 OpenAI 联手推出新机器人 亚马逊和 Google 悄悄降低对生成式 AI 的预期 小米生态链模式大改革,将进行分级管理 掌阅科技:致力打造国内首款真正 AI 阅读应用 荣耀称已投入 100 亿用于 AI…

c++中2种返回变量类型名称的方法

std::string real_name abi::__cxa_demangle(typeid(*(*a)).name(), NULL, NULL, &status);必须使用#include <typeinfo> std::string real_name boost::core::demangle(typeid(*(*a)).name());必须使用 #include <boost/core/demangle.hpp> #include <t…

element el-table表格默认勾选toggleRowSelection失效问题

想要实现一个表格默认勾选上次选过的项的功能&#xff1a; 发现直接使用toggleRowSelection不生效&#xff0c;必须使用setTimeout延迟一会才能生效。 表格&#xff1a; <el-tableref"table"borderstripe:data"rows"selection-change"val > (se…

设计模式之原型模式讲解

原型模式本身就是一种很简单的模式&#xff0c;在Java当中&#xff0c;由于内置了Cloneable 接口&#xff0c;就使得原型模式在Java中的实现变得非常简单。UML图如下&#xff1a; 我们来举一个生成新员工的例子来帮助大家理解。 import java.util.Date; public class Employee…

植物大战僵尸Javascript版web游戏源码

源码介绍 植物大战僵尸Javascript版web游戏源码&#xff0c;非常强大&#xff0c;1比1还原电脑版植物大战僵尸游戏&#xff0c;带背景音乐&#xff0c;玩法和原版一模一样。 源码截图 下载地址 https://download.csdn.net/download/huayula/89048275

vue3从精通到入门5:模板语法与指令

Vue 3 的模板语法和指令与 Vue 2 相比&#xff0c;大部分内容仍然是相同的&#xff0c;但是有一些新的改进和优化。以下是对 Vue 3 模板语法和指令的简要概述&#xff1a; 模板语法 Vue 3 的模板语法基于 HTML&#xff0c;允许你使用双大括号 {{ }}来绑定数据&#xff0c;以…

MySQL:DBA看主从延迟

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 1、从DBA的视角来看影响主从延迟因素 1.1 主库更新频繁或主库有大事务 1.1.1 程序相关 1.1.2 变更相关 1.2 从库负载较高&#xff08;CPU负载高、IO负载高、网络负…

《Vision mamba》论文笔记

原文出处&#xff1a; [2401.09417] Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model (arxiv.org) 原文笔记&#xff1a; What&#xff1a; Vision Mamba: Efficient Visual Representation Learning with Bidirectional St…

Ollama + Open WebUI实践

在上一篇文章Ollama实践中&#xff0c; 我们已经学会了如何用Ollama在本地运行大模型。 但是所有的操作都是在命令行中进行的&#xff0c; 不是很直观。 如果有一个漂亮的UI界面就更好了。 Open WebUI 就是一个可以实现UI界面的开源工具&#xff0c; 可以生成类似openAI风格的U…

人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景&#xff0c;模型结构介绍。特征金字塔网络&#xff08;FPN&#xff09;是一种深度学习模型结构&#xff0c;主要应用于目标检测任务中&am…