1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        小而全的Pandas使用案例

        共 4915字,需瀏覽 10分鐘

         ·

        2022-01-13 21:36

        寫過很多關于Pandas的文章,本文開展了一個簡單的綜合使用,主要分為:

        • 如何自行模擬數據
        • 多種數據處理方式
        • 數據統計與可視化
        • 用戶RFM模型
        • 用戶復購周期

        構建數據

        本案例中用的數據是小編自行模擬的,主要包含兩個數據:訂單數據和水果信息數據,并且會將兩份數據合并

        import?pandas?as?pd
        import?numpy?as?np
        import?random
        from?datetime?import?*
        import?time

        import?plotly.express?as?px
        import?plotly.graph_objects?as?go
        import?plotly?as?py

        #?繪制子圖
        from?plotly.subplots?import?make_subplots

        1、時間字段

        2、水果和用戶

        3、生成訂單數據

        order?=?pd.DataFrame({
        ????"time":time_range,??#?下單時間
        ????"fruit":fruit_list,??#?水果名稱
        ????"name":name_list,??#?顧客名
        ????#?購買量
        ????"kilogram":np.random.choice(list(range(50,100)),?size=len(time_range),replace=True)?
        })

        order

        4、生成水果的信息數據

        infortmation?=?pd.DataFrame({
        ????"fruit":fruits,
        ????"price":[3.8,?8.9,?12.8,?6.8,?15.8,?4.9,?5.8,?7],
        ????"region":["華南","華北","西北","華中","西北","華南","華北","華中"]
        })

        infortmation

        5、數據合并

        將訂單信息和水果信息直接合并成一個完整的DataFrame,這個df就是接下來處理的數據


        6、生成新的字段:訂單金額

        到這里你可以學到:

        • 如何生成時間相關的數據
        • 如何從列表(可迭代對象)中生成隨機數據
        • Pandas的DataFrame自行創(chuàng)建,包含生成新字段
        • Pandas數據合并

        分析維度1:時間

        2019-2021年每月銷量走勢

        1、先把年份和月份提取出來:

        df["year"]?=?df["time"].dt.year
        df["month"]?=?df["time"].dt.month
        #?同時提取年份和月份
        df["year_month"]?=?df["time"].dt.strftime('%Y%m')

        df

        2、查看字段類型:

        3、分年月統計并展示:

        #?分年月統計銷量
        df1?=?df.groupby(["year_month"])["kilogram"].sum().reset_index()

        fig?=?px.bar(df1,x="year_month",y="kilogram",color="kilogram")
        fig.update_layout(xaxis_tickangle=45)???#?傾斜角度

        fig.show()

        2019-2021銷售額走勢

        df2?=?df.groupby(["year_month"])["amount"].sum().reset_index()

        df2["amount"]?=?df2["amount"].apply(lambda?x:round(x,2))

        fig?=?go.Figure()
        fig.add_trace(go.Scatter(??#
        ????x=df2["year_month"],
        ????y=df2["amount"],
        ????mode='lines+markers',?#?mode模式選擇
        ????name='lines'))?#?名字

        fig.update_layout(xaxis_tickangle=45)???#?傾斜角度

        fig.show()

        年度銷量、銷售額和平均銷售額

        分析維度2:商品

        水果年度銷量占比

        df4?=?df.groupby(["year","fruit"]).agg({"kilogram":"sum","amount":"sum"}).reset_index()
        df4["year"]?=?df4["year"].astype(str)
        df4["amount"]?=?df4["amount"].apply(lambda?x:?round(x,2))

        from?plotly.subplots?import?make_subplots
        import?plotly.graph_objects?as?go

        fig?=?make_subplots(
        ????rows=1,?
        ????cols=3,
        ????subplot_titles=["2019年","2020年","2021年"],
        ????specs=[[{"type":?"domain"},???#?通過type來指定類型
        ???????????{"type":?"domain"},
        ???????????{"type":?"domain"}]]
        )??

        years?=?df4["year"].unique().tolist()

        for?i,?year?in?enumerate(years):
        ????name?=?df4[df4["year"]?==?year].fruit
        ????value?=?df4[df4["year"]?==?year].kilogram
        ????
        ????fig.add_traces(go.Pie(labels=name,
        ????????????????????????values=value
        ???????????????????????),
        ?????????????????rows=1,cols=i+1
        ????????????????)

        fig.update_traces(
        ????textposition='inside',???#?'inside','outside','auto','none'
        ????textinfo='percent+label',
        ????insidetextorientation='radial',???#?horizontal、radial、tangential
        ????hole=.3,
        ????hoverinfo="label+percent+name"
        )

        fig.show()

        各水果年度銷售金額對比

        years?=?df4["year"].unique().tolist()

        for?_,?year?in?enumerate(years):
        ????
        ????df5?=?df4[df4["year"]==year]
        ????fig?=?go.Figure(go.Treemap(?
        ????????labels?=?df5["fruit"].tolist(),
        ????????parents?=?df5["year"].tolist(),
        ????????values?=?df5["amount"].tolist(),
        ????????textinfo?=?"label+value+percent?root"
        ????))
        ????
        ????fig.show()

        商品月度銷量變化

        fig?=?px.bar(df5,x="year_month",y="amount",color="fruit")
        fig.update_layout(xaxis_tickangle=45)???#?傾斜角度
        fig.show()

        折線圖展示的變化:

        分析維度3:地區(qū)

        不同地區(qū)的銷量

        不同地區(qū)年度平均銷售額

        df7?=?df.groupby(["year","region"])["amount"].mean().reset_index()

        分析維度4:用戶

        用戶訂單量、金額對比

        df8?=?df.groupby(["name"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"order_number"})

        df8.style.background_gradient(cmap="Spectral_r")

        用戶水果喜好

        根據每個用戶對每種水果的訂單量和訂單金額來分析:

        df9?=?df.groupby(["name","fruit"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"number"})

        df10?=?df9.sort_values(["name","number","amount"],ascending=[True,False,False])

        df10.style.bar(subset=["number","amount"],color="#a97fcf")
        px.bar(df10,
        ???????x="fruit",
        ???????y="amount",
        #????????????color="number",
        ???????facet_col="name"
        ??????)

        用戶分層—RFM模型

        RFM模型是衡量客戶價值和創(chuàng)利能力的重要工具和手段。

        通過這個模型能夠反映一個用戶的交期交易行為、交易的總體頻率和總交易金額3項指標,通過3個指標來描述該客戶的價值狀況;同時依據這三項指標將客戶劃分為8類客戶價值:

        • Recency(R)是客戶最近一次購買日期距離現在的天數,這個指標與分析的時間點有關,因此是變動的。理論上客戶越是在近期發(fā)生購買行為,就越有可能復購

        • Frequency(F)指的是客戶發(fā)生購買行為的次數--最常購買的消費者,忠誠度也就較高。增加顧客購買的次數意味著能占有更多的時長份額。

        • Monetary value(M)是客戶購買花費的總金額。

        下面通過Pandas的多個方法來分別求解這個3個指標,首先是F和M:每位客戶的訂單次數和總金額

        如何求解R指標呢?

        1、先求解每個訂單和當前時間的差值

        2、根據每個用戶的這個差值R來進行升序排列,排在第一位的那條數據就是他最近購買記錄:以xiaoming用戶為例,最近一次是12月15號,和當前時間的差值是25天

        3、根據用戶去重,保留第一條數據,這樣便得到每個用戶的R指標:

        4、數據合并得到3個指標:

        當數據量足夠大,用戶足夠多的時候,就可以只用RFM模型來將用戶分成8個類型

        用戶復購周期分析

        復購周期是用戶每兩次購買之間的時間間隔:以xiaoming用戶為例,前2次的復購周期分別是4天和22天

        下面是求解每個用戶復購周期的過程:

        1、每個用戶的購買時間升序

        2、將時間移動一個單位:

        3、合并后的差值:

        出現空值是每個用戶的第一條記錄之前是沒有數據,后面直接刪除了空值部分

        直接取出天數的數值部分:

        5、復購周期對比

        px.bar(df16,
        ???????x="day",
        ???????y="name",
        ???????orientation="h",
        ???????color="day",
        ???????color_continuous_scale="spectral"???#?purples
        ??????)

        上圖中矩形越窄表示間隔越小;每個用戶整個復購周期由整個矩形長度決定。查看每個用戶的整體復購周期之和與平均復購周期:

        得到一個結論:Michk和Mike兩個用戶整體的復購周期是比較長的,長期來看是忠誠的用戶;而且從平均復購周期來看,相對較低,說明在短時間內復購活躍。

        從下面的小提琴中同樣可以觀察到,Michk和Mike的復購周期分布最為集中。

        點擊下方卡片進行關注,獲取更多內容
        點分享
        點收藏
        點點贊
        點在看
        瀏覽 99
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            乳尖娇吟办公室少妇激情视频 | 麻豆久久 | 日日撸日日色 | 天天爽日日澡AAAA片 | 很很操很很操在线观看视频 | 公妇乱淫真实生活 | 人妻视频网站 | 91乱子伦国产乱子伦 | 久久一级视频 | 亚洲五月天精品无码伊人久久 |