[11일차] 데이터 시각화

Tony Lee·2023년 4월 22일
0

데브코스

목록 보기
4/5
post-thumbnail

Seaborn

데이터 사이언티스트 인턴을 할 때, 매니저가 알려준 라이브러리가 나왔다.

Seaborn은 matplotlib 기반으로 만들어졌기 때문에 plt 객체를 업데이트하면 sns도 같이 업데이트 된다.

import seaborn as sns
import matplotlib.pyplot as plt 
x = [1,2,3,4,5]
y = [0.7,0.2,0.5,0.1,0.9]

plt.figure(figsize=(5,3))

sns.lineplot(x=x, y=y)
plt.title("Line plot")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim(0,5)
plt.show()

주의할 점은 plt.figure(figsize)는 다른 plot을 그리기 전에 설정해줘야 한다.

기상청 scrapping

오늘의 날씨

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.weather.go.kr/w/weather/forecast/short-term.do")
driver.implicitly_wait(1)
get_temps = driver.find_element(By.ID, "my-tchart").text

temps = [int(temp) for temp in get_temps.replace('℃','').split("\n")]
  1. 이전과 같이 드라이버를 만들어준다.
  2. 기상청 오늘의 날씨 url을 가져온다.
  3. 혹시 모를 로딩 타임을 고려해 1초 기다린다.
  4. get_temps는 다음과 같은 형태이다.
'20℃\n20℃\n20℃\n20℃\n19℃\n17℃\n16℃\n15℃\n15℃\n14℃\n14℃\n13℃\n13℃\n11℃\n11℃\n10℃\n10℃\n11℃'
  1. 우선 온도 기호를 변환해주고, "\n"을 없앤다.
  2. 도표를 그린다.
import seaborn as sns
import matplotlib.pyplot as plt

plt.ylim(min(temps)-2, max(temps)+2)
plt.title("Expected temperature in Seoul")
sns.lineplot(
    x = [i for i in range(len(temps))],
    y = temps
)

프로그래머스 질문 페이지

질문 빈도

import requests
import time
from bs4 import BeautifulSoup

frequency = {}

for i in range(1, 11):
    res = requests.get("https://qna.programmers.co.kr/?/page={}".format(i), 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 not in frequency:
                frequency[tag] = 1
            else:
                frequency[tag] += 1
    time.sleep(0.5)

question-tags가 붙어있는 ul을 추출하고, 그 안에서 li.text를 추출한다.
그리고 frequency 딕셔너리에 저장하면

{'coding-test': 30,
 'javascript': 20,
 'scanf': 10,
 'python': 230,
 'vim': 10,
 ...
}

아래와 같은 형태로 추출된다.
frequency를 barplot으로 그려보자.

from collections import Counter

counter = Counter(frequency)
counter.most_common(10)

x = [i[0] for i in counter.most_common(10)]
y = [i[1] for i in counter.most_common(10)]

plt.figure(figsize=(10, 5))
sns.barplot(x=x, y=y)

커스터마이징을 더 할수도 있지만, 오버킬 같다.
아웃풋:

파이썬 질문이 가장 많다.

profile
Striving to have a positive impact on the community

0개의 댓글