파이썬으로 데이터 주무르기 스터디&응용

1-1. 대구광역시 구별 인구 수와 교육 시설 살펴보기 (다른 데이터를 통한 응용 및 실습)

꿀복피그 2024. 1. 3. 02:52

안녕하세요 여러분! 오늘은 어제 새롭게 배운 pandas 명령들을 이용해서

다른 데이터로 응용해보는 시간을 가지도록 할거예요!

 

다들 두근두근 기대되지 않나요?

그럼 같이 데이터 수집부터 pandas를 통한 전처리 과정까지 함께 알아가 봅시다!

 

먼저, 오늘 여러분과 함께 분석할 데이터는 얼마 전 군위군 통합이 이루어진 대구광역시의

행정구역별 학교수와 학원수, 학령인구 수 데이터예요.

학기 중에 수강한 오픈소스지리정보시스템 수업의 팀플 과제 주제였거든요!

당시에는 엑셀을 통해 전처리를 하고 얼렁뚱땅 QGIS를 통해 지도로 시각화를 했는데, 

이번에는 전 시간에 배운 pandas를 통해 더욱 깔끔하게 데이터를 만져볼 생각입니다~

함께 가보시죠!

 

1. 데이터 가져오기

분석에 필요한 데이터: 대구광역시 행정구역별 학교수, 대구광역시 행정구역별 학원수, 대구광역시 행정구역별 학령인구

데이터 획득 경로:

  • KOSIS 국가통계포털 - 행정구역별 고등학교 개황
  • D-데이터허브 - KOSIS 국가통계포털 - 사설학원 및 독서실
  • KOSIS 국가통계포털 - 주민등록인구현황 - 행정구역(읍면동)별/5세별 주민등록인구(2011년~)

2. 데이터 분석하기

이전 글 <Chapter 1. 서울시 구별 CCTV 현황 분석> 에서 알아 본 기능들을 바탕으로 위 데이터들을 전처리하는 과정과 코드를 순서대로 설명해보도록 할게요.

 

<대구광역시 고등학교 데이터 가져오기>

  1.  전국 행정구역별 고등학교 개황 데이터를 read_excel() 명령을 통해 School 변수명으로 불러온다.
  2. 전국 시군구별 고등학교 수가 나와있는 데이터에서 대구광역시의 데이터만 골라내기 위해, 칼럼명 '시도'에서 대구만을 선택하고, 일반고만을 선별하기 위해 칼럼명 '학제'에서 (일반고)를 선택하여 전처리 한다. 
  3. 이를 copy()를 사용하여 School_Daegu 변수명에 저장한다.

 

* 코드:

School = pd.read_excel(r"C:\Users\hbsss\OneDrive\문서\DataScience\data\2022_행정구역별 개황_1.xlsx",usecols='A,B,C,D',engine=None)
School_Daegu=School[(School['시도']=='대구')&(School['학제']=='(일반고)')].copy()
School_Daegu

u

*결과:

대구광역시 행정구역별 일반고등학교 수

 

   <대구광역시 학원 수 데이터 가져오기>

  1. 대구광역시 행정구역별 사설학원 수 및 독서실 수를 read_csv() 명령을 통해 변수명 Academy_Daegu 로 불러온다. 
  2. 불러 온 데이터에는 예체능 학원 및 불필요한 데이터도 함께 섞여있기 때문에 필요한 열만 추리기 위해 iloc()을 통해 첫번째랑 세번째 열만 가져온다. 행은 전체 행을 가져온다. 
  3. 정리한 표를 copy() 를 통해 변수명 part_Academy_Daegu로 저장한다. 

* 코드: 

Academy_Daegu=pd.read_csv(r"C:\Users\hbsss\OneDrive\문서\DataScience\data\대구광역시 사설학원_20240102164046.csv",encoding='utf-8')
part_Academy_Daegu=Academy_Daegu.iloc[:,[0,3]].copy()
part_Academy_Daegu.rename(columns={part_Academy_Daegu.columns[0] : '행정구역',part_Academy_Daegu.columns[1] : '학원수'},inplace=True)

part_Academy_Daegu.drop([0,1,2,3], inplace=True)
part_Academy_Daegu

* 결과:

대구광역시 행정구역별 입시 사설 학원 수

 

<대구 광역시 학령 인구 수 데이터 가져오기>

  1. 대구 광역시 행정구역별 학령인구수를 read_csv() 명령을 통해 변수명 Pop_Daegu 로 가져온다.
  2. 칼럼명을 알아보기 쉽게 하기 위해 rename()을 통해 칼럼명을 각각 알맞게 바꿔준다. 
  3. 가져온 데이터는 5세 간격으로 나눠져서 인구 수가 나와있기에 5세부터 19세까지의 인구 수를 모두 합친 학령인구수 칼럼을 따로 만들 것이다. 이를 위해 새로운 학령인구수 칼럼명을 만들고 각 칼럼들의 인구 수를 더해준 수를 값으로 넣어준다. 

* 코드:

Pop_Daegu=pd.read_csv(r"C:\Users\hbsss\OneDrive\문서\DataScience\data\대구광역시 학령인구2.csv",encoding='utf-8')
Pop_Daegu.rename(columns={Pop_Daegu.columns[0]:'행정구역',Pop_Daegu.columns[2]:'총계',Pop_Daegu.columns[3]:'5-9세',Pop_Daegu.columns[4]:'10-14세',Pop_Daegu.columns[5]:'15-19세'},inplace=True)
Pop_Daegu['학령인구수'] = Pop_Daegu['5-9세']+Pop_Daegu['10-14세']+Pop_Daegu['15-19세']
Pop_Daegu

* 결과:

대구광역시 행정구역별 학령인구 수

 

<세 가지 데이터를 하나의 표로 합치기>

  1. merge() 함수를 통해 세가지 표의 공통 칼럼인 '행정구역' 을 통해 먼저 School_Daegu 와 Pop_Daegu 데이터를 하나의 표에 합쳐준다.
  2. 새롭게 만들어진 표를 data_result 변수명으로 저장한다. 
  3. 다시 한번 merge() 함수를 이용해 data_result 와 part_Academy_Daegu 데이터를 하나의 표로 합쳐준다. 
  4. 세 가지 데이터가 하나의 표로 합쳐진 것을 확인할 수 있다. 

* 코드:

data_result=pd.merge(School_Daegu,Pop_Daegu,on='행정구역')
data_result=pd.merge(data_result,part_Academy_Daegu,on='행정구역')
data_result

* 결과:

세 가지 데이터를 하나의 표로 모두 합친 것

 

<회귀분석을 통해 세가지 변수들 간의 상관관계 분석하기>

  1. numpy 모듈을 불러온다.
  2. corrcoef() 명령을 통해 상관관계를 확인하고자 하는 두 변수씩 상관계수를 확인한다.
  3. 단, 두 데이터의 데이터 타입이 다를 경우, 오류가 생길 수 있는데 이럴 경우 to_numeric()을 통해 데이터 타입을 하나로 통일하여 맞춰준다. 

* 코드:

# Convert '학령인구수' and '학원수' columns to numeric
data_result['학령인구수'] = pd.to_numeric(data_result['학령인구수'], errors='coerce')
data_result['학원수'] = pd.to_numeric(data_result['학원수'], errors='coerce')
data_result['학교수'] = pd.to_numeric(data_result['학교수'], errors='coerce')

import numpy as np
np.corrcoef(data_result['학령인구수'],data_result['학원수'])

np.corrcoef(data_result['학교수'],data_result['학원수'])

np.corrcoef(data_result['학교수'],data_result['학령인구수'])

 

* 결과: 

인구 수에 기반해 배치되는 학교와, 학업성취도 및 학령인구와 밀접한 관련이 있는 교육시설인 학원이기에 당연하게도 각각의 변수들은 모두 높은 상관계수를 보였다. 

 

각각의 데이터들을 직접 찾고 전처리하고 간단한 회귀분석을 진행해보면서 지난 시간에 학습한 개념들도 복습하고

더불어 새로운 방법들도 많이 알아갈 수 있는 유익한 시간이 되었던 것 같네요!

여기까지 따라오느라 수고 많으셨고

그럼 다음 시간엔 더욱 깊이 있고 흥미로운 분석으로 찾아올게요! 꿀