Шаблон:GREL clue
Материал из Поле цифровой дидактики
| Контекст: что хотим сделать | Где и в каком режиме | Пример Expression (GREL) |
|---|---|---|
| Преобразовать текстовую дату в тип Date (для временных рядов) | Меню столбца с датой → Edit cells → Common transforms → To date (выбор GREL не нужен, но важно понимать, что OpenRefine внутри применяет преобразование типа) [datacarpentry.github](https://datacarpentry.github.io/openrefine-socialsci/02-working-with-openrefine.html) | (автоматическое преобразование ISO‑строки, например `"2022-07-06T06:37:06Z"`)
— отдельное выражение не вводим |
| Вытащить год из даты в новый столбец (переменная времени \(t\)) | Меню столбца с датой → Edit column → Add column based on this column… → язык: GREL | value.toDate().toString("yyyy")
Создаёт столбец `year` с годом, используемым как временной индекс |
| Построить строковое представление «год‑месяц» (для месячных рядов) | Меню столбца с датой → Add column based on this column… | value.toDate().toString("yyyy-MM")
Например, "2024-03" |
| Очистить пробелы в начале/конце и узнать длину строки | Меню столбца с текстом → Edit cells → Transform… | value.trim().length()
Полезно для диагностики «грязных» строк, где есть лишние пробелы |
| Заменить подстроку (очистка категорий) | Меню столбца → Edit cells → Transform… | value.replace("old","new")
Например, объединить разные варианты написания категорий |
| Объединить значения двух столбцов (конструирование идентификатора панели) | Меню любого из столбцов → Edit column → Add column based on this column… | cells["user"].value + "_" + cells["board_id"].value
Создаёт composite key вида "user_board", удобный для группировок |
| Превратить JSON‑массив в строку с разделителем (подготовка к Split multi-valued cells) | Меню столбца с массивом (например, idBoards) → Edit cells → Transform… | value.join("|")
После этого используем Edit cells → Split multi-valued cells… с разделителем |
| Посчитать количество строк с той же парой user–board (агрегация по ключу) | В режиме Rows, любой столбец → Edit column → Add column based on this column… | length(
filter(
rows,
r,
r.cells["user"].value == cells["user"].value &&
r.cells["board_id"].value == cells["board_id"].value
)
)
Даёт частоту пары (аналог COUNT(*) GROUP BY user, board_id) |
| Посчитать сумму числового показателя по user–board (например, events) | Аналогично: Add column based on this column…, предварительно столбец events → To number | sum(
forEach(
filter(
rows,
r,
r.cells["user"].value == cells["user"].value &&
r.cells["board_id"].value == cells["board_id"].value
),
r, r.cells["events"].value
)
)
Аналог SUM(events) GROUP BY user, board_id |
| Фильтровать строки, где значение содержит подстроку (кастомный facet) | Меню столбца → Facet → Custom text facet… | value.contains("wiki_edit")
Возвращает true/false для фасета, удобно для выделения определённых типов событий |
