Ładowanie bibliotek i danych

Najpierw załadujemy pakiet ggplot2, którego użyjemy w końcowych etapach naszej analizy wizualnej:

biblioteka (ggplot2)

Podczas ładowania ggplot2 zauważysz, że ten pakiet ładuje również dwa inne wymagane pakiety: plyr i reshape. Oba te pakiety są używane do manipulowania i porządkowania danych w R, a my użyjemy plyr w tym przykładzie do agregowania i organizowania danych. Następnym krokiem jest załadowanie danych do R z pliku tekstowego ufo_awesome.tsv. Zauważ, że plik jest rozdzielany tabulatorami (stąd rozszerzenie pliku .tsv), co oznacza, że ​​będziemy musieli użyć funkcji read.delim do załadowania danych. Ponieważ R bardzo intensywnie wykorzystuje ustawienia domyślne, musimy szczególnie uważać na domyślne ustawienia parametrów funkcji, których używamy w naszych skryptach. Aby zobaczyć, jak możemy dowiedzieć się o parametrach w R, załóżmy, że nigdy wcześniej nie korzystaliśmy z funkcji read.delim i potrzebowaliśmy czytać pliki pomocy. Alternatywnie, załóżmy, że nie wiemy, że read.delim istnieje i musimy znaleźć funkcję do odczytu danych ograniczonych w ramce danych. R oferuje kilka przydatnych funkcji wyszukiwania pomocy:

?read.delim # Access a function’s help file

??base::delim # Search for ‘delim’ in all help files for functions

# in ‘base’

help.search(“delimited”) # Search for ‘delimited’ in all help files

RSiteSearch(“parsing text”) # Search for the term ‘parsing text’ on the R site.

W pierwszym przykładzie dołączamy znak zapytania na początku funkcji. Spowoduje to otwarcie pliku pomocy dla danej funkcji i jest to niezwykle przydatny skrót R. Możemy również wyszukiwać określone terminy w paczkach, używając kombinacji ?? i ::. Podwójne znaki zapytania wskazują poszukiwanie określonego terminu. W tym przykładzie szukamy wystąpienia terminu „delim” we wszystkich funkcjach podstawowych, używając podwójnego dwukropka. R pozwala także na przeprowadzanie mniej uporządkowanych wyszukiwań pomocy przy pomocy help.search i RSiteSearch. Funkcja help.search przeszuka wszystkie pliki pomocy w zainstalowanych pakietach pod kątem określonego terminu, który w poprzednim przykładzie jest „rozdzielany”. Alternatywnie możesz przeszukać stronę R, która zawiera pliki pomocy i archiwum list mailingowych, używając funkcji RSiteSearch. Należy pamiętać, że w żadnym wypadku nie jest to wyczerpujący przegląd R lub funkcji użytych w tej sekcji. Dlatego zalecamy korzystanie z tych funkcji wyszukiwania do samodzielnego odkrywania podstawowych funkcji R. Dla danych UFO jest kilka parametrów w read.delim, które będziemy musieli ustawić ręcznie, aby poprawnie odczytać dane. Najpierw musimy powiedzieć funkcji, w jaki sposób dane są rozdzielane. Wiemy, że jest to plik rozdzielany tabulatorami, dlatego ustawiamy sep na znak Tab. Następnie, gdy read.delim odczytuje dane, próbuje przekonwertować każdą kolumnę danych na typ danych R przy użyciu kilku heurystyk. W naszym przypadku wszystkie kolumny są ciągami, ale domyślnym ustawieniem dla wszystkich funkcji read. * Jest konwersja ciągów na typy czynników. Ta klasa jest przeznaczona dla zmiennych jakościowych, ale nie chcemy tego. W związku z tym musimy ustawić stringSsFactors = FALSE, aby temu zapobiec. W rzeczywistości zawsze dobrą praktyką jest wyłączanie tej wartości domyślnej, szczególnie podczas pracy z nieznanymi danymi. Ponadto dane te nie zawierają nagłówka kolumny jako pierwszego wiersza, więc musimy również wyłączyć tę wartość domyślną, aby zmusić R do nieużywania pierwszego wiersza danych jako nagłówka. Wreszcie, w danych jest wiele pustych elementów i chcemy ustawić je na specjalną wartość R NA. Aby to zrobić, jawnie definiujemy pusty ciąg jako na.string:

ufo<-read.delim(“data/ufo/ufo_awesome.tsv”, sep=”\t”, stringsAsFactors=FALSE,

header=FALSE, na.strings=””)

Termin „zmienna kategoryczna” odnosi się do rodzaju danych, które oznaczają przynależność obserwacji do kategorii. W statystykach zmienne kategorialne są bardzo ważne, ponieważ możemy być zainteresowani tym, co sprawia, że ​​pewne obserwacje określonego typu. W R reprezentujemy zmienne kategorialne jako typy czynników, które zasadniczo przypisują odniesienia numeryczne do etykiet ciągów. W tym przypadku konwertujemy niektóre ciągi – takie jak skróty stanu – na zmienne jakościowe za pomocą as.factor, który przypisuje unikalny numeryczny identyfikator każdemu skrótowi stanu w zbiorze danych. Powtórzymy ten proces wiele razy. Mamy teraz ramkę danych zawierającą wszystkie dane UFO! Ilekroć pracujesz z ramkami danych, zwłaszcza gdy pochodzą one z zewnętrznych źródeł danych, zawsze dobrze jest sprawdzić dane ręcznie. Dwie świetne funkcje do tego celu to głowa i ogon. Te funkcje wydrukują pierwsze i ostatnie sześć wpisów w ramce danych:

head(ufo)

V1 V2 V3 V4 V5 V6

1 19951009 19951009 Iowa City, IA <NA> <NA> Man repts. witnessing “flash..

2 19951010 19951011 Milwaukee, WI <NA> 2 min. Man on Hwy 43 SW of Milwauk..

3 19950101 19950103 Shelton, WA <NA> <NA> Telephoned Report:CA woman v..

4 19950510 19950510 Columbia, MO <NA> 2 min. Man repts. son’s bizarre sig..

5 19950611 19950614 Seattle, WA <NA> <NA> Anonymous caller repts. sigh..

6 19951025 19951024 Brunswick County, ND <NA> 30 min. Sheriff’s office calls to r

Pierwszym oczywistym problemem z ramką danych jest to, że nazwy kolumn są ogólne. Wykorzystując dokumentację tego zestawu danych jako odniesienie, możemy przypisać bardziej znaczące etykiety do kolumn. Posiadanie znaczących nazw kolumn dla ramek danych jest ważną najlepszą praktyką. Ułatwia to zrozumienie kodu i wyników, zarówno dla Ciebie, jak i innych odbiorców. Użyjemy funkcji nazw, która może albo uzyskać dostęp do etykiet kolumn dla struktury danych, albo przypisać je. Z dokumentacji danych konstruujemy wektor znaków, który odpowiada odpowiednim nazwom kolumn i przekazujemy go do funkcji nazw z ramką danych jako jedynym argumentem:

names(ufo)<-c(“DateOccurred”,”DateReported”,”Location”,”ShortDescription”,

“Duration”,”LongDescription”)

Z danych wyjściowych nagłówka i dokumentacji używanej do tworzenia nagłówków kolumn wiemy, że dwie pierwsze kolumny danych to daty. Podobnie jak w innych językach, R traktuje daty jako specjalny typ i będziemy chcieli przekonwertować ciągi dat na rzeczywiste typy dat. W tym celu użyjemy funkcji as.Date, która pobierze ciąg daty i spróbuje przekonwertować go na obiekt Date. Przy tych danych ciągi mają nietypowy format daty w postaci RRRMMDD. W związku z tym będziemy musieli określić ciąg formatu w as.Date, aby funkcja wiedziała, jak przekonwertować ciągi. Zaczynamy od konwersji kolumny DateOccurred:

ufo$DateOccurred<-as.Date(ufo$DateOccurred, format=”%Y%m%d”)

Error in strptime(x, format, tz = “GMT”) : input string is too long

Właśnie natrafiliśmy na nasz pierwszy błąd! Choć nieco tajemniczy, komunikat o błędzie zawiera podłańcuch „łańcuch wejściowy za długi”, co oznacza, że ​​niektóre wpisy w kolumnie DateOccurred są zbyt długie, aby pasowały do ​​podanego ciągu formatu. Dlaczego tak może być? Mamy do czynienia z dużym plikiem tekstowym, więc być może niektóre dane zostały zniekształcone w oryginalnym zestawie. Zakładając, że tak jest, te punkty danych nie zostaną poprawnie przeanalizowane podczas ładowania przez read.delim, a to spowodowałoby tego rodzaju błąd. Ponieważ mamy do czynienia z rzeczywistymi danymi, musimy wykonać pewne ręczne czyszczenie

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *