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