Zorganizowane procesy czyszczenia danych

34

Z mojego ograniczonego wglądu w naukę danych przy użyciu R zdałem sobie sprawę, że czyszczenie złych danych jest bardzo ważną częścią przygotowywania danych do analizy.

Czy są jakieś najlepsze praktyki lub procesy czyszczenia danych przed ich przetwarzaniem? Jeśli tak, to czy istnieją jakieś automatyczne lub półautomatyczne narzędzia, które wdrażają niektóre z tych najlepszych praktyk?

Jay Godse
źródło
1
chyba dobrze jest trochę wyjaśnić, co masz na myśli ,
mówiąc o
2
Pomocne byłoby dalsze wyjaśnienie, co oznaczają dane dotyczące czyszczenia. W kontekście, w którym pracuję, czyszczenie nie ma nic wspólnego z formatowaniem - nazwałbym to parsowaniem / importowaniem - ale raczej oznaczałoby mówienie głośnych danych użytkownika i weryfikowanie ich pod kątem spójności. Stosowane techniki są specyficzne dla zestawu danych, od prostych reguł statystycznych, po algorytmy rozmyte, szczególnie gdy dane są rzadkie.
AdrianBR

Odpowiedzi:

21

R zawiera kilka standardowych funkcji manipulacji danych, co może być wykorzystywane do czyszczenia danych w swojej podstawowej opakowania ( gsub, transformetc.), jak również w różnych Takie pakiety, takie jak stringr , zmiany kształtu / reshape2 i plyr / dplyr . Przykłady i najlepsze praktyki użycia tych pakietów i ich funkcji opisano w następującym artykule: http://vita.had.co.nz/papers/tidy-data.pdf .

Ponadto R oferuje niektóre pakiety specjalnie ukierunkowane na czyszczenie i transformację danych:

Kompleksowe i spójne podejście do czyszczenia danych w języku R, w tym przykłady i zastosowanie editrules i deducorrect pakietów, a także opis przepływu pracy ( ramy ) czyszczenia danych w języku R, przedstawiono w następującym artykule, który gorąco polecam: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Aleksandr Blekh
źródło
2
Dodałbym również dplyr, że jest to zoptymalizowane przeredagowanie niektórych plyrnarzędzi i data.tablektóre jest zupełnie innym podejściem do manipulowania danymi. Zarówno Hadley Wickham.
shadowtalker
@ssdecontrol: Zgadzam się - zaktualizowałem odpowiedź. Hadley jest autorem dplyrpakietu, ale nie data.tablejednego.
Aleksandr Blekh
16

Z mojego punktu widzenia to pytanie nadaje się do dwuetapowej odpowiedzi. Pierwszą część, nazwijmy to miękkim przetwarzaniem wstępnym , można potraktować jako użycie różnych algorytmów eksploracji danych do przetwarzania danych w taki sposób, że nadaje się do dalszych analiz. Zauważ, że może to być sama analiza, na wypadek gdyby cel był wystarczająco prosty, aby można go było wykonać jednym strzałem.

Druga część, twarde przetwarzanie wstępne, faktycznie przychodzi przed jakimkolwiek innym procesem i może być traktowana jako użycie prostych narzędzi lub skryptów do czyszczenia danych, wybierając konkretne treści do przetworzenia. Aby rozwiązać ten problem, POSIX zapewnia nam cudowny zestaw magicznych narzędzi, których można używać do tworzenia zwięzłych - i bardzo potężnych - skryptów przetwarzania wstępnego.

Na przykład dla osób, które mają do czynienia z danymi pochodzącymi z serwisów społecznościowych (Twitter, Facebook, ...), pobieranie danych zwykle daje pliki o bardzo specyficznym formacie - choć nie zawsze ładna struktura, ponieważ mogą zawierać brakujące pola i tak dalej . W takich przypadkach prosty awkskrypt może wyczyścić dane, tworząc prawidłowy plik wejściowy do późniejszego przetworzenia. Z zestawu magiczne, można również wskazać grep, sed, cut, join, paste, sort, i całe mnóstwo innych narzędzi.

W przypadku, gdy prosty plik źródłowy ma zbyt wiele drobiazgów, konieczne może być również utworzenie pakietu metod czyszczenia danych. W takich przypadkach zwykle lepiej jest używać języków skryptowych (innych niż języki powłoki), takich jak Python, Ruby i Perl. Pozwala to na budowanie interfejsów API w celu wybrania określonych danych w bardzo prosty i wielokrotnego użytku. Takie interfejsy API są czasami upubliczniane przez ich autorów, takich jak IMDbPY , Stack Exchange API i wiele innych.

Odpowiadając na pytanie: czy są jakieś najlepsze praktyki? Zwykle zależy to od twojego zadania. Jeśli zawsze będziesz mieć do czynienia z tym samym formatem danych, zwykle najlepiej jest napisać zorganizowany skrypt, aby go wstępnie przetworzyć; mając na uwadze, że jeśli potrzebujesz tylko prostego i szybkiego czyszczenia niektórych zestawów danych, możesz liczyć na narzędzia POSIX dla zwięzłych skryptów powłoki, które wykonają całą pracę znacznie szybciej niż skrypt Python lub coś podobnego. Ponieważ czyszczenie zależy zarówno od zestawu danych, jak i od twoich celów, trudno jest wszystko zrobić. Istnieje jednak wiele interfejsów API, które pozwalają rozwiązać problem.

Rubens
źródło
hm - zdobądź dane, sformatuj dane (awk sed grep stuff), usuń szum jako pierwszy krok, a następnie zejdź głębiej. więc nie jest trudne wstępne przetwarzanie , jeśli zastosujesz swoje terminy
MolbOrg
@ MolbOrg Tak, o to mi chodziło. Zadzwoniłem ciężko przerób na bok skryptowy , a miękki przerób wykorzystanie algorytmów eksploracji danych, które generalnie zmniejszyć rozmiar problemu (czyści bazy danych). Zauważyłem również, że druga część, trudne wstępne przetwarzanie, faktycznie ma miejsce przed jakimkolwiek innym procesem . Jeśli takie warunki nie są zbyt jasne, chętnie rozważę wszelkie inne sugestie mające na celu poprawę odpowiedzi.
Rubens
1
Ach tak, nie zwróciłem wystarczającej uwagi, wstępne przetwarzanie danych surowych . Testowany atm - tak perl oneliner jest 3 razy wolniejszy niż grep) dla łańcuchów 3,5kk w 300 MB, dla perla zajęło 1,1 sekundy, dla grep 0,31 sekundy. Widziałem artykuł, w którym punkty, w których perl regexp jest wolny, znacznie wolniejszy niż może być w praktyce (podejrzewam, że dotyczy to również grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg
@MolbOrg Nice referencja! AFAIK, grepdomyślnie używa podstawowego wyrażenia regularnego POSIX i pozwala na rozszerzone wyrażenia regularne POSIX, gdy jest uruchamiany jako grep -E, oraz PCRE, gdy jest uruchamiany jako grep -P.
Rubens
1
To jest bardzo dobry post. R jest doskonały do manipulacji danymi, ale może być dość kłopotliwy przy czyszczeniu danych ze względu na pełną składnię do manipulacji ciągami i dość sztywne przestrzeganie list i macierzy struktur danych.
shadowtalker,
11

Jednym z powodów, dla których czyszczenie danych rzadko jest w pełni zautomatyzowane jest to, że tak wiele osądu wymaga zdefiniowanie, co oznacza „czyste”, biorąc pod uwagę konkretny problem, metody i cele.

Może to być tak proste, jak przypisywanie wartości dla brakujących danych, lub może być tak złożone, jak diagnozowanie błędów wprowadzania danych lub błędów transformacji danych z poprzednich zautomatyzowanych procesów (np. Kodowania, cenzury, transformacji). W tych dwóch ostatnich przypadkach dane wyglądają dobrze na zewnątrz, ale są naprawdę błędne. Taka diagnoza często wymaga ręcznej analizy i inspekcji, a także informacji pozapasmowych, takich jak informacje o źródłach danych i stosowanych metodach.

Ponadto niektóre metody analizy danych działają lepiej, gdy błędne lub brakujące dane są puste (lub nie dotyczy), a nie przypisywane lub przyjmowane wartość domyślna. Jest to prawdą, gdy istnieją wyraźne reprezentacje niepewności i ignorancji, takie jak funkcje Wiara Dempstera-Shafera.

Na koniec warto mieć określoną diagnostykę i wskaźniki dla procesu czyszczenia. Brakujące lub błędne wartości są losowo rozmieszczone lub są skoncentrowane w jakikolwiek sposób, który może wpłynąć na wynik analizy. Przydatne jest przetestowanie efektów alternatywnych strategii lub algorytmów czyszczenia, aby sprawdzić, czy wpływają one na ostateczne wyniki.

Biorąc pod uwagę te obawy, jestem bardzo podejrzliwy wobec jakiejkolwiek metody lub procesu, który traktuje czyszczenie danych w sposób powierzchowny, kawalerski lub w pełni zautomatyzowany. W tych szczegółach kryje się wiele diabłów i opłaca się im poświęcić poważną uwagę.

MrMeritology
źródło
1
Na marginesie: myślę, że dostrzeganie błędnych danych spowodowanych przez jakiś problem w dalszej części rurociągu to złota umiejętność. Wiele razy zastanawiałem się, dlaczego moja analiza przyniosła dziwne wyniki, a kiedy spojrzałem na rurociąg, znalazłem jakiś błąd. Np .: zastanawiałem się, dlaczego wszystkie moje dane były mocno wypaczone w kierunku wysokich cen - DALEJ z mojego modelu mentalnego. Kiedy zapytałem, dowiedziałem się, że jakiś podwykonawca źle zrozumiał odprawę i dostarczył dane dla grup o wysokich dochodach, podczas gdy my chcieliśmy mieszanych danych ...
Christian Sauer
Tak! Błędy danych są często oznakami problemów z procesem. Wiedza, gdzie w procesie zostały wprowadzone błędy, a także mechanizm, bardzo pomoże w procesie czyszczenia. Ale jeszcze lepiej jest rozwiązać problemy z procesem, aby produkowały czyste (lub czystsze) dane.
MrMeritology
5

Informacje o automatycznym czyszczeniu: Naprawdę nie można automatycznie wyczyścić danych, ponieważ liczba błędów i definicja błędu często zależą od danych. Np .: Twoja kolumna „Dochód” może zawierać wartości ujemne, które są błędem - musisz coś zrobić ze sprawami. Z drugiej strony kolumna „miesięczne oszczędności” mogłaby rozsądnie zawierać wartości ujemne.

Takie błędy są w dużej mierze zależne od domeny - więc aby je znaleźć, musisz mieć wiedzę na temat domeny, coś, w czym ludzie przodują, zautomatyzowane procesy nie tyle.

Tam, gdzie możesz i powinieneś zautomatyzować, są powtarzane projekty. Np. Raport, który musi być sporządzany co miesiąc. Jeśli zauważysz błędy, powinieneś zautomatyzować proces, który może wykryć tego rodzaju błędy w kolejnych miesiącach, uwalniając Twój czas.

Christian Sauer
źródło
5

Myślę, że nie ma uniwersalnej techniki „czyszczenia” danych przed przeprowadzeniem rzeczywistych badań. Z drugiej strony staram się przeprowadzić jak najwięcej powtarzalnych badań . Wykonując powtarzalne badania, jeśli użyłeś technik czyszczenia z błędami lub ze złymi parametrami / założeniami, mogą być zauważone przez innych.

Jest ładny pakiet R knitr który bardzo pomaga w powtarzalny badań.

Oczywiście nie wszystkie badania można w pełni odtworzyć (na przykład dane na żywo z Twittera), ale przynajmniej można łatwo udokumentować kroki czyszczenia, formowania i przetwarzania wstępnego.

Możesz sprawdzić moją ocenę przygotowaną na kurs badań powtarzalności w Coursera .

Damian Melniczuk
źródło
3

OpenRefine (wcześniej Google Refine) to świetne narzędzie, w którym można interaktywnie przeprowadzać czyszczenie i transformację danych. Ostateczne wyniki można wyeksportować do różnych standardowych formatów (json, csv) lub dowolnego niestandardowego formatu (np. Wiki).

Dokładne duplikaty można obsłużyć w OpenRefine, sortując + za pomocą funkcji „blank down”. Ma także funkcję grupowania przybliżonych ciągów (rozmytych), w której można grupować podobnie wyglądające duplikaty, takie jak nazwy firm lub adresy. Już sama ta funkcja sprawia, że ​​jest niesamowita.

Thyag
źródło
1
To fantastyczne, niedoceniane narzędzie.
thanks_in_advance,
2

W Coursera jest poświęcony temu cały kurs. Być może zechcesz omówić techniki, o których wspominają, a ważną częścią jest wiedzieć, kiedy użyć czego.

https://www.coursera.org/learn/data-cleaning

Zawsze lepiej jest to robić ręcznie niż automatyzować, ponieważ każdy zestaw danych ma swoje własne problemy i problemy i nie wszystkie kroki dotyczą wszystkich zestawów danych.

Baran
źródło