코딩헤딩

[웹 크롤링(web crawling)] 영화데이터시각화 2 (점(분포) 그래프) 본문

크롤링(crawling) | 시각화

[웹 크롤링(web crawling)] 영화데이터시각화 2 (점(분포) 그래프)

멈머이 2023. 12. 4. 23:52
728x90

https://coding-heading.tistory.com/69

 

[크롤링(crawling)] 영화데이터수집

크롤링(crawling) 웹상에 존재하는 데이터들을 수집하는 작업 (프로그래밍으로 자동화) 웹 페이지의 html 코드를 가져와서, HTML/CSS 등을 필요한 데이터만 추출하는 기법 Open API(Rest API)를 제공하는 서

coding-heading.tistory.com

위 글부터 이어집니다.

https://coding-heading.tistory.com/70

 

[크롤링(crawling)] 영화데이터시각화 1(막대그래프)

# - 행렬데이터 처리 라이브러리 import pandas as pd 1. 외부파일 읽어 들이기 file_path = "./data/movie_reviews.txt" df_org = pd.read_csv(file_path, delimiter="\t", names=["title", "score", "comment", "label"]) #구분자 알려주기 df_

coding-heading.tistory.com

저번 글에서는 수집한 데이터를 바탕으로 영화별 평점평균을 나타내는 막대그래프를 그렸다.

이번 글에서는 점(분포) 그래프를 그려보겠다.

 

* 각 영화별 평점 분포도 그리기

   - 하나의 큰 그래프 안에 10개의 그래프를 넣어서 표현 => subplot 이라고 한다.
   - 5행 2열의 subplot 생성하여 구현하기

### 시각화 라이브러리
import matplotlib.pyplot as plt

### 폰트 설정 라이브러리
from matplotlib import font_manager, rc

### 한글폰트 설정
plt.rc("font", family="Malgun Gothic")

### 마이너스 기호설정
plt.rcParams["axes.unicode_minus"] = False
# - subplot(행갯수, 열갯수, 전체 그래프 크기)
# - fig : 큰 그래프 정보
# - axs : 5행 2열의 내부 그래프 공간 정보
fig, axs = plt.subplots(5,2, figsize=(15,25))

### 여러개의 그래프를 for문을 이용하여 표현하고자 할 때 아래먼저 수행
# - flatten() : 틀 정렬하기 -> 5행 2열의 틀을 정렬해 놓기
axs = axs.flatten()

### 각 그래프를 행렬 공간의 subplot에 넣기
for title, avg, ax in zip(avg_score.keys(), avg_score.values(), axs):
    #print(f"{title} / {score} / {ax}")
    
    ### x축에는 영화리뷰 갯수, y축에는 평점평균
    ### 리뷰 갯수 추출하기
    num_reviews = len(df_new[df_new["title"]==title])
    # - arange(num) : 0 부터 num까지의 값을 순차적으로 만들기
    x = np.arange(num_reviews)
    #print(f"x -----> {x}")

    ### y축에는 평점 추가
    y = df_new[df_new["title"]==title]["score"]
    #print(f"y -----> {y}")

    ### 각 그래프에 제목 넣기
    subtitle = f"{title} ({num_reviews}명)"
    ax.set_title(subtitle, fontsize=15, fontweight="bold")
    
    ### 점 그래프 그리기
    # - "^" : 세모로 그래프 그리는 마커 기호
    # - "o" : 점으로 그래프 그리는 마커 기호
    ax.plot(x,y,"^")  

    ### 각 영화별 평점 평균을 빨간색 점선으로 표시하기
    # - axhline() : 각 subplot 공간에 수평선 그리기
    # - [-] 하나일때 그냥 선, [--] 두개일 때 점선
    ax.axhline(avg, color="red", linestyle="--")

plt.savefig("./img/각 영화별 평점 분포도.png")

plt.show

728x90