ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 일별 코로나 확진자수 그래프 추세 보기 및 데이터 다운로드, 시각화, 크롤링 분석
    카테고리 없음 2020. 12. 10. 17:42
    반응형

    이전 글 python 크롤링을 사용하여 일별 확진자 알아내기

    Selenium, Scraping, BeautifulSoup 사용하기

    https://blog.naver.com/szwlemona/222167682091

     

    Python 크롤링으로 코로나 일별 확진자 알아내기 selenium, BeautifulSoup, 크롬드라이버 사용하기

    981004.tistory.com/7​이전 글에서는 구글 홈페이지 에서 html을 직접 긁어와서일별 확진자수를 구하는 방...

    blog.naver.com

     

     

    먼저 파이썬 코드를 이용해서

    1. 코로나 확진자 데이터 수집(크롤링)

    2. 데이터 저장(csv)

    3. 시각화

    4. 예측 및 분석

    하는 방법을 알아보겠습니다.

    1. 코로나 확진자 데이터 수집(크롤링)

    from selenium import webdriver
    from bs4 import BeautifulSoup
    
    chrome_options = webdriver.ChromeOptions()
    # chrome_options.add_argument('--headless') #내부 창을 띄우지 않고 실행가능
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument("lang=ko_KR")
    chrome_options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome('D:\development\crawler\chromedriver.exe',chrome_options=chrome_options)
    # driver = webdriver.Chrome('chromedriver')
    
    
    search_key = '코로나 확진자'
    url = 'https://www.google.com/search?q={}'.format(search_key)
    driver.get(url)
    
    html = driver.page_source
    soup = BeautifulSoup(html,'html.parser')
    soup = soup.findAll("ol")
    # print(soup)
    html = driver.page_source
    
    #BeautifulSoup을 이용해서 html형식으로 파싱한다.
    #아래의 soup을 출력하면 페이지의 모든 소스를 출력하게 된다.
    soup = BeautifulSoup(html,'html.parser')
    
    # 페이지의 소스중 ol 태그를 가진 모든 소스만 soup에 저장한다.
    soup = soup.findAll("ol")
    # ol태그만 파싱한 소스는 10개의 리스트로 이루어저 있다.
    #print(len(soup)) 를 통해 알 수 있다.
    # 그중 우리가 필요한 정보는 코로나 확진자 수와 날짜에 대한 정보이기 때문에 
    # 그에 해당하는 2번째 리스트 soup[1] 을 선택하고 
    # 이 정보는 <li></li>태그로 감싸저 있기 때문에 .text를 이용해서 텍스트 정보만 파싱한다.
    all_count = soup[1].text
    
    # 위의  all_count를 출력하면 일열로 쭉 ~~~ 늘어진 확진자 수와 날짜를 볼 수 있다.
    # 조금더 깔끔하게 출력하고자 replace 함수를 사용하여 줄을 띄었다.
    all_count = all_count.replace("일","일,").replace('1,0','10').replace('회','').replace('월 ','-'). replace('일','')
    all_count = all_count.strip()
    all_count = all_count.split(",")
    
    ## 데이터 변환 저장 
    import pandas as pd
    
    count_list = []
    small_list = []
    for i , data in enumerate(all_count) :
        data = data.strip()
        # print(data)
        if i%2 == 1 and i !=0 :
            month,day = data.split('-')
            print(month, day)
            data = pd.Timestamp(2020,int(month),int(day))
    
        small_list.append(data)
        if i%2 == 1 and i !=0 :
            count_list.append(small_list)
            small_list = []
    
    pdata = pd.DataFrame(count_list)
    pdata.columns = ['count','date']
    
    
    ###### 데이터 저장
    pdata.to_csv("daily_corona_conut.csv")
    
    
    ###### 데이터 시각화
    import matplotlib.pyplot as plt
    import numpy as np
    plt.style.use('seaborn-whitegrid')
    plt.figure(figsize=(29,9))
    
    pdata['count'] = pd.to_numeric(pdata['count'])
    
    # pdata['date'] = pd.Timestamp(2020,pdata['date'].split('-'))
    plt.plot(pdata['date'],pdata['count'])
    
    # plt.show()
    


    소스를 실행하여 그래프로 그려봤습니다.

    코로나 확진자 추세를 확인 할 수 있습니다.

    위 코드로 저장한 일자별 코로나 확진자 수 입니다.(데이터 기준은 구글 2020/12/10일 기준입니다.)

    3월 초에 어마무시했을때는 금방 잠잠해 졌는데 12월 10일 현재는 계속해서 증가추세가 계속 이어지고 있네요 ㅠㅜㅠㅜㅠ

    ㅜㅠㅠㅜㅠㅜㅜㅠㅠㅜ

    2/20~ 12/08일까지 데이터가 있습니다.

    첨부파일

    daily_corona_conut.csv

    파일 다운로드

    데이터를 pandas 형태로 바꿔서 csv 형태로 저장했습니다.

    다음시간에는 이렇게 저장한 데이터를 가지고

    앞으로 확진세가 어떻게 될지 예측하는 간단한 방법들을 나눠보겠습니다 !

    반응형

    댓글

Designed by Tistory.