小而全的Pandas使用案例
寫過(guò)很多關(guān)于Pandas的文章,本文開(kāi)展了一個(gè)簡(jiǎn)單的綜合使用,主要分為:
如何自行模擬數(shù)據(jù)
多種數(shù)據(jù)處理方式
數(shù)據(jù)統(tǒng)計(jì)與可視化
用戶RFM模型
用戶復(fù)購(gòu)周期
構(gòu)建數(shù)據(jù)
本案例中用的數(shù)據(jù)是小編自行模擬的,主要包含兩個(gè)數(shù)據(jù):訂單數(shù)據(jù)和水果信息數(shù)據(jù),并且會(huì)將兩份數(shù)據(jù)合并
import?pandas?as?pd import?numpy?as?np import?random from?datetime?import?* import?timeimport?plotly.express?as?px import?plotly.graph_objects?as?go import?plotly?as?py#?繪制子圖 from?plotly.subplots?import?make_subplots1、時(shí)間字段
2、水果和用戶
3、生成訂單數(shù)據(jù)
order?=?pd.DataFrame({"time":time_range,??#?下單時(shí)間"fruit":fruit_list,??#?水果名稱"name":name_list,??#?顧客名#?購(gòu)買量"kilogram":np.random.choice(list(range(50,100)),?size=len(time_range),replace=True)? })order4、生成水果的信息數(shù)據(jù)
infortmation?=?pd.DataFrame({"fruit":fruits,"price":[3.8,?8.9,?12.8,?6.8,?15.8,?4.9,?5.8,?7],"region":["華南","華北","西北","華中","西北","華南","華北","華中"] })infortmation5、數(shù)據(jù)合并
將訂單信息和水果信息直接合并成一個(gè)完整的DataFrame,這個(gè)df就是接下來(lái)處理的數(shù)據(jù)
6、生成新的字段:訂單金額
到這里你可以學(xué)到:
如何生成時(shí)間相關(guān)的數(shù)據(jù)
如何從列表(可迭代對(duì)象)中生成隨機(jī)數(shù)據(jù)
Pandas的DataFrame自行創(chuàng)建,包含生成新字段
Pandas數(shù)據(jù)合并
分析維度1:時(shí)間
2019-2021年每月銷量走勢(shì)
1、先把年份和月份提取出來(lái):
df["year"]?=?df["time"].dt.year df["month"]?=?df["time"].dt.month #?同時(shí)提取年份和月份 df["year_month"]?=?df["time"].dt.strftime('%Y%m')df2、查看字段類型:
3、分年月統(tǒng)計(jì)并展示:
#?分年月統(tǒng)計(jì)銷量 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)???#?傾斜角度f(wàn)ig.show()2019-2021銷售額走勢(shì)
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)???#?傾斜角度f(wàn)ig.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?gofig?=?make_subplots(rows=1,?cols=3,subplot_titles=["2019年","2020年","2021年"],specs=[[{"type":?"domain"},???#?通過(guò)type來(lái)指定類型{"type":?"domain"},{"type":?"domain"}]] )??years?=?df4["year"].unique().tolist()for?i,?year?in?enumerate(years):name?=?df4[df4["year"]?==?year].fruitvalue?=?df4[df4["year"]?==?year].kilogramfig.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、tangentialhole=.3,hoverinfo="label+percent+name" )fig.show()各水果年度銷售金額對(duì)比
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:用戶
用戶訂單量、金額對(duì)比
df8?=?df.groupby(["name"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"order_number"})df8.style.background_gradient(cmap="Spectral_r")用戶水果喜好
根據(jù)每個(gè)用戶對(duì)每種水果的訂單量和訂單金額來(lái)分析:
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模型是衡量客戶價(jià)值和創(chuàng)利能力的重要工具和手段。
通過(guò)這個(gè)模型能夠反映一個(gè)用戶的交期交易行為、交易的總體頻率和總交易金額3項(xiàng)指標(biāo),通過(guò)3個(gè)指標(biāo)來(lái)描述該客戶的價(jià)值狀況;同時(shí)依據(jù)這三項(xiàng)指標(biāo)將客戶劃分為8類客戶價(jià)值:
Recency(R)是客戶最近一次購(gòu)買日期距離現(xiàn)在的天數(shù),這個(gè)指標(biāo)與分析的時(shí)間點(diǎn)有關(guān),因此是變動(dòng)的。理論上客戶越是在近期發(fā)生購(gòu)買行為,就越有可能復(fù)購(gòu)
Frequency(F)指的是客戶發(fā)生購(gòu)買行為的次數(shù)--最常購(gòu)買的消費(fèi)者,忠誠(chéng)度也就較高。增加顧客購(gòu)買的次數(shù)意味著能占有更多的時(shí)長(zhǎng)份額。
Monetary value(M)是客戶購(gòu)買花費(fèi)的總金額。
下面通過(guò)Pandas的多個(gè)方法來(lái)分別求解這個(gè)3個(gè)指標(biāo),首先是F和M:每位客戶的訂單次數(shù)和總金額
如何求解R指標(biāo)呢?
1、先求解每個(gè)訂單和當(dāng)前時(shí)間的差值
2、根據(jù)每個(gè)用戶的這個(gè)差值R來(lái)進(jìn)行升序排列,排在第一位的那條數(shù)據(jù)就是他最近購(gòu)買記錄:以xiaoming用戶為例,最近一次是12月15號(hào),和當(dāng)前時(shí)間的差值是25天
3、根據(jù)用戶去重,保留第一條數(shù)據(jù),這樣便得到每個(gè)用戶的R指標(biāo):
4、數(shù)據(jù)合并得到3個(gè)指標(biāo):
當(dāng)數(shù)據(jù)量足夠大,用戶足夠多的時(shí)候,就可以只用RFM模型來(lái)將用戶分成8個(gè)類型
用戶復(fù)購(gòu)周期分析
復(fù)購(gòu)周期是用戶每?jī)纱钨?gòu)買之間的時(shí)間間隔:以xiaoming用戶為例,前2次的復(fù)購(gòu)周期分別是4天和22天
下面是求解每個(gè)用戶復(fù)購(gòu)周期的過(guò)程:
1、每個(gè)用戶的購(gòu)買時(shí)間升序
2、將時(shí)間移動(dòng)一個(gè)單位:
3、合并后的差值:
出現(xiàn)空值是每個(gè)用戶的第一條記錄之前是沒(méi)有數(shù)據(jù),后面直接刪除了空值部分
直接取出天數(shù)的數(shù)值部分:
5、復(fù)購(gòu)周期對(duì)比
px.bar(df16,x="day",y="name",orientation="h",color="day",color_continuous_scale="spectral"???#?purples)上圖中矩形越窄表示間隔越小;每個(gè)用戶整個(gè)復(fù)購(gòu)周期由整個(gè)矩形長(zhǎng)度決定。查看每個(gè)用戶的整體復(fù)購(gòu)周期之和與平均復(fù)購(gòu)周期:
得到一個(gè)結(jié)論:Michk和Mike兩個(gè)用戶整體的復(fù)購(gòu)周期是比較長(zhǎng)的,長(zhǎng)期來(lái)看是忠誠(chéng)的用戶;而且從平均復(fù)購(gòu)周期來(lái)看,相對(duì)較低,說(shuō)明在短時(shí)間內(nèi)復(fù)購(gòu)活躍。
從下面的小提琴中同樣可以觀察到,Michk和Mike的復(fù)購(gòu)周期分布最為集中。
點(diǎn)擊下方卡片進(jìn)行關(guān)注,獲取更多內(nèi)容
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看
總結(jié)
以上是生活随笔為你收集整理的小而全的Pandas使用案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【精华总结】全文4000字、20个案例详
- 下一篇: 安卓第一!天玑9200+跑分超136万: