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>

        電商數(shù)據(jù)分析項目總結!

        共 5988字,需瀏覽 12分鐘

         ·

        2021-01-05 02:34

        ↑↑↑關注后"星標"Datawhale
        每日干貨?&?每月組隊學習,不錯過
        ?Datawhale干貨?
        作者:牧小熊,華中農業(yè)大學,Datawhale原創(chuàng)作者

        訂單數(shù)據(jù)作為電商數(shù)據(jù)分析中的基礎分析項目,本項目就京東的訂單數(shù)據(jù)進行分析。通過數(shù)據(jù)分析和可視化深挖數(shù)據(jù)產生的原因,掌握基礎的數(shù)據(jù)分析能力。

        1.關于本項目

        1.1數(shù)據(jù)來源

        本次數(shù)據(jù)來源于京東2020年5月25日 大家電-冰箱的訂單數(shù)據(jù) 按照10%的隨機抽樣后進行數(shù)據(jù)脫敏最后得到的訂單數(shù)據(jù),共有訂單數(shù)據(jù)大約70K,數(shù)據(jù)來源于公開網絡數(shù)據(jù)。

        公眾號(Datawhale)后臺回復“202013”獲取打包的項目源碼和數(shù)據(jù)

        1.2數(shù)據(jù)所包含信息

        訂單中的屬性將其分成了3類,分別是用戶屬性、訂單屬性以及商品屬性

        2.數(shù)據(jù)預處理

        本項目使用python對數(shù)據(jù)進行處理 使用plotly進行數(shù)據(jù)可視化

        import pandas as pd
        import numpy as np
        import plotly_express as px
        import plotly.offline as of
        import plotly as py
        import plotly.graph_objs as go

        讀取提供的數(shù)據(jù)

        df=pd.read_csv('data.csv',sep='\t', encoding="utf-8", dtype=str)

        查看數(shù)據(jù)的缺失值

        df.isnull().sum().sort_values(ascending=False)

        user_site_city_id 38190
        user_site_province_id 38033
        check_account_tm 23271

        通過觀察發(fā)現(xiàn),這3個數(shù)據(jù)有部分缺失值,其中user_site_city_id 用戶所在城市編號,user_site_province_id 用戶所在省份的編號,check_account_tm支付時間

        這部分數(shù)據(jù)的缺失是因為用戶填寫個人資料時跳過的部分,當然這不影響我們整個數(shù)據(jù)的分析

        我們首先是將數(shù)據(jù)的類型進行轉換 同時處理缺失值和異常值

        • 值得注意的是,通過觀察我們發(fā)現(xiàn)冰箱最低的價格是288元,但是數(shù)據(jù)中發(fā)現(xiàn)了很多低于288元的訂單數(shù)據(jù),我們認為這部分數(shù)據(jù)不能真實代表冰箱實際的訂單數(shù)據(jù),可能出現(xiàn)了補差價或者補運費的情況,因此這樣的數(shù)據(jù)我們都過濾掉。
        • 因為訂單的編號具有唯一性,因此對于訂單編號的重復數(shù)據(jù),我們認為出現(xiàn)了重復訂單
        • 對于缺失的省份值和缺失的數(shù)據(jù),我們將空白地方進行填充
        • 通過觀察,我們發(fā)現(xiàn)數(shù)據(jù)的列有重復,對于刪除重復的列,這里提供一個比較有意思的做法,將數(shù)據(jù)反轉后,刪除重復的行再反轉回來。
        • 實際支付的價格=商品數(shù)量*優(yōu)惠后的單價
        #刪除優(yōu)惠前價格小于288元的
        df = df[df['before_prefr_unit_price' ]>= 288]
        #訂單編號具有唯一性,因此需要刪除重復的數(shù)據(jù)
        df.drop_duplicates(subset=['sale_ord_id'],keep='first',inplace=True)
        #填充城市和省份的缺失數(shù)據(jù)
        df.user_site_city_id=df.user_site_city_id.fillna(-1)
        df.user_site_province_id =df.user_site_province_id.fillna(-1)
        #刪除重復的列check_account_tm 轉置列 刪除 再轉置
        df=df.T.drop_duplicates().T
        #實際支付的價格=商品數(shù)量*優(yōu)惠后單價
        df['total_actual_pay'] = df['sale_qtty'] * df['after_prefr_unit_price']

        到這里我們就完成了數(shù)據(jù)的預處理部分

        3.訂單分析

        3.1訂單取消比例分析

        通過數(shù)據(jù)觀察,有的訂單出現(xiàn)了取消,因此我們通過餅圖查看取消和未取消的比例

        order_cancel = df[df.cancel_flag==1]['sale_ord_id'].count()
        order_success=df[df.cancel_flag==0]['sale_ord_id'].count()
        labels = ['取消','未取消']
        values = [order_cancel, order_success]
        trace = [go.Pie(labels=labels, values=values)]
        layout = go.Layout(
        title = dict(text='訂單比例圖',x=0.5)
        )
        fig = go.Figure(data = trace, layout = layout)
        fig

        通過餅狀圖我們看到,大約有28.9%的訂單取消了,取消的比例可能是地址填寫錯了、沒有領到優(yōu)惠劵等情況,使取消支付的比例占有一部分的比例

        3.2訂單支付比例分析

        通過觀察數(shù)據(jù)我們發(fā)現(xiàn)了用戶有提交了訂單,但是沒有支付的情況

        #找到所有的有效訂單
        df2 = df[(df['sale_ord_valid_flag'] == 1)&(df['cancel_flag'] == 0)&('before_prefr_unit_price' != 0)]
        order_payed = df2['sale_ord_id'][df2['user_actual_pay_amount'] != 0].count()
        order_unpay = df2['sale_ord_id'][df2['user_actual_pay_amount'] == 0].count()
        labels = ['支付','未支付']
        values = [order_payed, order_unpay]
        trace = [go.Pie(labels=labels, values=values)]
        layout = go.Layout(
        title = dict(text='支付比例圖',x=0.5)
        )
        fig = go.Figure(data = trace, layout = layout)
        fig

        通過餅狀圖我們可以看到,大約有15%的用戶取消了支付,取消支付的比例小于取消訂單的比例,因此對于有訂單信息的用戶但是未支付的,有比較強的購買目的,可能是由于優(yōu)惠劵或者價格等因素使其取消支付,因此針對這部分用戶可能是價格比較敏感的用戶,我們可以推送京東優(yōu)惠卡。

        3.3訂單價格分布

        price_series = df2['after_prefr_unit_price']
        price_series_num = price_series.count()
        hist, bin_edges = np.histogram(price_series, bins=80)
        hist_sum = np.cumsum(hist)
        hist_per = hist_sum / price_series_num
        bin_edges_plot = np.delete(bin_edges, 0)
        trace = go.Scatter(
        x = bin_edges_plot,
        y = hist_per*100,
        mode = 'lines', # 折線圖
        line = dict(
        width = 2
        ) )
        layout = go.Layout(
        title = dict(text='訂單的價格分布',x=0.5),
        xaxis=dict(title='訂單價格'),
        yaxis=dict(title='百分比(%)',ticksuffix='%')

        )
        fig = go.Figure(data=trace,layout=layout)
        fig

        通過分布圖可以看到,超過80%冰箱的價格是低于4K的,查過70%的冰箱價格是低于2K的,因此冰箱用戶主力消費價格在2K以下,因此在進行冰箱廣告推廣時,可以優(yōu)先考慮價格低于2K的冰箱,這類冰箱具有較大的市場。

        同時通過觀察,冰箱價格在4K以內分布較為均勻,超過4K以后,冰箱累計上升區(qū)間緩慢,因此我們可以大致認為,當冰箱的價格超過4K,這部分冰箱價格我們可以認為是偏豪華型的冰箱,具有單個冰箱利潤高,但是銷售市場占比少。

        3.4有效訂單與時間的關系

        df3 = df2.copy()
        df3['order_time_hms'] = df3['sale_ord_tm'].apply(lambda x: x.strftime('%H'))
        pay_time_df = df3.groupby('order_time_hms')['sale_ord_id'].count()
        x = pay_time_df.index
        y = pay_time_df.values
        trace = go.Bar(
        x = x,
        y = y,
        text=y,
        textposition='outside')
        layout = go.Layout(
        title = dict(text='不同時間段有效訂單分布',x=0.5),
        xaxis=dict(title='時間',tickmode='linear'),
        yaxis=dict(title='有效訂單數(shù)')

        )
        fig = go.Figure(data=trace,layout=layout)
        fig

        通過觀察,0點有效訂單數(shù)出現(xiàn)了激增的情況,這一部分是出現(xiàn)了異常訂單還是說過了0點以后通過搶購物券使這一部分訂單增加?

        同時,除了0點外,10、20點有效訂單數(shù)具有一個較高的值,說明用戶比較偏向于早上10點和晚上20點付款。早上10點付款推測原因可能是剛到公司,先逛一下京東摸摸魚,晚上20點推測原因是晚飯后,這個時間距離睡覺還比較早,用戶刷手機的頻率增加,因此增加有效訂單數(shù)。

        針對0點有效訂單數(shù)偏高的問題,我們進行進一的分析人均有效訂單的情況。

        3.5人均有效訂單與時間的關系

        order_time_df=df3.groupby('order_time_hms')['sale_ord_id'].agg({('order_num','count')}).reset_index()
        user_time_df = df3.groupby('order_time_hms')['user_log_acct'].agg({('user_num','nunique')}).reset_index()
        order_num_per_user = order_time_df['order_num'] / user_time_df['user_num']
        trace = go.Scatter(
        x = order_num_per_user.index,
        y = order_num_per_user.values,
        mode = 'lines', # 折線圖
        line = dict(
        width = 2
        ) )
        layout = go.Layout(
        title = dict(text='不同時間段人均訂單量的分布',x=0.5),
        xaxis=dict(title='時間',tickmode='linear'),
        yaxis=dict(title='人均有效訂單量')

        )
        fig = go.Figure(data=trace,layout=layout)
        fig

        通過觀察發(fā)現(xiàn),0點時候的人均有效訂單率處于較為正常的值,甚至比1點的有效訂單率低,因此有效訂單的激增,我們認為很大概率是通過搶優(yōu)惠劵增加而不是出現(xiàn)了惡意刷單。

        同時我們看到20點的人均有效訂單率也是處于較為正常的值

        3.6人均客單價和平均價在不同時間段的分布

        客單價=銷售額/顧客數(shù)

        平均訂單價=銷售額/訂單數(shù)

        0時客單價和平均訂單價在全天有個較高的值,會不會是小部分用戶的極端購物行為產生這樣的數(shù)據(jù)呢?

        因此我們看一下0時和20時價格訂單的分布圖

        3.7 0時和20時訂單價格分布

        通過看0時和20時不同時間段訂單累計分布圖我們可以看到

        大約20%的0時用戶的訂單在2K以下,20時用戶在2K以下的訂單占比為75%

        這說明0時的用戶并補只有一小部分的訂單價格很高,而是0時的用戶普遍的購物具有較高的客單價。

        因此我們推測,0時用戶是否具有一定的沖動購物的情況,而20時購物的用戶相對理智一些

        也可能時用戶為了使用優(yōu)惠劵使高額的訂單大多集中在0時

        3.8訂單與地區(qū)的關系

        對于冰箱市場而言,哪些省份是冰箱的頭部市場呢?

        通過查看不同省份有效訂單分布圖我們可以看到,訂單的市場大多集中在一線城市或者經濟較為發(fā)達的省份,這部分城市經濟發(fā)達,對于年輕人有較強大的吸引力,因此購置冰箱的訂單數(shù)較高。

        那么這些不同省份客單價是否會不同?

        其中上??蛦蝺r最高,廣東的訂單數(shù)量最多,因為廣州在外貿上具有較大的優(yōu)勢,因此有具有較大的實體工廠,能吸納較多的低端人才,因此出現(xiàn)訂單數(shù)量多而客單價不高的情況。

        與之相反的是上海作為國家的金融中心,匯聚了較多的金融方向的從業(yè)者,因此在消費品質上有一個較大的提升。

        最后我們來看看不同品牌的客單價

        3.9不同品牌客單價

        通過圖中我們可以看到,卡薩帝穩(wěn)居客單價排行第一的品牌,妥妥的豪華冰箱品牌

        價格的第一梯隊品牌有 博世、西門子、松下、三星 平均價格在4K以上

        價格的第二梯隊品牌有 海爾、小米、伊萊克斯、格蘭仕、美的 平均價格在2K以上 其中有不少國產品牌的身影

        剩下的品牌價格都在2K以下,這部分市場消費需求大,因此各大品牌在這一區(qū)間段價格競爭比較激烈。

        4.小結

        本項目針對京東的冰箱訂單數(shù)據(jù)進行了分析,在分析過程中沒用使用復雜的模型以及炫酷的圖表,而是通過普通的數(shù)據(jù)展示一步步深挖數(shù)據(jù)產生的原因,并提出了一部分產生數(shù)據(jù)的原因。因此在數(shù)據(jù)分析中,往往數(shù)據(jù)指標的建立對于數(shù)據(jù)的深挖具有較大的意義,同時針對異常數(shù)據(jù)提出一定的推測和假設,通過有效的數(shù)據(jù)分析進行小心求證。

        5.項目源碼和數(shù)據(jù)

        數(shù)據(jù)采用utf-8編碼,直接打開可能會出現(xiàn)亂碼的情況,因此在讀取數(shù)據(jù)時需要指定字符編碼集

        公眾號(Datawhale)后臺回復“202013”獲取打包的項目源碼和數(shù)據(jù)

        “整理不易,三連
        瀏覽 108
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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>
            97人人看 | 黄色av一区| 日韩精品不卡 | 四虎国产 | 日本美穴| 精品不卡| 中文无码AV | 日本大香蕉天天干天天添 | 韩国电影甜性涩爱在线观看 | 国产免费观看a大片的网站 |