<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              當前觀點:電商數據分析中的基礎分析項目——京東訂單數據預處理

              來源:CSDN 時間:2023-02-15 11:28:27

              Datawhale干貨

              作者:牧小熊,華中農業大學,Datawhale原創作者

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


              (資料圖片僅供參考)

              1.關于本項目

              1.1數據來源

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

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

              1.2數據所包含信息

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

              2.數據預處理

              本項目使用python對數據進行處理 使用plotly進行數據可視化

              import pandas as pdimport numpy as npimport plotly_express as pximport plotly.offline as ofimport plotly as pyimport plotly.graph_objs as go

              讀取提供的數據

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

              查看數據的缺失值

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

              user_site_city_id 38190user_site_province_id 38033check_account_tm 23271

              通過觀察發現,這3個數據有部分缺失值,其中user_site_city_id 用戶所在城市編號,user_site_province_id 用戶所在省份的編號,check_account_tm支付時間

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

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

              值得注意的是,通過觀察我們發現冰箱最低的價格是288元,但是數據中發現了很多低于288元的訂單數據,我們認為這部分數據不能真實代表冰箱實際的訂單數據,可能出現了補差價或者補運費的情況,因此這樣的數據我們都過濾掉。

              因為訂單的編號具有唯一性,因此對于訂單編號的重復數據,我們認為出現了重復訂單

              對于缺失的省份值和缺失的數據,我們將空白地方進行填充

              通過觀察,我們發現數據的列有重復,對于刪除重復的列,這里提供一個比較有意思的做法,將數據反轉后,刪除重復的行再反轉回來。

              實際支付的價格=商品數量*優惠后的單價

              #刪除優惠前價格小于288元的df = df[df["before_prefr_unit_price" ]>= 288]#訂單編號具有唯一性,因此需要刪除重復的數據df.drop_duplicates(subset=["sale_ord_id"],keep="first",inplace=True)#填充城市和省份的缺失數據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#實際支付的價格=商品數量*優惠后單價df["total_actual_pay"] = df["sale_qtty"] * df["after_prefr_unit_price"]

              到這里我們就完成了數據的預處理部分

              3.訂單分析

              3.1訂單取消比例分析

              通過數據觀察,有的訂單出現了取消,因此我們通過餅圖查看取消和未取消的比例

              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%的訂單取消了,取消的比例可能是地址填寫錯了、沒有領到優惠劵等情況,使取消支付的比例占有一部分的比例

              3.2訂單支付比例分析

              通過觀察數據我們發現了用戶有提交了訂單,但是沒有支付的情況

              #找到所有的有效訂單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%的用戶取消了支付,取消支付的比例小于取消訂單的比例,因此對于有訂單信息的用戶但是未支付的,有比較強的購買目的,可能是由于優惠劵或者價格等因素使其取消支付,因此針對這部分用戶可能是價格比較敏感的用戶,我們可以推送京東優惠卡。

              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_numbin_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以下,因此在進行冰箱廣告推廣時,可以優先考慮價格低于2K的冰箱,這類冰箱具有較大的市場。

              同時通過觀察,冰箱價格在4K以內分布較為均勻,超過4K以后,冰箱累計上升區間緩慢,因此我們可以大致認為,當冰箱的價格超過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.indexy = pay_time_df.valuestrace = 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="有效訂單數")    )fig = go.Figure(data=trace,layout=layout)fig

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

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

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

              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

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

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

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

              客單價=銷售額/顧客數

              平均訂單價=銷售額/訂單數

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

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

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

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

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

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

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

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

              3.8訂單與地區的關系

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

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

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

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

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

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

              3.9不同品牌客單價

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

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

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

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

              4.小結

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

              5.項目源碼和數據

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

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩