Измерение ковариации в нескольких строках

Я новичок в 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 столбцов, если я рассчитываю их с помощью вышеупомянутой методологии. Итак, как мне выполнить этот расчет для каждого элемента с максимальной эффективностью?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
773
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В 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')

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

Другие вопросы по теме