对两个词典执行双样本 Kolmogorov-Smirnov 检验
Perform two-sample Kolmogorov-Smirnov test on two dictionaries
我有两个字典,其中包含两个离散分布:A={1: 300, 2: 400, 4: 20,...}
和 B={2: 100, 3: 200 , 4: 75,...}
。我想检查它们的相似程度,我想执行两个样本 Kolmogorov-Smirnov test.
我检查了 scipy function 但它似乎只适用于 numpy 数组,我如何在我的数据上执行它?
也许将您的字典值转换为 numpy 数组:
import numpy as np
import scipy
a = np.array(list(A.values()))
b = np.array(list(B.values()))
scipy.stats.ks_2samp(a, b)
您可以轻松地将数据转换为 numpy.array
:
import numpy as np
my_keys = sorted(set([*A.keys(), *B.keys()]))
A_array = np.array(A.get(key,0) for key in my_keys)
B_array = np.array(B.get(key,0) for key in my_keys)
我注意到 A
和 B
没有相同的键(例如,B
似乎不包含键“1”) - 所以你需要支付注意那个。我找到键的并集并在字典中不存在键时将值强加为 0 的原因(我假设在这种情况下,您对该特定键没有任何观察)。
现在两个数组可以兼容进行测试了。
您可以创建一个 pandas 数据框来轻松处理 N/A 值。然后 运行 您对生成的数据框列的统计信息。
显然你不能比较两个没有相同键的系列。
data_frame = pd.DataFrame(dict(s1=A,s2=B)).dropna()
stats = stats.ks_2samp(data_frame.iloc[:, 0], data_frame.iloc[:, 1])
我有两个字典,其中包含两个离散分布:A={1: 300, 2: 400, 4: 20,...}
和 B={2: 100, 3: 200 , 4: 75,...}
。我想检查它们的相似程度,我想执行两个样本 Kolmogorov-Smirnov test.
我检查了 scipy function 但它似乎只适用于 numpy 数组,我如何在我的数据上执行它?
也许将您的字典值转换为 numpy 数组:
import numpy as np
import scipy
a = np.array(list(A.values()))
b = np.array(list(B.values()))
scipy.stats.ks_2samp(a, b)
您可以轻松地将数据转换为 numpy.array
:
import numpy as np
my_keys = sorted(set([*A.keys(), *B.keys()]))
A_array = np.array(A.get(key,0) for key in my_keys)
B_array = np.array(B.get(key,0) for key in my_keys)
我注意到 A
和 B
没有相同的键(例如,B
似乎不包含键“1”) - 所以你需要支付注意那个。我找到键的并集并在字典中不存在键时将值强加为 0 的原因(我假设在这种情况下,您对该特定键没有任何观察)。
现在两个数组可以兼容进行测试了。
您可以创建一个 pandas 数据框来轻松处理 N/A 值。然后 运行 您对生成的数据框列的统计信息。 显然你不能比较两个没有相同键的系列。
data_frame = pd.DataFrame(dict(s1=A,s2=B)).dropna()
stats = stats.ks_2samp(data_frame.iloc[:, 0], data_frame.iloc[:, 1])