Podczas pracy nad projektami analizy danych często przechowuję dane w plikach danych rozdzielanych przecinkami lub tabulatorami (CSV, TSV). Podczas gdy dane często należą do dedykowanego systemu zarządzania bazą danych. W przypadku wielu moich aplikacji byłoby to przesadzanie.
Mogę edytować pliki CSV i TSV w programie Excel (lub prawdopodobnie innym programie do obsługi arkuszy kalkulacyjnych). Ma to zalety:
- arkusze kalkulacyjne ułatwiają wprowadzanie danych
Istnieje również kilka problemów:
- Praca z plikami CSV i TSV prowadzi do wielu komunikatów ostrzegawczych o utracie różnych funkcji oraz o tym, jak tylko aktywny arkusz zostanie zapisany i tak dalej. Dlatego denerwujące jest, jeśli chcesz tylko otworzyć plik i dokonać drobnych zmian.
- Dokonuje wielu „rzekomo inteligentnych” konwersji. Na przykład, jeśli wpiszesz 12/3, pomyślisz, że chcesz wprowadzić datę. AKTUALIZACJA: Powinienem wspomnieć, że przykład daty jest tylko jednym z wielu przykładów; większość problemów wydaje się być związana z niewłaściwą konwersją. W szczególności pola tekstowe wyglądające jak liczby lub daty powodują problemy.
Alternatywnie mogłem pracować bezpośrednio z plikiem tekstowym w standardowym edytorze tekstu. To gwarantuje, że to, co wpisuję, jest rejestrowane. Jest to jednak bardzo niewygodny sposób wprowadzania danych (kolumny się nie układają; trudno jest wprowadzić dane po prostu do wielu komórek; itp.).
Pytanie
- Jaka jest dobra strategia pracy z plikami danych CSV lub TSV? tj. jaka strategia ułatwia wprowadzanie danych i manipulowanie nimi, a jednocześnie zapewnia, że wprowadzane dane są właściwie interpretowane?
project-management
Jeromy Anglim
źródło
źródło
Odpowiedzi:
Jeśli nie masz doświadczenia z R, możesz utworzyć podstawową ramkę data.frame, a następnie użyć funkcji fix () do wprowadzenia danych. Wzdłuż tego samego wiersza co # 5, po skonfigurowaniu data.frame możesz użyć szeregu readLines (n = 1) (lub cokolwiek innego), aby uzyskać dane, zweryfikować je i zapewnić możliwość dodania następnego rząd. Następnie pozostaw poprawkę do fix (). Zobacz zaimplementowany przykład poniżej za pomocą scan ().
Inna opcja w programie Excel byłaby niechlujna, ale można wpisać 12/9, a następnie poprosić o ocenę innej kolumny = IFERROR (MONTH (DateEntryCell) / DAY (DataEntryCell), DataEntryCell). Ale wtedy będziesz musiał zachować arkusz Excela i arkusz csv, a wszystkie narzekające podczas pisania csv pozostaną.
Aktualizacja: Dużo zastanawiałem się nad tym problemem, ponieważ mam problem. Jak dotąd najlepszym / najłatwiejszym rozwiązaniem do wprowadzania danych, jakie do tej pory widziałem, jest KillinkCSV . To nie jest „darmowe” oprogramowanie, to shareware z 30-dniowym okresem próbnym i rozsądną ceną (~ 27 USD). Nie jestem jednak pewien, jak bardzo ufam przy edycji istniejących plików CSV - podałem mu niesamowicie duży (i przypuszczalnie dobrze sformatowany) plik CSV i nie udało się odczytać wszystkich wierszy. Wydawało się jednak, że działa dobrze dla takiego, który był dość duży (20 MB), a problemem z większym plikiem może być błąd użytkownika z mojej strony.
R Przykład:
źródło
csv-mode.el
zainstalowałem dziękiemacs-goodies-el
pakietowi w Debian / Ubuntu - neat.Aktualizacja: [Przejrzałem dużą liczbę zaległych wiadomości e-mail z R-Help] Przypomina mi się wątek „ Zachowanie się
read.csv()
”. W tym Duncan Murdoch wspomina, że woli używać plików DIF (Data Interchange Format) zamiast csv z jakiegoś powodu, dla którego Jeromy wspomina. Właśnie próbowałem tego i Gnumeric robi to źle (ładowanie 12/3 jako daty), ale OpenOffice.org czyta to poprawnie i zachowuje nietknięte informacje 12/3. (Czy ktoś chce to sprawdzić w MS Excel?)Pliki DIF są zwykłym tekstem i mogą być odczytywane przez arkusze kalkulacyjne, a R (o ile korzystasz z ostatniej wersji R (wersja SVN> = r53778)) odczyta dane we właściwym formacie.
Oryginalny : w miarę możliwości starałbym się unikać używania kropki w arkuszu kalkulacyjnym do edycji / manipulacji danymi. Niezwykle trudne, jeśli nie niemożliwe, jest udokumentowanie wszelkich zmian, które wprowadzasz w istniejącym zbiorze danych, tak że praktycznie wyklucza to z odtwarzalnego punktu widzenia badania. Co najwyżej używam arkusza kalkulacyjnego, aby szybko przeglądać istniejące dane.
Do przetwarzania danych zwykle piszę skrypt R, który pobierze surowy plik csv i zastosuje wszystkie niezbędne wymagane kroki przetwarzania. Mocno komentuję ten skrypt, aby dokładnie wyjaśnić, co robię na każdym etapie i dlaczego. Mój skrypt analizy danych wywołałby następnie skrypt przetwarzania danych, który ładuje i przetwarza dane.
Czy w przypadku wprowadzania danych trudniej jest wprowadzić dane w edytorze tekstu lub w arkuszu kalkulacyjnym? Podejrzewam, że problemy, o których wspomniałeś w przypadku tych ostatnich, nie przeważają nad próbami wprowadzenia danych CSV do edytora tekstu.
Możesz wypróbować lepszy arkusz kalkulacyjny; OpenOffice.org odmawia zatrzymania formatowania 12/3 jako daty (lub konwertuje ją na reprezentację numeryczną), nawet jeśli najpierw sformatuje się kolumnę jako „numeryczną”. Gnumeric natomiast pozostawi 12/3, jak to jest , czy sformatować kolumnę jako „numeryczny” pierwszy.
Możesz zmusić OpenOffice.org, aby nie formatował 12/3 jako daty, przygotowując a
'
do wpisów, tzn.'12/3
Zostanie wyświetlony jako 12/3 w arkuszu kalkulacyjnym i zapisany jako tekst. Jest to prawdopodobnie dość bezpieczny w użyciu.Nie jestem pewien, dlaczego chcesz, aby 12/3 było przechowywane liczbowo jako 12/3 w pliku tekstowym - jak coś takiego jak R powinien to przeczytać?
Twój komentarz do ostrzeżeń o utracie funkcji lub zapisaniu tylko aktywnego arkusza nie jest tak naprawdę problemem, prawda? (Jeśli tak, to chcę waszych problemów w moim życiu ;-)
źródło
Sugeruję, aby spojrzeć na Google Refine (http://code.google.com/p/google-refine/). Myślę, że to bardzo dobre narzędzie do edycji plików CSV
źródło
Unikałbym wspólnej pracy z plikami CSV i TSV. Zamiast tego naucz się korzystać z SQL i operować tylko kopią danych lub kopią danych (DB) swoich danych lub możesz używać SAS lub R z połączeniem passthru z bazą danych. W ten sposób możesz dokonywać zbiorczych aktualizacji swoich danych zamiast strasznego wyszukiwania i zastępowania w Excelu (lub dowolnym programie arkusza kalkulacyjnego, którego używasz) lub kopiowania i wklejania, które mogą być podatne na błędy. Zaletą korzystania z systemu DB jest także to, że można włączyć rejestrowanie i szybkie przywracanie wprowadzonych zmian, jeśli są one błędne, a wszystkie zmiany mogą być kontrolowane. Ponadto ograniczenia dotyczące integralności mogą być nakładane na tabele DB, aby zapewnić, że nie pomyłkowo zaktualizujesz lub zmienisz zmienne / kolumnę w sposób, który uważasz za nieodpowiedni (np. Daty pozostają jako daty, a inne informacje są odpowiednio rzutowane). Wygrałem'
Jeśli lubisz arkusze kalkulacyjne, ponieważ w jakiś sposób umożliwia ono wprowadzanie danych, można to pokonać w każdej bazie danych, z której kiedykolwiek korzystałem, korzystając z narzędzi graficznego interfejsu użytkownika / IDE dostarczanych z bazami danych (np. Microsoft Management Studio) lub pobierając wersję połączoną bazy danych do systemu zaprojektowanego specjalnie do wprowadzania danych i egzekwowania ograniczeń danych (np. formularze połączonych tabel w programie Access lub niestandardowy interfejs WWW). Możesz także użyć innych programów, które pozwolą ci uzyskać to, co najlepsze z obu światów i zaktualizować dane w programie Excel, a zmiany te zostaną propagowane do Twojej bazy danych (patrz na przykład https://www.youtube.com/watch?v=5iyuF_mDSac ) .
źródło
Po zadaniu tego pytania zacząłem patrzeć na CSVed .
Ze strony:
Nie jestem pewien, czy ktoś ma z tym doświadczenie.
źródło
Excel nie jest bardzo przyjazny dla CSV. Na przykład, jeśli wprowadzisz „1300” do Excela i zapiszesz go jako wartość oddzieloną przecinkami, pozwoli ci to! To może być duży problem (spotykam się z nim regularnie, gdy otrzymuję pliki od innych).
Osobiście korzystam z OpenOffice.org Calc, korzystam również z wielu wyżej wymienionych rozwiązań, jednak wiele z nich nie ma funkcji i łatwości użycia, które są wymagane do regularnej edycji. OOO Calc jest o wiele bardziej inteligentny niż Excel, chociaż będąc programem arkusza kalkulacyjnego, nadal będziesz musiał wpisać „= 12/3” zamiast „12/3”, w przeciwnym razie będziesz wprowadzać wartość, a nie obliczenia.
Daj mu wir, nie zawiedziesz się.
źródło
Lubię Gnumeric, ponieważ nie próbuje być tak odporny na idioty jak inni (nie krzyczy o utraconej funkcjonalności) i działa z dużymi danymi ... ale myślę, że to tylko Linux.
źródło
Wystarczy użyć edytora Rona . Jest tak jak Excel bez „pomocy”.
Ze strony:
źródło
Osobiście lubię używać „relacyjnej bazy danych” do zarządzania plikami CSV. Pliki CSV są dobre do wymiany danych, ale nie zawierają logiki biznesowej. Moje doświadczenie w pracy z CSV polega na tym, że „istnieje wiele iteracji z biznesem w celu dopracowania analizy”. Praca tylko z plikami zwykłego tekstu (CSV) będzie stanowić wiele wyzwań. Na przykład plik CSV nie pokaże „co sprawia, że dane są unikalne”, tj. Jaki jest „klucz podstawowy do każdego wiersza”. Spowoduje to później duże problemy, gdy będziemy mieli inne źródło danych do przyłączenia.
SQLite jest dobrym narzędziem do przekształcenia CSV w relacyjną bazę danych i podobnie jak CSV, jest łatwy do wymiany i nie wymaga konfiguracji serwera. Co ważniejsze, bardzo dobrze wspierał
R
i inne oprogramowanie statystyczne.Moją strategią jest zawsze utrzymywanie „oczyszczonych danych” w relacyjnej bazie danych. I wyraźnie zaznacz klucz podstawowy każdej tabeli.
Oto przykład tego, co może się wydarzyć w rzeczywistości (załóżmy, że sprzedajemy książki):
Teraz możesz zobaczyć zaletę czystych danych i przechowywać je w relacyjnej bazie danych. Z powiedzmy identyfikator klienta jako klucz podstawowy, a nazwa książki, autor i wydanie jako klucz podstawowy. Aktualizowanie danych i wprowadzanie zmian w razie potrzeby jest bardzo łatwe. Również klucz podstawowy daje również „ograniczenia” i „kontrolę poczytalności” dla nowych nadchodzących danych.
źródło
Jeśli używasz funkcji Excel „Importuj dane”, daje ona możliwość wyboru typu danych dla każdej kolumny. Możesz wybrać wszystkie kolumny i użyć typu danych „Tekst”.
źródło