Python 游戏APP用户行为统计分析

关注微信公共号:小程在线

关注CSDN博客:程志伟的博客

Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 7.12.0 -- An enhanced Interactive Python.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

az = pd.read_excel(r'F:\Python\数据源整合.xlsx',sheet_name='安装信息')
zc = pd.read_excel(r'F:\Python\数据源整合.xlsx',sheet_name='注册信息')

print("查看安装信息:")
az.head()
查看安装信息:
Out[3]: 
                 安装时间   渠道     子渠道  ...       系统                机型 操作系统版本
0 2020-04-26 15:59:27  渠道A  site01  ...  android   samsung-SM-N900      5
1 2020-04-26 15:58:27  渠道A  site02  ...  android  samsung-SM-N960F     10
2 2020-04-26 15:56:57  渠道A  site01  ...  android  samsung-SM-A7050      9
3 2020-04-26 15:50:55  渠道A  site03  ...  android      OPPO-CPH1721      7
4 2020-04-26 15:49:42  渠道A  site04  ...  android    HUAWEI-LYA-L29      9

[5 rows x 9 columns]

print('查看注册信息:')
zc.head()
查看注册信息:
Out[4]: 
  用户类型    账号名称                 安装时间  ...       系统           机型   地区
0  new  code03  2020-04-19 23:58:18  ...  android     SM-G887F  地区A
1  old  code15  2020-04-20 00:04:51  ...  android     SM-A730F  地区A
2  old  code17  2020-04-20 00:18:30  ...  android  ASUS_I001DE  地区A
3  old  code19  2020-04-20 00:20:36  ...  android     SM-G9880  地区B
4  old  code27  2020-04-20 00:28:29  ...  android     SM-N9500  地区B

[5 rows x 11 columns]

print("安装信息表:")
print(az.info())
print("-"*30)
print(az.describe())
print("-"*30)
print('空值统计:\n',az.isnull().sum())
print("-"*30)
print('重复数据:',az.duplicated().sum())
安装信息表:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7438 entries, 0 to 7437
Data columns (total 9 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   安装时间    7438 non-null   datetime64[ns]
 1   渠道      7438 non-null   object        
 2   子渠道     7438 non-null   object        
 3   地区      7438 non-null   object        
 4   WIFI    7438 non-null   bool          
 5   用户唯一ID  7438 non-null   object        
 6   系统      7438 non-null   object        
 7   机型      7438 non-null   object        
 8   操作系统版本  7438 non-null   int64         
dtypes: bool(1), datetime64[ns](1), int64(1), object(6)
memory usage: 472.3+ KB
None
------------------------------
            操作系统版本
count  7438.000000
mean      7.881958
std       1.505865
min       4.000000
25%       7.000000
50%       8.000000
75%       9.000000
max      10.000000
------------------------------
空值统计:
 安装时间      0
渠道        0
子渠道       0
地区        0
WIFI      0
用户唯一ID    0
系统        0
机型        0
操作系统版本    0
dtype: int64
------------------------------
重复数据: 0

print("注册信息表:")
print(zc.info())
print("-"*30)
注册信息表:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5992 entries, 0 to 5991
Data columns (total 11 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   用户类型    5992 non-null   object
 1   账号名称    5992 non-null   object
 2   安装时间    5992 non-null   object
 3   注册时间    5992 non-null   object
 4   注册渠道    5992 non-null   object
 5   子站      5992 non-null   object
 6   用户唯一ID  5992 non-null   object
 7   注册游戏    5992 non-null   object
 8   系统      5992 non-null   object
 9   机型      5992 non-null   object
 10  地区      5992 non-null   object
dtypes: object(11)
memory usage: 515.1+ KB
None
------------------------------

print(zc.describe())
print("-"*30)
        用户类型      账号名称                 安装时间  ...       系统       机型    地区
count   5992      5992                 5992  ...     5992     5992  5992
unique     2      5944                 5555  ...        1     1053     3
top      old  code2577  2020-03-17 08:05:22  ...  android  CPH1879   地区A
freq    3022         5                   33  ...     5992      117  4944

[4 rows x 11 columns]
------------------------------

print('空值统计:\n',zc.isnull().sum())
print("-"*30)
空值统计:
 用户类型      0
账号名称      0
安装时间      0
注册时间      0
注册渠道      0
子站        0
用户唯一ID    0
注册游戏      0
系统        0
机型        0
地区        0
dtype: int64
------------------------------

print('重复数据:',zc.duplicated().sum())
重复数据: 0

print('安装信息表的安装时间范围:',az['安装时间'].min(),az['安装时间'].max())
print('注册信息表的安装时间范围:',zc['安装时间'].min(),zc['安装时间'].max())
安装信息表的安装时间范围: 2020-04-19 16:04:54 2020-04-26 15:59:27
注册信息表的安装时间范围: 2020-02-20 13:21:31 2020-04-26 23:44:39

####为了方便分析,选择安装时间在 2020-4-20——2020-04-26 的数据

az = az[az['安装时间']>'2020-04-19 23:59:59']
zc = zc[zc['安装时间']>'2020-04-19 23:59:59']
print('安装信息表的安装时间范围:',az['安装时间'].min(),az['安装时间'].max())
print('注册信息表的安装时间范围:',zc['安装时间'].min(),zc['安装时间'].max())
安装信息表的安装时间范围: 2020-04-20 00:02:15 2020-04-26 15:59:27
注册信息表的安装时间范围: 2020-04-20 00:04:51 2020-04-26 23:44:39

####选择注册信息表中'用户唯一ID'存在安装表中的数据

uid = az['用户唯一ID']
zc = zc[zc['用户唯一ID'].isin(uid)]

print('安装信息:',az.shape)
print('注册信息:',zc.shape)
安装信息: (7282, 9)
注册信息: (5125, 11)

print('注册信息重复ID:',zc['用户唯一ID'].duplicated().sum())
注册信息重复ID: 207

zc = zc.drop_duplicates('用户唯一ID')
print('去重后:',zc.shape)
去重后: (4918, 11)

####安装信息分析
####激活率=激活人数/安装人数(这里激活人数以注册人数代替)

print("安装人数:",az.shape[0])
print('注册人数:',zc.shape[0])
print('激活率:%.2f%%'%((zc.shape[0]/az.shape[0])*100))
安装人数: 7282
注册人数: 4918
激活率:67.54%

####日安装量、安装渠道、TOP15子渠道、安装地区、是否WiFi安装、安装的手机类型统计TOP15、系统版本

az['安装日期']=az['安装时间'].dt.date
print('日安装用户量:\n',az.groupby('安装日期').用户唯一ID.count())
日安装用户量:
 安装日期
2020-04-20     947
2020-04-21     912
2020-04-22    1045
2020-04-23    1022
2020-04-24     915
2020-04-25    1278
2020-04-26    1163
Name: 用户唯一ID, dtype: int64

print("安装渠道:\n",az['渠道'].value_counts())
print('\n TOP 15子渠道:\n',az['子渠道'].value_counts()[:15])
安装渠道:
 渠道B    5480
渠道A    1802
Name: 渠道, dtype: int64

 TOP 15子渠道:
 site251    1075
site249    1048
site250    1043
site247     458
site248     457
site253     430
site254     305
site258     274
site252     209
site11      207
site12      200
site03      154
site01      138
site255     115
site256      59
Name: 子渠道, dtype: int64

print('安装地区:\n',az['地区'].value_counts())
安装地区:
 地区A    5663
地区B    1543
地区C      76
Name: 地区, dtype: int64

print('是否WiFi安装:\n',az['WIFI'].value_counts())
是否WiFi安装:
 True     3938
False    3344
Name: WIFI, dtype: int64

'''
从机型属性中拆分手机类型属性,由于手机品牌名称存在大小写不一的情况(例如OPPO,oppo),因此将手机类型属性字段统一转换为首字母大写的格式:
PS :转换成以下模式再统计也是一样的,但必须先统一格式后再统计:
.lower() 将字符串中全部字符转换为小写
.upper() 将字符串中全部字符转换为大写
.title() 将字符串中每个单词的首字母转换为大写字母
'''

print("用户安装手机类型TOP 15:\n")
az['手机类型'] = az['机型'].str.split("-").str[0]
az['手机类型'] = az['手机类型'].str.title() #.title()将所有手机类型的名称转换为首字母大写的格式
az['手机类型'].value_counts()[:15]
用户安装手机类型TOP 15:

Out[21]: 
Samsung    2577
Oppo       1125
Huawei      726
Xiaomi      610
Asus        576
Htc         281
Sony        275
Vivo        245
Lge          87
Galaxy       78
Realme       65
Honor        57
Redmi        53
Nokia        51
Xperia       45
Name: 手机类型, dtype: int64

print('系统:',az['系统'].value_counts())
print('\n操作系统版本:\n',az.groupby('操作系统版本').系统.count())
系统: android    7282
Name: 系统, dtype: int64

操作系统版本:
 操作系统版本
4       83
5      313
6     1434
7      925
8     1251
9     2407
10     869
Name: 系统, dtype: int64

zc['注册日期'] = pd.to_datetime(zc['注册时间']).dt.date
print('日注册用户:\n',zc.groupby('注册日期').用户唯一ID.count())
日注册用户:
 注册日期
2020-04-20    532
2020-04-21    579
2020-04-22    648
2020-04-23    731
2020-04-24    635
2020-04-25    864
2020-04-26    929
Name: 用户唯一ID, dtype: int64

print("用户类型:\n",zc['用户类型'].value_counts())
用户类型:
 new    2565
old    2353
Name: 用户类型, dtype: int64

zc['注册时段'] = pd.to_datetime(zc['注册时间']).dt.hour
hzc = zc.groupby(['用户类型','注册时段']).用户唯一ID.count().reset_index(name='total')
sns.lineplot(data=hzc,x='注册时段',y='total',hue='用户类型')
plt.title('各时段的注册用户量',loc='left')
plt.show()

 

print("激活时间:\n")
zc['激活时间'] = pd.to_datetime(zc['注册时间']).dt.day-pd.to_datetime(zc['安装时间']).dt.day
jh = zc['激活时间'].value_counts().reset_index(name='total')
jh['percent'] =(jh['total']/7282).round(3)
print(jh)
激活时间:

   index  total  percent
0      0   4655    0.639
1      1    208    0.029
2      2     33    0.005
3      3     16    0.002
4      4      3    0.000
5      6      2    0.000
6      5      1    0.000

print('日新增新用户:\n')
nzc = zc[zc['用户类型']=='new']
nzc.groupby('注册日期').用户唯一ID.count()
日新增新用户:

Out[27]: 
注册日期
2020-04-20    296
2020-04-21    298
2020-04-22    343
2020-04-23    375
2020-04-24    324
2020-04-25    447
2020-04-26    482
Name: 用户唯一ID, dtype: int64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值