Čistenie údajov

Predpokladajme, že v názvoch stĺpcov v pôvodnom súbore máme medzery, teda Náhľad na xls databázu otvorenú v tabuľkovom procesore

Tu sa v názvoch stĺpcov vyskytujú medzery. Názvy stĺpcov sa v prostredí R stávajú názvami premenných a tie nesmú byť súčasťou názvu premennej. Neprípustné znaky v názvoch premenných vo všeobecnosti môžeme nahradiť s pomocou knižnice janitor.

# install if not already
#install.packages("janitor")

udaje1 <- read.csv2("udaje/Dataset ESG and Firm Performance.csv")

library(janitor)

# Before
colnames(udaje1)  # rovnako funguje aj colnames(udaje) - medzery su automaticky nahradene bodkami
 [1] "YEARS"                          "COMPANIES"                      "EXCHANGE.SECTOR"               
 [4] "PRIMARY.BUSINESS"               "TOBIN.Q"                        "MARKET.CAPITALIZATION"         
 [7] "RETURN.ON.ASSETS"               "DEBT.TO.ASSET"                  "FIRM.SIZE"                     
[10] "SOCIAL.DISCLOSURE.INDEX"        "ENVIRONMENTAL.DISCLOSURE.INDEX" "GOVERNANCE.DISCLOSURE.INDEX"   
[13] "ESG.INDEX"                     
# Clean names
udaje1 <- clean_names(udaje1)

# After
colnames(udaje1)   # bodky su nahradzovane standardnejsim vyjadrenim - znamienkom podtrhnutia
 [1] "years"                          "companies"                      "exchange_sector"               
 [4] "primary_business"               "tobin_q"                        "market_capitalization"         
 [7] "return_on_assets"               "debt_to_asset"                  "firm_size"                     
[10] "social_disclosure_index"        "environmental_disclosure_index" "governance_disclosure_index"   
[13] "esg_index"                     
# dlhe nazvy vieme skratit prikazmi z kniznice dplyr
# je tu mozne robit mnoho dalsich uprav v nazvoch premennych
#  m y   t o   n e b u d e m e   p o u z i v a t

library(dplyr)

udajedplyr <- udaje1 %>%
  rename_with(~ abbreviate(.x,  strict = FALSE))  # e.g., "return_on_assets" -> "ret_on_ass"
# ensure uniqueness just in case:
names(udajedplyr) <- make.unique(names(udaje1))
names(udajedplyr)
 [1] "years"                          "companies"                      "exchange_sector"               
 [4] "primary_business"               "tobin_q"                        "market_capitalization"         
 [7] "return_on_assets"               "debt_to_asset"                  "firm_size"                     
[10] "social_disclosure_index"        "environmental_disclosure_index" "governance_disclosure_index"   
[13] "esg_index"                     
rm(udajedplyr)
rm(udaje1)

Počiatočné čistenie obsahu databázy, imputácia chýbahúcich údajov

Odporúčam tu použiť knižnice VIM, Amelia, mice a iné. Pokiaľ máme databázu dostatočne nekonzistentnú a nevieme ju upraviť vynechaním niekoľkých riadkov / stĺpcov, potom odporúčame blog M. Fatih Tüzen: Handling Missing Data in R: A Comprehensive Guide, R bloggers.

Naša databáza s chýbajúcimi údajmi vyzerá asi nasledovne

Databáza s chýbajúcimi údajmi
Databáza s chýbajúcimi údajmi
library(mice)
library(VIM)

chybne_udaje <- read.csv2("udaje/ChybnaDatabaza.csv")

# pattern of missingness
md.pattern(chybne_udaje)
    COMPANIES EXCHANGE.SECTOR PRIMARY.BUSINESS TOBIN.Q MARKET.CAPITALIZATION RETURN.ON.ASSETS DEBT.TO.ASSET FIRM.SIZE
759         1               1                1       1                     1                1             1         1
1           1               1                1       1                     1                1             1         1
            0               0                0       0                     0                0             0         0
    SOCIAL.DISCLOSURE.INDEX ENVIRONMENTAL.DISCLOSURE.INDEX GOVERNANCE.DISCLOSURE.INDEX ESG.INDEX YEARS  
759                       1                              1                           1         1     1 0
1                         1                              1                           1         1     0 1
                          0                              0                           0         0     1 1

# visualize missing data
aggr(chybne_udaje, bars=FALSE,col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE)  # cervena farba signalizuje chybahuce polozky

 Variables sorted by number of missings: 

# multiple imputation - v pripade, ak vam chyba mensi rozsah udajov
imp <- mice(chybne_udaje, seed=123)   # konkretne parametre imputacie vieme nastavovat - pozri help

 iter imp variable
  1   1  YEARS
  1   2  YEARS
  1   3  YEARS
  1   4  YEARS
  1   5  YEARS
  2   1  YEARS
  2   2  YEARS
  2   3  YEARS
  2   4  YEARS
  2   5  YEARS
  3   1  YEARS
  3   2  YEARS
  3   3  YEARS
  3   4  YEARS
  3   5  YEARS
  4   1  YEARS
  4   2  YEARS
  4   3  YEARS
  4   4  YEARS
  4   5  YEARS
  5   1  YEARS
  5   2  YEARS
  5   3  YEARS
  5   4  YEARS
  5   5  YEARS
udaje_imputovane <- complete(imp, 1)
head(udaje_imputovane)
rm(imp)
rm(udaje_imputovane)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjIMSMaXN0ZW5pZSDDumRham92CgpQcmVkcG9rbGFkYWptZSwgxb5lIHYgbsOhenZvY2ggc3TEunBjb3YgdiBww7R2b2Rub20gc8O6Ym9yZSBtw6FtZSBtZWR6ZXJ5LCB0ZWRhCiFbTsOhaMS+YWQgbmEgeGxzIGRhdGFiw6F6dSBvdHZvcmVuw7ogdiB0YWJ1xL5rb3ZvbSBwcm9jZXNvcmVdKG9icmF6a3kvQ2h5Ym5hX3hscy5qcGcpe3dpZHRoPTEwMCV9CgoKClR1IHNhIHYgbsOhenZvY2ggc3TEunBjb3Ygdnlza3l0dWrDuiBtZWR6ZXJ5LiBOw6F6dnkgc3TEunBjb3Ygc2EgdiBwcm9zdHJlZMOtIFIgc3TDoXZhasO6IG7DoXp2YW1pIHByZW1lbm7DvWNoIGEgdGllIG5lc23DuiBiecWlIHPDusSNYXPFpW91IG7DoXp2dSBwcmVtZW5uZWouIE5lcHLDrXB1c3Ruw6kgem5ha3kgdiBuw6F6dm9jaCBwcmVtZW5uw71jaCB2byB2xaFlb2JlY25vc3RpIG3DtMW+ZW1lIG5haHJhZGnFpSBzIHBvbW9jb3Uga25pxb5uaWNlIF9qYW5pdG9yXy4KCmBgYHtyfQojIGluc3RhbGwgaWYgbm90IGFscmVhZHkKI2luc3RhbGwucGFja2FnZXMoImphbml0b3IiKQoKdWRhamUxIDwtIHJlYWQuY3N2MigidWRhamUvRGF0YXNldCBFU0cgYW5kIEZpcm0gUGVyZm9ybWFuY2UuY3N2IikKCmxpYnJhcnkoamFuaXRvcikKCiMgQmVmb3JlCmNvbG5hbWVzKHVkYWplMSkgICMgcm92bmFrbyBmdW5ndWplIGFqIGNvbG5hbWVzKHVkYWplKSAtIG1lZHplcnkgc3UgYXV0b21hdGlja3kgbmFocmFkZW5lIGJvZGthbWkKCiMgQ2xlYW4gbmFtZXMKdWRhamUxIDwtIGNsZWFuX25hbWVzKHVkYWplMSkKCiMgQWZ0ZXIKY29sbmFtZXModWRhamUxKSAgICMgYm9ka3kgc3UgbmFocmFkem92YW5lIHN0YW5kYXJkbmVqc2ltIHZ5amFkcmVuaW0gLSB6bmFtaWVua29tIHBvZHRyaG51dGlhCgojIGRsaGUgbmF6dnkgdmllbWUgc2tyYXRpdCBwcmlrYXptaSB6IGtuaXpuaWNlIGRwbHlyCiMgamUgdHUgbW96bmUgcm9iaXQgbW5vaG8gZGFsc2ljaCB1cHJhdiB2IG5henZvY2ggcHJlbWVubnljaAojICBtIHkgICB0IG8gICBuIGUgYiB1IGQgZSBtIGUgICBwIG8gdSB6IGkgdiBhIHQKCmxpYnJhcnkoZHBseXIpCgp1ZGFqZWRwbHlyIDwtIHVkYWplMSAlPiUKICByZW5hbWVfd2l0aCh+IGFiYnJldmlhdGUoLngsICBzdHJpY3QgPSBGQUxTRSkpICAjIGUuZy4sICJyZXR1cm5fb25fYXNzZXRzIiAtPiAicmV0X29uX2FzcyIKIyBlbnN1cmUgdW5pcXVlbmVzcyBqdXN0IGluIGNhc2U6Cm5hbWVzKHVkYWplZHBseXIpIDwtIG1ha2UudW5pcXVlKG5hbWVzKHVkYWplMSkpCm5hbWVzKHVkYWplZHBseXIpCnJtKHVkYWplZHBseXIpCnJtKHVkYWplMSkKCgpgYGAKCgoKIyMjIyBQb8SNaWF0b8SNbsOpIMSNaXN0ZW5pZSBvYnNhaHUgZGF0YWLDoXp5LCBpbXB1dMOhY2lhIGNow71iYWjDumNpY2ggw7pkYWpvdiAKCk9kcG9yw7rEjWFtIHR1IHBvdcW+acWlIGtuacW+bmljZSBWSU0sIEFtZWxpYSwgbWljZSBhIGluw6kuIFBva2lhxL4gbcOhbWUgZGF0YWLDoXp1IGRvc3RhdG/EjW5lIG5la29uemlzdGVudG7DuiBhIG5ldmllbWUganUgdXByYXZpxaUgdnluZWNoYW7DrW0gbmlla2/EvmvDvWNoIHJpYWRrb3YgLyBzdMS6cGNvdiwgcG90b20gb2Rwb3LDusSNYW1lIGJsb2cgW00uIEZhdGloIFTDvHplbjogSGFuZGxpbmcgTWlzc2luZyBEYXRhIGluIFI6IEEgQ29tcHJlaGVuc2l2ZSBHdWlkZSwgUiBibG9nZ2Vyc10oaHR0cHM6Ly93d3cuci1ibG9nZ2Vycy5jb20vMjAyNS8wOC9oYW5kbGluZy1taXNzaW5nLWRhdGEtaW4tci1hLWNvbXByZWhlbnNpdmUtZ3VpZGUvKS4KCk5hxaFhIGRhdGFiw6F6YSBzIGNow71iYWrDumNpbWkgw7pkYWptaSB2eXplcsOhIGFzaSBuYXNsZWRvdm5lCgohW0RhdGFiw6F6YSBzIGNow71iYWrDumNpbWkgw7pkYWptaV0ob2JyYXpreS9DaHlibmFfeGxzLmpwZyl7d2lkdGg9NjAlfQoKCmBgYHtyfQpsaWJyYXJ5KG1pY2UpCmxpYnJhcnkoVklNKQoKY2h5Ym5lX3VkYWplIDwtIHJlYWQuY3N2MigidWRhamUvQ2h5Ym5hRGF0YWJhemEuY3N2IikKCiMgcGF0dGVybiBvZiBtaXNzaW5nbmVzcwptZC5wYXR0ZXJuKGNoeWJuZV91ZGFqZSkKCiMgdmlzdWFsaXplIG1pc3NpbmcgZGF0YQphZ2dyKGNoeWJuZV91ZGFqZSwgYmFycz1GQUxTRSxjb2w9YygnbmF2eWJsdWUnLCdyZWQnKSwgbnVtYmVycz1UUlVFLCBzb3J0VmFycz1UUlVFKSAgIyBjZXJ2ZW5hIGZhcmJhIHNpZ25hbGl6dWplIGNoeWJhaHVjZSBwb2xvemt5CgojIG11bHRpcGxlIGltcHV0YXRpb24gLSB2IHByaXBhZGUsIGFrIHZhbSBjaHliYSBtZW5zaSByb3pzYWggdWRham92CmltcCA8LSBtaWNlKGNoeWJuZV91ZGFqZSwgc2VlZD0xMjMpICAgIyBrb25rcmV0bmUgcGFyYW1ldHJlIGltcHV0YWNpZSB2aWVtZSBuYXN0YXZvdmF0IC0gcG96cmkgaGVscAp1ZGFqZV9pbXB1dG92YW5lIDwtIGNvbXBsZXRlKGltcCwgMSkKaGVhZCh1ZGFqZV9pbXB1dG92YW5lKQpybShpbXApCnJtKHVkYWplX2ltcHV0b3ZhbmUpCgpgYGAKCgo=