Pull to refresh

Comments 14

С тех пор, как я освоил rectangling (https://tidyr.tidyverse.org/articles/rectangle.html) при помощи tidyr, анализ JSON'ов любой сложности перестал представлять какие-либо проблемы.

В приведённом примере с датами операций их можно извлечь примерно одной строкой, а второй строкой преобразовать строки в настоящие даты и построить в соседнем окошке график

Спасибо за наводку! Подскажите, как вы вышли на этот инструмент и сколько потребовалось времени на освоение?

Пример с графиком в соседнем окошке вдохновляет. Хочется оценить трудоёмкость и необходимость погружения

Про R я в принципе знаю достаточно давно, но именно на tidyverse меня навела ChatGPT, так что какие-то базовые вещи я освоил меньше, чем за день. Правда, она довольно быстро перестала помогать и начала мешать, поэтому дальше я, собственно, читал статьи на сайте tidyverse.

Вот, кстати, добрался до компьютера и могу привести те самые две строчки (и масса «обвеса») для ваших данных:

# подключаем библиотеки
library(tidyverse)
library(jsonlite)

# читаем данные
d <- read_json('file.json')
# или можно распарсить JSON прямо из буфера обмена, пользуюсь этим
d <- parse_json(clipboard())

# а теперь, собственно, превращаем history в таблицу
hist <- d$data$accountBalanceHistory$history %>% enframe %>% unnest_wider(value)

# преобразуем даты и рисуем график
# технически это одна строка, просто разбитая :)
hist %>% 
  mutate(across(balanceChangeDate, parse_datetime)) %>% 
  ggplot(aes(x=balanceChangeDate)) + geom_histogram()

Из неочевидных плюшек NSE, о котором упоминал в комментарии ниже, например, возможно такое:

hist %>%
  # разбираем как дату все столбцы, оканчивающиеся на Date
  mutate(across(ends_with("Date"), parse_datetime)) -> hist
  # да, присваивание можно делать не только влево, но и вправо

Можно пощупать прямо в бразуере

Почему именно R? Pandas вроде такое же методы имеет

Из-за того, что называется NSE — non-standart evaluation. R ленив, и вычисляет значения аргументов только при необходимости. Более того, их можно превратить обратно в языковые конструкции и проинтерпретировать иначе. В итоге каждая функция может иметь свой мини-синтаксис для аргументов. Потенциально это может, конечно, вести к хаосу, но на деле это делает синтаксис яснее и понятнее, например:

df %>% select(starts_with("c"))

оставит только те столбцы, имена которых начинаются с c , позволяя не перечислять их имена.

Ну и pipe-оператор, действующий так:

a %>% f(b, c) %>% g(n)
# g(f(a, b, c), n)

Из-за этого код получается короче и яснее

Сваггер удобнее таблицы? Ну такое себе...

Из спеки OpenAPI можно сделать таблицу. А вот обратно - фиг.

А что мешает это автоматизировать? Чат-боты это уже умеют.

Но таблицу я могу показать на собрании с другой командой и всем будет понятно, что в интеграции.

У меня получаются массивные таблицы, которые сложно поддерживать в актуальном состоянии. OpenAPI после этапа проектирования передаю на поддержку кодом, и Swagger актуальный после каждой доработки. Поделитесь, как у вас проходит процесс актуализации документации?

А Swagger UI не можете показать? Кмк там интерфейс поудобнее будет, чем "таблица".

Подскажите, каким инструментом пользуетесь, чтобы получить таблицу из OpenAPI?

Генерации простыни на Markdown из спецификации OpenAPI:
npx widdershins specification.yml -o specification.md --expandBody --omitBody --code --summary

Если нужен HTML, то потом:
pandoc specification.md -o specification.html

Предварительно нужно установить npm с widdershins:
npm install -g widdershinsи pandoc:

и pandoc

А excel со встроенным powerquery не устроил? Он и json и XML ест.

Хороший вопрос. Выбрала VSCode из-за дальнейшего пути данных, с которыми работаю. Данные нужно передать разработчику чтобы положить в код, а значит нужно понять, но сильно не менять структуру. Excel выручал, когда я только разбиралась с тем, что хочется получить. VSCode - следующий этап для моих задач

Sign up to leave a comment.