반응형
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 |
Tags
- 결정트리
- CSS
- Seaborn
- 오늘도코드잇
- sql연습문제
- 파이썬
- 코딩
- 영국석사
- 선형회귀
- 다항회귀
- matplotlib
- 코드잇TIL
- 나혼자코딩
- numpy
- 유학생
- 판다스
- 코드잇
- 코드잇 TIL
- 경사하강법
- 런던
- 머신러닝
- 코딩공부
- 데이터분석
- 행렬
- 윈도우함수
- 로지스틱회귀
- HTML
- SQL
- for반복문
- 코딩독학
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) 파이썬으로 텍스트 데이터 정제하기 본문
728x90
반응형
지난 글에 이어서 간단한 예시로 텍스트 데이터를 정제해보겠습니다.
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 |