Я новичок в 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)
Это дает файл с дополнительным столбцом, среднее значение (avg):
Следующее вычисление, которое необходимо сделать, - это вычислить ковариацию между, скажем, элементами 1 и 2. Математически это делается следующим образом:
(столбец «1» пункта 1 - столбец «среднее» пункта 1) * (столбец «1» пункта 2 - столбец «средн» пункта 2). Это нужно сделать для столбцов с «1» по «24», то есть 24 раза. Это должно добавить 24 столбца в файл df.
После этого мы должны взять среднее значение этих столбцов, которое отображает ковариацию между элементами 1 и 2. Поскольку мы должны сделать это N-1 раз, поэтому в этом простом случае у нас должно быть 2 числа ковариации (для первого элемента, ковариация с элементами 2 и 3, для второго элемента ковариация с элементами 1 и 3 и для третьего элемента ковариация с элементами 1 и 2).
Итак, первый вопрос: как я могу добиться этого для этих трех элементов, чтобы в файле был столбец, отображающий 2 результата ковариации для каждого элемента (первый элемент должен иметь столбец с ковариационным числом элементов 1 и 2, а второй столбец с номером ковариации между элементами 1 и 3 и так далее ...).
Второй вопрос, конечно же: что, если у меня будет 1000 элементов; как мне тогда эффективно это сделать, потому что тогда у меня есть 999 ковариационных чисел на элемент и, следовательно, 999 дополнительных столбцов, но также 999 * 25 столбцов, если я рассчитываю их с помощью вышеупомянутой методологии. Итак, как мне выполнить этот расчет для каждого элемента с максимальной эффективностью?






В 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')
Примечание: ковариационная матрица включает ковариацию с самим собой = дисперсию на элемент.