본문 바로가기

2022-02-22 서울시 cctv 현황과 인구 정보에 대한 탐색 본문

BF 2024/수업 실습용 프로젝트

2022-02-22 서울시 cctv 현황과 인구 정보에 대한 탐색

jaegomhoji 2022. 2. 22. 19:43

*** 단계별 목표와 의의

1. 서울시 구별 cctv 현황 , 인구 현황 데이터 확보

2. cctv데이터와 인구 현황 데이터 합치기 

3. 데이터 정리 및 정렬 : python , pandas 

4. 그래프 그리기 : matplotlib

5. 전반적인 경향(트렌드) 파악 : regression - Numpy  

6. 그 경향에서 벗어난 데이터를 강조하는 능력 : insight 

 

** 마크다운으로 설정한 제목 출력

 

** 서울시 열린 데이터 광장에서 필요한 데이터 구하기 

http://data.seoul.go.kr/dataList/OA-2734/F/1/datasetView.do

 

** 자료 불러오기

개인환경에서는 csv파일이 cp949로 인코딩 되어있음

윈도우에서는 UTF-8일 것임 

0번째 행을 제외하고 1번째 행부터 자료를 불러와서 cctv_seoul 객체 변수에 저장 

 

** 자료가 object 문자열으로 불러읽혀져서 pd.to_numeric(data["column_name"],error="coerce")로 float형으로 변환

data["column"].dtype 으로 변환 확인함

 

** merge 함수 사용하기 이전에 둘다 공통적으로 있는 key열을 활용하기 위해 칼럼명을 다시 지정

thunder.rename(columns = {"시간" : "낙뢰관측시간"},inplace=True)

** data.rename(column={data.column[index]:"new_name"},inplace=True) 다시 지정한 값을 바로 저장  

** 불러온 자료 위 아래 5개 값을 확인, 정상적으로 불러졌는지 훑어본다 

 

** 파생변수 칼럼 생성 

인구현황 자료도 불러온다 

* header로 첫 줄을 제외하고 읽었음에도 xls파일 구성상 값을 읽을 필요가 없는 행도 들어왔다 

data.drop([rownumber], axis=0 ( 가로), inplace=True) 로 0,1번째 행들을 기준으로 axis=0 가로, 행을 제거, 바로 적용 

 

* 총 들어온 자치구들의 종류를 .unique()로 확인하고, 길이에 맞게 몇개가 들어왔는지 len()으로 확인한다. 

하지만 그때는 len(popul_seoul["자치구"])만 시행해야 정상적으로 들어왔는지 알 것이다

예시에서는 중복을 제거한 상태에서 몇 개의 행이 있는지 센 것 뿐 

 

* 여러 값들을 훑어본다

> 여기선 자료 오류가 없는데, 나중에 자료 오류가 나서 변수를 어쩔 수 없이 다른걸로 선택 

 

* 각 구별 cctv현황과 인구통계 자료를 key="구별" 기준으로 합병한다 , 기본적으로 inner join을 한 모습이지만

두 자료 모두 24개의 서울의 모든 구가 있어 아직은 누락이 없다.

 

* 필요없는 변수 제거 ( 정제 ) 

del data["column_name"] 과

여러개 처리할 수 있는 data.drop(["colum1","column2"],axis=~,inplace=True) 등으로 두 가지 방법을 활용해봄 

 

* 이후 처리한 값에 대한 정보들을 확인한다 

> 몇 몇 변수의 data type은 문자열이지만, 이후 제거해주어야 한다. 상관계수 산출시 에러가 난다 

> dtype의 현황은 가장 밑에서 확인할 수 있다 , 상단에는 총 12컬럼이 있으며 실수 8개, 정수 2개, 문자열 2개 ~  

> 몇 K.b의 메모리가 할당되었는지도 확인할 수 있다 

> 인덱스 ( 서울의 각 구 ) 는 24개 ( 합병한 자료의 행은 24개 ) 이다 

 

* 추출한 변수들에 대한 상관행렬을 확인해보자 

> 원래 적절한 상관관계를 찾고 가설을 세우기 위해서는 , 파생변수인 최근(cctv)증가율 말고 cctv 총 설치 대수나 인구 증가율도 가지고 확인했어야 헀으나, 읽어오는 과정에 오류가 있어서 대체 

 

> 어느정도 양의 상관관계가 있는 자료는 2018,2019년 구별 총 인구 합계 와 cctv 당해년도 설치 대수이다 

> 검증을 하려고 했으면 이 자료를 가지고 시행했어야 한다 

 

* 인구 대비 cctv 설치 증가율이 높은 구들을 알아보기 위해 파생 변수를 새롭게 지정 

* 해당 변수를 정렬 해본 뒤, 바그래프로 시각화

 

** 시각화 문제가 있어서 우선은 실습을 위한 변수 대체 

> 추세선을 시각화 하기 위해 np.polyfit poly1d linspace 함수를 사용 

> 2차원 공간의 산점도에서 1차원 추세선(직선)을 그리고 있는 상황, 우선은 상황에 맞게 인자를 전달 

 

** 뭔가 결론이 직접적으로 와닿지 않아  오차에 따라서 top 5와 lowest 5에 각각 텍스트를 삽입하고, 색을 구분하여 강조하고자 한다 

> 오차에 대한 파생변수를 지정하고 

> top5 , lowest 5 각각 만들어보자 

 

* for 문을 사용해서 각각 text 조건을 구분하여 지정한다 

* 결과적으로 ( 중간에 어쩔 수 없이 실습을 위해 변수를 바꿔서 시행했지만 ) 자료만 본다면 외국인 인구가 많은 구가 cctv 증가율은 조금 낮아 보이긴 하지만, 오차가 큰 항들이 추세선에 영향을 주고 있고, 자료가 많이 분포하고 있는 곳에서 벗어나있기 때문에 적절한 결과는 아닐 것이다. 

 

* 유의미한 결과를 찾기 위해서는 다른 변수를 찾아봐야 할 것이고 

 

* EDA 강의에서 그랬듯, 데이터 정제 이후 상관행렬(탐색 목표), 파생변수 생성 등의 과정을 다시 돌아가봐야 할 것이다. 

 

* 이후 저장 후 실습용 프로젝트 종료 

Comments