코로나 사망률에 영향을 미치는 다른 값을 찾아보기 위해 새로운 가설을 세웠다.
각 새로운 대립가설은 아래와 같다.
나이가 많으면 코로나 사망률이 높을 것이다.
성별, 인종은 코로나 사망률과 관계가 있을 것이다.
영가설은 아래처럼 세웠다.
나이, 성별, 인종은 코로나 사망률과 관계가 없을 것이다.
데이터는 인종의 구별이 있는 나라에서 가져다가 사용하기로 했다.
데이터는 뉴욕시 코로나 데이터이다. 아래 깃허브에서 가져와 사용했다.
https://raw.githubusercontent.com/nychealth/coronavirus-data/master/totals/group-data-by-boro.csv
우선 분석하기 전에 병상수, 감염수에 대한 데이터도 잘 정리되어있어서 같이 분석하기로 했다.
1. 데이터 정제
cov_group=pd.read_csv('https://raw.githubusercontent.com/nychealth/coronavirus-data/master/totals/group-data-by-boro.csv')
cov_group
위의 코드로 데이터를 불러왔다.
병상수, 감염수의 Age 0-17의 NaN 값을 채워주기 위해 아래와 같은 코드를 작성했다.
데이터의 read_me 파일 안에 colums 를 보고 규칙을 찾아서 작성했다.
for cnt in range(10):
for i in range(4-(cnt%2)):
cov_group.iloc[4,i+2+(5-(cnt%2))*i] = cov_group.iloc[1:4,:].iloc[:,i+2+(5-(cnt%2))*i].sum()
그 후 필요 없어진 123 컬럼을 drop으로 지웠는데, 나중에 후회하고 다시 살렸다.
cov_group=cov_group.drop([1,2,3],axis=0)
아래 컬럼수를 보면 47개로 너무 많아서 필요한 데이터만 가져와 사용하기로 했다.
우리는 각 지역의 비율로만 계산 할 것이기 때문에 count와 불필요한 컬럼들은 빼고 가져왔다.
#필요한 데이터만 가져옴
XX=cov_group[(['group','subgroup','BK_CONFIRMED_CASE_RATE','BX_CONFIRMED_CASE_RATE',
'MN_CONFIRMED_CASE_RATE','QN_CONFIRMED_CASE_RATE','SI_CONFIRMED_CASE_RATE',
'BK_HOSPITALIZED_RATE','BX_HOSPITALIZED_RATE','MN_HOSPITALIZED_RATE','QN_HOSPITALIZED_RATE','SI_HOSPITALIZED_RATE',
'BK_DEATH_RATE','BX_DEATH_RATE','MN_DEATH_RATE','QN_DEATH_RATE','SI_DEATH_RATE'])]
XX
뉴욕시의 각 구별로 작성되어 있기때문에 이를 묶어주기로 했다.
컬럼 명칭이 'OO_ '+'필요한 데이터' 식으로 묶어있기에 슬라이스 형식으로 나눴다.
그리고 각 melt와 시켜서 보기 편하게하고 필요한 데이터를 종류로 묶었다.
#지역대별로 묶어 주기위해서 melt와 apply 이용
covid_long = pd.melt(XX, id_vars=['group','subgroup'])
covid_long['지역'] = covid_long['variable'].apply(lambda x : x[:3])
covid_long['종류'] = covid_long['variable'].apply(lambda x : x[3:])
2 - 1. 나이와 코로나의 상관관계
나이와 코로나 사망률의 관계를 알아보기 위해 covid_death_age라는 변수에 새로 group_by 했다.
covid_death_age=covid_long[covid_long['종류']=='DEATH_RATE'].groupby('group').get_group('Age')
covid_death_age
이 것을 다시 한 번 더 subgorup으로 groupby 해서 결과를 뽑아보니, 이 상태에서만에 비해서 딱 평균값만 보여주기에 위의 방법으로 그래프를 뽑기로 했다.
이 데이터의 0-17, 18-24,25-34 의 경우 너무 작아서 안보이지만 (4, 11.824 ...), 실제 비율을 확인해보면 각 단자리이게 빼서 보여주는 것 보다도 같이 묶어서 보여주는 게 더 다이나믹할 것으로 보여 이 상태로 나뒀다.
나이의 경우 카테고리가 3개 이상이기 때문에 F 검정을 사용했다.
covid_death_age_y = covid_death_age[covid_death_age['subgroup'] == '0-17']['value']
covid_death_age_20u = covid_death_age[covid_death_age['subgroup'] == '18-24']['value']
covid_death_age_20o = covid_death_age[covid_death_age['subgroup'] == '25-34']['value']
covid_death_age_30 = covid_death_age[covid_death_age['subgroup'] == '35-44']['value']
covid_death_age_40 = covid_death_age[covid_death_age['subgroup'] == '45-54']['value']
covid_death_age_50 = covid_death_age[covid_death_age['subgroup'] == '55-64']['value']
covid_death_age_60 = covid_death_age[covid_death_age['subgroup'] == '65-74']['value']
covid_death_age_70 = covid_death_age[covid_death_age['subgroup'] == '75+']['value']
print(covid_death_age_20u.mean())
stats.f_oneway(covid_death_age_y, covid_death_age_20u, covid_death_age_20o,
covid_death_age_30,covid_death_age_40,covid_death_age_50,covid_death_age_60,covid_death_age_70)
그 결과 아래와 같은 결과가 나왔다.
F_onewayResult(statistic=109.0194322820687, pvalue=1.7142824782959604e-20)
F의 statistic 이 109.02가 나왔고 유의확률은 아주 적은 값이 나와 유의미한 결과가 나왔다.
즉, 나이에 따른 코로나 사망률은 큰 차이가 있다. 그리고 그래프로 비교해봐도 나이가 먹을 수록 급격하게 사망률이 증가함을 알 수 있다. 그래서 우리의 대립가설이 맞았음을 확인 할 수 있었다.
추가로 나이에 따른 감염 비율과 , 입원 비율을 조사해봤다.
각각 그래프와 F검정으로 표현하면 아래와 같다.
우선 나이별 확진자 비율과 사망자 비율의 관계에서 10대가 확연히 큰 값이 나왔다. 결과가 의뭉스럽게 나와서 새로운 가설을 세우고 제대로 된 데이터인지 확인했다. 0-17세의 표본이 다른 표본보다 너무 커서 결과가 위처럼 나왔다고 가정 했다.
이를 해결하기 위해 다시 위로 올라가 0-17세의 데이터를 삼등분 했다.
다행이 이 데이터가 있어서 새로 평균내는 등의 가공 없이 사용하기로 했다.
나이별을 더 세분화 시켰을 때도 F 검정이 맞는지 확인을 해봤다. 하지만 여전히 0-17과 75+ 에서는 나이대를 정확히 나누지 않았으므로 이 값들을 제외하고도 F 검정에 알맞는지 체크해야했다. 그리고 아래와 같은 결과를 뽑아냈다.
F 검정으로 구간대가 정확한 값들만 가져와서 비교해본 결과 statistic는 3.05로 미약한 차이가 있음을 알 수 있었다. 이때의 유의확률은 0.028로 낮은 편이었고 그래프를 비교해본 결과 18세부터는 비슷하게 유지하다가 어느 나이대를 지나면 유의미하게 감소함을 알 수 있었다.
나이별 입원자 비율과 사망자 비율의 관계에서 나이가 많을 수록 점차 증가하는 추세지만, 10대에서 다시 커짐을 알 수 있다. 이 데이터를 보고 그 이유를 파악하기 위해 새로운 가설을 세웠다. '영유아 때의 아이는 오히려 입원비율이 높을 것이다.'가 그 가설이다. 이를 토대로 나이대를 나눠 새로운 조사를 했다.
그 결과 우리가 새가설이 알맞음을 증명할 수 있었다.
2-2. 성별과 코로나의 상관관계
성별은 남, 녀 두 가지 카테고리로 나누었기 때문에 T검정을 사용했다.
성별 역시 사망자와 비슷한 방법으로 자료를 정리했다.
#나이별 입원자 수 , DEATH_RATE
covid_death_sex=covid_long[covid_long['종류']=='DEATH_RATE'].groupby('group').get_group('Sex')
covid_death_sex
그리고 결론을 내리면
T검정을 통한 statistic 값은 2.799 유의확률은 0.026으로 미약한 차이가 있음을 알 수 있었다.
확진 비율과 입원 비율도 구해보면
둘 다 statistic 값이 1언저리고 유의확률은 0.05보다 커서 거의 차이가 없다고 봐도 무방했다. 따라서 코로나 사망률과 성별의 관계는 미약하고, 확진률, 입원률은 관계가 거의 없다고 볼 수 있다. 즉 우리의 대립가설은 틀렸고, 영가설에 더 가깝다는 결론을 내렸다.
2-3 인종과 코로나의 상관관계
인종은 크게 네가지(아시안계, 아프리카계, 라틴계, 백인계)로 나눴다.
카테고리가 세가지보다 많기 때문에 F검정을 사용했다.
인종도 나이, 성별과 비슷한 방식으로 뽑아냈다.
인종과 코로나 사망률의 상관관계는 아래와 같다.
#인종별 사망자 수 , DEATH_RATE
covid_death_race=covid_long[covid_long['종류']=='DEATH_RATE'].groupby('group').get_group('Race/ethnicity')
covid_death_race
F 검정으로 측정해본 결과 statistic 값이 11.933이고 유의 확률이 0.002이다.
우연성도 낮고 상당한 차이가 있음을 알 수 있다. 그래프를 보면 아프리카계, 라틴계 사람들보다, 백인, 아시아인의 코로나 사망률이 낮음을 알 수 있다. 우리는 이것이 유전적 영향 때문인지 아니면 우리가 조사한 지역(뉴욕시)의 아시아인, 백인 계통의 생활수준의 차이 때문인지 생각해봤는데, 우선 후자의 경우는 아니라고 파악되었다. 왜냐하면 우선 위의 그래프에서 표준편차가 검은색 선으로 보여지는데 그 범위 자체도 크게 찾이가 났기 때문이다. 위의 나라별 극빈률과 행복지수자체도 코로나 사망률과 크게 관계 없었기 때문에 일단 넘어가기로 했다. 전자의 경우가 맞는지 확인하기 위해 다른 데이터를 구하다가 그냥 기사를 토대로 납득하고 넘어갔다. 또 사망률에 차이가 나면 입원률과 확진률은 어떤지 비교해보기로 했다.
https://www.bbc.com/korean/news-52422855
코로나19: 왜 일부 인종이 더 취약하게 나타날까? - BBC News 코리아
차별과 언어 장벽, 다양한 요인들 때문에 특정 집단은 코로나19에 더 취약함을 보인다.
www.bbc.com
그 결과 아래와 같은 결론이 나왔다.
우선 전체적인 감염률은 statistc 도 적게 차이나고 유의확률도 높아 관계가 없음을 알 수 있다. 하지만 입원률은 statistic이 11.74로 차이가 있고 유의확률도 0.0002로 낮다. 즉, 코로나는 비슷하게 감염되는데 위급한 환자의 비율은 차이가 남을 알 수 있다.
결론 : 나이가 많으면 코로나 사망률이 높았고, 성별은 크게 관계가 없었으나, 인종에 따라서는 코로나 사망률에 차이가 났다. (아시안, 백인에 비해 라틴계와 아프리카계의 사망률이 높았다.)
후기 .
데이터를 정제, 분석은 금방 끝났다. 조사하고 데이터 수집도 코로나 자료가 널려있어서 금방 구했다. 하지만 결론이나 미약한 점을 보안하는데 조금 더 힘썼으면 어땠을까 싶다. 미비한 점도 많고 문제점도 많고, 이상한 논리도 있는데, 이를 해결할 방법은 다음 과정에서 배운다. 국비 과정이 끝나고 프로젝트를 보면서 조금 더 완성도를 높여봐야겠다. 여기까지 오는데 하루 정도 걸렸고, 나머지 오일 정도는 이것을 웹으로 만들어보는데 노력했다.
'프로젝트 정리' 카테고리의 다른 글
국비 데이터 분석 2차 프로젝트 결산 - 6 (0) | 2023.04.11 |
---|---|
국비 데이터 분석 2차 프로젝트 결산 - 5 (1) | 2023.04.11 |
국비 데이터 분석 2차 프로젝트 결산 - 4 (0) | 2023.03.06 |
국비 데이터 분석 2차 프로젝트 결산 - 3 (0) | 2023.03.03 |
국비 데이터 분석 2차 프로젝트 결산 -1 (0) | 2023.02.21 |