import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
az = pd.read_excel('/home/kesci/input/game_data1910/数据源整合.xlsx',sheet_name='安装信息')
zc = pd.read_excel('/home/kesci/input/game_data1910/数据源整合.xlsx',sheet_name='注册信息')
print("查看安装信息:")
az.head()
print('查看注册信息:')
zc.head()
print("安装信息表:")
print(az.info())
print("-"*30)
print(az.describe())
print("-"*30)
print('空值统计:\n',az.isnull().sum())
print("-"*30)
print('重复数据:',az.duplicated().sum())
print("注册信息表:")
print(zc.info())
print("-"*30)
print(zc.describe())
print("-"*30)
print('空值统计:\n',zc.isnull().sum())
print("-"*30)
print('重复数据:',zc.duplicated().sum())
print('安装信息表的安装时间范围:',az['安装时间'].min(),az['安装时间'].max())
print('注册信息表的安装时间范围:',zc['安装时间'].min(),zc['安装时间'].max())
为了方便分析,选择安装时间在 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
print('注册信息重复ID:',zc['用户唯一ID'].duplicated().sum())
# 去重
zc = zc.drop_duplicates('用户唯一ID')
print('去重后:',zc.shape)
激活率=激活人数/安装人数(这里激活人数以注册人数代替)
print("安装人数:",az.shape[0])
print('注册人数:',zc.shape[0])
print('激活率:%.2f%%'%((zc.shape[0]/az.shape[0])*100)) #以百分比的格式输出激活率
az['安装日期']=az['安装时间'].dt.date
print('日安装用户量:\n',az.groupby('安装日期').用户唯一ID.count())
print("安装渠道:\n",az['渠道'].value_counts())
print('\n TOP 15子渠道:\n',az['子渠道'].value_counts()[:15])
print('安装地区:\n',az['地区'].value_counts())
print('是否WiFi安装:\n',az['WIFI'].value_counts())
从机型属性中拆分手机类型属性,由于手机品牌名称存在大小写不一的情况(例如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]
print('系统:',az['系统'].value_counts())
print('\n操作系统版本:\n',az.groupby('操作系统版本').系统.count())
可见系统大部分人并没有更新最新系统,只有869人更新系统并下载游戏
zc['注册日期'] = pd.to_datetime(zc['注册时间']).dt.date
print('日注册用户:\n',zc.groupby('注册日期').用户唯一ID.count())
print("用户类型:\n",zc['用户类型'].value_counts())
zc.head()
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)
有4655人选择在当天激活,占安装人数中的63.9%,占整体注册人数中的94.6%,有32.5%的用户没有在7天内激活注册
print('日新增新用户:\n')
nzc = zc[zc['用户类型']=='new']
nzc.groupby('注册日期').用户唯一ID.count()