admin 發表於 2023-12-15 14:28:36

遊戲玩家行為数据分析:基于R

《蛮横期間》是一款SLG類型的遊戲,方针是經由過程阐發玩家在前7日内的举動数据来展望玩家前45日玩家的消费程度,固然這里重要對玩家前7日的举動数据举行一個摸索性阐發,正确领會每個玩家的潜伏价值,和為遊戲方提高運营效力,制订運营勾當供给一些有效的信息。

数据约莫有220万条記實,共有110条字段,這里咱們只取部門有效字段举行阐發,有些遊戲内資本数据字段不举行阐發,数据存储在MySQL中,這里利用Rmysql包举行数据提取,原始数据中数据字段不少,這里只是提取部門首要字段特性,别離是:

user_id:用户编号,独一標識

pay_count:用户付费次数

pay_price:用户充值价值

register_time:注册時候

avg_online_minutes:均匀在线時长

pvp_battle_count: pvp對战次数

pvp_win_count: pvp對战赢的次数

pvp_lanch_count: pvp對战输的次数

wood_reduce_value: 木料損耗量

stone_reduce_value: 石料損耗量

ivory_reduce_value: 象牙損耗量

meat_reduce_value: 食品損耗量

magic_reduce_value: 魔力損耗量

详细的数据环境以下:

#读入数据
library(RMySQL)

con<-dbConnect(MySQL(),host='localhost',dbname='tap_fun',user='root&#去口臭茶,39;,password='123456')

sql<-'SELECT user_id,pay_count,pay_price,register_time,avg_online_minutes,pvp_battle_count,pvp_win_coun牙齒美白,t,pvp_lanch_count,wood_reduce_value,stone_reduce_value,ivory_reduce_value,meat_reduce_value,magic_reduce_value,general_acceleration_reduce_value,building_acceleration_reduce_value,reaserch_acceleration_reduce_value,training_acceleration_redu提升免疫力,ce_value FROM tap_fun_train'

res<-dbSendQuery(con,sql)

data<-dbFetch(res = res,n=-1)   #n=-1提取全数数据
這里利用funmodeling包举行摸索性阐發,加载funmodeling包,tidyverse包,Hmise包

library(tidyverse)
library(funModeling)
library(Hmisc)

glimpse(data)    #描写数据量,总體字段類型
df_status(data)#各字段的0值,缺失值,類型,独一值等

#這里将付费次数,付费金额,在线時长轉化為想要的類型
data$pay_count<-as.numeric(data$pay_count)
data$pay_price<-as.numeric(data$pay_price)
data$avg_online_minutes<-as.numeric(data$avg_online_minutes)

describe(data)

以上共2288006条記實,17個特性,各個字段的類型。有些字段類型不合用于部門阐發,以是在接下阐發部門有些字段會扭轉字段類型。

以上是每個變量中0值的個数(q_zeros)和占比(p_zeros),缺失值的個数(q_na)和占比(p_na),同時還包含變量的類型和独一值(unique)。

這里只是對pay_count,pay_price,avg_online_minutes三個變量举行描写,也能够對所稀有据举行描写,可是要将字段轉化為對應的類型。

以上是三個變量的统计指標,付费次数(pay_count)最高的是105次,每次付费代价(pay_price)的最高付出為7457.95元,均匀在线時长(avg_online_minutes)最可能是2049.67分钟。因為有些数值受'0'值数目的影响,在後续的探讨中會解除0值的影响。

attach(蟑螂剋星,data)

data$register_time<-as.Date(data$register_time)   #将字段register_time轉化為時候類型
userdata<-data%>%group_by(register_time)%>%su妹妹arise(count=n()) #以字段register_time举行分组,求出每天注册用户数目

#逐日注册用户数時候序列
ggplot(data = userdata,aes(x=register_time,y=count))+geom_point(aes(size=count))+geom_line(color='blue')+ggtitle('逐日注册用户数')

#逐日注册用户TOP美國黑金, 10
register_top<-userdata%>%arrange(desc(count))

ggplot(data = register_top,aes(x=reorder(as.character(register_time),count),y=count))+geom_bar(stat = 'identity')+theme(axis.text.x = element_text(angle = 90))+xlab('注册時候')+ggtitle('逐日注册用户top 10')+geom_text(aes(label=count),vjust=-0.3)
分组注册用户数目

以上是從1月26日至3月7日的注册用户数目。

注册時候序列圖

top 10

注册時候序列圖:從1月26至2月16日趋向比力安稳,逐日注册用户保持在65000人次摆布,2月17日至2月19注册用户显著增多,2月19日到達颠峰為117311人次,缘由多是這段時候為春節時代,官方會推出勾當,吸引玩家,致使注册用户显著增多,從2月20日起头,整體呈降低趋向後趋于安稳。

#找出付用度户

pay_data<-data%>%filter(pay_count>0)%>%select(user_id,pay_price,pay_count,avg_online_minutes,register_time)
pay_data$pay_price<-as.numeric(pay_data$pay_price)
pay_data$pay_count<-as.numeric(pay_data$pay_count)
pay_data$avg_online_minutes<-as.numeric(pay_data$avg_online_minutes)
pay_data$register_time<-as.Date(pay_data$register_time)

dim(pay_data)#数据巨细

describe(pay_data)

#逐日新增付用度户数
day_add_data<-pay_data%>%group_by(register_time)%>%su妹妹arise(pay_num=n())

ggplot(data = day_add_data,aes(x=register_time,y=pay_num))+geom_point(aes(size=pay_num))+geom_line(color='blue')+ggtitle('逐日新增付用度户数')

#比拟阐發
pay_user_data<-left_join(userdata,day_add_data,by='register_time')

#付用度户算占比例
pay_per<-data%>%su妹妹arise(count_num=n(),pay_count_num=sum(ifelse(pay_count>0,1,0)),per=pay_count_num/count_num)
pay_per_data<-gather(pay_per)

#付用度户與未付用度户的資本利用率比拟
data$wood_reduce_value<-as.numeric(data$wood_reduce_value)
data$stone_reduce_value<-as.numeric(data$stone_reduce_value)
data$ivory_reduce_value<-as.numeric(data$ivory_reduce_value)
data$meat_reduce_value<-as.numeric(data$meat_reduce_value)
data$magic_reduce_value<-as.numeric(data$magic_reduce_value)

no_pay_sources_data<-filter(data,pay_count==0)%>%select(wood_reduce_value,stone_reduce_value,ivory_reduce_value,meat_reduce_value,magic_reduce_value)%>%gather()%>%group_by(key)%>%su妹妹arise(nopay_mean=mean(value))

pay_sources_data<-filter(data,pay_count>0)%>%select(wood_reduce_value,stone_reduce_value,ivory_reduce_value,meat_reduce_value,magic_reduce_value)%>%gather()%>%group_by(key)%>%su妹妹arise(pay_mean=mean(value))

sources_data<-left_join(no_pay_sources_data,pay_sources_data,by='key')

sources_data%>%gather(type,mount,-key)%>%ggplot(aes(key,mount,fill=type))+geom_bar(stat = 'identity',position = 'dodge')+theme_economist()+scale_fill_economist()+geom_text(aes(label=round(mount,2)),vjust=-0.3)

#付用度户與将来付用度户的對战环境
data$pvp_battle_count<-as.numeric(data$pvp_battle_count)
data$pvp_win_count<-as.numeric(data$pvp_win_count)
data$pvp_lanch_count<-as.numeric(data$pvp_lanch_count)

no_pay_pvp<-data%>%filter(pay_count==0)%>%select(pvp_lanch_count,pvp_win_count,pvp_battle_count)%>%gather()%>%group_by(key)%>%su妹妹arise(nopay_pvp_mean=mean(value))

pay_pvp<-data%>%filter(pay_count>0)%>%select(pvp_lanch_count,pvp_win_count,pvp_battle_count)%>%gather()%>%group_by(key)%>%su妹妹arise(pay_pvp_mean=mean(value))

pvp_data<-left_join(no_pay_pvp,pay_pvp,by='key')

pvp_data%>%gather(type,mount,-key)%>%ggplot(aes(key,mount,fill=type))+geom_bar(stat = 'identity',position = 'dodge')+theme_wsj()+scale_fill_wsj()+geom_text(aes(label=round(mount,2)),vjust=-0.3)
付费玩家环境描写

如上:付用度户共有41439人,對于费价值、付费次数举行描写,最低消费0.99,最高消费6253.98,均值為29.52元,消用度户大多只是充值少许金额;最低消费次数1次,最高消费次数為105次,均值為3.186次,大對数玩家只充值了一次,以上多是官方為了吸引更多的玩家,會送给玩家必定的金额,或许這是大對数玩家只有一次消费并且消费金额很低的缘由。

玩家逐日付费环境

付费玩家與未付费玩家資本利用环境

付费與未付费玩家對战环境比拟

以上玩家逐日付费环境中,從1月26日起头付费次数呈降低趋向;付用度户利用的均匀資本显著要比未付用度户利用的均匀資本要多,未付@用%744UX%度對資%nmhQ9%本@的操纵要少很多;付费玩家的對战次数要比未付费的玩家多不少,固然遊戲的胜负几率在0.5之間,這合适遊戲的纪律。

#這里咱們假腳氣膏推薦, 如用户在线均匀時长跨越30分钟為活泼用户
active_users_data<-data%>%filter(as.numeric(avg_online_minutes)>30)
active_users_data$avg_online_minutes<-as.numeric(active_users_data$avg_online_minutes)

#活泼用户均匀在线時长散布环境
describe(active_users_data$avg_online_minutes)
ggplot(data = active_users_data,aes(x=avg_online_minutes))+geom_histogram(binwidth = 40,bins = 30)+xlim(0,1000)

#活泼玩家中付用度户比拟
active_users_data%>%select(pay_count,pay_price)%>%su妹妹arise(count=n(),pay_count=sum(if_else(pay_count>0,1,0)))%>%gather()%>%ggplot(aes(key,value))+geom_bar(stat = 'identity')+coord_flip()+geom_text(aes(label=value),hjust=-0.3)

#活泼玩家均匀資本操纵环境(這里只對木料,石头,象牙,肉,魔力举行比拟阐發)

active_users_data$wood_reduce_value<-as.numeric(active_users_data$wood_reduce_value)
active_users_data$stone_reduce_value<-as.numeric(active_users_data$stone_reduce_value)
active_users_data$ivory_reduce_value<-as.numeric(active_users_data$ivory_reduce_value)
active_users_data$meat_reduce_value<-as.numeric(active_users_data$meat_reduce_value)
active_users_data$magic_reduce_value<-as.numeric(active_users_data$magic_reduce_value)

active_users_data[,9:13]%>%gather()%>%group_by(key)%>%su妹妹arise(source_mean=mean(value))%>%ggplot(aes(key,source_mean))+geom_bar(stat = 'identity')+geom_text(aes(label=round(source_mean,2)),vjust=-0.3)

#活泼玩家對战环境

active_users_data$pvp_battle_count<-as.numeric(active_users_data$pvp_battle_count)
active_users_data$pvp_win_count<-as.numeric(active_users_data$pvp_win_count)
active_users_data$pvp_lanch_count<-as.numeric(active_users_data$pvp_lanch_count)

active_users_data[,6:8]%>%gather()%>%group_by(key)%>%su妹妹arise(pvp_mean=mean(value))%>%ggplot(aes(key,pvp_mean))+geom_bar(stat = 'identity')+geom_text(aes(label=round(pvp_mean,2)),vjust=-0.3)
活泼玩家在线時长散布环境

大大都活泼用户的在线時长集中在30至250分钟之間,总體呈右偏。

活泼用户占比

活泼用户資本利用环境

活泼用户對战环境
頁: [1]
查看完整版本: 遊戲玩家行為数据分析:基于R