안녕하세요?
히든그레이스 데이터분석팀입니다. 😉
(* 불용어(Stop word) - 텍스트에서 큰 의미가 없는 단어들을 말한다. 텍스트를 전처리하기 위해서는 이러한 의미 없는 단어들을 제거하는 과정이 필요하다.)
이번 포스팅에서는 불용어 사전을 사용해서 원하는 단어만 골라 제거하려고 합니다.
그런데 불용어를 제거하기 전에 성별, 연령, 지역 등의 분류 작업을 모두 끝내는 것이 좋습니다.
왜냐하면 불용어 제거 작업의 특성상 결과를 확인하면서 반복적인 작업이 필요하며 나중에 불용어사전이 바뀌게 될 가능성도 고려해야 하기 때문에 다른 일회성 작업들을 모두 완료한 뒤에 불용어 제거를 해야 작업 단계를 최소화할 수 있습니다.
이번에 사용하는 설문조사 데이터에는 응답시간, 소요시간, 성별, 연령, 거주지역, 응답에 사용한 기기와 접속환경 등 많은 정보들이 들어있습니다.
저는 이 중에서 성별과 연령을 택해서 범주별로 구분하였고, 연령은 10대부터 60대 이상까지 10살 단위로 구분하도록 하겠습니다.
그렇게 구분한 결과들 중에서 남성 카테고리의 단어 순위를 살펴보면 다음과 같습니다.
순위 | 생각난 이미지 | 빈도 |
1 | 가수 | 1733 |
2 | 귀엽다 | 1329 |
3 | 노래 | 1237 |
4 | 하다 | 990 |
5 | 국민 | 881 |
6 | 여동생 | 818 |
7 | 고음 | 765 |
8 | 청순 | 754 |
9 | 이쁘다 | 753 |
10 | 청순하다 | 669 |
11 | 이미지 | 652 |
12 | 예쁘다 | 640 |
13 | 좋다 | 635 |
여기에서는 4위 항목의 ‘하다’ 와 13위 항목의 ‘좋다’ 가 불용어가 되겠습니다.
이 단어들을 사이킷런 CountVectorizer 함수의 인수 중 stop_words에 리스트로 넣어주면 해당 단어들은 카운트하지 않게 됩니다.
그렇게 제거한 결과를 그래프로 나타내 보겠습니다.

‘하다’, 와 ‘좋다’ 가 순위에서 사라지고 대신 ‘상큼’과 ‘착하다’ 단어가 들어왔습니다.
이처럼 불용어를 설정하여 특정 단어를 제외하면 제외된 만큼의 새로운 단어가 순위에 들어오게 됩니다.
만약 새로 들어온 단어에도 불용어가 포함되어 있다면 그 단어도 stop_words에 포함시킵니다.
이렇게 해서 불필요한 단어가 더 이상 나오지 않을 때까지 작업을 반복하면 됩니다.
위 예시에서는 13위까지의 순위만 가져왔지만 실제 작업 시에는 더 많은 순위에 대한 분석이 필요합니다.
수치가 정해져 있지는 않지만 분석의 정확도와 시간을 고려하여 적당한 순위를 결정하시면 되겠습니다.
첫 번째 설문에 대한 작업은 대부분 마무리되었습니다.
그런데 단어가 아닌 문장 형태로 들어오는 데이터에 대해서는 추가적인 작업이 필요합니다.
이번 분석의 경우는 두 번째 설문인 ‘왜 그 이미지가 떠올랐는지 이유를 적어주세요’에 대한 응답이 문장 형태로 되어 있는 경우가 많습니다.
지금까지의 분석 결과는 문장을 모두 쪼갠 단어 형태로 되어 있는데 두 번째 설문의 분석 결과는 그 단어들을 묶어서 다시 문장으로 만들어야 합니다.
다음 시간에는 N-gram을 사용하여 연관성이 있는 단어들을 연결시키는 작업을 하도록 하겠습니다.
안녕하세요?
히든그레이스 데이터분석팀입니다. 😉
(* 불용어(Stop word) - 텍스트에서 큰 의미가 없는 단어들을 말한다. 텍스트를 전처리하기 위해서는 이러한 의미 없는 단어들을 제거하는 과정이 필요하다.)
이번 포스팅에서는 불용어 사전을 사용해서 원하는 단어만 골라 제거하려고 합니다.
그런데 불용어를 제거하기 전에 성별, 연령, 지역 등의 분류 작업을 모두 끝내는 것이 좋습니다.
왜냐하면 불용어 제거 작업의 특성상 결과를 확인하면서 반복적인 작업이 필요하며 나중에 불용어사전이 바뀌게 될 가능성도 고려해야 하기 때문에 다른 일회성 작업들을 모두 완료한 뒤에 불용어 제거를 해야 작업 단계를 최소화할 수 있습니다.
이번에 사용하는 설문조사 데이터에는 응답시간, 소요시간, 성별, 연령, 거주지역, 응답에 사용한 기기와 접속환경 등 많은 정보들이 들어있습니다.
저는 이 중에서 성별과 연령을 택해서 범주별로 구분하였고, 연령은 10대부터 60대 이상까지 10살 단위로 구분하도록 하겠습니다.
그렇게 구분한 결과들 중에서 남성 카테고리의 단어 순위를 살펴보면 다음과 같습니다.
순위
생각난 이미지
빈도
1
가수
1733
2
귀엽다
1329
3
노래
1237
4
하다
990
5
국민
881
6
여동생
818
7
고음
765
8
청순
754
9
이쁘다
753
10
청순하다
669
11
이미지
652
12
예쁘다
640
13
좋다
635
여기에서는 4위 항목의 ‘하다’ 와 13위 항목의 ‘좋다’ 가 불용어가 되겠습니다.
이 단어들을 사이킷런 CountVectorizer 함수의 인수 중 stop_words에 리스트로 넣어주면 해당 단어들은 카운트하지 않게 됩니다.
그렇게 제거한 결과를 그래프로 나타내 보겠습니다.
‘하다’, 와 ‘좋다’ 가 순위에서 사라지고 대신 ‘상큼’과 ‘착하다’ 단어가 들어왔습니다.
이처럼 불용어를 설정하여 특정 단어를 제외하면 제외된 만큼의 새로운 단어가 순위에 들어오게 됩니다.
만약 새로 들어온 단어에도 불용어가 포함되어 있다면 그 단어도 stop_words에 포함시킵니다.
이렇게 해서 불필요한 단어가 더 이상 나오지 않을 때까지 작업을 반복하면 됩니다.
위 예시에서는 13위까지의 순위만 가져왔지만 실제 작업 시에는 더 많은 순위에 대한 분석이 필요합니다.
수치가 정해져 있지는 않지만 분석의 정확도와 시간을 고려하여 적당한 순위를 결정하시면 되겠습니다.
첫 번째 설문에 대한 작업은 대부분 마무리되었습니다.
그런데 단어가 아닌 문장 형태로 들어오는 데이터에 대해서는 추가적인 작업이 필요합니다.
이번 분석의 경우는 두 번째 설문인 ‘왜 그 이미지가 떠올랐는지 이유를 적어주세요’에 대한 응답이 문장 형태로 되어 있는 경우가 많습니다.
지금까지의 분석 결과는 문장을 모두 쪼갠 단어 형태로 되어 있는데 두 번째 설문의 분석 결과는 그 단어들을 묶어서 다시 문장으로 만들어야 합니다.
다음 시간에는 N-gram을 사용하여 연관성이 있는 단어들을 연결시키는 작업을 하도록 하겠습니다.