ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [혼공학습단 9기]혼자 공부하는 데이터 분석 with 파이썬 6주차 미션
    데이터분석 2023. 2. 18. 18:07

    드디어... 마지막 미션주간이구나. 그런데 뒤 7장이 또 있네?? 그대로 여기까지 왔는데 다음주에 7장 공부를 해봐야 겠다.

    요번주는 복잡한 데이터 표현하기이다. 

     

    https://colab.research.google.com/drive/1ZTQHeghLkhdBVP2vbS2uVAROD0ECuKVK?hl=ko#scrollTo=Dv5yZWjUylP8 

     

    Google Colaboratory Notebook

    Run, share, and edit Python notebooks

    colab.research.google.com

     

    6-1 객체지향 API로 그래프 꾸미기

     

    - pyplot과 객체지향API로 그래프 그리기

     

    pyplot방식은 하나의 figure객체에 데이터를 리스트형태로 전달 제목문자열과 매칭. 아래 예제처럼 하나의 리스트만 전달해도 그래프가 그려지는 이유는 입력된 하나의 리스트는 y축으로 인지하고 매칭하고 x축은 리스트의 인덱스로 대체한다. 객체지향 API방식은 subplots메소드를 이용하여 하나의 figure객체에 여러 Axes객체를 만드는 것이다. 책에서 figure라는 틀에 axes종이를 놓고 그래프를 그리는 것이라고 표현했습니다. 이 말이 처음에 잘 이해가 되질 않았네요.. ㅎ 단순한 그래프는 pyplot방식으로 하면 되고 여러개, 또는 그래프를 꾸미려면 객체지향 API를 사용한다고 하는데 그 꾸민다는게 뭔지 공부를 해봐야 겠습니다.

     

     

     

    - 한글 font사용

    rcPrams 객체에 font.family에 원하는 폰트를 입력하거나 rc메소드를 이용하여 수정할 수 있습니다. rc메소드에서는 폰트스타일 뿐이니라, 크기도 바꿀 수 있습니다.

     

     

    - 년도 별 출판사 별 도서 출판 갯수 구하기(기본 미션)

    발행도서가 많은 30개만 value_counts()메서드로 추출합니다. 그 다음 isin메소드로 30개의 출판사만 체크하는 불리언배열을 만듭니다. isin메소드는 매개변수로 받은 데이터 또는 리스트의 데이터가 존재하면 그 데이터만 True인 불리언 배열을 return합니다. 아직 출판도서의 갯수가 50000개가 넘어 줄여줄 필요가 있습니다. 이에 sample메소드를 사용합니다. 이제 산점도를 그려보겠습니다. 

     

    다만 위의 산점도에서는 각 출판사가 어느정도 책을 출판했는지는 알 수 없습니다...이를 해결하기 위해 마커크기를 다르게 할 수 있는데 scatter매개변수 's'에 데이터와 같은 실수 배열을 입력하면 그 크기에 맞게 마커크기가 바뀝니다. alpha 투명도, linewidth 테두리 두께, edgecoloers 테두리 색, c 마커 색인데 s매개변수와 마찬가지로 전달되는 실수의 크기에 따라 색이 변경됩니다.

     

    컬러맵도 변경 가능한대 scatter 메소드에 cmap매개변수에 입력하면 됩니다. 가장 많이 사용하는 jet 컬러맵으로 변경하고 그 옆에 정도를 나타내는 color bar를 추가해 보겠습니다. 

    데이터가 컬러풀해지니 데이터시각화를 했다는 기분이 드네요. 마커의 크기로 교모하게 데이터를 왜곡시킬 수 있다고 하는데 그게 와닿지가 않네요. 세미나때 상덕씨에게 물어보도록 하죠!

     

     

    6-2 맷플롯립의 고급 기능 배우기

    matplotlib의 고급기능 여러개의 선,막대 그래프, 스택으로 표현, 원그래프등을 배워보자.

     

    - 하나의 그래프에 여러개 선 그래프 그리기

    데이터 정제하기 : 30개의 출판사데이터만 추출 -> 대출건수 합 및 인덱스 재설정 -> 각 출판사별 데이터만 추출한 다음 subplot으로 axes클래스를 얻은다음 plot메소드를 호출하면 계속 선그래프가 추가 됩니다. 다만, 그래프 갯수가 많아지면 이를 구분하기 어렵겠네요. 범례를 추가해봅시다. 범례는 ax.legend 메소드로 추가할 수 있습니다.

    xlim,ylim메소드로 객체지향 API의 메소드를 사용할 수 있습니다. pyplot에서 사용했던 xaxis,yaxis로 객체지향 API에서 사용가능합니다.

     

    - 스택영역 그래프(선택미션)

    스택 영역그래프 그래프 선이 겹치다보니 헷깔리기 시작했습니다. 이를 스택영역그래프로 표현하면 훨씬 더 깔끔하게 시각화 할 수 있습니다. 위 10개의 출판사의 연도별 대출건수를 스택영역 그래프로 그려보겠습니다.

    1) 연도별로 열을 구성하기 위해 pivot_table메소드로 '발행년도'의 데이터를 열로 바꿉니다.

    2) pivot_table로 변환하면 열이 다단이 되는데 get_level_valuese( 단-1 )메소드로 원하는 단만 가지고 올 수 있습니다.

    3) stackplot메소드로 x축에는 발행년도(year_cols), y축에는 년도를 열로하는 ns_book10에서 대출건수 top10 출판사의 데이터를 이용하여 스택영역그래프를 작성합니다. 단, fillna메소드로 NaN을 '0'으로 대체합니다. NaN이 그래프를 이상하게 만드는 경우가 있기 때문입니다.

     

    - 하나의 피겨에 여러개의 막대 그래프 그리기

    하나의 figure객체에 여러 막대 그래프를 그리려면 bar메소드를 많이 사용하면 됩니다. 다만, 막대그래프의 경우 선과 달리 두개의 데이터가 쌓여있는 상태로 나타납니다. 이런 화면 해석이 오히려 어렵네요. 이에 그래프의 위치를 조정하여 나란히 출력될 수 있도록 바꿀 수 있습니다.

     

    - 막대그래프 스택영역으로 표현

    다음과 같이 막대그래프를 스택영역그래프로도 표현할 수 있습니다. bottom 매개변수를 이용하려 아래 위치를 지정할 수 도 있고 리스트 내포와 zip메소드(양쪽 데이터를 하나씩 엮어주는 메소드) 사용할 수도 있습니다.

    10개의 출판사의 연도별 대출건수를 스택영역 그래프를 그리려면 cumsum메소드로 각 데이터를 누적합니다. 그리고 가장 큰 막대그래프부터 그려야 데이터 중첩이 되지 않기때문에 reversed 메소드를 이용하여 가장 큰 마지막 누적값부터 그래프를 그립니다.

     

    - 원그래프 그리기

    원그래프 그리기 원그래프 그리기 pie메소드를 사용합니다. 처음 매개변수의 데이터를 전체에 대한 비율을 계산하여 표현합니다. 다만, 크기 비교가 어렵습니다. autopct매개변수를 이용하여 퍼센테이지를 입력할 수 있고(자리수는 리터럴표시로 합니다.) explode 매개변수에 전체 데이터갯수의 리스트를 전달하여 특정 데이터부분만 주변 데이터와 거리를 띄워 표현 할 수 있습니다.(원하는 데이터만 '0.1' 나머지 는 '0')

     

    -  여러 종류의 그래프가 있는 subplot 그리기

    위에서 배운 산점도, 스택영역그리기, 스택막대 그래프, 원그래프를 하나의 figure객체에 그렸다. subplot메소드에서 첫번째 매개변수에 행, 두번째에 열의 개수를 입력하여 서브플롯객체를 생성할 수 있습니다. 각 객체마다 원하는 그래프를 그리면 됩니다.

     

    - pandas로 그래프 표현

    판다스로도 스택영역 선,막대 그래프를 그릴 수 있습니다.

     

    후기 : 다양한 그래프들을 그려볼 수 있는 시간이었고 pyplot형태과 객체 API사용에 익숙해지는 시간이었습니다. 점점 데이터분석에 사용되는 메소드들이 손에 익는 느낌입니다. 다만, 실제 이를 어떤 데이터분석에 사용을 해봐야 할 지는 곰곰이 생각을 해봐야 할 것같습니다.

Designed by Tistory.