ADsP R기초

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

데이터 입출력

데이터 입력, 불러오기

데이터 프레임을 하나하나 타자로 쳐서 입력하기는 정말 귀찮을 겁니다. 앞서 말씀드렸듯이 보통은 인터넷이나 센서에 쌓여 있는 데이터를 불러와서 쓰게 됩니다. SQL이나 몽고DB같은 데이터 베이스를 사용하기도 하고요. (생활코딩의 데이터 베이스n 강의를 참고해주세요.)

R은 원래 엑셀 파일을 읽지 못합니다. 엑셀 파일을 불러오려면 패키지를 추가로 다운로드 해야 합니다.

그래서 데이터 과학자들은 보통 csv파일을 사용합니다. csv 형식 파일은 다음과 같이 생겼는데 콤마( , )를 구분자로 써서 칸을 구분합니다. 형식은 텍스트 파일이지만 사실 데이터 프레임처럼 표 모양을 한 데이터들입니다.

국가,평균지출액
일 본,791.07
중 국,1887.43
홍 콩,1126.12
싱 가 포 르,1280.33
대 만,1102.77
태 국,1146.79
... 이하 생략

보통 공공 데이터 포털이나, github같은 클라우드에서 csv형식으로 된 데이터를 가져온 다음, github같은 클라우드에 저장합니다. 그리고 read.csv() 함수를 써서 불러오게 됩니다. 이미 합치기 쪼개기 편에서 해봤었죠.

expense <- read.csv(여기에 파일 주소를 넣습니다, header = T, fileEncoding = "UTF-8")

잠시 헤더와 인코딩에 대해 설명하겠습니다.

예를 들어 앞에서 사용했던 국가별 관광객 평균 지출액 데이터의 주소는 다음과 같습니다. github 저장소에 raw데이터로 저장되어 있습니다.

"https://raw.githubusercontent.com/twinstae/ADsP/master/2018%20%EA%B5%AD%EA%B0%80%EB%B3%84%20%ED%8F%89%EA%B7%A0%20%EC%8B%A0%EC%9A%A9%EC%B9%B4%EB%93%9C%20%EC%A7%80%EC%B6%9C%EC%95%A1%20-%20%EC%8B%9C%ED%8A%B81.csv"

헤더

데이터 프레임의 각 세로 열은 동질적인 벡터라고 했습니다. 그런데 위의 csv 예시 파일을 보시면 맨 위에 "국가, 평균지출액"은 명백하게 문자열입니다. 하지만 평균 지출액은 모두 numeric 다시 말해 숫자입니다.

그러니 header 선택자를 넣지 않으면 모든 데이터를 문자열 모드로 바꿔버립니다. 대참사죠.

그렇기 때문에 csv파일을 데이터 프레임으로 만들 때 첫 출은 데이터가 아니라 열 이름이라고 알려줘야 합니다. 그게 바로 "header = T" 의 뜻입니다. 헤더 = 머릿말 = 열의 이름이 있다(True)는 거죠.

인코딩

한편 인코딩은 프로그래밍 언어들이 한국어를 이해할 수 있게 하려고 씁니다. 프로그래밍 언어들은 무식해서 영어 밖에 못 읽어요. 파이썬이나 R이나 영어 쓰는 사람들 편하게 만들었거든요. 당장 함수 이름들도 다 영어지요.

인코딩 선택자를 안 넣으면 에러가 납니다.

그래서 똑똑하고 세상의 언어들을 평등하게 대하는 훌륭하고 착한 사람들이 '유니코드'를 만들었습니다. 유니코드를 쓰면 컴퓨터가 한글을 이해할 수 있습니다. UTF-8은 그런 유니코드 표준입니다.

그래서 fileEncoding="UTF-8"이라고 R에게 말을 해줘야 합니다. "우리는 csv파일을 국제 공식 유니코드 8비트로 썼다. 그러니 한글이 나와도 잘 이해해라."라는 뜻이죠.

 

그 밖에도 여러 선택자들이 있는데요. 궁금하시면 "?read.csv" 명령어로 도움말을 찾아보시기 바랍니다. 단 모두 영어입니다...

데이터 출력, 내보내기

그러면 반대로 잘 정리한 데이터를 저장하고 싶을 때도 있을 겁니다. 다르게 말하면 데이터를 출력한다, 하드에 데이터를 쓴다고 할 수 있는데요. 그러니 이번에는 read.csv()가 아니라 write.csv()함수를 쓰면 되겠습니다.

> write.csv(expense, file="관광객 평균 지출액.csv", fileEncoding = "UTF-8")

그러면 저장된 파일은 어디 있을까요? 기본적으로 파일은 작업 디렉토리 영어로 줄여서 wd(Working Directory)에 저장합니다.

오른쪽 하단에 도움말이랑, 그래프랑, wd 뜨는 화면이 있는데요. Files를 선택하면 작업 디렉토리를 볼 수 있습니다.

지금 작업 디렉토리의 주소가 어디인지는 getwd()함수를 쓰면 알 수 있습니다.

> getwd()
[1] "C:/Users/taehee/Documents"

 

연습 문제

Cars93같은 데이터 프레임을 원하는 장소, 예를 들면 바탕화면에 저장하려면 어떻게 해야할까요? 바탕화면의 주소는 보통 다음과 같습니다.

"C:\\Users\\유저이름\\Desktop"

 유저이름은 당연하지만 컴퓨터마다 다릅니다. 유저이름을 알아내려면 Users 폴더에 들어가시면 돼요.

이번 문제는 좀 어렵습니다. 왜 \\를 두 번 쓰는 걸까요? 한 번만 쓰면 왜 에러가 날까요? 몰라도 되는 내용이지만... 궁금하시면 검색해보세요!

정답을 아래에 놔두겠습니다. 직접 해보시고 모르겠으면 드래그해서 정답을 봐주세요.

 > write.csv(Cars93, file="C:\\Users\\taehee\\Desktop\\자동차93대.csv", fileEncoding = "UTF-8")

댓글

댓글 본문
버전 관리
Taehee Kim
현재 버전
선택 버전
graphittie 자세히 보기