Solo veri analisti için R ve sürüm kontrolü


155

Saygı duyduğum birçok veri analisti sürüm kontrolünü kullanıyor. Örneğin:

Ancak, git gibi bir sürüm kontrol sisteminin benimsenmesinin faydalı olup olmayacağını değerlendiriyorum.

Kısa bir bakış: Araştırma yayınları için verileri analiz etmek üzere R'yi kullanan bir sosyal bilimciyim. Şu anda R paketleri üretmiyorum. Bir proje için R kodum genellikle veri girişi, temizleme, manipülasyon, analizler ve çıktı üretimi için birkaç bin satır kod içerir. Yayınlar tipik olarak LaTeX kullanılarak yazılır.

Sürüm kontrolü ile ilgili olarak okuduğum birçok fayda var, ancak solo veri analisti ile daha az ilgili görünüyorlar.

  • Destek olmak: Halihazırda bir yedekleme sistemim var.
  • Çatallama ve geri sarma: Bunu yapma ihtiyacını hiç hissetmedim, ancak bunun nasıl yararlı olabileceğini görebiliyorum (örneğin, aynı veri kümesine dayanan birden çok dergi makalesi hazırlıyorsunuz; aylık olarak güncellenen bir rapor hazırlıyorsunuz, vb. )
  • İşbirliği: Çoğu zaman verileri kendim analiz ediyorum, dolayısıyla sürüm kontrolünün işbirliği avantajlarından faydalanamam.

Sürüm kontrolünün benimsenmesiyle ilgili çeşitli potansiyel maliyetler de vardır:

  • Bir sürüm kontrol sistemini değerlendirme ve öğrenme zamanı
  • Mevcut dosya yönetim sistemime göre karmaşıklıkta olası bir artış

Ancak, hala bir şey eksik olduğumu hissediyorum. Sürüm kontrolü ile ilgili genel kılavuzlar, bilgisayar bilimcilerine yönelik veri analistlerinden daha çok ele alınmaktadır.

Bu nedenle, özellikle yukarıda listelenenlere benzer durumlarda veri analistleriyle ilgili olarak:

  1. Sürüm kontrolü çabaya değer mi?
  2. Sürüm kontrolünü benimsemenin ana artıları ve eksileri nelerdir?
  3. R ile veri analizi için sürüm kontrolüne başlamak için iyi bir strateji nedir (örn. Örnekler, iş akışı fikirleri, yazılım, kılavuzlara bağlantılar)?


@Marek Bu yazı faydalıdır. Çok teşekkürler. Yine de, eğer varsa, veri analizi, R ve yazma araştırması ile ilgili belirli konuların bilmek istiyorum.
Jeromy Anglim

İlk sorunuzun cevabı elbette "evet" dir. Ancak genellikle ne tür / boyutta veri işliyorsunuz. Çoğu CVS sistemi ikili verileri depolamakta zorlanır.
Eduardo Leoni

3
Ayrıca şuna da bakmak isteyebilirsiniz: stackoverflow.com/questions/2286831/…
Shane

@Eduardo Düz metin (örn. Sekmeyle ayrılmış, sabit genişlik) ve ikili (veritabanları, SPSS, Excel, vb.) Dosyaların bir karışımıyla çalışıyorum. Veriler değişiklik gösterir: Tipik örnekler 100 satır x 500 sütun ila 10.000 x 20 ila 2.000.000 x 20
Jeromy Anglim

Yanıtlar:


89

Sorunuzun cevabının kocaman bir evet olduğunu düşünüyorum - bir sürüm kontrol sistemi ile dosyalarınızı yönetmenin faydaları böyle bir sistemi uygulama maliyetlerinden çok daha ağır basmaktadır.

Belirttiğiniz bazı noktalara ayrıntılı olarak cevap vermeye çalışacağım:

  • Yedekleme: Halihazırda bir yedekleme sistemim var.

Evet, ve ben de. Performans tarafında:

  • Yedekleme sisteminiz hangi aralıkta fotoğraf çekiyor?
  • Anlık görüntü oluşturmak ne kadar sürer?
  • Anlık görüntü çekerken tüm sabit sürücünüzü görüntülemesi gerekiyor mu, yoksa yalnızca kritik güncellemeleri alan iki dosyayı yedeklemesi kolayca söylenebilir mi?
  • Yedekleme sisteminiz, kesin doğrulukla, metin dosyalarınızda bir yedeklemeden diğerine değişenleri gösterebilir mi?

Ve en önemlisi:

  • Yedekler kaç konuma kaydedilir? Bilgisayarınızla aynı fiziksel konumda mı?
  • Tek bir dosyanın belirli bir sürümünü yedekleme sisteminizden geri yüklemek ne kadar kolay?

Örneğin, bir Mac edinin ve bilgisayarımdaki başka bir sabit sürücüye yedeklemek için Time Machine kullanın. Time Machine tuhaf dosyayı kurtarmak veya işler bozulursa sistemimi geri yüklemek için mükemmeldir. Ancak benim önemli çalışmamla güvenmek için gerekenlere sahip değil:

  • Yedekleme yaparken, Time Machine önemli bir zaman alan tüm sabit diski görüntülemelidir. Çalışmaya devam edersem, dosyama yedeklemeyi başlattığım durumda alınacağının garantisi yoktur. İlk yedekleme tamamlanmadan önce kaydetmek istediğim başka bir noktaya da gelebilirim.

  • Time Machine yedeklerimin kaydedildiği sabit disk makinemde bulunuyor - bu, verilerimi hırsızlığa, yangına ve diğer felaketlere karşı savunmasız hale getiriyor.

Git gibi bir sürüm kontrol sistemiyle, bir metin düzenleyicide bir kayıt istemek için belirli bir dosyanın yedeğini başlatabilirim - ve dosya anında görüntülenebilir ve saklanabilir. Ayrıca Git dağıtıldığım için çalıştığım her bilgisayarın deponun tam bir kopyası olacak.

Bu, çalışmamın dört farklı bilgisayara yansıtılması anlamına geliyor - tanrı eyleminden kısa bir şey dosyalarımı ve verilerimi yok edemezdi, bu noktada muhtemelen çok fazla umursamıyordum.

  • Çatallama ve geri sarma: Bunu yapma ihtiyacını hiç hissetmedim, ancak bunun nasıl yararlı olabileceğini görebiliyorum (örneğin, aynı veri kümesine dayanan birden çok dergi makalesi hazırlıyorsunuz; aylık olarak güncellenen bir rapor hazırlıyorsunuz, vb. )

Solist olarak ben de o kadar çatallanmıyorum. Ancak, geri alma seçeneğine sahip olduğum zamandan beri, bir sürüm kontrol sistemini öğrenme yatırımımı birçok kez geri ödedi. Bunu yapma gereğini hiç hissetmediğinizi söylüyorsunuz - ancak mevcut yedekleme sisteminiz altındaki herhangi bir dosyayı geri sarmak gerçekten acısız, uygulanabilir bir seçenek miydi?

Rapor bazen 45 dakika, bir saat ya da iki gün önce daha iyi görünüyordu.

  • İşbirliği: Çoğu zaman verileri kendim analiz ediyorum, dolayısıyla sürüm kontrolünün işbirliği avantajlarından faydalanamam.

Evet, ancak bir projede başkalarıyla işbirliği yaparsanız vazgeçilmez olabilecek bir araç öğrenirsiniz.

  • Bir sürüm kontrol sistemini değerlendirme ve öğrenme zamanı

Bu konuda fazla endişelenme. Sürüm kontrol sistemleri programlama dilleri gibidir; öğrenilmesi gereken birkaç temel kavramları vardır ve gerisi sadece sözdizimsel şekerdir. Temel olarak, öğrendiğiniz ilk sürüm kontrol sistemi, bir başkasına en çok zaman ayırmayı gerektirir, sadece yeni sistemin temel kavramları nasıl ifade ettiğini öğrenmeyi gerektirir.

Popüler bir sistem seçin ve devam edin!

  • Mevcut dosya yönetim sistemime göre karmaşıklıkta olası bir artış

ProjectsVeri analizi faaliyetlerinizle ilgili tüm klasörleri ve dosyaları içeren bir klasörünüz var mı? Eğer öyleyse, o zaman sürüm kontrol tokat dosya sisteminin karmaşıklığını tam olarak artıracaktır 0. Projeleriniz bilgisayarınız hakkında bilgi alıyorsa - sürüm denetimini uygulamadan önce bunları merkezileştirmelisiniz ve bu, dosyalarınızı yönetmenin karmaşıklığını azaltacaktır - bu yüzden Documentssonuçta bir klasörümüz var .

  1. Sürüm kontrolü çabaya değer mi?

Evet! Size büyük bir geri alma düğmesi verir ve USB sürücünüzü kaybetmek gibi şeyler hakkında endişelenmeden işi makineden makineye kolayca aktarmanızı sağlar.

2 Sürüm kontrolünü benimsemenin ana artıları ve eksileri nelerdir?

Düşünebildiğim tek şey dosya boyutunda hafif bir artış- ama modern sürüm kontrol sistemleri sıkıştırma ve seçici kaydetme ile kesinlikle şaşırtıcı şeyler yapabilir, bu yüzden bu oldukça tartışmalı bir noktadır.

3 R ile veri analizi için sürüm kontrolüne başlamak için iyi bir strateji nedir (örn. Örnekler, iş akışı fikirleri, yazılım, kılavuzlara bağlantılar)?

Veri veya rapor üreten dosyaları sürüm kontrolü altında tutun, seçici olun. Gibi bir şey kullanıyorsanız Sweave, .Rnwdosyalarınızı saklayın .tex, onlardan üretilen dosyaları saklayın . Yeniden elde etmek acı verici olursa ham verileri depolayın. Mümkünse, verilerinizi alan bir komut dosyasını ve ham verilerdeki değişiklikleri depolamak yerine temizleyen veya değiştiren başka bir komut dosyası yazın ve saklayın.

Bir sürüm kontrol sistemi öğrenmeye gelince, Git'i ve bu kılavuzu şiddetle tavsiye ederim .

Bu web sitelerinin Git ile belirli eylemler gerçekleştirmeyle ilgili bazı hoş ipuçları ve püf noktaları da vardır:


1
+1 "Geçerli dosya yönetim sistemime göre karmaşıklıkta olası bir artış" yanıtı için. Sürüm kontrolüne yerleştirilen öğelerin yanı sıra yedekleme işleminizdeki anlık görüntü noktaları üzerinde ayrıntılı denetim sağlaması durumunda sürüm kontrolü potansiyel olarak karmaşıklık düzeyini azaltacaktır. ).
Christopher Hackett

23

Dokuz yıl boyunca bir analiz dükkanında çalıştım ve analiz projelerimiz için sürüm kontrolü fikrini bu mağazaya tanıttım. Açıkçası sürüm kontrolüne büyük inancım var. Ancak ben şu noktalara değineceğim.

  1. Mahkemede olası kullanım için analiz yapıyorsanız sürüm kontrolü uygun olmayabilir. Bu sizin için geçerli gibi görünmüyor, ancak müşterilerimizi şimdiye kadar ürettiğimiz her betiğin her versiyonunun potansiyel olarak keşfedilebilir olduğunu bilmek çok gergin olurdu. Bu nedenle, birden fazla katılımda yeniden kullanılan kod modülleri için sürüm kontrolü kullandık, ancak bu nedenle, etkileşime özgü kod için sürüm kontrolü kullanmadık.
  2. Sürüm kontrolünün en büyük faydasının, birden fazla projede yeniden kullanılan hazır kod modüllerini depolamaktan kaynaklandığını tespit ettik. Örneğin, belirli Nüfus Sayımı PUMS özlerini işlemek için özel bir favori yolunuz olabilir. Bu kodu bir dizinde düzenleyin ve VCS'nize yerleştirin. Daha sonra her ihtiyaç duyduğunuzda her yeni projeye göz atabilirsiniz. Söz konusu proje için belirli bir ortak veri kümesinin özel işlenmesini yapıyorsanız, belirli proje için belirli kodun belirli dallarını oluşturmak bile yararlı olabilir. Ardından, bu projeyle işiniz bittiğinde, özel kodunuzun ne kadarının ana şubeyle birleştirileceğini belirleyin.
  3. İşlenmiş verileri sürüm kontrolüne koymayın. Sadece kod. Hedefimiz her zaman eksiksiz bir komut dizisine sahip olmaktı, böylece dahili olarak işlenmiş tüm verilerimizi silebilir, bir düğmeye basabilir ve rapor için her sayıyı sıfırdan yeniden oluşturabiliriz. Verilerinizde gizemli bir şekilde yaşayan eski böceklerin olmadığından emin olmanın tek yolu budur.
  4. Sonuçlarınızın gerçekten tamamen tekrarlanabilir olduğundan emin olmak için, kodunuzu bir VCS'de tutmak yeterli değildir. Belirli bir çıktıyı oluşturmak için hangi modüllerin hangi versiyonunun kullanıldığını dikkatle takip etmek önemlidir.
  5. Yazılım gelince, Subversion ile iyi şanslar yaşadım. Kurulumu ve yönetimi kolaydır. Git ve mercurial gibi yeni kanatlı dağıtılmış VCS'lerin cazibesini tanıyorum, ancak kendiniz çalışıyorsanız güçlü avantajlar olduğundan emin değilim. Öte yandan, onları kullanmak için herhangi bir olumsuzluk da bilmiyorum - onlarla bir analiz ortamında çalışmadım.

18

Tamlık uğruna, sürüm kontrolünü benimseme konusunda bir güncelleme sağlayacağımı düşündüm.

Solo veri analizi projeleri için sürüm kontrolünün çok yararlı olduğunu gördüm.

Git'i ana sürüm kontrol aracım olarak kabul ettim. İlk olarak Statet ile Eclipse içinde Egit kullanmaya başladım. Şimdi genellikle komut satırı arayüzünü kullanıyorum, ancak RStudio ile entegrasyon oldukça iyi.

Veri analizi projeleri açısından sürüm kontrolü ile kurulum deneyimim hakkında blog yazdım .

Mesajda belirtildiği gibi, sürüm kontrolünü benimsemenin, açıklamak da dahil olmak üzere veri analizi projeleri hakkında nasıl düşündüğümde birçok ikincil faydası olduğunu buldum:

  • kaynak ve türetilmiş dosyalar arasındaki ayrım
  • bağımlılıkların doğası:
    • kod öğeleri arasındaki bağımlılıklar
    • bir proje içindeki dosyalar arasındaki bağımlılıklar
    • ve depo dışındaki dosya ve programlara bağımlılıklar
  • bir havuzun doğası ve depoların nasıl bölünmesi gerektiği
  • değişiklikleri ve proje aşamalarını gerçekleştirmenin ve belgelemenin niteliği

2
Ben de komut satırı arayüzü ile başladı (ve bilmek iyi) ama ben de ağırlıklı olarak benim R / git ihtiyaçları için RStudio kullanarak geçti. İstediğim çoğu şeyi sağlar, ancak bazen doğrudan arabirime yerleşik olmayan birkaç şey yapmak için bir terminal açmam gerekir.
Dason

17

R ve LaTeX kullanarak ekonomi araştırması yapıyorum ve işimi daima sürüm kontrolü altına alıyorum. Sınırsız geri alma işlemine benzer. Bazaar'ı deneyin, öğrenmek ve kullanmak için en basit olanlardan biridir ve Windows'taysanız bir grafik kullanıcı arayüzü (TortoiseBZR) vardır.

Evet, başkalarıyla çalışırken sürüm kontrolünün ek faydaları vardır, ancak solo projelerde bile çok mantıklıdır.


9

Şu anda, muhtemelen çalışmanızı, yapmasını istediğiniz şeyi yapacak bir kod geliştirmek olarak görüyorsunuz. Bir revizyon kontrol sistemi kullandıktan sonra, çalışmanızı depodaki mirasınızı yazmak ve sistemde parlak artımlı değişiklikler yapmak olarak düşüneceksiniz. Çok daha iyi hissettiriyor.


7

Yine de sizin gibi solo bir eylem için sürüm kontrolü öneriyorum çünkü hataları yakalamak için bir güvenlik ağına sahip olmak harika bir şey olabilir.

Yalnız bir Java geliştiricisi olarak çalıştım ve hala kaynak kontrolünü kullanıyorum. Eğer bir şeyleri sürekli kontrol edersem, bir şeyler ters giderse bir saatten fazla iş kaybedemem. Endişelenmeden deney yapabilir ve yeniden düzenleyebilirim, çünkü eğer ters giderse her zaman son çalışan versiyonuma geri dönebilirim.

Sizin için durum buysa, kaynak kontrolünü kullanmanızı tavsiye ederim. Öğrenmek zor değil.


7

Bir sürüm kontrol yazılımı kullanmanız gerekir, aksi takdirde analiziniz mükemmel şekilde tekrarlanamaz.

Sonuçlarınızı bir yerde yayınlamak istiyorsanız, bunları hazırladığınız anda her zaman komut dosyalarınızın durumunu yeniden yapılandırabilmelisiniz. İnceleyenlerden birinin komut dosyalarınızdan birinde bir hata bulduğunu varsayalım: hangi sonuçların etkilendiğini, hangilerinin etkilenmediğini nasıl bilebilirsiniz?

Bu anlamda bir yedekleme sistemi yeterli değildir, çünkü muhtemelen günde sadece bir kez yapılır ve farklı yedeklemelere etiket uygulamaz, bu nedenle hangi sürümlerin hangi sonuçlara karşılık geldiğini bilmezsiniz. Ve bir vcs öğrenmek düşündüğünüzden daha basittir, bir dosyayı nasıl ekleyeceğinizi ve değişiklikleri nasıl yapacağınızı öğrenirseniz zaten yeterlidir.


1
Güçlü bir tartışma yaparsınız. Ancak, resmi bir versiyon kontrol sistemi olmadan tekrarlanabilir araştırmaların mümkün olduğunu düşünüyorum. Daha az zarif ve daha az esnektir. R çıktısının otomatik olarak son belgeye entegre edilmesi için okuryazar programlama ilkelerini kullanarak R kodu yazmaya çalışıyorum. Bu son ürünle ilişkili dosyalar daha sonra kaydedilebilir.
Jeromy Anglim

Bu, tüm analizi verilerinize yeniden uygulamanıza yardımcı olur, ancak önceki sonuçlarınızdan hangisinin hatadan etkilendiğini size söylemez.
dalloliogm

6

Sürüm kontrolü çabaya değer mi?

büyük bir EVET.

Sürüm kontrolünü benimsemenin ana artıları ve eksileri nelerdir?

Artıları: Daha önce yaptıklarınızı takip edebilirsiniz. Lateks için özellikle yararlıdır, çünkü sizin tarafınızdan silinmiş eski bir paragrafa ihtiyacınız olabilir! Bilgisayarınız çöktüğünde veya yeni bir bilgisayarda çalıştığınızda, verileriniz anında geri gelir.

eksileri: bazı ayarları yapmanız gerekir.

R ile veri analizi için sürüm kontrolüne başlamak için iyi bir strateji nedir (örn. Örnekler, iş akışı fikirleri, yazılım, kılavuzlara bağlantılar)?

Sadece kullanmaya başlayın. Kaplumbağa SVN'yi bir istemci aracı olarak pencerelerde kullanıyorum ve bölümümün bir svn sunucusu var, tüm kodumu ve verilerimi koyuyorum (evet, ayrıca verilerinizi oraya koydunuz!).


6

Önce biraz geriye gidin ve R paketleri yazmanın avantajlarını öğrenin! Birkaç bin satır kod içeren projeleriniz olduğunu söylüyorsunuz, ancak bunlar paket kodu gibi yapılandırılmamış veya belgelenmemiş mi? Her işleve ilişkin belgeler, olağan yakalanması zor hataların birçoğu için testler, kendi test takımlarınızı yazma olanağı vb.Gibi paket ideallerine uygun büyük kazançlar elde edersiniz.

Bir paket üretmek için disipliniz yoksa, uygun revizyon kontrolünü yapacak disipline sahip olduğunuzdan emin değilim.


3
Her şey bir yolculuk, özellikle de BT dışı bir geçmişten geldiğinizde. Şimdi git kullanıyorum ve harika. Ayrıca R paket altyapısı ile uğraşmaya başlıyorum. 1000'ler kod satırıyla ilgili olarak, bu genellikle büyük miktarlarda kendine özgü veri işleme ve hipotez odaklı grafik ve tablo oluşturma işlemlerinden kaynaklanır. Deneyim soyutlamaları görmeyi kolaylaştırırken, belli bir miktar kendine özgü kodun psikolojik veri setlerini analiz etmenin ne anlama geldiğinin bir parçası olduğunu görüyorum. Bunun ProjectTemplate paketinin ve Sweave'ın popülaritesini açıklamaya yardımcı olduğunu düşünüyorum.
Jeromy Anglim

5

Yukarıdaki duyguları kabul ediyorum ve Evet, sürüm kontrolünün yararlı olduğunu söyleyebilirim.

Avantajları;

  • araştırmanızı ve yedeklemenizi kaydedin (etiketleme)
  • farklı fikirleri denemenizi ve işe yaramazlarsa geri dönmenizi sağlar (dallanma)
  • Çalışmanızı diğer insanlarla paylaşabilirsiniz ve onlar üzerindeki değişikliklerini sizinle paylaşabilirler (bunu belirtmediğinizi biliyorum, ama harika)
  • Çoğu sürüm kontrol sistemi belirli bir noktada, örneğin yayınlanmak üzere bir makale gönderdiğiniz noktada, kontrol altındaki tüm dosyalar için sıkıştırılmış bir paket oluşturmayı kolaylaştırır. (bunu manuel olarak yapabilirsiniz, ancak sürüm kontrolü bunu yaptığında neden bu işlemleri oluşturuyorsunuz)

Araç setleri açısından Git'i kullanıyorum , kesinlikle Eclipse kullanmak zorunda olmasanız da, iyi çalışan StatEt ve Eclipse ile birlikte . Eclipse için birkaç Git eklentisi var , ancak genellikle komut satırı seçeneklerini kullanıyorum.


StatET ve Eclipse'i R için kullanıyorum; belki de önce git'i deneyeceğim.
Jeromy Anglim

4

Yalnız gelişim için bir sürüm Kontrolü (her türlü) gerçekten ilginç:

  • tarihi keşfetmek ve mevcut çalışmayı geçmiş taahhütlerle karşılaştırmak
  • aynı dosya kümesi için farklı sürümleri dallandırma ve deneme

Bu iki temel sürüm kontrol özelliğinden birini yaptığınızı görmüyorsanız, tek ihtiyacınız olan basit bir yedekleme aracı olabilir.
Bu özelliklere gereksiniminiz varsa, yedek de alırsınız ( git bundleörneğin)


4

Ayrıca solo senaryo çalışması da yapıyorum ve işleri daha karmaşık hale getirmek yerine basitleştirdiğini görüyorum. Yedekleme kodlama iş akışına entegre edilmiştir ve ayrı bir dosya sistemi prosedürleri seti gerektirmez. Herhangi bir sürüm kontrol sisteminin temellerini öğrenmek için harcanan zaman kesinlikle iyi harcanan zaman olacaktır.


4

Dropbox, bir sürü ekstra fayda ile çok az çaba sarf etmenizi sağlayan bir "ppor man's" sürüm kontrolüne sahiptir.

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.