더북(TheBook)

12.1.1 데이터 수집하기

우리가 사용할 코로나 데이터는 OWID(Our World In Data)에서 제공하는 데이터입니다. 데이터는 https://github.com/owid/covid-19-data/tree/master/public/data에서 구할 수 있고, XLSX(엑셀), CSV(쉼표로 구분된 데이터), JSON 형식으로 파일을 내려받을 수 있습니다. 이 중에서 owid-covid-data.csv 파일을 기준으로 실습 데이터를 제공합니다. 이 책에서는 원본 파일 데이터를 그대로 사용하지 않고 covid19_country와 covid19_data라는 2개 테이블로 분리하고 일부 항목만 사용합니다. 분리 작업은 상당히 복잡하고 범위를 벗어나므로 자세한 설명은 생략하겠습니다. 여기서는 2020년 1월 1일부터 2021년 2월 28일까지의 데이터를 대상으로 분석합니다.

먼저 MySQL Workbench 프로그램을 실행해 다음과 같이 2개의 테이블을 만듭니다.

코드 12-1

USE mywork;

-- 국가 정보 테이블
CREATE TABLE covid19_country
(
 countrycode                 VARCHAR(10) NOT NULL,
 countryname                 VARCHAR(80) NOT NULL,
 continent                   VARCHAR(50),
 population                  DOUBLE,
 population_density          DOUBLE,
 median_age                  DOUBLE,
 aged_65_older               DOUBLE,
 aged_70_older               DOUBLE,
 hospital_beds_per_thousand  INT,
 PRIMARY KEY (countrycode)
);

-- 코로나 데이터 테이블
CREATE TABLE covid19_data
(
 countrycode                 VARCHAR(10) NOT NULL,
 issue_date                  DATE        NOT NULL,
 cases                       INT,
 new_cases_per_million       DOUBLE,
 deaths INT,
 icu_patients INT,
 hosp_patients INT,
 tests INT,
 reproduction_rate           DOUBLE,
 new_vaccinations            INT,
 stringency_index            DOUBLE,
 PRIMARY KEY (countrycode, issue_date)
);

실행결과

CREATE TABLE 문으로 테이블 2개를 생성합니다. covid19_country는 국가 정보를, covid19_data는 2020년 1월 1일부터 2021년 2월 28일까지 코로나 데이터를 담을 테이블입니다. 두 테이블의 상세 내역은 다음 표와 같습니다.

▼ 표 12-1 covid19_country 테이블 항목

칼럼명

데이터 타입

칼럼 설명

countrycode

VARCHAR(10)

국가 코드(기본 키)

countryname

VARCHAR(80)

국가명

continent

VARCHAR(50)

대륙명

population

DOUBLE

인구

population_density

DOUBLE

인구 밀도

median_age

DOUBLE

평균 연령

aged_65_older

DOUBLE

65세 이상 인구 비율

aged_70_older

DOUBLE

70세 이상 인구 비율

hospital_beds_per_thousand

INT

1000명당 병실 침대 수

 

▼ 표 12-2 covid19_data 테이블 항목

칼럼명

데이터 타입

칼럼 설명

countrycode

VARCHAR(10)

국가 코드(기본 키)

issue_date

DATE

발생일(기본 키)

cases

INT

확진자 수

new_cases_per_million

DOUBLE

100만 명당 확진자 수

deaths

INT

사망자 수

icu_patients

INT

중환자 수

hosp_patients

INT

병원 입원 환자 수

tests

INT

검사자 수

reproduction_rate

DOUBLE

감염재생산지수

new_vaccinations

INT

백신 접종자 수

stringency_index

DOUBLE

방역 지수로, 0에서 100까지의 값이 저장되어 있고 100이 가장 높음

covid19_country 테이블에는 국가 정보가 들어 있으므로 기본 키 칼럼은 국가 코드인 countrycode입니다. covid19_data 테이블은 날짜별, 국가별 코로나 데이터를 담고 있으므로 기본 키 칼럼은 국가 코드인 countrycode와 날짜인 issue_date입니다. 두 칼럼을 조합하면 covid19_data 테이블에서 유일한 값이 됩니다. 그리고 covid19_country와 covid19_data 테이블은 countrycode 칼럼을 이용해 조인할 수 있습니다.

테이블을 만들었으니 데이터를 입력해 보죠. 먼저 covid19_country 테이블의 데이터는 이 책의 자료실에서 받은 스크립트 파일에 들어 있습니다. ch12 폴더로 가서 01.covid19_country_insert.sql 파일을 열고 안에 있는 모든 내용을 복사합니다. 그런 다음 MySQL Workbench 프로그램의 SQL 입력창에 있는 내용을 모두 지우고 복사한 내용을 붙여 넣습니다. 전체 문장을 실행해야 하므로 Ctrl + Shift + Enter키를 눌러 실행합니다.

코드 12-2 01.covid19_country_insert.sql(일부)

-- covid19_country INSERT
INSERT INTO covid19_country VALUES
('AFG', 'Afghanistan', 'Asia', 38928341, 54.422, 18.6, 2.581, 1.337, 0.5),
('AGO', 'Angola', 'Africa', 32866268, 23.89, 16.8, 2.405, 1.362, null),
('AIA', 'Anguilla', 'North America', 15002, null, null, null, null, null),
('ALB', 'Albania', 'Europe', 2877800, 104.871, 38, 13.188, 8.643, 2.9),
('AND', 'Andorra', 'Europe', 77265, 163.755, null, null, null, null),
('ARE', 'United Arab Emirates', 'Asia', 9890400, 112.442, 34, 1.144, 0.526, 1.2),
('ARG', 'Argentina', 'South America', 45195777, 16.177, 31.9, 11.198, 7.441, 5),
('ARM', 'Armenia', 'Asia', 2963234, 102.931, 35.7, 11.232, 7.571, 4.2),
('ATG', 'Antigua and Barbuda', 'North America', 97928, 231.845, 32.1, 6.933, 4.631, 3.8),
('AUS', 'Australia', 'Oceania', 25499881, 3.202, 37.9, 15.504, 10.129, 3.8),
('AUT', 'Austria', 'Europe', 9006400, 106.749, 44.4, 19.202, 13.748, 7.4),
('AZE', 'Azerbaijan', 'Asia', 10139175, 119.309, 32.4, 6.018, 3.871, 4.7),
('BDI', 'Burundi', 'Africa', 11890781, 423.062, 17.5, 2.562, 1.504, 0.8),
...

실행결과

이번에는 02.covid19_data_insert.sql 파일을 열고 안에 있는 모든 내용을 복사합니다. SQL 입력창에 있는 내용을 모두 지우고 복사한 내용을 붙여 넣습니다. 그리고 Ctrl + Shift + Enter 키를 눌러 실행합니다.

코드 12-3 02.covid19_data_insert.sql(일부)

-- covid19_data INSERT
INSERT INTO covid19_data VALUES
('ALB', '2020-04-11', 17, 5.907, 0, null, null, '259', 0.94, null, 84.26),
('ALB', '2020-04-12', 13, 4.517, 0, null, null, '233', 0.96, null, 84.26),
('ALB', '2020-04-13', 21, 7.297, 0, null, null, '193', 1, null, 84.26),
('ALB', '2020-04-14', 8, 2.78, 1, null, null, '236', 1.01, null, 84.26),
('ALB', '2020-04-15', 19, 6.602, 1, null, null, '252', 1.06, null, 84.26),
('ALB', '2020-04-16', 24, 8.34, 1, null, null, '269', 1.09, null, 84.26),
('ALB', '2020-04-17', 21, 7.297, 0, null, null, '253', 1.08, null, 84.26),
('ALB', '2020-04-18', 9, 3.127, 0, null, null, '231', 1.06, null, 89.81),
...

실행결과

두 테이블 데이터 입력이 끝나면 COUNT() 함수로 두 테이블에 입력된 데이터 건수를 확인합니다.

코드 12-4

SELECT COUNT(*)
  FROM covid19_country;

SELECT COUNT(*)
  FROM covid19_data;

실행결과

covid19_country 테이블 데이터 건수

 

covid19_data 테이블 데이터 건수

covid19_country 테이블은 215건, covid19_data 테이블은 71957건이 입력됐습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.