VKLÁDÁNÍ A ČIŠTĚNÍ DAT, ZJIŠŤOVÁNÍ ZÁKLADNÍCH INFORMACÍ O DATOVÉM SOUBORU
Vít Gabrhel
vit.gabrhel@mail.muni.cz
FSS MU,
2. 10. 2017
Harmonogram
0. Rekapitulace předchozí hodiny
1. Importování dat do R
2. Čištění dat
3. Popisné statistiky
Rekapitulace
Balíčky (dle Quick-R, n.d.)
Packages are collections of R functions, data, and compiled code in a well-defined format.
- The directory where packages are stored is called the library.
- R comes with a standard set of packages.
-
Others are available for download and installation.
- Once installed, they have to be loaded into the session to be used.
# get library location
.libPaths()
# see all packages installed
library()
# see packages currently loaded
search()
# nainstaluje konkrétní balíček
install.packages("psych")
# načte konkrétní balíček
library("psych")
Import dat
Obecně
# Zjištění pracovní složky (get working directory)
getwd()
# Nastavení pracovní složky (set working directory)
setwd(".../Data")
nebo
setwd("C:...\\Data")
Import dat
Flat Files (= Prostý dabázový soubor)
= Jednoduchá databáze (většinou tabulka) uložená v textovém souboru ve formě prostého textu (Prostý databázový soubor, n.d.)
- .csv (comma-separated values)
- .txt
Existence celé řady balíčků odlišených podle preferovaného formátu (.csv, .txt) a míry automatizace (resp. počtu argumentů, které je třeba specifikovat).
Součástí R je balíček "utils":
- read.table(sep = "")
- read.csv(sep = )
- read.csv2(sep = ";")
- read.delim(sep = "\t")
Import dat
Flat Files - Utils - .csv
# Import Manpower.csv:
Manpower = read.csv("Manpower.csv")
# Print the structure of Manpower
str(Manpower)
# Import Manpower.csv correctly: Manpower2
Manpower2 = read.csv("Manpower.csv", stringsAsFactors = FALSE)
# Check the structure of pools
str(Manpower2)
Import dat
Flat Files - Utils - .txt
Naval_1 = read.delim("Naval_1.txt", header = TRUE)
Naval_2 = read.delim("Naval_2.txt", header = FALSE, col.names = c("Country", "ISO3", "Rank", "Total Naval Assets", "Aircraft Carriers", "Frigates", "Destroyers", "Corvettes", "Submarines", "Patrol Craft", "Mine Warfare Vessels"))
summary(Naval_1)
str(Naval_1)
# Select the country with the least naval assets: Total_Naval_Assets
Total_Naval_Assets <- Naval_1[which.min(Naval_1$Total.Naval.Assets), ]
# Select the country with the most submarines: Submarines
Submarines = Naval_1[which.max(Naval_1$Submarines), 9]
Import dat
Excel - readxl
# Instalace a nahrání balíčku
install.packages("readxl")
library("readxl")
# Dva základní příkazy:
excel_sheets() # Výčet listů v daném excelovském (.xls, .xlsx) souboru
read_excel() # Načtení souboru excelovského formátu
excel_sheets("Resources.xlsx")
Import dat
Excel - readxl
# Read the first sheet of Resources.xlsx:
Population = read_excel("Resources.xlsx", sheet = "Population")
View(Population)
# Read the second sheet of Resources.xlsx:
Airports = read_excel("Resources.xlsx", sheet = 2)
View(Airports)
# Put Population and Airports in a list:
Resources_List = list(Population, Airports)
View(Resources_List)
Import dat
Excel - readxl - col_names
Apart from path and sheet, there are several other arguments you can specify in read_excel(). One of these arguments is called col_names.
# Import the the third Excel sheet of Resources.xlsx (R gives names):
Population2 = read_excel("Resources.xlsx", sheet = 3, col_names = FALSE)
View(Population2)
# Import the the third Excel sheet of Resources.xlsx (specify col_names):
Population3= read_excel("Resources.xlsx", sheet = 3, col_names = c("Country", "ISO3", "Rank", "Population"))
View(Population3)
# Print the summary of Population2
summary(Population2)
# Print the summary of Population3
summary(Population3)
Import dat
Excel - readxl - skip
Another argument that can be very useful when reading in Excel files that are less tidy, is skip.
- With skip, you can tell R to ignore a specified number of rows inside the Excel sheets you're trying to pull data from.
Have a look at this example:
Airports2 = read_excel("Resources.xlsx", sheet = 4, skip = 15)
In this case, the first 15 rows in the first sheet of "data.xlsx" are ignored.
Pozor na posunutí matice!
Airports3 = read_excel("Resources.xlsx", sheet = 4, skip = 15, col_names = FALSE)
Import dat
Excel - readxl - slučování listů do jedné matice a chybějící hodnoty
Resources_all <- cbind(Population, Airports[-1:-3])
View(Resources_all)
# Argument [-1:-3] se týká prvních tří sloupců v rámci dané matice
# Remove all rows with NAs from latitude_all
Population_clean = na.omit(Population)
# Print out a summary of Population
summary(Population_clean)
Import dat
SPSS - foreign
# Balíček foreign (základní součást R)
library("foreign")
# K načtení dat z SPSS (.sav, .por) slouží příkaz read.spss()
- Aby měla nahraná data povahu data frame, je nutné uvnitř příkazu read.spss() jako argument zadat "to.data.frame = TRUE"
# Načtení dat
demo_1 = read.spss("international.sav", to.data.frame = TRUE)
# Načtení několika prvních řádků
head(demo_1)
Import dat
SPSS - foreign
# Načtení dat
demo_2 = read.spss("international.sav", to.data.frame = TRUE, use.value.labels = FALSE)
# Načtení několika prvních řádků
head(demo_2)
Jak nastavit "value labels" z SPSS jako "factors" v R?
Skrze argument "se.value.labels" v rámci příkazu "read.spss()". Tento argument upřesňuje, zda mají být "value labels" konvertovány do R jako "factors".
- Argument je "TRUE by default", výchozím stavem je tedy provedení výše uvedené konverze
Import dat
SPSS - foreign
# Summary demo_2$contint
summary(demo_2$contint)
class(demo_2$contint)
# Konverze demo_2$contint na faktor
demo_2$contint = as.factor(demo_2$contint)
# Summary demo_2$contint znovu
summary(demo_2$contint)
class(demo_2$contint)
Jak nastavit "value labels" z SPSS jako "factors" u dílčích proměnných v R?
Jak nastavit "value labels" z SPSS u "factors" v R u dílčích proměnných?
continents = c("Africa", "Americas", "Asia", "Europe")
demo_2$contint = factor(demo_2$contint, levels = c(1, 2, 3, 4), labels = continents)
summary(demo_2$contint)
Čištění dat
Explorace hrubých dat - base
# Matice
bmi_1 = read_excel("bmi.xlsx", sheet = 2)
# Check the class of bmi
class(bmi_1)
# Check the dimensions of bmi
dim(bmi_1)
# View the column names of bmi
colnames(bmi_1)
# Struktura dat
str(bmi_1)
# Sumarizace
summary(bmi_1)
# Prvních 10 a posledních 10 řádků
head(bmi_1, n = 10)
tail(bmi_1, n = 10)
Čištění dat
Explorace hrubých dat - psych
# Load psych
install.packages("psych")
library("psych")
# Check the structure of bmi, the psych way
describe(bmi_1)
Čištění dat
Explorace hrubých dat - grafy
# Matice
bmi_2 = read_excel("bmi.xlsx", sheet = 3)
bmi_all = cbind(bmi_1, bmi_2[-1])
# Histogram
hist(bmi_1$BMI_1980)
# Scatterplot
plot(bmi_all$BMI_1980, bmi_all$BMI_2000)
Čištění dat
Příprava dat pro analýzu
# Preview Infrastructure with str()
str(Infrastructure)
# Coerce Country to character
Infrastructure$Country <- as.character(Infrastructure$Country)
# Coerce Rank to factor
Infrastructure$Rank <- as.character(Infrastructure$Rank)
# Look at Infrastructure once more with str()
str(Infrastructure)
Infrastructure= read.csv2("Infrastructure.csv")
Čištění dat
Příprava dat pro analýzu - dílčí manipulace se strings
# Load the stringr package
install.packages("stringr")
library("stringr")
# Trim all leading and trailing whitespace
name = c(" Filip ", "Nick ", " Jonathan")
str_trim(name)
# Pad these strings with leading zeros
pad = c("23485W", "8823453Q", "994Z")
str_pad(pad, width = 9, side = "left", pad = "0")
# Print state abbreviations
Population$country
# Make states all uppercase and save result to states_upper
states_upper = toupper(Population$Country)
states_upper
# Make states_upper all lowercase again
states_lower = tolower(Population$Country)
states_lower
Čištění dat
Příprava dat pro analýzu - dílčí manipulace se strings
# Look at the head of Infrastructure
head(Infrastructure)
# Detect all "Republic" in Country
str_detect(Infrastructure$Country, "Republic")
# In the Country column, replace "Republic" with "R"...
Infrastructure$Country <- str_replace(Infrastructure$Country, "Republic", "R")
Čištění dat
Příprava dat pro analýzu - missing values
# Call is.na() on the full social_df to spot all NAs
is.na(social_df)
# Use the any() function to ask whether there are any NAs in the data
any(is.na(social_df))
# View a summary() of the dataset
summary(social_df)
# Call table() on the status column
table(social_df$status)
# Replace all empty strings in status with NA
social_df$status[social_df$status == ""] <- NA
# Print social_df to the console
social_df
# Use complete.cases() to see which rows have no missing values
complete.cases(social_df)
# Use na.omit() to remove all rows with any missing values
na.omit(social_df)
name = c("Jerry", "Beth", "Rick", "Morty")
n_friends = c(0, NA, NA, 2)
status = c("Listening to human music", "Happy Family", "Garage", "")
social_df = data.frame(cbind(name, n_friends, status))
Zdroje
Packages (n.d.) Packages. In Quick-R. Staženo dne 2. 10. 2016 z http://www.statmethods.net/interface/packages.html
Prostý databázový soubor. (n.d.). In Wikipedia. Staženo dne 2. 10. 2016 z https://cs.wikipedia.org/wiki/Prost%C3%BD_datab%C3%A1zov%C3%BD_soubor
PSY532, PSY232 - 3. VKLÁDÁNÍ A ČIŠTĚNÍ DAT, ZJIŠŤOVÁNÍ ZÁKLADNÍCH INFORMACÍ O DATOVÉM SOUBORU
By Vít Gabrhel
PSY532, PSY232 - 3. VKLÁDÁNÍ A ČIŠTĚNÍ DAT, ZJIŠŤOVÁNÍ ZÁKLADNÍCH INFORMACÍ O DATOVÉM SOUBORU
- 1,289