Data frejmovi predstavljaju osnovnu strukturu podataka u programskom jeziku R, pružajući organizaciju, fleksibilnost i alate neophodne za analizu i obradu podataka. Njihova važnost proteže se na različite oblasti, uključujući statistiku, nauku o podacima i donošenje odluka zasnovanih na podacima u različitim industrijama.
Data frejmovi obezbeđuju strukturu i organizaciju potrebnu za otkrivanje uvida i donošenje odluka na osnovu podataka na sistematičan i efikasan način.
U programskom jeziku R, data frejmovi su organizovani kao tabele, sa redovima i kolonama. Svaki red predstavlja pojedinačno posmatranje, dok svaka kolona predstavlja varijablu. Ova struktura olakšava organizaciju i rad sa podacima. Data frejmovi mogu sadržati različite tipove podataka, uključujući numeričke vrednosti, tekstualne podatke i datume, što ih čini veoma prilagodljivim.
U ovom članku, objasniću važnost data frejmova i demonstrirati kako se kreiraju pomoću funkcije data.frame()
.
Pored toga, istražićemo metode za manipulaciju podacima, pokrićemo kako kreirati data frejmove iz CSV i Excel datoteka, konvertovati druge strukture podataka u data frejmove, i koristiti tibble
biblioteku.
Evo nekoliko ključnih razloga zašto su data frejmovi od suštinskog značaja u jeziku R:
Važnost data frejmova
- Skladištenje strukturiranih podataka: Data frejmovi pružaju strukturiran i tabelarni način skladištenja podataka, slično tabeli u bazi podataka. Ovaj format pojednostavljuje upravljanje i organizaciju podataka.
- Mogućnost mešanja tipova podataka: Data frejmovi mogu da sadrže različite tipove podataka unutar iste strukture. Možete imati kolone sa numeričkim vrednostima, nizovima karaktera, faktorima, datumima i drugim tipovima podataka. Ova svestranost je ključna kada se radi sa podacima iz stvarnog sveta.
- Organizacija podataka: Svaka kolona u data frejmu predstavlja varijablu, dok svaki red predstavlja posmatranje ili slučaj. Ovakav strukturirani izgled olakšava razumevanje organizacije podataka i poboljšava njihovu jasnoću.
- Uvoz i izvoz podataka: Data frejmovi podržavaju jednostavan uvoz i izvoz podataka iz različitih formata datoteka, kao što su CSV, Excel i baze podataka. Ova funkcionalnost pojednostavljuje proces rada sa eksternim izvorima podataka.
- Interoperabilnost: Data frejmovi su široko podržani od strane R paketa i funkcija, obezbeđujući kompatibilnost sa drugim alatima i bibliotekama za statistiku i analizu podataka. Ova interoperabilnost omogućava besprekornu integraciju u R ekosistem.
- Manipulacija podacima: R nudi bogat ekosistem paketa, pri čemu je
dplyr
odličan primer. Ovi paketi olakšavaju filtriranje, transformaciju i sumiranje podataka koristeći data frejmove. Ova mogućnost je ključna za čišćenje i pripremu podataka.
- Statistička analiza: Data frejmovi su standardni format podataka za mnoge statističke funkcije i funkcije analize podataka u R. Možete efikasno izvršiti regresiju, testiranje hipoteza i mnoge druge statističke analize koristeći data frejmove.
- Vizualizacija: R paketi za vizualizaciju podataka, kao što je
ggplot2
, besprekorno rade sa data frejmovima. Ovo olakšava kreiranje informativnih grafikona i dijagrama za istraživanje podataka i komunikaciju rezultata.
- Istraživanje podataka: Data frejmovi olakšavaju istraživanje podataka putem sumarne statistike, vizualizacije i drugih analitičkih metoda. Ovo pomaže analitičarima i naučnicima da razumeju karakteristike podataka i otkriju obrasce ili odstupanja.
Kako kreirati data frejm u R
Postoji nekoliko načina za kreiranje data frejma u R. Evo nekih od najčešćih metoda:
#1. Korišćenje funkcije data.frame()
.
# Učitavanje neophodne biblioteke ako nije već učitana if (!require("dplyr")) { install.packages("dplyr") library(dplyr) } # install.packages("dplyr") library(dplyr) # Postavljanje semena za ponovljivost set.seed(42) # Kreiranje data frejma sa podacima o prodaji, uključujući stvarne nazive proizvoda sales_data <- data.frame( OrderID = 1001:1010, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven"), Quantity = sample(1:10, 10, replace = TRUE), Price = round(runif(10, 100, 2000), 2), Discount = round(runif(10, 0, 0.3), 2), Date = sample(seq(as.Date('2023-01-01'), as.Date('2023-01-10'), by="days"), 10) ) # Prikazivanje data frejma sa podacima o prodaji print(sales_data)
Da razjasnimo šta ovaj kod radi:
sales_data
frejm
Ovo je jedan od najjednostavnijih načina za kreiranje data frejma u R. Takođe ćemo istražiti kako izdvojiti, dodati, izbrisati i selektovati određene kolone ili redove, kao i kako sumirati podatke.
Izdvoj kolone
Postoje dva načina za izdvajanje kolona koje su nam potrebne iz našeg data frejma:
- Za preuzimanje poslednje tri kolone iz data frejma u R, možete koristiti indeksiranje.
- Možete izdvojiti kolone iz data frejma pomoću operatora
$
kada želite pristup pojedinačnim kolonama po imenu.
Prikazaćemo oba načina zajedno kako bismo uštedeli vreme:
# Izdvajanje poslednje tri kolone (Discount, Price i Date) iz sales_data data frejma last_three_columns <- sales_data[, c("Discount", "Price", "Date")] # Prikazivanje izdvojenih kolona print(last_three_columns) ############################################# ILI ######################################################### # Izdvajanje poslednje tri kolone (Discount, Price i Date) koristeći operator $ discount_column <- sales_data$Discount price_column <- sales_data$Price date_column <- sales_data$Date # Kreiranje novog data frejma sa izdvojenim kolonama last_three_columns <- data.frame(Discount = discount_column, Price = price_column, Date = date_column) # Prikazivanje izdvojenih kolona print(last_three_columns)
Možete izdvojiti kolone koje su vam potrebne koristeći bilo koji od ovih kodova.
Možete izdvojiti redove iz data frejma u R koristeći različite metode. Evo jednostavnog načina da to uradite:
# Izdvajanje određenih redova (redovi 3, 6 i 9) iz last_three_columns data frejma selected_rows <- last_three_columns[c(3, 6, 9), ] # Prikazivanje odabranih redova print(selected_rows)
Možete koristiti i određene uslove:
# Izdvajanje i organizovanje redova koji zadovoljavaju određene uslove selected_rows <- sales_data %>% filter(Discount < 0.3, Price > 100, format(Date, "%Y-%m") == "2023-01") %>% arrange(OrderID) %>% select(Discount, Price, Date) # Prikazivanje odabranih redova print(selected_rows)
Izdvojeni redovi
Dodaj novi red
Da biste dodali novi red u postojeći data frejm u R, možete koristiti funkciju rbind()
:
# Kreiranje novog reda kao data frejma new_row <- data.frame( OrderID = 1011, Product = "Coffee Maker", Quantity = 2, Price = 75.99, Discount = 0.1, Date = as.Date("2023-01-12") ) # Korišćenje funkcije rbind() za dodavanje novog reda u data frejm sales_data <- rbind(sales_data, new_row) # Prikazivanje ažuriranog data frejma print(sales_data)
Dodat je novi red
Dodaj novu kolonu
Možete dodati kolone u svoj data frejm pomoću jednostavnog koda. Ovde želim da dodam kolonu „Način plaćanja“ u svoje podatke.
# Kreiranje nove kolone "PaymentMethod" sa vrednostima za svaki red sales_data$PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") # Prikazivanje ažuriranog data frejma print(sales_data)
Kolona je dodata u data frejm
Izbriši redove
Ako želite da izbrišete nepotrebne redove, ova metoda može biti od pomoći:
# Identifikovanje reda koji treba izbrisati na osnovu njegovog OrderID row_to_delete <- sales_data$OrderID == 1010 # Korišćenje identifikovanog reda za njegovo isključivanje i kreiranje novog data frejma sales_data <- sales_data[!row_to_delete, ] # Prikazivanje ažuriranog data frejma bez izbrisanog reda print(sales_data)
Izbriši kolone
Možete izbrisati kolonu iz data frejma u R koristeći paket dplyr
.
# install.packages("dplyr") library(dplyr) # Uklanjanje kolone "Discount" pomoću funkcije select() sales_data <- sales_data %>% select(-Discount) # Prikazivanje ažuriranog data frejma bez kolone "Discount" print(sales_data)
Dobijte sažetak
Da biste dobili sažetak svojih podataka u R, možete koristiti funkciju summary()
. Ova funkcija pruža brz pregled centralnih tendencija i distribucije numeričkih varijabli u vašim podacima.
# Dobijanje sažetka podataka data_summary <- summary(sales_data) # Prikazivanje sažetka print(data_summary)
Ovo je nekoliko koraka koje možete pratiti za manipulaciju podacima u data frejmu.
Pređimo na drugu metodu za kreiranje data frejma.
#2. Napravite R data frejm iz CSV datoteke
Da biste kreirali R data frejm iz CSV datoteke, možete koristiti funkciju read.csv()
.
# Učitavanje CSV datoteke u data frejm df <- read.csv("my_data.csv") # Prikazivanje prvih nekoliko redova data frejma head(df)
Ova funkcija čita podatke iz CSV datoteke i konvertuje ih u data frejm. Zatim možete raditi sa podacima u R po potrebi.
# Instaliranje i učitavanje readr paketa ako već nije instaliran if (!requireNamespace("readr", quietly = TRUE)) { install.packages("readr") } library(readr) # Učitavanje CSV datoteke u data frejm df <- read_csv("data.csv") # Prikazivanje prvih nekoliko redova data frejma head(df)
Možete koristiti i readr
paket za čitanje CSV datoteke u R. Funkcija read_csv()
iz readr
paketa se često koristi u tu svrhu. Obično je brža od standardne metode.
#3. Korišćenje funkcije as.data.frame()
.
Možete kreirati data frejm u R koristeći funkciju as.data.frame()
. Ova funkcija vam omogućava da konvertujete druge strukture podataka, kao što su matrice ili liste, u data frejm.
Evo kako je možete koristiti:
# Kreiranje ugnježđene liste koja predstavlja podatke data_list <- list( OrderID = 1001:1011, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"), Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2), Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99), Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1), Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")), PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") ) # Konvertovanje ugnježđene liste u data frejm sales_data <- as.data.frame(data_list) # Prikazivanje data frejma print(sales_data)
sales_data
Ova metoda vam omogućava da kreirate data frejm bez navođenja svake kolone pojedinačno, i posebno je korisna kada imate veliku količinu podataka.
#4. Iz postojećeg data frejma
Da biste kreirali novi data frejm biranjem određenih kolona ili redova iz postojećeg data frejma u R, možete koristiti uglaste zagrade []
za indeksiranje. Evo kako to funkcioniše:
# Selektovanje redova i kolona sales_subset <- sales_data[c(1, 3, 4), c("Product", "Quantity")] # Prikazivanje odabranog podskupa print(sales_subset)
U ovom kodu kreiramo novi data frejm koji se zove sales_subset
, koji sadrži određene redove (1, 3 i 4) i određene kolone („Product“ i „Quantity“) iz sales_data
.
Možete prilagoditi indekse i imena redova i kolona kako biste odabrali podatke koji su vam potrebni.
sales_subset
#5. Iz vektora
Vektor je jednodimenzionalna struktura podataka u R koja se sastoji od elemenata istog tipa podataka, uključujući logičke, celobrojne, dvostruke, karakterne, kompleksne ili sirove vrednosti.
Sa druge strane, R data frejm je dvodimenzionalna struktura dizajnirana za skladištenje podataka u tabelarnom formatu sa redovima i kolonama. Postoje različite metode za kreiranje R data frejma iz vektora, a jedan takav primer je dat u nastavku.
# Kreiranje vektora za svaku kolonu OrderID <- 1001:1011 Product <- c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker") Quantity <- c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2) Price <- c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99) Discount <- c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1) Date <- as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")) PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") # Kreiranje data frejma pomoću data.frame() sales_data <- data.frame( OrderID = OrderID, Product = Product, Quantity = Quantity, Price = Price, Discount = Discount, Date = Date, PaymentMethod = PaymentMethod ) # Prikazivanje data frejma print(sales_data)
U ovom kodu, kreiramo odvojene vektore za svaku kolonu, a zatim koristimo funkciju data.frame()
za kombinovanje ovih vektora u data frejm nazvan sales_data
.
Ovo vam omogućava da kreirate strukturiran tabelarni data frejm od pojedinačnih vektora u R.
#6. Iz Excel datoteke
Da biste kreirali data frejm uvozom Excel datoteke u R, možete koristiti pakete treće strane kao što je readxl
jer osnovni R ne nudi podršku za čitanje CSV datoteka. Jedna takva funkcija za čitanje Excel datoteka je read_excel()
.
# Učitavanje readxl biblioteke library(readxl) # Definicija putanje do Excel datoteke excel_file_path <- "your_file.xlsx" # Zamenite sa stvarnom putanjom do datoteke # Čitanje Excel datoteke i kreiranje data frejma data_frame_from_excel <- read_excel(excel_file_path) # Prikazivanje data frejma print(data_frame_from_excel)
Ovaj kod će učitati Excel datoteku i skladištiti njene podatke u R data frejm, omogućavajući vam da radite sa podacima u svom R okruženju.
#7. Iz tekstualne datoteke
Možete koristiti funkciju read.table()
u R da biste uvezli tekstualnu datoteku u data frejm. Ova funkcija zahteva dva bitna parametra: ime datoteke koju želite da pročitate i graničnik koji definiše kako su polja u datoteci razdvojena.
# Definicija naziva datoteke i graničnika file_name <- "your_text_file.txt" # Zamenite sa stvarnim imenom datoteke delimiter <- "\t" # Zamenite sa stvarnim graničnikom (npr., "\t" za tabulator, "," za CSV) # Korišćenje funkcije read.table() za kreiranje data frejma data_frame_from_text <- read.table(file_name, header = TRUE, sep = delimiter) # Prikazivanje data frejma print(data_frame_from_text)
Ovaj kod će učitati tekstualnu datoteku i kreirati je u R, čineći je dostupnom za analizu podataka u vašem R okruženju.
#8. Korišćenje tibble
Da biste kreirali data frejm pomoću obezbeđenih vektora i koristili tidyverse
biblioteku, možete pratiti ove korake:
# Učitavanje tidyverse biblioteke library(tidyverse) # Kreiranje tibble pomoću obezbeđenih vektora sales_data <- tibble( OrderID = 1001:1011, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"), Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2), Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99), Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1), Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")), PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") ) # Prikazivanje kreiranog tibble sa podacima o prodaji print(sales_data)
Ovaj kod koristi funkciju tibble()
iz tidyverse
biblioteke da kreira tibble data frejm nazvan sales_data
. Tibble format pruža informativniji ispis u poređenju sa standardnim R data frejmom, kao što ste napomenuli.
Kako efikasno koristiti data frejmove u R
Efikasno korišćenje data frejmova u R je ključno za manipulaciju i analizu podataka. Data frejmovi su osnovna struktura podataka u R, i obično se kreiraju i njima se manipuliše pomoću funkcije data.frame
. Evo nekoliko saveta za efikasan rad sa data frejmovima:
- Pre kreiranja, uverite se da su vaši podaci čisti i dobro strukturirani. Uklonite sve nepotrebne redove ili kolone, rukujte nedostajućim vrednostima i uverite se da su tipovi podataka odgovarajući.
- Podesite odgovarajuće tipove podataka za svoje kolone (npr., numerički, karakter, faktor, datum). Ovo može poboljšati upotrebu memorije i brzinu obrade.
- Koristite indeksiranje i podskupove za rad sa manjim delovima podataka.
subset()
i[]
operatori su korisni za ovu svrhu.
- Dok
attach()
idetach()
mogu biti praktični, oni takođe mogu dovesti do dvosmislenosti i neočekivanog ponašanja.
- R je visoko optimizovan za vektorizovane operacije. Kad god je moguće, koristite vektorizovane funkcije umesto petlji za manipulaciju podacima.
- Ugnježdene petlje mogu biti spore u R. Umesto ugnježdenih petlji, pokušajte da koristite vektorizovane operacije ili primenite funkcije kao što su
lapply
ilisapply
.
- Veliki data frejmovi mogu zauzeti mnogo memorije. Razmislite o korišćenju paketa
data.table
ilidtplyr
, koji su efikasniji po pitanju memorije za veće skupove podataka.
- R ima širok spektar paketa za manipulaciju podacima. Koristite pakete kao što su
dplyr
,tidyr
idata.table
za efikasne transformacije podataka.
- Smanjite upotrebu globalnih promenljivih, posebno kada radite sa više data frejmova. Koristite funkcije i prosleđujte data frejmove kao argumente.
- Kada radite sa agregiranim podacima, koristite funkcije
group_by()
isummarise()
udplyr
-u da biste efikasno izvršili proračune.
- Za velike skupove podataka, razmislite o korišćenju paralelne obrade sa paketima kao što su
parallel
iliforeach
da biste ubrzali operacije.
- Kada učitavate podatke u R, koristite funkcije kao što su
readr
ilidata.table::fread
umesto osnovnih R funkcija kao što jeread.csv
za brži uvoz podataka.
- Za veoma velike skupove podataka, razmislite o korišćenju sistema baza podataka ili specijalizovanih formata za skladištenje kao što su Feather, Arrow ili Parquet.
Prateći ove najbolje prakse, možete efikasno raditi sa data frejmovima u R, čineći svoje zadatke manipulacije podacima i analize lakšim i bržim.
Zaključne misli
Kreiranje data frejmova u R je jednostavno, a na raspolaganju su vam različite metode. Naglasio sam važnost data frejmova i demonstrirao kako se kreiraju pomoću funkcije data.frame()
.
Pored toga, istražili smo metode za manipulaciju podacima i pokrili kako da