Статьи

R-архитектура для воспроизводимых исследований / отчетности / журналистики данных

Содержание этой статьи первоначально было написано Тони Херстом в его блоге Ouseful.Info

Очень хорошо опубликовать исследовательскую статью, в которой описываются метод и результаты анализа набора данных особым образом, или новостной материал, содержащий визуализацию открытого набора данных, но как вы можете сделать это прозрачно и воспроизводимо? Не было бы удобно, если бы вы могли «Просмотреть источник» в отчете, чтобы увидеть, как на самом деле был выполнен анализ, или как визуализация была фактически создана из исходного набора данных? И, кроме того, как насчет того, чтобы фактические диаграммы или результаты анализа были созданы непосредственно в результате выполнения сценария, который «документирует» используемый процесс?

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

Первое, что я хочу представить, — это одно из моих любимых приложений на данный момент, RStudio ( источник на github ). Это кроссплатформенное приложение обеспечивает достаточно дружественную среду для работы с R. Более интересно то, что оно интегрируется с несколькими другими приложениями:

  1. RStudio предлагает поддержку системы контроля версий git. Это означает, что вы можете сохранять R-проекты и связанные с ними файлы в локальном каталоге, контролируемом git, а также управлять синхронизацией локального каталога с общим проектом на Github. Поддержка библиотек также упрощает загрузку библиотек R непосредственно из github.
  2. R / RStudio может получать данные из самых разных источников, опосредованных различными разработанными сообществом библиотеками R. Так, например, файлы CSV и XML могут быть получены из локального каталога или URL; библиотека RSQLite предоставляет интерфейс для SQLite; RJSONIO упрощает работу с файлами JSON; Оболочки также существуют для многих онлайн-API (twitteR для Twitter, например, RGoogleAnalytics для Google Analytics и т. д.).
  3. RStudio обеспечивает встроенную поддержку двух рабочих процессов в стиле «грамотного программирования». Sweave позволяет встраивать R-скрипты в документы LaTeX, а затем компилировать документы так, чтобы они включали выходные данные / результаты выполнения встроенных скриптов в окончательный формат PDF. (Таким образом, если сценарий создает таблицу статистических результатов на основе анализа импортированного набора данных, таблица результатов появится в конечном документе. Если сценарий используется для генерации визуальной диаграммы, изображение диаграммы будет отображаться в окончательном документе. document.) Необработанный сценарий «исходный код», который выполняется Sweave, также может быть явно встроен в окончательный PDF, так что вы можете увидеть точный сценарий, который использовался для создания отчетного результата (таблицы результатов статистики или изображения диаграмм, и т.д). Если написание LaTeX на самом деле не ваша вещь, RMarkdownпозволяет писать сценарии Markdown и снова встраивать исполняемый код R вместе с любыми выводами, непосредственно полученными в результате выполнения этого кода. Используя библиотеку knitr, встроенный R-код RMarkdown + может быть обработан для создания выходного пакета HTML (страница HTML + вспомогательные файлы (файлы изображений, файлы JavaScript и т. Д.)). Обратите внимание, что если код R использует что-то вроде библиотеки googleVis R для создания интерактивных диаграмм визуализации Google, knitr упакует необходимый код в пакет HTML для вас. И если вы предпочитаете генерировать слайд-HTML5 из ​​своей Rmarkdown, всегда есть Slidify (например, ознакомьтесь с курсом Кристофера Гандруда «Введение в анализ данных в социальных науках» — Slidify: дела идут быстро , примеры слайдов и«Исходный код» ).
  4. Недавнее добавление RStudio теперь интегрируется с RPubs.com, что означает публикацию в один клик RMarkdown / knitr’d HTML на размещенном веб-сайте. Предположительно, было бы не так сложно расширить RStudio, чтобы можно было поддерживать публикацию в других онлайн-средах. (Хм, думает … может ли RStudio поддерживать публикацию с использованием страниц Github или что-то более общее, например, SWORD / Atom Publishing ?!) Также были продемонстрированы другие пути публикации — например, вот рецепт публикации в WordPress из R ).

Да, и я уже говорил, что, помимо запуска кроссплатформенных приложений на настольном компьютере, RStudio также можно запускать как сервис, доступ к которому осуществляется через веб-браузер. Так, например, я могу войти в версию RStudio, работающую на одном из серверов OU / KMi, и получить к ней доступ через мой браузер…

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

PS Думаю, мне следовало написать и визуализировать приведенную выше диаграмму, используя R, и немного соблазнить, написав этот пост в Rmarkdown для демонстрации процессу, но я этого не сделал… График фактически был отрисован из источника .dot файл с помощью Graphviz. Вот источник, так что если вы хотите изменить модель, вы можете … (Я также вытащил сценарий в виде сущности ):

digraph G {

	subgraph cluster_1 {
		Rscript -> localDir;
		localDir -> Rscript;
		Rscript -> Sweave;
		Sweave -> TeX;
		TeX -> PDF [ label = "laTeX"]
		Rscript -> Rmarkdown;
		RCurl -> Rscript;
		Rmarkdown -> HTML [ label = "knitr" ];
		Rmarkdown -> localDir;
		Sweave -> localDir;
		label = "Local machine/\nServer";
		
		RJSONIO -> Rscript;
		XML -> Rscript;
		RSQLite -> Rscript;
		SQLite -> RSQLite;
		subgraph cluster_2 {
			XML;
			RJSONIO;
			RCurl;
			RSQLite;
			label = "Data sourcing";
		}
	}
	OnlineCSV -> RCurl;
	
	ThirdPartyAPI -> RJSONIO;
	ThirdPartyAPI -> XML;
	ThirdPartyAPI -> RCurl;
	
	
	localDir -> github [ label = "git" ];
	github -> localDir;
	HTML -> RPubs;
}