비정형 데이터 분석 중에서도 텍스트 중심으로 좀 살펴보겠습니다. 텍스트 데이터의 형태는 구조화된 문서(Document)와 구조화되지 않은 문서로 구분이 될 수 있습니다. 구조화된 문서에는 HTML, XML, CSV, JSON 같은 경우가 있겠구요 구조화되지 않은 문서에는 자연어(Natural Language)가 있습니다.
문자열(String)은 파이썬이나 R에서 작은 따옴표나 큰 따옴표로 감싸줍니다. 'hello world' 또는 "hello world" 이런 식이죠. 그리고 정수형 숫자도 "3" 이런식으로 감싸게 되면 문자열이 됩니다. 문자열은 또한 연산(더하기와 곱합기)가 가능합니다. 더하기를 하게 되면 문자를 합치는 결과가 나오게 되게, 곱하게 되면 문자열을 반복하게 됩니다.
string1 = "welcome"
string2 = ' to'
string3 = " python"
print('-'*17) # - 문자를 17번 반복
print(string1 + string2 + string3) # 문자열 합치기
print('-'*17)
print(len(string1)) #문자열 길이 구하기
print(len(string2))
print(len(string3))
이러한 문자열은 변수에 저장되면 인덱싱(Indexing)을 갖게 됩니다. 인덱스 번호를 이용하거나 해당 문자를 추출하거나 영역을 선택적으로 정의하여 추출할 수 있습니다.
string = "Let's go to the Hangang. Have a good time."
string[12]
string[12:23]
string[-10:-1]
't'
'the Hangang'
'good time'
파이썬에서는 위와 같은 형태로 양의 인덱스와 음의 인덱스를 갖습니다. 파이썬은 0부터 인덱스가 시작하니 착오없으시기 바랍니다. (R은 1부터 시작합니다.) [12:23]의 경우 12번째인 t에서 23번째인 . 앞에까지를 의미하게 됩니다. [12:] 이와 같이 이 쓰는 경우는 12번째에서 끝까지로 이해하시면 되구요, [:12] 이런경우 처음부터 11번째까지라고 보시면 됩니다.
문자열과 관련된 다양한 함수가 있습니다. 대문자로 바꾸기, 소문자 바꾸기, 인덱스 확인, 총길이 확보 및 정렬, 문자열 치환 , 공백 삭제 등 원하는 상황에 맞춰 잘 활용할 수 있겠습니다.
함수 | 기능 | 사용 예 |
upper() | 문자열을 대문자로 변경 | print(string.upper()) |
lower() | 문자열을 소문자로 변경 | print(string.lower()) |
ljust() | 총 길이를 확보하고 문자열을 왼쪽 정렬 | print(string.ljust(100)) |
rjust() | 총 길이를 확보하고 문자열을 오른쪽 정렬 | print(string.rjust(100)) |
center() | 총 길이를 확보하고 문자열을 가운데 정렬 | print(string.center(100)) |
count() | 문자열에서 입력받은 문자열과 일치하는 것의 개수 반환 | print(string.count('go')) |
index() | 문자열에서 입력받은 문자가 처음으로 나온 위치를 반환 | print(string.count('c')) |
replace() | 문자열의 첫 입력 문자열을 나중 입력문자열로 치환 | print(string.replace('python', 'R') |
join() | 문자열의 요소들 사이에 sep(, 또는 공백)을 삽입해 구분 | '-'.join(['apple', 'grape']) |
strip() | 문자열의 양쪽의 하나 이상 연속된 공백 모두 삭제 | string.strip('#') |
lstrip() | 문자열의 왼쪽의 하나 이상 연속된 공백 모두 삭제 | string.lstrip('#) |
rstrip() | 문자열의 오른쪽의 하나 이상 연속된 공백 모두 삭제 | string.rstrip('#) |
print 함수를 사용하여 문자열을 출력할때 출력 형식을 정의 할 수 있습니다.
name = '홍길동'
age = 20
print("제 이름은 %s이고, %d 세 입니다." %(name, age))
print("제 이름은 {}이고, {} 세 입니다.".format(name, age))
print(f"제 이름은 {name}이고, {age} 세 입니다.")
제 이름은 홍길동이고, 20 세 입니다.
여기서, %s는 문자열(String)이고 %c는 문자 1개(Character), %d는 정수(Integer), %f는 부동소수(floating-point), %o는 8진수, %xs는 16진수 %% Literal %(문자 % 자체) 로 사용할 수 있습니다.
이탈문자를 사용하여 문자열을 출력할때 아래와 같은 규칙을 따릅니다.
코드 | 설명 |
\n | 문자열 줄바꿈 |
\t | 문자열 사이의 탭간격 |
\\ | 문자 \를 출력 |
\' | 작은따옴표 출력 |
\" | 큰 따옴표 출력 |
\r | 캐리지 리턴 : 현재 커서를 가장 앞으로 이동 |
\g | 폼 피드 : 현재 커서를 다음 줄로 이동 |
\s | 벨소리 : '삑'소리 출력 |
\b | 백스페이스 |
\000 | 널문자 |
텍스트 데이터의 문자열을 처리하기 위한 기본적인 내용으로 정리해 보았습니다. 텍스트 분석을 위한 길은 멀지만 하나하나 차근히 나아가 보려고 합니다.
워드 클라우드로 표현하는 실습을 한번 해보시면 좋을 것 같아요
!pip install matplotlib pandas wikipedia wordcloud
import wikipedia
wiki = wikipedia.page('Artificial intelligence') # 위키 백과사전의 컨텐츠 제목 명시
text = wiki.content # 해당 페이지 텍스트 컨텐츠 추출
from wordcloud import WordCloud, STOPWORDS
#불용어처리
s_word = STOPWORDS.union({'one', 'using', 'first', 'two', 'make', 'use'})
# 워드 클라우드를 생성하기 위해 위의 코드를 삽입
wordcloud = WordCloud(width = 2000, height = 1500, stopwords = s_words).generate(text)
import matplotlib.pyplot as plt
plt.figure(figsize = (40, 30))
#화면에 이미지를 그려준다
plt.imshow(wordcloud)
plt.show()
본 내용은 구자환 교수님의 강의를 기반으로 하였습니다.
공감과 구독은 제게 많은 힘이 될 듯 합니다. !!!
'하얀눈으로 IT' 카테고리의 다른 글
PowerMockup (1) | 2023.11.03 |
---|---|
비정형 데이터 분석 - 정규 표현식을 이용한 문자 추출 (0) | 2022.09.28 |
[파이썬] 파이썬 도구(아나콘다-Jupyter Notebook) (0) | 2022.09.19 |
비정형 데이터 분석 기본 - 빅데이터와 데이터의 종류 (0) | 2022.09.07 |
댓글