摩拜单车探索性分析
關(guān)于摩拜單車的探索性分析
數(shù)據(jù)簡(jiǎn)介
- Github
隨著共享經(jīng)濟(jì)的發(fā)展,共享單車應(yīng)運(yùn)而生,“行”作為四大民生需求(衣食住行)的一部分,探索其在新形態(tài)經(jīng)濟(jì)下的發(fā)展態(tài)勢(shì)以及存在的問(wèn)題尤為重要。
本項(xiàng)目選用摩拜單車的數(shù)據(jù),共包含102361條摩拜單車訂單記錄,包含的變量有:
| orderid | 訂單編號(hào) |
| bikeid | 車輛編號(hào) |
| userid | 用戶ID |
| start_time | 騎行開(kāi)始時(shí)間 |
| end_time | 騎行結(jié)束時(shí)間 |
| start_location_x | 起點(diǎn)維度位置 |
| start_location_y | 起點(diǎn)經(jīng)度位置 |
| end_location_x | 終點(diǎn)維度位置 |
| start_location_x | 起點(diǎn)維度位置 |
| start_location_y | 起點(diǎn)經(jīng)度位置 |
| end_location_x | 終點(diǎn)維度位置 |
| end_location_y | 終點(diǎn)經(jīng)度位置 |
| track | 軌跡點(diǎn) |
數(shù)據(jù)評(píng)估與清理
# 上載數(shù)據(jù) mobike_df = pd.read_csv(os.path.join("Mobike Data",'mobike_shanghai_sample_updated.csv')) # 觀察并評(píng)估數(shù)據(jù) mobike_df.head(5)| 0 | 78387 | 158357 | 10080 | 2016-08-20 06:57 | 121.348 | 31.389 | 2016-08-20 07:04 | 121.357 | 31.388 | 121.347,31.392#121.348,31.389#121.349,31.390#1... |
| 1 | 891333 | 92776 | 6605 | 2016-08-29 19:09 | 121.508 | 31.279 | 2016-08-29 19:31 | 121.489 | 31.271 | 121.489,31.270#121.489,31.271#121.490,31.270#1... |
| 2 | 1106623 | 152045 | 8876 | 2016-08-13 16:17 | 121.383 | 31.254 | 2016-08-13 16:36 | 121.405 | 31.248 | 121.381,31.251#121.382,31.251#121.382,31.252#1... |
| 3 | 1389484 | 196259 | 10648 | 2016-08-23 21:34 | 121.484 | 31.320 | 2016-08-23 21:43 | 121.471 | 31.325 | 121.471,31.325#121.472,31.325#121.473,31.324#1... |
| 4 | 188537 | 78208 | 11735 | 2016-08-16 07:32 | 121.407 | 31.292 | 2016-08-16 07:41 | 121.418 | 31.288 | 121.407,31.291#121.407,31.292#121.408,31.291#1... |
| count | 102361.000000 | 102361.000000 | 102361.000000 | 102361.000000 | 102361.000000 |
| mean | 121.454144 | 31.251740 | 121.453736 | 31.252029 | 17.195162 |
| std | 0.060862 | 0.057358 | 0.061577 | 0.057740 | 34.049919 |
| min | 121.173000 | 30.842000 | 120.486000 | 30.841000 | 1.000000 |
| 25% | 121.415000 | 31.212000 | 121.414000 | 31.212000 | 7.000000 |
| 50% | 121.456000 | 31.260000 | 121.456000 | 31.261000 | 12.000000 |
| 75% | 121.497000 | 31.294000 | 121.497000 | 31.294000 | 20.000000 |
| max | 121.970000 | 31.450000 | 121.971000 | 31.477000 | 4725.000000 |
riding_time存在異常值,最大值高達(dá)4725分鐘,數(shù)據(jù)差異之大不合邏輯
# 探索騎行時(shí)長(zhǎng)的數(shù)據(jù)分布 plt.figure(figsize=(8,6)) colorful = sns.color_palette('Paired') plt.hist(data=mobike_df,x='riding_time',color=colorful[3]);騎行時(shí)長(zhǎng)嚴(yán)重右偏,存在少量較大的異常值,需要進(jìn)行對(duì)數(shù)變換增加數(shù)據(jù)的粒度
# 騎行時(shí)長(zhǎng)進(jìn)行對(duì)數(shù)變換 plt.figure(figsize=(8,6)) colorful = sns.color_palette('Paired') bin_edge = 10**np.arange(0,np.log10(mobike_df.riding_time.max())+0.05,0.05) plt.hist(data=mobike_df,x='riding_time',bins=bin_edge,color=colorful[3]) plt.xscale('log') plt.xticks(ticks=[1,3,10,30,100,300,500,1000,2000,4000],labels=[1,3,10,30,100,300,500,1000,2000,4000]);單次騎行時(shí)長(zhǎng)主要集中在5-30分鐘,整體分布形態(tài)嚴(yán)重右偏,數(shù)據(jù)集存在異常值,200分鐘以內(nèi)的騎行時(shí)長(zhǎng)屬于正常的有效時(shí)長(zhǎng);異常值的存在可能是由于數(shù)據(jù)錄入錯(cuò)誤,或者用戶騎行結(jié)束后忘記關(guān)鎖等原因?qū)е掠涗浀臅r(shí)長(zhǎng)過(guò)長(zhǎng)。
# 篩選有效的騎行時(shí)長(zhǎng)的記錄 mobike_df = mobike_df[mobike_df.riding_time <= 200] mobike_df.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 102230 entries, 0 to 102360 Data columns (total 11 columns): orderid 102230 non-null object bikeid 102230 non-null object userid 102230 non-null object start_time 102230 non-null datetime64[ns] start_location_x 102230 non-null float64 start_location_y 102230 non-null float64 end_time 102230 non-null datetime64[ns] end_location_x 102230 non-null float64 end_location_y 102230 non-null float64 track 102230 non-null object riding_time 102230 non-null float64 dtypes: datetime64[ns](2), float64(5), object(4) memory usage: 7.8+ MB mobike_df.head(2)| 0 | 78387 | 158357 | 10080 | 2016-08-20 06:57:00 | 121.348 | 31.389 | 2016-08-20 07:04:00 | 121.357 | 31.388 | [(121.347, 31.392), (121.348, 31.389), (121.34... | 7.0 |
| 1 | 891333 | 92776 | 6605 | 2016-08-29 19:09:00 | 121.508 | 31.279 | 2016-08-29 19:31:00 | 121.489 | 31.271 | [(121.489, 31.27), (121.489, 31.271), (121.49,... | 22.0 |
數(shù)據(jù)結(jié)構(gòu)與概況
通過(guò)以上數(shù)據(jù)的評(píng)估與清理,得出:
- 該數(shù)據(jù)集的大部分變量的數(shù)據(jù)類型為數(shù)值型,如地理位置(起止點(diǎn)),騎行軌跡,騎行時(shí)長(zhǎng),騎行起止時(shí)間,其次訂單編號(hào)、用戶編號(hào)以及車輛編號(hào)為字符型;
- 該數(shù)據(jù)集因?yàn)轵T行時(shí)長(zhǎng)中存在少量的異常值,清理后的數(shù)據(jù)集在源數(shù)據(jù)集的基礎(chǔ)上移除部分,約占源數(shù)據(jù)量的0.02%,對(duì)分析結(jié)果基本無(wú)影響。
數(shù)據(jù)探索概述
本次單車的數(shù)據(jù)探索中,主要想集中于對(duì)于單車在上海各個(gè)城區(qū)內(nèi)使用量的地理位置分布、用戶偏好以及用戶價(jià)值這三方面進(jìn)行探索,需要探索的主要度量為訂單數(shù)量、騎行時(shí)長(zhǎng)、地理位置,實(shí)現(xiàn)的方法如下:
采用5W和RFM的分析方法進(jìn)行探索性分析,并以可視化方式對(duì)結(jié)果進(jìn)行呈現(xiàn):
-
5W (可以對(duì)用戶的行為以及地理位置的分布進(jìn)行分析)
-
WHAT
- 車輛的重復(fù)使用率如何?
-
WHEN
- 隨著時(shí)間的推移,訂單量/騎行時(shí)長(zhǎng)是如何發(fā)展的?
- 一周內(nèi),不同日期的訂單數(shù)/騎行時(shí)長(zhǎng)是如何分布的?
- 一天內(nèi)是否有明顯的騎行高低峰期,訂單量和騎行時(shí)長(zhǎng)是如何變化的,是否有差異?
-
WHERE
- 哪些地點(diǎn)是車輛使用的高頻地段?
- 哪些地點(diǎn)是騎車軌跡經(jīng)常經(jīng)過(guò)的?
- 哪些路線是騎車較熱的路線?
- 哪些地點(diǎn)的車輛重復(fù)使用率較高?
-
Who
- 用戶的重復(fù)使用率
-
-
RFM(對(duì)用戶價(jià)值進(jìn)行分析)
- R:最近一次使用單車的日期
- F:騎行的總體頻率
- M:騎行的總時(shí)長(zhǎng)
單變量分析
# 計(jì)算車輛的重復(fù)使用率 bike_reuse_ratio = sum(mobike_df2.bikeid.value_counts() >= 2)/mobike_df2.bikeid.value_counts().size bike_reuse_ratio 0.21356777558357384 # 計(jì)算用戶的重復(fù)使用率 user_reuse_ratio = sum(mobike_df2.userid.value_counts() >= 2)/mobike_df2.userid.value_counts().size user_reuse_ratio 0.9292229329542763車輛的重復(fù)使用率比較低,而用戶的重復(fù)使用率很高,高達(dá)92.9%
# 探索篩選后的騎行時(shí)長(zhǎng)的數(shù)據(jù)分布,先以正常的scale探索 plt.figure(figsize=(8,6)) colorful = sns.color_palette('Paired') plt.hist(data=mobike_df2,x='riding_time',color=colorful[2]) plt.xlabel('Riding_Time(m)') plt.ylabel('Frequency'); # 數(shù)據(jù)嚴(yán)重右偏,對(duì)riding_time軸進(jìn)行對(duì)數(shù)變換 plt.figure(figsize=(8,6)) bin_edge = 10**np.arange(0,np.log10(mobike_df2.riding_time.max())+0.01,0.01) plt.hist(data=mobike_df2,x='riding_time',bins=bin_edge,color=colorful[2]) plt.xscale('log') plt.xticks(ticks=[1,3,5,10,30,50,70,100,150,200],labels=[1,3,5,10,30,50,70,100,150,200]) plt.xlabel('Riding_Time(m)') plt.ylabel('Frequency');
大部分用戶騎行時(shí)長(zhǎng)集中在5-10分鐘
可以看出,在日期時(shí)間的分布上,訂單數(shù)量呈波段式增長(zhǎng)趨勢(shì),圖中共有31個(gè)波段,所以每一個(gè)波段對(duì)應(yīng)一天,而一天中也都基本呈現(xiàn)著雙峰結(jié)構(gòu),推斷對(duì)應(yīng)著早晚高峰,而日期與日期之間則是夜間凌晨。
# 探索起點(diǎn)經(jīng)度和維度的數(shù)據(jù)分布 fig,axes = plt.subplots(1,2,figsize=(16,6)) bin_edge1 = np.arange(mobike_df2.start_location_x.min(),mobike_df2.start_location_x.max()+0.005,0.005) sns.distplot(mobike_df2.start_location_x,bins=bin_edge1,kde=False,hist_kws={'alpha':1,'color':colorful[2]},ax=axes[0]) bin_edge2 = np.arange(mobike_df2.start_location_y.min(),mobike_df2.start_location_y.max()+0.005,0.005) sns.distplot(mobike_df2.start_location_y,bins=bin_edge2,kde=False,hist_kws={'alpha':1,'color':colorful[2]},ax=axes[1]); # 探索起點(diǎn)經(jīng)度和維度的數(shù)據(jù)分布 fig,axes = plt.subplots(1,2,figsize=(16,6)) bin_edge3 = np.arange(mobike_df2.end_location_x.min(),mobike_df2.end_location_x.max()+0.005,0.005) sns.distplot(mobike_df2.end_location_x,bins=bin_edge3,kde=False,hist_kws={'alpha':1,'color':colorful[2]},ax=axes[0]) bin_edge4 = np.arange(mobike_df2.end_location_y.min(),mobike_df2.end_location_y.max()+0.005,0.005) sns.distplot(mobike_df2.end_location_y,bins=bin_edge2,kde=False,hist_kws={'alpha':1,'color':colorful[2]},ax=axes[1]);從終點(diǎn)的地理位置分布可以看出,經(jīng)度主要集中于121.4-121.5,之間,整體左偏,維度主要集中于31.2-31.3.之間,整體左偏,存在少量駛向西南方向的路線。
整體上開(kāi)看,起點(diǎn)和終點(diǎn)的聚集區(qū)域基本一致
雙變量分析
# 為了更好地查看變量在日期上的變化,將日期時(shí)間按照day,hour,day_name進(jìn)行分組,以便更好地多角度分析和論證 mobike_df2['day'] = mobike_df2.start_time.dt.day mobike_df2['hour'] = mobike_df2.start_time.dt.hour mobike_df2['day_name'] = mobike_df2.start_time.dt.day_name() # 探索訂單總量隨著日期的推移的變化趨勢(shì) plt.figure(figsize=(15,6)) day_count = mobike_df2.start_time.dt.day.value_counts().sort_index() plt.plot(day_count.index,day_count.values,marker='o',color=colorful[3]) plt.xticks(ticks=range(1,32,1),labels=range(1,32,1)) plt.xlabel('Day',fontsize=10) plt.ylabel('Order_Count',fontsize=10);隨著日期的增長(zhǎng),訂單量呈增長(zhǎng)趨勢(shì),且增速不斷加快,此觀察結(jié)果再次印證了訂單數(shù)量隨著日期時(shí)間的推移,整體呈上升趨勢(shì)
cat_dtype = pd.api.types.CategoricalDtype(categories=['Monday', 'Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],ordered=True) mobike_df2.day_name = mobike_df2.day_name.astype(cat_dtype) # 探索訂單總量和訂單平均是否對(duì)所屬周日期存在偏好 fig,axes = plt.subplots(1,2,figsize=(12,6)) base_color = sns.color_palette()[0] sns.countplot(data=mobike_df2,x='day_name',color=base_color,ax=axes[0]) axes[0].set_ylabel('Total_order_count') group_day = mobike_df2.groupby(['day','day_name']).size().reset_index(name='order_count',level=1) sns.barplot(data=group_day,x='day_name',y='order_count',color=base_color,ax=axes[1]) axes[1].set_ylabel('Avg_order_count') fig.autofmt_xdate(); group_day.groupby('day_name').size().sort_values(ascending=False) day_name Wednesday 5 Tuesday 5 Monday 5 Sunday 4 Saturday 4 Friday 4 Thursday 4 dtype: int64- 從周日期的數(shù)據(jù)分布上來(lái)看,Wednesday、Monday和Tuesday在總訂單量上較大;就平均訂單量,周日期的數(shù)據(jù)差異不大,分布相對(duì)均勻;
- 產(chǎn)生上述差異的原因是:8月的Wednesday、Monday和Tuesday比其他日期要多1天,所以在周日期的分布上,數(shù)據(jù)差異不大。
- 訂單量在時(shí)間上的分布上呈現(xiàn)較大差異,由上圖可知,存在較明顯早晚高峰時(shí)段:7-9點(diǎn)騎行量較大,8點(diǎn)左右達(dá)到上午高峰值,17-20點(diǎn)騎行量較大,18點(diǎn)左右達(dá)到高峰,晚高峰的訂單數(shù)量大于早高峰的訂單數(shù)量,而夜間和凌晨(0-5)期間,訂單數(shù)量達(dá)到低峰;
- 所以運(yùn)營(yíng)商應(yīng)該在發(fā)生騎行次數(shù)較少的時(shí)段,如凌晨23-5點(diǎn)或者9-15點(diǎn)進(jìn)行車輛的投放或維修,以備高峰時(shí)段有足夠的質(zhì)量良好的車輛供用戶使用。
騎行總時(shí)長(zhǎng)在日期上的分布與訂單總量在日期上的分布基本一致,訂單總量隨著時(shí)間的推移不斷增長(zhǎng)的同時(shí),騎行總時(shí)長(zhǎng)也隨之不斷增長(zhǎng),且增速不斷加快。
# 因?yàn)轵T行總時(shí)長(zhǎng)受訂單量的影響,為了進(jìn)一步探索,需要分析騎行平均時(shí)長(zhǎng)在8月每一天的分布 plt.figure(figsize=(15,6)) riding_time_avg = mobike_df2.groupby('day')['riding_time'].mean() riding_time_sem = mobike_df2.groupby('day')['riding_time'].sem() plt.errorbar(x=riding_time_avg.index,y=riding_time_avg,yerr=riding_time_sem); plt.xticks(ticks=range(1,32,1),labels=range(1,32,1)) plt.ylim(bottom=0) plt.xlabel('Day',fontsize=10) plt.ylabel('avg of riding time(min)'.title(),fontsize=10);從平均騎行時(shí)長(zhǎng)在日期上的數(shù)據(jù)分布上來(lái)看,周六和周日(工作日)比其他日期的平均時(shí)長(zhǎng)略長(zhǎng)
# 探索騎行總時(shí)長(zhǎng)在一天內(nèi)的每個(gè)時(shí)間段內(nèi)的數(shù)據(jù) plt.figure(figsize=(15,6)) hour_riding_time = mobike_df2.groupby('hour')['riding_time'].agg('sum') plt.plot(hour_riding_time.index,hour_riding_time.values,marker='o') plt.xticks(ticks=range(0,24,1),labels=range(0,24,1)) plt.xlabel('Hour',fontsize=10) plt.ylabel('total riding time'.title(),fontsize=10);- 從時(shí)間段與騎行總時(shí)長(zhǎng)的數(shù)據(jù)分布上來(lái)看,分布形態(tài)基本與訂單量在時(shí)間段上的分布一致,呈現(xiàn)顯著的早晚高峰期;
- 但是騎行時(shí)長(zhǎng)在早高峰和晚高峰上的差異比訂單量在兩個(gè)時(shí)間段上的差異更大
由上圖可得:
- 上圖可以解釋早晚高峰時(shí)段在訂單量差異不大的情況下,騎行總時(shí)長(zhǎng)卻存在很大差異的現(xiàn)象:晚上的平均騎行時(shí)長(zhǎng)大于早上的平均騎行時(shí)長(zhǎng);
- 上圖在0-5點(diǎn)期間,騎行時(shí)長(zhǎng)相對(duì)于白天大部分時(shí)間段比較長(zhǎng),但是該期間的個(gè)體之間數(shù)據(jù)差異比較大,可能存在個(gè)別較大的異常值;
- 此現(xiàn)象說(shuō)明用戶在晚上,如下班后有更充裕的時(shí)間或者愿意花費(fèi)更多的時(shí)間來(lái)騎車,而早上的時(shí)間相對(duì)比較緊張,即使是同等距離,也會(huì)比晚上花費(fèi)的時(shí)間更少。
有上圖可知:
- 周六和周天有更充裕的時(shí)間來(lái)騎車,對(duì)比其他天,周六和周天在各個(gè)時(shí)間段上的平均騎行時(shí)長(zhǎng)均有所增加;
- 在時(shí)間段的分布上,與以上的時(shí)間段與騎行時(shí)長(zhǎng)的分布基本一致,晚上和夜間的騎行時(shí)長(zhǎng)大于白天的騎行時(shí)長(zhǎng),而周六和周日在該特征上體現(xiàn)地更加顯著。
基于地理位置的探索
# 經(jīng)緯度結(jié)合,對(duì)完整的坐標(biāo)點(diǎn)進(jìn)行探索 plt.figure(figsize=(8,5)) bins_x = np.arange(121.17, 121.97+0.1, 0.01) bins_y = np.arange(30.84, 31.45+0.1,0.01) plt.hist2d(data=mobike_df2,x='start_location_x',y='start_location_y',bins = [bins_x, bins_y],cmap = 'viridis_r',cmin = 0.5); plt.xlim((121.2,121.7)) plt.ylim((31.0,31.4)) plt.xlabel('start_point_lat') plt.ylabel('start_point_lgt') plt.colorbar(); plt.figure(figsize=(8,5)) bins_x = np.arange(121.17, 121.97+0.1, 0.01) bins_y = np.arange(30.84, 31.45+0.1,0.01) plt.hist2d(data=mobike_df2,x='end_location_x',y='end_location_y',bins = [bins_x, bins_y],cmap = 'viridis_r', cmin = 0.5); plt.xlim((121.2,121.7)) plt.ylim((31.0,31.4)) plt.xlabel('end_point_lat') plt.ylabel('end_point_lgt') plt.colorbar();起點(diǎn)和終點(diǎn)集中區(qū)域基本一致,主要集中((121.4-121.55),(31.2-31.35))區(qū)域內(nèi)
# 將地理位置數(shù)據(jù)標(biāo)注至地圖上 st_locs = mobike_df2[['start_location_y','start_location_x']].values.tolist() # 所有起點(diǎn)標(biāo)注到地圖上,以熱圖形式顯示 m = folium.Map(location=[31.22,121.48],control_scale=True, zoom_start=10) m.add_child(plugins.HeatMap(st_locs,radius=7,gradient={.4: 'blue', .65: 'lime', 1: 'yellow'})) m.save('st_loc_heatmap.html') HTML('<iframe src=st_loc_heatmap.html width=700 height=450></iframe>')通過(guò)調(diào)用百度地圖API,得出地理信息更為詳細(xì)的熱力圖,詳情請(qǐng)查看Mobike Data/Mobike_location_heatmap.html
由上圖和html可知:
- 從覆蓋區(qū)域上來(lái)看,騎車起止點(diǎn),或者說(shuō)車輛使用主要集中在虹口區(qū)、黃浦區(qū)、靜安區(qū),而離上海市中心較遠(yuǎn)的普陀區(qū)、長(zhǎng)寧區(qū)、徐匯區(qū)和浦東新區(qū)車輛使用量相對(duì)較低,
- 城市特征上來(lái)看,車輛使用量較大的主要位于大學(xué)城區(qū)、體育館、大型商圈、密集住宅區(qū)及主要交通干道交匯處(立交橋,交通樞紐)地段等:
- 如:以同濟(jì)和復(fù)旦大學(xué)為代表的大學(xué)城區(qū),江灣體育場(chǎng),內(nèi)環(huán)共和立交橋,中環(huán)虹橋樞紐等
- 黃浦區(qū)各個(gè)以中國(guó)城市命名的主要街道,人民廣場(chǎng)
- 在地鐵沿線上,如1號(hào)線,3號(hào)線,11號(hào)線和13號(hào)線是車輛高頻使用沿線
以下是使用Tableau繪制的關(guān)于單車騎行的軌跡圖
Tableau Public-Mobike Trace Chart
通過(guò)軌跡圖可以看出的是:
- 騎行主要是以短距離為主,長(zhǎng)距離的軌跡點(diǎn)多的比較少
- 騎行的主要活動(dòng)區(qū)域正如上述熱力圖所示,主要集中在中心城區(qū),如虹口區(qū)、黃埔區(qū)、楊浦區(qū)
- 黃浦沿江區(qū)域的騎行軌跡較多
基于用戶的探索
使用RFM模型探索和衡量各個(gè)用戶的客戶價(jià)值和創(chuàng)利能力
mobike_df2.head(2)| 0 | 78387 | 158357 | 10080 | 2016-08-20 06:57:00 | 121.348 | 31.389 | 2016-08-20 07:04:00 | 121.357 | 31.388 | [(121.347, 31.392), (121.349, 31.39), (121.35,... | 7.0 | (121.348, 31.389) | (121.357, 31.388) | [(121.348, 31.389), (121.347, 31.392), (121.34... | 20 | 6 | Saturday |
| 1 | 891333 | 92776 | 6605 | 2016-08-29 19:09:00 | 121.508 | 31.279 | 2016-08-29 19:31:00 | 121.489 | 31.271 | [(121.489, 31.27), (121.49, 31.27), (121.49, 3... | 22.0 | (121.508, 31.279) | (121.489, 31.271) | [(121.508, 31.279), (121.507, 31.279), (121.50... | 29 | 19 | Monday |
從上圖可知:
- 因?yàn)樵摂?shù)據(jù)集僅為8月這一個(gè)月的單車訂單數(shù)據(jù),從上方recent_day_diff圖可知,發(fā)生在最近的騎行占比較大,而且從上述訂單量隨著日期增長(zhǎng)而不斷增長(zhǎng)的數(shù)據(jù)可知,隨著摩拜單車的不斷推廣,新用戶的數(shù)量在不斷增長(zhǎng),且增速越來(lái)越大。
- 單個(gè)用戶在8月的累計(jì)騎行時(shí)長(zhǎng)集中在50-100分鐘之間,單個(gè)用戶在8月的累計(jì)騎行次數(shù)多集中在2-8次,少數(shù)用戶有高達(dá)20次以上的使用
根據(jù)上述三類特征數(shù)據(jù)的數(shù)據(jù)分布圖,具體分箱出各個(gè)特征下的不同數(shù)值區(qū)間的對(duì)應(yīng)分值(滿分均為5分),如下所示:
| Recency | 0-5 | 5 |
| Recency | 6-11 | 4 |
| Recency | 12-17 | 3 |
| Recency | 18-23 | 2 |
| Recency | 24-30 | 1 |
| Frequency | >=15 | 5 |
| Frequency | 12-14 | 4 |
| Frequency | 10-11 | 3 |
| Frequency | 6-9 | 2 |
| Frequency | 0-5 | 1 |
| Monetary(riding time total) | >=300 | 5 |
| Monetary(riding time total) | 200-299 | 4 |
| Monetary(riding time total) | 100-199 | 3 |
| Monetary(riding time total) | 50-99 | 2 |
| Monetary(riding time total) | 0-49 | 1 |
將數(shù)據(jù)集的三項(xiàng)數(shù)據(jù)與三項(xiàng)平均值作對(duì)比,將客戶價(jià)值按照下圖所示劃分
def get_custermer_value(r,f,m):if r > r_mean and f > f_mean and m > m_mean:user_tag = '重要價(jià)值客戶'elif r < r_mean and f > f_mean and m > m_mean:user_tag = '重要喚回客戶'elif r > r_mean and f < f_mean and m > m_mean:user_tag = '重要深耕客戶'elif r < r_mean and f < f_mean and m > m_mean:user_tag = '重要挽留客戶'elif r > r_mean and f > f_mean and m < m_mean:user_tag = '潛力客戶'elif r > r_mean and f < f_mean and m < m_mean:user_tag = '新客戶'elif r < r_mean and f > f_mean and m < m_mean:user_tag = '一般維持客戶'elif r < r_mean and f < f_mean and m < m_mean:user_tag = '流失客戶'return user_tag user_rfm['user_value'] = user_rfm[['r_value','f_value','m_value']].apply(lambda x:get_custermer_value(x.r_value,x.f_value,x.m_value), axis = 1) # 支持中文 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False # 用來(lái)正常顯示負(fù)號(hào) # 統(tǒng)計(jì)各類客戶的占比 value_counts = user_rfm.user_value.value_counts() fig,ax = plt.subplots(figsize=(8,8)) sns.barplot(x=value_counts.index,y=value_counts.values,color=colorful[2]) plt.xticks(rotation=30);- 可以看出占比較大的分別是:重要價(jià)值客戶、新客戶,其中重要價(jià)值客戶的占比最大,新客戶占比略低一點(diǎn),僅次于重要價(jià)值客戶占比;
- 流失客戶也存在一定的占比,公司需要對(duì)于流失率上進(jìn)行進(jìn)一步的分析,如用戶體驗(yàn),產(chǎn)品質(zhì)量,競(jìng)爭(zhēng)者數(shù)量,或者公共關(guān)系等原因;
結(jié)論
通過(guò)5W1H的分析方法與日期時(shí)間維度的結(jié)合,得出以下結(jié)論:
- 隨著日期的推移,訂單總量和騎行總時(shí)長(zhǎng)呈快速增長(zhǎng)趨勢(shì);
- 在一天內(nèi)的時(shí)間變化中,訂單總量呈現(xiàn)明顯的早晚高峰時(shí)段:7-9點(diǎn)騎行量較大,8點(diǎn)左右達(dá)到上午高峰值,17-20點(diǎn)騎行量較大,18點(diǎn)達(dá)到一天的高峰值,所以運(yùn)營(yíng)商應(yīng)該在非高峰時(shí)段,如凌晨23-5點(diǎn)或者10-15點(diǎn)進(jìn)行車輛的投放或維修,以備高峰時(shí)段有足夠的質(zhì)量良好的車輛供用戶使用;
- 騎行的總時(shí)長(zhǎng)因?yàn)橛唵慰偭康挠绊?#xff0c;數(shù)據(jù)呈現(xiàn)與訂單總量在時(shí)間維度的分布上基本一致,但從騎行的平均時(shí)長(zhǎng)上來(lái)看,晚上(18點(diǎn)以后)用戶的騎行時(shí)長(zhǎng)大于白天,大致可以推斷用戶有更充裕的時(shí)間或者愿意花費(fèi)更多的時(shí)間在晚上(如下班后)騎車,而上午的時(shí)間相對(duì)比較緊張;
- 從工作日和非工作日上來(lái)分析,周六周日的平均騎行時(shí)長(zhǎng)大于工作日的平均騎行時(shí)長(zhǎng);
- 從行政區(qū)劃上來(lái)看,車輛使用主要集中在虹口區(qū)、黃浦區(qū)、靜安區(qū),而普陀區(qū)、長(zhǎng)寧區(qū)、徐匯區(qū)和浦東新區(qū)車輛使用量相對(duì)較低;
- 從城市特征上來(lái)看,車輛使用主要集中在大學(xué)城區(qū)、體育館、大型商圈、密集住宅區(qū)及主要交通干道交匯處(立交橋,交通樞紐)等地段;
- 以同濟(jì)和復(fù)旦大學(xué)為代表的大學(xué)城區(qū),江灣體育場(chǎng),內(nèi)環(huán)共和立交橋,中環(huán)虹橋樞紐等
- 黃浦區(qū)各個(gè)以中國(guó)城市命名的主要街道,人民廣場(chǎng)
- 從地鐵沿線上來(lái)看:1號(hào)線,3號(hào)線,11號(hào)線和13號(hào)線是車輛高頻使用沿線;
- 從騎行軌跡上開(kāi)看:
- 騎行主要是以短距離為主,長(zhǎng)距離的軌跡點(diǎn)多的比較少;
- 騎行的主要活動(dòng)區(qū)域正如上述熱力圖所示,主要集中在中心城區(qū),如虹口區(qū)、黃埔區(qū)、楊浦區(qū);
- 黃浦沿江區(qū)域的騎行軌跡較多;
通過(guò)RFM模型對(duì)用戶價(jià)值進(jìn)行了探索分析,得出以下結(jié)論:
- 隨著摩拜單車在市場(chǎng)的不斷推廣,新用戶的數(shù)量呈現(xiàn)快速增長(zhǎng)趨勢(shì);
- 大部分用戶騎行時(shí)長(zhǎng)在5-10分鐘,單個(gè)用戶在8月的累計(jì)騎行次數(shù)集中在3-7次,少數(shù)用戶有高達(dá)20次以上的使用量;
- 重要價(jià)值客戶、新客戶、流失客戶和潛力客戶的占比較大,其中重要價(jià)值客戶的占比最大,高達(dá)31.7%,新用戶的占比僅次于重要價(jià)值客戶的占比,也占據(jù)28.1%的用戶,這一分析結(jié)果也再次論證,摩拜單車目前正處于上升期或者說(shuō)快速擴(kuò)張期,為了快速占領(lǐng)市場(chǎng)流量和提高公司的知名度,公司目前大量投放單車,新用戶快速增長(zhǎng);
- 流失客戶也存在較大的占比,在占比數(shù)據(jù)上排第三,公司需要對(duì)于流失率上進(jìn)行進(jìn)一步的分析,如用戶體驗(yàn),產(chǎn)品質(zhì)量,競(jìng)爭(zhēng)者數(shù)量,或者公共關(guān)系等原因。
- 當(dāng)然重要價(jià)值客戶的占比最高,所以在繼續(xù)保持優(yōu)勢(shì)的基礎(chǔ)上,可以根據(jù)不同的客戶價(jià)值群體,采取相應(yīng)的運(yùn)營(yíng)措施:如推送折扣月卡,不定期發(fā)送免費(fèi)騎車券,與其他公司合作,可以使用騎行里程兌換禮品等;
總結(jié)
- 上一篇: 在 Visual Basic .NET
- 下一篇: 【渗透测试】--- FCKeditor文