[R_bigdata] 파일 데이터 읽어오고, 조건에 맞춰 조회하기

파일 데이터를 읽어오고 , 조건에 맞춰 검색하는 방법에 대해 알아본다.
파일 데이터는 웹 또는 저장장치의 경로를 통해 읽어오게 되는데, 여기서 절대적 경로와 상대적 경로의 개념을 확인하는 것이 중요하다. 조건에 맞춰 찾는 방법으로는 grep() 메서드를 활용하게 된다. grep을 통해 문자열 탐색, 문자 길이 탐색 등을 할 수 있다.

#day03_01_file

##fruit 변수에 벡터를 만들어라라
fruits<-c('apple','mango','banana','Apple','pineapple')
fruits

#특정 조건 검색
#grep(찾을 조건, 대상)

#fruit 벡터에 apple이라는 문자가 포함된  데이터가 존재하는지 검색

#대소문자를 구분하여 검색한다.
grep('apple',fruits) # 1 5 를 리턴한다. 다만 여기서 5는 pineapple의 'apple'을 의미한다.

#대소문자를 구분하지 않도록 옵션을 지정하기(ignore.case = TRUE)
grep('apple',fruits,ignore.case = TRUE) # 1 4 5 리턴

#실습
#fruits 에서 a가 포함되는 데이터만 검색해보라
grep('a',fruits,ignore.case = TRUE)
#위치가 아닌 데이터를 조회해라
a<-grep('a',fruits,ignore.case = TRUE)
a
fruits[a]
fruits[grep('a',fruits,ignore.case = TRUE)]
fruits[grep('a',fruits)]

#시작과 끝값을 이용해서 검색하기
#a로 시작하는 조건 값 검색하기기
grep('^a',fruits,ignore.case = TRUE) #1 4 리턴
grep('^a',fruits) #1 리턴
grep('^A',fruits) #4 리턴
grep('^a',fruits,ignore.case = T) #1 4 리턴

#끝값으로 검색
##e로 끝나는 값 검색하기
grep('e$',fruits) #1 4 5
fruits[grep('e$',fruits)] # "apple"     "Apple"     "pineapple"

#실습
#fruits에 숫자 1개, 논리형 1개를 임의로 추가해라
fruits<-c(fruits,123,T)  #벡터에 데이터를 추가하는 방법, 이 외에도 인덱스를 통해 대입하는 방법도 있다.
fruits

#fruits에서 숫자로 변환될  수 있는 데이터만 조회
grep('\\d',fruits)
fruits[grep('\\d',fruits)] #현재 벡터 내부에 문자형태로 존재하고 있지만 숫자로 변환될 수 있는 데이터를 조회했다.

#fruits에서 문자만 조회
grep('\\D',fruits)
fruits[grep('\\D',fruits)]

#임의의 텍스트 수를 지정하여 찾기
#7글자 이상인 데이터만 조회해라
grep('.......',fruits) # '.' 의 개수 유의
#'.'은 글자 1개를 대체하는 의미

#a 이전의 글자 수가 2개 이상인 경우만 검색해라
grep('..a',fruits) #a앞의 '.' 개수 확인

#파일 불러오기(2가지)
#절대적 : 기준점이 없이 대상의 위치가 고정된 상태로 설명
#상대적 : 대상의 위치를 어떤 기준점으로부터 설명

#1.절대적 경로를 이용한 데이터 불러오기
#비정형 데이터 읽기
#readLines(경로)
readLines('G:/내 드라이브/Bigdata_AIB/r_src_koreait/r_src/eclass.txt')
readLines('c:/dev/eclass.txt')

#2.상대적 경로를 이용한 데이터 불러오기
#현재의 R경로 확인하기
getwd() #"G:/내 드라이브/Bigdata_AIB/r_src_koreait/r_src" 리턴

readLines('eclass.txt') #getwd()의 값 자동으로 인식
readLines('text/eclass.txt')
readLines('../../eclass.txt') #../ 뒤의 경로로 이동
#setwd(경로) 를 이용하여 변경하면 위의 코드는 에러가 발생할 것이다.기준이 되는 디렉토리가 변경되었기 때문이다.

#네트워크상의 데이터 읽어오기
#네트워크의 데이터는 무조건 변수에 저장하기
txt1<-readLines('https://raw.githubusercontent.com/luxdolorosa/data_set/master/etc/movie_review_01.txt')
txt1

#실습
#txt1의 데이터 중 40글자 이상인 데이터만 보여줘라
strrep('.',40) #함수 활용
grep(strrep('.',40),txt1)
txt1[grep(strrep('.',40),txt1)]

#txt1데이터 중 20글자 이면서 영화라는 단어가 포함된 데이터만 조회
#20글자 이상인 것들
a<- grep(strrep('.',20),txt1)
#영화라는 단어가 포함된 것들
b<- grep('영화',txt1)

intersect(a,b) #교집합 함수 활용
txt1[intersect(a,b)]

댓글