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ĩ
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
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)
Á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
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=