본문 바로가기

Data analysis story

[R프로그래밍]-입력과 출력의 모든 것(scan,readline,print,cat,read.table, read.csv, write.table, write.csv 함수)

안녕하세요 여러분!

저번시간까지 우리는 R의 데이터 타입을 배우면서 열심히 달려왔습니다!!

이번 포스팅에서는 'R의 입력과 출력', 그 모든 것!에 대해서 다뤄보려고 합니다!

 

먼저 기본 입출력 함수들을 배워보고

어떻게 파일을 읽고 어떻게 파일을 쓰는지! 그 방법까지 알아보도록 하겠습니다!!

 

기본적인 입출력 함수

 

기본적인 입력 함수부터 볼까요?

 

①입력함수: scan()

입력함수 그 첫번째는 scan() 입니다. scan()은 기초적인 입력 명령어인데요!

키보드를 통해 값을 직접 입력할 수 있습니다!!

 

이렇게 코드를 입력하면 되는데요

그러면 콘솔 창에

직접 입력하라고 커서가 깜빡거립니다.

입력할 데이터들을 입력하고

입력을 끝내고 싶다면 마지막 줄에 빈 줄을 주면

됩니다!

 

숫자 데이터 말고 문자 데이터를 입력하고 싶다면

scan함수에 what=””을 주면 되는데요!

 

이렇게요!!

역시 콘솔창에 사용자가 입력 값을 넣으라고 커서가 깜빡이고

원하는 문자열 데이터를 입력하면 됩니다!!

 

그런데 실제로 R은 데이터분석을 위한 언어이다 보니 사용자로부터 직접 입력을 받을 일이 적습니다.

그래서 scan ()함수를 많이 사용하지는 않아요!!

 

②입력함수: readline()

이제는 한 줄 단위로 입력할 수 있는

readline 함수에 대해서 알아봅시다!

 

, scan과 달리 readline의 입력 값은 항상 character입니다!

이렇게 코드를 입력하면

역시 콘솔창에 데이터를 입력하라는 커서가 깜빡거리게 되는데

예를 들어

이렇게 한 줄로 데이터를 입력할 수 있는 것이죠!

 

그리고 readline 함수 괄호()안의 “”에 문장을 넣으면 문장이 먼저 출력됩니다!

이게 무슨 말이나면!

이렇게 데이터를 입력하기 전 앞에 설명 같은 것을 붙여줄 수 있는 것이죠!

파이썬을 아는 분들이라면 input함수를 생각하면 좋겠어요!

 

출력함수: print, cat

이제 기본적인 출력 함수에 대해서 살펴볼까요??

우리는 사실 거의 첫 포스팅부터 가장 기초적인 출력 명령어인

printcat에 대해서 배웠습니다.

 

이번 포스팅에서는 이를 복습하는 느낌으로 볼게요!

printcat의 차이는 다들 기억나시나요?

 

print는 한번에 하나의 객체만이 출력 가능했었고

cat은 여러 객체 값들을 출력할 수 있었죠!

 

cat을 통해 여러 객체의 값을 출력하면

이렇게 출력 값들에 한 칸씩 띄어쓰기가 적용되는데요

이 구분자를 또 sep=”” 인자를 통해

다르게 적용할 수 있습니다.

예를 들어본다면

sep=”\n”인자를 주면

이렇게 줄바꿈을 적용해서 출력할 수 있는 것이죠!

조금 더 복잡하게 하면

이렇게 여러 구분 인자를 줘서 출력할 수도 있답니다!

 

파일 입출력

기본적인 입출력 함수를 보았으니 이제 파일 입출력에 대해서 공부해봅시다!!

R은 보통 데이터를 파일 형태 또는 database로부터 읽어 들여 처리하는데요!

따라서 지금부터 배울 내용들은 굉장히 중요하겠네요!!

 

파일 입력 함수:scan()

앞에서 우리는 scan() 함수를 통해 데이터를 직접 입력했었죠?

하지만 이 scan() 함수로 파일을 불러올 수도 있답니다.

단순한 벡터 형태의 파일 데이터를 읽어 들이는 함수입니다!

예를 통해 확인해볼까요?

이런 파일을

getwd()함수를 이용해 현재 작업 위치를 알아낸 후

그 위치와 같은 곳에 저장해줍니다!

(콘솔 창에 치면 됩니다!)

예를 들면 저는 이 위치에 file.txt라는 파일을 저장해주었습니다!

 

현재 작업하는 디렉토리와 무조건 같은 위치에 파일이 저장되어야

파일의 내용을 불러올 수 있으니 조심하세요!!

 

그런 후!

이렇게 파일명을 따옴표 안에 확장자와 함께 넣어주면

데이터들을 잘 읽어옵니다!

읽어온 값은 벡터 형태이네요!

역시 이번에도 읽어올 파일 데이터가 문자로 구성되어 있다면

이렇게 입력해주면 됩니다!

 

그리고 이 scan 함수에 sep이라는 인자를 추가할 수도 있는데요!

이 인자로 문장의 끝을 구분할 기준 값을 설정할 수 있습니다.

예를 들어서

이런 데이터 파일을 저장했다고 하고

scan함수를 통해 읽어볼게요!

그러면

이렇게 읽어올 것입니다.

그런데 sep=”\n” 이라는 인자를 주면

줄 단위로 읽어 오기 때문에

이렇게 읽어오게 됩니다!!

위의 예는 한 줄이니까요!

scan 함수에 쓸 수 있는 인수를 정리한 표를 첨부해드릴게요!!

여러 인자를 사용해보면서 직접 공부해보세요!!

 

② 파일 입력 함수: read.csv()

두 번째로 소개할 파일을 읽어오는 함수는 read.csv() 함수입니다!

이 함수를 소개하기 위해 먼저 csv 파일에 대한 이해가 필요한데요!

 

Comma Separated Value의 약자로 ‘,’를 기준으로 열을 구분하는 파일을 csv 파일이라고 합니다.

보통 엑셀을 활용하여 이 csv 파일들을 읽거나 생성하죠!

 

‘,’와 같은 구분자 이외에도 데이터를 구분하기 위한 구분자로 ,space(" "), tab(\t), ‘:’, ‘;’, ‘.’ 등 다양한 구분자들이 있습니다.

 

예시를 통해 이해해보면

이런 데이터 테이블의 데이터들은

csv format에서 쉼표로 구분되어 있는 것을 확인할 수 있습니다!

 

이번에 배울 read.csv() 함수는

csv 파일을 데이터프레임으로 읽는 함수입니다.

csv 파일이 표니까 표에 해당하는 R의 자료 구조인 dataframe으로 읽습니다.

read.csv() 함수에는 인자가 굉장히 많은데요!

이 다양한 인자들을 통해 파일을 읽어오는 과정에서부터 데이터 전처리를 도와주고 있습니다.

그러면 어떤 다양한 인자들이 있는지 보도록 하죠!

 

예를 들어 볼게요!!!

csv로 저장된

이런 데이터가 있다고 가정해볼게요!

파일이름은 student_information입니다!

(파일은 현재 작업 중인 디렉토리와 같은 위치에 있어야 합니다!)

 

이 때 파일명은 student_information.csv이겠고

header는 위 파일의 첫 행을 헤더로 처리하는 편이 깔끔할 테니 T일것이고

이 데이터의 문자열들은 factor가 아니라 character로 저장해야 하니까

stringsAsFactorsF로 주면 되겠네요!

이렇게 입력하고 실행시켜보면

데이터프레임 형태로 아주 이쁘게 읽히는 것을 볼 수 있습니다!

데이터의 문자열들을 factor가 아닌 character로 저장하라는 인수를 주었으니

제대로 저장됐는지 한번 확인해볼까요?

문자열 데이터들이 모두 character로 잘 저장이 되었습니다!

 

만약 read.csv 함수를 사용할 때 stringsAsFactors=F를 주지 않으면 저 character들이 factor가 되니 꼭 유의하세요!

 

read.table()

세번째 함수로는 read.table 함수가 있습니다!

read.table 함수도 테이블 형식으로 저장된 파일을 데이터프레임으로 불러오는 함수입니다.

 

, 그렇다면 앞서 배운 read.csv와 다른 점이 무엇일까요??

사실 read.csv() read.table()에 기반을 둔 함수로서,

.csv파일은 각 열마다 구분을 ","(comma)로 구분하는데,

매번 read.table()로 할 때마다 sep=","을 주기 귀찮고, .csv파일이 많기 때문에 별도로 준 함수입니다.

따라서 read.table이 상위 함수이고, 많이 사용하는 .csv 파일을 읽기 위해 read.csv 함수를 만든 것이죠!!

read.csv를 입력 후 엔터를 쳐보면

밑에 read.table이 뜨는 거 보이시죠?

그래서 read.table을 사용할 때는 인수 separator를 꼭 지정해 주어야 합니다!

 

파일 출력 함수 wirte.table(), wirte.csv()
그럼 이제 파일을 출력하는 함수들을 보도록 하겠습니다!!
먼저 wirte.csv()라는 함수가 있는데요!
table
형태의 2차원 데이터를 파일을 생성해서 저장합니다!

write. table (variable,” filename”, sep= “”, row. names=)

이렇게 사용하는데요!
각각의 인수를 살펴보면

이렇습니다.

그리고 배울 함수가 역시나 wirte.csv() 함수인데

이 함수 역시 write.table의 하위 함수인 거 이제는 감이 오시죠??

데이터 프레임을 csv로 저장해줍니다!

이 함수를 이용해 데이터프레임을 저장하고 나면

현재 작업 위치와 같은 디렉터리에

지정한 파일명으로 파일이 생기는데요!

확인해보면 잘 출력된 것을 알 수 있습니다!!

 

오늘은 이렇게 해서 기본적인 입출력 함수와 파일의 입력과 출력을 하는 방법에 대해서 알아보았습니다!!!