3 분 소요

sidebar: nav: “counts”

[Seaborn]개념 및 실습

1. 시각화 라이브러리, Seaborn

Seaborn은 파이썬의 시각화 라이브러리로, 데이터를 시각적으로 아름답게 표현할 수 있습니다. 데이터의 요약과 패턴을 시각적으로 확인할 때 매우 유용합니다.

우선, Seaborn을 설치해야 합니다.

%pip install seaborn

설치 후, 다양한 그래프를 그릴 수 있으며 데이터를 효과적으로 분석할 수 있습니다.

1.1 Seaborn으로 그래프 그리기

꺾은선 그래프 (Line Plot)

두 변수 간의 값 변화를 선으로 연결해 그린 그래프입니다.

import seaborn as sns

sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1])

image-20241006231242069

막대 그래프 (Bar Plot)

범주형 데이터의 값을 직사각형 막대로 표현한 그래프입니다.

sns.barplot(x=["chan", "yeong", "park", "zim"], y=[0.7, 0.2, 0.1, 0.05])

그래프 속성 변경하기

Seaborn은 Matplotlib을 기반으로 하므로, Matplotlib의 다양한 속성을 활용하여 그래프를 커스터마이징할 수 있습니다.

  • 제목 추가:
import matplotlib.pyplot as plt

sns.barplot(x=["chan", "yeong", "park", "zim"], y=[0.7, 0.2, 0.1, 0.05])
plt.title("Bar plot")
plt.show()
  • 축 라벨 추가:
sns.barplot(x=["chan", "yeong", "park", "zim"], y=[0.7, 0.2, 0.1, 0.05])
plt.xlabel("X label")
plt.ylabel("Y label")
plt.show()

image-20241006231315299

  • 축 범위 설정:
sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1])
plt.ylim(0, 7)
plt.show()

image-20241006231347008

  • 그래프 크기 설정:
plt.figure(figsize=[20, 10])
sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1])
plt.show()

2. 스크래핑 결과 시각화하기 I - 기상청 날씨 정보 조회

Selenium과 Seaborn을 활용하여 기상청에서 날씨 정보를 스크래핑하고 시각화해보겠습니다.

2.1 스크래핑 준비

먼저 Selenium을 사용하여 기상청 웹사이트에서 날씨 정보를 가져옵니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.weather.go.kr/w/weather/forecast/short-term.do")
driver.implicitly_wait(5)

# 스크래핑한 날씨 데이터를 리스트로 변환
temps = driver.find_element(By.ID, "highcharts-dqjkas5-0").text.split("\n")
temps = [float(temp) for temp in temps]

2.2 꺾은선 그래프로 날씨 데이터 시각화

스크래핑한 데이터를 바탕으로 꺾은선 그래프를 그려봅시다.

import seaborn as sns
import matplotlib.pyplot as plt

plt.ylim(min(temps) - 2, max(temps) + 2)
sns.lineplot(x=range(len(temps)), y=temps)
plt.title("Temperature Trend")
plt.show()

3. 스크래핑 결과 시각화하기 II - 해시코드 질문 태그 빈도 분석

이번에는 BeautifulSoup과 Seaborn을 사용하여 해시코드 질문 태그의 빈도를 분석하고 시각화해보겠습니다.

3.1 스크래핑 코드

import requests
from bs4 import BeautifulSoup
import time

user_agent = {"User-Agent": "Mozilla/5.0"}
frequency = {}

for i in range(1, 11):
    res = requests.get(f"https://qna.programmers.co.kr/?page={i}", headers=user_agent)
    soup = BeautifulSoup(res.text, "html.parser")
    ul_tags = soup.find_all("ul", "question-tags")

    for ul in ul_tags:
        li_tags = ul.find_all("li")
        for li in li_tags:
            tag = li.text.strip()
            if tag in frequency:
                frequency[tag] += 1
            else:
                frequency[tag] = 1
    time.sleep(0.5)

print(frequency)

image-20241006231453459

3.2 막대 그래프로 태그 빈도 시각화

태그 빈도 데이터를 Seaborn을 이용하여 시각화합니다.

sns.barplot(x=list(frequency.keys()), y=list(frequency.values()))
plt.title("Tag Frequency in Hashcode")
plt.xticks(rotation=90)
plt.show()

3.3 태그 빈도 시각화 (상위 10개 태그)

상위 10개의 태그만 시각화하여 트렌드를 파악할 수 있습니다.

import seaborn as sns
import matplotlib.pyplot as plt

# 태그 데이터 준비
tags = list(frequency.keys())  # 태그 이름
counts = list(frequency.values())  # 태그 빈도수

# 그래프 크기 설정
plt.figure(figsize=(12, 8))

# 막대 그래프 그리기
sns.barplot(x=tags[:10], y=counts[:10])  # 빈도가 높은 상위 10개의 태그 시각화

# 그래프 제목 및 라벨 설정
plt.title("Top 10 Most Frequent Tags from Hashcode")
plt.xlabel("Tags")
plt.ylabel("Frequency")
plt.xticks(rotation=45)  # x축 라벨 회전
plt.show()

image-20241006231434581

4. 스크래핑 결과 시각화 II - 추가 분석 및 개선

이번 섹션에서는 추가로 할 수 있는 분석과 개선 사항을 다룹니다.

  1. 페이지를 더 많이 크롤링하기 태그 빈도수를 더 정확하게 분석하려면 더 많은 페이지를 크롤링해야 합니다. 페이지 번호 범위를 확장하여 더 많은 데이터를 가져올 수 있습니다.

  2. 빈도수가 적은 태그 필터링 너무 적은 빈도수를 가진 태그는 분석에 큰 영향을 미치지 않으므로, 특정 임계값 이하의 태그는 필터링하여 시각화하지 않는 것이 좋습니다. 예를 들어, 빈도수가 3 이하인 태그는 제거할 수 있습니다.

    filtered_frequency = {k: v for k, v in frequency.items() if v > 3}
    
  3. 워드클라우드 시각화 이전 포스트에서 다룬 워드클라우드를 활용하여 태그 빈도를 시각화할 수 있습니다. 워드클라우드는 막대 그래프와는 다른 방식으로 태그의 빈도를 직관적으로 파악할 수 있는 방법입니다.

5. 마무리

이번 포스트에서는 BeautifulSoupSeaborn을 사용해 해시코드 사이트에서 태그 데이터를 수집하고 빈도수를 분석하여 시각화했습니다. 이를 통해 웹스크래핑을 통해 얻은 데이터를 시각적으로 표현하고 분석하는 과정을 배웠습니다.

추후 포스트에서는 더 많은 데이터를 수집하고, 스크래핑 및 데이터 분석을 개선하는 방법을 다룰 예정입니다.

댓글남기기