keyword
데이터 경향 표시, 강조하고 싶은 데이터 시각화
import numpy as np
fp1 = np.polyfit(data_result["인구수"], data_result["소계"], 1)
f1 = np.poly1d(fp1)
def drawGraph():
plt.figure(figsize=(14,10))
plt.scatter(data_result["인구수"], data_result["소계"], s=50)
plt.plot(fx,f1(fx), ls="dashed", lw=3, color="g")
plt.xlabel("인구수")
plt.ylabel("CCTV")
plt.grid(True)
plt.show()
drawGraph()
인구가 40만인 구에서 서울시의 전체 경향에 맞는 적당한 CCTV 수는? 아래 그래프에서 답을 찾을 수 있다

fp1 = np.polyfit(data_result["인구수"], data_result["소계"], 1)
f1 = np.poly1d(fp1)
fx = np.linspace(100000,700000,100)
#data_result에 오차 컬럼이 추가됨
data_result["오차"] = data_result["소계"]-f1(data_result["인구수"])
# 경향과 비교해서 데이터 오차가 큰 데이터 계산
df_sort_f = data_result.sort_values(by="오차", ascending=False) #내림차순
df_sort_t = data_result.sort_values(by="오차", ascending=True) #오름차순
#경향 대비 CCTV를 많이 가진 5개 구
df_sort_f.head()
#경향대비 CCTV를 적게 가진 5개 구
df_sort_t.head()
#오차를 기준으로 구를 색깔로 나타내서 시각화
from matplotlib.colors import ListedColormap
#colormap을 사용자 정의(user define)로 세팅
color_step = ["#e74c3c", "#2ecc71", "#95a9a6", "#2ecc71", "#3498db", "#3489db"]
my_cmap = ListedColormap(color_step)
#시각화된 그래프 그리기
def drawGraph():
plt.figure(figsize=(14,10)) #그래프 사이즈
plt.scatter(data_result["인구수"], #x축
data_result["소계"], #y축
s=50, #표식 사이즈
c=data_result["오차"], #컬러바가 오차에 따라 범위가 설정돼서, 각 구에 맞는 색깔이 들어감
cmap=my_cmap) #컬러바의 색깔 사용자화 한 것
plt.plot(fx,f1(fx), ls="dashed", lw=3, color="g") # 경향선 그리기(x축, y축, ls:선종류, lw:선 두께, color)
#오차가 상위5개 하위5개 구에만 알 수 있도록 표식에 이름 붙이기
for n in range(5):
#상위 5개
plt.text(
df_sort_f["인구수"][n] * 1.02, #x좌표, 표식과 이름이 겹쳐서 출력되지 않도록 1.02곱해줌
df_sort_f["소계"][n] * 0.98, #y좌표
df_sort_f.index[n], #title
fontsize=15
)
#하위 5개
plt.text(
df_sort_t["인구수"][n] * 1.02,
df_sort_t["소계"][n] * 0.98,
df_sort_f.index[n],
fontsize=15
)
plt.xlabel("인구수") #x축 범례
plt.ylabel("CCTV") #y축 범례
plt.colorbar() #컬러바 그리기
plt.grid(True) #격자표시
plt.show()
drawGraph()

좋은 글이네요. 공유해주셔서 감사합니다.