Wielu analityków danych, których szanuję, używa kontroli wersji. Na przykład:
- http://github.com/hadley/
- Zobacz komentarze na http://permut.wordpress.com/2010/04/21/revision-control-statistics-bleg/
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:
- Czy kontrola wersji jest warta wysiłku?
- Jakie są główne wady i zalety wprowadzenia kontroli wersji?
- 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)?
źródło
Odpowiedzi:
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:
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:
I co najważniejsze:
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.
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.
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.
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ć!
Czy masz jeden folder, powiedzmy
Projects
zawierają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ów0
. 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 mamyDocuments
folder.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.
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.
Kontroluj wersje plików, które generują dane lub raporty, bądź selektywny. Jeśli używasz czegoś podobnego
Sweave
, przechowuj swoje.Rnw
pliki, a nie.tex
pliki, 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:
http://www.gitready.com/
http://progit.org/blog.html
źródło
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.
źródło
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:
źródło
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.
źródło
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.
źródło
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ć.
źródło
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.
źródło
duże TAK.
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ń.
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!).
źródło
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.
źródło
Zgodziłbym się z powyższymi odczuciami i powiedziałbym, że tak, kontrola wersji jest przydatna.
Zalety;
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ń.
źródło
Kontrola wersji dla rozwoju solo (dowolnego rodzaju) jest naprawdę interesująca dla:
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 bundle
na przykład)źródło
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.
źródło
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.
źródło