Как стать автором
Обновить

Комментарии 22

Продолжаем двигать R в массы! :)
Ставьте лайки, подписывайтесь на наш канал.


Кроме шуток. Подход оказался неожиданно простой. Сделать всё, что мы и так делаем, а потом перелопатить это в олдскульный вордовский документ.
Кстати, пакет ReporteRs оказался столь могучим, что может даже взять за осову документа не пустую страницу, а файл-шаблон. Т.е. всякие корпоративные шапочки и т.д.
Область применения может быть самая нестандартная. От вышеописанных отчётов к контрактам, до шаблонов заявления на отпуск. Плохо что ли? Человек залогинился куда-то, считались его данные, вбил даты отпуска, а ему готовый документ сформировался. И это не какой-то космос и высшая математика. Это несколько бесхитростных строчек в коде и общее понимание процесса.
Комментаторам в стиле "А что у вас до сих пор текстовые документы гуляют в организации?" предлагаю сразу обращаться в лигу сексуальных реформ. Да, гуляют и ещё крайне долго будут гулять :)

Активно агитирую знакомых всех возможных профессий поковырять R, активно помогаю немногим неиспугавшимся. Мне кажется, в 2016 года каждый, кто значительную часть работы выполняет на компе, должен если не знать, то хотя бы представлять себе какой-нибудь простой скриптовый язык. Хотя бы потому что после определённого уровня (относительно небольшого) многие ежедневные дела так и начинают кричать тебе: «Автоматизируй меня! Автоматизируй меня!» Ну прада, вот есть у тебя 4 десятка папок, из каждой надо взять файл с одним и тем же шаблоном названия, а они это делают руками. Я прямо физический дискомфорт от этого испытываю.

Учите R.
Я подписываюсь под вашими словами.
Только одна небольшая ремарка: R всё-таки не «какой-нибудь простой скриптовый язык».
Он требует очень серьёзного изучения и принятия его синтаксической парадигмы.
И иногда даже несколько другой парадигмы для хороших пакетов (tidyverse).

Говорю не абстрактно — сам сейчас его изучаю в полный рост, потому что чувствую какая там мощь.
Под «простым» я понимаю порог вхождения. Это не С++ и даже не Питон.
Питон проще :)
Здесь (в R) очень много функциональщины в хорошем смысле этого слова.
Питон — язык, изначально разрабатываемый для удобства, в нём приятно именно писать скрипты.
А в R всё-таки достаточно осталось из его научного прошлого — у учёных немного другой взгляд даже на именование стандартных вещей в программировании.
Если бы не Hadley Wickham, в R по-прежнему было бы «странно» работать программистам, пришедшим с других языков.
Мне кажется, зависит от опыта. Я вот начинал с R, поэтому работа с данными в Питоне (читай: pandas) кажется мне не такой удобной. Я ковыряю сейчас Питон, хотя бы потому что полезно знать несколько инструментов, но для данных всё-таки R и Cpp пока.
Бойтесь луддитов! История повторяется по спирали :)
Очевидно, что после подобного репорта и опытной эксплуатации (месяц-другой), желание оптимизировать ФОТ из теоретической плоскости перейдет в практическую.


Вообще не очевидно. В смысле все очень сильно зависит от руководства. Лет 8 назад, придя на новую работу (с IT, правда, связанную слабо), получил в число своих обязанностей подготовку и составление ежемесячных отчетов (порядка 7-8) по подконтрольным, скажем так, организациям. Ушедшая на повышение коллега убивала на них порядка 2-3 недель в месяц, делая, естественно, все вручную. По сути на этом месте занимались вот этими отчетами и иногда другой работой. На автоматизацию ушло 3 месяца, из которых 2 дня — на написание скриптов и остальное время — на стандартизацию представляемых нам отчетов. Через три месяца процесс сбора и обработки всех данных занимал минут 15, включая выгрузку всего этого хлама с электронной почты. Так вот, к отчетам, созданным «компьютером» руководство отнеслось крайне скептически и (несмотря на то, что скрипты проверяли все, что только можно, и ошибки-пропуски были сведены на нет) попросило меня уделить этому больше внимания (т.е. делать вручную). Итог был прекрасен — я долгое время делал отчеты 15 минут в месяц, а остальное время занимался своими делами, чем вызывал наидичайший баттхерт у коллег. При сдаче, правда, обязательно говорил, что все проверил лично, с калькулятором, да.
Руководству просто нужно было иметь кого-то крайнего, кто подписывается под отчетом. Если он сделан автоматически, то и крайнего найти проблематично. Может отправляющая сторона что-то сделала не так, а может на принимающей антивирус один из файлов удалил.

Естественно, что вопрос можно рассматривать в разных плоскостях. И не всегда красивое технологическое решение принимается наверху.


Другое дело, что в конкретном случае есть еще важный внешний KPI — сокращение ФОТ. И его надо исполнять невзирая на растущий объем задач. И в этом случае звезды сходятся никак не на стороне любителей ручного труда.

Коллеги, а вот чтобы почитать-посмотреть, чтобы это освоить. У меня каждый месяц отчеты по отделу, и я, блин, фигачу его руками(((
Порекомендую Python (в освоении прост, куча библиотек под все случаи жизни, просто пишутся любые парсеры, аналитические скрипты и т.д.). Коллеги выше советовали R, комментировать не стану — не пробовал.
С позволения администрации, выложу парочку ссылок:
— бесплатный онлайн самоучитель — http://pythontutor.ru/
— библиотеки — https://github.com/vinta/awesome-python
— очень крутая либа для работы с Экселем в лайв режиме — https://www.xlwings.org/

а за ссылки большое спасибо. в части стыковки Python <-> Excel оставался на pywin32 и COM модели.

В комментариях к статье про R всё-так рискну предложить ресурс R :)
RStudio Online learning

Антон, в тексте я привел ссылки на пакет ReporteR.
А про сам R подробно было написано в предыдущих публикациях, можно поглядеть в них.


Там же написано, почему R, а не Python. По совокупности возможностей. Python — прекрасный язык, но 10 лет попыток прикрутить его для полноценной работы с данными каждый раз натыкались на массовое применение изоленты. А еще дилемма Python 2 или 3. Она вроде бы как закончилась недавно, но для меня это уже слишком поздно, поскольку я нашел ответы на все возникающие вопросы в рамках экосистемы R.

1. Так а где код? Интресно все же решение посомтреть вживую
2. Есть ли такой пакет ReporteRs для Python?

Отвечу в обратном порядке.


  1. По поводу Python не скажу.
  2. По поводу кода — загрузка данных и вычисления SLA слишком специфичны и индивидуальны, чтобы тут приводить. А формирование самого файла ниже (полная форма закомменчена, а сокращённая через пайпы внизу)

Кусок кода для формирования word документа
################################################################## Формируем шапку документа
# # Создаём болванчик ворд документа
# doc <- docx()
# # Название документа. Жирненькое, сдвинутое в центр.
# doc <- addParagraph(doc,
#                     pot(doc_title, format = textBold()),
#                     par.properties = parProperties(text.align = 'center'))
# 
# # Добавляем параграф с текстом про даты, затем со статичным текстом
# doc <- addParagraph(doc, dates_text)
# doc <- addParagraph(doc, my_text)
# 
# 
# # Добавляем содержание
# doc <- addTitle(doc, "Содержание")
# doc <- addTOC(doc)
# doc <- addPageBreak(doc) # Перенос на следующую страницу
# 
# 
# ######################################### Первый блок данных
# # делаем заголовок первого уровня
# doc <- addTitle(doc, value = "Устранение ТТ")
# 
# 
# ######################################### Формируем таблицу
# doc <- addFlexTable(doc, MyFTable)
# 
# ########################################### Итого для таблицы ##########################
# doc <- addParagraph(doc, pot(total_text, format = textBold()))
# doc <- addPageBreak(doc) # Разрыв страницы
# 
# 
# ########################################## Второй блок данных
# # делаем заголовок первого уровня
# doc <- addTitle(doc, value = "Проведённые плановые работы")

########################### Сокращённая форма записи
doc <- docx() %>%
  addParagraph(pot(doc_title, format = textBold()),
               par.properties = parProperties(text.align = 'center')) %>%
  addParagraph(dates_text) %>%
  addParagraph(my_text) %>%
  addTitle("Содержание") %>%
  addTOC() %>%
  addPageBreak() %>%
  addTitle("Устранение ТТ") %>%
  addFlexTable(MyFTable) %>%
  addParagraph(pot(total_text, format = textBold())) %>%
  addPageBreak() %>%
  addTitle("Проведённые плановые работы")

doc_title, dates_text, my_text , total_text — текст, который формируется заранее (оглавление, описание ГК и другие формальные части отчёта)
MyFTable — заготовленная заранее таблица, сформированная из обычного датафрейма data. Формирование показано ниже


Формирвоание MyTable
MyFTable <- data %>% 
  vanilla.table %>%
  setZebraStyle(odd = '#eeeeee', even = 'white')

После того, как сформировали переменную doc, которая и содержит нужный нам документ — надо его как-то вывести Пользователю. Мы это сделали через DownloadHandler и опубликовали через Shiny Server.


Формируем элемент, содержащий нужный нам файл и генерим имя для этого файла


Кусок кода из server.R
# Формируем элемент, выгружающий нужный нам документ
output$downloadData <- downloadHandler(
    filename = function() {
      paste("отчёт-такой-то-", Sys.Date(), ".docx", sep="")
    },
    content = function(file) {
      writeDoc(doc, file) # Функция для сохранения файла в docx формате
    }
  )

В удобное нам место вставляем кнопку для выгрузки этих данных


Кусок кода из ui.R
downloadButton("downloadData", "Сформировать отчёт в формате docx", class = "btn-primary")

Также мы ещё вывели те же самые данные для Пользователя через библиотеку DT, чтобы он мог заранее увидеть, что будет в его отчёте. Но это тема отдельной интересной статьи :)

А как часто бывают случаи SLA, отличные от высокого?

Не совсем понятен вопрос. Если про правила расчета, то там месячный sla с различными пороговыми значениями, а композитная величина потом преобразуется в штрафной коэффициент.

прошу прощения, упустил картинку. Там указан SLA по тикету, а есть еще композитный SLA по услугам, включенным в рамочный контракт. По тикетам случаи бывают, но, как обычно миллион гибких уровней трансформируется в 3: "все бросили и побежали", "покурю и начну заниматься", "посмотрим завтра".

Отвечу, как всё у нас.
SLA подразумевает просто время устранения. В данном контракте особенность предмета контракта, что там почти весь SLA "Высокий".
Но сути это особенно не меняет. Берётся время начала работы, время окончания, вычитаются какие-то задержки со стороны Заказчика (если они имеются), сравнивается со значением SLA (вошло не вошло).
За кадром остался момент итогового отчёта. Помимо SLA каждого отдельного тикета — есть ещё общий SLA, который прописан, как "Общее время, на которое суммарно просрочены все тикеты". Оно для разных уровней SLA тоже разное. Но оно тоже считается не сложно. Потом в итоговый отчёт идёт помимо таблицы, что на скриншоте в статье, общая таблица.
Если есть более конкретные вопросы — пишите. Попробуем посмотреть на досуге.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации