İstatistiksel analiz ve rapor yazma için iş akışı


186

Özel rapor yazmayla ilgili veri analizi için iş akışları hakkında bilgeliği olan var mı? Kullanım örneği temel olarak şu şekildedir:

  1. Müşteri, örneğin bir nüfus tahmini ve bir su bölgesi için ilgili haritalar gibi veri analizini kullanan bir rapor başlatır.

  2. Analist bazı verileri indirir, verileri sabitler ve sonucu kaydeder (örneğin, birim başına nüfus için bir sütun eklemek veya verileri bölge sınırlarına göre alt kümesi ayarlamak).

  3. Analist (2) 'de oluşturulan verileri analiz eder, amacına yaklaşır, ancak daha fazla veriye ihtiyaç duyduğunu görür ve (1)' e geri döner.

  4. Tablolar ve grafikler KG / KK ile buluşup müşteriyi tatmin edene kadar tekrarlayın.

  5. Tablo ve grafik içeren rapor yazma.

  6. Gelecek yıl, mutlu müşteri geri geliyor ve bir güncelleme istiyor. Bu, yukarı akış verilerini yeni bir indirme ile güncellemek (örn. Geçen yıldan bina izinlerini almak) ve spesifikasyonlar değişmedikçe "HESAPLA" düğmesine basmak kadar basit olmalıdır.

Şu anda sadece bir dizin başlatıyorum ve elimden gelenin en iyisini yapıyorum. Daha sistematik bir yaklaşım istiyorum, bu yüzden birinin bunu çözdüğünü umuyorum ... Elektronik tablolar, SQL, ARCGIS, R ve Unix araçlarının bir karışımını kullanıyorum.

Teşekkürler!

Not:

Aşağıda çeşitli ara veri kümelerine ( .RDatason ek) ve komut dosyalarına ( .Rson ek) bağımlılıkları kontrol eden temel bir Makefile bulunmaktadır . Bağımlılıkları kontrol etmek için zaman damgaları kullanın, bu nedenle touch ss07por.csvbu dosyanın ona bağlı olan tüm dosyalardan / hedeflerden daha yeni olduğunu görür ve uygun komut dosyalarını güncellemek için verilen komut dosyalarını yürütür. Bu, SQL veritabanına koyma adımı ve sweave gibi şablonlama dili için bir adım da dahil olmak üzere halen devam eden bir çalışmadır. Make'ın sözdizimindeki sekmelere bağlı olduğunu unutmayın, bu nedenle kesme ve yapıştırmadan önce kılavuzu okuyun. Zevk ve geribildirim vermek!

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 İşlevleri.R
   $ R - köle -f ImportData.R

persondata.Munged.RData: MungeData.R persondata.RData İşlevleri.R
      $ R - köle -f MungeData.R

report.txt: TabulateAndGraph.R persondata.Munged.RData İşlevleri.R
      $ R - köle -f TabulateAndGraph.R> report.txt


11
Aman. buraya girenler dikkat : Bu sorunun cevabı beş yıl önce mükemmeldi. Şimdi hepsi tamamen modası geçmiş. Bugünlerde, buradaki cevapların herhangi birine uymamanızı şiddetle tavsiye ediyorum. Artık çok daha iyi araçlar var. Başlangıç ​​olarak, Makefiles ve Knitr kullanarak örnek bir projeye değineceğim .
Konrad Rudolph

R Defterler , odbc sürücüleri , git ve git lfs bu sorun için gönderilen cennetlerdir.
DaveRGP

Projeyi, örneğin burada ( github.com/ropensci/rrrpkg ) belirtilen ilkelere göre kurmanızı şiddetle tavsiye ederim . Tekrarlanabilir veri bilimi yaparken sözde "araştırma komedisi" godsend olduğunu
Kresten

Yanıtlar:


195

Projelerimi genellikle 4 parçaya ayırıyorum:

  1. load.R
  2. clean.R
  3. func.R
  4. do.R

load.R: Gerekli tüm verilerin yüklenmesine özen gösterir. Genellikle bu, dosyalardan, URL'lerden ve / veya ODBC'den gelen verileri okuyan kısa bir dosyadır. Bu noktada projeye bağlı olarak ya çalışma alanını kullanarak yazacağım save()ya da bir sonraki adım için işleri hafızada tutacağım.

clean.R: Burası tüm çirkin şeylerin yaşadığı yerdir - eksik değerlerin bakımı, veri çerçevelerinin birleştirilmesi, aykırı değerlerin ele alınması.

func.R: Gerçek analizi gerçekleştirmek için gereken tüm fonksiyonları içerir. source()Bu dosyanın fonksiyon tanımlarını yüklemek dışında hiçbir yan etkisi olmamalıdır. Bu, büyük veri kümeleri için uzun sürebilen 1 ve 2 numaralı adımları tekrarlamak zorunda kalmadan bu dosyayı değiştirebileceğiniz ve yeniden yükleyebileceğiniz anlamına gelir.

do.R: Analiz yapmak ve grafikler ve tablolar üretmek için func.R'de tanımlanan işlevleri çağırır.

Bu kurulumun ana motivasyonu, sonraki adımda her değişiklik yaptığınızda verileri yeniden yüklemek istemediğiniz büyük verilerle çalışmaktır. Ayrıca, kodumu böyle bölümlere ayırmak, uzun süredir unutulmuş bir projeye geri dönüp yükü hızlı bir şekilde okuyabileceğim anlamına geliyor.


12
Bu gerçekten iyi bir iş akışı. Bir iş akışı tasarlamakta zorlandım ve etrafımdakilere sorduğumda genellikle "ne? İş akışı? Ha?" Bu yüzden bunu çok düşünmüyorlar. Reichian LCFD modelini benimseyeceğim.
JD Long

1
Bu benim iş akışına oldukça yakın, genellikle bir ithalat komut dosyası, analiz komut dosyası ve raporlama komut dosyası var
kpierce8

4
LCFD: En Az Yaygın Hatalı Veri
William Doane

2
Bu iş akışını burada içeren güzel bir sunum videosu + slaytları var vcasmo.com/video/drewconway/10362
David LeBauer


95

Bazı örnekler görmek isterseniz, çevrimiçi olarak sunulan birkaç küçük (ve çok küçük olmayan) veri temizleme ve analiz projem var. Çoğu durumda, verileri indirmek için bir komut dosyası, temizlemek için bir komut dosyası ve keşif ve analiz yapmak için birkaç komut dosyası bulacaksınız:

Son zamanlarda senaryoları numaralandırmaya başladım, bu yüzden hangi sırayla çalıştırılmaları gerektiği açık. (Eğer gerçekten fantezi hissediyorum, ben bazen keşif komut dosyası her biri gerekli minimum işi - genellikle çıktı dosyaları varlığını kontrol ederek indirme komut dosyası çağırır temizleme komut dosyası çağıracak bunu yapmak file.exists. Ancak çoğu zaman bu aşırıya kaçmış gibi görünür).

Git'i tüm projelerim için (kaynak kodu yönetim sistemi) kullanıyorum, bu yüzden başkalarıyla işbirliği yapmak, nelerin değiştiğini görmek ve önceki sürümlere kolayca geri dönmek.

Resmi bir rapor yaparsam, genellikle R ve lateksi ayrı tutarım, ancak her zaman sourcerapor için ihtiyacım olan tüm kodu ve çıktıyı üretmek için R kodumu yapabileceğimden emin olurum . Yaptığım raporlar için, bunu lateks ile çalışmaktan daha kolay ve temiz buluyorum.


Yukarıdaki Makefiles hakkında yorum yaptım, ancak bunlara bakmak isteyebilirsiniz - bu geleneksel bağımlılık kontrol dilidir. Ayrıca - ggplot2 öğrenmeye çalışacağım - harika görünüyor!
forkandwait

Dosyalar arasında bağımlılıkları belirtmek için bir yol bulma fikrini seviyorum, ancak m4 öğrenmek zorunda olmak büyük bir dönüş. Keşke R'de yazılmış
komisyon

2
Bağımlılıklar için, bunu R dosyaları içinde de yapabilirsiniz. Yerine yapmanın source("blah.R")gerekli değişken (ler) ilk mevcut olmadığını kontrol edin: if (!exists("foo")) { source("blah.R") }. Bu, zaten çalıştırıldıysa bağımlılıkları yeniden çalıştırmayı önler.
naught101

17

Diğer katılımcılar ile aynı fikirdeyim: Sweave, R ile rapor yazmak için mükemmeldir ve raporu güncellenmiş sonuçlarla yeniden oluşturmak Sweave işlevini yeniden çağırmak kadar basittir. Tüm analiz, veri, vb dahil olmak üzere tamamen kendi kendine yeten ve tüm dosyayı sürüm kontrol edebilirsiniz.

Raporları geliştirmek için Eclipse için StatET eklentisini kullanıyorum ve Sweave entegre edildi (Eclipse lateks oluşumunu tanır, vb.). Windows'da MikTEX'i kullanmak kolaydır .

Beamer ile güzel raporlar oluşturabileceğinizi de ekleyeceğim . Normal bir rapor oluşturmak da aynı derecede basittir. Yahoo! 'Dan veri çeken bir örnek ekledim ve bir grafik ve bir tablo oluşturur (kuantmod kullanarak). Bu raporu şu şekilde oluşturabilirsiniz:

Sweave(file = "test.Rnw")

İşte Beamer belgesinin kendisi:

% 
\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
Temiz bir makinede test edene kadar bir Sweave raporunun yeniden üretilebileceğine inanmayın. Örtük harici bağımlılıklara sahip olmak kolaydır.
John D. Cook

16

Ben sadece kimse kaçırmış olması durumunda , Jeffrey Horner'ın demlemek paketi ile tekrarlayan raporlar oluşturma hakkında learnr blogunda büyük bir yazı olduğunu eklemek istedim . Matt ve Kevin her ikisi de yukarıda demlendi. Aslında çok fazla kullanmadım.

Girişler güzel bir iş akışını izler, bu yüzden okumaya değer:

  1. Verileri hazırlayın.
  2. Rapor şablonunu hazırlayın.
  3. Raporu hazırlayın.

Aslında ilk iki adım tamamlandıktan sonra raporun hazırlanması çok basittir:

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

Küçük bir gramer hatasını giderirken wordpress.com adreslemesini bozdum. Doğru bağlantı learnr.wordpress.com/2009/09/09/…
learnr

14

Özel raporlar oluşturmak için, burada önerilen mevcut ipuçlarının birçoğunu birleştirmeyi yararlı buldum.

Rapor oluşturma: Rapor oluşturmak için iyi bir strateji Sweave, make ve R kombinasyonlarını içerir.

Editör: Sweave belgelerini hazırlamak için iyi editörler:

  • StatET ve Eclipse
  • Emacs ve ESS
  • Vim ve Vim-R
  • R Stüdyosu

Kod organizasyonu: Kod organizasyonu açısından, iki stratejiyi yararlı buluyorum:


7

Sweave'ı bunun rapor üreten tarafı için kullanıyorum , ancak demleme paketini de duyuyorum - henüz bakmadım.

Esasen, özet istatistikler ürettiğim birkaç anketim var. Her seferinde aynı anketler, aynı raporlar. Raporlar için bir Sweave şablonu oluşturdum (bu biraz çalışma gerektiriyor). Ama iş bittiğinde, yeni verileri belirtmeme izin veren ayrı bir R betiğim var. "Git" e basıyorum, Sweave birkaç puan .tex dosyası döküyor ve hepsini pdflatexlemek için küçük bir Python betiği çalıştırıyorum. Selefim bu raporlarda her yıl ~ 6 hafta geçirdi; Yaklaşık 3 gün geçiriyorum (çoğunlukla veri temizleme üzerine; kaçış karakterleri tehlikelidir).

Şimdi daha iyi yaklaşımlar olması çok olası, ancak bu rotaya gitmeye karar verirseniz, bana bildirin - bazı Sweave hack'leri koymak için anlam ifade ediyordum ve bu pantolonun iyi bir vuruşudur yani.


Bu "Sweave kesmek" bazıları görmek isterim. Bana bir baş ağrısı veriyor!
Brandon Bertelsen

7

Ne hakkında sordu gerçeğine dayanarak, diğer gönderenler arasından yönde farklı bir tür şey önermek için gidiyorum proje akışına ziyade, araçlar . Belge üretim modelinizden nispeten memnun olduğunuzu varsayarsak, zorluklarınız gerçekten sürüm izleme, varlık yönetimi ve inceleme / yayınlama konularında daha fazla odaklanmış gibi görünebilir.

Bu doğru görünüyorsa, Redmine gibi entegre bir biletleme / kaynak yönetimi / dokümantasyon aracına bakmanızı öneririm . Bekleyen görevler, tartışma konuları ve güncellenmiş veri / kod dosyaları gibi ilgili proje eserlerini bir arada tutmak, geleneksel "programlama" yetkisi dışındaki projeler için bile çok yardımcı olabilir.


5

Sweave'in, LaTeX tabloları oluşturmak için xtable ile gidilecek yol olduğunu kabul etti . Onlarla çalışmak için çok fazla zaman harcamamış olmama rağmen , yakın zamanda piyasaya sürülen tikzDevice paketi özellikle ümit verici görünüyor, özellikle pgfSweave ile birleştiğinde (ki, bildiğim kadarıyla sadece şu anda rforge.net'te mevcut - bir oradan r-forge bağlantısı, ama şu anda bana cevap vermiyor).

İkisi arasında metin ve şekiller (yazı tipleri, vb.) Arasında tutarlı biçimlendirme elde edersiniz. Demleme ile bunlar rapor oluşturma kutsal kâsesi olabilir.


pgfSweave, geliştiricilerin yeni tikzDevice'i dahil etmek için zamanları olmadığı için şu anda "geliştirme limbo" aşamasında. Şimdilik normal Sweave belgelerinden tikzDevice kullanmanızı öneririz - kullanıcı sadece cihazın açılması / kapatılması ve elde edilen çıktıya {} dahil edilmesi için sorumluluk almalıdır.
Sharpie

@Sharpie: pgfSweave'nin geliştirme durumu hakkında herhangi bir güncelleme var mı? Harika görünüyor, ancak denediğim herhangi bir sistemde çalışmıyor gibi görünüyor.
Ari B. Friedman

@ gsk3 Diğer geliştirici pgfSweave'yi güncel tutma konusunda çok aktif oldu ve bu yorumu gönderdiğimden beri çok iş yaptı. Gelişimi takip etmek için github.com/cameronbracken/pgf adresine gidin. Paket sizin için çalışmıyorsa, düzeltebilmemiz için bir hata raporu almak isteriz.
Sharpie

@Sharpie: Harika, teşekkürler. Mesajınızı benden daha fazla çalışmış olan arkadaşımıza ilettim. Yakında bir hata raporu vermezse bir araya geleceğim. Harika bir paket gibi görünüyor; tüm sıkı çalışma için teşekkürler.
Ari B. Friedman


4

"yapmak" harika çünkü (1) herhangi bir dilde (örneğin Sweave ve Brew'in aksine) tüm çalışmalarınız için kullanabilirsiniz, (2) çok güçlü (makinenizdeki tüm yazılımları oluşturmak için yeterli) ve (3) tekrarlanan işlerden kaçınır. Bu son nokta benim için önemli çünkü işin çoğu yavaş; Bir dosyayı latekslediğimde, sonucu birkaç saniye içinde görmek istiyorum, rakamları yeniden oluşturmak için gereken saat değil.


Marka için +1; Ancak, markayı Sweave ile bağdaşmaz olarak görmüyorum. Daha çok raporlar ürettiğimde, Sweave (ve diğer şeyler) aramaları yapın.
Jeromy Anglim

3

R studio ile birlikte proje şablonları kullanıyorum, şu anda benimki şu klasörleri içeriyor:

  • info : pdfs, powerpoint, docs ... herhangi bir komut dosyası tarafından kullanılmayacak
  • data input : komut dosyalarım tarafından kullanılacak ancak onlar tarafından oluşturulmayan veriler
  • data output : daha fazla kullanım için komut dosyalarım tarafından üretilen veriler, ancak uygun bir rapor olarak değil.
  • reports : Yalnızca başka birine gösterilecek dosyalar
  • R : Tüm R komut dosyaları
  • SAS : Çünkü bazen yapmak zorundayım: '(

Arayabileceğim yüzden özel işlevler yazdım smart_save(x,y)ya smart_load(x)kaydetmek veya yüklemek için RDS filesve gelendata output klasöre (değişken adlarıyla adlandırılmış dosyalar) böylece pathsanalizim sırasında rahatsız değilim .

Özel bir işlev new_projectnumaralandırılmış bir proje klasörü oluşturur, şablondaki tüm dosyaları kopyalar, RProjdosyayı yeniden adlandırır vesetwd çağrıları ve çalışma dizinini yeni projeye ayarlar.

Tüm Rkomut dosyaları Raşağıdaki gibi yapılandırılmış klasördedir:


00_main.R
  • setwd
  • 1'den 5'e kadar komut dosyalarını çağırır

00_functions.R
  • Tüm fonksiyonlar ve sadece fonksiyonlar oraya gider, eğer çok fazla varsa birkaçına ayırırım, hepsi gibi adlandırılır 00_functions_something.R, özellikle bazılarından bir paket yapmayı planlıyorsam onları ayırırım

00_explore.R
  • bir şeyler test ettiğim veya verilerimi keşfettiğim bir sürü senaryo parçası
  • Dağınık olmasına izin verilen tek dosya.

01_initialize.R
  • Daha genel bir çağrı ile önceden dolduruldu initialize_general.RŞablon klasörümden, her zaman kullandığım ve çalışma alanımda olmasını umursamadığım paketleri ve verileri yükleyen komut dosyasına
  • yükler 00_functions.R (önceden doldurulmuş)
  • ek kütüphaneler yükler
  • global değişkenleri ayarlama

02_load data.R
  • yükler csv/txt xlsx RDS , her dosya türü için önceden yorumlanmış bir satır vardır
  • çalışma alanında hangi dosyaların oluşturulduğunu gösterir

03_pull data from DB.R
  • Kullanımları dbplyr DB'den süzülür ve gruplandırılmış tabloları almak için
  • bazı bağlantılar ayarlamak ve getirmek için yorum satırları önceden doldurulmuş.
  • İstemci tarafı işlemlerini minimumda tutun
  • Bu komut dosyasının dışında sunucu tarafı işlemi yok
  • Çalışma alanında hangi dosyaların oluşturulduğunu görüntüler
  • Daha hızlı yeniden yüklenebilmeleri için bu değişkenleri kaydeder

Bir kez bittiğinde, bir query_dbboolean kapattım ve veriler yeniden yüklenecekRDS dahaki sefere .

DBs için veri refeed zorunda olabilir, eğer öyleyse ek adımlar oluşturacağım olabilir.


04_Build.R
  • Veri bozuyor, tüm eğlence dplyr/ tidyrşeyler oraya gidiyor
  • çalışma alanında hangi dosyaların oluşturulduğunu gösterir
  • bu değişkenleri kaydet

Bir kez bittiğinde, bir buildboolean'ı kapattım ve veriler birRDS dahaki sefere yeniden yüklenecek .


05_Analyse.R
  • Özetle, model ...
  • rapor excelve csvdosyalar

95_build ppt.R
  • powerpoint raporu kullanarak şablonu officer

96_prepare markdown.R
  • setwd
  • veri yükle
  • gerekirse markdown parametrelerini ayarlayın
  • render

97_prepare shiny.R
  • setwd
  • veri yükle
  • gerekirse parlak parametreler ayarlama
  • runApp

98_Markdown report.Rmd
  • Bir rapor şablonu

99_Shiny report.Rmd
  • Bir uygulama şablonu

2

Bir meslektaşınıza hızlı bir ön rapor veya e-posta yazmak için, grafikleri MS Word'e veya bir e-posta veya wiki sayfasına kopyalayıp yapıştırmanın çok verimli olabileceğini görüyorum - çoğu zaman en iyisi bit eşlemli bir ekran görüntüsüdür (örn. Mac, Apple -Shift- (CTRL) -4). Bence bu önemsiz bir teknik.

Daha son bir rapor için, tüm grafikleri (dosyalar olarak) kolayca yeniden oluşturmak için R fonksiyonları yazmak çok önemlidir. Bunu kodlamak daha fazla zaman alır.

Daha büyük iş akışı konularında, Hadley'in temizleme ve analiz akışı için kod / veri dosyalarını numaralandırma konusundaki cevabını seviyorum. Tüm veri analiz projelerim benzer bir yapıya sahip.


2

Terlemeye sesimi ekleyeceğim. Karmaşık, çok adımlı analiz için farklı parçaları belirtmek için bir makefile kullanabilirsiniz . Sadece bir parça değiştiyse tüm analizi tekrar etmek zorunda kalmazsınız.


0

Josh Reich'in yaptığı şeyi de yapıyorum, sadece kodumu ve verilerimi yapılandırmama yardımcı olduğu için kişisel R-paketlerimi oluşturuyorum ve bunları başkalarıyla paylaşmak da oldukça kolay.

  1. paketimi oluştur
  2. yük
  3. temiz
  4. fonksiyonlar
  5. yapmak

paketimi oluşturma: devtools :: create ('package_name')

load and clean: Devtools :: use_data (object_name) kullanarak paketteki data-raw / alt klasöründe, ortaya çıkan veri nesnelerini pakete yüklemek, temizlemek ve depolamak için komut dosyaları oluştururum. Sonra paketi derliyorum. Şu andan itibaren, çağrı kitaplığı (paket_adı) bu verileri kullanılabilir hale getirir (ve gerekli olana kadar yüklenmez).

fonksiyonlar: Analizlerimin fonksiyonlarını paketimin R / alt klasörüne koydum ve sadece dışarıdan çağrılması gerekenleri dışa aktarıyorum (görünmez kalabilen yardımcı fonksiyonları değil).

do: Paketimde saklanan verileri ve işlevleri kullanan bir komut dosyası oluşturuyorum. (Analizlerin yalnızca bir kez yapılması gerekiyorsa, bu betiği data-raw / alt klasörüne de koyabilir, çalıştırabilir ve sonuçları kolayca erişilebilir hale getirmek için pakette saklayabilirim.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.