Skip to content

Instantly share code, notes, and snippets.

@canard0328
Created November 20, 2014 09:33
Show Gist options
  • Save canard0328/e8c5ccaa67fc3426ac9b to your computer and use it in GitHub Desktop.
Save canard0328/e8c5ccaa67fc3426ac9b to your computer and use it in GitHub Desktop.
クラメールの連関係数の計算 ref: http://qiita.com/canard0328/items/5ea4115d964b448903ba
# -*- coding: utf-8 -*-
import numpy as np
def cramersV(x, y):
"""
Calc Cramer's V.
Parameters
----------
x : {numpy.ndarray, pandas.Series}
y : {numpy.ndarray, pandas.Series}
"""
table = np.array(pd.crosstab(x, y)).astype(np.float32)
n = table.sum()
colsum = table.sum(axis=0)
rowsum = table.sum(axis=1)
expect = np.outer(rowsum, colsum) / n
chisq = np.sum((table - expect) ** 2 / expect)
return np.sqrt(chisq / (n * (np.min(table.shape) - 1)))
if __name__ == "__main__":
import pandas as pd
data = pd.DataFrame(
{'science': ['like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'dislike', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'dislike',
'dislike'],
'math': ['like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'like', 'like', 'like', 'like',
'like', 'like', 'like', 'dislike', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'like', 'like',
'like', 'like', 'like', 'like', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'dislike',
'dislike', 'dislike', 'dislike', 'dislike', 'dislike',
'dislike']})
print cramersV(data['science'], data['math'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment