[08.09 Special 강의] Introduction to Visualization 🤓
📊 시각화 소개
[수업 내용]
강사 : 안수빈 강사님
데이터 시각화 : 데이터를 그래픽 요소로 매핑하여 시각적으로 표현하는 것
아래의 6가지 요소들을 생각하면서 시각화를 적용하는 것이 중요하다고 하셨다.
- 목적 : 왜 시각화를 하는가?
- 독자 : 시각화 결과는 누구를 위한 것인가?
- 데이터 : 어떤 데이터를 시각화 할 것인가?
- 스토리 : 어떤 흐름으로 인사이트를 전달할 것인가?
- 방법 : 전달하고자 하는 내용에 맞게 효과적인 방법을 사용하고 있나?
- 디자인 : UI에서 만족스러운 디자인을 가지고 있는가?
시각화는 Score가 존재하지 않는다!
연구에서의 시각화 ≠ 개발에서의 시각화, 이론 ≠ 소비자
→ 여러가지 모범 사례를 보면서 좋은 시각화가 무엇인지 알려주신다.
👀 [시각화의 요소]
- 데이터를 이해한다.
- 시각화를 이해한다.
당연하지만, 데이터 시각화를 위해서는 데이터가 필수!
어떻게 시각화할까? → 관점에 차이
- 데이터 개별적으로 보여줄 것인가(Local)
- 데이터 셋 관점으로 보여줄 것인가(Global)
💿 데이터셋 종류들
- 정형 데이터가장 쉽게 시각화할 수 있는 데이터셋이다.
- 통계적 특성과 feature사이 관계
- 데이터 간 관계
- 데이터 간 비교
- : 일반적으로 csv, tsv 파일로 제공된다. Row가 데이터 1개, Column은 attribute를 나타낸다.
- 시계열 데이터
- 추세, 계절성, 주기성 등을 살핀다.
- : 시간의 흐름에 따른 데이터. (기온, 주가 등 정형데이터 / 음성, 비디오 같은 비정형 데이터)
- 지리 데이터
- : 지도 정보와 보고자 하는 정보 간의 조화가 중요하며 지도 정보를 단순화 시키는 경우도 존재한다.(거리, 경로, 분포 등)
- 관계(네트워크) 데이터→ 객체는 노드, 관계는 Link로 표시한다. (크기, 색, 수 등을 활용해 객체와 관계의 가중치를 표현한다.)
- 휴리스틱하게 노드 배치를 구성한다.
- : Graph, 객체와 객체사이의 관계를 시각화할 때 사용한다.
- 계층적 데이터→ Tree, Treemap, Sunburst 등이 대표적이다.
- : 과계 중에서 포함관계가 분명한 데이터 (네트워크 시각화로도 표현 가능하다.)
- 다양한 비정형 데이터
이런 데이터를 더 세부적으로 살펴보면 4가지로 분류된다.
- 수치형(Numeric)
- 연속형(Continuous) : 길이, 무게, 온도 등
- 이산형(Discrete) : 주사위 눈금, 사람 수 등
- 범주형(Categorial)
- 명목형(Nominal) : 혈액형, 종교 등
- 순서형(Ordinal) : 학년, 별점, 등급 등
시각화 이해
- Mark를 통해서 시각화 한다. (점, 선, 면 으로 이루어진 데이터 시각화)
- 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()
- 여러개 그리기
- Pyplot API : 순차적 방법
- 객체지향 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 요소들 알아보기
색상
생상은 Default로 지정되어 있다.(파랑, 주황, 초록 .. ) 단, 다른 종류의 그래프가 추가되면 파란색으로 다시 시작한다.
#색 지정하기 ax.plot([1,1,1], color='r') #한 글자로 정하는 색 ax.plot([1,1,1], color='forestgreen') #색의 이름으로 ax.plot([3,3,3], color='#000000') #hex code
텍스트
정보를 추가하기 위해서 텍스트를 사용한다.
#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로 화살표도 추가 가능