Adakah yang punya kebijakan tentang alur kerja untuk analisis data terkait penulisan laporan khusus? Use-case pada dasarnya adalah ini:
Klien memberikan laporan yang menggunakan analisis data, misalnya estimasi populasi dan peta terkait untuk distrik air.
Analis mengunduh beberapa data, mengarsipkan data, dan menyimpan hasilnya (mis. Menambahkan kolom untuk populasi per unit, atau menyusun data berdasarkan batas-batas kabupaten).
Analis menganalisis data yang dibuat dalam (2), mendekati tujuannya, tetapi melihat bahwa membutuhkan lebih banyak data dan kembali ke (1).
Bilas ulangi sampai tabel dan gambar memenuhi QA / QC dan memuaskan klien.
Menulis laporan dengan menggabungkan tabel dan grafik.
Tahun depan, klien yang bahagia kembali dan menginginkan pembaruan. Ini harus sesederhana memperbarui data hulu dengan unduhan baru (mis. Dapatkan izin bangunan dari tahun lalu), dan menekan tombol "RECALCULATE", kecuali spesifikasi berubah.
Saat ini, saya baru saja memulai direktori dan ad-hoc yang terbaik yang saya bisa. Saya ingin pendekatan yang lebih sistematis, jadi saya berharap seseorang telah menemukan ini ... Saya menggunakan campuran spreadsheet, SQL, ARCGIS, R, dan alat Unix.
Terima kasih!
PS:
Di bawah ini adalah Makefile dasar yang memeriksa dependensi pada berbagai set data menengah (w / .RData
suffix) dan skrip ( .R
suffix). Manfaatkan cap waktu untuk memeriksa dependensi, jadi jika Anda touch ss07por.csv
, ia akan melihat bahwa file ini lebih baru dari semua file / target yang bergantung padanya, dan jalankan skrip yang diberikan untuk memperbaruinya. Ini masih dalam proses, termasuk langkah untuk memasukkan ke dalam database SQL, dan langkah untuk bahasa templating seperti sweave. Perhatikan bahwa Make mengandalkan tab dalam sintaksnya, jadi baca manual sebelum memotong dan menempel. Nikmati dan berikan umpan balik!
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 Functions.R $ R --slave -f ImportData.R persondata.Munged.RData: MungeData.R Fungsi persondata.RData.R $ R --slave -f MungeData.R report.txt: TabulateAndGraph.R persondata.Munged.RData Functions.R $ R --slave -f TabulateAndGraph.R> report.txt
sumber
Jawaban:
Saya biasanya memecah proyek saya menjadi 4 bagian:
load.R: Mengurus pemuatan di semua data yang diperlukan. Biasanya ini adalah file pendek, membaca data dari file, URL, dan / atau ODBC. Bergantung pada proyek pada titik ini saya akan menulis ruang kerja menggunakan
save()
atau hanya menyimpan hal-hal dalam memori untuk langkah selanjutnya.clean.R: Di sinilah semua hal-hal buruk hidup - mengurus nilai-nilai yang hilang, menggabungkan frame data, menangani outlier.
func.R: Berisi semua fungsi yang diperlukan untuk melakukan analisis yang sebenarnya.
source()
File ini seharusnya tidak memiliki efek samping selain memuat definisi fungsi. Ini berarti bahwa Anda dapat memodifikasi file ini dan memuatnya kembali tanpa harus mengulangi langkah 1 & 2 yang dapat memakan waktu lama untuk dijalankan untuk set data yang besar.do.R: Memanggil fungsi yang didefinisikan dalam func.R untuk melakukan analisis dan menghasilkan grafik dan tabel.
Motivasi utama untuk pengaturan ini adalah untuk bekerja dengan data besar di mana Anda tidak ingin harus memuat ulang data setiap kali Anda membuat perubahan ke langkah berikutnya. Juga, menjaga kompartemen kode saya seperti ini berarti saya dapat kembali ke proyek yang lama dilupakan dan dengan cepat membaca load.R dan mencari tahu data apa yang perlu saya perbarui, dan kemudian melihat do.R untuk mengetahui analisis apa yang dilakukan.
sumber
Jika Anda ingin melihat beberapa contoh, saya memiliki beberapa proyek pembersihan dan analisis data kecil (dan tidak terlalu kecil) yang tersedia secara online. Pada sebagian besar, Anda akan menemukan skrip untuk mengunduh data, satu untuk membersihkannya, dan beberapa untuk melakukan eksplorasi dan analisis:
Baru-baru ini saya sudah mulai menomori skrip, jadi sangat jelas urutan mana yang harus dijalankan. (Jika saya merasa sangat senang, kadang-kadang saya akan membuatnya sehingga skrip eksplorasi akan memanggil skrip pembersih yang pada gilirannya memanggil skrip unduhan, masing-masing melakukan pekerjaan minimal yang diperlukan - biasanya dengan memeriksa keberadaan file keluaran dengan
file.exists
. Namun, sering kali ini sepertinya berlebihan).Saya menggunakan git untuk semua proyek saya (sistem manajemen kode sumber) sehingga mudah untuk berkolaborasi dengan orang lain, melihat apa yang berubah dan dengan mudah memutar kembali ke versi sebelumnya.
Jika saya melakukan laporan formal, saya biasanya menjaga R dan lateks terpisah, tetapi saya selalu memastikan bahwa saya dapat
source
kode R saya untuk menghasilkan semua kode dan output yang saya butuhkan untuk laporan. Untuk jenis laporan yang saya lakukan, saya menemukan ini lebih mudah dan bersih daripada bekerja dengan lateks.sumber
source("blah.R")
, memeriksa apakah variabel yang diperlukan (s) ada pertama:if (!exists("foo")) { source("blah.R") }
. Itu menghindari ketergantungan kembali menjalankan jika mereka sudah berjalan.Saya setuju dengan responden lain: Sweave sangat baik untuk penulisan laporan dengan R. Dan membangun kembali laporan dengan hasil yang diperbarui adalah semudah memanggil kembali fungsi Sweave. Ini sepenuhnya mandiri, termasuk semua analisis, data, dll. Dan Anda dapat mengontrol versi seluruh file.
Saya menggunakan plugin StatET untuk Eclipse untuk mengembangkan laporan, dan Sweave terintegrasi (Eclipse mengenali format lateks, dll). Di Windows, mudah digunakan MikTEX .
Saya juga ingin menambahkan, bahwa Anda dapat membuat laporan yang indah dengan Beamer . Membuat laporan normal juga sesederhana itu. Saya menyertakan contoh di bawah ini yang menarik data dari Yahoo! dan membuat bagan dan tabel (menggunakan quantmod). Anda dapat membuat laporan ini seperti:
Ini dokumen Beamer itu sendiri:
sumber
Saya hanya ingin menambahkan, jika ada orang yang melewatkannya, bahwa ada posting yang bagus di blog learnr tentang membuat laporan berulang dengan paket minuman Jeffrey Horner . Matt dan Kevin sama-sama menyebutkan minuman di atas. Sebenarnya saya belum terlalu sering menggunakannya.
Entri mengikuti alur kerja yang bagus, jadi layak dibaca:
Sebenarnya menghasilkan laporan setelah dua langkah pertama selesai sangat sederhana:
sumber
Untuk membuat laporan khusus, saya merasa berguna untuk menggabungkan banyak tips yang ada yang disarankan di sini.
Membuat laporan: Strategi yang baik untuk menghasilkan laporan melibatkan kombinasi Sweave, make, dan R.
Editor: Editor yang baik untuk menyiapkan dokumen Sweave meliputi:
Organisasi kode: Dalam hal organisasi kode, saya menemukan dua strategi yang berguna:
sumber
Saya menggunakan Sweave untuk sisi laporan-memproduksi ini, tapi saya juga pernah mendengar tentang minuman paket - meskipun saya belum melihat ke dalamnya.
Pada dasarnya, saya memiliki sejumlah survei yang menghasilkan ringkasan statistik. Survei yang sama, laporan yang sama setiap saat. Saya membuat template Sweave untuk laporan (yang membutuhkan sedikit kerja). Tetapi begitu pekerjaan selesai, saya memiliki skrip R terpisah yang memungkinkan saya menunjukkan data baru. Saya tekan "Go", Sweave mengeluarkan beberapa file .tex skor, dan saya menjalankan skrip Python kecil untuk pdflatex semuanya. Pendahulu saya menghabiskan ~ 6 minggu setiap tahun untuk laporan-laporan ini; Saya menghabiskan sekitar 3 hari (kebanyakan untuk membersihkan data; karakter melarikan diri berbahaya).
Sangat mungkin bahwa ada pendekatan yang lebih baik sekarang, tetapi jika Anda memutuskan untuk pergi dengan rute ini, beri tahu saya - saya bermaksud untuk memasang beberapa hack Sweave saya, dan itu akan menjadi tendangan yang bagus untuk dilakukan begitu.
sumber
Saya akan menyarankan sesuatu dalam arah yang berbeda dari submitter lain, berdasarkan pada fakta bahwa Anda bertanya secara spesifik tentang alur kerja proyek , daripada alat . Dengan asumsi Anda relatif senang dengan model produksi dokumen Anda, sepertinya tantangan Anda benar-benar lebih terpusat pada masalah pelacakan versi, manajemen aset, dan proses peninjauan / penerbitan.
Jika itu kedengarannya benar, saya akan menyarankan mencari ke alat tiket / manajemen sumber / dokumentasi terintegrasi seperti Redmine . Menyimpan artefak proyek terkait seperti tugas yang tertunda, utas diskusi, dan file data / kode versi bersama dapat sangat membantu bahkan untuk proyek di luar bailiwick "pemrograman" tradisional.
sumber
Setuju bahwa Sweave adalah jalannya, dengan xtable untuk menghasilkan tabel LaTeX. Meskipun saya belum menghabiskan terlalu banyak waktu untuk bekerja dengan mereka, paket tikzDevice yang baru-baru ini dirilis terlihat sangat menjanjikan, terutama jika digabungkan dengan pgfSweave (yang, sejauh yang saya tahu hanya tersedia di rforge.net saat ini - ada tautan ke r-forge dari sana, tetapi saat ini tidak menanggapi untuk saya).
Di antara keduanya, Anda akan mendapatkan pemformatan yang konsisten antara teks dan angka (font, dll.). Dengan minuman, ini mungkin merupakan cawan suci pembuatan laporan.
sumber
Pada tingkat yang lebih "meta", Anda mungkin tertarik pada model proses CRISP-DM .
sumber
"make" hebat karena (1) Anda dapat menggunakannya untuk semua pekerjaan Anda dalam bahasa apa pun (tidak seperti, katakanlah, Sweave and Brew), (2) sangat kuat (cukup untuk membangun semua perangkat lunak pada mesin Anda), dan (3) itu menghindari pekerjaan yang berulang. Poin terakhir ini penting bagi saya karena banyak pekerjaan yang lambat; ketika saya lateks file, saya ingin melihat hasilnya dalam beberapa detik, bukan jam yang dibutuhkan untuk membuat ulang angka.
sumber
Saya menggunakan template proyek bersama dengan R studio, saat ini milik saya berisi folder berikut:
info
: pdfs, powerpoints, docs ... yang tidak akan digunakan oleh skrip apa pundata input
: data yang akan digunakan oleh skrip saya tetapi tidak dihasilkan oleh skrip sayadata output
: data yang dihasilkan oleh skrip saya untuk penggunaan lebih lanjut tetapi bukan sebagai laporan yang tepat.reports
: Hanya file yang benar-benar akan ditampilkan kepada orang lainR
: Semua skrip R.SAS
: Karena saya terkadang harus: '(Saya menulis fungsi khusus sehingga saya bisa menelepon
smart_save(x,y)
atausmart_load(x)
menyimpan atau memuatRDS files
ke dan daridata output
folder (file dinamai dengan nama variabel) jadi saya tidak terganggupaths
selama analisis saya.Fungsi kustom
new_project
membuat folder proyek bernomor, menyalin semua file dari templat, mengganti namaRProj
file dan mengeditsetwd
panggilan, dan mengatur direktori kerja ke proyek baru.Semua
R
skrip ada diR
folder, disusun sebagai berikut:setwd
00_functions_something.R
, khususnya jika saya berencana untuk membuat paket dari beberapa dari mereka saya akan memisahkannyainitialize_general.R
skrip yang lebih umum dari folder templat saya yang memuat paket dan data yang selalu saya gunakan dan tidak keberatan ada di ruang kerja saya00_functions.R
(prefilled)csv/txt
xlsx
RDS
, ada baris komentar prefilled untuk setiap jenis filedbplyr
untuk mengambil tabel yang difilter dan dikelompokkan dari DBSetelah selesai, saya mematikan
query_db
boolean dan data akan dimuat kembali dariRDS
waktu berikutnya.Itu bisa terjadi bahwa saya harus refeed data ke DB, Jika demikian saya akan membuat langkah tambahan.
dplyr
/tidyr
hal-hal terjadi di sanaSetelah selesai, saya mematikan
build
boolean dan data akan dimuat kembali dariRDS
waktu berikutnya.excel
dancsv
fileofficer
setwd
render
setwd
runApp
sumber
Untuk menulis laporan pendahuluan cepat atau email ke kolega, saya menemukan bahwa sangat efisien untuk menyalin dan menempelkan plot ke MS Word atau halaman email atau wiki - seringkali yang terbaik adalah screenshot yang dipetakan dengan bitmap (mis. Pada mac, Apple -Shift- (Ctrl) -4). Saya pikir ini adalah teknik yang diremehkan.
Untuk laporan yang lebih akhir, menulis fungsi R untuk dengan mudah membuat ulang semua plot (sebagai file) sangat penting. Memang butuh lebih banyak waktu untuk membuat kode ini.
Pada masalah alur kerja yang lebih besar, saya suka jawaban Hadley tentang penghitungan kode / file data untuk aliran pembersihan dan analisis. Semua proyek analisis data saya memiliki struktur yang serupa.
sumber
Saya akan menambahkan suara saya ke sweave. Untuk analisis multi-langkah yang rumit, Anda dapat menggunakan makefile untuk menentukan bagian-bagian yang berbeda. Dapat mencegah keharusan mengulangi seluruh analisis jika hanya satu bagian yang berubah.
sumber
Saya juga melakukan apa yang dilakukan Josh Reich, hanya saya yang membuat paket-R pribadi saya, karena membantu saya menyusun kode dan data saya, dan juga cukup mudah untuk membagikannya dengan orang lain.
membuat paket saya: devtools :: create ('package_name')
memuat dan membersihkan: Saya membuat skrip dalam data-mentah / subfolder dari paket saya untuk memuat, membersihkan, dan menyimpan objek data yang dihasilkan dalam paket menggunakan devtools :: use_data (object_name). Lalu saya kompilasi paket. Mulai sekarang, perpustakaan panggilan (package_name) membuat data ini tersedia (dan mereka tidak dimuat sampai diperlukan).
fungsi: Saya memasukkan fungsi untuk analisis saya ke dalam R / subfolder dari paket saya, dan mengekspor hanya yang perlu dipanggil dari luar (dan bukan fungsi pembantu, yang bisa tetap tidak terlihat).
lakukan: Saya membuat skrip yang menggunakan data dan fungsi yang disimpan dalam paket saya. (Jika analisis hanya perlu dilakukan satu kali, saya dapat memasukkan skrip ini ke dalam data-raw / subfolder, jalankan, dan simpan hasilnya dalam paket agar mudah diakses.)
sumber