Рабочий процесс для статистического анализа и написания отчетов - 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 ]

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

Я обычно разбиваю свои проекты на 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, чтобы определить, какой анализ был выполнен. 1023 *

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

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

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

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

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

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

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

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

прост в использовании.

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

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}
16 голосов
/ 17 сентября 2009

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

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

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

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

library(tools)
library(brew)
brew("population.brew", "population.tex")
texi2dvi("population.tex", pdf = TRUE)
14 голосов
/ 29 декабря 2010

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

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

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

  • StatET и Eclipse
  • Emacs и ESS
  • Вим и Вим-Р
  • R Studio

Код организации: С точки зрения организации кода, я считаю полезными две стратегии:

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

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

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

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

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

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

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

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

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

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

4 голосов
/ 04 июня 2010

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

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

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

...