-
220722_데이터분석_NumPy_3주_5일차(복기)bigdata_bootcamp_12th/daily review 2022. 7. 24. 23:35
데이터 시각화
흔히 엑셀의 피벗테이블 -> 피벗차트 / 차트만들기를 생각해보면 이해가 빨라질 것이다.
- 기본 환경 설정
# 코랩에서 한글 폰트 깨지는 현상 해결을 위해 한국어 폰트들을 설치합니다
!sudo apt-get install -y fonts-nanum # 매직메소드
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf#
이후 런타임 재시작1. Matplotlib
- 파이썬의 대표적인 과학 계산용 그래프 라이브러리
- 판다스에 연계된 시각화 도구
- 논문용으로 많이 쓰임
- 다양한 운영체제와 그래픽 백엔드에서 동작
# %matplotlib inline # 버전이 낮은 노트북에서 그래프가 바로 뜨지 않을 때 사용 % 쉘메소드 import matplotlib as mpl # 기본 설정 만지는 용도 import matplotlib.pyplot as plt # 그래프 그리는 용도 import matplotlib.font_manager as fm # 폰트 관련 용도
1) 현재 설치된 폰트 확인
sys_font=fm.findSystemFonts() print(f"sys_font number: {len(sys_font)}") print(sys_font) nanum_font = [f for f in sys_font if 'Nanum' in f] print(f"nanum_font number: {len(nanum_font)}")
plt.rc('font', family='NanumGothic') # 한글 폰트 설정 plt.rc('axes', unicode_minus=False) # 기호 깨짐 현상 방지를 위한 설정
2) 도화지 세팅 (plot 구성)
- 플롯(plot)은 그림(figure)와 축(axes)으로 구성되어 있습니다.
plt.figure: 축과 그래픽, 텍스트, 레이블을 표시하는 모든 객체를 포함하는 컨테이너
plt.axes: 눈금과 레이블이 있는 테두리 박스로 시각화를 형성하는 플롯 요소 포함fig = plt.figure() ax = plt.axes()
fig 를 출력해보면 값이 없는 해당 도화지(컨테이너)가 나온다
ax 를 출력해보면 도화지를 만든 플롯 요소가 나온다
<matplotlib.axes._subplots.AxesSubplot at 0x7f74ea970c90>
3) 기본 그래프 만들어보기 ( plot )
x = [1, 2, 3, 4, 5] y = [1, 2, 3, 4, 5] plt.plot(x, y); # 세미콜론 추가 시 ax값이 나오지 않음
2. Marker, Linestyle, Color
1) marker
- 참고 url : https://matplotlib.org/stable/api/markers_api.html
matplotlib.markers — Matplotlib 3.5.2 documentation
matplotlib.markers Functions to handle markers; used by the marker functionality of plot, scatter, and errorbar. All possible markers are defined here: marker symbol description "." point "," pixel "o" circle "v" triangle_down "^" triangle_up "<" triangle_
matplotlib.org
plt.plot(x, y, marker='^') ;
값을 나타내는 부분마다 ▲ 모양으로 표시가 되는 것을 볼 수 있다.
값을 마킹하는 것 정도로 이해하면 될 것 같다.
plt.plot(x, y, 's') ;
이처럼 다양하게 표현이 가능하다.
위에 참고 URL로 올려놓은 matplotlib 를 참고하면
정말 다양하게 만들 수 있다.
2) linestyle
- '-' : solid
- '--' : dashed
- '-.' : 'dashdot
- ':' : dotted
plt.plot(x, y, linestyle='--') ;
라인스타일 이라는 이름에 걸맞게 그냥 선의 모양을 결정한다.
예시로 실선을 -- 으로 변경하였다.
위의 마커와 같이 쓰면 그래프 모양이 좀 이뻐질 것 같다.
plt.plot(x, y, linestyle='--', marker='^' ) ;
3) color
- 참고 URL : https://matplotlib.org/stable/gallery/color/named_colors.html
List of named colors — Matplotlib 3.5.2 documentation
Note Click here to download the full example code
matplotlib.org
plt.plot(x, y, color ='g') ;
컬러는 말 그대로 그래프(데이터)의 색을 의미한다
컬러의 풀네임을 써도 되고 약어를 입력해도 된다.
앞에서 쓴 3가지를 예시와 함께 만들어보면
예시 - np.random.randn(30).cumsum() # 표준정규분포 난수 30개 뽑아줘
a = np.random.randn(30).cumsum() b = np.random.randn(30).cumsum() plt.plot(a ,color ='g', linestyle='--', marker='^' ) ; plt.plot(b ,color ='b', linestyle='--', marker='^' ) ;
a의 데이터는 초록색
b의 데이터는 파란색으로
이렇게 같은 plt라는 도화지(컨테이너) 위에 2가지 이상의 그래프를
같이 그릴 수도 있다.
참고, 매번 랜덤으로 뽑아내는 난수를 가지고 만든 그래프이기에
사용자마다 형태가 다르다.
3. 축과 레이블
1) 축(axis)
plt.plot(np.random.randn(30).cumsum()) plt.xlim(0, 30) # x축 길이는 0에서 30 plt.ylim(-15, 15) # y축 길이는 -15에서 15
보기와 같이 각 축의 최소값 최대값을 지정하여
그래프를 보다 역동적이게 보이게 하거나
보다 미미하게 보이게 할 수 있다.
마케팅을 하다보면 해당 부분을 많이 쓴다. 필요한 부분을 강조하고 불필요한 부분의 존재감을 옅게 하는데 쓰인다.
예를 들어 기름 값이 1990원에서 2010원이 되었다는건 20원의 차이밖에 없지만
Y 축의 기준이 1980원에서 2020원까지로 잡는다면 어마어마한 굴곡의 그래프가 완성될 것이다.
이처럼 KPI를 기준으로 하여 필요한 부분의 동향을 디테일하게 관찰할 경우 도움이 되는 부분이 많다.
2) tight, equal
- tight
plt.plot(np.random.randn(30).cumsum()) plt.axis('tight')
위의 언급한 부분확대의 최적화, 디테일한 동향체크를 위해 쓰인다. 값의 최대값과 최소값을 기준으로 만든다.
- equal
plt.plot(np.random.randn(30).cumsum()) plt.axis('equal')
기준이 어느 한쪽에 유리하게 작용하지 않게
평등하고 러프한 느낌으로 그래프를 만들어준다
4) 레이블 (label)
plt.plot(np.random.randn(30).cumsum(),label = 'A') plt.plot(np.random.randn(30).cumsum(),label = 'B') plt.plot(np.random.randn(30).cumsum(),label = 'C') plt.title('제목') plt.ylabel('x축') plt.ylabel('y축') plt.legend() # 아무것도 정하지 않으면 레전드는 자기 맘대로 들어감
데이터 레이블과 제목, 축제목 등 설정 방법
5) 폰트
- 폰트 관리자(Font Manager)를 통해 외부에서 지정 후 사용
set([f.name for f in mpl.font_manager.fontManager.ttflist]) font1 = {'family' : 'NanumGothic', 'size' : 24 , 'color' : 'red'} font2 = {'family' : 'NanumSquare', 'size' : 16 , 'color' : 'blue'} plt.plot(np.random.randn(30).cumsum(),label = 'A') plt.plot(np.random.randn(30).cumsum(),label = 'B') plt.title('제목', fontdict=font1) plt.xlabel('x축', fontdict=font2) plt.ylabel('y축', fontdict=font2) plt.legend()
한글을 쓸 때는 한글을 지원하는 Nanum 폰트를 이용하는 것이
일반적인 선택이고 굳이 한글을 쓸 필요 없을 때
기타 외 폰트들을 이용하는 것도 괜찮다.
폰트는 다양하게 있고 다운 받을 수 있으므로
폰트가 지정되어있는 업무 ex) 보고서 등에 사용할 때
별도의 폰트를 지정하여 써주는 것이 좋아보인다.
'bigdata_bootcamp_12th > daily review' 카테고리의 다른 글
220721_데이터분석_NumPy_3주_3,4일차(복기) (0) 2022.07.21 220719_데이터분석_NumPy_3주_2일차(복기) (0) 2022.07.19 220718_부트캠프시작_python_3주_1일차 (복기) (0) 2022.07.18 220715_부트캠프시작_python_2주_5일차 (복기) (0) 2022.07.17 220714_부트캠프시작_python_2주_4일차 (복기) (0) 2022.07.14