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

基于机器学习的音频情感分析系统Python源码(高分项目),能够从语音中识别出四种基本情感:愤怒、快乐、中性和悲伤。个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统Python源码(高分项目)基于机器学习的音频情感分析系统P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值