pandas(day8 市场分析案例)

一. 相关知识

数据报告 :

        - 传统零售 : - 代理商 : 压货 挣差价 - 层层分级别

        - 网络零售 : - 代运营 : 了解代理品牌 了解品类市场 竞品

        - 数据报告 PPT(活动) (日报EXCEL 周报 月报)

二. 读取数据(循环一次性读取下列文件)

'.\\灭鼠杀虫剂市场近三年交易额.xlsx'
 '.\\电蚊香套装市场近三年交易额.xlsx'
'.\\盘香灭蟑香蚊香盘市场近三年交易额.xlsx'
'.\\蚊香加热器市场近三年交易额.xlsx'
'.\\蚊香液市场近三年交易额.xlsx'
'.\\蚊香片市场近三年交易额.xlsx'
'.\\防霉防蛀片市场近三年交易额.xlsx'
import os
os.chdir("./data/驱虫剂市场")  # 这是更改当前目录

1. 获取  ...交易额的所有 .xlsx文件名称
files = glob.glob("./*交易额.xlsx") 
/*
'.\\灭鼠杀虫剂市场近三年交易额.xlsx'
​​​​​​​ '.\\电蚊香套装市场近三年交易额.xlsx'
'.\\盘香灭蟑香蚊香盘市场近三年交易额.xlsx'
'.\\蚊香加热器市场近三年交易额.xlsx'
'.\\蚊香液市场近三年交易额.xlsx'
'.\\蚊香片市场近三年交易额.xlsx'
'.\\防霉防蛀片市场近三年交易额.xlsx'
*/


2. 读取数据,

dfs = []
for f in files:  # f是上面每个文件的名字
    
     df = pd.read_excel(f) # 读取每一个数据
     
      # 现在的时间列数据类型是int64,我们想把它改为时间类型
     if df.时间.dtype == "int64":
            #unit是单位是天, origin是开始时间
         df["时间"] = pd.to_datetime(df.时间,unit="D",origin=pd.Timestamp("1899-12-30"))
     
      # 将 时间列 作为 index,行标签
     df.set_index(["时间"],inplace = True)
     # t是把 "灭鼠杀虫剂市场近三年交易额"通过 市场进行分割,  然后得到 灭鼠杀虫剂
     t = f.split("市场")[0][2:]
     df.columns = [t + "交易金额"]    #灭鼠杀虫剂 与 交易金额 拼接
  
     # dfs 里面就是标题为 灭鼠杀虫剂交易金额,和类似这种的数据
     dfs.append(df)

#dfs是一个标题一组数据,一共有七个 排成一列的 列表,
# concat 把每组数据拼接起来, axis = 1 进行横向拼接,行索引是年,每一列就是各种交易金额
df = pd.concat(dfs,axis=1)
   

三. 检测数据(空值、数据类型、绘图看趋势)

df.isnull().sum()
灭鼠杀虫剂交易金额       0
电蚊香套装交易金额       0
盘香灭蟑香蚊香盘交易金额    0
蚊香加热器交易金额       0
蚊香液交易金额         0
蚊香片交易金额         0
防霉防蛀片交易金额       0
dtype: int64


df.dtypes
灭鼠杀虫剂交易金额       float64
电蚊香套装交易金额       float64
盘香灭蟑香蚊香盘交易金额    float64
蚊香加热器交易金额       float64
蚊香液交易金额         float64
蚊香片交易金额         float64
防霉防蛀片交易金额       float64
dtype: object


df.plot()

四. 简单的线性回归说明

X = np.array([
    [1,1],
    [2,4]
])


y = np.array([
    [35],
    [94]
])



y = wx

- 线性代数 当中  矩阵 没有除法计算
- 矩阵 有乘法
- 矩阵的倒数 叫做逆矩阵 (只有方阵 才能求逆)
- ((XTX)^-1 XTX)单位矩阵是 线性代数当中 的 1
- XT .X  X.XT  都是当前矩阵的平方 (方阵)

y = w x

(XTX)^-1 XT y =  w (XTX)^-1 XTX

w = (XTX)^-1 XT y


#先把任何形状的矩阵转变为方阵
XTX = np.dot(X.T,X)

#求出方阵的 逆矩阵
INV = np.linalg.inv(XTX)


np.dot(INV,X.T)
from sklearn.linear_model import LinearRegression  #线性回归


# fig_intercept=False 这个就是y=kx + b 时 没有这个b
model = LinearRegression(fig_intercept=False).fit(X,y)

model.coef_   # 回归系数 计算k的

五 . 预测数据

def predict(df=None, year=None ,month=None):
    df = df.reset_index() 
    df["年份"] = df["时间"].dt.year
    df["月份"] = df["时间"].dt.month
    # x 代表 预测的依据(根据什么来的) y是结果
    X_train = df.query(f"月份 == {month}")[["年份","月份"]]    # 比如我要预测2018年11月的,这里记录的是依据往年 的11月数据
    y_train = df.query(f"月份 == {month}").iloc[:,1:-2]   # 这里记录的就是 7个交易金额列

    #预测的时间
    X_pred = np.array([[year,month]])  #array([[2018,   11]])

    #拼接时间格式(因为现在X_pred 没有正式的时间格式,自己建立)
    y_index = [datetime(year,month,1)]  # 这是 最后拼接的结果 第一列时间 后面都是交易金额 ["2018-11-01",1,2,3,4,5,6,7]

    for i in range(y_train.columns.size):  # y_train 就是那7列 交易金额
        y_tra = y_train.iloc[:,i]  # 每次循环出 一列 交易金额,一次一列

        model = LinearRegression().fit(X_train,y_tra) #预测 会记录 系数 和偏置项

        #预测的结果
        y_pred = model.predict(X_pred)   #预测就是给时间  返回 金额值

        y_index.append(y_pred[0]) #list 
    df.drop(columns=["年份","月份"],inplace=True)
    new_df = pd.DataFrame(pd.Series(y_index,index=df.columns)).T
    
   
    
    return  pd.concat([new_df,df]).set_index("时间")


先预测 2018 11 和 12 月份数据
df = predict(df,year=2018,month=11)
df = predict(df,year=2018,month=12)


2019 - 2027年的数据
year = range(2019,2022)
month = range(1,13)

for y in year:
    for m in month:
        df = predict(df,year=y,month=m)

df.plot()

六. 市场容量

1. 数据

计算每年 每一列 金额总和
dfgp = df.reset_index().groupby(by=[df.reset_index().时间.dt.year])[df.columns].sum()

将上列 每一年 进行横向计算
dfgp["总额"] = dfgp.sum(axis=1)
dfgp.style.format("¥{:,.2f}",na_rep="-")

xinds = range(dfgp.index.size)

plt.bar(xinds,dfgp.总额)

plt.xticks(xinds,dfgp.index)

#把增长率放到 注释中
for a,b in list(zip(xinds,list(zip(dfgp.总额,dfgp.总额.pct_change().fillna(0) )))):
    plt.text(a-0.35,b[0],s=f"同比增长率:{round(b[1]*100,2)}%\n年销售额:{round(b[0],2)}")
    
plt.title("2015~2021灭鼠杀虫市场容量和增长率")

如果企业的增幅 低于 GDP 说明公司业绩在下降 如果企业的增幅 持平 GDP 说明公司业绩持平 企业的增幅速度 必须 要大于GDP 才是健康状态

市场的份额逐渐扩大,增长率逐步减缓 ,说明增量市场 逐步转化 存量市场

七.细分市场的趋势(每一列都进行绘图)

xinds = range(dfgp.shape[0])  #行数
colors = sns.color_palette("rainbow",dfgp.shape[0])
#局部调节
plt.figure(figsize=(20*2,10*4))  #第一个参数是列  第二参数是行
#多图型绘制方法
i=1
for c in dfgp.columns[:-1]:
    #第一个参数是行数   第二个参数是列数  ,第三个参数是画布的编号(必须从1开,编号不能一致)
    axes = plt.subplot(4,2,i)  #返回的是一个画布对象
    data = dfgp.reset_index().loc[:,["时间",c]]
    
    
    sns.barplot(data=data,x="时间",y=c,ax=axes,color=colors[i-1])
    sns.pointplot(data=data,x="时间",y=c,ax=axes)
    
    axes.set_title(c)
    
    for a,b in list(zip(xinds,list(zip(dfgp[c],dfgp[c].pct_change().fillna(0) )))):
        plt.text(a-0.35,b[0],s=f"同比增长率:{round(b[1]*100,2)}%",fontsize=20)
    
    i+=1
    
plt.savefig("./1.png")

八. 细分市场的占比

dfgp.iloc[:,:-1].div(dfgp.iloc[:,-1],axis=0)

dfgp.iloc[:,:-1].div(dfgp.iloc[:,-1],axis=0).plot(kind="bar",stacked=True)

九.市场的竞争度

top100 = pd.read_excel("./top100品牌数据.xlsx").iloc[:,:-1]


#数据银行 : 交易指数 销售额  销售量  点击数  收藏量 .....
#交易指数 指数越大,说明 当前 产品的影响力 越大
top100["交易指数比"] = top100.交易指数.div(top100.交易指数.sum())  #总额百分比


top100["累计交易指数比"] = top100["交易指数比"].cumsum()

plt.figure(figsize=(20,6))
axes1 = plt.gca()
sns.barplot(top100,x="品牌",y="交易指数比",ax=axes1,color="skyblue")
axes2 = axes1.twinx()
sns.pointplot(top100,x="品牌",y="累计交易指数比",ax=axes2,color="orange")
# axes1.set_xticks()
a = axes1.set_xticklabels(top100.品牌,rotation=90)

axes1.vlines(19+0.5,0,0.035,ls="--")

#累计图像当中会出现比较明显的 拐点

 

赫芬达尔赫希曼指数

  • ΣS^2
  • S : 市场占有份额(总额百分比)
  • HHI :
    • 小于0.01 : 高度自由竞争
    • 小于0.15 : 垄断不集中
    • 小于0.25 : 垄断高度集中
    • 小于0.4 : 高度垄断

假设现在有100公司 期中有一家占据89%的份额 其它的99家平分11%的份额 假设现在有100公司 期中有一家占据50%的份额 其它的99家平分50%的份额 假设现在有100公司 期中有一家占据30%的份额 其它的99家平分70%的份额

.89**2 + (0.11/99)**2 * 99
0.7922222222222223


.5**2 + (0.5/99)**2 * 99
0.25252525252525254



.3**2 + (0.7/99)**2 * 99
0.09494949494949495

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

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

相关文章

scFed:联邦学习用于scRNA-seq分类

scRNA-seq的出现彻底改变了我们对生物组织中细胞异质性和复杂性的理解。然而,大型,稀疏的scRNA-seq数据集的隐私法规对细胞分类提出了挑战。联邦学习提供了一种解决方案,允许高效和私有的数据使用。scFed是一个统一的联邦学习框架&#xff0c…

自动化测试-web

一、自动化测试理论: UI: User Interface (用户接口-用户界面),主要包括:app 和webUI自动化测试:使用工具或代码执行用例的过程什么样的项目适合做自动化: 需要回归测试项目(甲方自…

基于令牌桶算法对高并发接口的优化

业务背景 项目中有一个抽奖接口,此接口需要处理高并发问题以及使用脚本作弊的问题。 本文主要探讨如何最大程度地减少脚本作弊行为对抽奖业务的影响。 设计思路 如何减少脚本作弊行为对抽奖业务的影响 使用令牌桶算法,对频率过高的用户请求进行拦截 …

基于ros的相机内参标定过程

基于ros的相机内参标定过程 1. 安装还对应相机的驱动2. 启动相机节点发布主题3. 下载camera_calibartion4. 将红框的文件夹复制在自己的工作空间里边,编译5. 标定完成以后,生成内参参数文件camera.yaml。将文件放在对应的路径下,修改config文…

vex-table—— 获取插入或修改数据后的tableData

例子来自vxe-table。在开发过程中发现新增数据后,输出this.tableData,发现数据并没有被修改 想要获取更新的数据方式为 mounted () {const $table this.$refs.xTableconsole.log("🚀 ~ mounted ~ $table:", $table.tableData)},

[开源] 基于transformer的时间序列预测模型python代码

分享一下基于transformer的时间序列预测模型python代码,给大家,记得点赞哦 #!/usr/bin/env python # coding: 帅帅的笔者import torch import torch.nn as nn import numpy as np import pandas as pd import time import math import matplotlib.pyplo…

BoostCompass(数据准备预处理模块)

阅读导航 一、网页数据下载二、编写数据去标签与数据清洗的模块 Parser✅boost 开发库的安装1. 基本思路2. 详细讲解(1)程序递归遍历目录,收集所有HTML文件的路径(2)对每个HTML文件进行解析,提取出文档标题…

【HTML】简单制作一个3D动态粒子效果的时空隧道

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的文件名改为[Bab…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近,众多会计专业人士和学生都开始准备报名参加这一行业的重要考试,报名时间为4月8日至4月30日。报名过程中,一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

Kafka基础/1

Kafka 概念 Kafka 是一个分布式的流媒体平台。 应用:消息系统、日志收集、用户行为追踪、流式处理 特点:高吞吐量、消息持久化、高可靠性、高扩展性 术语: broker:Kafka 的服务器,Kafka 当中每一台服务器&#xf…

网络安全---Packet Tracer - 配置扩展 ACL

一、实验目的 在Windows环境下利用Cisco Packet Tracer进行 配置防火墙操作。 二、实验环境 1.Windows10、Cisco Packet Tracer 8.2 2.相关的环境设置 在最初的时候,我们已经得到了搭建好的拓扑模型,利用已经搭建好的拓扑模型,进行后续的…

SOLIDWORKS如何新建定义材质库

SolidWorks材质库中包含了大量的材料选项,涵盖了金属、塑料、橡胶、复合材料等各种类型,每种材料都有详细的特性参数。用户可以根据设计需求,在材质库中选择合适的材料,从而更好地满足设计要求。在有限元分析中,需要附…

【架构师】-- 成长路线图

成长为软件架构师不是一件容易的事,这篇文章列举了架构师需要学习的技术储备,给出了成为软件架构师的路线图,帮助有志于在架构领域成长的同学可以明确学习的方向。原文:Master Plan for becoming a Software Architect[1] 软件架…

easyExcel - 动态复杂表头的编写

目录 前言一、情景介绍二、问题分析三、代码实现方式一:head 设置方式二:模板导出方式三:自定义工具类 前言 Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel&…

LeetCode_144(二叉树前序遍历)

1.递归 public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();accessTree(root,res);return res;}public void accessTree(TreeNode root,List<Integer>res){if(root null){return;}res.add(root.val);acce…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

计算机视觉——Python OpenCV BGR转HSV

这里将介绍如何使用 OpenCV 与 Python 来作彩色影像转HSV(RGB to HSV 或 BGR to HSV)&#xff0c;在写 Python 影像处理程序时常会用到 OpenCV cvtColor 作颜色空间转换的功能&#xff0c;接下来介绍怎么使用 Python 搭配 OpenCV 模块来进行 RGB/BGR 转 HSV 彩色转HSV空间。 H…

03 Php学习:echo 、 print 、EOF

echo 和 print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 echo 和 print 区别: echo - 可以输出一个或多个字符串print - 只允许输出一个字符串&#xff0c;返回值总为 1 注意&#xff1a;echo 输出的速度比 print 快&#xff0c; echo 没有返回值&…

VS Code开发插件使用 pnpm 打包异常的解决姿势

前言 刚刚准备发一个插件&#xff0c;发现用 pnpm 打出一个本地插件包直接扑街了。 这里只聚焦错误问题的解决&#xff0c;不是发插件的教程。。 聊点背景信息&#xff0c;vscode 的插件命令行的是 vsce 这个模块提供的 cli 能力去做的 环境 pnpm : 8.x 错误截图 本地打…