정형/비정형 데이터
- 정형 데이터(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 |