前天在看书的时候第一次看到了列联表卡方检验,觉得这个东西不难又相对容易实现,刚好知乎 @算命师 的文章是用R来实现卡方检验,于是借用他的数据,我在spyder上面实现了。(感谢 @算命师 的数据)
这是一份手游数据,里面是某手游2013年8-9月的用户登录数据以及用户数据库数据。这是为了查看到底是什么因素使得8-9月的登录次数骤减。为了看到底是什么因素会影响,首先会想到方差分析、相关性矩阵,还有卡方检验。
首先卡方检验是针对自变量和因变量都是分类数据,也就是说带有属性的数据;而单因素方差分析是自变量是分类数据,因变量是连续型的数据。还有一点:方差分析是参数检验,而卡方检验是属于非参数检验。
到底列联表的卡方怎么做呢?卡方检验是用途非常广的一种假设检验方法,它在分类资料统计推断中的应用,包括:两个率或两个构成比比较的卡方检验;多个率或多个构成比比较的卡方检验以及分类资料的相关分析等。
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。注意:卡方检验针对分类变量
当然是要进行假设检验啦:
根据度娘的图:
1、括号里面是根据观测值的概率来推算出来的理论值,或者叫期望值。
2、最下面和最右面是分别在不同分类数据下的求和,右边那列的和下边的和怎么都等于200
3、概率和理论值怎么算呢:
4、我们把理论值都直接放进去表格里面,卡方的公式:
其中A是实际值,T是理论值。
5、最后根据得出的卡方值查表便可求得结果。
回归本题:
在spyder里面实现
#merge
new_df = pd.merge(user_login,user_database,how='left',on='user_id')
new_df.drop(['app_name_x','app_name_y'],axis=1,inplace=True)
new_df.log_date = pd.to_datetime(new_df.log_date)
#merge成功之后,进行探索性分析
#8-9月之间登陆次数是否有异常
logdf = new_df.groupby(['log_date']).count()['user_id']
logdf.plot(figsize