본문 바로가기

R

4. 비정형 데이터와 텍스트마이닝

정형/비정형 데이터

  • 정형 데이터(structured data) : 일정한 규격이나 형태를 지닌 데이터. 우리가 흔히 사용해왔던 데이터들처럼 동일한 하나의 속성을 가진 데이터들이 행 또는 열을 기준으로 정리돼 있는 데이터 ex) 나이(integer), 이름(string), 성별(string or integer)
  • 비정형 데이터(unstructured data) : 정형 데이터와 달리 일정한 규격이나 형태를 지니지 않은 데이터. 그림과 영상, 문서, 음성처럼 각각의 형태와 구조가 다른 데이터
  • 반정형 데이터 : 더 세부적으로 나눌 경우!

 

데이터 마이닝

- 빅데이터의 등장으로 자료의 양이 커지고 복잡해짐으로써 자동화된 분석이 필요해짐

- 신경망, 군집분석, 의사결정나무 등 빅데이터 분석 기법 적용해 자료의 정보 요약과 미래 예측을 목표로 함

- 자료에 존재하는 관계, 패턴, 규칙 등을 탐색하고 이를 통계적으로 모형화함으로써 이전에는 알려지지 않은 유용한 지식을 추출하는 일련의 과정

 

텍스트 마이닝

- 정보 검색, 데이터 마이닝, 기계 학습(machine learning), 통계학, 컴퓨터 언어학(computational linguistics) 등이 결합된 학제적(interdisciplinary)인 분야

- 신문기사 등 디지털 자료로부터 유용한 정보를 획득하는 과정

- 입력 텍스트의 구조화, 구조화, 패턴 검색, 결과 해석과 평가로 이뤄짐

- 텍스트 분류, 군집화, 감성분석, 요약, 관계 모형화 등에 적용됨

- 텍스트 마이닝의 종류 : 문서 분류(document classification), 문서 군집(document clustering), 메타데이터 추출(metadata extraction), 정보 추출(information extraction) 등

 

정규표현식(regex)

- 특별한 텍스트 특정 규칙을 가진 문자열의 집합을 표현하는 언어

- 핸드폰 번호의 정규표현식 : 000-0000-0000

 

문자열 데이터

문자열 데이터 생성

- "" 또는 ''로 만들 수 있음

- 따옴표를 닫는 것을 잊었다면 esc로 종료 후 실행하기

- 종료하지 않으면 오랫동안 돌아가다가 오류 메시지 발생함. 문자열 처리는 빠르기 때문에 일정 시간 경과 후에도 처리가 안 되면 오류로 파악하고 종류 후 수정해 실행하는 걸 권장

 

GIGO : garbage - in garbage - out 

 

stringr 패키지 활용한 전처리

3️⃣ Stringr 패키지

- 문자열이 보통 반정형, 비정형 데이터를 포함한 경우가 많은데 Stringr 패키지는 문자열을 처리하는데 유용하게 쓰이는 함수를 포함하고 있음

 

1) 문자열 합치기

str_c("문자", "문자", sep="기호") # sep은 생략 가능
paste("문자", "문자", sep="") #기본값이 공백 있게 나와서 공백을 없애려면 sep넣어야 함

- pas1 <- paste("x","y",sep="")의 출력값은 xy

 

2) 문자열 길이

str_length("문자열" 혹은 데이터)
nchar("문자열" 혹은 데이터)

 

3) 문자열 특정 부분 추출

str_sub(문자열, start, end)

- start와 end는 추출할 문자열의 시작과 끝 위치를 나타냄

- 데이터에서 1,3번째 글자를 추출하고 싶으면 str_sub(데이터, 1,3)

 

4) 문자열 대,소문자 변환

- 컴퓨터는 문자열의 대, 소문자를 구분해 다른 문자열로 파악함

- 따라서 모두 소문자나 대문자로 바꿔 같은 문자열로 바꿔야 함

str_to_lower("문자열") #모든 문자를 소문자화
str_to_title("문자열") #첫 문자만 대문자, 다음 문자는 소문자화
str_to_upper("문자열") #모든 문자를 대문자화
casefold("문자열", upper=TRUE, FALSE) #upper=TRUE는 대문자화, FALSE는 소문자화

ex.

#패키지 호출
library(stringr)
library(dplyr)

#1) 모든 문자를 소문자화 
low <- sentences %>%
    head() %>%
    str_to_lower()

#2) 첫 문자만 대문자, 다음 문자는 소문자
title <- sentences %>% 
  head() %>% 
  str_to_title()

#3) 모든 문자를 대문자화
up <- sentences %>% 
  head() %>% 
  str_to_upper()

#4) casefold 함수를 사용해 모든 문자를 대문자화
case <- sentences %>% 
  head() %>% 
  casefold(upper = TRUE)

 

 

5) 문자열 정렬

str_sort("문자열") #문자열 정렬에 사용
str_order("문자열") #정렬한 문자의 순위를 출력

- 옵션에 decreasing=TRUE를 사용하면 내림차순으로 정렬됨

- local="나라명"을 입력하면 입력한 나라 기준으로 정렬

- numeric=TRUE를 입력하면 숫자 기준으로 정렬됨

ex. 패키지 호출부터 문자열 내림차순으로 정렬하기

# 패키지 호출
library(stringr)
library(dplyr)

# 문자열 정렬
so <- sentences %>% 
  head() %>% 
  str_sort()

#파이프라인 함수 미사용
so <- str_sort(head(sentences))

# 내림차순으로 정렬
so_de <- sentences %>% 
  head() %>% 
  str_sort(decreasing = TRUE)

#파이프라인 함수 미사용
so_de <- str_sort(head(sentences), decreasing = TRUE)

- 문자열 정렬 순위 구하기

#파이프라인 함수 사용 
or <- sentences %>% 
  head() %>% 
  str_order()

#파이프라인 함수 미사용
or <- str_order(head(sentences))

 

6) 조건에 맞는 문자열을 출력할 때

str_subset(문자열, "조건")  #조건을 포함한 문자열 전체 출력
grep(pattern="조건", x=문자열, value=TRUE)  #조건을 포함한 문자열 전체 출력
str_detect(문자열 "조건") #조건 포함 유무에 따라 논리형(TRUE/FALSE) 출력

- str_extract()는 중복 값을 뽑아내지 않음

- 이 단점을 보완한 함수가 str_extract_all()

 

7) 조건에 맞는 문자열 변환

str_replace(문자열, "기존문자", "바꿀문자") 
str_replace_all(문자열, "기존문자", "바꿀문자")
gsub("기존문자", "바꿀문자", 문자열)

ex1. 조건에 맞는 문자열 전체 출력해 set에 저장하고 내장함수인 grep를 사용해서도 같은 결과가 나오는지 확인해 grp에 저장하기

#패키지 호출
library(stringr)
library(dplyr)

# 1) The 가 포함되어 있는 문장 출력
set <- sentences %>% 
  head() %>% 
  str_subset("The")

#파이프라인 함수 미사용 
set <- str_subset(head(sentences),"The")


# 내장함수인 grep을 사용해 같은 결과값 확인하고 grp에 저장하기 
grp <- sentences %>% 
  head() %>% 
  grep(pattern  = "The", value = TRUE)

#파이프라인 함수 미사용
grp <- grep(x = head(sentences), pattern = "The", value = TRUE)


# 전체 문장들과 비교 
sentences %>% 
  head() 

# 2) 조건에 맞는 문자열 논리형 출력
det <- sentences %>% 
  head() %>% 
  str_detect("The")

#파이프라인 함수 미사용
det <- str_detect(head(sentences),"The")

ex2. sentences 데이터에 "the"문자가  포함돼 있다면 이를 "-"로 변환하는 실습

① str_replace() 사용하기

#파이프라인 함수 사용 
rep <- sentences %>% 
  head() %>% 
  str_replace("the", "-")

#파이프라인 함수 미사용
rep <- str_replace(head(sentences),"the", "-")

- 두 번째 문장을 보면 "the"가 두 번 나오는데, 첫 번째 "the"만 대체됨. 이럴 때 사용하는 함수가 str_replace_all()

 

② str_replace_all()

#파이프라인 함수 사용 
rep_all <- sentences %>% 
  head() %>% 
  str_replace_all("the", "-")

#파이프라인 함수 미사용
rep_all <- str_replace_all(head(sentences),"the", "-")

③ 내장함수 gsub 함수를 활용해볼 수도 있다.

#파이프라인 함수 사용 
sub <- sentences %>% 
  head() %>% 
  gsub("the", "-",.)

#파이프라인 함수 미사용
sub <- gsub("the", "-",head(sentences))

-> 2번의 str_replace_all과 같은 결과값을 도출할 수 있음

 

8) 문자열 나누기

str_split(문자, "분할 기준")

- 일치하는 문자열을 나누기

ex.

① 띄어쓰기를 기준으로 나누기

#파이프라인 함수 사용 
spl <- sentences %>% 
  head() %>% 
  str_split(" ")

#파이프라인 함수 미사용
spl <- str_split(head(sentences), " ")

- 코드 결과가 리스트로 변환되는데, 이를 매트릭스(행렬)로 변환하고 싶으면 옵션으로 simplify=TRUE를 주면 됨!

② 결과 값을 행렬 형태로 바꾸기

#파이프라인 함수 사용 
sim <- sentences %>% 
  head() %>% 
  str_split(" ", simplify = TRUE)

#파이프라인 함수 미사용
sim <- str_split(head(sentences), " ",  simplify = TRUE)

'R' 카테고리의 다른 글

3. 패키지_ggplot2  (0) 2022.07.14
2. 패키지_dplyr  (0) 2022.07.14
1. 데이터/데이터 분석이란?  (0) 2022.07.14
1-3. 데이터 형식  (0) 2022.06.25