Рабочий процесс для статистического анализа и составления отчетов

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

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

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

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

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

  5. Напишите отчет, содержащий таблицы и графику.

  6. В следующем году счастливый клиент возвращается и хочет обновления. Это должно быть так же просто, как обновить данные восходящего streamа путем новой загрузки (например, получить разрешения на строительство с прошлого года) и нажать кнопку «RECALCULATE», если спецификации не изменились.

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

Благодаря!

PS:

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

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

 R = / дом / wsprague / R-2.9.2 / bin / R

 persondata.RData: ImportData.R ../../DATA/ss07por.csv Функции.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

Обычно я разбиваю свои проекты на 4 части:

  1. load.R
  2. clean.R
  3. func.R
  4. do.R

load.R: берет на себя загрузку всех необходимых данных. Обычно это короткий файл, считывающий данные из файлов, URL-адресов и / или ODBC. В зависимости от проекта на этом этапе я либо выберу рабочую область, используя save() либо просто сохраню вещи в памяти для следующего шага.

clean.R: Это то, где живет весь уродливый материал – забота о недостающих значениях, слияние кадров данных, обработка выбросов.

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

do.R: Вызывает функции, определенные в func.R, для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки – работа с большими данными, при которых вы не хотите перезагружать данные каждый раз, когда вы делаете изменения на следующий шаг. Кроме того, сохранение моего кода таким образом означает, что я могу вернуться к давно забытому проекту и быстро прочитать load.R и выяснить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

Если вы хотите увидеть несколько примеров, у меня есть несколько небольших (и не очень маленьких) проектов по очистке и анализу данных, доступных в Интернете. В большинстве случаев вы найдете скрипт для загрузки данных, один для его очистки, а некоторые – для исследования и анализа:

  • Детские имена от администрации социального обеспечения
  • Более 30 лет данных по экономии топлива из EPI
  • Большая коллекция данных о жилищном кризисе
  • Рейтинги фильмов от IMDB
  • Данные о продаже домов в районе залива

Недавно я начал нумерацию скриптов, поэтому совершенно очевидно, в каком порядке их следует запускать. (Если я чувствую себя действительно фантазией, я иногда делаю так, чтобы сценарий исследования вызывал сценарий очистки, который, в свою очередь, вызывает сценарий загрузки, каждый из которых выполняет минимальную работу – обычно, проверяя наличие выходных файлов с file.exists Однако, в большинстве случаев это кажется излишним).

Я использую git для всех своих проектов (система управления исходным кодом), поэтому легко взаимодействовать с другими, видеть, что меняется и легко откатывается к предыдущим версиям.

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

Я согласен с другими респондентами: Sweave отлично подходит для написания отчетов с R. И перестройка отчета с обновленными результатами так же просто, как повторное вызов функции Sweave. Он полностью автономный, включая весь анализ, данные и т. Д. И вы можете управлять версиями всего файла.

Я использую плагин StatET для Eclipse для разработки отчетов, а Sweave интегрирован (Eclipse распознает формирование латекса и т. Д.). В Windows это легко использовать MikTEX .

Я бы также добавил, что вы можете создавать красивые отчеты с помощью Beamer . Создание обычного отчета так же просто. Я включил пример ниже, который извлекает данные из Yahoo! и создает диаграмму и таблицу (используя метод квантов). Вы можете создать такой отчет следующим образом:

 Sweave(file = "test.Rnw") 

Вот сам документ Beamer:

 % \documentclass[compress]{beamer} \usepackage{Sweave} \usetheme{PaloAlto} \begin{document} \title{test report} \author{john doe} \date{September 3, 2009} \maketitle \begin{frame}[fragile]\frametitle{Page 1: chart} <>= library(quantmod) getSymbols("PFE", from="2009-06-01") chartSeries(PFE) @ \end{frame} \begin{frame}[fragile]\frametitle{Page 2: table} <>= library(xtable) xtable(PFE[1:10,1:4], caption = "PFE") @ \end{frame} \end{document} 

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

Записи следуют за хорошим рабочим процессом, поэтому стоит прочитать:

  1. Подготовьте данные.
  2. Подготовьте шаблон отчета.
  3. Произведите отчет.

Фактически создание отчета после завершения первых двух шагов очень просто:

 library(tools) library(brew) brew("population.brew", "population.tex") texi2dvi("population.tex", pdf = TRUE) 

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

Создание отчетов: хорошая страtagsя для создания отчетов включает комбинацию Sweave, make и R.

Редактор: Хорошие редакторы для подготовки документов Sweave include:

  • StatET и Eclipse
  • Emacs и ESS
  • Vim и Vim-R
  • R Studio

Организация кода. Что касается организации кода, я нахожу две страtagsи полезными:

  • Прочитайте о процессе анализа (например, ProjectTemplate , идеи Джоша Райха, моя презентация на R Workflow Slides и Video )
  • Изучите примеры отчетов и определите рабочий процесс
    • Примеры Хэдли Уикхема
    • Мои примеры на github
    • Примеры воспроизводимых исследований, перечисленных в Cross Validated

Я использую Sweave для этой части отчета, но я также слышал о пакете для пива , хотя я еще не изучил его.

По сути, у меня есть ряд опросов, для которых я составляю сводную статистику. Те же обследования, одни и те же отчеты каждый раз. Я создал шаблон Sweave для отчетов (что требует немного работы). Но как только работа будет завершена, у меня есть отдельный сценарий R, который позволяет мне указывать новые данные. Я нажимаю «Go», Sweave выгружает несколько файлов с отметкой .tex, и я запускаю небольшой скрипт Python для всех pdflatex. Мой предшественник проводил ~ 6 недель в год по этим отчетам; Я провожу около 3 дней (в основном по данным очистки, аварийные символы опасны).

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

Я собираюсь предложить что-то в другом направлении от других отправителей, основываясь на том факте, что вы конкретно задавали вопрос о рабочем процессе проекта , а не о инструментах . Предполагая, что вы относительно довольны своей моделью создания документов, похоже, что ваши проблемы действительно могут быть сосредоточены вокруг проблем отслеживания версий, управления активами и процесса просмотра / публикации.

Если это звучит корректно, я бы предложил изучить интегрированный инструмент для управления продажами / источником данных, например Redmine . Сохранение связанных артефактов проекта, таких как ожидающие решения задачи, streamи обсуждений и файлы данных с версиями / кодами вместе, может быть очень полезной даже для проектов, не выходящих за frameworks традиционного «программирования» bailiwick.

Согласился, что Sweave – это путь, который можно использовать для создания таблиц LaTeX. Хотя я не потратил слишком много времени на работу с ними, недавно выпущенный пакет tikzDevice выглядит очень многообещающим, особенно в сочетании с pgfSweave (который, насколько мне известно, доступен только на rforge.net в это время, есть ссылку на r-forge оттуда, но на данный момент он не отвечает за меня).

Между ними вы получите согласованное форматирование текста и цифр (шрифты и т. Д.). С завариванием они могут стать святым граалем поколения отчетов.

На более «мета-уровне» вам может быть интересна модель процесса CRISP-DM .

«make» отлично, потому что (1) вы можете использовать его для всей своей работы на любом языке (в отличие, скажем, Sweave and Brew), (2) он очень мощный (достаточно для создания всего программного обеспечения на вашем компьютере) и (3) он избегает повторения работы. Этот последний момент очень важен для меня, потому что большая часть работы идет медленно; когда я латексный файл, мне нравится видеть результат за несколько секунд, а не тот час, который потребуется для воссоздания фигур.

Для написания быстрого предварительного отчета или электронной почты коллеге, я считаю, что очень удобно копировать и вставлять графики в MS Word или электронную почту или страницу википедии – чаще всего это растровый снимок экрана (например, на Mac, Apple -Shift- (CTRL) -4). Я думаю, что это недооцениваемая техника.

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

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

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

Я использую шаблоны проектов вместе с 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 и из smart_load(x) (файлы с именами переменных), поэтому во время моего анализа меня не беспокоят paths ,

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

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


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

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

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

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

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

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

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

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


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

Как только это будет сделано после того, как я отключу build boolean, и данные будут перезагружены из 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 
  • Шаблон приложения

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

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

создание моего пакета: devtools :: create (‘package_name’)

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

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

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

  • Почему я получаю «алгоритм не сходился» и «устанавливал prob численно 0 или 1» предупреждения с помощью glm?
  • Вычисление среднего арифметического (один тип среднего) в Python
  • Есть ли встроенная функция для поиска режима?
  • Лучшая библиотека для статистики на C ++?
  • Присоединение полиномов к данным
  • Interesting Posts

    Разница между ++ Var и Var ++

    Нужно ли мне бить сердце, чтобы открыть TCP-соединение?

    Как ограничить скорость передачи данных в сети Windows?

    Может ли установочный образ быть записан на жесткий диск?

    Autohotkey – переназначить сплошную клавишу

    Удаление вызова журнала с помощью proguard

    Моя камера Android Uri возвращает нулевое значение, но исправление Samsung на месте, помощь?

    Java – прокрутите до определенного текста внутри JTextArea

    CMake: Как настроить зависимости источника, библиотеки и CMakeLists.txt?

    Android Studio: не удалось выполнить выполнение gradleиента, причина пуста

    Android Java – Joda Date работает медленно

    Какие методы можно использовать для ускорения времени компиляции C ++?

    Есть ли способ скрыть системную панель в Android 3.0? Это внутреннее устройство, и я управляю навигацией

    Как и когда использовать `async` и` await`

    Entity Framework / SQL2008 – Как автоматически обновлять поля LastModified для объектов?

    Давайте будем гением компьютера.