Exploratory Data Analysis v R: Nástroje a tipy pre úspešnú analýzu
V tomto blogu vám ukážem, ako efektívne pristupovať k Exploratory Data Analysis (EDA) v R. Prevediem vás základnými funkciami, ako aj pokročilými knižnicami na analýzu dát, vizualizácie a automatizované reporty. Ak chcete získať lepší prehľad o svojich dátach a zefektívniť analýzu, tento blog je pre vás.
Úvod
V tomto blogu si prejdeme niekoľko knižníc v R, ktoré slúžia na základnú analýzu dát, zvanú tiež Exploratory Data Analysis (EDA). EDA je dôležitým krokom v každom dátovom projekte, pretože nám umožňuje lepšie pochopiť štruktúru, kvalitu a rozloženie dát ešte pred tým, ako s nimi začneme ďalej pracovať, modelovať alebo robiť predikcie. Na ukážku budeme používať dataset zo série blogov o cenách nehnuteľností. Prvú časť venovanú získavaniu týchto dát najdete tu.
Funkcie na základný prehľad
base R
Ak potrebujeme zistiť rozmery našich dát, môžeme použiť funkciu dim()
:
dim(data)
#> [1] 12488 16
Tá nám vráti počet riadkov a stĺpcov, v tomto prípade 12 488 riadkov a 16 stĺpcov.
Ak chceme vidieť aj náhľad a dátový typ stĺpcov, máme k dispozícii funkciu str()
:
str(data)
#> sf [12,488 × 16] (S3: sf/tbl_df/tbl/data.frame)
#> $ name_nsi : chr [1:12488] "Štúrovo" "Štúrovo" "Štúrovo" "Štúrovo" ...
#> $ price : int [1:12488] 107000 105000 82000 102000 95000 82000 74900 64900 83000 96500 ...
#> $ index : num [1:12488] 8.3 8.25 8.25 8.25 8.25 8.25 8.25 8.25 8.25 8.25 ...
#> $ environment : num [1:12488] 9.1 9.1 9.1 9.1 9.1 9.1 9.1 9.1 9.1 9.1 ...
#> $ quality_of_living: num [1:12488] 7.4 7.4 7.4 7.4 7.4 7.4 7.4 7.4 7.4 7.4 ...
#> $ safety : num [1:12488] 9.5 9.5 9.5 9.5 9.5 9.5 9.5 9.5 9.5 9.5 ...
#> $ transport : num [1:12488] 7 7 7 7 7 7 7 7 7 7 ...
#> $ services : num [1:12488] 9.3 9.3 9.3 9.3 9.3 9.3 9.3 9.3 9.3 9.3 ...
#> $ relax : num [1:12488] 7 7 7 7 7 7 7 7 7 7 ...
#> $ condition : chr [1:12488] "Partial reconstruction" "Complete reconstruction" "Partial reconstruction" "Complete reconstruction" ...
#> $ area : num [1:12488] 40 76 63 76.5 63 ...
#> $ provision : num [1:12488] 0 1 0 0 1 0 1 0 0 0 ...
#> $ certificate : chr [1:12488] NA "C" NA "none" ...
#> $ type : chr [1:12488] "1-room apartment" "3-room apartment" "2-room apartment" "3-room apartment" ...
#> $ rooms : num [1:12488] 1 3 2 3 2 2 2 2 2 3 ...
#> $ district : chr [1:12488] "Nové Zámky" "Nové Zámky" "Nové Zámky" "Nové Zámky" ...
#> - attr(*, "sf_column")= chr "geometry"
#> - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
#> ..- attr(*, "names")= chr [1:16] "name_nsi" "price" "index" "environment" ...
Tieto funkcie nám však nepovedia nič o rozložení dát, či a koľko máme chýbajúcich záznamov. Najzákladnejšia možnosť, ako získať popis premenných nášho dátového setu je funkcia summary()
:
summary(data)
#> name_nsi price index environment
#> Length:12488 Min. : 22997 Min. :3.300 Min. : 2.700
#> Class :character 1st Qu.: 99990 1st Qu.:7.513 1st Qu.: 7.474
#> Mode :character Median :135000 Median :8.020 Median : 7.817
#> Mean :149723 Mean :7.842 Mean : 7.888
#> 3rd Qu.:180000 3rd Qu.:8.344 3rd Qu.: 8.386
#> Max. :600000 Max. :9.500 Max. :10.000
#> NA's :2887 NA's :2921
#> quality_of_living safety transport services
#> Min. : 2.700 Min. : 2.000 Min. : 2.000 Min. : 2.000
#> 1st Qu.: 8.372 1st Qu.: 7.661 1st Qu.: 7.900 1st Qu.: 7.375
#> Median : 8.863 Median : 8.600 Median : 8.600 Median : 8.251
#> Mean : 8.743 Mean : 8.155 Mean : 8.355 Mean : 7.981
#> 3rd Qu.: 9.201 3rd Qu.: 9.488 3rd Qu.: 8.943 3rd Qu.: 8.800
#> Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
#> NA's :2921 NA's :2921 NA's :2921 NA's :2921
#> relax condition area provision
#> Min. :2.000 Length:12488 Min. : 3 Min. :0.000
#> 1st Qu.:4.867 Class :character 1st Qu.: 51 1st Qu.:0.000
#> Median :5.883 Mode :character Median : 63 Median :0.000
#> Mean :5.774 Mean : 63 Mean :0.163
#> 3rd Qu.:6.750 3rd Qu.: 74 3rd Qu.:0.000
#> Max. :9.500 Max. :238 Max. :1.000
#> NA's :2921
#> certificate type rooms district
#> Length:12488 Length:12488 Min. :1.000 Length:12488
#> Class :character Class :character 1st Qu.:2.000 Class :character
#> Mode :character Mode :character Median :2.000 Mode :character
#> Mean :2.407
#> 3rd Qu.:3.000
#> Max. :5.000
#>
Táto funkcia vracia niekoľko užitočných charakteristík ako minimálna hodnota, prvý a tretí kvartil, priemer, medián, maximálna hodnota a počet chýbajúcich hodnôt. Žiaľ, toto platí len pre kvantitatívne premenné. Pri textových je uvedený len počet riadkov. Rovnako nie je explicitne uvedený počet riadkov a stĺpcov. Všetky predchádzajúce funkcie majú však výhodu, že sú súčasťou základného R a netreba pre ne inštalovať žiadne knižnice. Ak sa však chceme dozvedieť o našich dátach viac, musíme hľadať iné možnosti. Buď to môžu byť vlastné nadefinované funkcie, ktoré si môžeme uložiť a používať v rôznych projektoch, alebo siahneme po externých knižniciach od iných autorov.
dplyr
|> glimpse()
data #> Rows: 12,488
#> Columns: 16
#> $ name_nsi <chr> "Štúrovo", "Štúrovo", "Štúrovo", "Štúrovo", "Štúrovo…
#> $ price <int> 107000, 105000, 82000, 102000, 95000, 82000, 74900, …
#> $ index <dbl> 8.30, 8.25, 8.25, 8.25, 8.25, 8.25, 8.25, 8.25, 8.25…
#> $ environment <dbl> 9.1, 9.1, 9.1, 9.1, 9.1, 9.1, 9.1, 9.1, 9.1, 9.1, 9.…
#> $ quality_of_living <dbl> 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.4, 7.…
#> $ safety <dbl> 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 9.5, 9.…
#> $ transport <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7…
#> $ services <dbl> 9.3, 9.3, 9.3, 9.3, 9.3, 9.3, 9.3, 9.3, 9.3, 9.3, 9.…
#> $ relax <dbl> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7…
#> $ condition <chr> "Partial reconstruction", "Complete reconstruction",…
#> $ area <dbl> 40.00, 76.00, 63.00, 76.50, 63.00, 63.45, 64.00, 57.…
#> $ provision <dbl> 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0…
#> $ certificate <chr> NA, "C", NA, "none", "none", NA, NA, "none", NA, NA,…
#> $ type <chr> "1-room apartment", "3-room apartment", "2-room apar…
#> $ rooms <dbl> 1, 3, 2, 3, 2, 2, 2, 2, 2, 3, 3, 2, 3, 2, 3, 3, 3, 2…
#> $ district <chr> "Nové Zámky", "Nové Zámky", "Nové Zámky", "Nové Zámk…
Dplyr je knižnica primárne určená na manipuláciu s dátami. Obsahuje však aj šikovnú funkciu glimpse()
, ktorá má veľmi podobný výstup ako str()
. Jej výhodou, okrem čitateľnejšieho formátu, je napr. to, že ak do nej zadáme parameter “0”, tak nám vráti štruktúru dát a typ stĺpcov avšak bez ich hodnôt. Toto môže byť výhodné, ak používame napr. chatbotov ako ChatGPT ale máme dôverné dáta.
|> glimpse(0)
data #> Rows: 12,488
#> Columns: 16
#> $ name_nsi <chr> …
#> $ price <int> …
#> $ index <dbl> …
#> $ environment <dbl> …
#> $ quality_of_living <dbl> …
#> $ safety <dbl> …
#> $ transport <dbl> …
#> $ services <dbl> …
#> $ relax <dbl> …
#> $ condition <chr> …
#> $ area <dbl> …
#> $ provision <dbl> …
#> $ certificate <chr> …
#> $ type <chr> …
#> $ rooms <dbl> …
#> $ district <chr> …
skimr
Jednou z mojich obľúbených knižních na EDA je skimr a najmä funkcia skim()
:
skim(data)
Name | data |
Number of rows | 12488 |
Number of columns | 16 |
_______________________ | |
Column type frequency: | |
character | 5 |
numeric | 11 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
name_nsi | 0 | 1.00 | 4 | 46 | 0 | 203 | 0 |
condition | 3 | 1.00 | 12 | 23 | 0 | 6 | 0 |
certificate | 7106 | 0.43 | 1 | 4 | 0 | 8 | 0 |
type | 0 | 1.00 | 6 | 24 | 0 | 7 | 0 |
district | 0 | 1.00 | 4 | 20 | 0 | 72 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
price | 0 | 1.00 | 149723.10 | 72018.19 | 22997.0 | 99990.00 | 1.35e+05 | 1.80e+05 | 600000.0 | ▇▆▁▁▁ |
index | 2887 | 0.77 | 7.84 | 0.81 | 3.3 | 7.51 | 8.02e+00 | 8.34e+00 | 9.5 | ▁▁▁▇▅ |
environment | 2921 | 0.77 | 7.89 | 0.77 | 2.7 | 7.47 | 7.82e+00 | 8.39e+00 | 10.0 | ▁▁▁▇▂ |
quality_of_living | 2921 | 0.77 | 8.74 | 0.70 | 2.7 | 8.37 | 8.86e+00 | 9.20e+00 | 10.0 | ▁▁▁▃▇ |
safety | 2921 | 0.77 | 8.15 | 1.75 | 2.0 | 7.66 | 8.60e+00 | 9.49e+00 | 10.0 | ▁▁▁▅▇ |
transport | 2921 | 0.77 | 8.35 | 1.17 | 2.0 | 7.90 | 8.60e+00 | 8.94e+00 | 10.0 | ▁▁▁▅▇ |
services | 2921 | 0.77 | 7.98 | 1.30 | 2.0 | 7.38 | 8.25e+00 | 8.80e+00 | 10.0 | ▁▁▂▇▇ |
relax | 2921 | 0.77 | 5.77 | 1.47 | 2.0 | 4.87 | 5.88e+00 | 6.75e+00 | 9.5 | ▂▆▇▇▁ |
area | 0 | 1.00 | 63.00 | 20.42 | 3.0 | 51.00 | 6.30e+01 | 7.40e+01 | 238.0 | ▃▇▁▁▁ |
provision | 0 | 1.00 | 0.16 | 0.37 | 0.0 | 0.00 | 0.00e+00 | 0.00e+00 | 1.0 | ▇▁▁▁▂ |
rooms | 0 | 1.00 | 2.41 | 0.85 | 1.0 | 2.00 | 2.00e+00 | 3.00e+00 | 5.0 | ▃▇▇▂▁ |
Táto funkcia vracia v tomto prípade tri prehladové tabuľky:
- Prvá je sumár s názvom objektu, počtom riadkov a stĺpcov, a z toho počet numerických a textových.
- Druhá obsahuje prehľad textových stĺpcov a ich vlastnosti, ako počet chýbajúcich záznamov, najmenší a najčastejší výskyt a počet unikátnych hodnôt. Tieto údaje sú dôležité, nielen kvôli “reasonability check” kontrole a prvotnému zhodnoteniu dátovej kvality, ale aj kvôli tomu, aby sme vedeli už dopredu plánovať stratégiu, ako pracovať s kardinalitou jednotlivých premenných.
- Posledná tabuľka nám dáva podobné hodnoty ako funkcia summary pre číselné stĺpce, avšak navyše dostávame aj štandardnú odchýlku a histogram s rozložením hodnôt.
Ak by sme mali aj iný typ hodnôt, napríklad dátum, mali by sme prehľad aj preň.
summarytools
Summarytools je knižnica, ktorá umožňuje skutočne detailnú EDA. Má množstvo funkcií, ktoré sa dajú rôzne prispôsobovať našim potrebám. Prejdeme si niekoľko z nich.
dfSummary
Funkcia dfSummary()
vytvorí súhrnnú tabuľku so štatistikami, frekvenciami a grafmi pre všetky premenné. Zobrazené informácie sú špecifické pre typ premennej (číselné premenné majú iné metriky ako napr. textové alebo dátumové).
print(dfSummary(data,
graph.col = TRUE,
graph.magnif = 0.75,
style = "grid",
plain.ascii = FALSE,
result = "asis",
valid.col = FALSE), method = 'render', table.classes = 'st-small')
Data Frame Summary
data
Dimensions: 12488 x 16Duplicates: 547
No | Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | name_nsi [character] |
|
|
0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | price [integer] |
|
2129 distinct values | 0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | index [numeric] |
|
118 distinct values | 2887 (23.1%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | environment [numeric] |
|
120 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | quality_of_living [numeric] |
|
112 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | safety [numeric] |
|
120 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | transport [numeric] |
|
135 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | services [numeric] |
|
142 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | relax [numeric] |
|
142 distinct values | 2921 (23.4%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | condition [character] |
|
|
3 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | area [numeric] |
|
2270 distinct values | 0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | provision [numeric] |
|
|
0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | certificate [character] |
|
|
7106 (56.9%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14 | type [character] |
|
|
0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15 | rooms [numeric] |
|
|
0 (0.0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | district [character] |
|
|
0 (0.0%) |
Generated by summarytools 1.0.1 (R version 4.4.1)
2024-11-25
descr
Funkcia descr()
vytvorí tabuľku s popisnou štatistikou.
print(descr(data,
headings = FALSE,
result = "asis",
plain.ascii = FALSE) , method = 'render', table.classes = 'st-small')
area | environment | index | price | provision | quality_of_ living |
relax | rooms | safety | services | transport | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mean | 63.00 | 7.89 | 7.84 | 149723.10 | 0.16 | 8.74 | 5.77 | 2.41 | 8.15 | 7.98 | 8.35 |
Std.Dev | 20.42 | 0.77 | 0.81 | 72018.19 | 0.37 | 0.70 | 1.47 | 0.85 | 1.75 | 1.30 | 1.17 |
Min | 3.00 | 2.70 | 3.30 | 22997.00 | 0.00 | 2.70 | 2.00 | 1.00 | 2.00 | 2.00 | 2.00 |
Q1 | 51.00 | 7.47 | 7.51 | 99990.00 | 0.00 | 8.37 | 4.87 | 2.00 | 7.66 | 7.38 | 7.90 |
Median | 63.00 | 7.82 | 8.02 | 135000.00 | 0.00 | 8.86 | 5.88 | 2.00 | 8.60 | 8.25 | 8.60 |
Q3 | 74.00 | 8.39 | 8.34 | 180000.00 | 0.00 | 9.20 | 6.75 | 3.00 | 9.49 | 8.80 | 8.94 |
Max | 238.00 | 10.00 | 9.50 | 600000.00 | 1.00 | 10.00 | 9.50 | 5.00 | 10.00 | 10.00 | 10.00 |
MAD | 16.31 | 0.63 | 0.58 | 58562.70 | 0.00 | 0.62 | 1.38 | 1.48 | 1.33 | 1.11 | 0.81 |
IQR | 23.00 | 0.91 | 0.83 | 80010.00 | 0.00 | 0.83 | 1.88 | 1.00 | 1.83 | 1.43 | 1.04 |
CV | 0.32 | 0.10 | 0.10 | 0.48 | 2.27 | 0.08 | 0.25 | 0.35 | 0.21 | 0.16 | 0.14 |
Skewness | 1.13 | -0.84 | -1.71 | 1.65 | 1.82 | -1.57 | -0.20 | 0.02 | -1.54 | -1.41 | -2.04 |
SE.Skewness | 0.02 | 0.03 | 0.02 | 0.02 | 0.02 | 0.03 | 0.03 | 0.02 | 0.03 | 0.03 | 0.03 |
Kurtosis | 5.33 | 3.13 | 5.07 | 4.54 | 1.33 | 4.89 | -0.13 | -0.43 | 2.18 | 2.96 | 7.60 |
N.Valid | 12488 | 9567 | 9601 | 12488 | 12488 | 9567 | 9567 | 12488 | 9567 | 9567 | 9567 |
Pct.Valid | 100.00 | 76.61 | 76.88 | 100.00 | 100.00 | 76.61 | 76.61 | 100.00 | 76.61 | 76.61 | 76.61 |
Generated by summarytools 1.0.1 (R version 4.4.1)
2024-11-25
freq
Funkcia freq()
vytvorí frekvenčnú tabuľku.
print(freq(data |> select(-name_nsi, -district),
plain.ascii = FALSE,
style = "rmarkdown",
result = "asis"), method = 'render', table.classes = 'st-small')
Frequencies
select(data, -name_nsi, -district)$condition
Type: CharacterValid | Total | ||||
---|---|---|---|---|---|
condition | Freq | % | % Cum. | % | % Cum. |
Complete reconstruction | 3773 | 30.22 | 30.22 | 30.21 | 30.21 |
Development project | 54 | 0.43 | 30.65 | 0.43 | 30.65 |
New building | 3057 | 24.49 | 55.14 | 24.48 | 55.12 |
Original condition | 1854 | 14.85 | 69.99 | 14.85 | 69.97 |
Partial reconstruction | 3439 | 27.55 | 97.53 | 27.54 | 97.51 |
Under construction | 308 | 2.47 | 100.00 | 2.47 | 99.98 |
<NA> | 3 | 0.024 | 100.00 | ||
Total | 12488 | 100.00 | 100.00 | 100.00 | 100.00 |
select(data, -name_nsi, -district)$provision
Type: NumericValid | Total | ||||
---|---|---|---|---|---|
provision | Freq | % | % Cum. | % | % Cum. |
0 | 10452 | 83.70 | 83.70 | 83.70 | 83.70 |
1 | 2036 | 16.30 | 100.00 | 16.30 | 100.00 |
<NA> | 0 | 0.00 | 100.00 | ||
Total | 12488 | 100.00 | 100.00 | 100.00 | 100.00 |
select(data, -name_nsi, -district)$certificate
Type: CharacterValid | Total | ||||
---|---|---|---|---|---|
certificate | Freq | % | % Cum. | % | % Cum. |
A | 1115 | 20.72 | 20.72 | 8.93 | 8.93 |
B | 884 | 16.43 | 37.14 | 7.08 | 16.01 |
C | 141 | 2.62 | 39.76 | 1.13 | 17.14 |
D | 20 | 0.37 | 40.13 | 0.16 | 17.30 |
E | 7 | 0.13 | 40.26 | 0.056 | 17.35 |
F | 2 | 0.037 | 40.30 | 0.016 | 17.37 |
G | 63 | 1.17 | 41.47 | 0.50 | 17.87 |
none | 3150 | 58.53 | 100.00 | 25.22 | 43.10 |
<NA> | 7106 | 56.90 | 100.00 | ||
Total | 12488 | 100.00 | 100.00 | 100.00 | 100.00 |
select(data, -name_nsi, -district)$type
Type: CharacterValid | Total | ||||
---|---|---|---|---|---|
type | Freq | % | % Cum. | % | % Cum. |
1-room apartment | 1565 | 12.53 | 12.53 | 12.53 | 12.53 |
2-room apartment | 4605 | 36.88 | 49.41 | 36.88 | 49.41 |
3-room apartment | 4960 | 39.72 | 89.13 | 39.72 | 89.13 |
4-room apartment | 921 | 7.38 | 96.50 | 7.38 | 96.50 |
5 or more room apartment | 55 | 0.44 | 96.94 | 0.44 | 96.94 |
Studio | 322 | 2.58 | 99.52 | 2.58 | 99.52 |
Two-room apartment | 60 | 0.48 | 100.00 | 0.48 | 100.00 |
<NA> | 0 | 0.00 | 100.00 | ||
Total | 12488 | 100.00 | 100.00 | 100.00 | 100.00 |
select(data, -name_nsi, -district)$rooms
Type: NumericValid | Total | ||||
---|---|---|---|---|---|
rooms | Freq | % | % Cum. | % | % Cum. |
1 | 1887 | 15.11 | 15.11 | 15.11 | 15.11 |
2 | 4665 | 37.36 | 52.47 | 37.36 | 52.47 |
3 | 4960 | 39.72 | 92.18 | 39.72 | 92.18 |
4 | 921 | 7.38 | 99.56 | 7.38 | 99.56 |
5 | 55 | 0.44 | 100.00 | 0.44 | 100.00 |
<NA> | 0 | 0.00 | 100.00 | ||
Total | 12488 | 100.00 | 100.00 | 100.00 | 100.00 |
Generated by summarytools 1.0.1 (R version 4.4.1)
2024-11-25
ctable
Funkcia ctable()
vytvorí krížovú tabuľku pre dvojice kategorických premenných.
print(ctable(x = data$condition,
y = data$certificate,
prop = "n",
totals = FALSE,
headings = FALSE,
result = "asis",
plain.ascii = FALSE), method = 'render', table.classes = 'st-small')
certificate | |||||||||
---|---|---|---|---|---|---|---|---|---|
condition | A | B | C | D | E | F | G | none | <NA> |
Complete reconstruction | 104 | 275 | 52 | 5 | 3 | 1 | 17 | 1044 | 2272 |
Development project | 29 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 22 |
New building | 767 | 242 | 8 | 0 | 0 | 0 | 0 | 391 | 1649 |
Original condition | 20 | 113 | 34 | 10 | 1 | 0 | 11 | 585 | 1080 |
Partial reconstruction | 48 | 245 | 46 | 5 | 3 | 1 | 35 | 1106 | 1950 |
Under construction | 147 | 8 | 0 | 0 | 0 | 0 | 0 | 20 | 133 |
<NA> | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 |
Generated by summarytools 1.0.1 (R version 4.4.1)
2024-11-25
stby
Ak potrebujeme analyzovať hodnoty v rámci skupín, môžeme použiť group_by()
z knižnice dplyr a následne niektorú z vyššie uvedených funkcií alebo funkciu stby()
.
print(stby(data,
INDICES = data$condition,
FUN = descr,
stats = "fivenum",
transpose = TRUE,
result = "asis",
plain.ascii = FALSE), method = 'render', table.classes = 'st-small')
Descriptive Statistics
data
Group: condition = Complete reconstructionN: 3773
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 16.00 | 50.00 | 64.00 | 73.42 | 200.00 |
environment | 2.70 | 7.47 | 7.82 | 8.39 | 10.00 |
index | 3.70 | 7.66 | 8.10 | 8.40 | 9.40 |
price | 27990.00 | 102950.00 | 134900.00 | 178000.00 | 599000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 2.70 | 8.54 | 8.93 | 9.30 | 10.00 |
relax | 2.00 | 5.05 | 6.29 | 6.80 | 9.40 |
rooms | 1.00 | 2.00 | 3.00 | 3.00 | 5.00 |
safety | 2.00 | 7.90 | 8.74 | 9.50 | 10.00 |
services | 2.00 | 7.50 | 8.49 | 8.95 | 10.00 |
transport | 2.00 | 7.90 | 8.60 | 8.94 | 10.00 |
N: 54
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 30.00 | 42.40 | 59.38 | 68.48 | 109.00 |
environment | 7.01 | 7.60 | 7.82 | 8.00 | 8.80 |
index | 5.40 | 7.50 | 7.50 | 8.20 | 9.10 |
price | 29000.00 | 145500.00 | 164904.00 | 194728.00 | 437000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 7.70 | 7.70 | 8.46 | 9.34 | 9.70 |
relax | 4.90 | 4.90 | 5.88 | 6.98 | 9.10 |
rooms | 1.00 | 2.00 | 2.00 | 3.00 | 4.00 |
safety | 6.70 | 8.28 | 8.70 | 9.49 | 10.00 |
services | 6.50 | 8.22 | 8.90 | 9.16 | 9.90 |
transport | 7.00 | 7.00 | 8.43 | 8.76 | 10.00 |
N: 3057
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 15.43 | 49.00 | 59.00 | 74.00 | 238.00 |
environment | 2.70 | 7.39 | 7.75 | 8.32 | 9.80 |
index | 3.30 | 7.00 | 7.66 | 8.21 | 9.50 |
price | 56900.00 | 132500.00 | 169900.00 | 222900.00 | 599000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 3.80 | 8.24 | 8.80 | 9.19 | 10.00 |
relax | 2.00 | 4.07 | 5.55 | 6.75 | 9.50 |
rooms | 1.00 | 2.00 | 2.00 | 3.00 | 5.00 |
safety | 2.00 | 6.80 | 8.19 | 9.20 | 10.00 |
services | 2.00 | 6.60 | 8.00 | 8.79 | 10.00 |
transport | 2.00 | 7.70 | 8.60 | 8.94 | 10.00 |
N: 1854
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 17.00 | 55.00 | 65.00 | 74.64 | 235.00 |
environment | 2.70 | 7.50 | 7.98 | 8.40 | 9.90 |
index | 3.70 | 7.65 | 8.03 | 8.34 | 9.20 |
price | 22997.00 | 85000.00 | 112700.00 | 149990.00 | 589000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 4.00 | 8.50 | 8.90 | 9.20 | 10.00 |
relax | 2.00 | 4.90 | 5.88 | 6.70 | 9.20 |
rooms | 1.00 | 2.00 | 3.00 | 3.00 | 5.00 |
safety | 2.00 | 7.81 | 8.60 | 9.50 | 10.00 |
services | 2.00 | 7.44 | 8.25 | 8.86 | 10.00 |
transport | 2.00 | 7.90 | 8.60 | 9.10 | 10.00 |
N: 3439
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 3.00 | 52.00 | 64.00 | 73.21 | 221.00 |
environment | 2.70 | 7.50 | 7.90 | 8.39 | 9.90 |
index | 3.30 | 7.60 | 8.02 | 8.34 | 9.40 |
price | 26500.00 | 89900.00 | 117500.00 | 153000.00 | 600000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 4.00 | 8.46 | 8.90 | 9.30 | 10.00 |
relax | 2.00 | 4.95 | 5.88 | 6.68 | 9.40 |
rooms | 1.00 | 2.00 | 3.00 | 3.00 | 5.00 |
safety | 2.00 | 7.81 | 8.60 | 9.30 | 10.00 |
services | 2.00 | 7.44 | 8.30 | 8.80 | 10.00 |
transport | 2.00 | 7.90 | 8.54 | 8.94 | 10.00 |
N: 308
Min | Q1 | Median | Q3 | Max | |
---|---|---|---|---|---|
area | 24.62 | 50.70 | 57.82 | 75.85 | 193.00 |
environment | 6.50 | 7.77 | 8.12 | 8.32 | 9.20 |
index | 4.00 | 7.00 | 7.21 | 7.60 | 9.00 |
price | 61120.00 | 139945.00 | 184950.00 | 264250.00 | 569000.00 |
provision | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 |
quality_of_living | 6.30 | 8.35 | 8.37 | 8.97 | 9.80 |
relax | 2.00 | 3.85 | 4.09 | 5.60 | 9.10 |
rooms | 1.00 | 2.00 | 2.00 | 3.00 | 4.00 |
safety | 2.67 | 6.94 | 7.26 | 7.92 | 10.00 |
services | 3.62 | 6.69 | 6.83 | 7.79 | 9.90 |
transport | 2.00 | 8.05 | 8.55 | 8.67 | 10.00 |
Generated by summarytools 1.0.1 (R version 4.4.1)
2024-11-25
Väčšinu uvedených funkcií je možné použit na celý dátový set alebo aj na jednotlivé premenné. Knižnica summarytable tiež obsahuje rôzne preddefinované skupiny štatistických funkcií ako napr. “common”, “fivenum” a iné. Možno ste si všimli, že napr výstup z dfSummary je trochu ťažšie čitateľný, lebo jednotlivé hodnoty/riadky nie sú zarovnané. Toto je problém len pri generovaní cez quarto. Ak použijeme funkciu stview()
, zobrazí sa vo “viewer” okne v Rstudiu oveľa čitateľnejší výstup.
dlookr
dlookr je knižnica určená pre komplexnú diagnostiku dát a ich prípravu. Obsahuje funkcie, ktoré vám pomôžu analyzovať kvalitu dát, identifikovať chýbajúce hodnoty, extrémne hodnoty (outliers) a štatistické anomálie. Je vhodná najmä pri príprave dát pre ďalšie analýzy alebo modelovanie. Teraz sa zameriame na funkcie pre potreby EDA, ale určite treba aspoň spomenúť napr.:
imputate_na()
, ktorá ponúka rôzne spôsoby nahradenia chýbajúcich hodnôt.imputate_outlier()
, ktorá nahradí extrémne hodnoty podľa zvoleného spôsobu.binning()
abinning_by()
, ktoré transformuje numerickú premennú na kategorickú tým, že vytvorí tzv. bins.
diagnose
Pomocou funkcie diagnose()
môžeme rýchlo zistiť problémy vo svojich dátach, ako sú chýbajúce hodnoty, nulové hodnoty, unikátne hodnoty, či outliery.
diagnose(data)
#> # A tibble: 16 × 6
#> variables types missing_count missing_percent unique_count unique_rate
#> <chr> <chr> <int> <dbl> <int> <dbl>
#> 1 name_nsi char… 0 0 203 0.0163
#> 2 price inte… 0 0 2129 0.170
#> 3 index nume… 2887 23.1 122 0.00977
#> 4 environment nume… 2921 23.4 122 0.00977
#> 5 quality_of_livi… nume… 2921 23.4 114 0.00913
#> 6 safety nume… 2921 23.4 122 0.00977
#> 7 transport nume… 2921 23.4 137 0.0110
#> 8 services nume… 2921 23.4 143 0.0115
#> 9 relax nume… 2921 23.4 143 0.0115
#> 10 condition char… 3 0.0240 7 0.000561
#> 11 area nume… 0 0 2270 0.182
#> 12 provision nume… 0 0 2 0.000160
#> 13 certificate char… 7106 56.9 9 0.000721
#> 14 type char… 0 0 7 0.000561
#> 15 rooms nume… 0 0 5 0.000400
#> 16 district char… 0 0 72 0.00577
diagnose_numeric
Funkcia diagnose_numeric()
analyzuje numerické premenné. Používa sa rovnako ako diagnose()
, ale vracia viac informácií.
diagnose_numeric(data)
#> # A tibble: 11 × 10
#> variables min Q1 mean median Q3 max zero minus outlier
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <int> <int>
#> 1 price 2.30e4 1.00e5 1.50e+5 1.35e5 1.80e5 6 e5 0 0 456
#> 2 index 3.3 e0 7.51e0 7.84e+0 8.02e0 8.34e0 9.5 e0 0 0 415
#> 3 environment 2.7 e0 7.47e0 7.89e+0 7.82e0 8.39e0 1 e1 0 0 251
#> 4 quality_of_li… 2.7 e0 8.37e0 8.74e+0 8.86e0 9.20e0 1 e1 0 0 245
#> 5 safety 2 e0 7.66e0 8.15e+0 8.6 e0 9.49e0 1 e1 0 0 803
#> 6 transport 2 e0 7.9 e0 8.35e+0 8.6 e0 8.94e0 1 e1 0 0 410
#> 7 services 2 e0 7.38e0 7.98e+0 8.25e0 8.8 e0 1 e1 0 0 377
#> 8 relax 2 e0 4.87e0 5.77e+0 5.88e0 6.75e0 9.5 e0 0 0 75
#> 9 area 3 e0 5.1 e1 6.30e+1 6.3 e1 7.4 e1 2.38e2 0 0 309
#> 10 provision 0 0 1.63e-1 0 0 1 e0 10452 0 2036
#> 11 rooms 1 e0 2 e0 2.41e+0 2 e0 3 e0 5 e0 0 0 55
diagnose_category
Funkcia diagnose_category()
analyzuje kategorické premenné. Používa sa rovnako ako diagnose()
, ale vracia viac informácií. Argument “top” špecifikuje počet hodnôt (levelov), ktoré funkcia vráti pre každú premennú. Preddefinovaná je hodnota. Ak je počet levelov menší ako zadaná “top” hodnota, tak funkcia vráti všetky.
diagnose_category(data, top = 3)
#> # A tibble: 15 × 6
#> variables levels N freq ratio rank
#> <chr> <chr> <int> <int> <dbl> <int>
#> 1 name_nsi Bratislava - mestská časť Ružinov 12488 831 6.65 1
#> 2 name_nsi Bratislava - mestská časť Petržalka 12488 546 4.37 2
#> 3 name_nsi Bratislava - mestská časť Staré Mesto 12488 540 4.32 3
#> 4 condition Complete reconstruction 12488 3773 30.2 1
#> 5 condition Partial reconstruction 12488 3439 27.5 2
#> 6 condition New building 12488 3057 24.5 3
#> 7 certificate <NA> 12488 7106 56.9 1
#> 8 certificate none 12488 3150 25.2 2
#> 9 certificate A 12488 1115 8.93 3
#> 10 type 3-room apartment 12488 4960 39.7 1
#> 11 type 2-room apartment 12488 4605 36.9 2
#> 12 type 1-room apartment 12488 1565 12.5 3
#> 13 district Bratislava II 12488 1156 9.26 1
#> 14 district Bratislava IV 12488 660 5.29 2
#> 15 district Bratislava V 12488 564 4.52 3
diagnose_outlier
Outliery môžu mať významný vplyv na štatistické analýzy a modelovanie. Funkcia diagnose_outlier()
identifikuje extrémne hodnoty v dátach a zobrazí ich s prehľadom základných štatistík.
diagnose_outlier(data |> select(-rooms, -provision))
#> # A tibble: 9 × 6
#> variables outliers_cnt outliers_ratio outliers_mean with_mean without_mean
#> <chr> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 price 456 3.65 378694. 149723. 141045.
#> 2 index 415 3.32 5.30 7.84 7.96
#> 3 environment 251 2.01 5.57 7.89 7.95
#> 4 quality_of_l… 245 1.96 6.36 8.74 8.81
#> 5 safety 803 6.43 3.63 8.15 8.57
#> 6 transport 410 3.28 4.64 8.35 8.52
#> 7 services 377 3.02 3.96 7.98 8.15
#> 8 relax 75 0.601 2 5.77 5.80
#> 9 area 309 2.47 130. 63.0 61.3
Pomocou funkcie plot_outlier()
môžeme jednoducho vizualizovať rozloženie premenných s a bez identifikovaných odľahlých hodnôt.
|>
data plot_outlier(diagnose_outlier(data |> select(price, area)) |>
filter(outliers_ratio >= 0.5) |>
select(variables) |>
unlist())
describe
Funkcia describe()
je podobná funkcii summary()
, no poskytuje podrobnejšie informácie. Aplikuje sa len na numerické dáta. Výstup tejto funkcie obsahuje štatistiky, ako sú priemerné hodnoty, medián, rozptyl, rôzne precentily, miery šikmosti a špicatosti, čo je veľmi užitočné pri identifikácii potenciálnych anomálií alebo trendov v dátach.
describe(data |> select(-rooms, -provision))
#> # A tibble: 9 × 26
#> described_variables n na mean sd se_mean IQR skewness
#> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 price 12488 0 149723. 72018. 644. 8.00e+4 1.65
#> 2 index 9601 2887 7.84 0.812 0.00828 8.31e-1 -1.71
#> 3 environment 9567 2921 7.89 0.765 0.00782 9.12e-1 -0.845
#> 4 quality_of_living 9567 2921 8.74 0.703 0.00719 8.29e-1 -1.57
#> 5 safety 9567 2921 8.15 1.75 0.0179 1.83e+0 -1.55
#> 6 transport 9567 2921 8.35 1.17 0.0120 1.04e+0 -2.04
#> 7 services 9567 2921 7.98 1.30 0.0133 1.43e+0 -1.41
#> 8 relax 9567 2921 5.77 1.47 0.0150 1.88e+0 -0.201
#> 9 area 12488 0 63.0 20.4 0.183 2.3 e+1 1.13
#> # ℹ 18 more variables: kurtosis <dbl>, p00 <dbl>, p01 <dbl>, p05 <dbl>,
#> # p10 <dbl>, p20 <dbl>, p25 <dbl>, p30 <dbl>, p40 <dbl>, p50 <dbl>,
#> # p60 <dbl>, p70 <dbl>, p75 <dbl>, p80 <dbl>, p90 <dbl>, p95 <dbl>,
#> # p99 <dbl>, p100 <dbl>
normality
Funkcia normality()
aplikuje Shapiro-Wilk test
normality(data |> select(-rooms, -provision))
#> # A tibble: 9 × 4
#> vars statistic p_value sample
#> <chr> <dbl> <dbl> <dbl>
#> 1 price 0.885 1.62e-51 5000
#> 2 index 0.879 1.03e-47 5000
#> 3 environment 0.956 1.71e-32 5000
#> 4 quality_of_living 0.897 5.00e-45 5000
#> 5 safety 0.836 9.95e-53 5000
#> 6 transport 0.839 1.96e-52 5000
#> 7 services 0.897 4.68e-45 5000
#> 8 relax 0.984 1.78e-20 5000
#> 9 area 0.928 6.07e-44 5000
Pomocou funkcie plot_normality()
môžeme jednoducho vizualizovať pôvodné rozloženie premenných a rozloženie po log a sqrt transformácii.
plot_normality(data |> select(safety, relax))
Funkcie na korelačnú analýzu
Korelácia je väzba (závislosť) medzi dvomi alebo viacerými znakmi v štatistickom súbore. Pokiaľ sa jedna z náhodných veličín mení, mení sa aj druhá a naopak. Pokiaľ sa medzi dvoma náhodnými procesmi identifikuje korelácia, je pravdepodobné, že na sebe závisia. Z korelácie náhodných procesov alebo náhodných veličín však nemožno usudzovať príčinný vzťah. Teda jeden z nich nemusí byť príčinou a druhý následkom.
corrplot
Corrplot je pravdepodobne najznámejšia knižnica na korelačnú analýzu v R. Veľmi jednoducho sa používa a poskytuje bohaté možnosti, keďže má asi 50 parametrov. Vo väčšine prípadov môžeme získať graf korelačnej matice iba s jedným riadkom kódu.
<- cor(data |> select(where(is.numeric)) |> select(-rooms, -provision) |> drop_na())
m
corrplot.mixed(m, order = 'AOE')
GGally
GGally je nadstavba nad ggplot2, ktorá umožňuje vytvárať párové grafy (pair plots), ktoré sú užitočné na identifikáciu vzťahov medzi rôznymi premennými. Zvlášť praktická je pri analýze veľkých datasetov s viacerými numerickými premennými.
ggpairs(data |> select(where(is.numeric)) |> select(-rooms, -provision) |> drop_na())
ggpairs(data |> select(price, index, area, type) |> filter(type %in% c("1-room apartment", "2-room apartment", "3-room apartment")) |> drop_na(),
::aes(colour = type)) ggplot2
PerformanceAnalytics
PerformanceAnalytics je knižnica zameraná na ekonometrickú analýzu výkonnosti a rizík, pričom sa často využíva najmä vo finančnom sektore. Obsahuje rôzne obsiahly balík nástrojov, okrem iného aj na vizualizáciu korelačných matíc. Funkcia chart.Correlation()
je veľmi užitočná na vizualizáciu korelácie v podobe párových grafov, ktoré zobrazujú nielen samotnú koreláciu, ale aj rozloženie hodnôt.
chart.Correlation(data |> select(where(is.numeric)) |> select(-rooms, -provision) |> drop_na(),
histogram = TRUE)
correlationfunnel
Correlationfunnel pomáha vizualizovať a analyzovať vzťahy medzi jednotlivými premennými a cieľovou premennou vo forme grafu. Numerické premenné sa konvertujú do kategórií (bins) a tie následne diskrétizuje pomocou procesu one-hot kódovania.
|>
data drop_na() |>
select(-name_nsi,
-district) |>
mutate(across(where(is.numeric), round, 2)) |>
binarize(n_bins = 5, thresh_infreq = 0.01, name_infreq = "OTHER", one_hot = TRUE) |>
correlate(`price__-Inf_96100`) |>
plot_correlation_funnel()
dlookr
Opäť sa vrátime aj ku knižnici dlookr a tentoraz k funkcii correlate()
, ktorá počíta korelačný koeficient medzi dvojicami číselných premenných.
|> select(where(is.numeric)) |> select(-rooms, -provision) |> drop_na() |> dlookr::correlate() |> mutate(coef_corr = round(coef_corr, 3))
data #> # A tibble: 72 × 3
#> var1 var2 coef_corr
#> <fct> <fct> <dbl>
#> 1 index price 0.116
#> 2 environment price -0.228
#> 3 quality_of_living price 0.193
#> 4 safety price 0.1
#> 5 transport price 0.176
#> 6 services price 0.178
#> 7 relax price 0.248
#> 8 area price 0.534
#> 9 price index 0.116
#> 10 environment index 0.125
#> # ℹ 62 more rows
Vizualizovať výsledky môžeme jednoducho pridaním plot()
.
|> select(where(is.numeric)) |> select(-rooms, -provision) |> drop_na() |> dlookr::correlate() |> plot() data
Funkcie na vytvorenie statických reportov
dlookr
Aj v tejto sekcii ponúka dlookr funkcie, ktoré vieme využiť.
Prvou je diagnose_paged_report()
, druhá je špecificky určená na EDA – diagnose_paged_report()
a tretia transformation_paged_report()
, ktorá obsahuje imputáciu chýbajúcich hodnôt a outlierov, transformácie rozdelenia a binning.
DataExplorer
DataExplorer je knižnica, ktorá umožnuje jednoducho vytvárať statické reporty s prehľadmi dát. Obsahuje funkcie na automatickú analýzu a vizualizáciu dát, čo môže byť užitočné pri vytváraní EDA reportov pre tím alebo klientov.
SmartEDA
SmartEDA je ďalšia knižnica určená na rýchlu a jednoduchú tvorbu reportov o dátach. Poskytuje rôzne funkcie na sumarizáciu dát a ich distribúcie a dokáže generovať automatické reporty vo forme PDF alebo HTML.
Funkcie na vytvorenie dynamických Shiny reportov
GWalkR
GWalkR poskytuje rozhranie na vizualizáciu dát v R prostredníctvom interaktívnych grafov a tabuliek. Pomocou tejto knižnice je možné vytvoriť dynamické analýzy s drag-and-drop funkciounalitou. Dizajnovo je inšpirovaná Tableau-om.
esquisse
Esquisse je nástroj na vizualizáciu dát s intuitívnym drag-and-drop rozhraním postavený na knižnici ggplot2. Používateľom umožňuje vytvárať grafy bez nutnosti písania kódu, čo je ideálne pre začiatočníkov. Navyše umožnuje kopírovať vygenerovaný kód a ďalej ho použiť v analýze.
explore
Explore poskytuje jednoduché rozhranie pre dynamickú analýzu dát pomocou Shiny. Používateľ môže interaktívne prechádzať a analyzovať jednotlivé premenné, preskúmať ich vzťah k cieľovej premennej, vytvoriť rozhodovací strom alebo vytvoriť plne automatizovaný prehľad všetkých premenných.
radiant
Radiant je komplexný nástroj na exploratívnu analýzu, ktorý umožňuje prístup k rôznym analytickým metódam prostredníctvom Shiny. Používateľ môže jednoducho analyzovať dáta, vytvárať grafy a exportovať výsledky v rôznych formátoch, ktoré sú vhodné na ďalšie spracovanie. Používateľ má možnosť pridat vlastný R kód. Primárne je táto knižnica zaneraná na analýzu biznisových dát a na podporu rozhodovania na ich základe.
Je to najkomplexnejší nástroj z nášho zoznamu.
Záver
Exploratory Data Analysis (EDA) je kľúčovou súčasťou každej dátovej analýzy, či už sa jedná o predikčný model, klasifikáciu, alebo len detailnejšie pochopenie dát. Dôkladná analýza dát nám umožňuje lepšie pochopiť vzťahy medzi premennými, odhaliť potenciálne problémy a chyby a rozhodnúť sa, ktoré údaje sú pre naše účely relevantné. EDA nám tiež pomáha určiť, aké kroky potrebujeme urobiť pre čistenie a prípravu dát na ďalšie analýzy alebo modelovanie. Bez správneho pochopenia našich dát, nemôžeme robiť informované rozhodnutia o tom, ktoré modely použiť, aké premenné zahrnúť a aké kroky sú potrebné na prípravu dát. EDA nám pomáha odhaliť nekonzistencie a anomálie, ktoré by mohli ovplyvniť kvalitu našich výsledkov. EDA nie je jednorazová aktivita – je to proces, ktorý sa opakuje počas celého dátového projektu.
V tomto blogu sme sa venovali rôznym prístupom a nástrojom, ktoré môžeme použiť na vykonanie EDA v R. Začali sme s jednoduchými základnými funkciami, ako sú dim()
, str()
a summary()
, ktoré sú užitočné pre rýchly prehľad o štruktúre a štatistike dát, a prešli sme na pokročilejšie knižnice ako dplyr, skimr, a summarytools, ktoré nám umožňujú získať detailné štatistiky, vizualizácie a reporty pre lepšie pochopenie dát.
Rôzne knižnice pre rôzne potreby
Každá z prezentovaných knižníc má svoje výhody a použitie závisí od našich potrieb a skúseností s R:
- base R poskytuje základné nástroje bez potreby inštalácie ďalších balíčkov, ideálne na rýchle prehliadnutie dát.
- dplyr a skimr ponúkajú efektívne možnosti na sumarizáciu dát s dôrazom na čitateľnosť a použiteľnosť.
- summarytools umožňuje detailnú analýzu s pekne štruktúrovanými výstupmi, ktoré sú vhodné pre prezentácie a reporty.
- DataExplorer a SmartEDA nám umožňujú automatizovať časť práce s EDA, čím šetríme čas pri vytváraní rozsiahlych reportov.
- corrplot, GGally, PerformanceAnalytics a correlationfunnel ponúkajú rôzne možnosti na analýzu vzťahov medzi premennými pomocou vizualizácií.
Využitie v praxi
Každý z týchto nástrojov sa môže hodiť v rôznych fázach projektu. Pri prvotnom skúmaní dát môžeme začať so základnými funkciami na zistenie rozmerov a štruktúry dát. Ako sa hlbšie ponárame do údajov, môžeme využiť knižnice ako skimr alebo summarytools pre podrobnejší prehľad, či už hľadáme anomálie, chýbajúce hodnoty, alebo outliery.
Korelačné analýzy pomocou knižníc ako corrplot alebo PerformanceAnalytics, nám pomáhajú porozumieť vzťahom medzi premennými, čo je veľmi užitočné pri identifikovaní dôležitých faktorov, ktoré by mohli ovplyvniť naše modely alebo výsledky analýzy.
Automatizované reporty pomocou DataExplorer alebo SmartEDA nám šetria veľa času, keď potrebujeme opakovane analyzovať rôzne dataset-y alebo pri zdieľaní informácií s kolegami či klientmi, ktorí nemusia byť oboznámení s R, ale ocenia prehľadné a čitateľné reporty.
Vizualizácie a interaktivita
Vizualizácia je neoddeliteľnou súčasťou EDA, a práve preto sme zahrnuli knižnice ako GGally, esquisse alebo PerformanceAnalytics, ktoré poskytujú rôzne možnosti od jednoduchých párových grafov až po sofistikované korelačné mapy. Interaktívne vizualizácie v Shiny aplikáciách umožňujú nielen lepšie pochopiť vzťahy v dátach, ale tiež prezentovať tieto informácie iným osobám v prehľadnej forme, čím zjednodušujú diskusie a rozhodovanie.
Aký prístup zvoliť?
Pre začiatočníkov je dôležité začať s jednoduchými funkciami a krok po kroku sa oboznamovať s nástrojmi, ktoré im R ponúka. Základné funkcie v R sú výborným začiatkom. Ak už máme určitý základ a chceme urobiť EDA efektívnejšie a podrobnejšie, knižnice ako dplyr, skimr, alebo summarytools ponúkajú výkonné a ľahko použiteľné nástroje. Ak pracujete s veľkými dataset-mi, môžete oceniť knižnice a automatizované nástroje, ktoré šetria čas a zvyšujú efektivitu. Ktorý z nástrojov teda zvoliť? Odpoveď je klasické “to záleží…”. A záleží to na mnohých faktoroch ako osobná preferencia, špecifickosť projektu, typ dát atď. Najlepšie je oboznámiť sa s tými nástrojmi, ktoré nám dávajú najväčší zmysel a následne ich zaradiť do “toolboxu”, ak sa osvedčili.
Leave a Reply