Importuj dane w R: czytaj pliki CSV, Excel, SPSS, Stata, SAS

⚡ Inteligentne podsumowanie

Import danych w R obejmuje odczyt plików CSV za pomocą read.csv(), arkuszy kalkulacyjnych Excela za pomocą readxl oraz plików SAS, STATA lub SPSS za pomocą haven. Ten przewodnik pokazuje również, jak precyzyjnie zaznaczać arkusze, wiersze i zakresy komórek podczas importowania.

  • 📄 Import CSV: read.csv(file, header = TRUE, sep = “,”) ładuje plik rozdzielony przecinkami ze ścieżki lokalnej lub URL.
  • ⚠️ Zmiana wersji: Od wersji R 4.0.0 kolumny znakowe pozostają znakowe, ponieważ stringsAsFactors ma teraz domyślną wartość FALSE.
  • 📗 Importowanie z programu Excel: read_excel() z readxl obsługuje zarówno pliki .xls, jak i .xlsx, a excel_sheets() najpierw wyświetla każdy arkusz kalkulacyjny.
  • 🎯 Dokładny wybór: n_max ogranicza wiersze, range przyjmuje notację Excela, a cell_rows() lub cell_cols() przyjmują indeksy i litery.
  • 🔄 Inne oprogramowanie: haven dostarcza read_sas(), read_dta() i read_sav(), z których każdy wymaga jedynie ścieżki lub URL.
  • 🧹 Czyste dane wejściowe: Przed zaimportowaniem zakoduj brakujące wartości jako NA i unikaj spacji lub symboli w nazwach kolumn.

Importuj dane w R

Dane mogą występować w różnych formatach. Dla każdego formatu R ma określoną funkcję i argument. W tym samouczku wyjaśniono, jak importować dane do R.

Odczyt plików CSV

Najczęściej używanym formatem danych jest .csv, czyli wartości rozdzielone przecinkami. R ładuje tablicę bibliotek podczas uruchamiania, w tym pakiet utils. Pakiet ten udostępnia funkcję read.csv(), standardowy sposób otwierania pliku CSV. Oto składnia:

read.csv(file, header = TRUE, sep = ",")

Argument:

  • filet: ŚCIEŻKA, w której przechowywany jest plik
  • nagłówek: potwierdź, czy plik ma nagłówek, czy nie, domyślnie nagłówek jest ustawiony na TRUE
  • września: symbol używany do podziału zmiennej. Domyślnie `,`.

Odczytamy nazwę pliku danych mtcats. Plik CSV jest przechowywany online. Jeśli plik .csv jest przechowywany lokalnie, możesz zastąpić PATH wewnątrz fragmentu kodu. Nie zapomnij zawinąć go do środka. PATH musi być wartością typu string.

W przypadku użytkowników komputerów Mac ścieżka do folderu pobierania to:

 "/Users/USERNAME/Downloads/FILENAME.csv"

Dla użytkowników systemu Windows:

"C:\Users\USERNAME\Downloads\FILENAME.csv"

Pamiętaj, że zawsze powinniśmy określić rozszerzenie nazwy pliku.

  • . Csv
  • . Xlsx
  • txt
  • ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'                
df <- read.csv(PATH, header =  TRUE, sep = ',')
length(df)

Wyjście:

## [1] 12
class(df$X)

Wyjście:

## [1] "factor"

W wersjach R wcześniejszych niż 4.0.0, read.csv() konwertował każdą kolumnę znakową na współczynnik, dlatego class(df$X) zwraca powyżej „współczynnik”. Można to wyłączyć za pomocą stringsAsFactors = FALSE.

⚠️ Uwaga dotycząca wersji: ponieważ R 4.0.0 Domyślnie stringsAsFactors = FALSE, więc kolumny znakowe pozostają znakowe, a pierwszy przykład zwraca teraz „znak” w nowoczesnej instalacji. Jawne przekazanie argumentu, jak poniżej, daje ten sam wynik w każdej wersji i jest najbezpieczniejszym nawykiem.

PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'
df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE)
class(df$X)

Wyjście:

## [1] "character"

Klasa zmiennej X jest teraz znakiem.

read.csv() vs read_csv(): Którego powinieneś użyć?

Funkcja read.csv() jest dostarczana z bazą R i nie wymaga pakietu. Pakiet readr dodaje funkcję read_csv(), która jest szybsza i podejmuje mniej decyzji za użytkownika.

kryteria read.csv() (narzędzia) read_csv() (odczyt)
Potrzebny pakiet żaden czytać
Prędkość dużych plików Wolniej Kilka razy szybciej
Zwroty ramka danych łkać
Nazwy kolumn Spacje zamienione na kropki Zachowane dokładnie tak, jak napisano
Wykrywanie typu milczący Zgłoszono w specyfikacji kolumny
library(readr)
df <- read_csv(PATH)

# For very large files, data.table::fread() is faster still
library(data.table)
df <- fread(PATH)

Użyj read.csv() w przypadku małych plików i skryptów, które muszą działać bez dodatkowych pakietów. Użyj read_csv(), gdy plik jest duży lub gdy ważne jest zachowanie dokładnych nazw kolumn.

Odczyt plików Excel

przewyższać pliki są bardzo popularne wśród analityków danych. Arkusze kalkulacyjne są łatwe w obsłudze i elastyczne. R jest wyposażony w bibliotekę readxl do importowania arkusza kalkulacyjnego Excel.

Użyj tego kodu

require(readxl)

aby sprawdzić, czy na twoim komputerze jest zainstalowany readxl. Jeśli zainstalujesz r z r-conda-essential, biblioteka jest już zainstalowana. Powinieneś zobaczyć w oknie poleceń:

Wyjście:

Loading required package: readxl.

Jeżeli pakiet nie jest zainstalowany, możesz go zainstalować za pomocą conda biblioteka lub w terminalu użyj conda install -c mittner r-readxl.

Użyj następującego polecenia, aby załadować bibliotekę i zaimportować pliki Excela.

library(readxl)

readxl_example()

W tym samouczku korzystamy z przykładów zawartych w pakiecie readxl.

Użyć kodu

readxl_example()

aby zobaczyć wszystkie dostępne arkusze kalkulacyjne w bibliotece.

Przeczytajxl_Przykład

Aby sprawdzić lokalizację konkretnego arkusza kalkulacyjnego, wprowadź jego nazwę:

readxl_example("geometry.xls")

Przeczytajxl_Przykład

Jeśli zainstalujesz R z Condą, arkusze kalkulacyjne znajdują się w Anaconda3/lib/R/library/readxl/extdata/filename.xls

czytaj_Excel()

read_excel() otwiera rozszerzenia .xls i .xlsx i automatycznie wybiera odpowiedni parser.

Składnia jest następująca:

read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE)
arguments:
-PATH: Path where the excel is located
-sheet: Select the sheet to import. By default, all
-range: Select the range to import. By default, all non-null cells
-col_names: Select the columns to import. By default, all non-null columns

Możemy zaimportować arkusze kalkulacyjne z biblioteki readxl i policzyć liczbę kolumn w pierwszym arkuszu.

# Store the path of `datasets.xlsx`
example <- readxl_example("datasets.xlsx")
# Import the spreadsheet
df <- read_excel(example)
# Count the number of columns
length(df)

Wyjście:

## [1] 5

arkusze_Excel()

Plik datasets.xlsx składa się z 4 arkuszy. Jakie arkusze są dostępne w skoroszycie, możemy dowiedzieć się, korzystając z funkcji Excel_sheets().

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

Wyjście:

[1] "iris"     "mtcars"   "chickwts" "quakes"

Jeśli arkusz zawiera wiele arkuszy, można łatwo wybrać konkretny arkusz za pomocą argumentów arkusza. Możemy podać nazwę arkusza lub indeks arkusza. Możemy sprawdzić, czy obie funkcje zwracają ten sam wynik za pomocą metody identycznej().

example <- readxl_example("datasets.xlsx")
quake <- read_excel(example, sheet = "quakes")
quake_1 <-read_excel(example, sheet = 4)
identical(quake, quake_1)

Wyjście:

## [1] TRUE

Możemy kontrolować, które komórki czytać, na 2 sposoby

  1. Użyj argumentu n_max, aby zwrócić n wierszy
  2. Użyj argumentu zakresu w połączeniu z cell_rows lub cell_cols

Na przykład ustawiamy n_max równe 5, aby zaimportować pierwsze pięć wierszy.

# Read the first five row: with header
iris <-read_excel(example, n_max =5, col_names =TRUE)

Arkusze_Excel

Jeśli zmienimy nazwy_kolumn na FALSE, R automatycznie utworzy nagłówki.

# Read the first five row: without header
iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)

iris_no_header

W ramce danych iris_no_header readxl wygenerował pięć nazw zastępczych. Starsze wersje generowały nazwy od X__1 do X__5, podczas gdy obecne wersje generowały nazwy od …1 do …5.

Arkusze_Excel

Zakresu argumentów możemy także używać do wybierania wierszy i kolumn w arkuszu kalkulacyjnym. W poniższym kodzie używamy stylu Excela, aby wybrać zakres od A1 do B5.

# Read rows A1 to B5
example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE)
dim(example_1)

Wyjście:

## [1] 4 2

example_1 zwraca 4 wiersze i 2 kolumny. Zakres A1:B5 obejmuje pięć wierszy arkusza kalkulacyjnego, ale pierwszy jest używany jako nagłówek, dlatego wymiar wynosi 4x2.

Arkusze_Excel

W drugim przykładzie używamy funkcji cell_rows(), która kontroluje zakres zwracanych wierszy. Jeśli chcemy zaimportować wiersze od 1 do 5, możemy ustawić cell_rows(1:5). Zauważ, że cell_rows(1:5) zwraca ten sam wynik co cell_rows(5:1).

# Read rows 1 to 5
example_2 <-read_excel(example, range =cell_rows(1:5),col_names =TRUE)			
dim(example_2)

Wyjście:

## [1] 4 5

example_2, z kolei, ma wymiary 4 na 5. cell_rows(1:5) ponownie traktuje pierwszy wiersz jako nagłówek, więc zwracane są cztery wiersze danych we wszystkich pięciu kolumnach.

Arkusze_Excel

W przypadku, gdy chcemy zaimportować wiersze, które nie zaczynają się od pierwszego wiersza, musimy uwzględnić col_names = FALSE. Jeśli użyjemy zakresu = cell_rows(2:5), stanie się oczywiste, że nasza ramka danych nie ma już nagłówka.

iris_row_with_header <-read_excel(example, range =cell_rows(2:3), col_names=TRUE)
iris_row_no_header <-read_excel(example, range =cell_rows(2:3),col_names =FALSE)

Arkusze_Excel

Można również wybierać kolumny według litery, dokładnie tak jak w programie Excel:

# Select columns A and B
col <- read_excel(example, range = cell_cols("A:B"))
dim(col)

Wyjście:

## [1] 150   2

Uwaga: zakres = cell_cols(„A:B”), zwraca wszystkie komórki z wartością inną niż null. Zbiór danych zawiera 150 wierszy, dlatego funkcja read_excel() zwraca maksymalnie 150 wierszy. Sprawdza się to za pomocą funkcji dim().

Argument na wskazuje funkcji read_excel(), które wartości traktować jako brakujące. Zlicz je za pomocą sum() i is.na():

  1. suma
  2. jest.na

Oto kod

iris_na <-read_excel(example, na ="setosa")
sum(is.na(iris_na))

Wyjście:

## [1] 50

Brakuje nam 50 wartości, które są wierszami należącymi do gatunku setosa.

Importuj dane z innego oprogramowania statystycznego

Pliki z innych pakietów statystycznych są importowane za pomocą przystań pakiet, który obsługuje SAS, STATA i SPSS. Możemy użyć następującej funkcji, aby otworzyć różne typy zbiorów danych, w zależności od rozszerzenia pliku:

  • SAS: read_sas()
  • STATA: read_dta() (lub read_stata(), które są identyczne)
  • SPSS: read_sav() lub read_por(). Musimy sprawdzić rozszerzenie

Każda z tych funkcji potrzebuje tylko jednego argumentu, ścieżki PATH, pod którą przechowywany jest plik, i każda akceptuje URL tak samo łatwo jak ścieżka lokalna.

library(haven)

haven jest wyposażony w conda r-essential, w przeciwnym razie przejdź do link lub w terminalu conda install -c conda-forge r-haven

Odczyt plików SAS

W naszym przykładzie użyjemy zestawu danych dotyczących przyjęć z IDRE.

PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true'
df <- read_sas(PATH_sas)
head(df)

Wyjście:

## # A tibble: 6 x 4
##   ADMIT   GRE   GPA  RANK
##   <dbl> <dbl> <dbl> <dbl>
## 1     0   380  3.61     3
## 2     1   660  3.67     3
## 3     1   800  4.00     1
## 4     1   640  3.19     4
## 5     0   520  2.93     4
## 6     1   760  3.00     2

Odczytaj pliki STATA

W przypadku plików danych STATA możesz użyć funkcji read_dta(). Używamy dokładnie tego samego zbioru danych, ale przechowujemy je w pliku .dta.

PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true'
df <- read_dta(PATH_stata)
head(df)

Wyjście:

## # A tibble: 6 x 4				
##   admit   gre   gpa  rank				
##   <dbl> <dbl> <dbl> <dbl>				
## 1     0   380  3.61     3				
## 2     1   660  3.67     3				
## 3     1   800  4.00     1				
## 4     1   640  3.19     4				
## 5     0   520  2.93     4				
## 6     1   760  3.00     2

Odczyt plików SPSS

read_sav() otwiera plik SPSS z rozszerzeniem .sav.

PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true'
df <- read_sav(PATH_spss)
head(df)

Wyjście:

## # A tibble: 6 x 4				
##   admit   gre   gpa  rank				
##   <dbl> <dbl> <dbl> <dbl>				
## 1     0   380  3.61     3				
## 2     1   660  3.67     3			
## 3     1   800  4.00     1				
## 4     1   640  3.19     4				
## 5     0   520  2.93     4				
## 6     1   760  3.00     2

Najlepsze praktyki dotyczące importu danych

Przeprowadzenie kontroli za pomocą poniższej listy kontrolnej przed importowaniem pozwoli zaoszczędzić większość późniejszej pracy związanej z czyszczeniem:

  • Typowym formatem arkusza kalkulacyjnego jest użycie pierwszych wierszy jako nagłówka (zwykle nazwy zmiennej).
  • Unikaj spacji w nazwie pliku lub kolumny, ponieważ mogą one zostać odczytane jako separatory kolumn. Zamiast nich użyj znaku podkreślenia.
  • Preferowane są krótkie nazwy
  • Nie używaj symboli w nazwie. Zamiast exchange_rate_$_€ wpisz exchange_rate_dollar_euro.
  • Brakujące wartości koduj jako NA, a nie jako spacje, myślniki lub liczby pomocnicze, takie jak -99, które w przeciwnym razie musiałyby zostać później usunięte.

Importowanie danych w R: Odniesienie do funkcji

Poniższa tabela zawiera listę funkcji importu dla każdego typu pliku, bibliotekę, która ją udostępnia, oraz jej domyślne argumenty:

Biblioteka Cel Funkcjonować Argumenty domyślne
utils Przeczytaj plik CSV czytaj.csv() plik, nagłówek = TRUE, sep = “,”
czytajxl Przeczytaj plik EXCEL czytaj_Excel() ścieżka, zakres = NULL, nazwy_kolumn = PRAWDA
przystań Przeczytaj plik SAS czytaj_sas() ścieżka
przystań Przeczytaj plik STATA odczyt_danych() / odczyt_stata() ścieżka
przystań Przeczytaj plik SPSS czytaj_zapisz() ścieżka

Druga tabela pokazuje sposoby importowania zaznaczenia za pomocą read_excel():

Funkcjonować Cel Argumenty
czytaj_Excel() Przeczytaj n liczby wierszy n_maks. = 10
Wybierz wiersze i kolumny jak w programie Excel zakres = „A1:D10”
Wybierz wiersze z indeksami zakres= wiersze_komórek(1:3)
Wybierz kolumny z literami zakres = cell_cols(“A:C”)

FAQ

Wersja R 4.0.0 zmieniła domyślną wartość stringsAsFactors z TRUE na FALSE. Kolumny znakowe teraz pozostają znakowe. Przekaż argument jawnie, jeśli Twój skrypt ma zachowywać się identycznie w starszych wersjach R.

Wymienić URL z pełną ścieżką lokalną w cudzysłowie, np. „C:/Users/name/data.csv”. Używaj ukośników do przodu lub podwójnych ukośników od tyłu. Windowsi potwierdź katalog roboczy za pomocą getwd().

readxl odczytuje pliki .xls i .xlsx w czystym R bez Java zależności. Tylko starszy pakiet xlsx wymaga Java przez rJavaDlatego też readxl jest zalecanym wyborem.

Ciche zmiany typów podczas importu są częstym źródłem nieodtwarzalnych wyników sztucznej inteligencji. Jawne deklarowanie typów kolumn, tak jak zwraca je funkcja read_csv(), gwarantuje, że zbiór danych treningowych będzie ładowany identycznie za każdym razem.

Tak. Asystenci AI potrafią diagnozować błędne separatory, problemy z kodowaniem i błędnie odczytywać nagłówki z komunikatów o błędach. Zawsze potwierdź wynik za pomocą str() lub prospect() przed kontynuowaniem analizy.

Podsumuj ten post następująco: