4. Cleaning & Transformation Part 1&2 (done) PDF

Title 4. Cleaning & Transformation Part 1&2 (done)
Author Gwendoline Nijssen
Course Exploratieve en Descriptieve Data Analyse
Institution Universiteit Hasselt
Pages 16
File Size 854.4 KB
File Type PDF
Total Downloads 215
Total Views 282

Summary

Cleaning Transformation The Data Science Process Tot nu toe maakten we altijd de assumptie dat onze data in perfecte staat is, en legde we de focus op visualisatie en descriptieve statistieken. Dit is jammer genoeg nooit het geval, data moet worden: getransformeerd en Data transformation and cleanin...


Description

Cleaning & Transformation (1/2) The Data Science Process

Tot nu toe maakten we altijd de assumptie dat onze data in perfecte staat is, en legde we de focus op visualisatie en descriptieve statistieken. Dit is jammer genoeg nooit het geval, data moet worden: - geïmporteerd - ‘getidied’ - getransformeerd en ‘gecleaned’

Data transformation and cleaning Cleaning: - Converting variables - Removing duplicates - Wrong entries - Check missing values - Reorder factors Transforming: - Recode categorical variables - Discretization of continuous variables - Rescale continuous variables - Add calculated variables Data selection

Converting variables Laat factors factors zijn en numerics numerics zijn. + Clean up names

Bv. Dataset gss_cat gss_cat %>% mutate(year = as.numeric(year), age = as.numeric(age), reported_income = as.factor(rincome), tv_hours = as.numeric(tvhours)) as.numeric() zorgt voor het omzetten van bijvoorbeeld een character (tekst) naar een numeric variable. as.factor() zorgt voor het omzetten van bijvoorbeeld een character naar een factor variable. ! tv_hours en reported_income zijn nieuwe categorieën van tvhours en rincome, om de oude versies te verwijderen gebruiken we volgende functie: select(-rincome: -tvhours) -> gss_cat

Removing duplicates Om te kijken of er duplicates in je data zitten, kan je de functie duplicated() gebruiken. Als er een duplicate is, geeft R de waarde ‘TRUE’ aan. Om duplicates te selecteren en te bekijken gebruiken we bv. volgende functie:

Als we specifieke rijen willen selecteren, gebruiken we het volgende:

De functie distinct haalt de duplicates uit de data. Als hij bijvoorbeeld een rij een tweede keer tegenkomt, haalt hij deze uit de dataset.

What to do with duplicates? Hangt af van de context! Als het onmogelijk is om twee dezelfde waarde te hebben (bv. rijksregisternummers), dan haal je ze eruit. Anders laat je ze gewoon in de data zitten.

Wrong entries Categorische data kan: - Foute labels hebben - Typefouten hebben in labels Continue data kan: - Individueel foute dingen ingegeven - Data die in een verkeerde scale staat (bv. 1 x in km terwijl rest in miles was)

→ Correcting categorical data Hiervoor gebruiken we de package forcats. Handige tip: gss_cat %>% count(variable) is een shortcut voor: gss_cat %>% group_by(variable) %>% summarize(n = n()) De functie fct_recode() verandert labels: fct_recode(factor_name,

“New level1” = “Old level1”,

“New level2” = “Old level2”) Bv.

Labels die niet in de functie fct_recode vermeld staan zullen niet veranderen. fct_recode kan ook gebruikt worden om foutieve (erroneous) levels te verbeteren.

→ → Numeric data De functie ifelse() geeft je de mogelijkheid om een conditie op te stellen. Als deze klopt, kan je dit een label geven, en als dit niet klopt, een ander. Bv. output % group_by(sex) %>% summarize(cnt = n()) %>% ggplot(aes(fct_reorder(sex, cnt), cnt)) + geom_col() data %>% ggplot(aes(fct_reorder(sex, age, .fun = median), age)) + geom_boxplot() Om te begrijpen waarom fct_reorder een functie nodig heeft of niet moet je eigenlijk kijken naar de vorm van de data waarmee ggplot werkt. Als x de variabele is die we willen sorteren (i.e. sex) en y de variabelen waarop we willen sorteren (i.e. cnt of age), dan geldt het volgende: - Als er voor elke unieke waarde van x één enkele waarde is van y, dan kunnen we hierop sorteren zonder extract functie. - Als er voor elke unieke waarde van x meerdere waarden zijn van y, dan moeten we hier een functie op toepassen alvorens te sorteren. In voorbeeld 1:

data %>% group_by(sex) %>% summarize(cnt = n()) # A tibble: 2 x 2 sex cnt 1F 9 2M 6

In voorbeeld 2: > data # A tibble: 15 x 3 # Groups: sex [2] name sex age 1 Eda F 14. 2 Pinkie F 81. 3 Julanne F 69. 4 Chaslyn F 12. 5 Pearlena F 66. 6 Charisa F 39. 7 Nikol F 3. 8 Alesa F 15. 9 Daviya F 6. 10 Laquon M 27. 11 Keagan M 30. 12 Kregg M 52. 13 Maxim M 11. 14 Jonny M 60. 15 Denarius M 21.

In voorbeeld 1 zeggen we in fct_reoder dat we sex willen sorteren op cnt. Aangezien in de data op dat moment elk geslacht 1 keer voorkomt, heeft elk geslacht één enkele cnt-waarde, en kunnen we hier zonder extra functie op sorteren. In voorbeeld 2 zeggen we in fct_reorder dat we sex willen sorteren op age. Maar, in deze data komt F en M meerdere keren voor met verschillende leeftijden, aangezien deze data niet samengevat is (en boxplot de data ook zo verwacht). Dat wil zeggen dat we een functie moeten opgeven die per geslacht wordt toegepast op de leeftijd. Bijvoorbeeld mediaan: fct_reorder zal dan alle leeftijden van F en M apart nemen, op beide de mediaan berekenen, en die twee getallen gebruiken op F en M te sorteren.

Transforming Recode/transform categorical variables Nadat we de factors hebben ‘gecleaned’, willen we deze transformeren. Ze zijn vaak te gedetailleerd voor een goede analyse. Daarom moeten we het aantal levels verkleinen.

Uit de package forcats: fct_lump: kan gebruikt worden om infrequente factor levels in één ‘bin level’ te gooien, bv. “Others”. fct_collapse: kan gebruikt worden om verschillende levels samen te groeperen in nieuwe levels (bv. wanneer er te veel zijn) Bv.

fct_lump gebruikt een heuristiek om te beslissen hoe ver het moet gaan. - fct_lump gaat verder zo lang dat de ‘bin’ die hij maakt kleiner is dan het kleinste overblijvende level Je kan ook aangeven hoeveel levels (inclusief de nieuwe bin) er moeten zijn, door n = aantal gewenste levels aan te geven. Bv.

Het is ook mogelijk om de bin in te stellen op bv. de kleinste factor levels samen te gooien tot ze een bepaalde proportie van de data weergeven. (Hier bv. 1%)

Je kan ook altijd de naam van de bin-label veranderen. Bv.

Een andere handige functie is fct_collapse(). Deze kan zoals fct_recode bepaalde groepen bij elkaar gooien maar veel specifieker.

Bv.

Discretization Soms is het makkelijker om met een categorische variabele te werken dan met een continue variabele. Bv. Als je de relatie tussen twee continue variabelen wilt vergelijken met een derde variabele → Wanneer je een derde variabele categorisch maakt, kan je een faceted scatterplot maken.

→ Functies die helpen bij discretization: cut(): Deze functie kan je gebruiken binnen bv. mutate(), waarbij je de breakpoints van de levels van de nieuwe variabele ingeeft. Bv.

cut_width(): Deze functie is een short cut voor een equal-width categorization, gebaseerd op de intervalgrootte. Bv.

cut_interval(): Deze functie is een short cut voor equal-width categorization, gebaseerd op het aantal bins. Bv.

cut_number(): Deze functie is een short cut voor equal-frequency categorization Bv.

cut_width, cut_number en cut_interval zijn ‘wrappers’ voor cut, dus je kan ook de argumenten gerelateerd aan cut gebruiken, bv. custom labels

Rescale continuous variables Door middel van de functie mutate() is het makkelijk om variabelen te rescalen. Bv. Variabele tv_hours geeft weer hoeveel uur mensen tv kijken per dag. We willen weten hoeveel procent van de dag mensen tv kijken dus doen we het volgende:

Add calculated variables Ook hier kan de functie mutate() handig zijn om nieuwe berekende variabelen toe te voegen. Bv.

Intermezzo: Discretization with ggplot2 We moeten de discretized continuous variables niet altijd in de dataset verwerken en deze dusdanig aanpassen. → We kunnen het ook impliciet doen via ggplot2 Bv. De cut_number functie in de functie facet_wrap binnen ggplot gebruiken om meer overzicht te krijgen:

Een ander voorbeeld met cut_number:

Het is ook aangeraden

om de labels te veranderen om dingen wat overzichtelijker te maken. Door discretizeren van één of meer variabelen, kunnen we ook gebruik maken van andere visualisatie methoden.

Data Selection We kunnen observaties op verschillende manieren selecteren: - filter(condition) - slice(x:y) - distinct() → remove duplicate rows - sample_frac() → neem een ‘sample’ door te zeggen welke fractie van een rij je wilt (bv. 0.5 for half te data set) - sample_n() → neem een ‘sample’ door de sample size in te geven - top_n(n,x) → selecteer rijen, gerelateerd aan de top n waarden Combinaties van group_by() en sample_fraq/n kunnen gebruikt worden voor strategisch samplen. We kunnen variabelen selecteren op verschillende manieren: ● select(x, y) ● select(-x, y) ● select(x:y) ● select(starts_with(“text”)) ● select(ends_with(“text”)) Er is ook een functie, transmute(), die een combinatie is van mutate en select. Deze functie behoudt enkel de nieuwe variabelen en verwijderd al de originele....


Similar Free PDFs