웹 스크롤링한 데이터를 분석하는 예시
1. 신제품이 출시되었을 때 소비자들의 반응을 살펴보고자 할 때 -> 감정 분석
2. 시기별 사회 현상을 파악하고자 할 때
3. 인공지능 상담원 ( 딥러닝 RNN )
4. 딥러닝 CNN의 신경망의 학습 자료 활용
데이터의 종류 3가지
1. 정형 데이터 : 정형화된 스키마 구조. DBMS에 저장될 수 있는 구조
예 : Oracle 테이블, MYSQL, MSSQL
2. 반정형 데이터 : 데이터 내부의 데이터 구조에 대한 메타 정보가 포함된 구조의 데이터
예 : html 문서, xml 문서
3. 비정형 데이터 : 웹스크롤링 기술로 수집해서 모은 데이터
예 : 텍스트 파일, 이미지, 동영상
1. 조선일보에서 '봉사' 키워드로 웹 스크롤링 했던 bongsa.txt 파일 확인
2. 텍스트 파일을 불러오고, 어절 별로 분리해서 리스트에 담은 뒤, 정렬하기
stev=open("c:\\data\\bongsa.txt",encoding='UTF8')
stev2=stev.read().split()
stev2.sort()
print(stev2)
3. 단어별 몇 번 나왔는지 세는 Counter 모듈 호출해서 사용하기
stev=open("c:\\data\\bongsa.txt",encoding='UTF8')
stev2=stev.read().split()
stev2.sort()
from collections import Counter
count_list=Counter(stev2)
print(count_list)
4. 가장 많이 중복된 단어 ~위까지만 검색하기 ( most_common )
stev=open("c:\\data\\bongsa.txt",encoding='UTF8')
stev2=stev.read().split()
stev2.sort()
from collections import Counter
count_list=Counter(stev2)
result=count_list.most_common(10)
print(result)
5. 위의 결과를 for 문을 이용해서 출력하기
stev=open("c:\\data\\bongsa.txt",encoding='UTF8')
stev2=stev.read().split()
stev2.sort()
from collections import Counter
count_list=Counter(stev2)
result=count_list.most_common(10)
for i in result:
print(i[0],i[1])
6. 어제 스크롤링 했던 영화 조제 반응 txt 불러와서 해보기
stev=open("c:\\data\\joje.txt",encoding='cp949')
stev2=stev.read().split()
stev2.sort()
from collections import Counter
count_list=Counter(stev2)
result=count_list.most_common(15)
for i in result:
print(i[0],i[1])
# 욕하는 게 다 보이는 거 같네
7. 웹스크롤링을 한 데이터로 영화 라라랜드 감정 분석 ( 긍정 단어 txt, 부정 단어 txt 활용 )
positive=open('c:\\data\\positive-words2.txt',encoding='cp949')
pos=positive.read().split('\n')
stev=open('c:\\data\\sample6_laland_review.txt',encoding='utf8')
stev2=stev.read().split()
cnt=0
for i in stev2:
if i.lower() in pos:
print(i.lower())
cnt+=1
print(cnt)
긍정 / 부정
# 라라랜드 평가 게시글 txt
# 평가 점수만 출력하기
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
for i in stev2:
print(i[6:8])
# 정수형으로 변환
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
for i in stev2:
print(int(i[6:8]))
공백은 int에 들어가면 사라지니 걱정하지 않아도 된다. 오히려 좋다
# 평점 6점 이상을 준 사람들의 감상평 출력하기
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
for i in stev2:
if int(i[6:8])>=6:
print(i)
# 6점 이상은 pos에, 5점 이하는 nag에 담기
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
pos=[]
nag=[]
for i in stev2:
if int(i[6:8])>=6:
pos.append(i)
else:
nag.append(i)
print(len(pos))
print(len(nag))
# pos에 들어있는 긍정 글들을 project 폴더 내에 pos_lala.txt로 저장
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
pos=[]
nag=[]
f=open('c:\\project\\pos_lala.txt','w',encoding='utf8')
for i in stev2:
if int(i[6:8])>=6:
pos.append(i[8:])
else:
nag.append(i[8:])
f.writelines(pos)
f.close()
부정글도 동일하게 nag_lala.txt에 저장했다
# 두 텍스트 글을 워드 클라우드를 통해 시각화 하기 ( 저번 내용 참조 )
stev=open("c:\\data\\sample6_laland_review.txt",encoding='utf8')
stev2=stev.readlines()
pos=[]
nag=[]
f=open('c:\\project\\pos_lala2.txt','w',encoding='utf8')
f2=open('c:\\project\\nag_lala2.txt','w',encoding='utf8')
for i in stev2:
if int(i[6:8])>=6:
pos.append(i[8:])
else:
nag.append(i[8:])
f.write(str(pos))
f.close()
# 워드 클라우드로 시각화하기
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt # 그래프 그리는 모듈
from os import path # os 에 있는 파일을 파이썬에서 인식하기 위해서
import re # 데이터 정제를 위해서 필요한 모듈
import numpy as np
from PIL import Image # 이미지 시각화를 위한 모듈
usa_mask = np.array(Image.open("c:\\project\\usa_im.png"))
script = 'pos_lala.txt'
d = path.dirname("c:\\project\\")
text = open(path.join(d, "%s"%script), mode="r", encoding="utf8").read()
file = open('c:\\project\\word.txt', 'r', encoding = 'utf-8')
word = file.read().split(' ')
for i in word:
text = re.sub(i,'',text)
wordcloud = WordCloud(font_path='C://Windows//Fonts//gulim', # 글씨체
stopwords=STOPWORDS, # 마침표, 느낌표,싱글 쿼테이션 등을 정제
max_words=1000, # 워드 클라우드에 그릴 최대 단어 개수
background_color='white', # 배경색깔
max_font_size = 100, # 최대 글씨 크기
min_font_size = 1, # 최소 글씨
mask = usa_mask, # 배경 모양
colormap='jet').generate(text).to_file('c:/project/cnn_cloud.png')
plt.figure(figsize=(15,15))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
부정적 반응은 표본이 적어서 아쉽다
'나 취준생 > 파이썬' 카테고리의 다른 글
오라클과 파이썬 연동하기 (0) | 2020.12.21 |
---|---|
구글 이미지 크롤링 (0) | 2020.12.18 |
워드 클라우드 그리기 (0) | 2020.12.18 |
웹 스크롤링 연습 (더 나은미래 신문) (0) | 2020.12.18 |
웹 스크롤링 연습 ( 중앙 일보 기사 ) (0) | 2020.12.16 |