import numpy as np
np.polyfit
: p = polyfit(x, y, n)
- x는 다항식의 입력값, y는 다항식의 결과값
- n은 다항식의 차수
- p는 차수에 따른 다항식의 계수 값
np.poly1d
: 다항식 생성 함수
- 입력 배열을 항으로 간주하여 다항식을 생성
- np.poly1d(입력 배열, 근 설정, 변수명)
np.linspace
: 구간 내에 숫자를 균일한 간격으로 촘촘하게 채울 수 있는 함수.
- np.linspace(구간 시작점, 구간 끝점, 구간 내 숫자 개수)
def drawGraph():
plt.figure(figsize=(14,10))
plt.scatter(data_result['인구수'], data_result["소계"], s=50)
plt.xlabel('인구수')
plt.ylabel('CCTV')
plt.grid(True)
plt.show()
drawGraph()
- np.polyfit: 직선을 구성하기 위한 계수 계산
- np.poly1d: polyfit으로 찾은 계수로 python에서 사용할 함수로 만들어 줌
fx = np.linspace(10000, 70000, 100)
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()
fp1 = np.polyfit(data_result['인구수'], data_result['소계'], 1)
f1 = np.poly1d(fp1)
fx = np.linspace(10000, 70000, 100)
# 오차 column
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) # 오름차순
from matplotlib.colors import ListedColormap
# colormap 을 사용자 정의(user define)로 세팅
color_step = ['#e74c3c', '#2ecc71', '#95a9a6', '#2ecc71', '#3498db', '#3498db']
my_cmap = ListedColormap(color_step)
def drawGraph():
plt.figure(figsize=(14,10))
plt.scatter(data_result['인구수'], data_result["소계"], s=50, c=data_result['오차'], cmap=my_cmap)
plt.plot(fx, f1(fx), ls="dashed", lw=3, color='g')
for n in range(5):
# 상위 5개
plt.text(
df_sort_f['인구수'][n] * 1.02, # x 좌표
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_t.index[n],
fontsize=15,
)
plt.xlabel('인구수')
plt.ylabel('CCTV')
plt.colorbar()
plt.grid(True)
plt.show()
drawGraph()
data_result.to_csv('../data/01. CCTV_result.csv', sep=',', encoding='utf-8')