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

Вы, возможно, не должны были бы связывать конечный результат в непрерывный массив. Вместо этого продолжайте добавлять к списку, как предложил Jon. В конце Вы будете иметь зубчатый массив (хорошо, почти прямоугольный на самом деле). Когда необходимо будет получить доступ к элементу индексом, используйте следующую схему индексации:

double x = list[i / sampleSize][i % sampleSize];

Повторение по зубчатому массиву также просто:

for (int iRow = 0; iRow < list.Length; ++iRow) {
  double[] row = list[iRow];
  for (int iCol = 0; iCol < row.Length; ++iCol) {
    double x = row[iCol];
  }
}

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

180
задан pnuts 17 September 2015 в 06:07
поделиться

11 ответов

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

Использование этого файла не должно иметь никаких побочных эффектов, кроме загрузки определений функций. Это означает, что вы можете изменить этот файл и перезагрузить его без необходимости повторять шаги 1 и 2, выполнение которых может занять много времени для больших наборов данных.

do.R: вызывает функции, определенные в func.R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, когда вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

Использование этого файла не должно иметь никаких побочных эффектов, кроме загрузки определений функций. Это означает, что вы можете изменить этот файл и перезагрузить его без необходимости повторять шаги 1 и 2, выполнение которых может занять много времени для больших наборов данных.

do.R: вызывает функции, определенные в func.R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, когда вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

Это означает, что вы можете изменить этот файл и перезагрузить его без необходимости повторять шаги 1 и 2, выполнение которых может занять много времени для больших наборов данных.

do.R: вызывает функции, определенные в func.R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, когда вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

Это означает, что вы можете изменить этот файл и перезагрузить его без необходимости повторять шаги 1 и 2, выполнение которых может занять много времени для больших наборов данных.

do.R: вызывает функции, определенные в func.R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, когда вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, при этом вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

R для выполнения анализа и создания диаграмм и таблиц.

Основная мотивация для этой настройки - это работа с большими данными, когда вам не нужно перезагружать данные каждый раз, когда вы вносите изменения в следующий шаг. Кроме того, такой разделенный код означает, что я могу вернуться к давно забытому проекту, быстро прочитать load.R и решить, какие данные мне нужно обновить, а затем посмотреть на do.R, чтобы выяснить, какой анализ был выполнен.

194
ответ дан 23 November 2019 в 06:12
поделиться

Я считаю, что для написания быстрого предварительного отчета или электронного письма коллеге очень эффективно скопировать и вставить графики в MS Word, на электронную почту или на вики-страницу - часто лучше это растровый снимок экрана (например, на Mac: Apple-Shift- (Ctrl) -4). Я думаю, что это недооцененная техника.

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

Что касается более серьезных проблем рабочего процесса, мне нравится ответ Хэдли о перечислении файлов кода / данных для потока очистки и анализа. Все мои проекты анализа данных имеют аналогичную структуру.

2
ответ дан 23 November 2019 в 06:12
поделиться

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

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

5
ответ дан 23 November 2019 в 06:12
поделиться

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

2
ответ дан 23 November 2019 в 06:12
поделиться

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

4
ответ дан 23 November 2019 в 06:12
поделиться

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

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

Вполне возможно, что сейчас есть лучшие подходы,

7
ответ дан 23 November 2019 в 06:12
поделиться

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

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

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

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

library(tools)
library(brew)
brew("population.brew", "population.tex")
texi2dvi("population.tex", pdf = TRUE)
16
ответ дан 23 November 2019 в 06:12
поделиться

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

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

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

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

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

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

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

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

94
ответ дан 23 November 2019 в 06:12
поделиться

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

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

7
ответ дан 23 November 2019 в 06:12
поделиться

Я согласен с другими респондентами: 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}
17
ответ дан 23 November 2019 в 06:12
поделиться

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

4
ответ дан 23 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: