Рабочий процесс для статистического анализа и составления отчетов
есть ли у кого-нибудь мудрость в отношении рабочих процессов для анализа данных, связанных с написанием пользовательских отчетов? Прецедент в основном таков:
клиент заказывает отчет, который использует анализ данных, например, оценку населения и соответствующие карты для водного района.
аналитик загружает некоторые данные, munges данные и сохраняет результат (например, добавление столбца для населения на единицу, или подмножество данных на основе района границы.)
аналитик анализирует данные, созданные в (2), приближается к своей цели, но видит, что нужно больше данных и поэтому возвращается к (1).
повторите полоскание, пока таблицы и графики не встретят QA/QC и не удовлетворят клиента.
писать отчет, включающий таблицы и графики.
в следующем году, счастливый клиент возвращается и хочет обновить. Это должно быть так же просто, как обновление восходящие данные по новой загрузке (например, получить разрешения на строительство с прошлого года) и нажав кнопку "пересчитать", если спецификации не изменятся.
на данный момент я просто запускаю каталог и ad-hoc это лучшее, что я могу. Я хотел бы более системный подход, поэтому я надеюсь, что кто-то понял это... Я использую сочетание электронных таблиц, 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=/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 ответов:
обычно я разбиваю свои проекты на 4 части:
- загрузить.R
- очистить.R
- func.R
- сделать.R
загрузить.R: заботится о загрузке всех необходимых данных. Обычно это короткий файл, считывающий данные из файлов, URL-адресов и / или ODBC. В зависимости от проекта на данный момент я либо выпишу рабочее пространство с помощью
save()
или просто держать вещи в памяти для следующего шага.очистить.R: это где все уродливые вещи живут-заботясь о пропущенных значениях, объединяя фреймы данных, обрабатывая выбросы.
func.Р: содержит все функции, необходимые для выполнения фактического анализа.
source()
' ing этот файл не должен иметь никаких побочных эффектов, кроме загрузки определений функций. Это означает, что вы можете изменить этот файл и перезагрузить его, не возвращаясь к повторным шагам 1 и 2, которые могут занять много времени для больших наборов данных.do.R: вызывает определенные функции в func.R для выполнения анализа и создания диаграмм и таблиц.
основной мотивацией для этой настройки является работа с большими данными, в результате чего вы не хотите перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, сохранение моего кода в таком виде означает, что я могу вернуться к давно забытому проекту и быстро прочитать нагрузку.R и выясните, какие данные мне нужно обновить, а затем посмотрите на do.R чтобы выяснить, какой анализ был выполнен.
Если вы хотите увидеть некоторые примеры, у меня есть несколько небольших (и не очень маленьких) проектов по очистке и анализу данных, доступных в интернете. В большинстве из них вы найдете скрипт для загрузки данных, один, чтобы очистить его, и несколько, чтобы сделать исследование и анализ:
- детские имена от Администрации социального обеспечения
- 30+ лет данных по экономии топлива от EPI
- большой сбор данных о жилье кризис
- рейтинги фильмов из IMDB
- данные о продаже дома в районе залива
недавно я начал нумерацию скриптов, так что совершенно очевидно, в каком порядке они должны быть запущены. (Если я чувствую себя действительно причудливым, я иногда сделаю так, что сценарий исследования вызовет сценарий очистки, который, в свою очередь, вызывает сценарий загрузки, каждый из которых выполняет минимальную необходимую работу-обычно путем проверки наличие выходных файлов с
file.exists
. Однако в большинстве случаев это кажется излишним).Я использую git для всех моих проектов (система управления исходным кодом), поэтому его легко сотрудничать с другими, посмотреть, что меняется и легко откатиться к предыдущим версиям.
Если я делаю официальный отчет, я обычно держу R и latex отдельно, но я всегда уверен, что могу
source
мой R-код для создания всего кода и вывода, который мне нужен для отчета. Для видов отчетов, которые Я делаю, я нахожу это проще и чище, чем работать с латексом.
Я согласен с другими респондентами: Sweave отлично подходит для написания отчета с R. и восстановление отчета с обновленными результатами так же просто, как повторный вызов функции Sweave. Он полностью самодостаточен, включая весь анализ, данные и т. д. И вы можете контролировать версию всего файла.
Я использую плагин StatET для Eclipse для разработки отчетов, а Sweave интегрирован (Eclipse распознает формирование латекса и т. д.). На Окнах,Это простой в использовании Программы.
Я бы еще добавил, что вы можете создавать красивые отчеты с помощью Beamer. Создание обычного отчета так же просто. Я включил пример ниже, который извлекает данные из Yahoo! и создает диаграмму и таблицу (с помощью quantmod). Вы можете построить этот отчет следующим образом:
Sweave(file = "test.Rnw")
вот сам документ Бимер:
% \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}
Я просто хотел добавить, если кто не слышал, что в блоге learnr есть отличный пост о создании повторяющихся отчетов С пакет пива Джеффри Хорнера. Мэтт и Кевин оба упомянули Брю выше. На самом деле я не очень много его использовал.
записи следуют хороший рабочий процесс, так что это хорошо стоит прочитать:
- подготовить данные.
- подготовка шаблона отчета.
- произвести доклад.
на самом деле создание отчета после завершения первых двух шагов очень просто:
library(tools) library(brew) brew("population.brew", "population.tex") texi2dvi("population.tex", pdf = TRUE)
для создания пользовательских отчетов я счел полезным включить многие из существующих советов, предложенных здесь.
формирование отчетов: Хорошая стратегия для создания отчетов включает в себя сочетание Sweave, make и R.
редактор: Хорошие редакторы для подготовки Sweave документов включают в себя:
- StatET и Eclipse
- Emacs и ESS
- ВИМ и Вим-Р
- R Студия
организация код: С точки зрения организации кода, я нахожу две стратегии полезными:
- читать о рабочем процессе анализа (например, ProjectTemplate, Идеи Джоша Райха, моя собственная презентация на R workflow горки и видео)
- изучите примеры отчетов и определите рабочий процесс
Я использую Sweave для отчетной стороны этого, но я также слышал о квас пакет-хотя я еще не заглядывал в него.
по сути, у меня есть ряд обследований, для которых я создаю сводную статистику. Же опросы, отчеты в любое время. Я построил шаблон Sweave для отчетов (что требует немного работы). Но как только работа будет выполнена, у меня есть отдельный скрипт R, который позволяет мне указывать на новые данные. Я нажимаю " Go", Sweave выводит несколько десятков .tex файлы, и я запускаю небольшой скрипт Python для pdflatex их всех. Мой предшественник потратил ~6 недель каждый год на эти отчеты; я трачу около 3 дней (в основном на очистку данных; escape-символы опасны).
очень возможно, что сейчас есть лучшие подходы, но если вы решите пойти по этому маршруту, дайте мне знать - я собирался поставить некоторые из моих потных хаков, и это было бы хорошим ударом в штаны, чтобы сделать это.
Я собираюсь предложить что-то в другом направлении от других отправителей, основываясь на том, что вы спросили конкретно о рабочего проекта, а не инструменты. Предполагая, что вы относительно довольны своей моделью производства документов, похоже, что ваши проблемы действительно могут быть сосредоточены больше на проблемах отслеживания версий, управления активами и процесса обзора/публикации.
Если это звучит правильно, я бы предложил изучение интегрированного инструмента продажи билетов / управления источниками / документации, такого как в Redmine. Хранение связанных артефактов проекта, таких как отложенные задачи, темы обсуждения и файлы версионных данных/кода, вместе может быть большим подспорьем даже для проектов, находящихся далеко за пределами традиционного "программирования" bailiwick.
согласился, что Swave-это путь, с xtable для создания таблиц LaTeX. Хотя я не провел слишком много времени, работая с ними, недавно выпущенный tikzDevice пакет выглядит действительно многообещающим, особенно в сочетании с pgfSweave (который, насколько я знаю, доступен только на rforge.net в это время-есть ссылка на r-forge оттуда, но она не отвечает за меня в данный момент).
между двумя, вы получите согласованное форматирование между текстом и рисунками (шрифты и т. д.). С brew они могли бы стать святым Граалем генерации отчетов.
на более "мета" уровне, вы можете быть заинтересованы в CRISP-DM модели процесса.
"make" отлично подходит, потому что (1) Вы можете использовать его для всей своей работы на любом языке (в отличие, скажем, Sweave и Brew), (2) он очень мощный (достаточно, чтобы построить все программное обеспечение на вашем компьютере), и (3) он избегает повторения работы. Этот последний пункт важен для меня, потому что большая часть работы идет медленно; когда я латекс файл, я хотел бы увидеть результат в течение нескольких секунд, а не час, который потребуется, чтобы воссоздать цифры.
для написания быстрого предварительного отчета или электронной почты коллеге Я считаю, что очень эффективно копировать и вставлять графики в MS Word или электронную почту или вики-страницу-часто лучше всего использовать растровый скриншот (например, на mac, Apple-Shift-(Ctrl)-4). Я думаю, что это недооцененная техника.
для более окончательного отчета очень важно написать функции R, чтобы легко восстановить все графики (как файлы). Это займет больше времени, чтобы закодировать это.
на больших проблемы с рабочим процессом, мне нравится ответ Хэдли на перечисление файлов кода/данных для потока очистки и анализа. Все мои проекты анализа данных имеют схожую структуру.
Я добавлю свой голос к sweave. Для сложного, многоступенчатого анализа вы можете использовать makefile для указания различных частей. Может предотвратить повторение всего анализа, если изменилась только одна часть.
я использую шаблоны проектов вместе с R studio, в настоящее время мой содержит следующие папки:
info
: PDF, 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
, есть предварительно заполненная комментированная строка для каждого типа файла- показывает, какие файлы hava были созданы в рабочей области
03_pull data from DB.R
- использует
dbplyr
для извлечения отфильтрованных и сгруппированных таблиц из БД- некоторые предварительно заполненные комментарии линии для настройки соединений и выборки.
- сохранить операции на стороне клиента до минимума
- никаких операций на стороне сервера вне этого скрипта
- показывает, какие файлы были созданы в рабочей области
- сохраняет эти переменные, чтобы они могли быть перезагружены быстрее
как только это будет сделано, как только я выключу
query_db
boolean и данные будут перезагружены изRDS
в следующий раз.может случиться, что у меня есть чтобы повторно подать данные в DBs, если это так, я создам дополнительные шаги.
04_Build.R
- данные пререкания, все самое интересное
dplyr
/tidyr
вещи идет- показывает, какие файлы были созданы в рабочей области
- сохранить эти переменные
как только это будет сделано, как только я выключу
build
boolean и данные будут перезагружены изRDS
в следующий раз.
05_Analyse.R
- обобщить, модель...
- отчет
excel
иcsv
файлы
95_build ppt.R
- шаблон для отчета powerpoint с помощью
officer
96_prepare markdown.R
setwd
- загрузка данных
- при необходимости установите параметры markdown
render
97_prepare shiny.R
setwd
- загрузка данных
- установите блестящие параметры, если нужно
runApp
98_Markdown report.Rmd
- шаблон отчета
99_Shiny report.Rmd
- приложение шаблон
Я также делаю то, что делает Джош Райх, только я делаю это, создавая свои личные R-пакеты, поскольку это помогает мне структурировать мой код и данные, а также довольно легко делиться ими с другими.
- создать мой пакет
- загрузить
- очистить
- функции
- do
создание моего пакета: devtools:: create ('package_name')
load and clean: я создаю скрипты в data-raw / подпапке моего пакета для загрузка, очистка и хранение результирующих объектов данных в пакете с помощью devtools:: use_data(object_name). Затем я компилирую пакет. Отныне вызов библиотеки (имя_пакета) делает эти данные доступными (и они не загружаются до необходимости).
функции: я помещаю функции для моего анализа в R/ подпапку моего пакета и экспортирую только те, которые должны быть вызваны извне (а не вспомогательные функции, которые могут оставаться невидимыми).
do: I создайте скрипт, который использует данные и функции, хранящиеся в моем пакете. (Если анализ нужно выполнить только один раз, я могу поместить этот скрипт также в папку data-raw/ subfolder, запустить его и сохранить результаты в пакете, чтобы сделать его легко доступным.)