快樂學習Python,通過對使用者和訂單資料的分析,在實踐中制定營銷策略

Mondo 科技 更新 2024-02-20

我是一名技術創作者

在網際網絡行業,電商領域絕對是資料分析使用最多的場所,各大電商平台都依靠資料分析來幫助他們挖掘使用者訂單增長機會。 例如,購買寶藏的核心思想是根據使用者每天的瀏覽內容和停留時間,以及訂單的相關性來推薦它。

在本文中,我們將通過乙個真實的電子商務資料集進行分析,在回顧之前的內容的基礎上,我們也可以感受到電子商務資料分析的分析過程。

最近,一家電子商務公司**需要策劃一項促銷活動,通過傳送簡訊向客戶傳送廣告和優惠,以吸引他們購物。 但是,由於預算和簡訊的限制,不可能傳送給所有客戶,因此有必要找出最有可能轉換的人,並有針對性地傳送促銷資訊。

基於以上要求,作為資料分析師,我們需要根據自己的需求制定自己的分析方案。 那麼我們的任務是:

通過資料分析,找到最有可能轉化的人群特徵(如年齡、性別、地區等)。 通過資料分析,我們可以給出最合適的時間傳送促銷簡訊。 任務明確後,我們需要考慮完成上述任務需要哪些資料支援,並開始尋找資料部門提供相應的資料支援。

通過一頓飯的友情(唇)好(槍)合作(舌)商(戰),最終從資料部得到以下資料:

使用者行為表:過去6個月的使用者行為資料。 即訂單資料VIP資料:使用者VIP會員開戶資料。 使用者資料:與使用者個人資訊相關的資料。 一旦我們有了資料,我們就可以盡力而為。

為了方便我們學習,我們需要自己模擬一些相關資料,如果不想模擬,可以聯絡***獲取。

獲取資料後,解壓後可以看到以下檔案:

user_beh**ior_time_resampled.CSV(使用者行為資料)VIP使用者CSV(VIP 使用者資料)使用者資訊csv(使用者資料) 我們先來看一下每個表的字段說明:

user_beh**ior_time_resampled.csvvip_users.csv

user_info.csv

從這裡開始,我們將開始使用我們之前了解的一些包和庫來讀取資料,從 pandas 開始載入資料。

import pandas as pd

df_user_log = pd.read_csv("ecomm/user_beh**ior_time_resampled.csv")

df_vip_user = pd.read_csv("ecomm/vip_user.csv")

df_user_info = pd.read_csv("ecomm/user_info.csv")

df_user_log

df_vip_user

df_user_info

載入後,輸出如下所示:

這裡,df 使用者日誌表中有乙個時間戳和時間戳字段,我們需要了解這兩個欄位的含義。

讓我們看一下這兩個欄位的邊界值。

time_stamp_max = str(df_user_log['time_stamp'].max())

time_stamp_min = str(df_user_log['time_stamp'].min())

print("time_stamp max: " + time_stamp_max, "time_stamp min: " + time_stamp_min)

timestamp_max = str(df_user_log['timestamp'].max())

timestamp_min = str(df_user_log['timestamp'].min())

print("timestamp max: " + timestamp_max, "timestamp min: " + timestamp_min)

輸出如下:

time_stamp max: 1112, time_stamp min: 511

timestamp max: 86399.99327792758, timestamp min: 0.10787397733480476

如您所見,時間戳的最大值為 1112,最小值為 511,時間戳的最大值為 8639999 的最小值為 01。

從資料集的描述來看,使用者行為表是使用者 6 個月的行為,時間戳最多 1112,最小值為 511,看起來很像乙個日期。 表示最短日期為 5 月 11 日,最長日期為 11 月 12 日。

那麼既然時間戳是日期,那麼時間戳會是特定時間嗎? 時間戳的最大值為 86399,而一天中的最大秒數為 24*3600 = 86400。 如果這兩個數字非常接近,則可以假定時間戳表示發生此行為的一天中的秒數。

解決了兩個時間欄位的問題,為了避免歧義,我們將時間戳列重新命名為 date。

df_user_log.rename(columns=, inplace = true)

df_user_log

一旦我們讀取了資料並理解了每個欄位的含義,我們就可以開始清理資料了。

對於資料分析中使用的資料集,我們需要盡可能了解資料的完整性,不清理與我們的資料分析無關的字段也沒關係。 但是,如果關鍵分析維度缺少部分,我們需要考慮是完成還是直接刪除。

讓我們先看一下缺失值:

df_user_log.isnull().sum()

輸出如下:

user_id 0

item_id 0

cat_id 0

seller_id 0

brand_id 18132

date 0

action_type 0

timestamp 0

dtype: int64

從以上結果來看,日誌表中缺少品牌資料的資料超過18000條,缺失率相對較低,為016%(1.8w 1098w),一般這個數量級不會影響資料分析的整體嚴謹性,我們暫且不處理。

df_user_info.isnull().sum()

輸出如下:

user_id 0

age_range 2217

gender 6436

dtype: int64

從結果中可以看出,資訊表中缺少 2217 個年齡資料和 6436 個缺失的性別字段。 但是我們對使用者的年齡和性別進行了分析,完成度完全不規則,所以這裡我們直接刪除它。

df_user_info = df_user_info.dropna()

df_user_info

df_vip_user.isnull().sum()

輸出:

user_id 0

merchant_id 0

label 0

dtype: int64

從結果來看,VIP桌沒有丟失,不需要處理。

完成上述準備工作後,是時候開始我們的核心資料分析工作了。

還記得我們的分析任務嗎? 第乙個是針對需要推廣的人,第二個是確定推廣資訊的傳送時間。 因此,讓我們專注於我們的兩個任務,讓我們做下乙個工作。

讓我們通過 DataFrame 的 value counts 函式看一下年齡分布

df_user_info.age_range.value_counts()

輸出:

name: age_range, dtype: int64

除了未知資料外,我們可以發現 3 和 4 的值佔比最大。 3 和 4 分別代表 25-30 歲和 30-34 歲。 然後我們用**來計算25-34歲的使用者比例。

user_ages = df_user_info.loc[df_user_info["age_range"] != 0, "age_range"]

user_ages.loc[(user_ages == 3) |user_ages == 4) ]shape[0] / user_ages.shape[0]

輸出:

可以看出,25-34歲年齡段的使用者比例為58%。

(2)使用者性別分析接下來,我們使用值計數函式來分析性別。

df_user_info.gender.value_counts()

輸出:

name: gender, dtype: int64

就字段含義而言,0 代表女性,1 代表男性,2 代表未知。 由此可以得出結論,該平台的核心使用者群體是女性,男性數量為235倍。

到現在為止,通過對使用者群體的分析,我們已經可以得出結論,平台的核心使用者是25-34歲的女性,但這種情況現實嗎? 畢竟,我們只分析了註冊使用者資訊,並沒有將其與訂單資料相結合。 也許只是註冊的女性多了,訂購的女性卻少了。 所以下一步就是結合使用者資訊和訂單資料,驗證猜想是否合理。

如上所述,我們需要結合使用者資訊和訂單資訊來分析是否是女性具有更強的購買力。 但是使用者資料和訂單資料屬於未使用的表,那我們該怎麼辦? 如果你看一下資料,我們可以看到 user 表和 order 表都有乙個名為 user id 的字段,因此我們有辦法將這兩個表關聯起來。

按使用者 ID 關聯兩個表:

df_user_log = df_user_log.join(df_user_info.set_index('user_id'), on = 'user_id')

df_user_log

輸出:

從上面的輸出中可以看出,使用者表的年齡和性別被合併到訂單表中。 接下來,我們可以根據下單的使用者來分析使用者的性別和年齡。

df_user_log.loc[df_user_log["action_type"] == "order", ["age_range"]].age_range.value_counts()

輸出:

name: age_range, dtype: int64

通過以上結果可以看出,訂單的年齡段和使用者資訊的分析基本一致,25-34歲的人佔比為599%。

df_user_log.loc[df_user_log["action_type"] == "order", ["gender"]].gender.value_counts()

輸出:

name: gender, dtype: int64

從以上結果可以看出,下訂單較多的還是女性。 至此,我們基本可以得出結論:我們向 25-34 歲的女性使用者傳送促銷資訊。 至此,任務已經接近一半,我們已經確定了傳送簡訊的組。 但另一項任務是確定何時傳送。 讓我們繼續前進。

在這裡,我們將每個日期分組,看看哪個時間段的下訂單的人最多。 由於資料是最近 6 個月的資料,那麼我們將資料分為 6 組並檢視:

df_user_log.loc[df_user_log["action_type"] == "order", ["date"]].date.value_counts(bins = 6)

輸出:

name: date, dtype: int64

可以看出,10月11日至11月11日下單量最多。 分析完日期後,我們來看看哪個時間段的訂單更多。

timestamp 字段儲存每條記錄的排序時間,即從當天午夜開始累積的秒數。 它並不直觀,我們更希望能夠根據小時級資料對其進行分析。 因此,讓我們考慮根據時間戳列建立乙個新的時間列來表示小時。

df_user_log.loc["time_hours_view"] = df_user_log["timestamp"]/3600

df_user_log

輸出:

我們可以直接使用 Value Count 來統計新新增的 Time Hours View 字段,然後我們可以分配一天的小時級分布。 我們以兩小時為單位檢視分布情況,因此將其分為 12 組。

df_user_log.loc[df_user_log["action_type"] == "order", ["time_hours_view"]].time_hours_view.value_counts(bins = 12)

輸出:

name: time_hours_view, dtype: int64

從以上結果可以看出,晚上 8 點到 10 點是最有序的至此,我們已經完成了根據要求分析資料的任務。 基本確定簡訊傳送群的推廣是:對於25-34歲的女性使用者,傳送簡訊的最佳時間是10月下旬至11月中旬的晚上8點至10點

歡迎關注***伺服器端技術選型。

如果您有任何問題或其他需求,可以留言。

相關問題答案

    快樂學習Python,如何正確使用pandas處理時間型別資料?

    在日常資料分析中,資料通常按日期進行分析。例如,我們需要通過使用者的下單時間來分析使用者在不同時間段對產品的偏好 例如,使用訪問日誌的訪問時間來分析系統的訪問週期和負載,為不同時間段的資源分配提供依據。例如,通過使用者較短的刷牙時間分析使用者的行為特徵和工作時間和工作型別 可以看出,在資料分析中,基...

    快樂學習Python,資料分析方法獲取資料公共資料或爬蟲

    學習python資料分析的第一步是先獲取資料,為什麼資料採集是資料分析的第一步,很明顯 資料分析,必須有資料才能分析。作為個人,您如何獲得用於分析的資料集?獲取資料集的第一種方法是獲取業內有人編譯的資料集。目前,大資料行業持續火爆,資料本身已經成為乙個行業,其中自然包括資料集。這些由某人組合在一起的...

    Python 通過函式和常規類編寫元類

    Python 可以通過函式和常規類編寫元類。類物件是通過 type 在函式和常規類之間建立的。python 工廠函式定義了乙個外部函式,該函式生成並返回巢狀函式,因此呼叫工廠函式將獲得對巢狀函式的引用。有關詳細資訊,請參閱 Python 巢狀函式範圍 任何可呼叫物件都可以用作元類,例如函式,只要它接...

    通過抖音生成操作提高使用者留存率和轉化率

    立即諮詢定製解決方案 使用抖音提高使用者留存率和轉化率時,可以採取以下方法 .制定有效的內容策略 代理服務提供商可以幫助您為目標受眾制定內容策略。根據不同的使用者特點和興趣,定期發布有趣 有用 引人入勝的內容,以吸引使用者並增加他們的留存時間。.優化質量 在抖音上,質量對於使用者留存和轉化至關重要。...

    通過團體旅遊和學習各種知識來提高整體素質的研究活動

    研究活動是一種以學生為主導的學習方式,側重於讓學生主動發現問題 積極主動地解決問題。在這個過程中,學生不僅可以學習知識,還可以鍛鍊實踐能力 團隊協作能力 領導能力等素質。研究活動一般以團體旅行 集中住宿等形式進行,通過與其他學生一起探索和研究不同的文化 自然環境 歷史背景等,拓寬學生的視野和知識面。...