1. 程式人生 > 其它 >python資料分析--------電商打折套路為例

python資料分析--------電商打折套路為例

如今大資料行業十分火熱,本人認為python是比較強大的分析工具,在網易雲課堂上學習了python資料分析。做了案例,寫下程式碼分析過程以及分析結論。
以下是電商打折套路的python資料分析專案。

    # -*- coding: utf-8 -*-
    """
    Created on Wed Jan  9 15:31:45 2019
    
    @author: Administrator
    """
    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import warnings
    from datetime import datetime
    
    from bokeh.transform import jitter
    warnings.filterwarnings('ignore')
    from bokeh.plotting import figure ,show,output_file
    from bokeh.models import ColumnDataSource
    #匯入資料
    import os
    os.chdir('C:\\Users\\Administrator\\Desktop\\python專案\\2電商打折')
    #工作路徑
    df=pd.read_excel('雙十一資料.xlsx',sheetname=0)
    df.fillna(0,inplace=True)
    df.index=df['update-time']
    df['date']=df.index.day
    #雙十一當天在售商品佔比數
    data1=df[["id","title","店名","date"]]
    
    d1=data1[["id","date"]].groupby(by="id").agg(["max","min"])["date"]
    #統計不同商品的銷售開始和結束日期
    id_11=data1[data1["date"]==11]["id"]
    
    d2=pd.DataFrame({"id":id_11,"雙十一是否售賣":True})
    
    id_data=pd.merge(d1,d2,left_index=True,right_on="id",how="left")
    id_data.fillna(False,inplace=True)
    #雙十一當天參與活動的商品個數與比例
    m=len(d1)
    m_11=len(id_11)
    m_pre=m_11/m
    print("雙十一當天參與活動的商品個數是%i個,比例是%.2f%%"%(m_11,m_pre*100))

結論:雙十一當天參與活動的商品個數是405個,比例是74.18%

    #------------------------------------------------------------------------
    #商品銷售分類
    id_data["type"]="待分類"
    id_data["type"][(id_data["min"]<11)&(id_data["max"]>11)]="A"
    id_data["type"][(id_data["min"]<11)&(id_data["max"]==11)]="B"
    id_data["type"][(id_data["min"]==11)&(id_data["max"]>11)]="C"
    id_data["type"][(id_data["min"]==11)&(id_data["max"]==11)]="D"
    id_data["type"][(id_data["雙十一是否售賣"]==False)]="F"
    id_data["type"][(id_data["max"]<11)]="E"
    id_data["type"][(id_data["min"]>11)]="G"
    result1=id_data["type"].value_counts()
    result1=result1.loc[["A","B","C","D","E","F","G"]]
    #不同類別商品比例
    from bokeh.palettes import brewer
    colori=brewer["YlGn"][7]
    plt.axis("equal")
    plt.pie(result1,labels=result1.index,autopct="%.2f%%",colors=colori,
            startangle=90,radius=1.5,counterclock=True)
    #------------------------------------------------------------------------
    
    
    #未參與雙十一活動的商品去向如何
    
    id_not11=id_data[id_data["雙十一是否售賣"]==False]#暫時下架商品----id_con2
    df_not11=id_not11[["id","type"]]
    
    data_not11=pd.merge(df_not11,df,on="id",how="left")#分組欄位不夠用需要從原始總資料裡借,所以要合併
    #不合並就沒法分組,沒法分組,就沒法統計
    
    id_con1=id_data["id"][id_data["type"]=="F"].values
    
    data_con2=data_not11[["id","title","date"]].groupby(by=["id","title"]).count()
    title_count=data_con2.reset_index()["id"].value_counts()
    
    id_con2=title_count[title_count>1].index
    
    data_con3=data_not11[data_not11["title"].str.contains("預售")]
    id_con3=data_con3["id"].value_counts().index
    
    print("未參與雙十一當天活動的商品裡,%i個為暫時下架商品,%i個為重新上架商品,%i個為預售商品"%
          (len(id_con1),len(id_con2),len(id_con3))
          )

結論:未參與雙十一當天活動的商品裡,95個為暫時下架商品,155個為重新上架商品,69個為預售商品

    #------------------------------------------------------------------------
    #商品銷售分類
    id_data["type"]="待分類"
    id_data["type"][(id_data["min"]<11)&(id_data["max"]>11)]="A"
    id_data["type"][(id_data["min"]<11)&(id_data["max"]==11)]="B"
    id_data["type"][(id_data["min"]==11)&(id_data["max"]>11)]="C"
    id_data["type"][(id_data["min"]==11)&(id_data["max"]==11)]="D"
    id_data["type"][(id_data["雙十一是否售賣"]==False)]="F"
    id_data["type"][(id_data["max"]<11)]="E"
    id_data["type"][(id_data["min"]>11)]="G"
    result1=id_data["type"].value_counts()
    result1=result1.loc[["A","B","C","D","E","F","G"]]

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224135019538.PNG?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjQ2OTU2,size_16,color_FFFFFF,t_70)

    #不同類別商品比例
    from bokeh.palettes import brewer
    colori=brewer["YlGn"][7]
    plt.axis("equal")
    plt.pie(result1,labels=result1.index,autopct="%.2f%%",colors=colori,
            startangle=90,radius=1.5,counterclock=True)
    #------------------------------------------------------------------------
    
    
    #未參與雙十一活動的商品去向如何
    
    id_not11=id_data[id_data["雙十一是否售賣"]==False]#暫時下架商品----id_con2
    df_not11=id_not11[["id","type"]]
    
    data_not11=pd.merge(df_not11,df,on="id",how="left")#分組欄位不夠用需要從原始總資料裡借,所以要合併
    #不合並就沒法分組,沒法分組,就沒法統計
    
    id_con1=id_data["id"][id_data["type"]=="F"].values
    
    data_con2=data_not11[["id","title","date"]].groupby(by=["id","title"]).count()
    title_count=data_con2.reset_index()["id"].value_counts()
    
    id_con2=title_count[title_count>1].index
    
    data_con3=data_not11[data_not11["title"].str.contains("預售")]
    id_con3=data_con3["id"].value_counts().index
    
    print("未參與雙十一當天活動的商品裡,%i個為暫時下架商品,%i個為重新上架商品,%i個為預售商品"%
          (len(id_con1),len(id_con2),len(id_con3))
          )
    #------------------------------------------------------------------------
    
    
    data_11sale=id_11
    data_11sale_final=np.hstack((data_11sale,id_con3))
    result2_i=pd.DataFrame({"id":data_11sale_final})
    
    x1=pd.DataFrame({"id":id_11})
    x1_df=pd.merge(x1,df,on="id",how="left")
    brand_11sale=x1_df.groupby(by="店名")["id"].count()
    
    x2=pd.DataFrame({"id":id_con3})
    x2_df=pd.merge(x2,df,on="id",how="left")
    brand_ys=x2_df.groupby(by="店名")["id"].count()
    
    
    result2_data=pd.DataFrame({"當天參與活動的商品數量":brand_11sale,
                               "預售商品數量":brand_ys})
    
    result2_data["總量"]=result2_data["當天參與活動的商品數量"]+result2_data["預售商品數量"]
    
    result2_data.sort_values(by="總量",ascending=False)
    
    
    from bokeh.models import HoverTool
    from bokeh.core.properties import value
    
    lst_brand=result2_data.index.tolist()
    lst_type=result2_data.columns.tolist()[:2]#result2_data的列名columns.取前2個
    
    color=["red","green"]
    result2_data.index.name="brand"
    
    result2_data.columns=["sale_on_11","presell","sum"]
    
    source1=ColumnDataSource(result2_data)
    
    hover=HoverTool(
            tooltips=[
                    ("品牌","@brand"),
                    ("雙十一當天參與活動商品數量","@sale_on_11"),
                    ("預售商品數量","@presell"),
                    ("商品總數","@sum")
                    ])
    
    
    output_file("project08.html")
    
    p=figure(x_range=lst_brand,plot_width=900,plot_height=350,
             title="各個品牌參與雙十一活動的情況",
      tools=[hover,"box_select,pan,reset,wheel_zoom,crosshair"]
             )
    
    p.vbar(top="sum",x="brand",source=source1,width=0.9,
           #color=color,alpha=0.7,
           #legend=[value(x) for x in lst_type],
           muted_color="black", muted_alpha=0.2
           )
    show(p)
    #不同品牌銷售數量情況
    #------------------------------------------------------------------------
    

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190224135339931.PNG?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjQ2OTU2,size_16,color_FFFFFF,t_70)