R로 데이터 분석을 할 때, 한글이 포함된 CSV 파일을 자주 불러오게 됩니다. 이 때 특별한 주의가 필요합니다. 정확하게 불러오지 않으면, 에러가 발생하기 때문이죠. 본 포스트에서는 R 데이터 불러오기와 한글 섞인 .csv 파일을 올바르게 불러오는 방법에 대해 알아보겠습니다.
R 데이터 불러오기 (csv 파일)
데이터의 종류가 여러 가지가 있습니다만, 가장 많이 사용되는 파일은 바로 .csv
파일입니다. .csv
파일을 R에서 데이터를 불러오는 데 있어, 주로 사용되는 함수들 중에 read.csv()
와 read_csv()
가 있습니다.
두 함수 모두 CSV 파일을 불러오는 기능을 수행하지만, 몇 가지 중요한 차이점이 있습니다.
R에서 read_csv()
와 read.csv()
의 차이점
이 두 함수의 차이점에 대해 자세히 알아보겠습니다.
- 속한 패키지
read.csv()
: R의 기본 패키지인utils
에 포함되어 있습니다. 즉, 따로 패키지를 불러오지 않아도 사용가능하다는 장점이 있습니다.read_csv()
:tidyverse
패키지의 일부인readr
패키지에 포함되어 있습니다. 따라서, 사용하기 전에 꼭!tidyverse
패키지를 로딩해줘야 합니다.
- 처리 속도
read_csv()
: C++로 작성되어read.csv()
보다 대체로 처리속도가 더 빠릅니다. 큰 데이터 셋을 불러올 경우read.csv()
함수보다는read_csv()
함수를 사용해야겠죠?
- 결과의 데이터 타입
read.csv()
: 결과로data.frame
을 반환합니다.read_csv()
:tibble
형태로 데이터를 반환합니다.
- 기타
read_csv()
: 파일의 첫 줄을 자동으로 헤더로 간주하고, 데이터의 유형을 자동으로 추측합니다.
결론적으로, 어떤 함수를 사용할 것인지는 당신의 작업 환경, 데이터의 크기, 그리고 필요한 기능에 따라 결정됩니다. 그러나 tidyverse
를 주로 사용하는 경우 read_csv()
를 선택하는 것이 더 바람직합니다.
R csv 불러오기 예제
R csv 불러오기를 연습해보겠습니다. 주어진 를 사용하여 학생들 중간고사 성적 정보를 담고 있는 “examscore.csv” 파일을 다운로드 받겠습니다. tidyverse 패키지의 read_csv()
함수를 사용하여 CSV 파일을 읽고 데이터를 불러옵니다.
- 문법:
read_csv("파일 경로", header = 데이터 칼럼명이 있으면 TRUE)
library(tidyverse)
mydata <- read_csv("examscore.csv", header = TRUE)
다음과 같이 url
을 사용해서 바로 읽어오는 것도 가능합니다.
mydata <- read_csv("https://bit.ly/examscore-csv")
위 코드를 실행하면 mydata
라는 데이터 프레임이 생성되고, head()
함수를 통해 데이터의 첫 부분을 확인할 수 있습니다. dim()
함수를 사용하여 데이터 프레임의 차원(행과 열 개수)을 출력할 수 있습니다.
head(mydata)
>> # A tibble: 6 × 4
>> student_id gender midterm final
>> <dbl> <chr> <dbl> <dbl>
>> 1 1 F 38 46
>> 2 2 M 42 67
>> 3 3 F 53 56
>> 4 4 M 48 54
>> 5 5 M 46 39
>> 6 6 M 51 74
dim(mydata)
>> [1] 30 4
R csv 한글 깨짐 현상 해결법
csv 파일에 한글이 들어있는 경우 read_csv() 함수를 사용하면 다음과 같은 에러가 발생합니다.
Error in nchar(x, "width") : invalid multibyte string, element 1
이러한 R csv 한글 깨짐 현상을 해결하기 위해서는 파일에 알맞은 인코딩 정보를 사용해서 데이터를 불러와야 합니다.
파일 인코딩이란?
인코딩은 ‘코드를 입히는 것’입니다. 컴퓨터는 글자나 그림을 보고 바로 이해할 수 없습니다. 그래서 컴퓨터는 글자나 그림을 특별한 숫자 코드로 바꿔서 이해하게 됩니다.
예를 들면, ‘안녕’이라는 글자를 컴퓨터에게 보여주면 컴퓨터는 이 글자를 숫자 코드로 바꿔서 기억합니다. 글자나 그림을 숫자 코드로 바꾸는 이 방법을 ‘인코딩’이라고 부릅니다.
한국에서는 ‘EUC-KR’이나 ‘CP949’라는 인코딩 방식을 많이 사용했습니다. 그런데 요즘에는 ‘UTF-8’이라는 인코딩 방식이 더 많이 쓰이게 되었습니다. ‘UTF-8’은 전 세계의 많은 나라의 글자를 숫자로 바꿀 수 있어서, 여러 나라의 글자를 함께 사용할 때 유용하기 때문입니다.
R 한글이 포함된 CSV 파일 불러오기
R을 사용하여 데이터 분석을 진행하다 보면, 한글이 포함된 CSV 파일을 불러와야 할 때가 있습니다. 주의할 점은 간혹 한글이 섞여있는 데이터 중에 encoding을 알맞게 설정해 줘야합니다.
city_museum_20230102.csv
파일을 read_csv()
함수를 통하여 불러오는 것을 예를 들어 설명하겠습니다.
R 파일 인코딩 정보 알아내기
제공된 csv 파일이 어떠한 인코딩을 사용해서 기록되어 있는지 파일의 인코딩 정보를 guess_encoding()
함수를 통하여 알아냅니다.
library(readr)
guess_encoding("./data/city_museum_20230102.csv")
## # A tibble: 2 × 2
## encoding confidence
## <chr> <dbl>
## 1 EUC-KR 1
## 2 Big5 0.31
EUC-KR
인코딩을 사용하고 있다는 것을 알았으니, 이 정보를 사용하여 데이터를 불어오겠습니다. 인코딩 정보를 read_csv() 함수 안에 locale 옵션에 함께 넣어 데이터를 불러옵니다.
city_museum <- read_csv("./data/city_museum_20230102.csv",
locale = locale(encoding = "EUC-KR"))
## Rows: 365 Columns: 11
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): 휴관일
## dbl (8): 통영시민 합계, 타지역 관광객 합계, 성인(통영시민), 청소년(통영시민), 어린이(통영시민), 성인(타지역 관광객), ...
## date (2): 날짜, 데이터기준일자
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
아래 결과를 확인해보면, 한글이 깨지지 않고 잘 표현 된 것을 확인 할 수 있습니다.
head(city_museum)
## # A tibble: 6 × 11
## 날짜 `통영시민 합계` `타지역 관광객 합계` `성인(통영시민)`
## <date> <dbl> <dbl> <dbl>
## 1 2022-01-01 0 0 0
## 2 2022-01-02 0 34 0
## 3 2022-01-03 0 0 0
## 4 2022-01-04 4 16 3
## 5 2022-01-05 0 13 0
## 6 2022-01-06 0 11 0
## # ℹ 7 more variables: `청소년(통영시민)` <dbl>, `어린이(통영시민)` <dbl>,
## # `성인(타지역 관광객)` <dbl>, `청소년(타지역 관광객)` <dbl>,
## # `어린이(타지역 관광객)` <dbl>, 휴관일 <chr>, 데이터기준일자 <date>
본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!