R로 데이터 분석을 할 때, 한글이 포함된 CSV 파일을 자주 불러오게 됩니다. 이 때 특별한 주의가 필요합니다. 정확하게 불러오지 않으면, 에러가 발생하기 때문이죠. 본 포스트에서는 R 데이터 불러오기와 한글 섞인 .csv 파일을 올바르게 불러오는 방법에 대해 알아보겠습니다.

R 데이터 불러오기 (csv 파일)

데이터의 종류가 여러 가지가 있습니다만, 가장 많이 사용되는 파일은 바로 .csv 파일입니다. .csv 파일을 R에서 데이터를 불러오는 데 있어, 주로 사용되는 함수들 중에 read.csv()read_csv()가 있습니다.

두 함수 모두 CSV 파일을 불러오는 기능을 수행하지만, 몇 가지 중요한 차이점이 있습니다.

R에서 read_csv()read.csv()의 차이점

이 두 함수의 차이점에 대해 자세히 알아보겠습니다.

  1. 속한 패키지
    • read.csv(): R의 기본 패키지인 utils에 포함되어 있습니다. 즉, 따로 패키지를 불러오지 않아도 사용가능하다는 장점이 있습니다.
    • read_csv(): tidyverse 패키지의 일부인 readr 패키지에 포함되어 있습니다. 따라서, 사용하기 전에 꼭! tidyverse 패키지를 로딩해줘야 합니다.
  2. 처리 속도
    • read_csv(): C++로 작성되어 read.csv()보다 대체로 처리속도가 더 빠릅니다. 큰 데이터 셋을 불러올 경우 read.csv() 함수보다는 read_csv() 함수를 사용해야겠죠?
  3. 결과의 데이터 타입
    • read.csv(): 결과로 data.frame을 반환합니다.
    • read_csv(): tibble 형태로 데이터를 반환합니다.
  4. 기타
    • 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 한글 깨짐 현상을 해결하기 위해서는 파일에 알맞은 인코딩 정보를 사용해서 데이터를 불러와야 합니다.

파일 인코딩이란?

인코딩은 ‘코드를 입히는 것’입니다. 컴퓨터는 글자나 그림을 보고 바로 이해할 수 없습니다. 그래서 컴퓨터는 글자나 그림을 특별한 숫자 코드로 바꿔서 이해하게 됩니다.

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을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!

Similar Posts