Корреляция тепловой карты с использованием значений столбца? - PullRequest
1 голос
/ 18 февраля 2020

Предположим, у меня есть следующие данные повторных наблюдений для штатов США с некоторым интересующим значением:

US_State Value
Alabama  1
Alabama  10
Alabama  9
Michigan 8
Michigan 9
Michigan 2
...

Как я могу создать попарные корреляции для значения между всеми комбинациями US_State? Я пробовал несколько разных вещей (pivot, groupby и т. Д.), Но я не могу обернуться вокруг правильного подхода.

Идеальный результат будет выглядеть так:

          Alabama   Michigan    ...
Alabama      1          0.5
Michigan     0.5        1
...

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Существует способ использования Pandas в его пределах, но это только в предположении, что каждое состояние во входном наборе данных имеет одинаковое количество наблюдений, в противном случае коэффициент корреляции на самом деле не имеет смысла, и результаты станут немного фанки.

import pandas as pd

df = pd.DataFrame()
df['US_State'] = ["Alabama", "Alabama", "Alabama", "Michigan", "Michigan", "Michigan", "Oregon", "Oregon", "Oregon"]
df['Value'] = [1, 10, 9, 8, 9, 2, 6, 1, 2]

pd.DataFrame(df.groupby("US_State")['Value'].apply(lambda x: list(x))).T.apply(lambda x: pd.Series(*x), axis=0).corr()

, что приводит к

US_State   Alabama  Michigan    Oregon
US_State                              
Alabama   1.000000 -0.285578 -0.996078
Michigan -0.285578  1.000000  0.199667
Oregon   -0.996078  0.199667  1.000000

В основном код делает то, что собирает данные для каждого состояния в одну ячейку в виде списка, транспонирует кадр данных, чтобы сделать столбцы состояний, а затем расширяет собранную ячейку данных списка в строки данных для каждого состояния. Затем вы можете просто вызвать стандартный corr() метод pandas dataframe.

0 голосов
/ 18 февраля 2020

Pandas DataFrame имеет встроенную функцию корреляционной матрицы. Вам каким-то образом понадобится поместить ваши данные в DataFrame (принимает numpy объектов, обычный dict (показан) и т. Д. c).

from pandas import DataFrame

data = {'AL': [1,10,9],
        'MI': [8,9,2],
        'CO': [11,5,17]
        }

df = DataFrame(data)

corrMatrix = df.corr()
print(corrMatrix)

# optional heatmap
import seaborn as sn
sn.heatmap(corrMatrix, annot=True, cmap='coolwarm')

          AL        MI        CO
AL  1.000000 -0.285578 -0.101361
MI -0.285578  1.000000 -0.924473
CO -0.101361 -0.924473  1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...