Hãy suy nghĩ về tất cả những gì bạn nói, nhưng đừng nói tất cả những gì bạn nghĩ

1 Mở đầu

Thông thường khi làm việc với dữ liệu mới ta thường mất khá nhiều thời gian để hiểu dữ liệu. Hầu hết những lần đó thường lặp đi lặp lại những câu lệnh quen thuộc, nhưng chưa tối ưu được, làm chúng ta mất rất nhiều thời gian.

Package inspectdf không phải là package duy nhất làm việc này, nhưng tôi thấy package này thiết kế hay nhất, gọn gàng, sạch sẽ, có tư duy

Một số package khác cũng hay như: DataExplorer, nhưng đồ thị chưa được thông minh, đầu ra vẫn còn quá đơn giản.

Thôi không phải nói nhiều, lần sau đọc lại lại đéo muốn đọc

2 Cài đặt package inspectdf

  • Từ nguồn github install_github(“alastairrushworth/inspectdf”)
  • load thêm gói dplyr quen thuộc
library(devtools)
# install_github("alastairrushworth/inspectdf")
library(inspectdf)
## Registered S3 methods overwritten by 'ggplot2':
##   method         from 
##   [.quosures     rlang
##   c.quosures     rlang
##   print.quosures rlang
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)

3 Áp dụng với data(starwars)

  • Sử dụng data(starwars)
  • Chạy những câu lệnh cơ bản như names, head, str
data(starwars)

? sử dụng str(), dữ liệu mà có list thì chả nhìn được khỉ gì cả,

? sử dụng glimpse tốt hơn str() 1 tí, nhưng vẫn khó nhìn

\(\Rightarrow\) đơn giản dùng inspect_types

starwars %>% inspect_types()

type1 <- starwars %>% inspect_types()

type1
## # A tibble: 4 x 4
##   type        cnt  pcnt col_name 
##   <chr>     <int> <dbl> <list>   
## 1 character     7 53.8  <chr [7]>
## 2 list          3 23.1  <chr [3]>
## 3 numeric       2 15.4  <chr [2]>
## 4 integer       1  7.69 <chr [1]>

!!! ngon không

muốn xem chi tiết từng cột thuộc loại gì thì đơn giản lấy object col_name ra thôi type1$col_name

star_cat <- starwars %>% inspect_cat() 

Lệnh này ra nhiều thứ ngon nghẻ phết đầu tiên

  • cnt: số lượng levels của từng biến
  • common: level có tần suất (freq) lớn nhất
  • common_pcnt: % của level đó thôi
  • levels: Lấy ra tất cả các levels của các biến

!!!! Ngon vãi

Note: lệnh inspect_cat() áp dụng cho cả biến loại character, logic và factor

Ví dụ đọc kết quả: biến eye_color: có 15 levels, level có tần suất lớn nhất là brown, tỷ lệ là 24% (chi tiết các levels nằm trong star_cat\(levels\)eye_color)

Giờ mà dùng hàm tables() chắc phát khóc

  • Phần hay nhất đây
star_cat %>% show_plot()

Thế này mới ngon chứ lị

Note: Missing value màu gray: rõ ràng chưa

Nhìn vào graph trên chúng ta thấy có nhất nhiều levels có freq rất thấp, có thể chỉ có 1 hoặc 2 quan sát. Để kiểm tra xem có thằng nào như vậy không ta set argument băng giá trị 1 hoặc 2 thôi

star_cat %>% show_plot(high_cardinality = 1)

star_cat %>% show_plot(high_cardinality = 2)

  • Nếu chưa ưng ý với màu mặc định của ggplot thì có thể chọn dải màu khác dùng agrument col_palette
star_cat %>% show_plot(col_palette = 1)

Thế thôi nhỉ CHIỀU CHỦ NHẬT BUỒN

LS0tCnRpdGxlOiAiVW5kZXJzdGFuZCBjYXRlZ29yaWNhbCBkYXRhIHdpdGggaW5zcGVjdGRmIgphdXRob3I6ICJOZ3V54buFbiBOZ+G7jWMgQsOsbmgiCmRhdGU6ICIxNiBKVU4gMjAxOSIKb3V0cHV0OiAKIGh0bWxfZG9jdW1lbnQ6IAogIGNvZGVfZG93bmxvYWQ6IHRydWUKICBjb2RlX2ZvbGRpbmc6IGhpZGUKICBudW1iZXJfc2VjdGlvbnM6IHllcwogIHRoZW1lOiAiZGVmYXVsdCIKICB0b2M6IFRSVUUKICB0b2NfZmxvYXQ6IFRSVUUKICBkZXY6ICdzdmcnCgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKKipIw6N5IHN1eSBuZ2jEqSB24buBIHThuqV0IGPhuqMgbmjhu69uZyBnw6wgYuG6oW4gbsOzaSwgbmjGsG5nIMSR4burbmcgbsOzaSB04bqldCBj4bqjIG5o4buvbmcgZ8OsIGLhuqFuIG5naMSpKioKCiMgTeG7nyDEkeG6p3UKClRow7RuZyB0aMaw4budbmcga2hpIGzDoG0gdmnhu4djIHbhu5tpIGThu68gbGnhu4d1IG3hu5tpIHRhIHRoxrDhu51uZyBt4bqldCBraMOhIG5oaeG7gXUgdGjhu51pIGdpYW4gxJHhu4MgaGnhu4N1IGThu68gbGnhu4d1LiBI4bqndSBo4bq/dCBuaOG7r25nIGzhuqduIMSRw7MgdGjGsOG7nW5nIGzhurdwIMSRaSBs4bq3cCBs4bqhaSBuaOG7r25nIGPDonUgbOG7h25oIHF1ZW4gdGh14buZYywgbmjGsG5nIGNoxrBhIHThu5FpIMawdSDEkcaw4bujYywgbMOgbSBjaMO6bmcgdGEgbeG6pXQgcuG6pXQgbmhp4buBdSB0aOG7nWkgZ2lhbi4KClBhY2thZ2UgaW5zcGVjdGRmIGtow7RuZyBwaOG6o2kgbMOgIHBhY2thZ2UgZHV5IG5o4bqldCBsw6BtIHZp4buHYyBuw6B5LCBuaMawbmcgdMO0aSB0aOG6pXkgcGFja2FnZSBuw6B5IHRoaeG6v3Qga+G6vyBoYXkgbmjhuqV0LCBn4buNbiBnw6BuZywgc+G6oWNoIHPhur0sIGPDsyB0xrAgZHV5CgpN4buZdCBz4buRIHBhY2thZ2Uga2jDoWMgY8WpbmcgaGF5IG5oxrA6IERhdGFFeHBsb3JlciwgbmjGsG5nIMSR4buTIHRo4buLIGNoxrBhIMSRxrDhu6NjIHRow7RuZyBtaW5oLCDEkeG6p3UgcmEgduG6q24gY8OybiBxdcOhIMSRxqFuIGdp4bqjbi4KClRow7RpIGtow7RuZyBwaOG6o2kgbsOzaSBuaGnhu4F1LCBs4bqnbiBzYXUgxJHhu41jIGzhuqFpIGzhuqFpIMSRw6lvIG114buRbiDEkeG7jWMKCiMgQ8OgaSDEkeG6t3QgcGFja2FnZSAqKmluc3BlY3RkZioqCgotIFThu6sgbmd14buTbiBnaXRodWIgaW5zdGFsbF9naXRodWIoImFsYXN0YWlycnVzaHdvcnRoL2luc3BlY3RkZiIpIAotIGxvYWQgdGjDqm0gZ8OzaSBkcGx5ciBxdWVuIHRodeG7mWMKCgpgYGB7cn0KbGlicmFyeShkZXZ0b29scykKIyBpbnN0YWxsX2dpdGh1YigiYWxhc3RhaXJydXNod29ydGgvaW5zcGVjdGRmIikKbGlicmFyeShpbnNwZWN0ZGYpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCmBgYAoKIyDDgXAgZOG7pW5nIHbhu5tpIGRhdGEoc3RhcndhcnMpCgotIFPhu60gZOG7pW5nIGRhdGEoc3RhcndhcnMpCi0gQ2jhuqF5IG5o4buvbmcgY8OidSBs4buHbmggY8ahIGLhuqNuIG5oxrAgbmFtZXMsIGhlYWQsIHN0ciAKYGBge3J9CmRhdGEoc3RhcndhcnMpCgpgYGAKCj8gc+G7rSBk4bulbmcgc3RyKCksIGThu68gbGnhu4d1IG3DoCBjw7MgbGlzdCB0aMOsIGNo4bqjIG5ow6xuIMSRxrDhu6NjIGto4buJIGfDrCBj4bqjLCAKCj8gc+G7rSBk4bulbmcgZ2xpbXBzZSB04buRdCBoxqFuIHN0cigpIDEgdMOtLCBuaMawbmcgduG6q24ga2jDsyBuaMOsbgoKXChcUmlnaHRhcnJvd1wpIMSRxqFuIGdp4bqjbiBkw7luZyBpbnNwZWN0X3R5cGVzIAoKKnN0YXJ3YXJzICU+JSBpbnNwZWN0X3R5cGVzKCkqCgpgYGB7cn0KdHlwZTEgPC0gc3RhcndhcnMgJT4lIGluc3BlY3RfdHlwZXMoKQoKdHlwZTEKYGBgCgohISEgbmdvbiBraMO0bmcgCgptdeG7kW4geGVtIGNoaSB0aeG6v3QgdOG7q25nIGPhu5l0IHRodeG7mWMgbG/huqFpIGfDrCB0aMOsIMSRxqFuIGdp4bqjbiBs4bqleSBvYmplY3QgY29sX25hbWUgcmEgdGjDtGkKKip0eXBlMSRjb2xfbmFtZSoqCgpgYGB7cn0Kc3Rhcl9jYXQgPC0gc3RhcndhcnMgJT4lIGluc3BlY3RfY2F0KCkgCmBgYAoKTOG7h25oIG7DoHkgcmEgbmhp4buBdSB0aOG7qSBuZ29uIG5naOG6uyBwaOG6v3QgxJHhuqd1IHRpw6puIAoKLSBjbnQ6IHPhu5EgbMaw4bujbmcgbGV2ZWxzIGPhu6dhIHThu6tuZyBiaeG6v24gCi0gY29tbW9uOiBsZXZlbCBjw7MgdOG6p24gc3XhuqV0IChmcmVxKSBs4bubbiBuaOG6pXQKLSBjb21tb25fcGNudDogJSBj4bunYSBsZXZlbCDEkcOzIHRow7RpCi0gbGV2ZWxzOiBM4bqleSByYSB04bqldCBj4bqjIGPDoWMgbGV2ZWxzIGPhu6dhIGPDoWMgYmnhur9uIAoKISEhISBOZ29uIHbDo2kgCgoqKk5vdGU6IGzhu4duaCBpbnNwZWN0X2NhdCgpIMOhcCBk4bulbmcgY2hvIGPhuqMgYmnhur9uIGxv4bqhaSBjaGFyYWN0ZXIsIGxvZ2ljIHbDoCBmYWN0b3IgKioKClbDrSBk4bulIMSR4buNYyBr4bq/dCBxdeG6ozogYmnhur9uIGV5ZV9jb2xvcjogY8OzIDE1IGxldmVscywgbGV2ZWwgY8OzIHThuqduIHN14bqldCBs4bubbiBuaOG6pXQgbMOgIGJyb3duLCB04bu3IGzhu4cgbMOgIDI0JSAoY2hpIHRp4bq/dCBjw6FjIGxldmVscyBu4bqxbSB0cm9uZyAqc3Rhcl9jYXQkbGV2ZWxzJGV5ZV9jb2xvciopCgpHaeG7nSBtw6AgZMO5bmcgaMOgbSB0YWJsZXMoKSBjaOG6r2MgcGjDoXQga2jDs2MgCgoKLSBQaOG6p24gaGF5IG5o4bqldCDEkcOieQoKYGBge3J9CnN0YXJfY2F0ICU+JSBzaG93X3Bsb3QoKQpgYGAKCgpUaOG6vyBuw6B5IG3hu5tpIG5nb24gY2jhu6kgbOG7iyAKCioqTm90ZTogTWlzc2luZyB2YWx1ZSBtw6B1IGdyYXkqKjogcsO1IHLDoG5nIGNoxrBhIAoKTmjDrG4gdsOgbyBncmFwaCB0csOqbiBjaMO6bmcgdGEgdGjhuqV5IGPDsyBuaOG6pXQgbmhp4buBdSBsZXZlbHMgY8OzIGZyZXEgcuG6pXQgdGjhuqVwLCBjw7MgdGjhu4MgY2jhu4kgY8OzIDEgaG/hurdjIDIgcXVhbiBzw6F0LiDEkOG7gyBraeG7g20gdHJhIHhlbSBjw7MgdGjhurFuZyBuw6BvIG5oxrAgduG6rXkga2jDtG5nIHRhIHNldCBhcmd1bWVudCBixINuZyBnacOhIHRy4buLIDEgaG/hurdjIDIgdGjDtGkKCmBgYHtyfQpzdGFyX2NhdCAlPiUgc2hvd19wbG90KGhpZ2hfY2FyZGluYWxpdHkgPSAxKQpzdGFyX2NhdCAlPiUgc2hvd19wbG90KGhpZ2hfY2FyZGluYWxpdHkgPSAyKQpgYGAKCgotIE7hur91IGNoxrBhIMawbmcgw70gduG7m2kgbcOgdSBt4bq3YyDEkeG7i25oIGPhu6dhIGdncGxvdCB0aMOsIGPDsyB0aOG7gyBjaOG7jW4gZOG6o2kgbcOgdSBraMOhYyBkw7luZyBhZ3J1bWVudCAqY29sX3BhbGV0dGUqCmBgYHtyfQpzdGFyX2NhdCAlPiUgc2hvd19wbG90KGNvbF9wYWxldHRlID0gMSkKCmBgYAoKClRo4bq/IHRow7RpIG5o4buJIENISeG7gFUgQ0jhu6YgTkjhuqxUIEJV4buSTiA=