Как исключить, когда оба значения равны 0 при расчете коэффициента Кендалла Тау и Пирсона с значениями p в a для l oop? - PullRequest
0 голосов
/ 09 апреля 2020

Мои данные состоят из 400 продуктов питания (в столбцах) с их значениями питательных веществ (строки). Вот примерные данные:

    import pandas as pd 
    fooddb = {'food':['oat','barley','rice','sorghumn'], 'x':[0,0,0.7,0.6], 'y':[0, 1, 0.5, 0], 'z':[0, 0.5, 0.3, 0]}
    df=pd.DataFrame(fooddb, columns = ['food','x','y','z'])
    df = df.set_index('food')

Здесь я пытаюсь получить тау Кендалла с p-значением и коэффициент корреляции Пирсона с p-значением каждой пары продуктов среди 400 продуктов питания. Я выяснил, как составлять пары комбинаций из всех 400 продуктов питания, но не смог создать успешные коды в некоторых частях. Во-первых, я хочу рассмотреть значения x и y, которые (x> 0, y> 0) или (x> = 0 и y> 0) или (x> 0 и y> = 0) при расчете корреляции. Поэтому я придумал

    if (value[i].sum(axis=1) >0 :

    if (ind[i] + ind[j] > 0) :

и многие другие подобные коды, но все не получилось.

Во-вторых, я хочу использовать stats.kendalltau () в l oop, но NaN продолжал появляться. Итак, заменено на corr (method = 'kendall'), у которого нет p-значения.

Сейчас у меня есть следующий код:

    rows, cols = DF_T.shape
    colname = list(DF_T.columns)
    value = DF_T.values
    corr = DF_T.corr(method='kendall').values
    pear = DF_T.corr(method='pearson').values
    kendall_data = []
    for i in range(cols):
        for j in range(i+1, cols):
            if (value[i].sum(axis=1) >0 :
                tau=corr[i,j]
                pea=pear[i,j]
                t,p= stats.kendalltau(i,j,nan_policy='omit')
                x_kendall=colname[i]
                y_kendall=colname[j]
                kendall_data.append((x_kendall,y_kendall,tau,pea,t))
...