2.4 (금) - Data Viz(text, color, facet, tips, seaborn)

Data Viz

matplotlib

text

fig, ax = plt.subplots()

fig.suptitle('Figure Title')  # subtitle이 아니라 su'p'title이다. super+title

ax.plot([1,3,2], label='legend') # label이 붙은 데이터가 둘 이상이 아니어도 되네?
ax.legend()

ax.set_title('Ax title')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')

ax.text(x=1, y=2, s='Text') # 'x=', 'y='를 생략해도 동작.
fig.text(0.5, 0.6, s='Figure Text') # 둘의 차이는? 
# fig.text는 figure라는 큰 틀에 따라 움직인다. 큰 틀의 왼쪽 아래를 (0,0)지점, 오른쪽 위 끝을 (1,1)로 가정하고 입력한 값에 따라 텍스트의 
# 위치가 달라진다. x=1, y=1일 경우 figure라는 보이지 않는 액자의 오른쪽 위 꼭짓점에 텍스트가 위치한다고 생각하면 된다.
# 만약 x=2, y=9를 입력한다면 가로로는 figure라는 투명 액자 가로길이의 두배만큼 오른쪽으로, 세로길이의 9배만큼 위쪽으로 움직인 위치에 텍스트가
# 생성된다.
# 반면에 ax.text는 ax에 할당된 subplot의 x축 값, y축 값이 만나는 지점에 텍스트가 생성된다.

plt.show()

fig, axes = plt.subplots(1,2, figsize=(6,7))

fig.text(1, 1, s= 'Test')

plt.show()

fig, ax = plt.subplots()

ax.set_xlim(0,1)
ax.set_ylim(0,1)

ax.text(0.5, 0.5, s='test\ntext',
       zorder=1,  # z-order. 해당 plot을 x-y 평면으로 가정하면 화면에서 나오는 방향, 그리고 화면으로 들어가는 방향이 이루는 z축이 존재한다고
        # 말할 수 있다. z축에서의 순서를 말한다. 즉 텍스트를 다른 것보다 앞에 놓을지, 아니면 다른 것에 가려지게 할지를 정한다.
       linespacing=3, # line spacing. 줄간격.
        alpha=0.7,
        va='center', # vertical alignment. 세로 정렬. 텍스트의 세로 중앙을 지정한 위치(0.5, 0.5)에 맞춘다. 'top', 'bottom' 등이
        # 있고, 아마 기본값은 'bottom'일 것.
        ha='center', # horizontal alignment. 가로 정렬. 기본값은 'left'
        rotation=45, # 텍스트 회전. 기본값은 'horizontal' 다른 방향으로 돌리려면? -> 숫자를 적으면 해당 숫자 degree로 회전.
        #rotation='vertical'
        bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.4, ec='red') # 'bbox'는 텍스트 주변 박스형태를 만들고 꾸며줌.
        # boxstyle은 말그대로 박스 형태. facecolor는 어떤 색으로 채울지, ec는 edge color로 테두리 색.
       )

plt.show()

  • zip()으로 특정 칼럼과 색상을 묶고 (ex. zip(['adult', 'kid'],['orange', 'green'])) 해당 칼럼에 따라 색상을 달리 하여 정보를 나타낼 수 있음.
    • .scatter()와 결합 시 A, B의 상관관계를 확인하면서 동시에 adult, kid에 따른 분류도 가능함.

color

  • from matplotlib.colors import ListedColormap

facet

  • dpi 파라미터를 이용한 해상도 조절
  • .set_facecolor()를 통한 배경색 설정
  • subplots 설정 시 sharex, sharey를 통한 x, y축 인덱스 동기화
  • squeeze=False를 통한 자동 squeeze 해제 → subplots의 위치를 (1,3)으로 설정해도 2차원 배열로 subplot indexing이 가능해짐.
    • 어떨 때는 sqeeze가 되어 axes[i]꼴로 인덱싱하는 게 편하지만, 또 어떨 때는 axes[i][j]꼴로 인덱싱하는게 더 편하다.
  • aspect 값(y/x) 변경으로 각 축의 길이 비례 조절.
  • .add_gridspec(m,n)으로 그리드 형태 subplots 제작 가능. 슬라이싱 통해 합칠 수 있음.

seaborn

import seaborn as sns (왜 sns인지는 아무도 모른다고 함...)

  • sns.countplot(x=, y=, data=, order, hue, color, palette, etc.)
  • sns.boxplot()
  • sns.histplot()
  • sns.kdeplot()
  • sns.ecdfplot()
  • sns.rugplot()
  • sns.scatterplot()
  • sns.lineplot()
  • sns.regplot()
  • sns.heatmap()
  • sns.jointplot()
  • sns.pairplot()
  • sns.catplot()
  • sns.relplot()
  • sns.lmplot()

Questions

  • 하나하나 지금 다 외우기보다는 리스트만 적어놓고 필요할 때 찾아서 쓰는게 효율적이겠다는 생각이 들었다.
  • 데이터에서 필요한 부분을 추출하고 어떤 정보를 강조하고 싶은지 고민하는 것이 먼저일 것 같다.

회고

  • 생각보다 재밌는 수업이었다. 데이터를 시각화한다는 것 자체가 흥미로웠고 보다 명료하게, 보다 의미가 잘 드러나게, 보다 나의 의도를 전달할 수 있도록 시각화를 하는 과정이 재밌었다. 딱딱하게 정렬된 데이터에서 필요한 부분을 뽑고 (예쁘게) 그려놓는 과정이 꽤 재밌었다.
    시각화의 의의와 효용에 대한 강사님의 발표도 유익했다.

  • '지속가능한 개발자'라는 말이 심심찮게 들려온다. 세상은 그러한 개발자를 원하고, 사람들은 그러한 개발자가 되려 노력한다는 현상으로 해석된다.
    하지만 '지속가능한 개발자'가 되려면 우선 개발이 포함된 '나의 일상이 지속가능'해야 한다.
    개발에 미쳐야 한다고 생각하고 있었다. 수업을 듣고 과제를 해결하고 팀원들과 토의는 하지만 개발에 미치지는 못하는 자신을 보며 자책을 하기도 했다. 하지만 꼭 미쳐야만 할까?
    어떠한 개발자가 되려 하는지, 왜 개발을 하려고 했는지, 아니 애초에 어떤 삶을 살고 싶은지 좀 더 깊게 생각하는 시간이 필요할 것 같다. 취업에 대한 압박과 조급함 때문에 시야가 많이 좁아졌다는 생각이 든다. 이러한 성찰을 바탕으로 다시 큰 그림을 그리고 그 그림에 맞게 일상을 구성해보고, 또 좁게는 부스트캠프에서의 5개월을 위한 효율적 시간관리법을 고민해봐야겠다.

좋은 웹페이지 즐겨찾기