1 / 25
← 이전 · → 다음 · F 전체화면
WEEK 5

Pandas를 활용한
코로나19 데이터 분석

대한민국과 미국의 인구 대비 누적 확진자 비율 비교

00

학습목표

01

데이터 확인

CSV 파일을 불러오고 head()와 info()를 이용하여 데이터의 구조를 확인한다.

02

데이터 선택

열 이름과 조건식을 이용하여 분석에 필요한 행과 열을 선택한다.

03

비율 계산

지역별 인구 규모를 고려하여 인구 대비 누적 확진자 비율을 계산한다.

04

시각화와 해석

대한민국과 미국의 누적 확진자 비율을 선 그래프로 표현하고 결과를 해석한다.

00

주요 학습내용

01

선수학습 확인

리스트, 튜플, 딕셔너리, DataFrame의 특징을 확인한다.

02

프로젝트 개요

분석 질문과 비교 지표를 설정한다.

03

데이터 확인 및 정제

CSV 파일을 읽고 필요한 행과 열을 선택한다.

04

데이터 시각화

인구 대비 누적 확진자 비율을 계산하여 선 그래프로 표현한다.

실습 구성 실습 1: 데이터 다운로드 및 확인  실습 2: 국가별 데이터 비교 및 시각화

SECTION 01

선수학습 확인

파이썬 자료형과 Pandas 자료구조 복습

01

파이썬 자료형과 DataFrame

LIST

리스트

scores = [88, 92, 75]

여러 값을 순서대로 저장하며, 값을 추가하거나 수정할 수 있다.

TUPLE

튜플

student = ("김하늘", 20)

여러 값을 순서대로 저장하지만, 생성한 뒤에는 값을 바꿀 수 없다.

DICT

딕셔너리

course = {
    "week": 5
}

키와 값을 한 쌍으로 저장하며, 키를 이용하여 값을 찾는다.

DATAFRAME

DataFrame

df = pd.DataFrame(data)

여러 데이터를 행과 열로 구성된 표 형태로 다룬다.

!

이번 실습에서는 리스트와 딕셔너리의 구조가 DataFrame의 열 선택 및 생성 과정에 다시 사용된다.

01

확인문제

각 변수에 저장된 자료형을 확인한다.
course["week"]의 실행 결과를 예상한다.
scores[1]의 실행 결과를 예상한다.
student[0] = "김민준"을 실행하면 어떻게 되는지 설명한다.
# 다음 코드를 읽고 질문에 답한다.

scores = [88, 92, 75]

student = ("김하늘", 20)

course = {
    "name": "데이터 분석",
    "week": 5
}

개별 확인 3분 · 옆 학생과 답 비교 2분

SECTION 02

프로젝트 개요

분석 질문과 비교 지표 설정

02

분석 과제

프로젝트 상황

안나는 대한민국에서 미국 하와이로 이사했다. 한국에 있는 친구를 하와이로 초대하기 전에 두 지역의 코로나19 상황을 비교하려고 한다.

최종 분석 질문

해당 기간의 하와이와 대한민국 중 인구 대비 누적 확진자 비율은 어느 지역이 더 높았는가?

Week 5

국가 단위 데이터를 이용하여 대한민국과 미국을 비교한다.

Week 6

하와이주 데이터를 추가하여 대한민국과 하와이를 비교한다.

!

미국 전체의 결과는 하와이주의 상황을 그대로 나타내지 않는다. 이번 주 분석은 최종 분석을 위한 준비 단계에 해당한다.

02

인구 규모를 고려한 비교

대한민국과 미국은 전체 인구가 다르므로 누적 확진자 수만으로 두 지역을 직접 비교하기 어렵다.

누적 확진자 비율 = 누적 확진자 수전체 인구 × 100

계산 결과가 10이라면 누적 확진자 수가 전체 인구의 약 10%에 해당한다는 뜻이다.

해석 시 유의사항

  • 이번 분석에서는 일일 신규 확진자가 아니라 누적 확진자 수를 사용한다.
  • 검사 규모와 보고 방식은 국가마다 다를 수 있다.
  • 누적 확진자 비율만으로 코로나19 상황 전체를 판단할 수는 없다.
02

데이터 분석 절차

1

문제 정의

대한민국과 미국의 누적 확진자 비율 변화를 비교한다.

2

데이터 수집

지역, 날짜, 누적 확진자 수, 인구가 포함된 자료를 준비한다.

3

데이터 정제

필요한 열과 행을 선택하고 날짜 자료형을 정리한다.

4

시각화 및 해석

선 그래프를 작성하고 지역별 변화와 분석의 한계를 설명한다.

이번 실습에서는 문제 정의 → 데이터 수집 → 데이터 정제 → 시각화 및 해석의 순서에 따라 분석을 진행한다.

SECTION 03 · 실습 1

데이터 다운로드 및 확인

CSV 파일 내려받기 · 데이터 구조 확인 · 분석 변수 선택

03

CSV 다운로드 링크 찾기

1

웹 브라우저에서 Our World in Data COVID-19 Data Explorer에 접속한다.

https://ourworldindata.org/explorers/covid
2

화면 왼쪽 위의 Download this dataset을 클릭한다.

Download this dataset을 누르면 CSV 링크가 있는 다운로드 페이지로 이동한다. 파일은 다음 단계에서 코드로 내려받는다.

Our World in Data COVID-19 Data Explorer에서 Download this dataset의 위치
03

CSV 링크 주소 복사

Download our compact dataset CSV 링크의 링크 주소 복사 메뉴
1

Download our compact dataset (CSV) 위에서 마우스 오른쪽 버튼을 누른다.

2

링크 주소 복사를 선택한다.

3

복사한 주소를 다음 슬라이드의 url 변수에 붙여 넣는다.

!

파일은 브라우저에서 직접 저장하지 않는다. 다음 슬라이드의 코드가 복사한 주소에서 약 174MB의 CSV를 내려받아 지정한 이름으로 저장한다.

03

코드로 CSV 다운로드 및 불러오기

실행 순서

  • 복사한 링크 주소를 url에 붙여 넣는다.
  • 첫 번째 셀을 최초 1회만 실행한다.
  • owid-covid-data.csv가 현재 폴더에 생성된다.
!

주의 · 다운로드가 끝난 뒤에는 두 번째 셀만 실행한다. 첫 번째 셀을 다시 실행하면 큰 CSV 파일을 다시 내려받는다.

최초 1회만 실행 · CSV 파일 내려받기

# Pandas 라이브러리 불러오기
import pandas as pd
import urllib.request

# CSV 파일 내려받기 및 파일 이름 지정
url = "https://catalog.ourworldindata.org/garden/covid/latest/compact/compact.csv"
urllib.request.urlretrieve(url, "owid-covid-data.csv")

이후에는 이 셀만 실행 · CSV 파일 불러오기

# 이름을 바꾼 CSV 파일 불러오기
raw_df = pd.read_csv(
    "owid-covid-data.csv"
)

raw_df

read_csv()는 CSV 파일을 읽어 DataFrame으로 변환한다.

03

내려받은 데이터 구조 확인

head()

코드로 내려받아 불러온 DataFrame의 위쪽 5개 행을 출력한다.

raw_df.head()
  • 열 이름과 값의 형태를 확인한다.
  • 한 행이 무엇을 의미하는지 확인한다.
  • 날짜와 숫자의 저장 형태를 살펴본다.

info()

내려받은 DataFrame의 전체 구조를 요약하여 출력한다.

raw_df.info()
  • 전체 행과 열의 개수를 확인한다.
  • 열별 결측값 여부를 확인한다.
  • 각 열의 자료형을 확인한다.
03

분석에 필요한 열 선택

열 이름내용
code국가 코드
country국가 이름
date날짜
total_cases누적 확진자 수
population전체 인구

코드로 불러온 raw_df에서 열 이름을 리스트로 만든 뒤, 필요한 열만 선택한다. .copy()로 독립된 DataFrame을 만들어 이후 날짜 열을 안전하게 수정한다.

# 필요한 열 이름
selected_columns = [
    "code",
    "country",
    "date",
    "total_cases",
    "population"
]

# 필요한 열만 선택
revised_df = raw_df[
    selected_columns
].copy()

revised_df.head()
03

실습 1: 데이터 다운로드 및 확인

실습 내용

  • Our World in Data의 CSV 링크 주소를 복사한다.
  • 코드의 url에 주소를 넣어 CSV를 내려받고 owid-covid-data.csv로 저장한다.
  • 다운로드 후에는 두 번째 셀로 CSV 파일을 DataFrame에 불러온다.
  • head()로 상위 5개 행을 확인한다.
  • info()로 행과 열의 개수 및 자료형을 확인한다.
  • 분석에 필요한 5개 열을 선택한다.

추가 실습

revised_df["country"].unique()를 실행하여 데이터에 포함된 국가를 확인한다.

결과 확인 1
DataFrame에 5개 열만 남아 있는가?

결과 확인 2
date 열의 현재 자료형은 무엇인가?

결과 확인 3
한 행은 특정 지역의 특정 날짜에 대한 정보를 나타내는가?

실습 시간 25분 · 실행 결과는 다음 단계에서 계속 사용한다.

SECTION 04 · 실습 2

국가별 데이터 비교

행 선택 · 날짜 색인 설정 · 비율 계산 · 선 그래프 작성

04

조건에 따른 행 선택

country 열의 값이 지정한 국가 이름과 같은 행만 선택한다.

조건식의 결과

revised_df["country"] == "South Korea"

각 행에 대하여 조건을 만족하면 True, 만족하지 않으면 False를 반환한다.

# 대한민국 데이터
kor_df = revised_df[
    revised_df["country"]
    == "South Korea"
].copy()

# 미국 데이터
usa_df = revised_df[
    revised_df["country"]
    == "United States"
].copy()

kor_df.head()
usa_df.head()
04

날짜 자료형 변환 및 색인 설정

날짜 자료형 변환

문자열로 저장된 날짜를 Pandas의 날짜 자료형으로 변환한다.

kor_df["date"] = pd.to_datetime(
    kor_df["date"]
)

usa_df["date"] = pd.to_datetime(
    usa_df["date"]
)

날짜를 색인으로 설정

날짜를 행의 이름표로 사용하여 같은 날짜의 값을 맞춘다.

kor_df.set_index(
    "date", inplace=True
)

usa_df.set_index(
    "date", inplace=True
)
04

누적 확진자 비율 계산 및 시각화

누적 확진자 수÷전체 인구×100
South Korea United States date % 형태 예시
# 인구 대비 누적 확진자 비율
kor_df["case_rate"] = (
    kor_df["total_cases"]
    / kor_df["population"] * 100
)

usa_df["case_rate"] = (
    usa_df["total_cases"]
    / usa_df["population"] * 100
)

# 비교용 DataFrame
comparison_df = pd.DataFrame({
    "South Korea": kor_df["case_rate"],
    "United States": usa_df["case_rate"]
})

comparison_df.plot.line(
    figsize=(10, 5), rot=45
)
04

그래프를 읽기 쉽게 만드는 요소

COVID-19 Case Rate: South Korea vs United States South Korea United States Date Cumulative Case Rate (%) Grid lines

제목

그래프가 무엇을 비교하는지 한눈에 알려 준다.

x축 · y축

x축은 날짜, y축은 비교하는 값과 단위를 표시한다.

범례

선의 색이 어떤 국가를 뜻하는지 알려 준다.

격자선

선의 높이와 값의 변화를 더 쉽게 읽게 해 준다.

04

그래프 제목과 축 이름 넣기

그래프를 그린 뒤 ax에 설정을 추가하면, 보는 사람이 값의 의미를 쉽게 이해할 수 있다.

코드의 핵심

  • set_title(): 그래프 제목
  • set_xlabel(), set_ylabel(): 축 이름과 단위
  • legend(): 선과 국가 이름 연결
  • grid(): 값 읽기를 돕는 격자선

열 이름이 범례에 자동으로 표시되지만, legend(title="국가")로 범례 제목을 더할 수 있다.

import matplotlib.pyplot as plt

ax = comparison_df.plot.line(
    figsize=(10, 5), rot=45
)

ax.set_title("COVID-19 Case Rate: South Korea vs United States")
ax.set_xlabel("Date")
ax.set_ylabel("Cumulative Case Rate (%)")
ax.legend(title="Country")
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()
04

실습 2: 국가별 데이터 비교 및 결과 해석

실습 내용

  • 대한민국과 미국의 행을 각각 선택한다.
  • 날짜 자료형을 변환하고 날짜를 색인으로 설정한다.
  • 인구 대비 누적 확진자 비율을 계산한다.
  • 두 지역의 비율을 하나의 선 그래프로 표현한다.

추가 실습

comparison_df.loc["2022-01-01":]을 이용하여 2022년 이후의 변화만 그래프로 표현한다.

결과 작성
그래프에서 확인한 사실 2가지를 작성한다.

분석의 한계
누적 확진자 비율만으로 판단하기 어려운 점을 1가지 작성한다.

다음 주 학습내용

하와이주 데이터를 추가하고 결측값, 날짜 정렬, 색인 자료형 불일치 문제를 처리한다.

실습 시간 30분

05

과제 제출 안내

LXP 제출

오늘 실습 2에서 그린 그래프를 업로드하세요.

대한민국과 미국의 인구 대비 누적 확진자 비율을 비교한 선 그래프가 보이도록 제출합니다.

주차 퀴즈

이번 주차 퀴즈를 풉니다.

LXP에서 5주차 퀴즈를 완료해 주세요.

DUE DATE

다음 주 수업일
전날 밤(23:59)까지

!

제출 전 확인 · 그래프의 제목, x축·y축 라벨, 범례가 모두 표시되는지 확인한다.