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


185

Хтось має розум щодо робочих процесів для аналізу даних, пов’язаних із написанням спеціального звіту? Випадок використання в основному такий:

  1. Клієнт здає звіт, в якому використовується аналіз даних, наприклад, оцінка кількості населення та пов'язані з ними карти для акваторії.

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

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

  4. Повторіть промивання, поки таблиці та графіки не відповідають QA / QC та не задовольнять клієнта.

  5. Напишіть звіт із таблицями та графікою.

  6. Наступного року щасливий клієнт повертається і хоче оновлення. Це повинно бути таким же простим, як оновлення даних про течію за допомогою нового завантаження (наприклад, отримання дозволів на будівництво за останній рік) та натискання кнопки "РЕКАЛЬНІ", якщо не змінюються технічні характеристики.

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

Дякую!

PS:

Нижче наведено основний Makefile, який перевіряє залежність від різних проміжних наборів даних (w / .RDataсуфікс) та сценаріїв ( .Rсуфікс). Використовуйте часові позначки для перевірки залежностей, тому, якщо ви touch ss07por.csv, то ви побачите, що цей файл є новішим, ніж усі файли / цілі, які від нього залежать, та виконайте задані сценарії, щоб оновити їх відповідно. Це ще триває робота, включаючи крок для введення в базу даних SQL та крок для мови шаблонів, наприклад, підхват. Зауважте, що 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 Функції.R
   $ R - slave -f ImportData.R

persondata.Munged.RData: MungeData.R persondata.RData Functions.R
      $ R - рукав -f MungeData.R

report.txt: TabulateAndGraph.R persondata.Munged.RData Functions.R
      $ R --slave -f TabulateAndGraph.R> report.txt


10
О Боже. ті, хто заходить сюди, будьте уважні : відповіді на це питання були чудовими п'ять років тому. Зараз вони всі повністю застаріли. Сьогодні я б настійно не рекомендував виконувати будь-яку відповідь тут. Зараз доступні набагато кращі інструменти. Для початку я зроблю приклад проекту з використанням Makefiles та Knitr .
Конрад Рудольф

R Ноутбуки , odbc драйвери , git та git lfs - все це небеса, що надсилаються для цієї проблеми.
DaveRGP

Я настійно рекомендую створити проект відповідно до принципів, викладених, наприклад, тут ( github.com/ropensci/rrrpkg ). Так називають «дослідження compedium» є знахідкою при виконанні відтворюваних наук даних
хресний

Відповіді:


195

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

  1. навантаження.R
  2. чистий.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, щоб визначити, який аналіз був виконаний.


12
Це дійсно хороший робочий процес. Я боровся з розробкою робочого процесу, і коли я запитую оточуючих, вони взагалі відповідають: "що? Робочий процес? Так?" Тож я вважаю, що вони не дуже думають про це. Я збираюся прийняти рейхську модель LCFD.
JD Довгий

1
це досить близько до мого робочого процесу, у мене часто є сценарій імпорту, сценарій аналізу та сценарій звітності
kpierce8

4
LCFD: Найменше поширені дані
Вільям Доан

2
Є приємне презентаційне відео + слайди Джеромі Англіма, який включає цей робочий процес тут vcasmo.com/video/drewconway/10362
Девід Лебоуер


94

Якщо ви хочете побачити кілька прикладів, у мене в Інтернеті є кілька невеликих (і не дуже малих) проектів з очищення та аналізу даних. У більшості випадків ви знайдете сценарій для завантаження даних, один для їх очищення та декілька для вивчення та аналізу:

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

Я використовую git для всіх своїх проектів (система управління вихідним кодом), тому його легко співпрацювати з іншими, дивіться, що змінюється, і легко повертатись до попередніх версій.

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


Я коментував Makefiles вище, але ви, можливо, захочете їх вивчити - це традиційна мова перевірки залежності. Також - я намагаюся вивчити ggplot2 - виглядає чудово!
forkandwait

Мені подобається ідея встановити залежність між файлами, але навчитися m4 - це велике відключення. Мені б хотілося, щоб на Р. було написано щось на кшталт raken
hadley

2
Для залежностей можна це зробити також у файлах R. Замість того щоб робити source("blah.R"), перевірте , чи існують шукана змінна (s) перший: if (!exists("foo")) { source("blah.R") }. Це дозволяє уникнути повторного запуску залежностей, якщо вони вже запущені.
naught101

17

Я погоджуюся з іншими респондентами: 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}

6
Не вірте, що звіт про підгортання можна відтворити, поки ви не перевірите його на чистій машині. Легко мати неявні зовнішні залежності.
Джон Д. Кук

16

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

Записи випливають із приємного робочого процесу, тому варто прочитати:

  1. Підготуйте дані.
  2. Підготуйте шаблон звіту.
  3. Складіть звіт.

Насправді виготовити звіт, коли перші два кроки виконані дуже просто:

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

Виправляючи невелику граматичну помилку, я зіпсував адресу wordpress.com. Тож правильне посилання є learnr.wordpress.com/2009/09/09/…
Learnr

14

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

Створення звітів: Хороша стратегія для створення звітів включає поєднання Sweave, make та R.

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

  • StatET і Eclipse
  • Emacs та ESS
  • Vim і Vim-R
  • R Studio

Організація коду: Щодо організації коду, я вважаю корисними дві стратегії:


7

Я використовую Sweave для створення цього звіту, але я також чув про пакет варіння, хоча ще не вивчив.

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

Цілком можливо, що зараз є кращі підходи, але якщо ви все-таки вирішите піти цим маршрутом, дайте мені знати - я мав на увазі викласти кілька моїх халатів Sweave, і це було б гарним ударом у штани. так.


Було б хотіти побачити деякі з цих "халатів". Це болить мені!
Брендон Бертелсен

7

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

Якщо це здасться правильним, я б запропонував переглянути інтегрований інструмент управління квитками / джерелами / документацією на зразок Redmine . Збереження пов'язаних артефактів проектів, таких як завдання, що очікують на розгляд, дискусійні теми та файли даних / коду разом, може бути чудовою підмогою навіть для проектів, що знаходяться поза традиційним прийомом "програмування".


5

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

Між ними ви отримаєте послідовне форматування тексту та фігур (шрифти тощо). Якщо заварити, вони можуть становити святий грааль генерування звітів.


pgfSweave наразі перебуває у "лімбі розвитку", оскільки розробники не встигли включити новий tikzDevice. Наразі ми пропонуємо використовувати tikzDevice в рамках звичайних документів Sweave - користувач просто повинен взяти на себе відповідальність за відкриття / закриття пристрою та \ включаючи {} отриманий результат.
Шарпі

@Sharpie: Будь-які оновлення щодо стану розробки pgfSweave? Це виглядає чудово, але, здається, не працює в будь-якій системі, яку я пробував.
Арі Б. Фрідман

@ gsk3 Інший розробник був дуже активним в оновленні pgfSweave і зробив багато роботи, оскільки я опублікував цей коментар. Перейдіть на сторінку github.com/cameronbracken/pgfSweave, щоб відстежувати розвиток. Якщо пакет не працює для вас, ми б хотіли отримати звіт про помилку, щоб ми могли його виправити.
Шарпі

@Sharpie: Чудово, дякую. Я переслав ваше повідомлення моєму другові, який над цим доклав більше роботи, ніж я. Якщо він незабаром не подасть звіт про помилку, я зберу його разом. Це схоже на чудовий пакет; дякую за всю наполегливу працю.
Арі Б. Фрідман


4

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


+1 для виготовлення; Однак я не вважаю, що це робить несумісним із Sweave. Швидше, коли я створюю звіти, телефонуйте Sweave (та інші речі).
Джеромі Англім

3

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

  • info : pdfs, точки живлення, документи ..., які не використовуватимуться жодним сценарієм
  • 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булеве значення, і дані будуть завантажені зRDS наступного разу.

Може статися, що я повинен передати дані до БД, якщо так, я створять додаткові кроки.


04_Build.R
  • Дані суперечать, вся забава dplyr/ tidyrінше йде туди
  • відображає файли, створені в робочій області
  • збережіть ці змінні

Як тільки це буде зроблено, коли я вимикаю buildбулеве значення, і дані будуть завантажені з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
  • Шаблон програми

2

Написавши швидкий попередній звіт або електронний лист колезі, я вважаю, що копіювати та вставляти сюжети в MS Word або на сторінку електронної пошти чи вікі можна дуже ефективно - найчастіше найкраще це знімок екрана (наприклад, на mac, Apple -Shift- (Ctrl) -4). Я думаю, що це недооцінена техніка.

Для отримання остаточного звіту дуже важливим є написання функцій R для легкої регенерації всіх сюжетів (як файлів). Для цього кодування потрібно більше часу.

Щодо більших питань робочого процесу, мені подобається відповідь Хедлі щодо перерахування файлів коду / даних для потоку очищення та аналізу. Усі мої проекти аналізу даних мають подібну структуру.


2

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


0

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

  1. створити мій пакет
  2. навантаження
  3. чистий
  4. функції
  5. робити

створення мого пакету: devtools :: create ('ім'я пакета')

load and clean: я створюю скрипти в data-raw / підпапці мого пакета для завантаження, очищення та зберігання отриманих об’єктів даних у пакеті за допомогою devtools :: use_data (object_name). Потім складаю пакет. Відтепер виклик бібліотеки (ім'я пакета) робить ці дані доступними (і вони не завантажуються до необхідності).

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

робити: я створюю сценарій, який використовує дані та функції, що зберігаються в моєму пакеті. (Якщо аналізи потрібно зробити лише один раз, я можу помістити цей скрипт також у папку даних / підпапку, запустити його та зберегти результати в пакеті, щоб зробити його легко доступним.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.