Enhetlighet

Datarensning i R

Maggie Matsui

Content Developer @ DataCamp

Enhetlighet

  • Olika enheter eller format
    • Temperatur: °C vs. °F
    • Vikt: kg vs. g vs. lb
    • Valuta: USD $ vs. GBP £ vs. JPY ¥
    • Datum: DD-MM-YYYY vs. MM-DD-YYYY vs. YYYY-MM-DD
Datarensning i R

Varifrån kommer enhetlighetsproblem?

Till vänster tre databaser med pilar som pekar mot en datatabell för att representera flera datakällor. Till höger en fritextruta med en markör och en dator med tangentbord för att representera datainmatningsfel.

Datarensning i R

Hitta enhetlighetsproblem

head(nyc_temps)
         date temp
1  2019-04-01  4.2
2  2019-04-02  7.5
3  2019-04-03 12.2
4  2019-04-04 11.1
5  2019-04-05 41.5
6  2019-04-06 11.9
Datarensning i R

Hitta enhetlighetsproblem

library(ggplot2)
ggplot(nyc_temps, aes(x = date, y = temp)) +
  geom_point()

Graf genererad av kod. Tre temperaturvärden är tydligt mycket högre än övriga.

Datarensning i R

Vad ska man göra?

  • Det finns inget universellt rätt svar. Det beror på din datamängd!
  • Undersök varifrån dina data kommer

Graf genererad av kod. Tre temperaturvärden är tydligt mycket högre än övriga.

  • Data från 7, 16 och 23 april kommer från en extern källa som mätte temperaturer i °F
Datarensning i R

Enhetskonvertering

$$\text{C} = (\text{F} - 32) \times \frac{5}{9}$$

ifelse(condition, value_if_true, value_if_false)

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp))
         date temp   temp_c
1  2019-04-01  4.2  4.20000
...
7  2019-04-07 58.5 14.72222
...
Datarensning i R

Enhetskonvertering

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp)) %>%
  ggplot(aes(x = date, y = temp_c)) +
    geom_point()

Graf genererad av kod, men nu utan tydliga avvikare eftersom de har konverterats.

Datarensning i R

Datumenhetlighet

nyc_temps
             date temp_c
1      2019-11-23   5.12
2        01/15/19  -0.67
3  April 24, 2019  17.46
4        08/30/19  26.46
5 October 3, 2019  14.63
6      2019-03-17   3.47

 

Datumsträng Date-format
"2019-11-23" "%Y-%m-%d"
"01/15/19" "%m/%d/%y"
"April 24, 2019" "%B %d, %Y"

 

?strptime i R-konsolen

Datarensning i R

Tolka flera format

library(lubridate)
parse_date_time(nyc_temps$date,
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
"2019-11-23 UTC" "2019-01-15 UTC" "2019-04-24 UTC" "2019-08-30 UTC"
"2019-10-03 UTC" "2019-03-17 UTC"
parse_date_time("Monday, January 3",
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
NA
Datarensning i R

Tvetydiga datum

Är 02/04/2019 i februari eller april?

  • Det beror på dina data!

 

Möjliga alternativ:

  • Behandla som saknat värde
  • Om data kommer från flera källor, härleda baserat på källa
  • Härleda baserat på övrig data i datamängden
Datarensning i R

Nu kör vi en övning!

Datarensning i R

Preparing Video For Download...