crime_anal_gu = crime_anal_station.pivot_table(index="구별", aggfunc=np.sum)
# 필요 없는 정보 삭제(위도, 경도) - 2가지 방법으로
del crime_anal_gu["lat"]
crime_anal_gu.drop("lng", axis=1, inplace=True)
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.div.html
# 하나의 컬럼을 다른 컬럼으로 나누기
crime_anal_gu["강도검거"] / crime_anal_gu["강도발생"]
# 다수의 컬럼을 다른 컬럼으로 나누기
crime_anal_gu[["강도검거", "살인검거"]].div(crime_anal_gu["강도발생"], axis=0).head(3)
# 다수의 컬럼의 다수의 컬럼으로 각각 나누기
num = ["강간검거", "강도검거", "살인검거", "절도검거", "폭력검거"]
den = ["강간발생", "강도발생", "살인발생", "절도발생", "폭력발생"]
crime_anal_gu[num].div(crime_anal_gu[den].values)
# ❗
# crime_anal_gu[num].div(crime_anal_gu[den]) ❌
# crime_anal_gu[num].div(crime_anal_gu[den].values) ⭕
이전에 발생한 범죄까지 검거했다면 계산상으로 검거율이 100이 넘을 수 있다. 발생 연도와 검거 연도를 구분하여 분석하면 좋겠지만, 지금 단계에서는 수치를 100으로 만들기도 했다.(heatmap을 그릴 때 100이 넘어가면 문제가 될 수 있음)
# 100보다 큰 숫자 찾기
crime_anal_gu[crime_anal_gu[target] > 100]
# 100으로 변경
crime_anal_gu[crime_anal_gu[target] > 100] = 100
crime_anal_gu.rename(columns={"강간발생": "강간",
"강도발생": "강도",
"살인발생": "살인",
"절도발생": "절도",
"폭력발생": "폭력"}, inplace=True)
검거율은 잘 정리되었으나, 범죄의 경중에 따라 발생 건수 차이가 크다.
이 상태로 시각화하면 눈에 잘 띄지 않고, 시각화 단계에서 스케일을 조정할 필요가 생긴다. 이를 예방하기 위해 maximum 값으로 나눠준다.
(최댓값 = 1, 최솟값 = 0)
# crime_anal_norm 등장
cols = ["강간", "강도", "살인", "절도", "폭력"]
crime_anal_norm = crime_anal_gu[cols] / crime_anal_gu[cols].max()
crime_anal_norm에 검거율을 추가하고,
cols = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율"]
crime_anal_norm[cols2] = crime_anal_gu[cols]
앞서 CCTV 프로젝트에서 정리한 데이터셋에서 인구수, CCTV수도 가져온다.
crime_anal_norm[["인구수", "CCTV"]] = result_CCTV[["인구수", "소계"]]
정규화된 범죄 발생 건수 전체의 평균을 구해서 범죄 컬럼의 대표값으로 사용한다.
# np.mean : 행렬의 평균을 구함
cols = ["강간", "강도", "살인", "절도", "폭력"]
crime_anal_norm["범죄"] = np.mean(crime_anal_norm[cols], axis=1)
검거율의 평균을 구해서 검거 컬럼의 대표값으로 사용한다.
cols = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율"]
crime_anal_norm["검거"] = np.mean(crime_anal_norm[cols], axis=1)
결과물을 확인하다가 오류를 발견했다.
head() 아래에 감춰진...
geocode()에 '서울노원경찰서'를 넣으면 formatted_address의 인덱스=2 값이 '노원경찰서'로 되어 있다.😅
'노원경찰서'로 검색하면 '노원구'로 나오길래 앞에서 적용한 for문을 조금 수정해서 해결했다.
강의 결과물과 비교해보니 애초에 행의 개수가 다르다.
나의 데이터에는 금천구가 있고, 강의 내용에는 금천구가 없다.
강의 자료 데이터에는 금천경찰서가 관악구 소속이네!
음...?🙉
pandas에서 to_csv 명령을 통해 csv 파일로 데이터를 저장하는 내용에서 틀린 것은?
1. 경로명과 파일명을 지정하지 않으면 기본값으로 저장된다. (정답)
2. 컬럼간 구분을 지정하는 옵션을 sep이다.
3. 엔코딩(encoding) 옵션 중 한글을 대응하는 방법으로는 euc-kr이 있다. (내가 고른 답)