데이터 시각화

특정 컬럼 시각화

data_result['소계'].plot(kind='barh', grid=True, figsize=(10,10))

  • 코드 맨 뒤에 ;을 넣어주면 변수설명문구(<AxesSubplot:ylabel='구별'>)가 사라짐
  • 오름차순 정렬
def drawGraph() :
    data_result['소계'].sort_values().plot(
        kind='barh', grid=True, title = '가장 CCTV가 많은구', figsize=(10,10));
drawGraph()

데이터 경향 시각화

  • 인구수와 소계 컬럼으로 scatter plot 그리기
def drawGraph() :
    plt.figure(figsize=(14,10))
    plt.scatter(data_result['인구수'], data_result['소계'], s=50)
    plt.xlabel('인구수')
    plt.ylabel('소계')
    plt.show()
drawGraph()

  • Numpy를 이용한 1차 직선 만들기
    np.polyfit() : 직선을 구성하기 위한 계수를 계산
    np.poly1d() : polyfit으로 찾은 계수로 파이썬에서 사용할 수 있는 함수로 만들어주는 기능
import numpy as np
fpl = np.polyfit(data_result['인구수'], data_result['소계'], 1)
fpl

  • 경향선을 그리기 위한 x 데이터 생성
    np.linspace(a, b, n): a부터 b까지 n개의 등간격 데이터 생성
fx = np.linspace(100000, 700000, 100)
fx

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') #lw는 line width
    plt.xlabel('인구수')
    plt.ylabel('소계')
    plt.grid(True)
    plt.show()
drawGraph()

  • 경향과의 오차를 만들고 그래프로 표현¶
    경향(trend)과의 오차열을 생성
    경향은 f1 함수에 해당 인구를 입력
    f1(data_result['인구수'])
fp1 = np.polyfit(data_result['인구수'], data_result['소계'], 1)
f1 = np.poly1d(fp1)
fx = np.linspace(100000,700000,100)
data_result.head(3)
data_result['오차'] = data_result['소계'] - f1(data_result['인구수']) # 구별 인구에 대한 실제값 - 경향선 그래프의 값
data_result.head(3)

  • 경향 대비 오차가 큰 데이터 계산
df_sort_f = data_result.sort_values(by='오차', ascending=False) #내림차순
df_sort_t = data_result.sort_values(by='오차', ascending=True) #오름차순
  • 오차가 큰 데이터 5개(+)

  • 오차가 큰 데이터 5개(-)

  • 컬러 세팅

from matplotlib.colors import ListedColormap
# colormap 을 사용자 정의(user define)로 세팅
color_step = ['#e74c3c', '#2ecc71', '#95a9a6', '#2ecc71', '#3498db'] #색의 코드값
my_cmap = ListedColormap(color_step) # my_cmap에 내가 원하는 컬러의 코드값 지정
  • 시각화
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') #lw는 line width
    
    #상위 5개
    for n in range(5) :
        plt.text(
            df_sort_f['인구수'][n]*1.02, # x 좌표(마커가 안가리게 위치 살짝 변경)
            df_sort_f['소계'][n]*0.98, # x 좌표(마커가 안가리게 위치 살짝 변경)
            df_sort_f.index[n], # 기재할 테스트(구명)
            fontsize = 10 # 폰트 사이즈
        )
    
    for n in range(5) :
        plt.text(
            df_sort_t['인구수'][n]*1.02,
            df_sort_t['소계'][n]*0.98,
            df_sort_t.index[n],
            fontsize = 10
        )
    plt.xlabel('인구수')
    plt.ylabel('소계')
    plt.grid(True)
    plt.colorbar()
    plt.show()
drawGraph()

  • 데이터 저장
data_result.to_csv("../data.01.CCTV_result.csv", sep=',', encoding='utf-8') #데이터 저장
profile
개발도상인 냄비짱

0개의 댓글