Рабочий процесс для статистического анализа и написания отчетов - PullRequest
178 голосов
/ 16 сентября 2009

Есть ли у кого-нибудь мудрость в рабочих процессах для анализа данных, связанных с написанием пользовательских отчетов? Вариант использования в основном такой:

  1. Клиент заказывает отчет, в котором используется анализ данных, например, оценка численности населения и соответствующие карты для акватории.

  2. Аналитик загружает некоторые данные, обрабатывает их и сохраняет результат (например, добавление столбца для совокупности на единицу или подмножество данных на основе границ района).

  3. Аналитик анализирует данные, созданные в (2), приближается к своей цели, но видит, что нужно больше данных, и поэтому возвращается к (1).

  4. Повтор полоскания до тех пор, пока таблицы и графики не соответствуют требованиям QA / QC и не удовлетворят клиента.

  5. Написать отчет с таблицами и графикой.

  6. В следующем году счастливый клиент возвращается и хочет получить обновление. Это должно быть так же просто, как обновить вышестоящие данные новой загрузкой (например, получить разрешения на строительство за последний год) и нажать кнопку «ПЕРЕЧИСЛИТЬ», если спецификации не изменятся.

В данный момент я просто запускаю каталог и делаю его как можно лучше. Мне нужен более систематический подход, поэтому я надеюсь, что кто-то это понял ... Я использую сочетание электронных таблиц, инструментов SQL, ARCGIS, R и Unix.

Спасибо!

PS:

Ниже приведен базовый Make-файл, который проверяет зависимости от различных промежуточных наборов данных (w / .RData суффикс) и сценариев (.R суффикс). Make использует временные метки для проверки зависимостей, поэтому, если вы touch ss07por.csv, он увидит, что этот файл новее всех файлов / целей, которые зависят от него, и выполнит заданные сценарии, чтобы соответствующим образом обновить их. Эта работа еще не завершена, включая этап добавления в базу данных SQL и этап создания языка шаблонов, такого как sweave. Обратите внимание, что Make использует вкладки в своем синтаксисе, поэтому прочитайте руководство, прежде чем вырезать и вставить. Наслаждайтесь и оставляйте отзывы!

http://www.gnu.org/software/make/manual/html_node/index.html#Top

R=/home/wsprague/R-2.9.2/bin/R

persondata.RData : ImportData.R ../../DATA/ss07por.csv Functions.R
   $R --slave -f ImportData.R

persondata.Munged.RData : MungeData.R persondata.RData Functions.R
      $R --slave -f MungeData.R

report.txt:  TabulateAndGraph.R persondata.Munged.RData Functions.R
      $R --slave -f TabulateAndGraph.R > report.txt

Ответы [ 14 ]

2 голосов
/ 11 ноября 2017

Я использую шаблоны проектов вместе с R studio, в настоящее время моя содержит следующие папки:

  • info: pdfs, powerpoints, docs ... которые не будут использоваться ни одним скриптом
  • data input: данные, которые будут использоваться моими скриптами, но не генерируются ими
  • data output: данные, сгенерированные моими сценариями для дальнейшего использования, но не в качестве правильного отчета.
  • reports: только файлы, которые фактически будут показаны кому-то еще
  • R: все сценарии R
  • SAS: потому что мне иногда приходится: '(

Я написал пользовательские функции, чтобы вызывать smart_save(x,y) или smart_load(x) для сохранения или загрузки RDS files в папку data output (файлы с именами переменных), поэтому меня не беспокоит paths во время моего анализа.

Пользовательская функция new_project создает нумерованную папку проекта, копирует все файлы из шаблона, переименовывает файл RProj, редактирует вызовы setwd и устанавливает рабочий каталог в новый проект.

Все R скрипты находятся в папке R, структурированной следующим образом:


00_main.R
  • setwd
  • вызывает скрипты от 1 до 5

00_functions.R
  • Все функции и только функции идут туда, если их будет слишком много, я разделю их на несколько, названных как 00_functions_something.R, в частности, если я планирую сделать пакет из некоторых, я выделю их отдельно

00_explore.R
  • куча блоков скриптов, где я тестирую вещи или изучаю свои данные
  • Это единственный файл, где мне разрешено быть грязным.

01_initialize.R
  • Предварительно заполнен вызовом более общего сценария initialize_general.R из папки с моими шаблонами, который загружает пакеты и данные, которые я всегда использую и не возражаю иметь в своем рабочем пространстве
  • загружает 00_functions.R (предварительно заполнено)
  • загружает дополнительные библиотеки
  • установить глобальные переменные

02_load data.R
  • загружает csv/txt xlsx RDS, для каждого типа файла есть предварительно заполненная строка комментария
  • показывает, какие файлы были созданы в рабочей области

03_pull data from DB.R
  • Использует dbplyr для выборки отфильтрованных и сгруппированных таблиц из БД
  • некоторые предварительно заполненные закомментированные строки для установки соединений и выборки.
  • Поддерживайте минимальные операции на стороне клиента
  • Нет операций на стороне сервера вне этого скрипта
  • Показывает, какие файлы были созданы в рабочей области
  • Сохраняет эти переменные, чтобы они могли быстрее загружаться

Как только это будет сделано, я отключу логическое значение query_db, и в следующий раз данные будут перезагружены с RDS.

Может случиться так, что мне придется передавать данные в БД, если это так, я создам дополнительные шаги.


04_Build.R
  • Обработка данных, все самое интересное dplyr / tidyr все идет туда
  • показывает, какие файлы были созданы в рабочей области
  • сохранить эти переменные

Как только это будет сделано, я отключу логическое значение build, и в следующий раз данные будут перезагружены с RDS.


05_Analyse.R
  • Подведите итог, модель ...
  • отчет excel и csv файлы

95_build ppt.R
  • шаблон для отчета PowerPoint с использованием officer

96_prepare markdown.R
  • setwd
  • загрузить данные
  • при необходимости установить параметры уценки
  • render

97_prepare shiny.R
  • setwd
  • загрузить данные
  • установить блестящие параметры, если необходимо
  • runApp

98_Markdown report.Rmd
  • Шаблон отчета

99_Shiny report.Rmd
  • Шаблон приложения
2 голосов
/ 16 сентября 2009

Я добавлю свой голос, чтобы вспыхнуть. Для сложного многоэтапного анализа вы можете использовать makefile для указания различных частей. Может предотвратить повторение всего анализа, если изменилась только одна часть.

2 голосов
/ 16 сентября 2009

Для написания быстрого предварительного отчета или электронного письма коллеге, я считаю, что может быть очень эффективно копировать и вставлять графики в MS Word, электронную почту или вики-страницу - часто лучше всего использовать растровые снимки экрана (например mac, Apple-Shift- (Ctrl) -4). Я думаю, что это недооцененная техника.

Для более окончательного отчета очень важно написание R-функций для простой регенерации всех графиков (в виде файлов). Это займет больше времени, чтобы закодировать это.

Что касается более крупных проблем рабочего процесса, мне нравится ответ Хэдли о перечислении файлов кода / данных для процесса очистки и анализа. Все мои проекты анализа данных имеют схожую структуру.

0 голосов
/ 09 октября 2016

Я также делаю то, что делает Джош Райх, только я делаю это, создавая свои персональные R-пакеты, так как это помогает мне структурировать мой код и данные, а также очень легко делиться ими с другими.

  1. создать мой пакет
  2. нагрузки
  3. чистый
  4. функции
  5. сделать

создание моего пакета: devtools :: create ('имя_пакета')

загрузка и очистка: я создаю сценарии в подпапке data-raw / моего пакета для загрузки, очистки и сохранения полученных в результате объектов данных в пакете с помощью devtools :: use_data (object_name). Затем я компилирую пакет. Отныне вызов библиотеки (имя_пакета) делает эти данные доступными (и они не загружаются до тех пор, пока это не потребуется).

functions: я помещаю функции для своих анализов в подпапку R / моего пакета и экспортирую только те, которые должны вызываться извне (но не вспомогательные функции, которые могут оставаться невидимыми).

do: я создаю скрипт, который использует данные и функции, хранящиеся в моем пакете. (Если анализ нужно выполнить только один раз, я могу также поместить этот сценарий в подпапку data-raw /, запустить его и сохранить результаты в пакете, чтобы сделать его легко доступным.)

...