R i kontrola wersji dla pojedynczego analityka danych

155

Wielu analityków danych, których szanuję, używa kontroli wersji. Na przykład:

Jednak oceniam, czy warto byłoby przyjąć system kontroli wersji, taki jak git.

Krótki przegląd: jestem socjologiem, który używa R do analizy danych do publikacji badawczych. Obecnie nie produkuję pakietów R. Mój kod R projektu zawiera zwykle kilka tysięcy wierszy kodu do wprowadzania danych, czyszczenia, manipulacji, analiz i generowania danych wyjściowych. Publikacje są zwykle pisane przy użyciu LaTeX.

Jeśli chodzi o kontrolę wersji, istnieje wiele korzyści, o których czytałem, ale wydają się one mniej istotne dla pojedynczego analityka danych.

  • Kopia zapasowa: mam już zainstalowany system tworzenia kopii zapasowych.
  • Rozwidlanie i przewijanie: nigdy nie czułem takiej potrzeby, ale widzę, jak mogłoby to być przydatne (np. Przygotowujesz wiele artykułów w czasopiśmie w oparciu o ten sam zestaw danych; przygotowujesz raport, który jest aktualizowany co miesiąc itp. )
  • Współpraca: przez większość czasu sam analizuję dane, dlatego nie uzyskałbym korzyści współpracy z kontrolą wersji.

Istnieje również kilka potencjalnych kosztów związanych z przyjęciem kontroli wersji:

  • Czas na ocenę i naukę systemu kontroli wersji
  • Możliwy wzrost złożoności w stosunku do mojego obecnego systemu zarządzania plikami

Jednak nadal mam wrażenie, że czegoś mi brakuje. Wydaje się, że ogólne przewodniki po kontroli wersji są adresowane bardziej do informatyków niż analityków danych.

Zatem w szczególności w odniesieniu do analityków danych w okolicznościach podobnych do wymienionych powyżej:

  1. Czy kontrola wersji jest warta wysiłku?
  2. Jakie są główne wady i zalety wprowadzenia kontroli wersji?
  3. Jaka jest dobra strategia rozpoczęcia kontroli wersji do analizy danych w języku R (np. Przykłady, pomysły dotyczące przepływu pracy, oprogramowanie, łącza do przewodników)?
Jeromy Anglim
źródło
@Marek Ten post jest przydatny. Wielkie dzięki. Nadal chciałbym wiedzieć, jakie konkretne kwestie, jeśli w ogóle, dotyczą analizy danych, R i pisania badań.
Jeromy Anglim
Oczywiście odpowiedź na twoje pierwsze pytanie brzmi „tak”. Ale jakiego rodzaju / rozmiaru danych zwykle obsługujesz. Większość systemów CVS ma trudności z przechowywaniem danych binarnych.
Eduardo Leoni
3
Możesz również spojrzeć na to: stackoverflow.com/questions/2286831/…
Shane
@Eduardo Pracuję z mieszanką plików tekstowych (np. Rozdzielany tabulatorami, stała szerokość) i binarnych (bazy danych, SPSS, Excel itp.). Dane są różne: Typowe przykłady 100 wierszy x 500 kolumn do 10 000 x 20 do 2 000 000 x 20.
Jeromy Anglim

Odpowiedzi:

89

Czuję, że odpowiedź na Twoje pytanie brzmi zdecydowanie tak - korzyści płynące z zarządzania plikami za pomocą systemu kontroli wersji znacznie przewyższają koszty wdrożenia takiego systemu.

Spróbuję szczegółowo odpowiedzieć na niektóre z podniesionych przez Ciebie kwestii:

  • Kopia zapasowa: mam już zainstalowany system tworzenia kopii zapasowych.

Tak, ja też. Należy jednak rozważyć kilka kwestii dotyczących stosowności polegania na systemie kopii zapasowych ogólnego przeznaczenia w celu odpowiedniego śledzenia ważnych i aktywnych plików związanych z wykonywaną pracą. Po stronie wydajności:

  • W jakich odstępach czasu Twój system kopii zapasowych wykonuje migawki?
  • Jak długo trwa tworzenie migawki?
  • Czy podczas robienia migawki musi zobrazować cały dysk twardy, czy też można łatwo powiedzieć, aby wykonać kopię zapasową dwóch plików, które właśnie otrzymały krytyczne aktualizacje?
  • Czy system tworzenia kopii zapasowych może pokazać z najwyższą dokładnością, co zmieniło się w Twoich plikach tekstowych od jednej kopii zapasowej do drugiej?

I co najważniejsze:

  • W ilu lokalizacjach są zapisywane kopie zapasowe? Czy znajdują się w tej samej fizycznej lokalizacji co komputer?
  • Jak łatwo jest przywrócić daną wersję pojedynczego pliku z systemu kopii zapasowych?

Na przykład mam komputer Mac i używaj Time Machine do tworzenia kopii zapasowych na innym dysku twardym w moim komputerze. Time Machine doskonale nadaje się do odzyskiwania nieparzystego pliku lub przywracania systemu, jeśli coś pójdzie nie tak. Jednak po prostu nie ma tego, czego potrzeba, aby zaufać mojej ważnej pracy:

  • Podczas tworzenia kopii zapasowej Time Machine musi wykonać obraz całego dysku twardego, co zajmuje znaczną ilość czasu. Jeśli będę kontynuować pracę, nie ma gwarancji, że mój plik zostanie przechwycony w takim stanie, w jakim był w momencie inicjowania tworzenia kopii zapasowej. Mogę też dojść do innego punktu, który chciałbym zapisać przed zakończeniem pierwszej kopii zapasowej.

  • Dysk twardy, na którym zapisywane są moje kopie zapasowe Time Machine, znajduje się na moim komputerze - dzięki temu moje dane są narażone na kradzież, pożar i inne katastrofy.

Dzięki systemowi kontroli wersji, takim jak Git, mogę zainicjować tworzenie kopii zapasowej określonych plików bez większego wysiłku niż żądanie zapisu w edytorze tekstu - a plik jest obrazowany i zapisywany natychmiast. Ponadto Git jest dystrybuowany, więc każdy komputer, na którym pracuję, ma pełną kopię repozytorium.

To sprowadza się do odbicia mojej pracy na czterech różnych komputerach - nic poza aktem bożym nie może zniszczyć moich plików i danych, w którym to momencie prawdopodobnie i tak nie przejmowałbym się zbytnio.

  • Rozwidlanie i przewijanie: nigdy nie czułem takiej potrzeby, ale widzę, jak mogłoby to być przydatne (np. Przygotowujesz wiele artykułów w czasopiśmie w oparciu o ten sam zestaw danych; przygotowujesz raport, który jest aktualizowany co miesiąc itp. )

Jako solista też tak bardzo nie rozwidlam. Jednak czas, który zaoszczędziłem dzięki możliwości przewijania do tyłu, w pojedynkę zwrócił moją inwestycję w naukę systemu kontroli wersji wiele, wiele razy. Mówisz, że nigdy nie czułeś takiej potrzeby, ale czy przewinięcie dowolnego pliku w obecnym systemie kopii zapasowych było naprawdę bezbolesną i wykonalną opcją?

Czasami raport wyglądał lepiej 45 minut, godzinę lub dwa dni temu.

  • Współpraca: przez większość czasu sam analizuję dane, dlatego nie uzyskałbym korzyści współpracy z kontrolą wersji.

Tak, ale nauczyłbyś się narzędzia, które może okazać się niezbędne, jeśli w końcu będziesz współpracować z innymi nad projektem.

  • Czas na ocenę i naukę systemu kontroli wersji

Nie przejmuj się tym zbytnio. Systemy kontroli wersji są jak języki programowania - mają kilka kluczowych pojęć, których należy się nauczyć, a reszta to tylko cukier syntaktyczny. Zasadniczo pierwszy system kontroli wersji, którego się nauczysz, będzie wymagał zainwestowania największej ilości czasu - przejście na inny wymaga jedynie nauczenia się, jak nowy system wyraża kluczowe pojęcia.

Wybierz popularny system i zacznij działać!

  • Możliwy wzrost złożoności w stosunku do mojego obecnego systemu zarządzania plikami

Czy masz jeden folder, powiedzmy Projectszawierający wszystkie foldery i pliki związane z twoimi działaniami związanymi z analizą danych? Jeśli tak, to nałożenie na nią kontroli wersji zwiększy dokładnie złożoność systemu plików 0. Jeśli twoje projekty są rozrzucone po twoim komputerze - powinieneś je scentralizować przed zastosowaniem kontroli wersji, a to zmniejszy złożoność zarządzania twoimi plikami - dlatego w końcu mamy Documentsfolder.

  1. Czy kontrola wersji jest warta wysiłku?

Tak! Zapewnia ogromny przycisk cofania i umożliwia łatwe przenoszenie pracy z maszyny na maszynę bez martwienia się o takie rzeczy, jak utrata dysku USB.

2 Jakie są główne wady i zalety przyjęcia kontroli wersji?

Jedynym minusem, o jakim przychodzi mi do głowy, jest niewielki wzrost rozmiaru pliku - ale nowoczesne systemy kontroli wersji mogą robić absolutnie niesamowite rzeczy dzięki kompresji i selektywnemu zapisywaniu, więc jest to kwestia sporna.

3 Jaka jest dobra strategia rozpoczęcia kontroli wersji do analizy danych w R (np. Przykłady, pomysły dotyczące przepływu pracy, oprogramowanie, łącza do przewodników)?

Kontroluj wersje plików, które generują dane lub raporty, bądź selektywny. Jeśli używasz czegoś podobnego Sweave, przechowuj swoje .Rnwpliki, a nie .texpliki, które zostaną z nich utworzone. Przechowuj nieprzetworzone dane, jeśli ponowne ich pozyskanie byłoby trudne. Jeśli to możliwe, napisz i przechowuj skrypt, który pozyskuje twoje dane i inny, który czyści je lub modyfikuje, zamiast przechowywać zmiany w surowych danych.

Jeśli chodzi o naukę systemu kontroli wersji, gorąco polecam Git i ten przewodnik po nim.

Te strony internetowe zawierają również kilka fajnych porad i wskazówek związanych z wykonywaniem określonych czynności w Git:

Sharpie
źródło
1
+1 za odpowiedź na „Możliwy wzrost złożoności w stosunku do mojego obecnego systemu zarządzania plikami”. Kontrola wersji potencjalnie zmniejszy poziom złożoności, jeśli elementy umieszczone w kontroli wersji wraz z zapewnieniem szczegółowego poziomu kontroli nad punktami migawek w procesie tworzenia kopii zapasowych (podajesz również opis, który jest bardzo pomocny w odzyskiwaniu nie według daty, ale według funkcji lub zmiany ).
Christopher Hackett,
23

Pracowałem przez dziewięć lat w sklepie analitycznym i przedstawiłem tam ideę kontroli wersji dla naszych projektów analitycznych. Oczywiście jestem wielkim zwolennikiem kontroli wersji. Chciałbym jednak poruszyć następujące kwestie.

  1. Kontrola wersji może nie być odpowiednia, jeśli przeprowadzasz analizę do ewentualnego wykorzystania w sądzie. Nie wygląda na to, że dotyczy to ciebie, ale nasi klienci byliby bardzo zdenerwowani, gdyby wiedzieli, że każda wersja każdego skryptu, który kiedykolwiek stworzyliśmy, była potencjalnie możliwa do wykrycia. Użyliśmy kontroli wersji dla modułów kodu, które były ponownie używane w wielu zadaniach, ale z tego powodu nie używaliśmy kontroli wersji dla kodu specyficznego dla zaangażowania.
  2. Odkryliśmy, że największą korzyść z kontroli wersji przynosi przechowywanie gotowych modułów kodu, które były ponownie wykorzystywane w wielu projektach. Na przykład możesz mieć określony ulubiony sposób przetwarzania niektórych wyciągów z PUMS spisu ludności. Zorganizuj ten kod w katalogu i umieść go w swoim VCS. Następnie możesz sprawdzić to w każdym nowym projekcie za każdym razem, gdy tego potrzebujesz. Może być nawet przydatne utworzenie określonych gałęzi określonego kodu dla określonego projektu, jeśli wykonujesz specjalne przetwarzanie określonego wspólnego zestawu danych dla tego projektu. Następnie, kiedy skończysz z tym projektem, zdecyduj, ile specjalnego kodu ma zostać scalone z powrotem do głównej gałęzi.
  3. Nie poddawaj przetworzonych danych kontroli wersji. Tylko kod. Naszym celem zawsze było posiadanie pełnego zestawu skryptów, abyśmy mogli usunąć wszystkie nasze wewnętrznie przetwarzane dane, nacisnąć przycisk i ponownie wygenerować każdy numer raportu. To jedyny sposób, aby mieć pewność, że w Twoich danych nie ma starych błędów żyjących w tajemniczy sposób.
  4. Aby upewnić się, że wyniki są naprawdę w pełni odtwarzalne, nie wystarczy po prostu przechowywać kod w VCS. Bardzo ważne jest, aby uważnie śledzić, której wersji modułów użyto do utworzenia określonego produktu.
  5. Jeśli chodzi o oprogramowanie, miałem szczęście z Subversion. Jest łatwy w konfiguracji i zarządzaniu. Zdaję sobie sprawę z atrakcyjności nowych, rozproszonych systemów VCS, takich jak git i mercurial, ale nie jestem pewien, czy istnieją jakieś mocne zalety, jeśli pracujesz samodzielnie. Z drugiej strony nie znam też żadnych negatywnych skutków ich używania - po prostu nie pracowałem z nimi w środowisku analitycznym.
Dan Menes
źródło
18

Ze względu na kompletność, pomyślałem, że przedstawię aktualne informacje na temat mojego przyjęcia kontroli wersji.

Zauważyłem, że kontrola wersji dla pojedynczych projektów analizy danych jest bardzo przydatna.

Przyjąłem git jako moje główne narzędzie do kontroli wersji. Najpierw zacząłem używać Egit w Eclipse ze StatET. Teraz generalnie używam tylko interfejsu wiersza poleceń, chociaż integracja z RStudio jest całkiem dobra.

Pisałem na blogu o moim doświadczeniu podczas konfigurowania kontroli wersji z perspektywy projektów analizy danych.

Jak wspomniano w poście, stwierdziłem, że przyjęcie kontroli wersji przyniosło wiele dodatkowych korzyści w sposobie myślenia o projektach analizy danych, w tym wyjaśnienie:

  • rozróżnienie między plikami źródłowymi i pochodnymi
  • charakter zależności:
    • zależności między elementami kodu
    • zależności między plikami w projekcie
    • oraz zależności z plikami i programami znajdującymi się poza repozytorium
  • charakter repozytorium i sposób podziału repozytoriów
  • charakter zatwierdzania i dokumentowania zmian i kamieni milowych projektu
Jeromy Anglim
źródło
2
Zacząłem też od interfejsu wiersza poleceń (i dobrze wiedzieć), ale przerzuciłem się również na używanie głównie RStudio do moich potrzeb R / git. Zapewnia większość rzeczy, których chcę, ale czasami muszę otworzyć terminal, aby zrobić kilka rzeczy, które nie są bezpośrednio wbudowane w interfejs.
Dason,
17

Prowadzę badania ekonomiczne przy użyciu R i LaTeX i zawsze poddaję swoją pracę kontroli wersji. To jak nieograniczone cofanie. Wypróbuj Bazaar, jest to jeden z najłatwiejszych do nauczenia się i używania, a jeśli korzystasz z systemu Windows, ma graficzny interfejs użytkownika (TortoiseBZR).

Tak, istnieją dodatkowe korzyści z kontroli wersji podczas pracy z innymi, ale nawet w projektach solowych ma to sens.

Ana Nelson
źródło
9

W tej chwili prawdopodobnie myślisz o swojej pracy jako o tworzeniu kodu, który będzie robił to, co chcesz. Po przyjęciu systemu kontroli wersji będziesz myśleć o swojej pracy jako o zapisywaniu spuścizny w repozytorium i wprowadzaniu do niej genialnych, przyrostowych zmian. Czuje się o wiele lepiej.

Ken Williams
źródło
7

Nadal zalecałbym kontrolę wersji dla solowych występów, takich jak ty, ponieważ posiadanie siatki bezpieczeństwa do wyłapywania błędów może być świetną rzeczą.

Pracowałem jako samodzielny programista Java i nadal używam kontroli źródła. Jeśli ciągle sprawdzam rzeczy, nie mogę stracić więcej niż godzinę pracy, jeśli coś pójdzie nie tak. Mogę eksperymentować i refaktoryzować bez obaw, ponieważ jeśli coś pójdzie nie tak, zawsze mogę wrócić do mojej ostatniej działającej wersji.

Jeśli tak jest w Twoim przypadku, polecam korzystanie z kontroli źródła. Nie jest trudno się tego nauczyć.

duffymo
źródło
7

Musisz użyć oprogramowania do kontroli wersji, w przeciwnym razie twoja analiza nie będzie idealnie powtarzalna.

Jeśli chcesz gdzieś opublikować swoje wyniki, zawsze powinieneś być w stanie zrekonstruować stan swoich skryptów w momencie ich utworzenia. Załóżmy, że jeden z recenzentów odkrywa błąd w jednym z Twoich skryptów: skąd wiesz, które wyniki zostały wprowadzone, a które nie?

W tym sensie system tworzenia kopii zapasowych nie jest wystarczający, ponieważ prawdopodobnie jest wykonywany tylko raz dziennie i nie stosuje etykiet do różnych kopii zapasowych, więc nie wiesz, które wersje odpowiadają określonym wynikom. A nauka vcs jest prostsza niż to, co myślisz, jeśli nauczysz się, jak dodać plik i jak zatwierdzać zmiany, to już wystarczy.

dalloliogm
źródło
1
Masz mocny argument. Myślę jednak, że powtarzalne badania są możliwe bez formalnego systemu kontroli wersji. Jest po prostu mniej elegancki i mniej elastyczny. Staram się pisać kod R, używając zasad programowania w języku literackim, tak aby wyjście języka R było automatycznie integrowane z końcowym dokumentem. Pliki powiązane z tym produktem końcowym można następnie zapisać.
Jeromy Anglim
to pomaga w ponownym zastosowaniu całej analizy danych, ale nie informuje, które z poprzednich wyników zostały dotknięte błędem.
dalloliogm
6

Czy kontrola wersji jest warta wysiłku?

duże TAK.

Jakie są główne wady i zalety wprowadzenia kontroli wersji?

plusy: możesz śledzić, co zrobiłeś wcześniej. Szczególnie przydatne w przypadku lateksu, ponieważ możesz potrzebować starego akapitu, który został przez Ciebie usunięty! Gdy komputer się zawiesza lub pracujesz nad nowym, masz dane z powrotem w locie.

minusy: musisz dokonać pewnych ustawień.

Jaka jest dobra strategia rozpoczęcia kontroli wersji do analizy danych w języku R (np. Przykłady, pomysły dotyczące przepływu pracy, oprogramowanie, łącza do przewodników)?

Po prostu zacznij go używać. Używam SVN Tortoise w systemie Windows jako narzędzia klienta, a mój dział ma serwer svn, umieszczam tam cały mój kod i dane (tak, tam również umieszczasz swoje dane!).

Yin Zhu
źródło
6

Cofnij się najpierw trochę i poznaj zalety pisania pakietów R! Mówisz, że masz projekty z kilkoma tysiącami linii kodu, ale nie są one uporządkowane ani udokumentowane jak kod pakietu? Dostajesz duże korzyści dzięki dostosowaniu się do ideałów pakietu, w tym dokumentacji dla każdej funkcji, testów pod kątem wielu typowych trudnych do wychwycenia błędów, łatwości pisania własnych zestawów testów itp.

Jeśli nie masz dyscypliny, aby wyprodukować pakiet, to nie jestem pewien, czy jesteś w stanie wykonać odpowiednią kontrolę wersji.

Spacedman
źródło
3
To wszystko podróż, zwłaszcza jeśli nie jesteś specjalistą w dziedzinie IT. Teraz używam git i jest świetnie. Zaczynam też bawić się infrastrukturą pakietu R. Jeśli chodzi o tysiące wierszy kodu, często wynika to z dużej ilości specyficznego przetwarzania danych oraz grafiki i tabel opartych na hipotezach. Chociaż doświadczenie ułatwia dostrzeżenie abstrakcji, uważam, że pewna ilość specyficznego kodu jest tylko częścią tego, co oznacza analizowanie zestawów danych psychologicznych. Myślę, że to pomaga wyjaśnić popularność pakietu ProjectTemplate i Sweave.
Jeromy Anglim
5

Zgodziłbym się z powyższymi odczuciami i powiedziałbym, że tak, kontrola wersji jest przydatna.

Zalety;

  • przechowuj swoje badania rejestrowane i archiwizowane, (tagowanie)
  • pozwala wypróbować różne pomysły i wrócić, jeśli nie zadziałają (rozgałęzienie)
  • Możesz udostępniać swoją pracę innym osobom, a oni mogą udostępniać Ci swoje zmiany (wiem, że tego nie określiłeś, ale to świetnie)
  • Większość systemów kontroli wersji ułatwia utworzenie skompresowanego pakietu dla wszystkich plików znajdujących się pod kontrolą w pewnym momencie, na przykład w momencie przesyłania artykułu do publikacji, może to pomóc, gdy inni przeglądają Twoje artykuły. (możesz to zrobić ręcznie, ale po co tworzyć te procesy, skoro kontrola wersji po prostu to robi)

Jeśli chodzi o zestawy narzędzi, używam Gita wraz ze StatEt i Eclipse, który działa dobrze, chociaż na pewno nie musisz używać Eclipse. Istnieje kilka wtyczek Git dla Eclipse , ale generalnie używam opcji wiersza poleceń.

PaulHurleyuk
źródło
Używam StatET i Eclipse for R; więc może najpierw spróbuję git.
Jeromy Anglim
4

Kontrola wersji dla rozwoju solo (dowolnego rodzaju) jest naprawdę interesująca dla:

  • eksploracja historii i porównanie bieżącej pracy z wcześniejszymi zatwierdzeniami
  • rozgałęzianie i wypróbowywanie różnych wersji dla tego samego zestawu plików

Jeśli nie wydaje Ci się, że wykonujesz jedną z tych dwóch podstawowych funkcji kontroli wersji, wystarczy proste narzędzie do tworzenia kopii zapasowych.
Jeśli potrzebujesz tych funkcji, otrzymasz również kopię zapasową ( git bundlena przykład)

VonC
źródło
4

Zajmuję się również samodzielnym tworzeniem skryptów i uważam, że dzięki temu rzeczy są prostsze, a nie bardziej złożone. Kopia zapasowa jest zintegrowana z przepływem pracy kodowania i nie wymaga oddzielnego zestawu procedur systemu plików. Czas potrzebny na nauczenie się podstaw każdego systemu kontroli wersji byłby zdecydowanie dobrze spędzonym czasem.

MW Frost
źródło
4

Dropbox ma kontrolę wersji „ppor man”, która pozwala Ci pomóc w osiągnięciu tego celu przy niewielkim wysiłku i ma wiele dodatkowych korzyści.

Zach
źródło