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

172

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

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

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

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

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

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

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

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

Спасибо!

PS:

Ниже приведен базовый Makefile, который проверяет зависимости для разных промежуточных наборов данных (суффикс w/ .RData) и скриптов (суффикс .R). Для использования зависимостей используйте метки времени, поэтому, если вы 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

  • 8
    Боже мой те, кто входит сюда, остерегаются : ответы на этот вопрос были превосходны пять лет назад. Теперь они полностью устарели. В настоящее время я настоятельно рекомендую не следовать ни одному из ответов здесь. Теперь есть гораздо лучшие инструменты. Для начала я сошлюсь на пример проекта с использованием Makefiles и Knitr .
  • 0
    R Ноутбуки , драйверы odbc , git и git lfs - это небеса, посланные для решения этой проблемы.
Теги:
statistics
data-visualization

14 ответов

182
Лучший ответ

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

  • load.R
  • clean.R
  • func.R
  • do.R

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

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

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

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

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

  • 12
    Это действительно хороший рабочий процесс. Я изо всех сил пытался разработать рабочий процесс, и когда я спрашиваю тех, кто окружает меня, они обычно отвечают: «Что? Рабочий процесс? Я так понимаю, они не думают об этом слишком много. Я собираюсь принять модель LCFD рейха.
  • 1
    это довольно близко к моему рабочему процессу, у меня часто есть сценарий импорта, сценарий анализа и сценарий отчетности
Показать ещё 10 комментариев
92

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

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

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

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

  • 0
    Я прокомментировал Makefiles выше, но вы можете посмотреть их - это традиционный язык проверки зависимостей. Также - я собираюсь попробовать изучить ggplot2 - выглядит великолепно!
  • 0
    Мне нравится идея иметь возможность указывать зависимости между файлами, но изучение m4 - большая проблема. Хотелось бы, чтобы что-то вроде raken было написано на R.
Показать ещё 2 комментария
17

Я согласен с другими респондентами: 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}

<<echo=FALSE,fig=TRUE,height=4, width=7>>=
library(quantmod)
getSymbols("PFE", from="2009-06-01")
chartSeries(PFE)
@

\end{frame}


\begin{frame}[fragile]\frametitle{Page 2: table}

<<echo=FALSE,results=tex>>=
library(xtable)
xtable(PFE[1:10,1:4], caption = "PFE")
@

\end{frame}

\end{document}
  • 6
    Не верьте, что отчет Sweave можно воспроизвести, пока вы не протестируете его на чистой машине. Легко иметь неявные внешние зависимости.
16

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

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

  • Подготовьте данные.
  • Подготовьте шаблон отчета.
  • Создайте отчет.

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

library(tools)
library(brew)
brew("population.brew", "population.tex")
texi2dvi("population.tex", pdf = TRUE)
  • 0
    Исправляя небольшую грамматическую ошибку, я испортил адресацию wordpress.com. Так что правильная ссылка - learnr.wordpress.com/2009/09/09/…
13

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

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

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

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

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

7

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

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

7

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

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

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

  • 0
    Хотелось бы увидеть некоторые из этих "Sweave hacks". Это дает мне головную боль!
5

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

Между двумя, вы получите согласованное форматирование текста и рисунков (шрифты и т.д.). С помощью brew это может стать святым граалем поколения отчетов.

  • 0
    В настоящее время pgfSweave находится в «подвешенном состоянии», поскольку разработчики не успели внедрить новый tikzDevice. А пока мы предлагаем использовать tikzDevice из обычных документов Sweave - пользователь просто должен взять на себя ответственность за открытие / закрытие устройства и \ включая {} полученный результат.
  • 0
    @Sharpie: Есть ли какие-либо обновления статуса разработки pgfSweave? Это выглядит великолепно, но, похоже, не работает ни на одной из систем, которые я пробовал.
Показать ещё 2 комментария
4

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

  • 0
    +1 за марку; Тем не менее, я не вижу make несовместимым со Sweave. Скорее, когда я создаю отчеты, звоните Sweave (и другие вещи).
4

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

2

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

2

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

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

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

1

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

  • info: pdfs, powerpoints, docs... которые не будут использоваться никаким script
  • 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
  • куча script фрагментов, где я проверяю вещи или исследую свои данные.
  • Это единственный файл, где мне разрешено быть грязным.

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

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

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

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

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


04_Build.R
  • Перехват данных, все забавные вещи 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
  • Шаблон приложения
0

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

  • создать мой пакет
  • нагрузки
  • чистый
  • Функции
  • сделать

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

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

Функции

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню