Дополнительно
Используйте .corr для получения корреляции между двумя столбцами
У меня есть следующий фрейм данных pandas Top15
:
Я создаю колонку, которая оценивает количество цитируемых документов на человека:
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
Я хочу узнать корреляцию между количеством цитируемых документов на душу населения и энергоснабжением на душу населения. Поэтому я использую метод .corr()
(корреляция Пирсона):
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
Я хочу вернуть одно число, но результат таков:
101
7
Без фактических данных трудно ответить на этот вопрос, но я предполагаю, что вы ищете что-то подобное:
Вычисляет корреляцию между двумя столбцами
'Citable docs per Capita'
и'Energy Supply per Capita'
.Для примера:
Тогда
дает
1
, как и ожидалось.Теперь, если вы измените значение, например.
команда
возвращает
что все еще близко к 1, как и ожидалось.
Если вы примените
.corr
непосредственно к вашему датафрейму, [он вернет все парные корреляции между вашими столбцами] (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.corr.html); вот почему вы наблюдаете1s
на диагонали вашей матрицы (каждый столбец идеально коррелирован с самим собой).вернет
На графике, который вы показываете, представлен только верхний левый угол корреляционной матрицы (я предполагаю).
Могут быть случаи, когда вы получаете
NaN
в вашем решении - посмотрите [это сообщение] (https://stackoverflow.com/q/52466844/1534017) для примера.Если вы хотите отфильтровать записи выше/ниже определенного порога, вы можете проверить этот вопрос. Если вы хотите построить тепловую карту коэффициентов корреляции, вы можете проверить этот ответ, а если вы столкнетесь с проблемой наложения меток по осям, проверьте следующее сообщение.
Я столкнулся с той же проблемой. Оказалось, что
Citable Documents per Person
- это float, и python как-то пропускает его по умолчанию. Все остальные столбцы моего датафрейма были в формате numpy, поэтому я решил эту проблему, преобразовав столбец вnp.float64
.Помните, что это именно тот столбец, который вы вычислили сами.
Мое решение будет после преобразования данных числового типа:
Когда вы называете это:
Так, Таблицы Данных.СОГГ() функция выполняет парных корреляций, у вас есть четыре пары с двумя переменными. Так что, в принципе, вы получаете значения по диагонали, как автоматической корреляции (корреляция с себя два значения, поскольку у вас есть две переменные), а другие два значения перекрестных корреляций одна против другой и наоборот.
Либо выполнить корреляцию двух серий, чтобы получить одно значение:
или, если вы хотите, чтобы одно значение из одной и той же функции (таблицы данных'ы СОГГ):
Надеюсь, что это помогает.
Работает это так:
Если вам нужны корреляции между всеми парами столбцов, вы можете сделать что-то вроде этого:
Я решил эту проблему путем изменения типа данных. Если вы видите, что 'энергоснабжение на душу населения' - это числовой тип, А 'цитируемых документах на душу населения' - Это тип объекта. Я обратился в столбце плавать, используя тип. У меня была такая же проблема с некоторыми функциями НП:
count_nonzero
исумма
работалазначит
иstd
и я'т.