ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [08.09 Special 강의] Introduction to Visualization 🤓
    네이버 부스트캠프 AI Tech 2기 2021. 8. 13. 19:34
    728x90
    반응형

    📊 시각화 소개

    [수업 내용]

    강사 : 안수빈 강사님

    데이터 시각화 : 데이터를 그래픽 요소로 매핑하여 시각적으로 표현하는 것

    아래의 6가지 요소들을 생각하면서 시각화를 적용하는 것이 중요하다고 하셨다.

    1. 목적 : 왜 시각화를 하는가?
    2. 독자 : 시각화 결과는 누구를 위한 것인가?
    3. 데이터 : 어떤 데이터를 시각화 할 것인가?
    4. 스토리 : 어떤 흐름으로 인사이트를 전달할 것인가?
    5. 방법 : 전달하고자 하는 내용에 맞게 효과적인 방법을 사용하고 있나?
    6. 디자인 : UI에서 만족스러운 디자인을 가지고 있는가?

    시각화는 Score가 존재하지 않는다!

    연구에서의 시각화 ≠ 개발에서의 시각화, 이론 ≠ 소비자

    → 여러가지 모범 사례를 보면서 좋은 시각화가 무엇인지 알려주신다.

    👀 [시각화의 요소]

    1. 데이터를 이해한다.
    2. 시각화를 이해한다.

    당연하지만, 데이터 시각화를 위해서는 데이터가 필수!

    어떻게 시각화할까? → 관점에 차이

    1. 데이터 개별적으로 보여줄 것인가(Local)
    2. 데이터 셋 관점으로 보여줄 것인가(Global)

    💿 데이터셋 종류들

    • 정형 데이터가장 쉽게 시각화할 수 있는 데이터셋이다.
      1. 통계적 특성과 feature사이 관계
      2. 데이터 간 관계
      3. 데이터 간 비교
    • : 일반적으로 csv, tsv 파일로 제공된다. Row가 데이터 1개, Column은 attribute를 나타낸다.
    • 시계열 데이터
      • 추세, 계절성, 주기성 등을 살핀다.
    • : 시간의 흐름에 따른 데이터. (기온, 주가 등 정형데이터 / 음성, 비디오 같은 비정형 데이터)
    • 지리 데이터
    • : 지도 정보와 보고자 하는 정보 간의 조화가 중요하며 지도 정보를 단순화 시키는 경우도 존재한다.(거리, 경로, 분포 등)
    • 관계(네트워크) 데이터→ 객체는 노드, 관계는 Link로 표시한다. (크기, 색, 수 등을 활용해 객체와 관계의 가중치를 표현한다.)
    • 휴리스틱하게 노드 배치를 구성한다.
    • : Graph, 객체와 객체사이의 관계를 시각화할 때 사용한다.
    • 계층적 데이터→ Tree, Treemap, Sunburst 등이 대표적이다.
    • : 과계 중에서 포함관계가 분명한 데이터 (네트워크 시각화로도 표현 가능하다.)
    • 다양한 비정형 데이터

    이런 데이터를 더 세부적으로 살펴보면 4가지로 분류된다.

    1. 수치형(Numeric)
      • 연속형(Continuous) : 길이, 무게, 온도 등
      • 이산형(Discrete) : 주사위 눈금, 사람 수 등
    2. 범주형(Categorial)
      • 명목형(Nominal) : 혈액형, 종교 등
      • 순서형(Ordinal) : 학년, 별점, 등급 등

    시각화 이해

    1. Mark를 통해서 시각화 한다. (점, 선, 면 으로 이루어진 데이터 시각화)
    2. Channel(각 마크를 변경할 수 있는 요소들 ex. Position, Size, Shape, Color, Volume, Tilt 등)

    전주의적 속성(Pre-attentive Attribute)

    : 주의를 주지 않아도 인지하게 되는 요소(Length, Size, Color, Width 등등), 동시에 사용하면 인지하기 어렵기 때문에, 적절하게 사용할 때 시각적으로 분리된다.(visual pop-out)

    🔵 Python & Matplotlip

    Matplotlib이란? → Python에서 사용할 수 있는 시각화 라이브러리이다.

    numpy, scipy를 베이스로하여 다양한 라이브러리와 호환성이 좋다.

    • Scikit-Learn, PyTorch, Tensorflow
    • Pandas

    막대그래프, 선그래프, 산점도 등등 지원한다.

    (Seaborn, Plotly, Bokeh, Altair 등 시각화 라이브러리가 존재한다.)

    import matplotlib as mpl #Matplotlib 라이브러리 호출
    import matplotlib.pyplot as plt #pyplot 모듈 호출

    기본적인 Plot들

    matplotlib에서 그리는 시각화는 Figure라는 큰 틀에 Ax라는 서브플롯을 추가해서 만든다.

    fig = plt.figure(figsize = ('가로(인치)', '세로(인치)')) #fig 사이즈를 조절해서 키기를 조절할 수 있다.
    plt.show() #fig에 나타난 그래프를 그려라!

    여기에 서브플롯을 1개 이상 추가해야 그려지게 된다.(대략 100개정도 그릴 수 있다.)

    Subplot추가

    fig = plt.figure()
    ax = fig.add_subplot()
    plt.show()
    #한개의 subplot이 fig에 추가가되어 그려진다.(파레트가)
    
    fig = plt.figure()
    ax = fig.add_subplot(1,2,1)
    #세로를 1개로 나누고, 가로를 2개로 나누고 ,Number 1 칸에 추가
    ax = fig.add_subplot(1,2,2)
    #세로를 1개로 나누고, 가로를 2개로 나누고 ,Number 2 칸에 추가
    plt.show()

    plt로 그래프 그리기

    • 선 한개 그리기
    x = [1,2,3] #리스트를 그래프로 그리는 방법
    
    #plot이라는 함수가 선그래프를 그린다.
    fig = plt.figure()
    ax = fig.add_subplot()
    x = [1,2,3]
    
    plt.plot(x) -> 선그래프를 그리는 함수
    plt.show()
    • 여러개 그리기
    1. Pyplot API : 순차적 방법
    2. 객체지향 API : 그래프에서 각 객체에 대해 직접적으로 수정하는 방법
    fig = plt.figure()
    x1 = [1,2,3]
    x2 = [4,5,6]
    
    ax1 = fig.add_subplot(2,1,1)
    ax2 = fig.add_subplot(2,1,2)
    
    ax1.plot(x1)
    ax2.plot(x2)
    plt.show()

    Plot 요소들 알아보기

    1. 색상

      • 생상은 Default로 지정되어 있다.(파랑, 주황, 초록 .. ) 단, 다른 종류의 그래프가 추가되면 파란색으로 다시 시작한다.

          #색 지정하기
          ax.plot([1,1,1], color='r') #한 글자로 정하는 색
          ax.plot([1,1,1], color='forestgreen') #색의 이름으로
          ax.plot([3,3,3], color='#000000') #hex code
    2. 텍스트

      • 정보를 추가하기 위해서 텍스트를 사용한다.

          #Label
          ax.plot([1,1,1], label='1')
          ax.legend() #범례를 추가해야 시각화에 드러난다.
        
          #Title
          ax = fig.addsubplot()
          ax.set_title('그래프 그리기') 
          #ax 라는 subplot에 추가한 제목
        
          fig.suptitle('전체 제목')
          #전체 제목 설정(가장 큰틀의 타이틀)
      • 축에 적히는 scale : ticks

      • 축에 적히는 text : ticklabels

          ax.set_xticks([0,1,2]) #x축의 scale을 지정한다.
          ax.set_xticklabels(['zero','one','two']) #이름 바꾸기
        
          ax.text(x좌표, y좌표, s='이것이 텍스트를 입력하는 함수') #원하는 위치에 Text를 적어줌.
          ax.annotate(text='annotate로 지정', xy = (x좌표, y좌표)
                                  ,xytext(x좌표, y좌표)
                                  ,arrowprops=dict(facecolor='색상')) #원하는 위치의 포인트에 적어주는 것, arrowprops로 화살표도 추가 가능
    반응형
Designed by Tistory.