본문 바로가기

활동/SK네트웍스 Family AI 캠프 2기

SK네트웍스 Family AI 캠프 2기 : 5th week (6월 2주차)

정신 없이 공부하면서 지냈더니 벌써 5주차가 다 끝났네요...

2기 사람들 면학 분위기도 좋고, 커리큘럼 내용도 재밌게 느껴져서 그런지 시간이 너무 빨리 흘러요!

 

그리고 독산역 근처에서 생활한지 5주 정도 지나니까 이 동네 생태계를 어느 정도 알 것 같아요ㅋㅋㅋㅋㅋ

괜찮은 밥집도 몇 개 알아냈으니 나름 적응한 거겠죠? ^_^

 

남은 시간 동안 페이스 조절 잘해서 내용들 알차게 배워야겠어요.

체력 관리 꼭꼭 신경 써야지....!!

 

 

● 성취

이번 주에는 pandas, numpy 라이브러리 기반의 데이터 분석 진도를 끝냈습니다.

더 나아가 matplotlib와 seaborn 라이브러리를 적용한 시각화 방식도 함께 익혔습니다.

 

데이터 분석 진도를 마무리한 후, scikit-learn 라이브러리를 중심으로 한 머신러닝 수업 진도를 나갔습니다.

numpy, pandas를 알고 난 후에 수업을 들으니 내용 이해할 때 좀 더 수월했어요.

 

이전에 공부했던 내용들도 몇몇 있었지만, 다시 복습하니까 새롭게 느껴지는 구석이 몇 가지 있었답니다~

특히 이번에 개인적으로 matplotlib 라이브러리를 객체 관점으로 뜯어보는 활동을 했었는데요.

이전에 비해 시야가 확장된 느낌을 받아서 기분이 좋았답니다. 

python 라이브러리를 딥하게 다루기 위해 OOP 개념을 기본 탑재해야 한다는 걸 배울 수 있었어요!

 

 

● 학습 (제 인상에 깊었던 내용을 주로 정리했습니다.)

이번 주에는 seaborn으로 데이터 시각화 했던 부분이 가장 인상 깊었습니다.

따라서 그 부분 위주로 코드 해설을 올릴게요~

+) 참고로 seaborn 라이브러리는 matplotlib 기반으로 만들어졌다고 합니다!

 

하단의 코드는 수업에서 배운 내용을 바탕으로 추가 공부한 자료입니다. 

'데이터 분석을 위한 판다스 입문(Chen, Daniel Y. 저)' 책을 추가 공부 시에 참고했습니다.

 

import pandas as pd
import numpy as np

import seaborn as sns
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings('ignore')

 

먼저 필요한 라이브러리들을 불러옵니다.

저는 데이터 처리를 위해 pandas와 numpy 라이브러리를 불러왔어요.

참고로 as는 코드를 효율적으로 작성하기 위해 지정한 별칭입니다!

 

그리고 seaborn 라이브러리와 matplotlib 라이브러리의 pyplot 모듈을 불러왔어요.

이 두 라이브러리들은 시각화를 위해서 사용할 예정입니다.

 

몇몇 시각화 메서드를 사용하다 보면 경고 문구가 뜨는데, 앞으로 변화할 사항에 대해 미리 언급하는 것이니 참고만 하고 넘어가셔도 당장은 무방합니다.

경고문이 보기 싫으신 경우에는 위 코드처럼 warnings 라이브러리의 filterwarnings('ignore') 메서드 기능을 이용하시길 바랍니다.

 

tips = sns.load_dataset("tips")
tips

 

 

다음으로 데이터를 불러옵니다.

저는 seaborn 라이브러리에 있는 tips 예제 데이터셋을 가져왔어요.

이 데이터셋에는 어떤 식당에서 팁을 지불한 손님의 정보가 기록되어 있습니다.

특수한 도메인 지식이 필요 없는 데이터라서 직관적으로 이해하기 좋더라구요.

 

# 히스토그램 그리기

ax = plt.subplots()
ax = sns.distplot(tips['total_bill'])
ax.set_title('Total Bill Histogram with Density Plot')

 

 

먼저 matplotlib 라이브러리 내에 있는 subplots 메서드를 사용함으로써 큰 틀을 잡아줄게요.

seaborn은 matplotlib 기반으로 만들어진 라이브러리라서, 이처럼 matplotlib를 함께 써야 하는 일들이 종종 생긴답니다.

 

다음으로 seaborn 내에 있는 distplot 메서드를 통해 히스토그램을 그려볼게요.

distplot 메서드를 사용하면 전체적인 히스토그램과 밀도를 함께 볼 수 있어요.

저는 전체적인 팁의 분포가 궁금해서 tips 데이터의 'total_bill' 열만 따로 추출해서 사용했습니다.

 

그 다음으로 히스토그램에 제목을 남겨줍시다!

여기서는 'Total Bill Histogram with Density Plot' 제목을 사용했습니다.

본인 취향에 맞게 다른 제목을 지어주셔도 좋아요~

 

히스토그램 그래프를 보니까 10~20 사이로 팁 받은 경우가 많다는 것을 알 수 있네요!

 

 

# 빈도 그래프 그리기

ax = plt.subplots()
ax = sns.countplot(x='day', data=tips)
ax.set_title('Count of days')
ax.set_xlabel('day of the Week')
ax.set_ylabel('Frequency')

위에서 히스토그램을 그렸던 것과 마찬가지로 matplotlib 라이브러리를 사용해서 큰 틀을 잡아준 후, seaborn 라이브러리를 통해 countplot을 그려줍니다.

그리고 제목, x축 이름, y축 이름을 지정해 주면 됩니다!

 

그래프로 시각화를 하니까 주말에 팁을 받은 빈도가 높다는 것을 알 수 있네요.

더 세세하게 들어가면 토요일이 일요일보다 더 빈번하게 팁을 받았다는 것도 알 수 있고요.

 

# 박스 그래프 그리기

ax = plt.subplots()
ax = sns.boxplot(x='time', y='total_bill', data=tips)
ax.set_title('Boxplot of total bill by time of day')
ax.set_xlabel('Time of day')
ax.set_ylabel('Total Bill')

 

박스 그래프도 위와 마찬가지로 matplotlib 라이브러리를 사용해서 큰 틀을 잡아준 후, seaborn 라이브러리를 통해 boxplot을 그려주세요!

저는 시간에 따른 전체 팁의 분포가 궁금했기 때문에 x를 time으로, y를 total_bill로 설정했습니다.

그리고 이번에도 아까처럼 제목, x축 이름, y축 이름을 지정해 주세요.

 

박스 그래프를 그리면 최솟값, 1분위수, 중간값, 3분위수, 최댓값, 이상치 등을 알 수 있어요.

이 그래프에서는 저녁 시간대에 받을 수 있는 팁 가격의 범위가 넓다는 것이 보이죠?

 

저녁 시간대에 일하면 운이 좋은 날에 팁값으로 최고점도 찍을 수 있겠네요!

게다가 1분위수~3분위수도 저녁 시간대가 더 높네요.

해당 식당 알바들 사이에서 저녁 시간대 수입이 더 높다는 소문이 퍼지면 경쟁률이 꽤나 치열해질 가능성이 있겠네요ㅋㅋ

물론 저녁 시간대의 최솟값이 점심 시간대보다 낮지만, 몇몇 알바생들은 이 정도 도박은 해볼만 하다고 생각할 거니까요!

 

이 외에도 matplotlib와 seaborn을 조합해서 사용하면 다양한 시각 그래프를 만들 수 있습니다.

공식 메뉴얼을 보면 다양한 예시들을 더 많이 접할 수 있어요!

 

 

Examples — Matplotlib 3.9.0 documentation

Examples For an overview of the plotting methods we provide, see Plot types This page contains example plots. Click on any image to see the full image and source code. For longer tutorials, see our tutorials page. You can also find external resources and a

matplotlib.org

 

 

Example gallery — seaborn 0.13.2 documentation

 

seaborn.pydata.org

 

 

● 개선 (제가 취약했던 개념을 주로 정리했습니다.)

# KNN (K-Nearest Neighbor) 알고리즘

KNN 알고리즘은, 근처 k개 이웃의 정보를 파악하여 새로운 데이터에게 카테고리를 부여하는 방식입니다.

이 알고리즘은 대표적이 지도학습이라고 볼 수 있어요.

주변 친구를 보면 그 사람을 알 수 있다는 말이 있잖아요?

KNN 알고리즘이 그 방식과 유사하게 동작합니다.

KNN 알고리즘은 주변 이웃을 선정하기 위해서 거리 지표를 중요하게 여겨요.

거리 지표로는 유클리디안 거리(Euclidean Distance), 맨해튼 거리(Manhattan Distance) 등을 사용합니다.

 

'유클리디안 거리(Euclidean Distance)'는 학창 시절부터 자주 봐서 친숙한 공식 중 하나입니다.

피타고라스 정리로 유도 가능했던 그 공식이요!

 

어쩐지 생긴 모습이 익숙하죠?

 

다음으로 '맨해튼 거리(Manhattan Distance)'입니다. 

맨해튼 거리는 격자 내 x 이동 횟수와 y 이동 횟수가 같기만 하면, 동선이 달라도 거리가 같다고 판정해요.

 

따라서 위 그림 속 Route1, Route 2, Route 3는 맨해튼 거리 기준으로 같다고 볼 수 있습니다!

 

이 외에도 다양한 거리 지표들이 있습니다.

아! 그리고 KNN 알고리즘을 수행하기 전에 데이터 사이 정규화를 반드시 거쳐야 합니다!

그래야 거리 지표를 제대로 사용할 수 있어요!!

 

 

정리하고 보니까 앞으로 공부해야 하는 내용들이 정말 많다는 게 느껴집니다...^^

열심히 해서 진정한 고인물이 되고 싶네여! 

 

+) 부족한 부분이 있으면 댓글로 말씀해 주세요! 겸허한 마음으로 더 공부하겠습니다.