Есть ли у кого-нибудь мудрость в рабочих процессах для анализа данных, связанных с написанием пользовательских отчетов? Вариант использования в основном такой:
Клиент заказывает отчет, в котором используется анализ данных, например, оценка численности населения и соответствующие карты для акватории.
Аналитик загружает некоторые данные, анализирует их и сохраняет результат (например, добавление столбца для совокупности на единицу или подмножество данных на основе границ района).
Аналитик анализирует данные, созданные в (2), приближается к своей цели, но видит, что нужно больше данных, и поэтому возвращается к (1).
Промывка повторяется до тех пор, пока таблицы и графики не соответствуют требованиям QA / QC и не удовлетворят клиента.
Написать отчет, включающий таблицы и графики.
В следующем году счастливый клиент возвращается и хочет обновления. Это должно быть так же просто, как обновить исходные данные новой загрузкой (например, получить разрешения на строительство за последний год) и нажать кнопку «ПЕРЕЧИСЛИТЬ», если спецификации не изменятся.
На данный момент я просто запускаю каталог и делаю его как можно лучше. Мне нужен более систематический подход, поэтому я надеюсь, что кто-то это понял ... Я использую сочетание электронных таблиц, инструментов SQL, ARCGIS, R и Unix.
Спасибо!
PS:
Ниже приведен основной Makefile, который проверяет зависимости между различными промежуточными наборами данных (с .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 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
источник
Ответы:
Я обычно разбиваю свои проекты на 4 части:
load.R: заботится о загрузке всех необходимых данных. Обычно это короткий файл, считывающий данные из файлов, URL-адресов и / или ODBC. В зависимости от проекта на данном этапе я либо запишу рабочее пространство, используя,
save()
либо просто оставлю вещи в памяти для следующего шага.clean.R: Это то место, где живут все эти уродливые вещи - забота о пропущенных значениях, объединение фреймов данных, обработка выбросов.
func.R: содержит все функции, необходимые для фактического анализа.
source()
Использование этого файла не должно иметь никаких побочных эффектов, кроме загрузки определений функций. Это означает, что вы можете изменить этот файл и перезагрузить его, не возвращаясь к повторным шагам 1 и 2, которые могут занять много времени для работы с большими наборами данных.do.R: вызывает функции, определенные в func.R, для анализа и создания диаграмм и таблиц.
Основной мотивацией для этой настройки является работа с большими данными, при которой вам не нужно загружать данные каждый раз, когда вы вносите изменения в последующий шаг. Кроме того, благодаря тому, что мой код разделен на части, я могу вернуться к давно забытому проекту и быстро прочитать load.R и выяснить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.
источник
Если вы хотите увидеть несколько примеров, у меня есть несколько небольших (и не очень) проектов по очистке и анализу данных, доступных онлайн. В большинстве случаев вы найдете скрипт для загрузки данных, один для его очистки и несколько для исследования и анализа:
Недавно я начал нумерацию скриптов, поэтому совершенно очевидно, в каком порядке они должны выполняться. (Если мне действительно хочется, я иногда сделаю так, чтобы скрипт исследования вызывал скрипт очистки, который, в свою очередь, вызывает скрипт загрузки, каждый из которых выполняет минимально необходимую работу - обычно проверяя наличие выходных файлов с помощью
file.exists
. Тем не менее, в большинстве случаев это кажется излишним).Я использую git для всех своих проектов (система управления исходным кодом), поэтому легко сотрудничать с другими, видеть, что меняется, и легко откатываться до предыдущих версий.
Если я делаю официальный отчет, я обычно держу R и latex отдельно, но я всегда удостоверяюсь, что могу использовать
source
свой код R для создания всего кода и вывода, которые мне нужны для отчета. Для отчетов, которые я делаю, я считаю это проще и чище, чем работать с латексом.источник
source("blah.R")
, проверьте , существуют ли искомая переменная (s) первый:if (!exists("foo")) { source("blah.R") }
. Это позволяет избежать повторного запуска зависимостей, если они уже запущены.Я согласен с другими респондентами: Sweave отлично подходит для написания отчетов с R. А перестроить отчет с обновленными результатами так же просто, как повторно вызвать функцию Sweave. Он полностью автономен, включая весь анализ, данные и т. Д. И вы можете контролировать версию всего файла.
Я использую плагин StatET для Eclipse для разработки отчетов, и Sweave интегрирован (Eclipse распознает формирование латекса и т. Д.). В Windows легко использовать MikTEX .
Я также хотел бы добавить, что вы можете создавать прекрасные отчеты с Beamer . Создать обычный отчет так же просто. Ниже приведен пример, который извлекает данные из Yahoo! и создает диаграмму и таблицу (используя QuantMod). Вы можете построить этот отчет так:
Вот сам документ Beamer:
источник
Я просто хотел добавить, на случай, если кто-то пропустит это, что в блоге учащегося есть отличный пост о создании повторяющихся отчетов с пакетом варки Джеффри Хорнера . Мэтт и Кевин оба упомянули о варке выше Я на самом деле не использовал это сам.
Записи следуют за хорошим рабочим процессом, поэтому его стоит прочитать:
На самом деле создание отчета после завершения первых двух шагов очень просто:
источник
Для создания пользовательских отчетов я счел полезным включить многие из существующих советов, предложенных здесь.
Генерация отчетов. Хорошая стратегия создания отчетов включает комбинацию Sweave, make и R.
Редактор: Хорошие редакторы для подготовки документов Sweave включают в себя:
Организация кода. С точки зрения организации кода я считаю полезными две стратегии:
источник
Я использую Sweave для создания отчетов, но я также слышал о пакете варева - хотя я еще не изучал его.
По сути, у меня есть ряд опросов, по которым я составляю сводную статистику. Те же опросы, те же отчеты каждый раз. Я создал шаблон Sweave для отчетов (который требует немного работы). Но как только работа завершена, у меня есть отдельный R-скрипт, который позволяет мне указать новые данные. Я нажимаю «Go», Sweave выгружает несколько файлов .tex, и запускаю небольшой скрипт на Python, чтобы pdflatex их всех. Мой предшественник тратил ~ 6 недель каждый год на эти сообщения; Я трачу около 3 дней (в основном на очистку данных; экранирующие символы опасны).
Вполне возможно, что сейчас есть более подходящие подходы, но если вы решите пойти по этому пути, дайте мне знать - я собирался поднять некоторые из моих хаков Свив, и это было бы хорошим ударом в штаны. так.
источник
Я собираюсь предложить что-то в другом направлении от других авторов, основываясь на том факте, что вы спрашивали конкретно о рабочем процессе проекта , а не об инструментах . Предполагая, что вы относительно довольны своей моделью производства документов, похоже, что ваши проблемы действительно могут быть сосредоточены вокруг вопросов отслеживания версий, управления активами и процесса рецензирования / публикации.
Если это звучит правильно, я бы посоветовал обратиться к интегрированному инструменту управления билетами / исходным кодом / документации, например, Redmine . Хранение связанных артефактов проекта, таких как отложенные задачи, потоки обсуждений и версионные файлы данных / кода, может быть очень полезным даже для проектов, выходящих далеко за рамки традиционного «программирования».
источник
Договорились, что Sweave - это путь, с xtable для генерации таблиц LaTeX. Хотя я не потратил много времени на работу с ними, недавно выпущенный пакет tikzDevice выглядит действительно многообещающе, особенно в сочетании с pgfSweave. (который, насколько я знаю, в настоящее время доступен только на rforge.net - есть ссылка на r-forge оттуда, но в данный момент она мне не отвечает).
Между ними вы получите согласованное форматирование текста и рисунков (шрифты и т. Д.). С варевом, они могут составить священный грааль генерации отчетов.
источник
На более «мета» уровне вас может заинтересовать модель процесса CRISP-DM .
источник
«make» - это здорово, потому что (1) вы можете использовать его для всей своей работы на любом языке (в отличие, скажем, от Sweave и Brew), (2) он очень мощный (достаточно для сборки всего программного обеспечения на вашем компьютере), и (3) это избегает повторения работы. Этот последний пункт важен для меня, потому что большая часть работы идет медленно; когда я латексирую файл, мне нравится видеть результат через несколько секунд, а не час, который потребуется для воссоздания цифр.
источник
Я использую шаблоны проектов вместе с R studio, в настоящее время мой содержит следующие папки:
info
: pdfs, powerpoints, docs ... которые не будут использоваться ни одним скриптомdata input
: данные, которые будут использоваться моими скриптами, но не генерируются имиdata output
: данные, сгенерированные моими сценариями для дальнейшего использования, но не в качестве правильного отчета.reports
: Только файлы, которые действительно будут показаны кому-то ещеR
: Все скрипты RSAS
: Потому что мне иногда приходится: '(Я написал пользовательские функции, чтобы я мог вызывать
smart_save(x,y)
илиsmart_load(x)
сохранять или загружатьRDS files
в и изdata output
папки (файлы с именами переменных), чтобы меня не беспокоилиpaths
во время анализа.Пользовательская функция
new_project
создает нумерованную папку проекта, копирует все файлы из шаблона, переименовываетRProj
файл и редактируетsetwd
вызовы, а также устанавливает рабочий каталог для нового проекта.Все
R
скрипты находятся вR
папке, структурированной следующим образом:setwd
00_functions_something.R
, в частности, если я планирую сделать пакет из некоторых, я выделю их отдельноinitialize_general.R
сценария из папки шаблонов, который загружает пакеты и данные, которые я всегда использую, и я не против иметь в своем рабочем пространстве00_functions.R
(предварительно заполненные)csv/txt
xlsx
RDS
, есть предварительно заполненная закомментированная строка для каждого типа файлаdbplyr
для выборки отфильтрованных и сгруппированных таблиц из БДКак только это будет сделано, я отключу
query_db
логическое значение, и данные будут перезагружены сRDS
следующий раз.Может случиться так, что мне придется передавать данные в БД, если это так, я создам дополнительные шаги.
dplyr
/tidyr
вещи идут тудаКак только это будет сделано, я отключу
build
логическое значение, и данные будут перезагружены вRDS
следующий раз.excel
иcsv
файлыofficer
setwd
render
setwd
runApp
источник
Для написания быстрого предварительного отчета или электронного письма коллеге, я считаю, что может быть очень эффективно копировать и вставлять графики в MS Word, электронную почту или вики-страницу - часто лучше всего использовать растровый снимок экрана (например, на Mac, Apple -Shift- (CTRL) -4). Я думаю, что это недооцененная техника.
Для более окончательного отчета очень важно написание R-функций для простой регенерации всех графиков (в виде файлов). Это займет больше времени, чтобы закодировать это.
Что касается более крупных проблем рабочего процесса, мне нравится ответ Хэдли на перечисление файлов кода / данных для процесса очистки и анализа. Все мои проекты анализа данных имеют схожую структуру.
источник
Я добавлю свой голос, чтобы вспыхнуть. Для сложного многоэтапного анализа вы можете использовать make-файл для определения различных частей. Может предотвратить повторение всего анализа, если изменилась только одна часть.
источник
Я также делаю то, что делает Джош Райх, только я делаю это, создавая свои персональные R-пакеты, поскольку это помогает мне структурировать мой код и данные, а также очень легко делиться ими с другими.
создание моего пакета: devtools :: create ('имя_пакета')
загрузка и очистка: я создаю сценарии в подпапке data-raw / моего пакета для загрузки, очистки и сохранения результирующих объектов данных в пакете с помощью devtools :: use_data (object_name). Затем я компилирую пакет. Отныне вызов библиотеки (имя_пакета) делает эти данные доступными (и они не загружаются до тех пор, пока это не потребуется).
Функции: я помещаю функции для моего анализа в подпапку R / моего пакета и экспортирую только те, которые должны вызываться извне (а не вспомогательные функции, которые могут оставаться невидимыми).
do: я создаю скрипт, который использует данные и функции, хранящиеся в моем пакете. (Если анализ нужно выполнить только один раз, я могу также поместить этот сценарий в подпапку data-raw /, запустить его и сохранить результаты в пакете, чтобы сделать его легко доступным.)
источник