본문 바로가기

Oracle/SQL 을 이용한 데이터 분석물

SQL 을 이용한 네이버 영화평 분석

 

현재 평점이 높고 많은 영화를 찾고 그에대한 감정분석을 해보기 

 

1. 네이버 영화평  테이블 구성 ( MOVIE_REVIEW)

reviewData2.csv

2. 컬럼명 변경 해 주기 

alter table movie_review
rename column 열1 to m_name;

alter table movie_review
rename column 열2 to m_score;

alter table movie_review
rename column 열3 to m_review;

 

3. 영화 평이 입력된 영화가 몇개인지 출력

select count(distinct(m_name))
from movie_review;

또는

select count(*)
from (
          select distinct(m_name)
         from movie_review
           );

 

4. 영화별로 별이 10 개 를 몇개 받았는지 갯수를 세고 10점이 많은 순으로 10위까지만 뽑으시오

select *
from (
        select m_name, cnt, rank() over (order by cnt desc) ranking
        from (
                  select m_name , count(*)as cnt
                  from movie_review
                  where m_score = '10'
                  group by m_name
                   )
            )
where ranking between 1 and 10 ;

view 만들어서 사용해도 됨

create or replace view m_view
as
select m_name, cnt, rank() over (order by cnt desc) ranking
from (
     select m_name , count(*)as cnt
     from movie_review
     where m_score = '10'
      group by m_name);

→ view 생성

select *
from m_view
where ranking between 1 and 10 ;

 

5. 1등인 모다기슈 영화의 감정분석 

긍정단어, 부정단어 한글테이블 생성

positive_kor

negative_kor

6. 영화평을 어절별로 자르기 정규식 함수 SUBSTr 이용 

select word
from  (
          select  regexp_substr(m_review , '[^ ]+', 1, a) as word
         from movie_review,  (  select level as a
                                from dual
                                connect by level <= 500
                              )
          where M_name ='모가디슈'
       )
where  word  is not  null;

 

위의결과 VIEW 생성

CREATE OR REPLACE VIEW MOGA_VIEW
AS
select word
from  (
            select  regexp_substr(m_review , '[^ ]+', 1, a) as word
            from movie_review,  (  select level as a
                                                from dual
                                                 connect by level <= 500)
            where M_name ='모가디슈'
            )
where  word  is not  null;

 

7. 긍정단어, 부정단어의 개수를 구하기.

select count(*)
from MOGA_VIEW m
where exists (select 'x'
              from positive_kor p
              where m.word = p.열1 );

→ 긍정단어 572

select count(*)
from MOHA_VIEW m
where exists (select 'x'
              from negative_kor n
              where m.word = n.열1 );

→ 부정단어 384

 

 

결론 : 영화평중 10 점 별점을 가장 많이 받은 영화는 모다기슈 이며 , 해당 영화의 감정분석을 진행해보았을때 
긍정적인 단어가 부정적인 단어보다 약 1.5 배 많은 것을 확인 할 수 있으나,
영화평 자체에 써져있는 유행어나, ㅋㅋㅋ , ㅎㅎㅎㅎ, 비속어 등등은
현재 갖고 있는 한국어 긍정,부정 단어 테이블에는 존재 하지 않아 제대로 감정분석이 되었다고 보기는 어렵다. 

지금 한국어 긍정 , 부정 단어 테이블의 데이터는 미국의 영어 긍정, 부정 단어 테이블을 구글 번역기로 번역되어진 결과 이므로 
만약 제대로된 한국어 긍정, 부정 단어 데이터가 있다면 보다 정확한 감정 분석을 할 수 있을 것이라고 예상되어진다.