TIL) 데브코스 10일차 - wordcloud

Pori·2023년 10월 27일
0

데엔

목록 보기
5/47

시각화 - Seaborn

Essentials

import seaborn as sns
import matplotlib.pyplot as plt

Plot

: seaborn에는 다양한 plot들이 존재하지만 크게 bar, line으로 예시를 작성한다.

  • lineplot : x,y값을 인자로 주는 꺾은선 그래프
  • barplot : 범주형 데이터의 값과 그 크기를 나타낸 막대 그래프, x는 범주형 y는 수치형 데이터가 들어간다.
# lineplot 
sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1])

# barplot
sns.barplot(x=[1,2,3,4],y=[0.7,0.2,0.1,0.05])

Plot에 속성 추가하기

# 제목 추가
plt.title("title")
# x,y 레이블 추가하기
plt.xlabel("x_lable")
plt.ylabel("y_lable")

# 값 제한하기
plt.ylim(2,3) # 2~3의 데이터를 나타낸다.
plt.xlim(2,3)

# 그래프의 size 변경
plt.figure(figsize = (20,10))

스크래핑과 같이 시각화 하기.

기상청 데이터 가져오기

기상청 웹 페이지에 접속해 오늘의 기온을 가져오는 과정이다. 라이브러리는 생략하고 코드를 진행한다.

  • 스크래핑
driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()))
driver.get("https://www.weather.go.kr/w/weather/forecast/short-term.do")
driver.implicitly_wait(5)
temp = driver.find_element(By.XPATH,'기상청 날씨 데이터 xpath').text
temp = (list(map(int,temp.replace('℃',"").split("\n"))))

결과 : [19, 17, 15, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 10, 12, 14, 16]

  • 시각화 : 꺾은선 그래프를 이용하여 시각화한다.
plt.ylim(min(temp)-2,max(temp)+2)
sns.lineplot(
    x=[i for i in range(len(temp))],
    y = temp
)

워드 클라우드와 함께하는 해시코드 질문 키워드

: 비슷하게 질문 태그를 갖고오는 실습도 있었으나, 결이 같다고 판단하여 마지막 실습하나로 정리합니다.

  • 사용한 모듈은 bs4, requests, time, wordcloud, konlpy.tag, collections, matplotlib, seaborn 입니다.
  1. 스크래핑을 통해 질문 리스트의 텍스트를 가져오기.
questions = [] # 질문들을 담는 리스트.
for i in range(1,6):
    user_agent = {"User-Agent": "Mozilla/5.0 
    	(Macintosh; Intel Mac OS X 10_15_4) 
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}
        
    res = requests.get(f"https://hashcode.co.kr/?page={i}")
    soup = BeautifulSoup(res.text,"html.parser")

    parsed_datas = soup.find_all("li","question-list-item")

    for data in parsed_datas:
        questions.append(data.h4.text.strip())
    
    time.sleep(0.5)

가져온 값들은 다음과 같이 저장된다.

'파이썬에서 동적 클래스와 정적 클래스의 차이점을 제대로 이해한지 궁금합니다.',
'BI tool 과 Dashboard 솔루션의 차이',
'틀린 부분 모르겠어요ㅠㅠ',
'MSSQL 2008->2019 마이그레이션 후 게시판 정렬 문제',
'묵시적 형변환',
'y값이 입력이 안됩니다.',
'이 방식으로 배포하는 게 맞나요?',
'스택 자료 삭제 알고리즘 문제 관련 궁금한 점',
'프로그램에 대하여'

  1. 형태소 분석
from konlpy.tag import Hannanum
words = []
hannanum = Hannanum()
for q in questions:
    nouns = hannanum.nouns(q)
    words += nouns
  1. wordcloud 생성
c = Counter(words)
wordcloud = WordCloud(
    font_path="적용하고 싶은 폰트의 경로를 작성합니다.",
    background_color = "white",
    width = 1000,
    height = 1000,
)
img = wordcloud.generate_from_frequencies(c.most_common(10))
plt.imshow(img)

생성을 하면 이런 느낌으로 이미지가 출력되게 된다.

공부 한 내용

  • seaborn
  • wordcloud
  • 스크래핑한 데이터를 형태소 분석과 wordcloud를 활용하여 시각화.

새롭게 배운 내용

  • wordcloud를 R을 이용해서 진행해 보았었는데 파이썬을 활용해서는 처음 해본 것 같다.
  • konlpy.tag를 활용한 형태소 분석 방법.

느낀점&참고

: 코드를 작성해보니 예전에 비해 코드가 간결해진것 같다. 시각화 도구나, 스크래핑 툴도 업데이트가 되어서 새롭게 환기한 기분이였다.

0개의 댓글