반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 결정트리
- 영국석사
- 판다스
- HTML
- 윈도우함수
- 머신러닝
- 런던
- 다항회귀
- SQL
- 유학생
- 코딩공부
- matplotlib
- sql연습문제
- 코드잇 TIL
- CSS
- 코딩독학
- 로지스틱회귀
- 경사하강법
- 코딩
- 코드잇
- 나혼자코딩
- 코드잇TIL
- 행렬
- 오늘도코드잇
- 선형회귀
- for반복문
- Seaborn
- 데이터분석
- 파이썬
- numpy
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) 파이썬으로 텍스트 데이터 정제하기 본문
728x90
반응형
지난 글에 이어서 간단한 예시로 텍스트 데이터를 정제해보겠습니다.
(데이터분석) 파이썬으로 텍스트 데이터 정제 함수 만들기
1. 텍스트 데이터 정제 함수 만들기import nltkfrom nltk.tokenize import word_tokenizefrom collections import Counterfrom text import TEXTnltk.download('punkt')corpus = TEXTtokenized_words = word_tokenized(corpus)#등장 빈도 기준 정제 함
life-of-nomad.tistory.com
import pandas as pd
txt_data = pd.read_csv('text_data.csv')
1. Nomalize data 정규화
txt_data.head()
- post 열은 기술에 대한 소셜 미디어 게시물을 나타내며 sentiment 열은 해당 텍스트의 정서가 긍정적인지, 부정적인지, 중립적인지를 나타냅니다.
- 이 데이터 형식을 컴퓨터가 읽을 수 있는 형식으로 변환하기 위해서는 먼저 텍스트를 표준 형식으로 변환해야 합니다.
- 모든 문자를 소문자로 변환해보겠습니다. => 대소문자 정규화
- pandas에서는 series 데이터 뒤에 .string.capitalize를 추가해 이 작업을 수행할 수 있습니다.
- 여기서 series는 DataFrame의 post 열입니다.
txt_data['post'] = txt_data['post'].str.capitalize()
txt_data['post']
- 그 다음, 구두점을 삭제해보겠습니다.
- 구두점을 제거할 때는 정규 표현식을 사용하면 됩니다. 이 정규 표현식은 마침표, 느낌표 등의 모든 문장부호를 나타냅니다.
- .str.replace 메서드에 이 정규표현식을 입력함으로써 모든 구두점을 빈 문자열로 교체합니다.
txt_data["post"] = txt_data['post'].str.replace('[^\w\s]', '')
txt_data["post"]
- 그 다음, pandas의 문자열 메서드인 str.contains로 할 수 있는 작업에 대해 알아보겠습니다.
- 먼저, .loc를 사용해 텍스트 DataFramedp 액세스 합니다.
- 그 다음, post 열의 문자열에 data sceince라는 단어가 포함되어 있는지를 확인합니다.
- 이 단어가 포함되어 있다면 topic이라는 이름의 새로운 열을 만들고 그 행의 값을 data sceince로 지정합니다.
txt_data.loc[txt_data['post'].str.contains('data sceince'), 'Topic'] = 'data science'
txt_data.head()
- 이제, post 열에 존재하는 소셜 미디어 게시물에서 data sceince 라는 단어가 등장할 때마다 topic 열의 해당하는 행에 값이 채워질 것입니다.
- 이런 코드를 사용하면 각종 텍스트에서 특정 문자 시퀀스를 자동으로 추출할 수 있습니다.
2. Tokenize data
- 이제, a, the, is 등과 같이 별다른 가치가 존재하지 않는 불용어(stopword)를 제거해야 합니다.
- (불용어 제거 방법은 이전 글에 있습니다)
- 예를 들어, gone을 모두 go로 변형하는 것입니다.
- 이러한 작업을 어간 추출(stemming)이라고 합니다.
- 제일 먼저 단어를 토큰화해야 합니다.
import nltk
nltk.download('punkt')
#DataFrame txt_data에서 인덱싱으로 post열을 지정한 다음
#apply 함수로 nltk의 word_tokenize 메서드를 적용해 문자열을 하위 문자열로 구성된 리스트로 만들어 단어 추출
#txt_data DaraFrame에서 token이라는 새로운 열 생성
txt_data["token"] = txt_data["post"].apply(nltk.word_tokenize)
txt_data
- 결과를 보면 토큰화된 텍스트가 문자열 리스트로 token 열에 입력되어 있습니다.
3. Vectorize data 벡터화
- 이 예시에서는 scikit-learn을 사용하겠습니다.
from sklearn.feature_extraction.txt import CountVectorizer
#CountVectorizer의 인스턴트 생성
vectorizer = CountVectorizer()
#post열에 존재하는 텍스트 벡터화
#텍스트 문서의 모음을 토큰별 개수를 나타내는 행렬로 반환
#fit_transform 함수 호출
#fit부분 : 입력된 텍스트 데이터를 기반으로 어휘 사전 구축
#transform : 어휘 사전 기반으로 입력된 텍스트 데이터를 숫자 형식으로 변환
#즉, 토큰화와 벡터화 작업 자동으로 차례로 수행하므로 정규화된 문자열로 구성된 post열에 대해 직접 사용 가능
words_matrix = vectorizer.fit_transform(txt_data["post"].values)
#.toarray함수를 사용해서 희소 행렬의 형태로 인코딩된 벡터의 결과물 확인
words_matrix.toarray()
- 이 결과를 더욱 보기 좋게 하기 위해 벡터를 DaraFrame으로 나타내고
- vectorizer.get_feature_names를 사용해 각 변수의 이름 표시
counts = pd.DataFrame(words_matrix.toarray(), columns=vectorizer.get_feature_names_out())
counts
- 이제 post 열에 존재하는 값들이 텍스트를 구성하는 어휘들로 인코딩되었으며 개별 문서에서 각 단어가 등장하는 횟수가 정수로 나타나 있다는 것을 알 수 있습니다.
- 이 words_matrix 배열은 머신 러닝 모델에 곧바로 전달하여 sentiment 열에 나타난 정서를 예측하는 모델 등을 훈련하는 데 사용할 수 있습니다.
- 또한, vocabulary 속성은 위 DaraFrame의 각 열에 대응하는 어휘 사전 내의 각 단어에 대한 인덱스를 보여줍니다.
- 어휘 사전의 각 단어에는 기본적으로 고유의 정수 인덱스가 할당됩니다.
print(vectorizer.vocabulary_)
728x90
반응형
'코딩공부 > Data analysis' 카테고리의 다른 글
(데이터분석) 데이터 정제 결과를 시각적 방식과 프로그래밍 방식으로 테스트하기 (0) | 2024.05.21 |
---|---|
(데이터분석) 파이썬으로 timeseries 시계열 데이터 정제하기 (0) | 2024.05.21 |
(데이터분석) 파이썬으로 텍스트 데이터 정제 함수 만들기 (0) | 2024.05.20 |
(데이터분석) Scikit-Learn 사이킷런으로 데이터 전처리하기 (0) | 2024.05.20 |
(데이터분석) 파이썬으로 데이터 정제하기 (0) | 2024.05.19 |