Чтение значений из столбца в переменную и последующее коррелирование с использованием Python

Вопрос или проблема

Я хочу иметь возможность коррелировать значения из различных идентификаторов, где даты совпадают.

Данные выглядят примерно так;

ID      Время(сек)   Дата
AAAA    1            01/01/1990
AAAA    6            02/01/1990
AAAA    5            03/01/1990
AAAA    2            04/01/1990
AAAA    4            05/01/1990
BBBB    2            01/01/1990
BBBB    4            02/01/1990
BBBB    6            03/01/1990
BBBB    3            04/01/1990
CCCC    3            01/01/1990
CCCC    4            02/01/1990
CCCC    1            03/01/1990
CCCC    6            04/01/1990
DDDD    7            01/01/1990
DDDD    4            02/01/1990
DDDD    5            03/01/1990
DDDD    3            04/01/1990

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

ID             КоэффициентКорр
AAAA>BBBB      ????
AAAA>CCCC
AAAA>DDDD
BBBB>CCCC
BBBB>DDDD
CCCC>DDDD

Я считаю, что нужно внести данные из каждого идентификатора в переменную и затем выполнить следующее;

data1.corr(data2)

Если я правильно понимаю, вы можете сделать что-то вроде этого:

In [42]: df
Out[42]:
      ID  Время(сек)        Дата
0   AAAA           1  01/01/1990
1   AAAA           6  02/01/1990
2   AAAA           5  03/01/1990
3   AAAA           2  04/01/1990
4   AAAA           4  05/01/1990
5   BBBB           2  01/01/1990
6   BBBB           4  02/01/1990
7   BBBB           6  03/01/1990
8   BBBB           3  04/01/1990
9   CCCC           3  01/01/1990
10  CCCC           4  02/01/1990
11  CCCC           1  03/01/1990
12  CCCC           6  04/01/1990
13  DDDD           7  01/01/1990
14  DDDD           4  02/01/1990
15  DDDD           5  03/01/1990
16  DDDD           3  04/01/1990

In [43]: df.pivot(index='Дата', columns="ID", values="Время(сек)").corr()
Out[43]:
ID        AAAA      BBBB      CCCC      DDDD
ID
AAAA  1.000000  0.778924 -0.336336 -0.368964
BBBB  0.778924  1.000000 -0.609449 -0.257143
CCCC -0.336336 -0.609449  1.000000 -0.609449
DDDD -0.368964 -0.257143 -0.609449  1.000000

Виртуальный вспомогательный DF:

In [44]: df.pivot(index='Дата', columns="ID", values="Время(сек)")
Out[44]:
ID          AAAA  BBBB  CCCC  DDDD
Дата
01/01/1990   1.0   2.0   3.0   7.0
02/01/1990   6.0   4.0   4.0   4.0
03/01/1990   5.0   6.0   1.0   5.0
04/01/1990   2.0   3.0   6.0   3.0
05/01/1990   4.0   NaN   NaN   NaN

Ответ или решение

Для решения задачи поиска коэффициента корреляции между значениями различных идентификаторов (ID) с совпадающими датами, необходимо выполнить несколько шагов, используя язык программирования Python и библиотеку pandas. Давайте рассмотрим этот процесс более подробно.

Шаг 1: Импорт библиотек и загрузка данных

В первую очередь, нам нужно импортировать нужные библиотеки и загрузить данные в DataFrame. Для начала мы импортируем pandas, а затем создадим DataFrame с вашими данными:

import pandas as pd

data = {
    "ID": ["AAAA", "AAAA", "AAAA", "AAAA", "AAAA", "BBBB", "BBBB", "BBBB", "BBBB", "CCCC", "CCCC", "CCCC", "CCCC", "DDDD", "DDDD", "DDDD", "DDDD"],
    "Time(secs)": [1, 6, 5, 2, 4, 2, 4, 6, 3, 3, 4, 1, 6, 7, 4, 5, 3],
    "Date": ["01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990", "05/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990"]
}

df = pd.DataFrame(data)

# Преобразуем столбец Date в формат даты
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

Шаг 2: Формирование сводной таблицы

Следующий шаг — создание сводной таблицы (pivot table), которая позволит нам собрать данные с совпадающими датами. В этой таблице строки будут представлять даты, а столбцы — уникальные ID, в каждой ячейке будет находиться время:

pivot_df = df.pivot(index='Date', columns='ID', values='Time(secs)')

Шаг 3: Вычисление коэффициента корреляции

Теперь, когда у нас есть сводная таблица, мы можем легко рассчитать коэффициенты корреляции между всеми идентификаторами. Для этого мы используем метод .corr():

correlation_matrix = pivot_df.corr()

Шаг 4: Вывод результатов

Наконец, выводим результаты корреляции в понятном формате. Корреляция будет представлена в виде матрицы, где строка и столбец будут идентификаторами (ID), а значения — коэффициентами корреляции:

print(correlation_matrix)

Пример кода целиком:

В результате, весь код будет выглядеть следующим образом:

import pandas as pd

# Данные
data = {
    "ID": ["AAAA", "AAAA", "AAAA", "AAAA", "AAAA", "BBBB", "BBBB", "BBBB", "BBBB", "CCCC", "CCCC", "CCCC", "CCCC", "DDDD", "DDDD", "DDDD", "DDDD"],
    "Time(secs)": [1, 6, 5, 2, 4, 2, 4, 6, 3, 3, 4, 1, 6, 7, 4, 5, 3],
    "Date": ["01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990", "05/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990",
             "01/01/1990", "02/01/1990", "03/01/1990", "04/01/1990"]
}

df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

# Создание сводной таблицы
pivot_df = df.pivot(index='Date', columns='ID', values='Time(secs)')

# Вычисление коэффициента корреляции
correlation_matrix = pivot_df.corr()

# Печать результатов
print("Коэффициенты корреляции между идентификаторами:")
print(correlation_matrix)

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...