src_dbi인 tbl의 str()을 확인할 때는 dplyr::glimpse() 함수를 사용하세요.
str()
함수는 매우 유용합니다. 복잡한 데이터의 구조를
한눈에 보여주는 R의 효자 함수지요. 그런데 DBI을 이용한 table 객체를
사용할 때 문제가 있습니다.
문제상황을 만들기 위해 sqlite
를 사용해서 테이블을 만들어
보겠습니다.
<SQLiteConnection>
Path: :memory:
Extensions: TRUE
유용한 내장 데이터인 mtcars
데이터셋을 sqlite로
저장하고, dplyr::tbl()
함수로 테이블 객체를 불러왔습니다.
이제 데이터를 살펴볼 때 유용한 함수인 str()
로 데이터를
확인해보겠습니다. 우선 R 객체인 mtcars
를 확인해 볼까요?
str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
그리고 테이블 객체로 저장한 mtcars_sql
을
확인해보겠습니다.
str(mtcars_sql)
List of 2
$ src:List of 2
..$ con :Formal class 'SQLiteConnection' [package "RSQLite"] with 8 slots
.. .. ..@ ptr :<externalptr>
.. .. ..@ dbname : chr ":memory:"
.. .. ..@ loadable.extensions: logi TRUE
.. .. ..@ flags : int 70
.. .. ..@ vfs : chr ""
.. .. ..@ ref :<environment: 0x7fdc3b4c7770>
.. .. ..@ bigint : chr "integer64"
.. .. ..@ extended_types : logi FALSE
..$ disco: NULL
..- attr(*, "class")= chr [1:4] "src_SQLiteConnection" "src_dbi" "src_sql" "src"
$ ops:List of 2
..$ x : 'ident' chr "mtcars"
..$ vars: chr [1:11] "mpg" "cyl" "disp" "hp" ...
..- attr(*, "class")= chr [1:3] "op_base_remote" "op_base" "op"
- attr(*, "class")= chr [1:5] "tbl_SQLiteConnection" "tbl_dbi" "tbl_sql" "tbl_lazy" ...
확실히 기대하는 모양이랑 좀 다릅니다. 테이블 객체 자체에 대한 정보를 보여주는군요.
제가 다루는 db의 테이블들은 컬럼이 몇 십개씩 있거나 하기도 합니다.
tibble
자료형이 매우 좋은 요약정보를 제공합니다만,
컬럼이 많아지면 한눈에 보기 불편한 문제가 있습니다.
library(nycflights13)
flights
# A tibble: 336,776 × 19
year month day dep_time sched_dep_time dep_delay arr_time
<int> <int> <int> <int> <int> <dbl> <int>
1 2013 1 1 517 515 2 830
2 2013 1 1 533 529 4 850
3 2013 1 1 542 540 2 923
4 2013 1 1 544 545 -1 1004
5 2013 1 1 554 600 -6 812
6 2013 1 1 554 558 -4 740
7 2013 1 1 555 600 -5 913
8 2013 1 1 557 600 -3 709
9 2013 1 1 557 600 -3 838
10 2013 1 1 558 600 -2 753
# … with 336,766 more rows, and 12 more variables:
# sched_arr_time <int>, arr_delay <dbl>, carrier <chr>,
# flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
# air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
# time_hour <dttm>
이렇게 화면을 벗어나게 컬럼이 많으면 값들의 일부조차도 요약해서 보여주죠. 물론 컬럼 출력 옵션을 조정할 수 도 있습니다. 하지만 그런 커스텀이 많아지는걸 저는 좋아하지 않습니다.
대신 dplyr::glimpse()
함수를 제공한다는 사실을
알게되었습니다. 대체 dbi src str
같은 검색을 죽어라 할 때는
없더니… 등잔밑이 어둡다가 정말 이럴때 쓰는 말인가 싶더군요.
glimpse(mtcars_sql)
Rows: ??
Columns: 11
Database: sqlite 3.38.2 [:memory:]
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 1…
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4…
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7,…
$ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180…
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3…
$ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190,…
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00,…
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1…
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1…
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4…
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2…
db를 소스로 사용하는 테이블 객체를 살펴볼 때 필수 함수가 아닐까
싶습니다. flights
데이터로 한번 더 비교하면서 글
마무리하겠습니다. 감사합니다.
List of 2
$ src:List of 2
..$ con :Formal class 'SQLiteConnection' [package "RSQLite"] with 8 slots
.. .. ..@ ptr :<externalptr>
.. .. ..@ dbname : chr ":memory:"
.. .. ..@ loadable.extensions: logi TRUE
.. .. ..@ flags : int 70
.. .. ..@ vfs : chr ""
.. .. ..@ ref :<environment: 0x7fdc3b4c7770>
.. .. ..@ bigint : chr "integer64"
.. .. ..@ extended_types : logi FALSE
..$ disco: NULL
..- attr(*, "class")= chr [1:4] "src_SQLiteConnection" "src_dbi" "src_sql" "src"
$ ops:List of 2
..$ x : 'ident' chr "flights"
..$ vars: chr [1:19] "year" "month" "day" "dep_time" ...
..- attr(*, "class")= chr [1:3] "op_base_remote" "op_base" "op"
- attr(*, "class")= chr [1:5] "tbl_SQLiteConnection" "tbl_dbi" "tbl_sql" "tbl_lazy" ...
glimpse(flights_sql)
Rows: ??
Columns: 19
Database: sqlite 3.38.2 [:memory:]
$ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 201…
$ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ dep_time <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, …
$ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, …
$ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, …
$ arr_time <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838,…
$ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846,…
$ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2,…
$ carrier <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV…
$ flight <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, …
$ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668…
$ origin <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EW…
$ dest <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FL…
$ air_time <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 1…
$ distance <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, …
$ hour <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, …
$ minute <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0…
$ time_hour <dbl> 1357034400, 1357034400, 1357034400, 135703440…
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY-NC-ND 4.0. Source code is available at https://github.com/mrchypark/mrchypark.github.io, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Park (2019, Jan. 25). mrchypark: [rtips] DBI 소스의 tbl의 요약 정보 확인하기 glimpse(). Retrieved from https://mrchypark.github.io/post/rtips-dbi-소스의-tbl의-요약-정보-확인하기-glimpse/
BibTeX citation
@misc{park2019[rtips], author = {Park, Chanyub}, title = {mrchypark: [rtips] DBI 소스의 tbl의 요약 정보 확인하기 glimpse()}, url = {https://mrchypark.github.io/post/rtips-dbi-소스의-tbl의-요약-정보-확인하기-glimpse/}, year = {2019} }