import pandas as pd
CCTV_Seoul = pd.read_csv("../data/01. Seoul_CCTV.csv")
# 한글이 깨질 경우 : encoding='utf-8'
CCTV_Seoul.rename(columns={"기관명":"구별"}, inplace=True)

popul_seoul = pd.read_excel(
"../data/01. Seoul_Population.xls", header=2, usecols="B, D, G, J, N" # header는 자료 읽기 시작할 행 컬럼의 '합계'만 가져오기
)

popul_seoul.rename(
columns={
popul_seoul.columns[0]: "구별",
popul_seoul.columns[1]: "인구수",
popul_seoul.columns[2]: "한국인",
popul_seoul.columns[3]: "외국인",
popul_seoul.columns[4]: "고령자"
},
inplace=True
)

CCTV_Seoul.sort_values(by='소계', ascending=False).head()

CCTV_Seoul["최근증가율"] = (
(CCTV_Seoul["2014년"] + CCTV_Seoul["2015년"] + CCTV_Seoul["2016년"]) / CCTV_Seoul["2013년도 이전"] * 100
)
CCTV_Seoul.sort_values(by='최근증가율', ascending=False).head()
popul_seoul.drop([0], inplace=True) popul_seoul.head()

외국인과 고령자 비율 컬럼 추가
popul_seoul["외국인비율"] = popul_seoul["외국인"] / popul_seoul["인구수"] * 100
popul_seoul["고령자비율"] = popul_seoul["고령자"] / popul_seoul["인구수"] * 100
popul_seoul.head()

"구별"로 CCTV 와 인구데이터 병합
merge_data = pd.merge(CCTV_Seoul, popul_seoul, on="구별")

필요없는 연도별 데이터 컬럼 삭제
del merge_data["2013년도 이전"]
del merge_data["2014년"]
merge_data.drop(["2015년", "2016년"], axis=1, inplace=True)
Index 지정
merge_data.set_index("구별", inplace=True)
merge_data.head()

상관관계(correlation) 파악
merge_data.corr()

merge_data["CCTV비율"] = merge_data["소계"] / merge_data["인구수"] * 100

pandas에서 plot그리기
merge_data["인구수"].plot(kind="bar", figsize=(10, 6))
merge_data["인구수"].plot(kind="barh", figsize=(10, 9))

'소계' 및 'CCTV비율' 컬럼 시각화
def drawGraph():
merge_data["소계"].sort_values().plot(
kind="barh", grid=True, title="가장 CCTV가 많은 구", figsize=(10, 9)
)
drawGraph()
def drawGraph():
merge_data["CCTV비율"].sort_values().plot(
kind="barh", grid=True, title="인구대비 CCTV비율이 가장 높은 구", figsize=(10, 9)
)
drawGraph()

데이터의 경향 시각화
def drawGraph():
plt.figure(figsize=(14, 10))
plt.scatter(merge_data["인구수"], merge_data["소계"], s=50)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid(True)
plt.show()
drawGraph()

import numpy as np
pf1 = np.polyfit(merge_data["인구수"], merge_data["소계"], 1)
// array([1.11155868e-03, 1.06515745e+03])
f1 = np.poly1d(pf1)
// poly1d([1.11155868e-03, 1.06515745e+03])
```fx = np.linspace(100000, 700000, 100) // 100,000과 700,000 사이에 100개의 수 생성def drawGraph():
plt.figure(figsize=(14, 10))
plt.scatter(merge_data["인구수"], merge_data["소계"], s=50)
plt.plot(
fx, f1(fx), ls="dashed", lw=3, color="g"
)
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid()
plt.show()
drawGraph()
