워드클라우드를 이용한 커뮤니티 제목 시각화
Python을 활용한 커뮤니티 데이터 수집및, 정규화, 분석 시각화
Github 주소
1. 사용된 기술
- BeautifulSoup를 이용한 커뮤니티 크롤링과, 데이터 추출
- KoNLPyf를 이용한 한국어 데이터 전처리
- pandas를 이용한 데이터 저장
- NLTK를 이용한 자연어 처리
- WordCloud를 이용한 데이터 시각화
2. 코드 분석
2.1 BeautifulSoup를 이용한 크롤링, 데이터 추출
for i in range(100):
url = "https://www.inven.co.kr/board/lostark/4811?my=chu&p="+str(i)
# url = "https://www.inven.co.kr/board/lostark/4811?p="+str(i)
response =requests.get(url)
source = response.text
soup=bs(source,"html.parser")
list = soup.select("#new-board > form > div > table > tbody > tr")
for li in list:
title = li.select_one("td.tit a").contents[2].strip()
date = li.select_one("td.date").text
if ':'in date:
date = today
최대 백번까지 돌렸다.
2.2 KoNlPyf를 이용한 한국어 데이터 전처리
if ':'in date:
date = today
date = date[0:3]+str(((int(date[3:5])-1)//5)*5+1)
nounss = okt.nouns(title)
tmp = []
for noun in nounss:
if(len(noun)>1):
tmp.append(noun)
if date in db.keys():
db[date]+=tmp
else:
db[date] = tmp
date의 종류가 두가지 있는데, 48시간 이내 글에는 12:34 이렇게 시간으로 표시되고, 그 이후 글에는 03.12 이렇게 날짜로 표시된다. 3일마다 끊어서 db Object에 저장
2.3 pandas를 이용한 데이터 저장
data = pd.DataFrame.from_dict(db, orient='index')
# print(data)
path="C:/Users/user/Desktop/kang/htmlPr/"+today+".xlsx"
data.to_excel(path)
데이터를 수집한 날짜.xlsx로 저장한다.
2.4 NLTK를 이용한 자연어 처리
for ex_i in ex_datas:
# ex_i = "07-01"
tokens_ko = ex_datas[ex_i]
ko = nltk.Text(tokens_ko)
data = ko.vocab().most_common(40)
tmp_data = dict(data)
if('nan' in tmp_data):
del tmp_data['nan']
for i in range(len(rep)):
if rep[i] in tmp_data:
tmp_data[cha[i]] = tmp_data[rep[i]]
del tmp_data[rep[i]]
LNTK를 이용하여, 자연어 처리를하여 형태소 형태인 명사 추출후 tmp_data로 잘린 명사 복구
2.5 WordCloud를 이용한 데이터 시각화
wordcloud= WordCloud(
font_path = 'C:/Windows/Fonts/NGULIM.TTF',
relative_scaling = 0.2,
background_color = 'white').generate_from_frequencies(tmp_data)
plt.figure(figsize=(10,8))
plt.imshow(wordcloud)
plt.title(ex_i+"~"+add_days_to_date(ex_i,4), fontsize=25)
plt.axis("off")
# savefig_default.png
plt.savefig('img'+'1219'+'/'+ex_i+'.png')
plt.close()
WordCloud를 이용하여, 이미지화 시킴