您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么用Pandas構建數據”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么用Pandas構建數據”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
本案例中用的數據是小編自行模擬的,主要包含兩個數據:訂單數據和水果信息數據,并且會將兩份數據合并
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自行創建,包含生成新字段
Pandas數據合并
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()
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()
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()
折線圖展示的變化:
不同地區年度平均銷售額
df7 = df.groupby(["year","region"])["amount"].mean().reset_index()
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模型是衡量客戶價值和創利能力的重要工具和手段。
通過這個模型能夠反映一個用戶的交期交易行為、交易的總體頻率和總交易金額3項指標,通過3個指標來描述該客戶的價值狀況;同時依據這三項指標將客戶劃分為8類客戶價值:
Recency(R)是客戶最近一次購買日期距離現在的天數,這個指標與分析的時間點有關,因此是變動的。理論上客戶越是在近期發生購買行為,就越有可能復購
Frequency(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的復購周期分布最為集中。
讀到這里,這篇“怎么用Pandas構建數據”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。