ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코로나 월별 확진자수 파이썬 으로 통계 구하기, 일별 확진자 수 구하기 밑 예측하기.
    카테고리 없음 2020. 12. 11. 10:27
    반응형

    1. 코로나 월별 확진자수 통계 내기

    2. 다른 통계 분석해보기

    3. 간단한 예측 모델로 예측해보기

    먼저 코로나 일일 확진자 수를 불러옵니다 !

    방법은 밑에 포스팅을 참조해주세요~~

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

     

    코로나 일일 확진자수 전일 기준 python 공공데이터 api 월별, 일별, 전체 제공 및 예측

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

    blog.naver.com

    코로나 일일 확진자 파일

    첨부파일

    daily_corona_conut.csv

    파일 다운로드

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 판다스를 사용해서 위의 csv파일을 읽어옵니다.
    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'])
    plt.plot(pdata['date'],pdata['count'])
    


    그럼 이전에 포스팅에서 출력했던 그래프가 이렇게 출력됩니다 .

    (일일 확진자 현황 그래프)

    # pandas의 describe() 함수를 이용하요 요약 정보 출력
    pdata.describe()
    

     

    describe() 함수 하나로

    이렇게 데이터정보를 파악 할 수있습니다.

    ## 출력 내용
    
    # 데이터 갯수 ( 2/20~12/09  아마? 약? 294일)
    count	294.000000
    # 평균( 일평균 136명..)
    mean	136.282313
    # 표준편차
    std	160.035337
    # 최소 확진자수
    min	0.000000
    25%	38.000000
    50%	74.500000
    75%	152.750000
    # 최대 확진자수
    max	851.000000
    

     

    월 별 확진자수 !!

    #pandas의 groupby( 쿼리에서 자주사용) 집계함수를 이용
    # 날짜 정보에서 월만 가지고 와서 합계를 계산
    
    pdata.groupby(pdata['date'].dt.strftime("%m")).sum()
    

     

    출력 결과

    date   count
    	
    02	3119
    03	6636
    04	988
    05	729
    06	1347
    07	1486
    08	5846
    09	3707
    10	2746
    11	8017
    12	5446
    


    2월은 20일부터 데이터가 있는데 3천명이 넘네요.....

    (왜 1일부터 없냐고 하면 구글에서 데이터를 가져왓는데 거기에 데이터가 없다는....)

    또한 12월 은 아직 데이터가 12/08일 확진자수 까지 밖에 없는데

    벌써 5446이라니...................................

    12월 확진자수만 만명이 넘는게 아닌가 염려되네요 ㅜㅠㅠㅜㅠㅜ

    ㅠㅜㅜㅠㅠㅜㅠㅜㅠㅜ

    예측해보기..

    Facebook 에서 만든 fbprophet 을 사용해서

    예측해보겠습니다.

    from fbprophet import Prophet # version 0.6
    
    # 데이터의 index를 초기화하고 컬럼명을 바꾼다.
    count = pdata.reset_index(drop= True)
    count = count.rename(columns={'date':'ds', 'count':'y'})
    # Prophet() 모델을 읽어와서 
    # fit로 학습한다.
    model = Prophet()
    model.fit(count)
    

     

    # freq 는 예측할 단위를 입력하면 됩니다. y,m,d (년,월,일) 
    # periods 는 예측할 기간을 입력하면됩니다. 
    future=model1.make_future_dataframe(periods=30, freq= 'd')
    forecast_count = model1.predict(future)
    
    # 데이터 시각화 하기
    fig = model1.plot(forecast_count ,figsize=(10,5))
    

    시각화 결과!

    (정부의 행정명령은 반영하지 않은 오로지 확진자 수에대한 분석 예측 결과입니다.)

    추세가 꺽이지 않네요 ㅠㅜㅜㅠㅠㅜ 이렇게 되지 않기를 기도할 뿐입니다......

    여기서 검은 색점은 실제 데이터이고(위~~~에 출력했던 그래프랑 비슷하죠??)

    파란색 선은 추세선

    하늘색 테두리는 트랜드 영영을 나타냅니다.

    3월, 8월말 등 데이터가 갑자기 튀는것에 가중치를 많이 두지 않고

    전체적인 추세에 영향을 많이 반영하는 모델입니다.

    내일 어떻게 될지 정확하게 예측하기 보다는 장기간 추세를 예측하기에 적합해 보입니다.

    또한 plot_components를 이용해서 경향분석도 가능합니다.

    fig2 = model1.plot_components(forecast_count)


    이렇게 연중 확진자 수 에대한 경향성(trend) 그래프와

    요일별 확진자 수 에 대한 그래프 도 출력을 해줍니다.

    일요일과 월요일이 확진자 수가 낮은 경향을 보이는 이유는

    토요일과 일요일에 코로나 검사를하는 검사인원 자체가

    다른 평일에 비해서 적기 때문으로 입니다.

    전체소스

    import matplotlib.pyplot as plt
    import numpy as np
    
    pdata = pd.read_csv('daily_corona_conut.csv')
    
    plt.style.use('seaborn-whitegrid')
    plt.figure(figsize=(29,9))
    
    pdata['count'] = pd.to_numeric(pdata['count'])
    plt.plot(pdata['date'],pdata['count'])
    
    # 데이터 요약하기
    print(pdata.describe())
    
    #월별 집계하기
    print(pdata.groupby(pdata['date'].dt.strftime("%m")).sum())
    
    
    # Prophet 학습 및 예측하기
    from fbprophet import Prophet # version 0.6
    
    count = pdata.reset_index(drop= True)
    count = count.rename(columns={'date':'ds', 'count':'y'})
    model1 = Prophet()
    model1.fit(count)
    
    future=model1.make_future_dataframe(periods=30, freq= 'd')
    forecast_count = model1.predict(future)
    
    #현황 및 예측 시각화
    fig = model1.plot(forecast_count ,figsize=(10,5))
    
    #경향성 분석 시각화
    fig2 = model1.plot_components(forecast_count)
    

    import matplotlib.pyplot as plt import numpy as np pdata = pd.read_csv('daily_corona_conut.csv') plt.style.use('seaborn-whitegrid') plt.figure(figsize=(29,9)) pdata['count'] = pd.to_numeric(pdata['count']) plt.plot(pdata['date'],pdata['count']) # 데이터 요약하기 print(pdata.describe()) #월별 집계하기 print(pdata.groupby(pdata['date'].dt.strftime("%m")).sum()) # Prophet 학습 및 예측하기 from fbprophet import Prophet # version 0.6 count = pdata.reset_index(drop= True) count = count.rename(columns={'date':'ds', 'count':'y'}) model1 = Prophet() model1.fit(count) future=model1.make_future_dataframe(periods=30, freq= 'd') forecast_count = model1.predict(future) #현황 및 예측 시각화 fig = model1.plot(forecast_count ,figsize=(10,5)) #경향성 분석 시각화 fig2 = model1.plot_components(forecast_count)

    질문이나 소스파일을 원하실 경우 댓글 남겨주세요 ~~

    읽어주셔서 감사합니다 !!

    공감과 댓글은 사랑입니다

     

    반응형

    댓글

Designed by Tistory.