분석할 데이터를 준비하는 과정을 데이터 수집이라고 합니다. 데이터는 어떻게 준비해야 할까요?
가장 기본적으로는 직접 데이터를 입력하거나 외부에서 생성한 데이터를 찾아서 불러오는 방법이 있고, 좀 더 전문적으로는 서버에서 데이터를 호출하는 방법이 있습니다.
벡터나 데이터 프레임을 R에 함수로 입력하는 방법이 데이터를 직접 생성하는 것이라면 외부 데이터를 가져오는 방법은 *.txt, *.csv, *.xlsx, *.xml, *.json 등과 같이 이미 만들어져 있는 데이터 파일을 가져오는 방법입니다. 오늘은 R 스튜디오에서 외부 데이터 파일을 가져오는 방법에 대해 알아보겠습니다.
✍️ 표로 정리하는 핵심 함수
함수 | 기능 |
read.table() | TXT 파일을 가져옵니다. |
read.csv() | CSV 파일을 가져옵니다. |
read_excel() | readxl 패키지 엑셀 파일을 가져옵니다. |
xmlToDataFrame() | XML 패키지 XML 파일을 가져옵니다. |
fromJSON() | jsonlite 패키지 JSON 파일을 가져옵니다. |
📑외부 데이터 가져오기: TXT 파일
TXT 파일은 read.table ( ) 함수를 사용하여 데이터 프레임으로 가져올 수 있습니다. read.table ( ) 함수 사용 형식은 다음과 같습니다.
read.table(“원시 데이터“, header = FALSE, skip = 0, nrows = -1, sep = “”, … ) |
함수에 원시 데이터 파일 경로를 넣어주고, 필요하다면 옵션을 지정합니다. 옵션을 지정하면 원시 데이터를 원하는 데이터 프레임 형태로 가져올 수 있습니다. 아래는 read.table ( ) 함수에서 자주 사용 하는 옵션입니다.
- header: 원시 데이터의 1행이 변수명인지 아닌지 판단합니다.
- skip: 특정 행까지 제외하고 데이터를 가져옵니다.
- nrows: 특정 행까지 데이터를 가져옵니다.
- sep: 데이터의 구분 문자를 지정합니다.
read.table ( ) 함수 사용법을 살펴보겠습니다. 가져올 파일은 data_ex.txt 파일입니다. 파일을 메모장 프로그램에서 먼저 실행해보면 각 열이 탭으로 구분되어 있고, 첫 번째 행은 변수명인 것을 알 수 있습니다. 이 원시 데이터를 변수 ex_data에 저장하여 데이터 프레임으로 가져옵니다.
✅TXT 파일 가져오기
ex_data <- read.table(“C:/Rstudy/data_ex.txt”, encoding = “EUC-KR”, fileEncoding = “UTF-8”) |
데이터 뷰어에서 가져온 데이터를 확인할 수 있습니다. 원시 데이터를 데이터 프레임으로 가져오면 테이블 첫 번째 행에는 변수명이 지정되고 그 아래로는 값을 가져옵니다. 여기에서 눈여겨볼 점은 테이블 1행입니다. 우리는 원시 데이터에서 1행이 변수명인 것을 확인했습니다.
그러나 데이터를 가져 오면서 원시 데이터의 변수명이 값이 되고 테이블 첫 번째 행에는 임의의 변수명이 삽입되었습니다. 이럴 때는 read.table() 함수의 header 옵션을 사용하여 원시 데이터에 변수명이 있음을 지정해 주어야 합니다.
🙋♂️여기서 잠깐) encoding과 fileEncoding 옵션
Windows 환경에서 실습할 때 한글이 있는 데이터를 가져오면 데이터의 한글이 제대로 표시되지 않는 문제가 발생할 수 있습니다.
Windows는 인코딩을 CP949 혹은 EUC-KR을 사용하기 때문에 인코딩이 UTF-8인 파일을 가져올 때 발생 하는 문제입니다. 이럴 때는 함수에 encoding과 fileEncoding 옵션을 설정해 줍니다. encoding 옵션은 R의 인코딩 설정, fileEncoding은 파일의 인코딩 설정입니다.
🔹header 옵션
header = TRUE 옵션을 추가하여 원시 데이터 1행이 변수명임을 지정하고 ex_data1로 저장해 보겠습니다.
✅변수명 지정하기 ex_data1 <- read.tabl1e.(“C:/Rstudy/data_ex.txt”, encoding =2″.EUC-KR”, fileEncoding = “UTF-8”, header = TRUE) |
이처럼 header = TRUE 옵션을 추가하면 원시 데이터의 1행이 변수명으로 지정됩니다. 따라서 테 이블의 변수명으로는 ID, SEX, AGE, AREA를 가져오고 그 아래로는 원시 데이터의 값을 가져온 것을알수있습니다.
만약 원시 데이터에 ID, SEX, AGE, AREA와 같이 변수명으로 사용할 행이 없다면 col.names 옵션을 사용합니다. col.names 옵션은 원시 데이터에 변수명이 없더라도 데이터 프레임에 변수명 을 부여할 수 있습니다.
✅변수명으로 사용할 행이 없을 때 varname <- c(“ID”, “SEX”, “AGE”, “AREA”) |
위 코드처럼 col.names 옵션은 변수명으로 사용할 값을 지정할 수 있습니다. 만약 행 이름을 부여 하고 싶다면 row.names 옵션을 사용하면 됩니다.
🔹skip 옵션
skip 옵션은 데이터 전체가 아니라 옵션에 지정한 특정 행까지 제외하고 그 이후 행부터 가져옵니다. 데이터를 두 줄 건너뛰고 가져와 변수 ex_data2로 저장해 보겠습니다.
✅행 스킵하여 가져오기 ex_data2 <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8", header = TRUE, skip = 2)
View(ex_data2)
|
header = TRUE 옵션을 사용하여 원시 데이터 1행을 변수명으로 지정하고 skip = 2 옵션을 추가 하여 원시 데이터 2행까지를 제외했더니, 변수명인 1행을 제외하고 나머지 행 중 두 개 행을 건너뛴 3행 데이터부터 불러온 것을 알 수 있습니다.
🔹nrows 옵션
nrows 옵션은 몇 개의 행을 불러올지 지정할 수 있습니다. 불러올 행 개수를 7개로 지정한 후 변수 ex_data3으로 저장해 보겠습니다.
✅행 개수 지정하여 가져오기 ex_data3 <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8", header = TRUE, nrows = 7) View(ex_data3) |
header = TRUE 옵션을 사용하여 1행을 변수명으로 지정하고. 그 이후로 1행부터 7행까지 원시 데이터를 가져온 것을 알 수 있습니다.
🔹sep 옵션
sep 옵션은 데이터 구분자를 지정하는 옵션입니다. 앞서 실습한 data_ex.txt 데이터는 값 구분이 TAB 으로 되어 있었기 때문에 옵션 설정 없이 가져올 수 있었습니다. 만약 쉼표(,)로 구분되어 있다면 어떨까요? 다음 이미지와 같이 쉼표(,)로 값이 구분된 data_ex1.txt 데이터를 가져오겠습니다.
sep 옵션은 원시 데이터의 데이터 구분자에 따라 옵션을 설정합니다. 구분자가 쉼표(,)이므로 sep 옵션을 sep = “,”로 지정합니다.
✅데이터 구분자 지정하여 가져오기 ex_data4 <- read.table("C:/Rstudy/data_ex1.txt", encoding = "EUC-KR", fileEncoding = "UTF-8", header = TRUE, sep = ",") View(ex_data4) |
쉼표(,)를 기준으로 열을 구분하여 데이터 프레임으로 가져온 것을 확인할 수 있습니다.
📑외부 데이터 가져오기: CSV 파일
CSV 파일은 *.csv 확장자를 가진 파일로 쉼표(,)를 이용해 열을 구분하는 데이터 입니다. CSV 파일을 가져올 때는 read.csv ( ) 함수를 사용하며 read.table ( ) 함수와 사용법이 비슷합니다.
read.csv(“원시 데이터“) |
data_ex.csv 파일을 메모장으로 열어보면 다음 이미지와 같습니다. 아래의 data_ex.csv 파일을 R 로 가져옵니다.
✅CSV 파일 가져오기 ex_data <-read.csv(“C:/Rstudy/data_ex.csv”) |
read.csv() 함수는 따로 옵션을 설정하지 않아도 원시 데이터의 1행을 변수명으로 가져옵니다. 만 약 값이 비어 있다면 임의로 지정됩니다.
📑외부 데이터 가져오기: XLSX 엑셀 파일(★★★)
엑셀 파일은 외부 데이터 중 원시 데이터로 가장 많이 활용하는 파일입니다. 엑셀 프로그램 자체로도 충분히 훌륭한 통계 프로그램이므로 프로그램 자체에서 엑셀 데이터를 활용해도 되지만, R 환경으로 가져오면 데이터 분석에 사용하기 좋은 데이터 세트가 됩니다. 엑셀 파일은 read_excel() 함수로 가져옵니다.
read_excel(“원시 데이터“) |
앞에서 사용한 다른 함수와 달리 read_excel() 함수는 readxl 패키지에 있는 함수입니다. 데이터 를 가져오기 전에 먼저 패키지를 설치하고 로드합니다.
✅readxl 패키지 설치 및 로드하기 install.packages(‘readxl’) |
🙋♂️여기서 잠깐) 패키지는 어떻게 설치하나요?
readxl 패키지 설치와 로드가 완료되면 data_ex.xlsx 파일을 데이터 프레임으로 가져옵니다
✅엑셀 파일 가져오기 excel_data_ex <- read_excel("C:/Rstudy/data_ex.xlsx")
View(excel_data_ex)
|
엑셀 형식과 비슷한 형태로 데이터 프레임이 생성됩니다. 테이블 모양이 엑셀과 비슷해 보이지만, 원 시 데이터와 달리 변수명이 확실하게 구분되어 있고, 변수명이 있는 행에 필터가 있어 변수별로 데이 터 정렬을 원하는 대로 설정 할 수 있습니다.
🙋♂️여기서 잠깐) 엑셀 파일에 시트 탭이 여러 개일 때는 어떻게 하나요?
read_excel() 함수는 기본값으로 첫 번째 시트 탭의 데이터를 가져옵니다. 만약 시트 탭이 여러 개여서 첫 번째 외의 다른 탭 시트 데이터를 가져오려면 sheet 옵션을 사용합니다. sheet 옵션에는 가져올 시트가 몇 번째인지 위치를 입력합니다. sheet = 2를 지정하면 두 번째 시트 데이터를 가져옵니다
read_excel(“C:/Rstudy/data_ex.xlsx”, sheet = 2) |
📑외부 데이터 가져오기: XML 파일(★)
XML(eXtensible Markup Language)파일은 HTML과 비슷하지만 데이터를 보여주는 것이 아닌 저장하고 전달하는 목적으로 만들어진 형식입니다. HTML처럼 태그가 미리 정의되어 있지 않고 태그를 사용자가 직접 정의합니다.
XML 파일은 HTML 태그처럼 < > 괄호로 이루어져있습니다.
예를 들어 <AGE>50</AGE>와 같이 사용자가 임의 지정한 태그 안에 데이터 내용 이 들어있는 것이 특징입니다.
XML 파일을 가져오는 많은 방법들이 있지만, XML 파일을 데이터 프레임으로 변환하는 xmlToDataFrame ( ) 함수를 가장 많이 사용합니다.
xmlToDataFrame(“원시 데이터“)
그럼 data_ex.xml 파일을 가져오겠습니다.
xmlToDataFrame ( ) 함수 는 XML 패키지에 있습니다. 함수를 사용하려면 먼저 XML 패키지를 설치하고 로드합니다.
✅XML 패키지 설치 및 로드하기 install.packages(“XML”) |
xmlToDataFrame ( ) 함수로 xml 파일을 가져옵니다.
✅XML 파일 가져오기 xml_data <- xmlToDataFrame("C:/Rstudy/data_ex.xml")
View(xml_data)
|
XML 파일의 < > 괄호 안에 있는 태그 이름은 변수명으로, 태그 안에 있는 값은 데이터로 데이터 프레임에 저장됩니다.
📑외부 데이터 가져오기: JSON 파일(★★)
JSON(JavaScript Object Notation)파일도 데이터를 전달하는 목적으로 만들어진 파일 형식입니다. 서버-클라이언트 통신 간 데이터를 받아 객체나 변수에 할당해서 사용할 때 많이 사용하며, XML 파일보다 구문이 짧고 속도가 빨라 실무에서 흔히 사용합니다.
JSON 파일은 데이터 안에 다시 데이터가 정의된 중첩 데이터(nested data) 구조로 이루어져있습니다. 아래 예시를 살펴보면 속성(특기) – 값(농구, 도술)처럼 데이터 속성과 값이 쌍으로 이루어진 것이 특징입니다.
data_ex.json 파일을 가져오겠습니다. JSON 파일을 가져오는 함수는 fromJSON ( ) 함수입니다.
fromJSON(“원시 데이터“) |
fromJSON ( ) 함수는 jsonlite 패키지에 있습니다. 패키지를 설치하고 로드합니다.
✅jsonlite 패키지 설치 및 로드하기 install.packages("jsonlite") library(jsonlite) |
fromJSON ( ) 함수로 JSON 파일을 가져옵니다. 여기서 알아둘 점은 fromJSON ( ) 함수는 JSON 파일을 데이터 프레임으로 가져오는 함수가 아닙니다. 따라서 실행 결과는 View() 함수가 아닌 str ( ) 함수로 데이터 구조를 살펴봅니다.
✅JSON 파일 가져오기 json_data <- fromJSON(“C:/Rstudy/data_ex.json”) |
> 실행 결과
List of 7
$이름 : chr “홍길동”
$나이 : int 25
$성별 : chr “여”
$주소 : chr “서울특별시 양천구 목동” $특기 : chr [1:2] “농구” “도술”
$ 가족관계:List of 3
..$ # : int 2
..$ 아버지: chr “홍판서”
..$ 어머니: chr “춘섬”
$ 회사 : chr “경기 수원시 팔달구 우만동”
List of 7을 JSON 파일을 리스트 형식으로 가져왔다는 의미이며 7개의 속성으로 구성되었다는 것을 알 수 있습니다.
데이터 수집은 사용자가 직접 데이터를 입력하거나 외부에 있는 데이터를 불러오는 데이터 분석의 가장 첫 단계입니다.
위의 내용이 잘 이해가 되었는지 외부 데이터를 가져오는 함수를 파일 형식에 맞게 연결해 보세요!
- read.table ( ) • • data.csv
- read.csv() • • data.xlsx
- read_excel ( ) • • data.json
- xmlToDataFrame ( ) • • data.xml
- fromJSON ( ) • • data.txt
위 내용은 『혼자 공부하는 R 데이터 분석』의 일부분을 재구성하여 작성하였습니다.
프로그래밍도 통계도 처음 배우는 입문자가 R언어로 데이터 분석을 할 수 있도록 만들어진 책 입니다. 데이터 분석에 관심이 있거나 R 언어로 데이터 분석을 시작하고 싶다면『혼자 공부하는 R 데이터 분석』으로 지금 시작해 보세요!
유튜브 강의로 더 자세히 알기
강전희&엄동란 저자님께 질문하기
Leave A Comment