Измерение ковариации на нескольких рядах - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в Python и пытаюсь найти свой путь, пытаясь выполнить некоторые вычисления (я могу легко сделать их в Excel, но теперь я хочу знать, как это сделать в Python).

Одним из расчетов является ковариация.У меня есть простой пример, когда у меня есть 3 предмета, которые продаются, и у нас есть спрос на предмет в течение 24 месяцев.

Здесь вы видите снимок файла Excel:

Элементы и их спрос в течение 24 месяцев

Цель состоит в том, чтобы измерить ковариацию междувсе три предмета.Таким образом, ковариация между пунктами 1 и 2, 1 и 3 и 2 и 3. Но я также хочу знать, как сделать это для более чем 3 элементов, скажем, для тысячи элементов.

Расчетыследующим образом:

Сначала я должен вычислить средние значения для каждого элемента.Это уже то, что я нашел, выполнив следующий код:

после импорта следующего:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

Я импортировал файл:

df = pd.read_excel("Directory\\Covariance.xlsx")

И вычислил среднеена строку:

x=df.iloc[:,1:].values
df['avg'] = x.mean(axis=1)

Это дает файл с дополнительным столбцом, среднее значение (в среднем):

Элементы, их спрос и среднее значение

Следующее вычисление, которое необходимо выполнить, - это вычисление ковариации между, скажем, например, пунктами 1 и 2. Это математически выполняется следующим образом:

(столбец "1" элемента 1-столбец "avg "пункта 1) * (столбец" 1 "пункта 2 - столбец" avg "пункта 2).Это должно быть сделано для столбца с «1» по «24», то есть 24 раза.Это должно добавить 24 столбца в файл df.

После этого мы должны взять среднее значение этих столбцов, и это отображает ковариацию между пунктами 1 и 2. Поскольку мы должны сделать это N-1 раз, поэтому в этом простом случае у нас должно быть 2 числа ковариации(для первого элемента - ковариация с элементами 2 и 3, для второго элемента - ковариация с элементами 1 и 3 и для третьего элемента - ковариация с элементами 1 и 2).

Итак, первый вопрос;как можно добиться этого для этих 3 элементов, чтобы в файле был столбец, отображающий 2 результата ковариации на элемент (первый элемент должен иметь столбец с номером ковариации элементов 1 и 2 и второй столбец с номером ковариации между элементами1 и 3 и тд ...).

Второй вопрос, конечно: что, если у меня 1000 предметов;как мне тогда эффективно это сделать, потому что тогда у меня есть 999 ковариационных чисел на элемент и, таким образом, 999 дополнительных столбцов, а также 999 * 25 дополнительных столбцов, если я вычисляю их по вышеуказанной методике.Так как мне выполнить этот расчет для каждого элемента максимально эффективно?

1 Ответ

0 голосов
/ 23 ноября 2018

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

df = pd.read_excel("Directory\\Covariance.xlsx", index_col=0)

Тогда вы можете также легко вычислить среднее значение, но пока не возвращаете его в свой фрейм данных.!

avg = df.mean(axis=1)

Чтобы рассчитать ковариационную матрицу, просто наберите .cov().Тем не менее, он рассчитывает попарные ковариации столбцов, чтобы сначала транспонировать кадр данных:

cov = df.T.cov()

Если вы хотите, вы можете собрать все вместе в один кадр данных:

df['avg'] = avg
df = df.join(cov, rsuffix='_cov')

Примечание:ковариационная матрица включает ковариацию с самим собой = дисперсию на единицу.

...