python-计算数据的相关性
先解释下什么叫数据的相关性:
计算两个数组的平均值,如果两个数组中的两个值都大于平均值或者都小于平均值,则得到true. 如果一个大于平均值一个小于平均值,则得到false.最后计算true和false的个数.
比如,两个数组[1, 2, 3, 4] and [4, 5, 6, 7] , 得到 (4, 0). 因为 1 和 4 都低于他们所在数组的平均值, 2 和 5 也都低于他们所在数组的平均值, 3 和 6 都高于他们所在数组的平均值, 4 和 7 也都高于他们所在数组的平均值.所以计算结果为true的有4个,false的为0.
如果数组是[1, 2, 3, 4] and [7, 6, 5, 4], 那结果就是 (0, 4). 因为 1 低于他所在数组的平均值而 7 高于们所在数组的平均值, 其它几项也类似...
一个栗子:
比如有如下数据,20个城市的人均寿命和城市的gdp,计算寿命和gdp的相关性就是,计算是否寿命较高的城市,gdp也会较高,寿命较低,gdp也较低...就是说,gdp和寿命,是否相关...如果计算得到的true比较多,那就是表示是相关的,如果得到的false比较多,那就表示不相关.
countries = ['Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia'] life_expectancy_values = [74.7, 75. , 83.4, 57.6, 74.6, 75.4, 72.3, 81.5, 80.2, 70.3, 72.1, 76.4, 68.1, 75.2, 69.8, 79.4, 70.8, 62.7, 67.3, 70.6] gdp_values = [ 1681.61390973, 2155.48523109, 21495.80508273, 562.98768478, 13495.1274663 , 9388.68852258, 1424.19056199, 24765.54890176, 27036.48733192, 1945.63754911, 21721.61840978, 13373.21993972, 483.97086804, 9783.98417323, 2253.46411147, 25034.66692293, 3680.91642923, 366.04496652, 1175.92638695, 1132.21387981]
life_expectancy = pd.Series(life_expectancy_values)
gdp = pd.Series(gdp_values)
# 计算相关性的函数
def variable_correlation(pd_1, pd_2): pd_1_mean = pd_1.mean() pd_2_mean = pd_2.mean()
# 都高于平均值或都低于平均值的,得到true,一个高一个低的,得到false
result_series = ((pd_1 > pd_1_mean) & \ (pd_2 > pd_2_mean)) | \ ((pd_1 < pd_1_mean) & \ (pd_2 < pd_2_mean))
# 计算true的个数 num_same_direction = result_series.sum() # 计算false的个数
num_different_direction = len(result_series) - num_same_direction return (num_same_direction,num_different_direction) print(variable_correlation(life_expectancy,gdp))
# 结果
(17,3)
说明寿命和gdp是相关的.