Есть ли название для этого типа структурированных данных и как его более эффективно использовать?Python

Программы на Python
Anonymous
Есть ли название для этого типа структурированных данных и как его более эффективно использовать?

Сообщение Anonymous »

Я постараюсь сделать этот вопрос простым, чтобы, надеюсь, эта концепция была применима к другим областям.
Я работаю с наборами сейсмических данных, где N землетрясений регистрируются M сейсмическими станциями. Существует информация о землетрясении (идентификатор землетрясения, магнитуда и т. д.) и информация о конкретной станции (идентификатор станции, частота дискретизации приборов и т. д.). Не все сейсмические станции записывают все землетрясения, поэтому существует разное количество станций, записывающих каждое землетрясение.
В настоящее время я организую эти данные в объекте Pandas DataFrame, по одной строке на каждое землетрясение. Поскольку для каждого землетрясения существует разное количество станций, я сохраняю идентификаторы станций в виде числового массива. Вот простой пример: землетрясения 0001 и 0002 магнитудой 2,1 и 3,1 соответственно. Четыре сейсмические станции: a, b, c и d имеют частоту дискретизации 100, 100, 60 и 60 соответственно.

Код: Выделить всё

import numpy as np
import pandas as pd

events = {
'event_id': ['0001', '0002'],
'mag': [2.1, 3.1],
'station_ids': [np.array(['a', 'c']), np.array(['a', 'b', 'c', 'd'])],
'station_sampling_rate': [np.array([100, 60]), np.array([100, 100, 60, 60])]
}
events = pd.DataFrame(events)
print(events)
что приводит к

Код: Выделить всё

  event_id  mag   station_ids station_sampling_rate
0     0001  2.1        [a, c]             [100, 60]
1     0002  3.1  [a, b, c, d]    [100, 100, 60, 60]
Теперь, когда мне нужна информация о конкретной станции из этого DataFrame, мне нужно либо:
  • Пройти по каждому строку событий, выполнить некоторую проверку и сравнить с существующим каталогом станций (медленно)
  • Создать события таким образом, чтобы они содержали все больше станций -конкретная информация для каждой станции ( становится очень большим) и по-прежнему перебирает каждую строку событий
Метод 1 до сих пор работал у меня, но медленный. Способ 2 кажется пустой тратой ресурсов.
Желаемая структура приведенного выше примера такова:

Код: Выделить всё

  station_id  sampling_rate     event_ids         mag
0          a            100  [0001, 0002]  [2.1, 3.1]
1          b            100        [0002]       [3.1]
2          c             60  [0001, 0002]  [2.1, 3.1]
3          d             60        [0002]       [3.1]
Существует ли эффективный способ структурировать, хранить и преобразовывать эти данные? Кажется, уже должно быть что-то существующее для работы с этим типом данных.
Я попробовал выполнить поиск, но не знаю, как называется эта структура данных и есть ли у нее имя.

Подробнее здесь: https://stackoverflow.com/questions/786 ... fficient-w

Вернуться в «Python»