R programski jezik: Tidyverse – Dplyr

Tidyverse predstavlja kolekciju R biblioteka koje su namenjene pre svega za čišćenje, manipulaciju i vizualizaciju podataka.

Kolekcija sadrži biblioteke dplyr, tibble, tidyr, purrr, ggplot2, readr. U nastavku teksta fokus će biti na biblioteci Dplyr i funkcijama koje su u okviru nje.

r programiranje tidyverse dplyr

Dplyr biblioteka predstavlja gramatiku manipulacije podacima i pruža pomoć sa ciljem rešavanja najčešćih zadataka koji se odnose na manipulaciju u okviru nekog skupa podataka.

Autori koji stoje iza ove biblioteke su dobro poznati Hadley Wickham, Romain Francois, Lionel Henry, Kirill Mulle i tim koji stoji iza RStudio-a. Trenutna stabilna verzija je 0.7.6.

Na primerima u nastavku je korišćen set podataka koji je preuzet iz Google Analytics alata, konkretno iz demo naloga Google Mechandise Store koji je dostupan svim korisnicima za vežbu i trening.

Ovaj nalog predstavlja funkcionalan GA nalog  kome može da pristupi svaki Google korisnik i kroz njega ima mogućnost da analizira podatke ovog online biznisa. 

RStudio

Preporučujem da koristite popularni RStudio open source IDE (an integrated development environment) alat sa kojim ćete pisati kod kroz konzolu. RStudio podržava:

  • direktno izvršavanje koda,
  • debugging
  • vizualizaciju

Dplyr funkcije:

  1. mutate()
  2. select()
  3. filter()
  4. sumarize()
  5. arrange()
  6. group_by()

Najlakši način da instalirate ovu biblioteku je da instalirate ceo tidyverse paket. Instalacija je neophodna.

Za više informacija i načinu kako da pristupite Google Analytics API možete pročitati ovde.

Kroz ovaj kratak tutorijal na osnovu Google Mechandise Store seta podataka sa dplyr bibliotekom moći ćete da odgovorite na sledeća pitanja:

  • Koliki je procenat transakcija po korisniku?
  • Koliki je broj poseta i transakcija na desktop uređajima?
  • Koliki je broj poseta i transakcija na desktop uređajima samo preko organske pretrage?
  • Kolika je srednja vrednost poseta po kanalu?
  • Koliko iznosi srednja vrednost poseta i koliki je ukupan zbir transakcija po kanalima?
  • Koja je srednja vrednost transakcija i kolika je poseta po kanalu?
r programiranje r studio tidyverse dplyr
Screenshot: RStudio IDE

Dplyr setup

Nakon početnog setupa, sledi učitavanje fajla i osnovna provera seta podataka, njegovih dimenzija i imena svih kolona koje su u tabeli.

## Instalacija tidyverse paketa 
install.packages("tidyverse")

## Instalacija samo dplyr biblioteke
install.packages("dplyr")

## Neophodno učitavanje paketa
library(tidyverse)

## Učitavanje csv fajla (proverite radni direktorijum)
google_merch_store = read.csv("google_merch_store.csv", header = TRUE)

dim(google_merch_store)      # Dimenzije seta podataka 
head(google_merch_store)     # Prvih pet redova seta podataka 
glimpse(google_merch_store)  # Karakteristike seta podataka 
colnames(google_merch_store) # Imena varijabli/kolona 

Dplyr mutate() funkcija

Mutate() funkcija dodaje novu varijablu/kolonu koja je u funkciji već postojeće varijable/kolone. Novoj koloni možete dati novo ime.

Pitanje: Koliki je procenat transakcija po korisniku?

## Dodavanje nove varijable/kolone u ovom slucaju procenat transakcija po korisniku
df_google_merch_store <- google_merch_store %>%
     mutate(transactionsPerUsers = transactions / users)
 
df_google_merch_store

Dplyr select() funkcija

  • Selektovanje kolona

U primeru su selektovane dve kolone od ukupno sedam. Ovim se fokusira na željene varijable za analizu u okviru novog data frame-a.

## Selektovanje kolona
df_date_transactions <- google_merch_store %>%
   select(date, transactions)
 
df_date_transactions
  • Selektovanje određenih kolona

Takođe moguće je i selektovati kolone u zavisnosti gde se nalaze. U primeru sve kolone koje su između date i deviceCategory (uključujući i njih) biće selektovane kao i kolona transactions.

## Selektovanje određenih kolona
df_date_transactions <- google_merch_store %>% 
   select(date:deviceCategory, transactions)
 
df_date_transactions
  • Izbacivanje samo jedne kolone

Alternativni način je da se iz učitanog seta podataka izbaci jedna varijabla/kolona koja nije potrebna za analizu. U primeru je to varijabla users, koja nam u ovom trenutku nije potrebna.

## Izbacivanje samo jedne kolone
google_merch_store_cleaned <- google_merch_store %>%
   select(-users)
 
google_merch_store_cleaned
  • Izbacivanje više kolona

Moguće je i izbaciti više kolona odjednom. U primeru sve kolone između users i pageviews (uključujući i njih) biće izbačene.

## Izbacivanje više kolona
google_merch_store_cleaned <- google_merch_store %>%
   select(-(users:pageviews))
 
google_merch_store_cleaned
  • Selektovanje kolona na osnovu naziva

Ako želimo da selektujemo kolone koje imaju u nazivu transactions, uradićemo sledeće.

## Selektovanje kolona sa slovima kojima počinje
df_date_transactions <- google_merch_store %>%
   select(date, starts_with("transactions"))
 
df_date_transactions
  • Selektovanje kolona koje se završavaju sa npr. ons.
## Selektovanje na osnovu slova sa kojima se završava
df_date_transactions2 <- google_merch_store %>%
   select(date, ends_with("ons"))
 
df_date_transactions2

Takođe varijable/kolone mogu da se selektuju i na osnovu reči koje sadrže na primer transact.

## Selektovanje na osnovu dela reči
df_date_transactions3 <- google_merch_store %>%       
   select(date, contains("transact"))
 
df_date_transactions3
  • Selektovanje kolona na osnovu tipa podatka

Ako međutim želimo da selektujemo sve kolone koje su numeričke koristićemo select_if uradićemo sledeće.

## Selektovanje kolona na osnovu tipa 
df_date_transactions4 <- google_merch_store %>%
   select_if(is.numeric)

df_date_transactions4
  • Premeštanje kolona

Za slučaj da želimo da promenimo raspored kolona onda ćemo iskoristiti primer iz nastavka.

## Premeštanje kolona
df_date_transactions5 <- google_merch_store %>%
   select(transactions,date)
 
df_date_transactions5
  • Preimenovanje kolona
# Promena imena kolona
df_date_transactions6 <- google_merch_store %>%
   rename(purchase = transactions)
 
df_date_transactions6

Dplyr filter() funkcija

  • Filtriranje samo jedne varijable

Funkcija filter() filtrira redove gde je zadovoljen kriterijum.

Pitanje: Koliki je broj poseta i transakcija na desktop uređajima?

## Filtriranje samo jedne varijable/kolone
google_merch_store_desktop <- google_merch_store %>% 
   filter(deviceCategory == "desktop")
 
google_merch_store_desktop
  • Filtriranje dve varijable

Pitanje: Koliki je broj poseta i transakcija na desktop uređajima samo preko organske pretrage?

## Filtriranje dve varijable/kolone
google_merch_store_desktop_organic <- google_merch_store %>% 
   filter(deviceCategory == "desktop", channelGrouping == "Organic Search")
 
google_merch_store_desktop_organic

Dplyr summarize() funkcija

Funkcija summarize() uglavnom služi za grupisanje podataka od strane funkcije group_by.

Pitanje: Kolika je srednja vrednost poseta po kanalima?

## Srednje vrednosti poseta po kanalima
google_merch_store_mean <- google_merch_store %>%
   group_by(channelGrouping) %>%
   summarize(mean_sessions = mean(sessions))

google_merch_store_mean

Pitanje: Koliko iznosi srednja vrednost poseta i koliki je ukupan zbir transakcija po kanalima?

## Sumiranje srednje vrednost svih poseta (sessions) i sabiranje transakcija po kanalima (channelGrouping)
google_merch_store_mean_total <- google_merch_store %>%  
   group_by(channelGrouping) %>%
   summarize(mean_sessions = mean(sessions),
             totalTransactions = sum(transactions))
 
google_merch_store_mean_total

Dplyr arrange() funkcija

Funkcija arrange() sortira varijablu/kolonu u opadajućem nizu.

## Sortiranje po transakcijama, od najveće ka najmanje
google_merch_store_sort <- google_merch_store %>%
   arrange(desc(transactions))
 
google_merch_store_sort

Dplyr group_by() funkcija

Funkcija group_by grupiše podatke na osnovu varijable/kolone.

Pitanje: Koja je srednja vrednost transakcija i kolika je poseta po kanalu?

## Grupisanje po kategoriji uređaja i sumiranje srednje vrednosti transakcija i ukupnog broja poseta po uređaju
merch_store_device <- google_merch_store %>%
   group_by(deviceCategory) %>%
   summarize(meanTransactions = mean(transactions),
             totalSessions = sum(sessions))
 
 
merch_store_device

Zaključak

Nadam se da vam je ovaj tutorijal pomogao da naučite kako da izvršite dplyr funkcije za manipulaciju podataka u R programskom jeziku.

Obuhvaćeno je pet funkcija koje su se u nekim slučajevima koristile u kombinaciji tj. vezane lancem (pipe %>%) iz magrittr biblioteke.

Fokus ovog tutorijala je bila vežba na praktičnim primerima na setu podataka iz Google Analytics alata. Promenom koda tj dataframea mogu odmah prilagoditi i primeniti na vaš set podataka.

Ako želite da detaljnije pregledate dokumentaciju dplyr paketa, predlažem da pogledate zvaničan pdf sa CRAN-a koji se nalazi na ovom linku.

Srećno vežbanje i analiziranje!

O autoru

Dušan Milošević

Curious digital analyst passionate about analytics, funk/disco music and new travel destinations. Always chasing the spark and searching for signal in the noise, combining technical know-how with digital marketing looking for actionable insights.
Proactive thinker, with the ability to adapt and learn quickly. Collaborative, with cross-functional team experience working with product, development and client-side teams.