[TIL 10일자] 데브코스 데이터엔지니어링

·2023년 4월 21일
0

데브코스

목록 보기
9/55
post-thumbnail
post-custom-banner

📚 오늘 공부한 내용

✔ 파이썬으로 웹 데이터를 크롤하고 분석하기 (5)

1. 스크래핑으로 데이터를 추출하면 끝일까?

  • No. 끝이 아니다.
  • 추출한 데이터들은 대부분 텍스트 상태이며 너무 분산되어 있어 한눈에 알아보기 힘들다.
  • 우리는 이 문제를 시각화(Visualization)을 통해 해결해야 한다.

2. Seaborn

  • Seaborn파이썬의 데이터 시각화 라이브러리이다.
  • 기본적으로 matplotlib을 기반으로 하고 있기 때문에 seaborn을 설치하면 matplotlib이 같이 설치가 된다.
  • seaborn은 보통 sns라는 명칭으로 축약한다.
%pip install seaborn

1) 꺾은 선 그래프 (Line Plot)

  • 꺾은 선 그래프.lineplot(x=x축리스트, y=y축리스트)로 표현 가능하다.
  • 또한 꺾은 선 그래프의 경우 plt._lim(최솟값, 최댓값)이라는 matplotlib 함수를 통해 최소 범위최대 범위를 지정해 줄 수 있다.
  • 만약 그래프의 사이즈를 조정하기를 원한다면 plt.figure(figsize =(x, y))라는 함수로 조정할 수 있다. 일종의 캔버스 크기의 개념으로 미리 그래프를 그리기 전에 선언해 주어야 한다.
import seaborn as sns

plt.figure(figsize = (20, 10))  #figure 자체가 일종의 캔버스 크기를 정해 주는 것이기 때문에 그래프를 그리기 전에 선언해 주어야 한다.
sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1])
plt.ylim(0, 10)

plt.show()

결과 값

2) 막대 그래프 (Bar Plot)

  • .barplot(x=x리스트, y=y리스트)를 통해서 표현 가능하다.
  • title을 주기 위해서는 matplotlib의 pyplot을 사용해야 한다. pyplot의 title("주고자 하는 그래프 타이틀")을 통해 부여할 수 있다.
  • 또한 x축 label과 y축 label 역시 pyplot을 통해 줄 수 있는데 ._label("_label 값") 함수를 사용하면 된다.
import seaborn as sns
import matplotlib.pyplot as plt

sns.barplot(x=["Amy","Bob","Cat","Dog"],y=[0.7,0.2,0.1,0.05])
plt.title("ABCD")
plt.xlabel("X Label")
plt.ylabel("Y Label")

plt.show() #show()함수를 사용하지 않으면 그래프가 출력되지 않는다.

결과 값

3. 스크래핑 결과 시각화하기

💻실습 정리-5. 기상청-날씨-정보-시각화
💻실습 정리-6. 특정 웹 페이지 태그 빈도 수 막대 그래프 시각화

4. Word Cloud

  • Word Cloud란 자주 등장하는 텍스트를 중요도인기도를 고려해 표현한 것.
  • Word Cloud를 만들기 위한 과정
    • 자연어 문장에서 키워드를 추출한다.
    • 키워드가 등장한 빈도 수를 측정한다.
    • 앞에서 전처리한 정보Word Cloud 라이브러리를 바탕으로 생성한다.

1) wordcloud와 konlpy를 설치

  • Python텍스트 클라우드 라이브러리이다.
  • konlpynlp(자연어 처리) 라이브러리로 형태소 분석을 해서 원하는 키워드를 뽑아내는 라이브러리.
# wordcloud 라이브러리와 konlpy 라이브러리를 설치해 준다
%pip install wordcloud
%pip install konlpy

2) 텍스트 구름 그리기 위해 필요한 라이브러리를 호출

  • 시각화를 위해 matplotlib.pyplotwordcloud를 호출해 준다.
  • 또한 counter를 사용하기 위해 collections을 호출해 준다.
  • 마지막으로 문장의 명사만 추출할 수 있는 라이브러리인 konlpy도 호출해 준다.
# 시각화에 쓰이는 라이브러리
import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 횟수를 기반으로 딕셔너리 생성
from collections import Counter

# 문장에서 명사를 추출하는 형태소 분석 라이브러리
from konlpy.tag import Hannanum

3) Hannanum을 통해 명사를 추출

  • 먼저 Word Cloud를 만들 문자열을 변수에 넣어 준다.
  • 이후 Hannanum 객체를 생성해 준 뒤, .nouns(명사를 추출할 인자) 함수를 사용하여 문자열의 명사만 추출해 준다.
national_anthem = """
동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
남산 위에 저 소나무 철갑을 두른 듯
바람 서리 불변함은 우리 기상일세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
가을 하늘 공활한데 높고 구름 없이
밝은 달은 우리 가슴 일편단심일세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
이 기상과 이 맘으로 충성을 다하여
괴로우나 즐거우나 나라 사랑하세
무궁화 삼천리 화려 강산
대한 사람 대한으로 길이 보전하세
"""
hannanum = Hannanum()  #객체를 생성
nouns = hannanum.nouns(national_anthem)  #nouns(명사추출할인자)
nouns[:10]
#output: ['동해물', '백두산', '하느님', '보우하사', '우리나라', '무궁화', '삼천리', '화', '강산', '사람']

words = [noun for noun in nouns if len(noun) > 1] #추출한 명사에서 길이가 1인 건 제외
words[:10]
#output: ['동해물', '백두산', '하느님', '보우하사', '우리나라', '무궁화', '삼천리', '강산', '사람', '대한']

4) counter를 통해 각 명사의 횟수를 담는 Dictionary 생성

counter = Counter(words)

5) WordCloud를 이용해 텍스트 구름 생성

  • WordCloud 객체를 생성하는데 이때 font_path를 통해 한글을 지원하는 폰트의 위치, background_color를 통해 배경 색, width와 height 역시 설정해 줄 수 있다.
  • 객체를 생성한 후 .generate_from_frequencies(counter) 함수를 통해 wordcloud 이미지로 변환해 줄 수 있다. 이 함수는 counter와 같이 key단어 그리고 value빈도 수로 담는 구조의 인자를 word cloud로 만들어 주는 함수이다.
wordcloud = WordCloud(
    font_path = "/Users/Samsung/AppData/Local/Microsoft/Windows/Fonts/BMEULJIROTTF.ttf",
    background_color="white",
    width=1000,
    height=1000
) #wordcloud 객체를 생성한 후
img = wordcloud.generate_from_frequencies(counter) #counter 같은 구조를 바탕으로 wordcloud를 만든다
plt.imshow(img)

결과 값

5. 워드 클라우드 만들기

💻실습 정리-7. 특정 웹 페이지 태그를 워드 클라우드로 시각화

🔎 어려웠던 내용 & 새로 알게 된 내용

1. jupyter notebook 혹은 lab 실행 시 Chrome으로 실행

  • cmd 창에서 jupyter notebook 혹은 jupyter lab을 실행 시 기본적으로 Microsoft Edge로 실행이 되는데 계속 새 창이 뜨고 로딩이 되지 않는 오류가 발생하였다.
  • Microsoft Edge 오류 때문인 것으로 보여져 Chrome으로 실행하는 방법이 없을까 생각했다.

    실행을 위한 세팅

    1) 먼저 cmd창에 jupyter notebook --generate-config 해당 명령어를 실행해 준다.

    2) 이렇게 jupyter_notebook.config.py 파일을 생성 시 jupyter_notebook.config.py 파일의 위치를 알려 준다. 이때 jupyter_notebook.config.py 이 파일은 jupyter notebook의 환경을 세팅해 주고 다양한 설정을 관리해 주는 config 파일이다.

    3) 이후 Chrome의 절대 경로를 찾아 주는데 Chrome의 절대 경로는 크롬 바로 가기 아이콘 우 클릭 시 속성의 대상(T)에 있는 위치이다.

    4) 이 절대 경로 위치를 복사하여 역슬래시(\) 기호를 슬래시(/) 기호로 변경해 준 후 %s를 뒤에 붙여 줍니다.
    ex) 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'

    5) 이 절대 경로를 jupyter_notebook.config.py 파일을 메모장 혹은 notepad++로 열어 준 후 browser로 검색을 한다.

    6) 검색 시 다음과 같은 주석이 나오는데 c.NotebookApp.browser = '(여기에 절대 경로)' 저 위치에 아까 수정했던 Chrome의 절대 경로를 넣어 주면 된다. 이후 꼭 주석을 풀어 주고 저장을 해 주어야 한다.

2. Word Cloud 설치 오류

%pip install wordcloud

다음의 명령어로 wordcloud 라이브러리를 설치하려는데 계속 오류가 발생했다. [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for wordcloud Failed to build wordcloud ERROR: Could not build wheels for wordcloud, which is required to install pyproject.toml-based projects 다음과 같은 오류였는데 python의 버전이 wordcloud의 버전과 맞지 않아 발생하는 오류였다.
-> 해당 오류는 이와 같은 방법으로 해결해 주었다. 📑wordcloud 설치 오류

3. Word Cloud
다음과 같이 Word Cloud를 추출 후에 글자가 나오지 않는 경우는 기본 폰트한글을 지원하지 않는 폰트이기 때문이다. 그래서 wordcloud 객체 생성 시 한글을 지원하는 폰트의 위치를 지정해 주면 한글이 추출되어 나온다.

wordcloud = WordCloud(
    font_path = "/Users/Samsung/AppData/Local/Microsoft/Windows/Fonts/BMEULJIROTTF.ttf"
) #wordcloud 객체 생성 시 폰트의 위치를 설정해 준다
img = wordcloud.generate_from_frequencies(counter)
plt.imshow(img)

다음과 같이 지정한 폰트로 한글이 잘 나오는 것을 확인할 수 있다.

✍ 회고

어제 스크래핑만 했을 때는 이를 어떻게 데이터 분석에 적용할 수 있는지에 대한 의문이 있었다. 아무래도 강의 초반에 나온 말처럼 한눈에 데이터를 볼 수 없고, 대부분이 텍스트 형식이었기 때문이다. 그래프와 텍스트 구름으로 시각화한 데이터를 보니 이 데이터들이 어떻게 분석되고, 이후 사용되는지 알 수 있게 되었다.

profile
송의 개발 LOG
post-custom-banner

0개의 댓글