Link
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 튜플
- 컨테이너
- 예측모델링
- 딕셔너리
- 파이썬입출력
- 빅데이터분석기사
- 행별속성합계
- 실기
- 공공빅데이터청년인턴
- dataq
- konlpy
- 빅분기실기
- 공빅데기관매칭
- 파이썬튜플
- 셋
- 워드클라우드
- 리스트
- 파이썬AHP
- 태블로
- 2회기출
- 파이썬딕셔너리
- set시간복잡도
- 파이썬
- 백준 2164
- 작업형2
- csv병합
- 공빅데
- 백준1920
- 빅분기
- 파이썬셋
- Today
- Total
Data Science
SNS 텍스트 분석(konlpy) 및 워드클라우드 - 랜덤표본 본문
sns 텍스트 분석¶
In [3]:
import csv
import pandas as pd
import tweepy
import konlpy
import sys
import numpy as np
from konlpy.tag import Okt
from collections import Counter
from wordcloud import STOPWORDS
from wordcloud import WordCloud
from IPython.display import Image
데이터 불러오기¶
In [99]:
# 데이터 불러오기
#df = pd.read_csv("TC_SN_NAMYANGJU__WEB_DOC_20210106142300/TC_SN_NAMYANGJU__WEB_DOC_20210106142300_sample.csv",encoding='cp949') #샘플
#df = pd.read_csv("TC_SN_NAMYANGJU__WEB_DOC_20210106142300/merge/TC_SN_NAMYANGJU__WEB_DOC_20210106142300_1.csv",encoding='utf-8') #1개
df = pd.read_csv("TC_SN_NAMYANGJU__WEB_DOC_20210106142300/merge.csv",encoding='utf-8') #전체
df.head(5)
C:\Users\user\anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3441: DtypeWarning: Columns (0) have mixed types.Specify dtype option on import or set low_memory=False.
exec(code_obj, self.user_global_ns, self.user_ns)
Out[99]:
수집인덱스 | 기준년월 | 수집채널명 | 수집URL | 제목 | 내용 | |
---|---|---|---|---|---|---|
0 | 1 | 2010-01 | NAVER_BLOG | https://cjy1016.tistory.com/1166 | 2010년 달라지는 세제주요내용 | 6;000가구);남양주진건(249만 1;000㎡; 약 1만 1;000가구) 등 총 ... |
1 | 2 | 2010-01 | NAVER_BLOG | http://blog.daum.net/hkch43/802 | 전국 명승지(156곳) | 남양주- 운길산 수종사 ☆ 74 . 강진 - 백련사와 동백 ☆ 75 . 영주.단양 ... |
2 | 3 | 2010-01 | NAVER_BLOG | http://blog.daum.net/hkch43/803 | 우리나라 산 명승지 및 중국 필리핀 외 | 백운산남양주:견우.직녀봉0308남양주:견우;직녀봉0406남양주:수종사.사능수목원남양... |
3 | 4 | 2010-01 | NAVER_BLOG | https://blog.naver.com/khai64?Redirect=Log&log... | 올 부동산시장 월별 이슈 | 이번에 예약을 받는 물량은 서울 내곡ㆍ세곡2; 부천 옥길; 시흥 은계; 구리 갈매;... |
4 | 5 | 2010-01 | NAVER_BLOG | https://blog.naver.com/khai64?Redirect=Log&log... | [2010년 전망] 경인년 새해 달라지는 부동산 제도 | 6;000가구);남양주진건(249만 1;000㎡; 약 1만 1;000가구) 등 총 ... |
In [100]:
print(df.columns.tolist())
['수집인덱스', '기준년월', '수집채널명', '수집URL', '제목', '내용']
In [101]:
df_copy = df
다시 실행¶
In [208]:
df = df_copy
'내용' 속성만 불러오기
In [209]:
df = df.loc[:,['내용']]
df.head(5)
Out[209]:
내용 | |
---|---|
0 | 6;000가구);남양주진건(249만 1;000㎡; 약 1만 1;000가구) 등 총 ... |
1 | 남양주- 운길산 수종사 ☆ 74 . 강진 - 백련사와 동백 ☆ 75 . 영주.단양 ... |
2 | 백운산남양주:견우.직녀봉0308남양주:견우;직녀봉0406남양주:수종사.사능수목원남양... |
3 | 이번에 예약을 받는 물량은 서울 내곡ㆍ세곡2; 부천 옥길; 시흥 은계; 구리 갈매;... |
4 | 6;000가구);남양주진건(249만 1;000㎡; 약 1만 1;000가구) 등 총 ... |
In [210]:
len(df)
Out[210]:
3382357
In [211]:
df = df.sample(n=50000) # 비복원 랜덤추출 5만개
len(df)
Out[211]:
50000
In [212]:
# 데이터프레임을 해제하여 리스트로 변환
df_list = df.values.tolist()
#df_list
In [213]:
# 이중리스트를 단일리스트로 변환
df_list = np.array(df_list).flatten()
#df_list
In [214]:
# 리스트를 해제 시키고 문자열 형태로 변환
df_str = "".join(df_list)
#df_str
In [215]:
# 문자열을 txt 형태로 저장
f = open("abc.txt","w",encoding='utf-8')
f.write(df_str)
f.close()
In [216]:
filename = "abc.txt"
f = open(filename,'r',encoding='utf-8')
words = f.read()
# okt 객체 생성
okt = Okt()
noun = okt.nouns(words)
for i,v in enumerate(noun):
if len(v)<2:
noun.pop(i)
count = Counter(noun)
f.close()
# 명사 빈도 카운트
noun_list = count.most_common(100)
for v in noun_list:
print(v)
('남양주', 48482)
('중고차', 10200)
('남양주시', 8352)
('구리', 8023)
('경기도', 6319)
('지역', 5793)
('서울', 4802)
('판매', 4498)
('경기', 4400)
('의정부', 4130)
('하남', 3657)
('분양', 3418)
('직거래', 3318)
('카페', 3095)
('가격', 3023)
('인천', 2957)
('거래', 2786)
('용인', 2576)
('광주', 2564)
('김포', 2536)
('수원', 2536)
('아파트', 2526)
('오늘', 2487)
('성남', 2452)
('위치', 2438)
('남양', 2398)
('안양', 2326)
('부천', 2271)
('포천', 2226)
('양주', 2207)
('파주', 2184)
('다산', 2082)
('시흥', 2067)
('사진', 2029)
('신도시', 2022)
('고양', 2013)
('안산', 1976)
('군포', 1895)
('별내', 1895)
('맛집', 1866)
('직접', 1865)
('화성', 1826)
('택배', 1810)
('가구', 1808)
('오산', 1785)
('양평', 1779)
('동두천', 1741)
('지구', 1707)
('진접', 1705)
('과천', 1675)
('의왕', 1672)
('중고', 1661)
('가평', 1591)
('강아지', 1591)
('일산', 1583)
('센터', 1552)
('평택', 1537)
('개인', 1480)
('광명', 1398)
('이천', 1395)
('타이어', 1360)
('시간', 1359)
('분당', 1321)
('매매', 1297)
('학원', 1283)
('결제', 1282)
('사용', 1246)
('방문', 1240)
('이번', 1229)
('제품', 1225)
('소개', 1219)
('차량', 1196)
('이사', 1181)
('가능', 1163)
('여주', 1156)
('부산', 1135)
('덕소', 1127)
('자동차', 1119)
('문의', 1117)
('핸드폰', 1116)
('안성', 1115)
('추천', 1111)
('단지', 1099)
('전문', 1095)
('지난', 1083)
('거주', 1062)
('상태', 1053)
('호평동', 1042)
('구리시', 1035)
('완료', 1034)
('사업', 1028)
('우리', 1019)
('업체', 986)
('출장', 983)
('연락', 962)
('구매', 961)
('설치', 953)
('아이', 949)
('화도읍', 945)
('곳', 939)
카운트된 명사들을 파일형태로 저장
In [217]:
# txt 파일에 저장
with open("noun_list.txt",'w',encoding='utf-8') as f:
for v in noun_list:
f.write(" ".join(map(str,v))) #튜플 int값을 str 타입으로 전환 후 조인
f.write("\n")
# csv 파일에 저장
with open("noun_list.csv","w", newline='',encoding='euc-kr') as f:
csvw = csv.writer(f)
for v in noun_list:
csvw.writerow(v)
워드클라우드 생성¶
불용어 처리
In [229]:
stopwords = {'남양주','남양','남양주시','경기도','경기','지역','서울','의정부','과천','분당',
'세곡','과천','위례신도시','지구','용인','광주','시흥','고양','김포','부천','파주',
'구리','포천','수원','인천','수원','개','예정','등','하남','여주','성남','양평','동두천',
'구리시','화성','안양','일산','의왕','일산','대구','광명','가평','안산','안성','지난','판매',
'거래','직거래','양주','오늘','오산','군포','부산','이천','중고','평택','구매','결제','연락',
'시간','대전','완료','상태','가능','직접','가격','문의','개인','사용','이번','곳'}
In [233]:
#help(WordCloud)
In [234]:
filename = "noun_list.txt"
f = open(filename,'r',encoding='utf-8')
words = f.read()
wc = WordCloud(font_path='C:\Windows\Fonts\맑은 고딕\malgun.ttf', \
background_color="white", \
width=500, \
height=500, \
max_words=200, \
max_font_size=150, \
stopwords=stopwords)
wordcloud_words = wc.generate(words)
wc.to_file('wordcloud.png') # 이미지 파일로 저장
Out[234]:
<wordcloud.wordcloud.WordCloud at 0x17de5165eb0>
In [235]:
Image('wordcloud.png')
Out[235]:
In [ ]:
In [ ]:
'데이터분석' 카테고리의 다른 글
SNS 텍스트 분석(konlpy) 및 워드클라우드 - 모양, 대용량 개선 (0) | 2021.11.08 |
---|---|
CSV 파일 병합 하기 (0) | 2021.10.21 |
형태소 분석 참고 링크 (0) | 2021.09.14 |
판다스 조건에 따라 행 삭제하기 (0) | 2021.08.28 |
가중치 적용, 총점, 순위 산정, folium 으로 지도에 나타내기 (0) | 2021.08.28 |
Comments