Import dat v R: Čtení souborů CSV, Excel, SPSS, Stata, SAS

⚡ Chytré shrnutí

Import dat v R zahrnuje čtení souborů CSV pomocí read.csv(), sešitů aplikace Excel pomocí readxl a souborů SAS, STATA nebo SPSS pomocí haven. Tento návod také ukazuje, jak přesně vybrat listy, řádky a oblasti buněk při importu.

  • 📄 Import CSV: read.csv(file, header = TRUE, sep = “,”) načte soubor oddělený čárkami z lokální cesty nebo URL.
  • ⚠️ Změna verze: Od verze R 4.0.0 zůstávají sloupce typu „char“ (znakové) pouze znaky, protože stringsAsFactors má nyní výchozí hodnotu FALSE.
  • 📗 Import z Excelu: Funkce read_excel() z readxl zpracovává soubory .xls i .xlsx a funkce excel_sheets() vypíše všechny pracovní listy jako první.
  • 🎯 Přesný výběr: Funkce n_max omezuje počet řádků, rozsah přebírá notaci Excelu a funkce cell_rows() nebo cell_cols() přijímají indexy a písmena.
  • 🔄 Další software: haven nabízí funkce read_sas(), read_dta() a read_sav(), z nichž každá potřebuje pouze cestu nebo URL.
  • 🧹 Čistý vstup: Chybějící hodnoty zakódujte jako NA a před importem se v názvech sloupců vyhněte mezerám nebo symbolům.

Import dat v R

Data mohou existovat v různých formátech. Pro každý formát R má specifickou funkci a argument. Tento tutoriál vysvětluje, jak importovat data do R.

Čtení souborů CSV

Nejrozšířenějším datovým formátem je .csv, hodnoty oddělené čárkami. R při spouštění načte pole knihoven, včetně balíčku utils. Tento balíček poskytuje read.csv(), standardní způsob, jak otevřít soubor CSV. Syntaxe je následující:

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

Argument:

  • soubor: PATH, kde je soubor uložen
  • hlavička: potvrzení, zda má soubor záhlaví nebo ne, ve výchozím nastavení je záhlaví nastaveno na hodnotu TRUE
  • září: symbol používaný k rozdělení proměnné. Ve výchozím nastavení `,`.

Přečteme název datového souboru mtcats. Soubor csv je uložen online. Pokud je váš soubor .csv uložen místně, můžete nahradit PATH uvnitř fragmentu kódu. Nezapomeňte jej zabalit dovnitř „ “. PATH musí být řetězcová hodnota.

Pro uživatele systému Mac je cesta ke složce pro stahování:

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

Pro uživatele systému Windows:

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

Všimněte si, že bychom měli vždy zadat příponu názvu souboru.

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

Výstup:

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

Výstup:

## [1] "factor"

Ve verzích R před verzí 4.0.0 převáděla metoda read.csv() každý sloupec se znaky na faktor, a proto class(df$X) vrací výše uvedený „faktor“. Tuto funkci bylo možné vypnout pomocí stringsAsFactors = FALSE.

⚠️ Poznámka k verzi: od R 4.0.0 Výchozí hodnota je stringsAsFactors = FALSE, takže sloupce se znaky zůstanou znaky a první příklad nyní v moderní instalaci vrací „znak“. Explicitní předání argumentu, jak je uvedeno níže, dává stejný výsledek ve všech verzích a je nejbezpečnějším zvykem.

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

Výstup:

## [1] "character"

Třída pro proměnnou X je nyní znak.

read.csv() vs. read_csv(): Který byste měli použít?

Funkce read.csv() je dodávána se základním R a nepotřebuje žádný balíček. Balíček readr přidává funkci read_csv(), která je rychlejší a provádí méně rozhodnutí za vás.

Kritéria read.csv() (utility) read_csv() (čtečka)
Potřebný balíček Nevyplněno čtenáře
Rychlost při práci s velkými soubory Pomaleji Několikrát rychlejší
Vrácení zboží data.frame pochutnat si
Názvy sloupců Mezery převedeny na tečky Přesně tak, jak je napsáno
Detekce typu Tichý Uvedeno ve specifikaci sloupce
library(readr)
df <- read_csv(PATH)

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

Pro malé soubory a skripty, které musí běžet bez dalších balíčků, použijte funkci read.csv(). Pokud je soubor velký nebo když je důležité zachovat přesné názvy sloupců, použijte funkci read_csv().

Čtení souborů Excelu

vynikat soubory jsou mezi datovými analytiky velmi oblíbené. S tabulkami se snadno pracuje a jsou flexibilní. R je vybaven knihovnou readxl pro import tabulky Excel.

Použijte tento kód

require(readxl)

zkontrolujte, zda je ve vašem počítači nainstalován readxl. Pokud nainstalujete r pomocí r-conda-essential, knihovna je již nainstalována. V příkazovém okně byste měli vidět:

Výstup:

Loading required package: readxl.

Pokud balíček není nainstalován, můžete jej nainstalovat pomocí conda knihovna nebo v terminálu použijte conda install -c mittner r-readxl.

Pomocí následujícího příkazu načtěte knihovnu pro import souborů aplikace Excel.

library(readxl)

readxl_example()

V tomto tutoriálu používáme příklady obsažené v balíčku readxl.

Použijte kód

readxl_example()

zobrazíte všechny dostupné tabulky v knihovně.

Readxl_Example

Chcete-li zkontrolovat umístění konkrétní tabulky, zadejte její název:

readxl_example("geometry.xls")

Readxl_Example

Pokud nainstalujete R s conda, tabulky jsou umístěny v Anaconda3/lib/R/library/readxl/extdata/filename.xls

read_excel()

Funkce read_excel() otevírá soubory s příponami .xls i .xlsx a automaticky vybírá správný parser.

Syntaxe je:

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

Můžeme importovat tabulky z knihovny readxl a spočítat počet sloupců v prvním listu.

# 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)

Výstup:

## [1] 5

excel_sheets()

Soubor datasets.xlsx se skládá ze 4 listů. Které listy jsou v sešitu k dispozici, můžeme zjistit pomocí funkce excel_sheets().

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

Výstup:

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

Pokud list obsahuje mnoho listů, je snadné vybrat konkrétní list pomocí argumentů listu. Můžeme zadat název listu nebo index listu. Můžeme ověřit, zda obě funkce vrací stejný výstup s identickou().

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

Výstup:

## [1] TRUE

Můžeme ovládat, které buňky číst, dvěma způsoby

  1. Použijte argument n_max k vrácení n řádků
  2. Použijte argument rozsahu v kombinaci s buňkami řádky nebo sloupce buněk

Například nastavíme n_max rovno 5, abychom importovali prvních pět řádků.

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

Excel_Tabulky

Pokud změníme col_names na FALSE, R vytvoří záhlaví automaticky.

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

iris_no_header

V datovém rámci iris_no_header příkaz readxl vygeneroval pět zástupných názvů. Starší verze generovaly názvy X__1 až X__5, zatímco aktuální verze generovaly názvy …1 až …5.

Excel_Tabulky

Rozsah argumentů můžeme také použít k výběru řádků a sloupců v tabulce. V níže uvedeném kódu používáme excelový styl k výběru rozsahu A1 až B5.

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

Výstup:

## [1] 4 2

Funkce example_1 vrací 4 řádky a 2 sloupce. Rozsah A1:B5 pokrývá pět řádků tabulky, ale první z nich je použit jako záhlaví, proto je rozměr 4 x 2.

Excel_Tabulky

Ve druhém příkladu používáme funkci cell_rows(), která řídí rozsah řádků, které se mají vrátit. Pokud chceme importovat řádky 1 až 5, můžeme nastavit cell_rows(1:5). Všimněte si, že cell_rows(1:5) vrací stejný výstup jako 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)

Výstup:

## [1] 4 5

example_2 má naopak rozměry 4 x 5. Funkce cell_rows(1:5) opět považuje první řádek za záhlaví, takže vrátí čtyři datové řádky ve všech pěti sloupcích.

Excel_Tabulky

V případě, že chceme importovat řádky, které nezačínají na prvním řádku, musíme zahrnout col_names = FALSE. Pokud použijeme range = cell_rows(2:5), je zřejmé, že náš datový rámec již nemá záhlaví.

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)

Excel_Tabulky

Sloupce můžete také vybírat podle písmene, přesně jako v Excelu:

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

Výstup:

## [1] 150   2

Poznámka: range = cell_cols(“A:B”), vrátí výstup všech buněk s nenulovou hodnotou. Datová sada obsahuje 150 řádků, proto read_excel() vrací řádky až 150. To je ověřeno funkcí dim().

Argument na říká funkci read_excel(), které hodnoty má považovat za chybějící. Spočítá je pomocí sum() a is.na():

  1. součet
  2. je.na

Zde je kód

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

Výstup:

## [1] 50

Chybí nám 50 hodnot, což jsou řádky patřící druhu setosa.

Import dat z jiného statistického softwaru

Soubory z jiných statistických balíčků se importují pomocí útočiště balíček, který podporuje SAS, STATA a SPSS. Následující funkci můžeme použít k otevření různých typů datových sad v závislosti na příponě souboru:

  • SAS: read_sas()
  • STATA: read_dta() (nebo read_stata(), které jsou identické)
  • SPSS: read_sav() nebo read_por(). Musíme zkontrolovat rozšíření

Každá z těchto funkcí potřebuje pouze jeden argument, cestu, kde je soubor uložen, a každá přijímá URL stejně snadno jako místní cesta.

library(haven)

Haven přichází s conda r-essential jinak jděte do https://trials.autocruitment.com nebo v terminálu conda install -c conda-forge r-haven

Čtení souborů SAS

Pro náš příklad použijeme vstupní datovou sadu z IDRE.

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

Výstup:

## # 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

Čtení souborů STATA

Pro datové soubory STATA můžete použít read_dta(). Používáme přesně stejnou datovou sadu, ale ukládáme ji do souboru .dta.

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

Výstup:

## # 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

Čtení souborů SPSS

Funkce read_sav() otevírá soubor SPSS s příponou .sav.

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

Výstup:

## # 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

Nejlepší postupy pro import dat

Procházení níže uvedeného kontrolního seznamu před importem ušetří většinu práce s následným čištěním:

  • Typickým formátem tabulky je použití prvních řádků jako záhlaví (obvykle název proměnné).
  • V názvu souboru nebo sloupce se vyhněte mezerám, protože je lze číst jako oddělovač sloupců. Použijte místo nich podtržítko.
  • Preferují se krátká jména
  • Nepoužívejte v názvu žádné symboly. Pište směnný_kurz_dolar_euro místo směnný_kurz_$_€.
  • Chybějící hodnoty kódujte jako NA, nikoli jako mezery, pomlčky nebo kontrolní čísla, například -99, která je jinak nutné dodatečně vyčistit.

Import dat v R: Referenční příručka funkcí

V následující tabulce jsou uvedeny funkce importu pro každý typ souboru, knihovna, která je poskytuje, a její výchozí argumenty:

Knihovna Objektivní funkce Výchozí argumenty
utils Přečtěte si soubor CSV read.csv() soubor, záhlaví = TRUE, sep = „,“
readxl Přečtěte si soubor EXCEL read_excel() cesta, rozsah = NULL, názvy sloupců = TRUE
útočiště Přečtěte si soubor SAS read_sas() cesta
útočiště Přečtěte si soubor STATA čtení_dta() / čtení_stata() cesta
útočiště Číst soubor SPSS read_sav() cesta

Druhá tabulka ukazuje způsoby importu výběru pomocí read_excel():

funkce Objektivní Argumenty
read_excel() Přečtěte n počet řádků n_max = 10
Vyberte řádky a sloupce jako v Excelu rozsah = "A1:D10"
Vyberte řádky s indexy range= cell_rows(1:3)
Vyberte sloupce s písmeny rozsah = cell_cols(“A:C”)

Nejčastější dotazy

Verze R 4.0.0 změnila výchozí hodnotu stringsAsFactors z TRUE na FALSE. Znakové sloupce nyní zůstávají znakové. Pokud se váš skript musí chovat identicky ve starších verzích R, zadejte argument explicitně.

Vyměňte URL s celou lokální cestou v uvozovkách, například „C:/Users/name/data.csv“. Používejte lomítka vpřed nebo dvojitá zpětná lomítka na Windowsa potvrďte pracovní adresář pomocí getwd().

readxl čte soubory .xls a .xlsx v čistém R bez Java závislost. Vyžaduje pouze starší balíček xlsx Java přes rJava, a proto je readxl doporučenou volbou.

Tiché změny typu při importu jsou běžným zdrojem nereprodukovatelných výsledků umělé inteligence. Explicitní deklarace typů sloupců, jakmile je funkce read_csv() hlásí, zajišťuje, že se trénovací datová sada načte pokaždé identicky.

Ano. Asistenti s umělou inteligencí dokáží diagnostikovat chybné oddělovače, problémy s kódováním a špatně číst záhlaví z chybové zprávy. Před pokračováním v analýze vždy potvrďte výsledek pomocí str() nebo glimpse().

Shrňte tento příspěvek takto: