데이터 과학의 목적은 가정(혹은 '인식')을 검증하고 표현하는 것이다. 어떤 방식으로 가정을 검증하고 표현할 것인가?
검증은 데이터를 활용하여 상관관계를 찾는 것, 표현은 시각화를 말하는 것이다.
이번 프로젝트에서는 GoogleMaps, Folium, Seaborn, Pandas의 Pivot Table을 활용하는 것을 목적으로 한다.
1. 이번에는 공공데이터포털에서 제공하는 서울시 경찰서별 5대범죄 발생 검거 현황을 데이터로 사용하기로 한다.
https://www.data.go.kr/data/15054738/fileData.do
경찰청 서울특별시경찰청_경찰서별 5대범죄 발생 검거 현황_20221231
2022년 서울경찰청 관할 경찰서별 살인, 강도, 강간 및 추행, 절도, 폭력 발생 검거 현황 (2022년 관서별 5대범죄 발생 검거 현황)
www.data.go.kr
2. 서울특별시경찰청_경찰서별 5대범죄 발생 검거 현황 csv파일을 받아서 ds_study 폴더의 data 폴더에 넣어주었다.
(해당 폴더는 이전에 anaconda를 설치하면서 만들어두었던 폴더이다. 데이터분석 카테고리 참고)

3. 저번에는 대부분 vsc를 이용해서 했지만, 이번에는 jupyter notebook을 활용해볼 생각이다. anaconda prompt에서 cd명령어로 해당 루트로 이동한 다음 activate ds_study로 기존에 만들어두었던 가상환경을 실행하고 그 다음 jupyter notebook 명령어로 jupyter notebook을 실행하였다.

4. numpy와 pandas를 각각 np, pd로 import해준 다음 pd.read_csv를 통해 crime_raw_data라는 변수로 데이터파일을 불러와주었다. thousands=','라고 선언해주면, 숫자값들을 1000단위로 콤마(,) 구분하는 단위를 str로 읽어오지 않고 정상적으로 숫자로 읽어와 준다. encoding = 'euc-kr'로 인코딩해주었다. 한글이 들어가는 자료는 필수적으로 인코딩해주어야 한다.

5. crime_raw_data.info()명령어로 데이터의 정보를 확인해보았다.

* 작성자가 참고한 강의 영상에서는 entries가 65534로 떴다. 이건 index가 65534의 크기를 가지게 되면서 실제 value와의 차이가 발생했기 때문으로, NaN(값 없음)이 함께 계산되었기 때문이었다(액셀로 읽어 주면 제대로 읽어 온다). 그래서 해당 강의영상에서는 crime_raw_data[crime_raw_data['죄종'].notnull()] 명령어로 NaN이 아닌 값들만 불러 왔다. 최신 자료에서는 해당 문제가 수정되어 있다.
6. pd.pivot_table(df, index=['Name'])을 실행해봤다. 근데..

7. Could not convert John Smith to numeric 에러가 뜬다. 챗GPT와 인터넷 검색을 통해 찾아보니, 데이터로 사용하는 값들 중 숫자가 '아닌' 것들이 있어서라고 한다.

8. df.info()명령으로 컬럼의 값들을 보면, 'Account', 'Quantity', 'Price'칼럼만이 Dtype이 int64로 표시된다. 이외에 Name, Rep, Manager, ... 등의 칼럼들은 모두 글자나 다른 값들이 들어간 Object형이다. 그러므로 데이터형이 int64인 컬럼만 불러와서 표시해주어야 한다.

9. index= 에 배열 형태로 다른 컬럼을 넣어도 정상적으로 피벗 테이블이 만들어진다.

10. 보다시피, 인덱스에 값들을 넣는 순서에 따라 피벗 테이블이 정렬된다. 한 칼럼에 다른 칼럼이 일대다 형식으로 연관되어 있을 때, 컬럼의 순서를 잘 바꿔 주면 더 보기 좋게 정렬된다.

11. 피벗 테이블의 values에 함수를 적용할 수도 있다. 디폴트는 평균인데, aggfunc 옵션을 넣어주면 합산 등의 다른 함수를 지정할 수도 있다.

12. 합계 뿐만 아니라 갯수도 지정해줄 수 있다. aggfunc의 값에 배열을 통해 여러 함수들을 지정해주면 그것에 맞게 새로 계산한 col을 넣어준다.

13. columns 옵션을 지정해주면 col을 바탕으로 분류를 지정해준다.

14. 없는 값은 NaN으로 표시되는데, 0으로 표시해주고 싶다면 fill_value=0옵션을 넣어주면 된다.

15. 최종적으로 정리한 데이터는 이렇다. Manager, Rep, Product 컬럼을 인덱스로 Price, Quantity 데이터를 value로 하여 피벗 테이블을 만들어주었다. 그리고 Price와 Quantity에는 np.sum(합계), np.mean(평균)을 적용해주었다.

'데이터분석 > 미니프로젝트 01. 서울시 CCTV 현황 분석' 카테고리의 다른 글
| 미니프로젝트 01-02-03. googlemaps에서 구별 정보를 얻어 데이터 정리, 구별데이터로 변경하기 (1) | 2024.03.26 |
|---|---|
| 미니프로젝트 01-02-02. 서울시 범죄현황 데이터를 피벗테이블로 정리, pip와 install 명령 (1) | 2024.03.24 |
| 미니프로젝트 01-01-05. CCTV 데이터와 그래프로 표현하기(데이터시각화) (1) | 2024.03.22 |
| 미니프로젝트 01-01-04. matplotlib 활용하기 (0) | 2024.03.21 |
| 미니프로젝트 01-01-03. CCTV데이터와 인구현황 데이터 훑어보기 (0) | 2024.03.20 |