Разворачивание массивов — Flatten
Преобразование flatten извлекает содержимое массивов из записей данных. Обычно оно не требуется для хорошо структурированных данных в DataFrame pandas, но может быть полезно при работе с другими источниками.
Рассмотрим набор данных с распространённой для JSON структурой: некоторые поля каждой записи содержат списки значений.
import numpy as np
rand = np.random.RandomState(0)
def generate_data(N):
mean = rand.randn()
std = rand.rand()
return list(rand.normal(mean, std, N))
data = [
{'label': 'A', 'values': generate_data(20)},
{'label': 'B', 'values': generate_data(30)},
{'label': 'C', 'values': generate_data(40)},
{'label': 'D', 'values': generate_data(50)},
]
Такая структура плохо подходит для представления в виде DataFrame. Это видно, если загрузить данные в pandas:
import pandas as pd
df = pd.DataFrame.from_records(data)
df
Преобразование flatten в Altair извлекает содержимое этих массивов в столбец, на который можно ссылаться в кодировании:
import altair as alt
alt.Chart(df).transform_flatten(
['values']
).mark_tick().encode(
x='values:Q',
y='label:N',
)
Это особенно полезно для подготовки данных, заданных URL-адресом JSON-файла: не нужно сначала загружать их для обработки в pandas.
Параметры преобразования
Метод Chart.transform_flatten основан на классе FlattenTransform, который поддерживает следующие параметры:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
as | array(FieldName) | Имена выходных полей для извлечённых значений массивов. По умолчанию: имя соответствующего поля с массивом. |
flatten | array(FieldName) | Массив из одного или нескольких полей данных, содержащих массивы для разворачивания. Если указано несколько полей, их массивы должны иметь параллельную структуру, желательно одинаковой длины. Если длины различаются, используется самый длинный массив, а отсутствующие элементы дополняются значениями |