Kontrol R dan versi untuk analis data tunggal

155

Banyak analis data yang saya hormati menggunakan kontrol versi. Sebagai contoh:

Namun, saya mengevaluasi apakah mengadopsi sistem kontrol versi seperti git akan bermanfaat.

Tinjauan singkat: Saya seorang ilmuwan sosial yang menggunakan R untuk menganalisis data untuk publikasi penelitian. Saat ini saya tidak menghasilkan paket R. Kode R saya untuk suatu proyek biasanya mencakup beberapa ribu baris kode untuk input data, pembersihan, manipulasi, analisis, dan pembuatan keluaran. Publikasi biasanya ditulis menggunakan LaTeX.

Sehubungan dengan kontrol versi ada banyak manfaat yang telah saya baca, namun mereka tampaknya kurang relevan dengan analis data solo.

  • Cadangan: Saya sudah memiliki sistem cadangan.
  • Forking dan rewinding: Saya tidak pernah merasa perlu untuk melakukan ini, tapi saya bisa melihat bagaimana itu bisa berguna (misalnya, Anda sedang menyiapkan beberapa artikel jurnal berdasarkan dataset yang sama; Anda sedang menyiapkan laporan yang diperbarui setiap bulan, dll. )
  • Kolaborasi: Sebagian besar waktu saya menganalisis data sendiri, dengan demikian, saya tidak akan mendapatkan manfaat kolaborasi dari kontrol versi.

Ada juga beberapa biaya potensial yang terlibat dengan mengadopsi kontrol versi:

  • Saatnya mengevaluasi dan mempelajari sistem kontrol versi
  • Kemungkinan peningkatan kompleksitas pada sistem manajemen file saya saat ini

Namun, saya masih merasa bahwa saya kehilangan sesuatu. Panduan umum tentang kontrol versi tampaknya lebih ditujukan pada ilmuwan komputer daripada analis data.

Dengan demikian, khususnya terkait dengan analis data dalam keadaan yang mirip dengan yang tercantum di atas:

  1. Apakah kontrol versi sepadan dengan usaha?
  2. Apa pro dan kontra utama dari mengadopsi kontrol versi?
  3. Apa strategi yang baik untuk memulai dengan kontrol versi untuk analisis data dengan R (misalnya, contoh, gagasan alur kerja, perangkat lunak, tautan ke panduan)?
Jeromy Anglim
sumber
2
Sudahkah Anda membaca ini: stackoverflow.com/questions/360887/…
Marek
@Marek Posting itu berguna. Terimakasih banyak. Saya masih ingin tahu masalah spesifik apa, jika ada, yang terkait dengan analisis data, R, dan penulisan penelitian.
Jeromy Anglim
Jawaban atas pertanyaan pertama Anda adalah "ya", tentu saja. Tetapi jenis / ukuran data apa yang biasanya Anda tangani. Sebagian besar sistem CVS kesulitan menyimpan data biner.
Eduardo Leoni
3
Anda mungkin juga ingin melihat ini: stackoverflow.com/questions/2286831/…
Shane
@Eduardo Saya bekerja dengan campuran teks biasa (mis., Tab dibatasi, lebar tetap) dan file biner (database, SPSS, Excel, dll.). Data bervariasi: Contoh umum 100 baris x 500 kolom hingga 10.000 x 20 hingga 2.000.000 x 20.
Jeromy Anglim

Jawaban:

89

Saya merasa jawaban untuk pertanyaan Anda adalah ya - manfaat mengelola file Anda dengan sistem kontrol versi jauh lebih besar daripada biaya penerapan sistem seperti itu.

Saya akan mencoba merespons secara rinci beberapa poin yang Anda ajukan:

  • Cadangan: Saya sudah memiliki sistem cadangan.

Ya, dan saya juga. Namun, ada beberapa pertanyaan yang perlu dipertimbangkan sehubungan dengan kesesuaian mengandalkan sistem cadangan tujuan umum untuk secara memadai melacak file penting dan aktif yang berkaitan dengan pekerjaan Anda. Di sisi kinerja:

  • Pada interval berapa sistem cadangan Anda mengambil foto?
  • Berapa lama untuk membuat snapshot?
  • Apakah harus memotret seluruh hard drive Anda saat mengambil snapshot, atau dapatkah dengan mudah disuruh mencadangkan dua file yang baru saja menerima pembaruan penting?
  • Dapatkah sistem cadangan Anda menunjukkan kepada Anda, dengan akurasi, apa yang berubah dalam file teks Anda dari satu cadangan ke yang berikutnya?

Dan yang paling penting:

  • Berapa banyak lokasi cadangan disimpan? Apakah mereka berada di lokasi fisik yang sama dengan komputer Anda?
  • Seberapa mudah untuk mengembalikan versi file tunggal dari sistem cadangan Anda?

Misalnya, miliki Mac dan gunakan Time Machine untuk mencadangkan ke hard drive lain di komputer saya. Time Machine sangat bagus untuk memulihkan file aneh atau memulihkan sistem saya jika ada masalah. Namun itu tidak memiliki apa yang diperlukan untuk dipercaya dengan pekerjaan penting saya:

  • Saat mencadangkan, Time Machine harus mem-image keseluruhan hard drive yang membutuhkan banyak waktu. Jika saya terus bekerja, tidak ada jaminan bahwa file saya akan ditangkap dalam keadaan seperti itu ketika saya memulai cadangan. Saya juga dapat mencapai titik lain yang ingin saya simpan sebelum cadangan pertama selesai.

  • Hard drive tempat cadangan Time Machine saya disimpan berada di mesin saya - ini membuat data saya rentan terhadap pencurian, kebakaran, dan bencana lainnya.

Dengan sistem kontrol versi seperti Git, saya dapat memulai cadangan file tertentu tanpa upaya lebih lanjut yang meminta penyimpanan dalam editor teks - dan file tersebut dicitrakan dan disimpan secara instan. Selanjutnya, Git didistribusikan sehingga setiap komputer tempat saya bekerja memiliki salinan lengkap dari repositori.

Ini setara dengan pekerjaan saya yang dicerminkan di empat komputer yang berbeda - tidak ada tindakan dewa yang dapat menghancurkan file dan data saya, pada titik mana saya mungkin tidak akan terlalu peduli.

  • Forking dan rewinding: Saya tidak pernah merasa perlu untuk melakukan ini, tapi saya bisa melihat bagaimana itu bisa berguna (misalnya, Anda sedang menyiapkan beberapa artikel jurnal berdasarkan dataset yang sama; Anda sedang menyiapkan laporan yang diperbarui setiap bulan, dll. )

Sebagai solois, saya juga tidak banyak bercabang. Namun, waktu yang saya hemat dengan memiliki opsi untuk mundur telah membayar sendiri investasi saya dalam mempelajari sistem kontrol versi berkali-kali. Anda mengatakan Anda tidak pernah merasa perlu melakukan ini - tetapi apakah memundurkan file apa pun di bawah sistem cadangan Anda saat ini benar-benar merupakan pilihan yang tidak menyakitkan dan layak?

Terkadang laporannya terlihat lebih baik 45 menit, satu jam atau dua hari yang lalu.

  • Kolaborasi: Sebagian besar waktu saya menganalisis data sendiri, dengan demikian, saya tidak akan mendapatkan manfaat kolaborasi dari kontrol versi.

Ya, tetapi Anda akan mempelajari alat yang mungkin terbukti sangat diperlukan jika Anda akhirnya berkolaborasi dengan orang lain dalam suatu proyek.

  • Saatnya mengevaluasi dan mempelajari sistem kontrol versi

Jangan terlalu khawatir tentang ini. Sistem kontrol versi seperti bahasa pemrograman - mereka memiliki beberapa konsep kunci yang perlu dipelajari dan sisanya hanya gula sintaksis. Pada dasarnya, sistem kontrol versi pertama yang Anda pelajari akan membutuhkan investasi paling banyak waktu-beralih ke yang lain hanya membutuhkan belajar bagaimana sistem baru mengekspresikan konsep-konsep kunci.

Pilih sistem yang populer dan lakukan!

  • Kemungkinan peningkatan kompleksitas pada sistem manajemen file saya saat ini

Apakah Anda memiliki satu folder, misalnya Projectsyang berisi semua folder dan file yang terkait dengan aktivitas analisis data Anda? Jika demikian maka menampar kontrol versi akan meningkatkan kompleksitas sistem file Anda dengan tepat 0. Jika proyek Anda bertebaran tentang komputer Anda - maka Anda harus memusatkan mereka sebelum menerapkan kontrol versi dan ini pada akhirnya akan mengurangi kompleksitas mengelola file Anda - itu sebabnya kami memiliki Documentsfolder.

  1. Apakah kontrol versi sepadan dengan usaha?

Iya! Ini memberi Anda tombol membatalkan besar dan memungkinkan Anda untuk dengan mudah mentransfer pekerjaan dari mesin ke mesin tanpa khawatir tentang hal-hal seperti kehilangan drive USB Anda.

2 Apa pro dan kontra utama dari mengadopsi kontrol versi?

Satu-satunya hal yang dapat saya pikirkan adalah sedikit peningkatan ukuran file- tetapi sistem kontrol versi modern dapat melakukan hal-hal yang luar biasa dengan kompresi dan penghematan selektif sehingga ini adalah poin yang bisa diperdebatkan.

3 Apa strategi yang baik untuk memulai dengan kontrol versi untuk analisis data dengan R (misalnya, contoh, gagasan alur kerja, perangkat lunak, tautan ke panduan)?

Simpan file yang menghasilkan data atau laporan di bawah kontrol versi, selektif. Jika Anda menggunakan sesuatu seperti Sweave, simpan .Rnwfile Anda dan bukan .texfile yang dihasilkan darinya. Simpan data mentah jika akan sulit diperoleh kembali. Jika memungkinkan, tulis dan simpan skrip yang memperoleh data Anda dan skrip lain yang membersihkan atau memodifikasinya daripada menyimpan perubahan pada data mentah.

Sedangkan untuk mempelajari sistem kontrol versi, saya sangat merekomendasikan Git dan panduan ini.

Situs web ini juga memiliki beberapa kiat dan trik bagus terkait dengan melakukan tindakan spesifik dengan Git:

Sharpie
sumber
1
+1 untuk balasan ke "Kemungkinan peningkatan kompleksitas pada sistem manajemen file saya saat ini". Kontrol versi akan berpotensi mengurangi tingkat kerumitan jika item yang ditempatkan dalam kontrol versi bersama dengan memberikan tingkat kontrol granular atas titik-titik snapshot dalam proses pencadangan Anda (Anda juga memberikan deskripsi yang sangat membantu dalam memulihkan bukan berdasarkan tanggal tetapi oleh fitur atau perubahan ).
Christopher Hackett
23

Saya bekerja selama sembilan tahun di sebuah toko analisis, dan memperkenalkan gagasan kontrol versi untuk proyek analisis kami ke toko itu. Saya sangat percaya pada kontrol versi, tentu saja. Saya akan membuat poin-poin berikut.

  1. Kontrol versi mungkin tidak sesuai jika Anda melakukan analisis untuk kemungkinan penggunaan di pengadilan. Ini tidak terdengar seperti ini berlaku untuk Anda, tetapi itu akan membuat klien kami sangat gugup mengetahui bahwa setiap versi dari setiap skrip yang pernah kami buat berpotensi ditemukan. Kami menggunakan kontrol versi untuk modul kode yang digunakan kembali dalam berbagai keterlibatan, tetapi tidak menggunakan kontrol versi untuk kode khusus keterlibatan, karena alasan itu.
  2. Kami menemukan manfaat terbesar untuk kontrol versi berasal dari menyimpan modul kode kalengan yang digunakan kembali di beberapa proyek. Misalnya, Anda mungkin memiliki cara favorit tertentu dalam memproses ekstrak PUMS sensus tertentu. Atur kode ini ke dalam direktori dan masukkan ke dalam VCS Anda. Anda kemudian dapat memeriksanya di setiap proyek baru setiap kali Anda membutuhkannya. Bahkan mungkin berguna untuk membuat cabang tertentu dari kode tertentu untuk proyek tertentu, jika Anda melakukan pemrosesan khusus pada dataset umum tertentu untuk proyek itu. Kemudian, ketika Anda selesai dengan proyek itu, putuskan berapa banyak kode khusus Anda untuk digabungkan kembali ke cabang utama.
  3. Jangan memasukkan data yang diproses ke dalam kontrol versi. Hanya kode Tujuan kami adalah selalu memiliki satu set skrip yang lengkap sehingga kami dapat menghapus semua data yang kami proses secara internal, menekan tombol, dan membuat setiap nomor untuk laporan dibuat kembali dari awal. Itulah satu-satunya cara untuk memastikan bahwa Anda tidak memiliki bug lama yang hidup secara misterius dalam data Anda.
  4. Untuk memastikan bahwa hasil Anda benar-benar dapat direproduksi, tidak cukup hanya dengan menyimpan kode Anda di VCS. Sangatlah penting untuk melacak dengan cermat versi modul mana yang digunakan untuk membuat hasil tertentu.
  5. Sedangkan untuk perangkat lunak, saya beruntung dengan Subversion. Mudah diatur dan dikelola. Saya mengenali daya tarik VCS terdistribusi yang baru ketinggalan jaman, seperti git dan lincah, tapi saya tidak yakin ada keuntungan kuat jika Anda bekerja sendiri. Di sisi lain, saya juga tidak tahu adanya negatif untuk menggunakannya - saya hanya belum bekerja dengan mereka dalam lingkungan analisis.
Dan Menes
sumber
18

Demi kelengkapan, saya pikir saya akan memberikan pembaruan pada adopsi saya kontrol versi.

Saya telah menemukan kontrol versi untuk proyek analisis data tunggal sangat berguna.

Saya telah mengadopsi git sebagai alat kontrol versi utama saya. Saya pertama kali mulai menggunakan Egit dalam Eclipse dengan StatET. Sekarang saya umumnya hanya menggunakan antarmuka baris perintah, meskipun integrasi dengan RStudio cukup bagus.

Saya telah membuat blog tentang pengalaman saya yang diatur dengan kontrol versi dari perspektif proyek analisis data.

Seperti yang dinyatakan dalam posting, saya menemukan mengadopsi kontrol versi memiliki banyak manfaat sekunder dalam cara saya berpikir tentang proyek analisis data termasuk mengklarifikasi:

  • perbedaan antara sumber dan file yang diturunkan
  • sifat ketergantungan:
    • ketergantungan antar elemen kode
    • ketergantungan antara file dalam suatu proyek
    • dan dependensi dengan file dan program di luar repositori
  • sifat repositori dan bagaimana repositori harus dibagi
  • sifat melakukan dan mendokumentasikan perubahan dan tonggak proyek
Jeromy Anglim
sumber
2
Saya mulai dengan antarmuka baris perintah juga (dan itu baik untuk diketahui) tetapi saya juga telah beralih ke terutama menggunakan RStudio untuk kebutuhan R / git saya. Ini memberikan sebagian besar hal yang saya inginkan, tetapi kadang-kadang saya perlu membuka terminal untuk melakukan beberapa hal yang tidak secara langsung terintegrasi ke antarmuka.
Dason
17

Saya melakukan riset ekonomi menggunakan R dan LaTeX, dan saya selalu menempatkan pekerjaan saya di bawah kontrol versi. Ini seperti memiliki pembatalan tanpa batas. Coba Bazaar, ini salah satu yang paling sederhana untuk dipelajari dan digunakan, dan jika Anda menggunakan Windows, ia memiliki antarmuka pengguna grafis (TortoiseBZR).

Ya, ada manfaat tambahan untuk kontrol versi ketika bekerja dengan orang lain, tetapi bahkan pada proyek solo itu sangat masuk akal.

Ana Nelson
sumber
9

Saat ini, Anda mungkin menganggap pekerjaan Anda sebagai pengembangan kode yang akan melakukan apa yang Anda inginkan. Setelah Anda mengadopsi menggunakan sistem kontrol revisi, Anda akan menganggap pekerjaan Anda sebagai menuliskan warisan Anda di repositori, dan membuat perubahan inkremental yang brilian untuk itu. Rasanya jauh lebih baik.

Ken Williams
sumber
7

Saya masih merekomendasikan kontrol versi untuk aksi solo seperti Anda karena memiliki jaring pengaman untuk menangkap kesalahan bisa menjadi hal yang hebat untuk dimiliki.

Saya telah bekerja sebagai pengembang Java tunggal, dan saya masih menggunakan kontrol sumber. Jika saya memeriksa semuanya secara terus-menerus, saya tidak akan kehilangan pekerjaan lebih dari satu jam jika terjadi kesalahan. Saya dapat bereksperimen dan refactor tanpa khawatir, karena jika salah, saya selalu dapat memutar kembali ke versi kerja terakhir saya.

Jika itu masalahnya, saya sarankan menggunakan kontrol sumber. Tidak sulit untuk belajar.

Duffymo
sumber
7

Anda harus menggunakan perangkat lunak kontrol versi, jika tidak analisis Anda tidak akan dapat diproduksi kembali dengan sempurna.

Jika Anda ingin mempublikasikan hasil Anda di suatu tempat, Anda harus selalu dapat merekonstruksi status skrip Anda pada saat Anda telah memproduksinya. Katakanlah salah satu peninjau menemukan kesalahan dalam salah satu skrip Anda: bagaimana Anda tahu hasil mana yang terpengaruh dan mana yang tidak?

Dalam hal ini, sistem cadangan tidak cukup karena mungkin hanya dilakukan sekali sehari, dan tidak berlaku label untuk cadangan yang berbeda, sehingga Anda tidak tahu versi mana yang sesuai dengan hasil mana. Dan mempelajari vcs lebih sederhana dari apa yang Anda pikirkan, jika mempelajari cara menambahkan file dan bagaimana melakukan perubahan, itu sudah cukup.

dalloliogm
sumber
1
Anda membuat argumen yang kuat. Namun, saya pikir penelitian yang direproduksi dimungkinkan tanpa sistem kontrol versi formal. Hanya saja kurang elegan dan kurang fleksibel. Saya mencoba menulis kode R menggunakan prinsip-prinsip pemrograman terpelajar sehingga keluaran R secara otomatis diintegrasikan ke dalam dokumen akhir. File yang terkait dengan produk akhir ini kemudian dapat disimpan.
Jeromy Anglim
yang membantu Anda menerapkan kembali seluruh analisis pada data Anda, tetapi tidak memberi tahu Anda yang mana dari hasil sebelumnya yang terpengaruh oleh kesalahan.
dalloliogm
6

Apakah kontrol versi sepadan dengan usaha?

YA besar.

Apa pro dan kontra utama dari mengadopsi kontrol versi?

pro: Anda dapat melacak apa yang telah Anda lakukan sebelumnya. Sangat berguna untuk lateks, karena Anda mungkin memerlukan paragraf lama yang dihapus oleh Anda! Ketika komputer Anda crash atau Anda bekerja dengan yang baru, Anda memiliki data Anda kembali dengan cepat.

kontra: Anda perlu melakukan beberapa pengaturan.

Apa strategi yang baik untuk memulai dengan kontrol versi untuk analisis data dengan R (misalnya, contoh, gagasan alur kerja, perangkat lunak, tautan ke panduan)?

Mulai gunakan saja. Saya menggunakan tortoise SVN di windows sebagai alat klien dan departemen saya memiliki server svn, saya meletakkan semua kode dan data saya (ya, Anda juga meletakkan data Anda di sana!) Di sana.

Yin Zhu
sumber
6

Mundur sedikit lebih dulu, dan pelajari kelebihan menulis paket R! Anda mengatakan Anda memiliki proyek dengan beberapa ribu baris kode, namun ini tidak terstruktur atau didokumentasikan seperti kode paket? Anda mendapatkan kemenangan besar dengan mematuhi paket ideal, termasuk dokumentasi untuk setiap fungsi, tes untuk banyak kesalahan yang sulit ditangkap, fasilitas untuk menulis suite tes Anda sendiri dll. Dll.

Jika Anda tidak punya disiplin untuk menghasilkan paket, maka saya tidak yakin Anda punya disiplin untuk melakukan kontrol revisi yang tepat.

Spacedman
sumber
3
Ini semua adalah perjalanan, terutama ketika Anda berasal dari latar belakang non-IT. Saya sekarang menggunakan git, dan itu hebat. Saya juga mulai mencoba-coba infrastruktur paket R. Sehubungan dengan 1000-an baris kode, ini sering hasil dari sejumlah besar pemrosesan data istimewa dan grafik didorong hipotesis dan pembuatan tabel. Sementara pengalaman membuatnya lebih mudah untuk melihat abstraksi, saya menemukan sejumlah kode istimewa hanyalah bagian dari apa artinya menganalisis set data psikologis. Saya pikir ini membantu menjelaskan popularitas paket ProjectTemplate dan Sweave.
Jeromy Anglim
5

Saya setuju dengan sentimen di atas dan mengatakan bahwa, Ya, kontrol versi berguna.

Keuntungan;

  • buat penelitian Anda tetap dicatat dan didukung, (diberi tag)
  • itu memungkinkan Anda mencoba berbagai ide dan kembali jika tidak bekerja (bercabang)
  • Anda dapat membagikan karya Anda dengan orang lain, dan mereka dapat membagikan perubahannya kepada Anda (saya tahu Anda tidak menentukan ini, tapi bagus)
  • Sebagian besar sistem kontrol versi memudahkan untuk membuat bundel terkompresi untuk semua file yang terkendali pada titik tertentu, misalnya pada titik Anda mengirimkan artikel untuk publikasi, ini dapat membantu ketika orang lain meninjau artikel Anda. (Anda dapat melakukan ini secara manual, tetapi mengapa membuat proses ini ketika kontrol versi hanya melakukannya)

Dalam hal toolets, saya menggunakan Git , bersama dengan StatEt dan Eclipse yang berfungsi dengan baik, meskipun Anda tentu tidak harus menggunakan Eclipse. Ada beberapa plugin Git untuk Eclipse , tetapi saya biasanya menggunakan opsi baris perintah.

PaulHurleyuk
sumber
Saya menggunakan StatET dan Eclipse untuk R; jadi mungkin saya akan coba git dulu.
Jeromy Anglim
4

Kontrol versi untuk pengembangan solo (dalam bentuk apa pun) sangat menarik untuk:

  • menjelajahi sejarah dan membandingkan pekerjaan saat ini dengan komitmen sebelumnya
  • bercabang dan mencoba berbagai versi untuk satu set file yang sama

Jika Anda tidak melihat diri Anda melakukan salah satu dari dua fitur kontrol versi dasar itu, satu-satunya alat cadangan yang mungkin Anda butuhkan.
Jika Anda memang membutuhkan fitur-fitur tersebut, maka Anda juga akan mendapatkan cadangan ( git bundlemisalnya dengan)

VONC
sumber
4

Saya juga melakukan pekerjaan scripting solo, dan saya menemukan itu membuat hal-hal yang lebih sederhana, daripada membuatnya lebih kompleks. Cadangan diintegrasikan ke dalam alur kerja pengkodean dan tidak memerlukan prosedur sistem file yang terpisah. Waktu yang diperlukan untuk mempelajari dasar-dasar sistem kontrol versi pasti akan menghabiskan waktu dengan baik.

MW Frost
sumber
4

Dropbox memiliki kontrol versi "ppor man" yang membuat Anda menjadi bagian dari perjalanan ke sana untuk sedikit usaha dengan banyak manfaat tambahan.

Zach
sumber