import pygame, sys
from pygame.locals import *
import random, time
pygame.init()
# 초당 프레임 설정
FPS = 60
FramePerSec = pygame.time.Clock()
# 색상 세팅(RGB코드)
RED = (255, 0, 0)
ORANGE = (255, 153, 51)
YELLOW = (255, 255, 0)
GREEN = (0, 255, 0)
SEAGREEN = (60, 179, 113)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
VIOLET = (204, 153, 255)
PINK = (255, 153, 153)
GREY = (213,213,213)
LIGHT_GREY = (246,246,246)
LIGHT_BLACK = (76,76,76)
# 게임 진행에 필요한 변수들 설정
SPEED = 5 # 게임 진행 속도
SCORE = 0 # 플레이어 점수
# 폰트 설정
font = pygame.font.SysFont('Tahoma', 60) # 기본 폰트 및 사이즈 설정(폰트1)
small_font = pygame.font.SysFont('Malgun Gothic', 20,bold=True) # 작은 사이즈 폰트(폰트2)
middle_font = pygame.font.SysFont('Malgun Gothic', 40) # 중간 사이즈 폰트(폰트3)
game_over = font.render("GG", True, BLACK) # 게임 종료시 문구
# 게임 배경화면
background = pygame.image.load('resources/background1.jpg') # 배경화면 사진 로드
# 게임 화면 생성 및 설정
display_width = 640
display_height = 440
GameDisplay = pygame.display.set_mode((display_width,display_height))
GameDisplay.fill(PINK)
pygame.display.set_caption("Mini Game")
#점수 reset함수
def reset():
global SCORE
SCORE = 0
return SCORE
Button 함수 만들기
Intro,outro에 사용할 버튼을 간단하게 만들기 위해 버튼을 만드는 함수를 하나 추가해 줍니다.
이 버튼 함수는 버튼 영역 안에 마우스 포인터가 들어가면 색이 바뀌고 클릭 시 True값을 return 합니다.
더 자세히 설명하자면 아래와 같습니다.
button(버튼안에 들어갈 메세지, x좌표,y좌표, 도형의가로길이,도형의세로길이,도형색, 포인터가 도형위에 위치시 변하는 색, action=True(클릭했을 때 이벤트 활성화), 버튼글씨색 설정 )
#버튼 생성 함수
def button(msg,x,y,w,h,ic,ac,action=None,fcolor=BLACK):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
#print(click)
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.ellipse(GameDisplay, ac,(x,y,w,h))
if click[0] == 1 and action != None:
return True
else:
pygame.draw.ellipse(GameDisplay, ic,(x,y,w,h))
textSurf = middle_font.render(msg,True,fcolor)
textRect = textSurf.get_rect()
textRect.center = ( (x+(w/2)), (y+(h/2)) )
GameDisplay.blit(textSurf, textRect)
Intro 만들기
게임 설명 텍스트를 위치시켜주고,
start, quit 버튼을 만들어서
start를 누를 시 게임을 시작하고, quit을 누르면 창이 닫히도록 game_intro 함수를 만들어 주었습니다.
# 시작(intro) 화면
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# 배경화면 사진 게임창에 불러오기(사진, 위치)
GameDisplay.blit(background, (0, 0)) #TODO
# 텍스트 생성 및 배치하기
large_Text = pygame.font.SysFont('Tahoma', 100)
Text1,Text1Rect = text_objects("How to Play",large_Text)
Text2,Text2Rect = text_objects("Use ← , → to avoid bombs!",middle_font)
Text3,Text3Rect = text_objects("방향키 ← , →를 사용하여 폭탄을 피하세요!",small_font)
Text1Rect.center = ((display_width/2),(display_height/4.5))
Text2Rect.center = ((display_width/2),(display_height/2.5))
Text3Rect.center = ((display_width/2),(display_height/2))
GameDisplay.blit(Text1, Text1Rect)
GameDisplay.blit(Text2,Text2Rect)
GameDisplay.blit(Text3,Text3Rect)
#start,quit버튼
introBtn1 = button("START",display_width/6,display_height/1.7,200,100,BLACK,BLUE,action=True,fcolor=YELLOW)
introBtn2 = button("QUIT",display_width/2,display_height/1.7,200,100,BLACK,RED,action=True,fcolor=YELLOW)
#버튼을 눌렀을 때
if introBtn1 == True:
return game()
if introBtn2 ==True:
pygame.quit()
quit()
pygame.display.update()
FramePerSec.tick(FPS)
게임에서 동작할 class 만들기
게임에서 사용할 플레이어 및 적 개체 class를 저번 처럼만들어 줍니다.
## 게임 내에서 동작할 클래스 설정 ##
## 플레이어에게 적용할 클래스
class Player(pygame.sprite.Sprite):
# 플레이어 이미지 로딩 및 설정 함수
def __init__(self):
super().__init__()
# 플레이어 사진 불러오기
self.image = pygame.image.load('resources/chick.png')
# 이미지 크기의 직사각형 모양 불러오기
self.rect = self.image.get_rect()
# rec 크기 축소(충돌판정 이미지에 맞추기 위함)
self.rect = self.rect.inflate(-20,-20)
# 이미지 시작 위치 설정
self.rect.center = (540, 390)
# 플레이어 키보드움직임 설정 함수
def move(self):
prssdKeys = pygame.key.get_pressed()
# 왼쪽 방향키를 누르면 5만큼 왼쪽 이동
if self.rect.left > 0:
if prssdKeys[K_LEFT]:
self.rect.move_ip(-5, 0)
position_p = self.rect.center
return position_p
# 오른쪽을 누르면 5만큼 오른쪽으로 이동
if self.rect.right < 640:
if prssdKeys[K_RIGHT]:
self.rect.move_ip(5, 0)
position_p = self.rect.center
return position_p
## 적에게 적용할 클래스
class Enemy(pygame.sprite.Sprite):
# 적의 이미지 로딩 및 설정 함수
def __init__(self):
super().__init__()
# 적 사진 불러오기
self.image = pygame.image.load('resources/boom2.png')
# 이미지 크기의 직사각형 모양 불러오기
self.rect = self.image.get_rect()
# rec 크기 축소(충돌판정 이미지에 맞추기 위함)
self.rect = self.rect.inflate(-20,-20)
# 이미지 시작 위치 설정
self.rect.center = (random.randint(40, 600), 0)
# 적의 움직임 설정 함수+ 플레이어 점수 측정
def move(self):
global SCORE
# 적을 10픽셀크기만큼 위에서 아래로 떨어지도록 설정
self.rect.move_ip(0, SPEED) # x,y좌표 설정
# 이미지 가 화면 끝에 있으면(플레이어가 물체를 피하면) 다시 이미지 위치 세팅 + 1점 추가
if (self.rect.bottom > 440):
SCORE += 1
self.rect.top = 0
self.rect.center = (random.randint(30, 610), 0)
return self.rect.center
게임 만들기
이제 위의 클래스를 사용하여 폭탄 피하기 게임을 만들어 줍니다.
게임 종료 시 outro화면으로 넘어갈 수 있도록 설정하는 것도 잊지 말고 넣어 줍니다.
###### 게임 설정 ########
# 플레이어 및 적 개체 생성
def game(speed = SPEED):
P1 = Player()
E1 = Enemy()
# Sprites Groups 생성하기
# 게임 물체들을 그룹화 하여 그룹별로 접근하여 설정 시 용이하게 만들기
# 적(enemy) 객체 그룹화하기
Enemies = pygame.sprite.Group()
Enemies.add(E1)
# 전체 그룹을 묶기
All_groups = pygame.sprite.Group()
All_groups.add(P1)
All_groups.add(E1)
# 적 개체 1초(1000ms)마다 새로 생기는 이벤트 생성
increaseSpeed = pygame.USEREVENT + 1
pygame.time.set_timer(increaseSpeed, 1000)
# 게임 BGM 설정
bgm = pygame.mixer.Sound('resources/backgroundMusic.mp3')
bgm.play()
## 게임 루프 설정 ##
# 게임 종료되기 전까지 실행되는 루프(이벤트) 설정
while True:
for event in pygame.event.get():
# type increaseSpeed이면 속도 증가하여 어렵게 만듬(적 물체 이벤트)
if event.type == increaseSpeed:
speed += 0.5
# 이벤트가 종료되면 게임도 종료시킴
if event.type == QUIT:
pygame.quit()
sys.exit()
# 배경화면 사진 게임창에 불러오기(사진, 위치)
GameDisplay.blit(background, (0, 0))
# 하단부에 위치할 스코어 점수(적을 피할때마다 +1점 증가)
scores = small_font.render("Score: " + str(SCORE), True, BLACK)
GameDisplay.blit(scores, (10, 400))
# group1 = '<Player Sprite(in 1 groups)>'
# group2 = '<Enemy Sprite(in 2 groups)>'
# 게임 내 물체 움직임 생성
for i in All_groups:
GameDisplay.blit(i.image, i.rect)
i.move()
if str(i) == '<Player Sprite(in 1 groups)>':
player_pos = i
else:
enemy_pos = i
# <Player Sprite(in 1 groups)>
# 플레이어 충돌 판정(게임종료)시
if pygame.sprite.spritecollideany(P1, Enemies):
for i in All_groups:
i.kill()
# 물체 이미지 변경(충돌후 변경되는 이미지)
# 플레이어
GameDisplay.blit(background, (0, 0))
image0 = pygame.image.load('resources/chickbommed.png')
image0.get_rect()
GameDisplay.blit(image0, player_pos)
# 폭탄
image1 = pygame.image.load('resources/boomm.png')
image1.get_rect()
GameDisplay.blit(image1, enemy_pos)
pygame.display.update()
# 배경음악 멈춤
bgm.stop()
# 적과 충돌시 효과음 추가
pygame.mixer.Sound('resources/BOOM.WAV').play()
time.sleep(0.5)
# 게임오버화면 설정
pygame.mixer.Sound('resources/gameover.mp3').play()
pygame.display.update()
game_outro()
pygame.display.update()
# 초당 프레임 설정
FramePerSec.tick(FPS)
Outro 만들기
게임 종료 화면을 만들어 줍니다.
게임 점수를 배치하고 버튼을 배치하여,
다시 플레이하고 싶은 사람은 score 리셋 후 retry를, 종료하고 싶은 사람은 quit을 눌러 창을 닫을 수 있도록 설정합니다.
## 게임오버 페이지
def game_outro():
outro = True
while outro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
GameDisplay.blit(background, (0, 0))
final_scores = font.render("Your Score: " + str(SCORE), True, BLACK)
Music = small_font.render("Music: www.bensound.com",True,BLACK)
Photos = small_font.render("Photos: pixabay, pngwing",True,BLACK)
Madeby = small_font.render("Made by wonhwa.tistory.com",True,BLACK)
GameDisplay.blit(final_scores, (150, 100))
GameDisplay.blit(game_over, (280, 200))
GameDisplay.blit(Music,(10,400))
GameDisplay.blit(Photos,(10,380))
GameDisplay.blit(Madeby,(350,400))
#retry,quit버튼
outroBtn1 = button("RETRY",display_width/6,display_height/1.7,200,100,BLACK,BLUE,action=True,fcolor=YELLOW)
outroBtn2 = button("QUIT",display_width/2,display_height/1.7,200,100,BLACK,RED,action=True,fcolor=YELLOW)
#time.sleep(1)
#pygame.display.update()
#time.sleep(5)
#TODO: 버튼 누르면 동작
if outroBtn1 == True:
reset()
game()
if outroBtn2 ==True:
pygame.quit()
sys.exit()
pygame.display.update()
FramePerSec.tick(FPS)
하지만 dataframe에 apply를 적용할 때는 행 단위 또는 열 단위로만 값을 입력받기 때문에,
위의 함수식을 한개의 인자를 받는 함수로 바꾸어야 합니다.
그 후 이 함수식 안에서 3개의 인자를 생성하는 방향으로 함수를 수정하겠습니다.
이 때, df에서 사용하는 값이 각 행의 'Lemon', 'Orange', 'Price' 컬럼 이므로
이를 각각 함수 내에서 x,y,price라는 변수 생성후 열 번호로 할당을 해주도록 하겠습니다.
각 컬럼의 위치와 인덱스를 아래와 같이 확인하여 줍니다.
#컬럼확인
df.columns
#컬럼 번호 확인
for itr,i in enumerate(df.columns):
print(itr,' : ',i)
그 후 함수를 한 개의 인자값을 받는 함수로 수정하여 줍니다.
# 1개의 인자값을 가지는 함수로 변경
# x=레몬에이드,y=오렌지에이드,price=가격 각각 열 위치로 변수 할당
def total(col):
x = col[2] #Lemon
y = col[3] #Orange
price = col[6] #Price
total_money = (x+y)*price
return total_money
마지막으로, apply를 사용하여 해당 함수를 적용하여 줍니다.
각 열을 인자값으로 사용하므로 axis=1로 설정해 줍니다.(axis=0은 행방향)
#df에 적용하여 리턴값 새 열에 할당
# 열 기준이므로 axis = 1
df['total'] = df.apply(total,axis=1)
df
이렇게 total 열에 총 판매액 계산이 잘 되었습니다.
전체 코드
import pandas as pd
df = pd.read_csv('Lemonade2016-2.csv')
# 기온(temperature)을 섭씨(ºC)로 변환
temp = df['Temperature']
#화씨->섭씨 함수
# (temperature - 32) * 5 / 9
def to_C(x):
C = (x - 32) * 5 / 9
# 소수 셋째자리에서 반올림
C = round(C,2)
return C
# apply 함수 적용 후 새로운 열에 섭씨온도 추가해 주기
df['temp_C'] = temp.apply(to_C)
# price가 0.25인것만 필터링
cent_25 = df[df['Price'] == 0.25]
#판매액 을 구하는 함수
def lemon_money(x, price):
total = x * price
return total
cent_25['Lemon'].apply(lemon_money,price=0.25)
#컬럼확인
df.columns
#컬럼 번호 확인
for itr,i in enumerate(df.columns):
print(itr,' : ',i)
# 1개의 인자값을 가지는 함수로 변경
# x=레몬에이드,y=오렌지에이드,price=가격 각각 열 위치로 변수 할당
def total(col):
x = col[2] #Lemon
y = col[3] #Orange
price = col[6] #Price
total_money = (x+y)*price
return total_money
#df에 적용하여 리턴값 새 열에 할당
# 열 기준이므로 axis = 1
df['total'] = df.apply(total,axis=1)
df
국가는 Austrailia(호주), Brazil(브라질), Canada(캐나다), China(중국), France(프랑스), Germany(독일), India(인도), Italy(이탈리아), Japan(일본), Mexico(멕시코), Russia(러시아), Spain(스페인), Switzerland(스위스), United Kingdom(영국), United States(미국) 이렇게 15개국이 있습니다.
그리고 데이터에서 세기별로 데이터를 나누고 그 데이터를 시각화해주도록 하겠습니다.
데이터는 100년의 데이터가 다 있는 19C, 20C만 해보도록 하겠습니다.
matplotlib을 사용하여 그래프를 그리고, 국가 수 가 많으므로 범례를 추가해 주고 색도 각자 다른 색으로 추가해 주겠습니다.
그럼 위에서 다운받은 csv파일을 불러와 보도록 하겠습니다. 그리고, dtypes를 사용하여 파일 전체 열에 대해 데이터 타입이 어떻게 설정되어 있는지 확인합니다.
#데이터 불러오기
import pandas as pd
covid_df = pd.read_csv('Covid19Korea(200120220223).csv')
covid_df
14454행 x 14열 을 가진 데이터 프레임이 불러와졌습니다. 데이터 열에 관련해서는 아래를 참고해 주세요.
출처: 공공데이터 API 문서(코로나바이러스감염증_시도발생_현황조회서비스)
#데이터 타입 확인
covid_df.dtypes
데이터 타입을 확인해 보면, createDt(등록일시분초), std_day(기준일시) 등은 날짜형인데도 object로 설정되어있는 것을 확인할 수 있습니다. (눈으로 볼때는 날짜형으로 보여도 실제 데이터 타입은 다를 수 있으니 항상 사전에 확인해 보시길 바랍니다.) pandas에서 날짜 계산이나 추출을 위해서는 해당 열을 datetime 형으로 바꿔주어야 올바른 계산이 가능합니다. 때문에 날짜데이터로 형변환을 해 주도록 하겠습니다.
datetime으로 데이터 타입 변경하기
날짜 데이터로 변경할 때 1. to_datetime으로 변경하는 방법 및 2. parse_dates=[col_idx] 의 2가지 방법으로 변경이 가능합니다. createDt열을 datetime으로 변경해 보도록 하겠습니다. 아래는 pd.to_datetime을 사용하여 변경하는 방법입니다.
#createDt열 날짜 데이터 타입으로 변경하기
covid_df['createDt'] = pd.to_datetime(covid_df['createDt'])
다음으로는 csv를 불러올 때 parse_dates = [열인덱스]를 사용하여 변경하는 방법입니다. 코로나csv 파일에서 createDt가 0번째 열이므로 [0] 을 입력해 줍니다. 그후 데이터 타입을 출력해 봅니다.
datetime형의 데이터는 년, 월, 일 등을 각각 뽑아낼 수 있습니다. 해당 날짜 데이터 셀.year을 사용하여 아래처럼 년도를 추출할 수 있습니다.
covid_df['stdDay'][0].year
주의할 점은 df프레임에서 바로 .year을 하면 오류가 나고, covid_df['stdDay'][0] 처럼 개별 데이터로 접근 후 .year을 해야 원하는 정보를 찾을 수 있습니다. 열별로 한번에 데이터를 얻고 싶으면 dt를 사용하여 한번에 추출할 수 있습니다. 예시로, createDt에서 년, 월, 일을 추출해 각각 새로운 컬럼을 만들어 거기에 저장해 주도록 하겠습니다.
이번에는 날짜 계산을 해보도록 하겠습니다. 코로나 확진자가 한국에 처음 발생한 날짜를 찾아, 발생일로부터 얼마나 지났는지 계산해 보겠습니다. 코로나 확진자가 최초로 발생한 날은 createDt열의 .min()함수를 사용하여 알 수 있습니다.
# 코로나 최초 발병일로 부터 며칠이 지났는지 계산하기
## 날짜의 계산 ##
# 최초 발생자가 있는 날: 2020년 1월 20일(인천 1명)
covid_df['createDt'].min()
이것을 기준으로 하여 각 행마다 며칠이 지났는지 계산해 보겠습니다. 각 행의 createDt에서 최초 발생일을 빼서 구할 수 있습니다. outbreak_day = 등록일시 - 최초발생일
# outbreak_day 열을 만들어 발병일로 부터 며칠 지났는지 계산하기
covid_df['outbreak_day'] = covid_df['createDt'] - covid_df['createDt'].min()
covid_df
맨 끝 열에 outbreak_day가 추가되었습니다.
특정 기간의 데이터 추출
이번에는 특정 날짜의 데이터를 loc을 사용하여 추출해 보도록 합시다.
df.loc[df.날짜데이터열이름.dt.(year,month,day) == 해당 (년,월,일)]
위처럼 조건을 지정하여 추출이 가능합니다. 예시로 코로나 데이터의 2021년 데이터만 추출해 보도록 하겠습니다.
## 특정 기간의 데이터 추출
# 2021년 데이터 추출
test1_df = covid_df.loc[covid_df.createDt.dt.year == 2021]
test1_df
두 가지 이상의 조건도 설정 가능합니다. 이때 '&'을 사용하여 and조건을 사용할 수 있습니다.
df.loc[df(조건1) & df( 조건 2 ) ]
#2022년 1월 데이터만 추출(and 조건은 & 로 표시)
test2_df = covid_df.loc[(covid_df.createDt.dt.year == 2021) & (covid_df.createDt.dt.month == 1)]
test2_df
or 조건은 | (Shift+\) 를 사용하여 설정할 수 있습니다.
df.loc[df(조건1) | df( 조건 2 ) ]
#2020년도 또는 2021년도 데이터 추출(or 조건은 | 로 표시)
test3_df = covid_df.loc[(covid_df.createDt.dt.year == 2020) | (covid_df.createDt.dt.year == 2021)]
test3_df
이렇게 데이터를 추출 할 수 있습니다. 다만, 위 사진을 보면 맨 첫행 인덱스가0 이아닌 1026으로 되어 있습니다. 때문에 추후 분석할 때는 인덱스를 0부터 재세팅해주는 과정이 필요합니다. 인덱스 재세팅 방법은 아래 날짜별 값 계산에서 확인해 보도록 하겠습니다.
날짜별 값 계산하기(groupby)
처음 언급했듯이 사용되고 있는 데이터는 2020년부터 2022년 2월까지의 데이터를 담고 있습니다. 그리고 분석 시 년도별 코로나 발생 인원이 몇명인지 알고 싶을 때 groupby를 사용하여 계산을 해 보겠습니다. 우선, 데이터를 보면 시도 데이터 뿐만이 아니라 합계, 검역 같은 데이터 행도 있습니다. 여기서 전체 발생인원을 파악하여야 하니까 '합계' 행만 추출하여 계산하도록 하겠습니다. 우선 원본 df에서 gubun이 '합계'인 행만 추출해 줍니다.
# groupby를 사용하여 년도별 코로나 확진자 수 구하기
# '합계' 를 기준으로 하여 전국 년도별 코로나 확진자 수 구하기
#1. gubun 이 합계인 행만 추출하기
total_df = covid_df.loc[covid_df['gubun']=='합계']
total_df
이렇게 766행이 선택되었습니다. 그런데, 맨 첫 행이 0이 아니라 18 입니다. 때문에 인덱스를 0부터 다시 설정해 줍니다.
# 2. index 재세팅하기
new_idx = [i for i in range(len(total_df))]
total_df.index = new_idx
total_df
그럼 0부터 765까지 전체 행의 인덱스가 잘 정리되었습니다. 그 후 groupby를 사용하여 'Year'을 기준으로 합계를 구해 줍니다. 우리가 필요한 정보는 코로나 확진자 정보이므로 'incDec' (전일 대비 코로나 환자 수) 열의 합계만을 출력해 보겠습니다.
그럼 2020년, 2021년, 2022년(1월~2월 23일까지)의 확진자 수가 집계되었습니다. 위의 데이터를 보면, 2022년도는 1,2월 두달 치의 정보만 있는데도 그 전 년도의 확진자 수를 훨씬 넘어서는 것을 확인할 수 있습니다.
날짜를 인덱스로 설정하기
datetime 을 인덱스로 지정하면 따로 조건을 지정하지 않아도 원하는 날짜 부분의 추출이 바로 가능합니다. 우선 합계 df 인 total_df가 최신 날짜 순으로 지정되어 있어 오래된 날짜 순으로 정렬한 뒤, 인덱스를 datetime 인 createDt열로 바꾸어 보겠습니다.
# 날짜를 인덱스로 설정하기
total_df = total_df.sort_values('createDt') #날짜 오래된 순으로 정렬
#인덱스를 createDt로 변경
total_df.index = total_df['createDt']
total_df
이렇게 createDt로 인덱스가 세팅 되었습니다. 또는 date_range를 사용해서도 날짜인덱스 설정이 가능한데, 주의할 점은 날짜형의 열을 index로 설정 후 reindex를 해야 한다는 점입니다.
pd.date_range(start = '시작날짜' , end= '종료날짜')
# 날짜 인덱스 설정 방법2(시간 범위): date_range
index_dates = pd.date_range(start=total_df['createDt'].min(), end=total_df['createDt'].max())
# or
index_dates = pd.date_range(start='2020-01-20', end='2022-02-23')
index_dates
# index_dates로 날짜형으로 변경하기
## reindex
# ※date range 사용 시에는 꼭 날짜형인 'createDt'열을 먼저 인덱스로 지정 후 아래와 같이 reindex 하기 ※
total_df.reindex(index_dates)
total_df
이렇게 인덱스가 날짜형으로 세팅되면 loc을 사용할 필요 없이 df['날짜']로 필요한 부분을 바로 추출할 수 있습니다.
#2020년도 12월 데이터만 추출하기
total_df['2020-12']
위의 .loc을 사용할 때보다 더욱 간편하게 원하는 기간의 추출이 가능합니다만, 위 사진 빨간 박스에 있는 경고메세지에서는 곧 이 기능이 사라진다고 하니 참고해 주시길 바랍니다. loc을 사용하라고 권장하고 있네요.
시각화
마지막으로 위의 날짜로 인덱스를 세팅한 데이터프레임에서 전체 기간의 코로나 확진자 수(incDec)를 시각화 해보도록 하겠습니다.
# 확진자 수 시각화
#그래프 그리기
import matplotlib.pyplot as plt
ax = plt.subplots()
ax = total_df['incDec'].plot()
plt.show()
그래프도 볼 수 있듯이 2022년 들어서 확진자가 매우 가파르게 증가하는 것을 확인할 수 있습니다.