3. Het doel van dit college is
• Dat je om kunt gaan met messy data (DataCamp)
• Dat je begrip hebt van het ETL proces
• Dat je kennis hebt van verschillende type data acquisitie
• Dat je zelfstandig online data kunt ETL-en in R
4.
5. Messy data á la DataCamp
ETL (hfst 12 corporate performance mgt)
Loading data into R (hfst 2)
Er zat een API op een stokkie
6.
7. Messy data according to DataCamp
1. Column headers are values, not variable names
2. Multiple values are stored in one column
3. Variables are stored in both rows and columns
4. Multiple types of observational units are stored in the same table
5. A single observational unit is stored in multiple tables
12. Definities ETL
Extract
The process of pulling data from a source server or systems to an
intermediate format
Transform
Reconciles data type and format differences, resolves uniqueness
issues, and ansures conformity of data before the data is loaded into
the data warehouse, it can also contain repairing and cleansing data.
Load
Moves data from the staging area into the dimension** and fact tables**
** volgt in college over dwh
13. 3 methoden om gegevens op te halen
Batch ETL,
• Nadat productiesysteem consistent is
• Initiatie bij DWH
Online ETL,
• Vanuit productiesysteem contiue update naar DWH
Ad-hoc ETL,
Zodra de gebruiker om een rapport vraagt
14. Proces stappen ETL
Isoleren
Let op
• structuur data (zie verderop presentatie)
• Doorlooptijd (1 mB vs 10TB)
• Netwerkbelasting
• actualiteit
Prepareren
Reconciles data type and format differences, resolves uniqueness issues,
and ansures conformity of data before the data is loaded into the data
warehouse, it can also contain repairing and cleansing data.
Ook aggregeren en verrijken
Transformeren
Uniform maken volgens DWH (ook wel mappings klaar maken)
Laden
Inladen in DWH
15. OUT OF 380,000 RECORDS A SUBSET OF
~250,000 WAS SUITABLE FOR ANALYSIS
Data filtering and smart algorithms required for quality of data analysis.
0
50000
100000
150000
200000
250000
300000
350000
400000
450000
Total before
cleansing
Connection time
repair
Physicly impossible
charge sessions
Unknown data Double records Short time Double provider Net usable records
Causes of ~35% data removal per error type
16. EXAMPLE OF SHORT TIME ALGORITHM
SHORT TIME CHARGE SESSIONS FILTERED
Note: Our hypothesis is that loose cable connections and information transfer
issues cause this problem.
total charge sesion
Session 1
Session 2
Session 3
Session 4
Session 5
Session 6
Session 7
Session 8
Session 9
The crawling algorithm
checks on adjacent
short times.
The algorithm
influences the # charge
sessions as well, and
thus the mean session
duration.
Source: Charge infrastructure forecast database
17. WITH THE CHARGING DATA AS CENTRAL DATASET, THE
DATABASE IS CONTINUOUSLY EXPANDED, EXTENDED AND
ENRICHED AND SCRAPED
Data Extension
Data enrichment Data Scraping
Data Expansion
OCPI
18.
19. Let op bij https daar wordt R niet blij van dus oplossing
Extract
# Fail
read.csv("https://raw.github.com/sciruela/Happiness-Salaries/master/data.csv")
# Win
read.url <- function(url, ...){
tmpFile <- tempfile()
download.file(url, destfile = tmpFile, method = "curl")
url.data <- read.csv(tmpFile, ...)
return(url.data)
}
read.url("https://raw.github.com/sciruela/Happiness-Salaries/master/data.csv")
31. Twitter doorzoeken met API
#Create your own appication key at https://dev.twitter.com/apps
consumer_key = "EZRy5JzOH2QQmVAe9B4j2w";
consumer_secret = "OIDC4MdfZJ82nbwpZfoUO4WOLTYjoRhpHRAWj6JMec";
#Use basic auth
secret <- openssl::base64_encode(paste(consumer_key, consumer_secret, sep = ":"));
req <- httr::POST("https://api.twitter.com/oauth2/token",
httr::add_headers(
"Authorization" = paste("Basic", secret),
"Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8"
),
body = "grant_type=client_credentials"
);
#Extract the access token
token <- paste("Bearer", content(req)$access_token)
#Actual API call
url <-
"https://api.twitter.com/1.1/statuses/user_timeline.json?count=10&screen_name=Rbloggers"
req <- httr::GET(url, add_headers(Authorization = token))
json <- httr::content(req, as = "text")
tweets <- fromJSON(json)
substring(tweets$text, 1, 100)
32.
33. Of met een package
# Install and Activate Packages
install.packages("twitteR", "RCurl", "RJSONIO", "stringr")
library(twitteR)
library(RCurl)
library(RJSONIO)
library(stringr)
# Declare Twitter API Credentials
api_key <- "API KEY" # From dev.twitter.com
api_secret <- "API SECRET" # From dev.twitter.com
token <- "TOKEN" # From dev.twitter.com
token_secret <- "TOKEN SECRET" # From dev.twitter.com
# Create Twitter Connection
setup_twitter_oauth(api_key, api_secret, token, token_secret)
# Run Twitter Search. Format is searchTwitter("Search Terms", n=100, lang="en",
geocode="lat,lng", also accepts since and until).
tweets <- searchTwitter("Obamacare OR ACA OR 'Affordable Care Act' OR #ACA", n=100,
lang="en", since="2014-08-20")
# Transform tweets list into a data frame
tweets.df <- twListToDF(tweets)
# Use the searchTwitter function to only get tweets within 50 miles of Los Angeles
tweets_geolocated <- searchTwitter("Obamacare OR ACA OR 'Affordable Care Act' OR #ACA",
n=100, lang="en", geocode='34.04993,-118.24084,50mi', since="2014-08-20")
tweets_geoolocated.df <- twListToDF(tweets_geolocated)
34. Google doorzoeken met API
library(gtrendsR)
user <- "<Google account email>"
psw <- "<Google account password>"
gconnect(usr, psw)
lang_trend <- gtrends(c("data is", "data are"), res="week")
plot(lang_trend)
37. Opdracht presentatie college vrijdag
Doel:
Open data gebruiken voor analyses
Opdracht:
Onderzoek of het weer invloed heeft op het eten van ijsjes (en dit delen op
sociale media)
Stappen
1. Verplicht zoek een nieuwe groep die bestaat uit studenten van
verschillende opleidingen. We willen geen eenzijdige teams meer.
2. Registreer je voor een Twitter, Google en facebook API key
3. Download met R code de KNMI data
4. Zoek de frequentie van relevante ijsjes termen op diverse media
5. Maak relevante plots en een lopend verhaal over de relatie tussen het
weer ijsconsumptie
38. Loops een relevante ijsjes termen
Maak een lijst relevante termen
maak eerst alle code voor 1 term
Maak vervolgens een loop voor de collectie van termen (lapply)
Maak een dataframe waarin je in de loop steeds een rbind doet van
het resultaat aan een totaal dataframe waarover je de analyse doet
39. Typische Tentamenvragen
• Leg uit wat het verschil is tussen ELT en ELT? Welk effect op
rekencapaciteit heeft dit?
• Welke fases kent het ELT proces en wat gebeurt er in deze
fases?
• Geef 3 voorbeelden van messy data en leg uit hoe je met R deze
weer tidy kun maken.
• Leg uit wat een API is
• Waarom is JSON wel en geen gestructureerd file type?
Note:
- session 6 is zero Made inviisble
Merging short sessions into one session influences mean kWh per session and mean connection time per sesison since less sesions (of zero)