728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL

이번  포스팅에서는 앞서 분석한 CCTV 현황을 그래프로 분석을 해도 록 하겠습니다.

드디어 CCTV현황을 그래프로!

드디어 matplotlib를 이용해 데이터를 시각화해 줄 수 있지만, 아직 한글 처리 문제가 남아있습니다. 기본적으로 matplot은 한글 폰트를 지원하지 않기 때문에 matplotlib의 폰트부터 변경시켜 보겠습니다. 순서는 다음과 같습니다.

  1. platform 모듈 임포트 하기
    • OS를 구분 해 줄 수 있습니다.
  2. matplotlib 모듈 임포트 하기
    • 시각화를 하기 위함이겠죠?
  3. OS를 구분하여 폰트를 각각 설정해 줍니다.

폰트 설정이 끝났으면 다시 한번 결과를 확인해보겠습니다.

pandas 데이터에 바로 plot 명령을 이용해 데이터를 바로 그려 볼 수 있습니다.

예쁘고 쉬운 보기를 위해서 정렬을 해보도록 하겠습니다!

이제! 시각화가 되었으니 다시 한번 분석을 해보도록 하겠습니다. 이번엔 비율입니다!

먼저 시각화가 되어있는 그래프를 보면 CCTV 개수 자체는 강남구가 월등하게 많은 것을 할 수 있습니다.. 또한 가장 CCTV가 많이 없는 그룹도 알 수 있죠? 이어서 인구 대비 CCTV 비율을 계산해보도록 하겠습니다. 간단하게 소계 / 인구 * 100을 하면 될 것 같습니다.

인구수 대비 CCTV 수는 용산구와 종로구가 제일 많은 것을 알 수 있습니다. 송파구는 여전히 인구수로 비교하나, 소계로 비교하나 최하위권을 차지하고 있는 것을 확일 할 수 있습니다.

 

어느 정도 분석은 된 것 같지만 조금 더 자세히 시각화를 해보도록 하겠습니다. scatter를 활용해 보도록 합시다!

표시한 데이터를 대표할 수 있는 직선을 하나 그려보도록 하겠습니다.

직선의 용도는 인구수가 많아질수록 CCTV의 설치량은 많이 지는 것을 한눈에 알아볼 수 있게 해 줍니다. ( 방금 전의 비율과는 무관합니다~!)

그리고 지금 그려보는 직선은 인구별 CCTV에 대한 기준이 된다고 보시면 됩니다.

이제 이 그래프의 직선은 구별 CCTV의 기준값이 됩니다. 이때, 우리가 기준으로 삼을 수 있는 조선은 이 직선에 가장 근접한 점을 찾아보면 됩니다.

 

확인을 해보니 대략 300,000만 명의 인구수일 때, 1,100개의 CCTV가 기준이 된다!라고 볼 수 있습니다.

그렇다면 이 직선을 기준으로 해서 멀리 떨어져 있다는 것은 비정상적으로 많다/ 적다 라는 것입니다.

  • 직선보다 위에 있을수록 CCTV가 인구수에 비해 과하게 설치가 되었다
  • 직선보다 아래 있을수록 CCTV가 인구수에 비해 부족하다

직선과 멀리 떨어질수록 생산도 다르게 표현해주고, 기준점에서 많이 벗어난 구의 이름을 표시해 보도록 하겠습니다.

따라서 직선과의 오차를 구하는 코드를 작성하고, 오차가 큰 순으로 데이처를 정렬해서 그래프를 그려보도록 하겠습니다.

결론

직선을 기준으로, 위에 있는 강남구, 양천구, 서초구, 은평구, 용산구는 서울시 전체의 지역의 일반적인 경향보다 CCTV가 많이 설치되어있습니다.

그리고 송파구, 강서구, 중랑구, 마포구, 도봉구는 일반적인 경향보다 CCTV가 적게 설치된 지역입니다.

특히,

  • 강남구는 월등히 많은 CCTV를 보유하고 있다
  • 송파구는 매우 적은 CCTV를 보유하고 있다

라고 결론을 내릴 수 있습니다.

어려우셨나요? 사실 scatter그래프를 이용해서 분석 한 내용은 정말 고급스러운(어려운) 내용입니다.

다음 포스팅에서는 pandas의 pivot_table을 활용해 원하는 기준 만들기를 해보도록 하겠습니다.

728x90
반응형
LIST
728x90
반응형
SMALL

데이터를 분석하기에 앞서, 데이터를 시각화해서 보는 것은 데이터를 이해하는데 필수적인 요소라고 생각합니다.

 

이번 포스팅에서는 파이썬 기반 시각화 라이브러리인 matplotlib에 대해서 알아보도록 하겠습니다.

 

matplotlib은 다양한 데이터를 많은 방법으로 그래프를 만들고 변화를 줄 수 있도록 하는 파이썬 라이브러리입니다.

 

matplotlib을 사용하기 위해서는 먼저 아래와 같이 matplotlib을 설치하고 import를 해주어야 합니다.

 

  • matplotlib 환경 설정

         File → setting → matplotlib install을 해주면 준비 완료!

 

  • import matplotlib 하는 3가지 방법

  개인적으로, 3번째 방법이 좋은 가독성을 만들어준다고 생각합니다

  • plot 의 종류

  • Graph title

그래프 제목을 'Tiger'로 바꿔보자

  • Data List

인수값을 한개만 입력하면 ( [list 형식] or (tuple 형식)... ) y축의 값으로 설정된다. 

  • Plot 인수값 plt.plot( [y 축], [x 축] )

        ** 주의 **

        인수값이 맞지 않을 경우 >> ValueError: x and y must have same first dimension, but have shapes (5,) and (4,)

        인수값의 차원은 맞춰주어야 한다.

  • Graph grid

    격자의 순서는 show()에서 적용되기 때문에 show() 입력 전엔 꼭 적어야 한다

가독성을 위해 고정틀은 주로 상단에 적어준다 (like title, grid..)

         plt.grid() 의 default 값은 false입니다. 그러므로, True값은 꼭 입력해 주어야 한다.

  • x label y label 지정하기

X축은 'tiger', Y축은 'lion'으로 차트 축 제목을 만들어보자.

  • range를 사용한 인수값

    range 를 가용하여 시작과 끝 값을 설정할 수 있지만, 인수 길이는 같도록 주의해야 합니다.

  • Line colour

line 색상을 다양하게 변경해보자

  • Graph range with Line colour

range 범위값을 이용한 y x 값의 2개의 line 색을 다르게 나타내보자

  • Graph tick mark

 

위와 같은 tick mark를 사용할때는  .-  혹은   - v- 와같이 뒤에 '-'를 붙여사용 합니다.

., ov^<> w1234 sp*hH+xDd로 예시를 봅시다.

k 는 key 값이며 인덱스 번호를 나타내며, v 는 value 값으로 문자열을 나타낸다.
선에 대한 다양한 tick mark를 표현

  • Graph Line Style

  • Graph line detail Style

    선 색깔 굵기 스타일, 마커 종류 크기, 마커 선 색 굵기, 마커 내부 색을 바꿀 수도 있습니다.

무엇을 변경해도 제가 만든표보다 예쁘게 만들수 있으니 다르게 변경도 해보기

  • Graph x/y 축 유효 범위

    plt. x/y lim(start, end)을 사용하여 x축과 y축의 값을 지정할 수 있습니다.

x축 y축의 값의 범위를 지정해보자

  • x / y ticks ( x, y의 눈금자 표시 범위 )

범위설정을 range를 사용하여 지정해주자

  • x / y ticks with rotation

    길이가 긴 범례의 경우, tick 값의 각도를 회전시키면 더욱 보기가 좋습니다.

rotation값을 원하는대로 바꾸면서 돌려보자

  • 인수값, 범례의 label 명과 legend 위치 지정하기

범례의 위치를 바꿔보자

위의 범례의 위치에 따른 값을 사용하여 데이터에 맞도록 설정할 수 있습니다.

오른쪽 하단 = 4

  • 배경 색상

    colour : 0-255까지 사용 가능합니다. 각 색상당 (명도를 나타냄)
    • # 10진수 255를 이용 / 16 진수를 이용 / 비례 값 ex) 0.0(0) - 1.0(255)

  • 출력 그래프 (Window) 창 크기 조절

    figure ( figsize= )를 이용하여 표가 나타나는 window 창의 크기를 조절할 수 있습니다.

colab / jupyter 의 경우 <Figure size 460.8x345.6 with 0 Axes> 로 출력

  • plot 그래프를 여러 개 나타내는 것

    subplot ( plot 가로 값, 세로 값, 창 순번의 위치 값 )
    • 단, 그래프가 겹쳐지지 않게끔 조절해주어야 합니다.

  • y 축 2개 사용 (나이에 따른 age와 height)

    twinx()를 사용하여 y축의 값을 추가할 수 있습니다.

  • Capture 결괏값을 저장할 때 그림파일로 바로 저장하기

        gcf() 를 통해 Figure 객체를 얻어 사용합니다. (변수값부터 얻어 사용)

        그다음, fig.savefig('파일명')으로 파일을 저장합니다.

  • Bar chart ( bar )

bar차트로 나타내보자

  • Horizontal Bar chart ( barh )

  • align = 'center' / 'edge'

    차트의 축(=눈금선) 위치를 가운데 또는 끝에 맞출 수 있습니다.

잘 모르겠죠? rotation = 90 로 회전시켜 정확한 위치를 확인하기

  • Bar 차트 속성

ctrl+b를 통해 bar의 default 값을 알 수 있습니다.

또는, 오른쪽 마우스+GO to..+declaration or usages

 

확인해보면, 아래와 같은 순서로 default값들이 나열되므로, 원하는 값으로 맞춰서 사용하면 간략하고 쉽게 나타낼 수 있습니다.

 

# x, height, width = 0.8, bottom = None(기준값의 밑바닥), *, align = 'center' 속성 사용, data = None, ** kwargs 가변 인수 값 처리):

# alpha = 막대 색깔과 배경과 섞이는 정도를 의미합니다. <- alpha blending 

지금까지 간단하게 matplotlib를 이용하여 기본 그래프를 그리는 방법에 대해서 알아보았습니다.
모든 코드를 외우려 하지 말고 표현하고자 하는 의미를 알아두고 응용부터 시작해 봅시다.

위의 모든 default값을 외우고 있는 사람은 거의 없고 다들 한마음 한뜻으로 찾아본다고 조심스럽게 생각합니다.

저는 외우지 못해서 기록하기 위한 Yuja_smoothie의 노트였습니다~!

728x90
반응형
LIST

+ Recent posts