728x90

데이터와 관련해 취준생, 주니어 분들을 위한 강의를 해달라는 요청을 받았습니다. 사실, 2년차 개발자라 수강생 분들께 유익한 강의를 할 수 있을까, 수강생 분들이 시간 낭비하는게 아닐까 하는 걱정부터 앞섰지만 좋은 기회를 놓치면 안되겠다는 생각이 들었습니다.

 

 

강의 준비

강의 준비 기간까지 약 한달 반 정도가 남았고 12시간 분량의 라이브 수업을 준비해야 했습니다. 네OO AI 교육 과정의 멘토를 맡아본 적은 있었지만 강의를 직접 제작해 본 경험은 없었기에 저에게는 굉장히 챌린징했었습니다. 일단은 닥치는대로 데이터와 관련된 책을 찾아보기 위해 서점을 들락거리기 시작했습니다. 여러 군데의 서점에서 데이터 관련 책들을 살펴보았는데 대부분 기술적인 내용을 다루는 책들이었습니다. 그러다보니 다루는 내용들이 비슷비슷했고 데이터를 다루는 기술에 대해서는 많이들 설명해주고 있었지만 그래서 왜 비즈니스에서 데이터 기반의 의사결정을 해야하는지는 설명해주지 않아습니다. 그러던 중 정말 보석 같은 귀한 책들을 몇 권 발견하였는데요. 

 

 

이 책들에서 공통적으로 이야기하는 점들은 다음과 같았습니다. 

데이터를 통해 사람의 행동을 이끌어내는 것이 데이터를 다뤄야 하는 근본 이유다.

 

보석 같은 책들

위 책들을 통해 제가 알지 못했던 것들을 깨닫게 되고 인사이트를 정말 많이 습득할 수 있었습니다. 한 분야에서 몇년 동안 경험하고 학습하셨던 것들을 한권의 책에 담아 제 시간을 아끼게 해주신 저자분들께 감사의 말씀을 드립니다. 특히, 데이터 드리븐 분석비법 책은 스승과 제자가 대화하는 형태로 글이 작성되어 있어서 무척 재미있게 읽었던 기억이 납니다. 

 

커리큘럼 구성

1회당 3시간, 총 4회를 준비했는데요. 1일차에는 데이터 드리븐 의사결정이 왜 필요한지 배우고 설득력을 높이는 데이터 시각화 기초 이론에 대해 강의를 준비했습니다. 데이터는 책과 마찬가지로 내가 경험해보지 못했던 것들을 간접적으로 경험할 수 있게 해주어 경험, 정보의 폭을 증대할 수 있습니다. 코끼리를 눈을 감고 만질 때 다리만 만져본 사람과 얼굴만 만져본 사람은 코끼리의 부분밖에 모르지만 코끼리를 눈으로 본 사람은 코끼리에 대해 더 잘 알 수 있게 되는 거과 같은 이치입니다. 데이터를 통해 결국에 해야하는 건 사람의 행동(액션)의 변화를 이끌어내는 것이 중요합니다. 따라서 어떻게 하면 데이터에서 유용한 의미를 뽑아 누구나 납득할 수 있는 설득력 있는 데이터 시각화를 하는 방법에 대해 알아야합니다. 독자의 인지부하를 낮추는 시각 속성들, 게슈탈트 원칙 등에 대해서 학습합니다.

 

2일차에는 python의 matplotlib을 활용하여 막대그래프, 선그래프, 산포도를 그리는 방법에 대한 학습 내용을 준비했습니다. 1일차 때 학습했던 기초 이론을 응용하여 실제 데이터 분석에서는 어떤 식으로 표현하는지 파악하고 보다 나은 데이터 시각화에 대해 학습합니다. 무의식적으로 사용하던 시각 속성들을 의식적으로 사용하며 보다 의미 있는 정보를 독자에게 전달할 수 있습니다.

 

3일차에는 seaborn, plotly에 대해 배우며 matplotlib보다 훨씬 편리한 사용법과 다양한 기능들을 소개하였습니다. Interactive 시각화를 통해 독자가 시각화 작품에 직접 마우스 클릭, 도구를 통한 조작 등을 할 수 있게 되면서 정적인 그래프에서는 담지 못했던 여러가지 정보를 깔끔하게 담을 수 있다는 것을 알게 됩니다.

 

4일차에는 지금까지 배웠던 시각화 기초 이론과 코딩을 통해 현업과 비슷한 느낌으로 실전 프로젝트를 수행합니다. 문제 정의, 데이터 수집/정제, 데이터 시각화를 통한 유용한 사실을 파악하고 또 다시 문제 정의의 사이클을 돕니다. 이를 통해 현업에서는 어떤 식으로 데이터 분석을 하는지 감을 잡을 수 있습니다.  

 

 

정규 교육 외 소개했던 내용

데이터 관련 직군에 대한 소개를 하였고 데이터 엔지니어, 데이터 사이언티스트, 데이터 분석가라는 직무가 어떤 일을 수행하는지에 대해 소개하였습니다. 데이터가 중요한 건 알겠는데 어떤 직무가 도대체 무슨 일을 하는지 도통 알기 어렵습니다. 채용 공고를 봐도 이해가 잘 안되는데 이런 부분들에 대해 예시를 들어가며 설명을 했습니다.

 

현업에서 데이터 분석을 하며 겪었던 어려움에 대해 소개하는 시간을 가졌습니다. 수강생 분들께서 현업에서는 어떤 일을 하게 되고 어떤 문제를 해결할까라는 궁금증이 생길텐데 제가 겪었던 문제점에 대해 소개하고 이를 해결하기 위해 어떤 노력을 했었는지 소개했었습니다. 

 

마지막으로는 이력서와 포트폴리오에 관한 작성법과 제 이력서를 예시로 보여드렸는데요. 이력서를 어떻게 작성해야하는지 자주 질문이 들어왔기에 한 번 소개를 하면 좋겠다 생각했었습니다. 포트폴리오 작성을 위해 프로젝트를 권장했고 강의에서 학습했던 내용을 토대로 지원하고자 하는 회사와 관련된 산업 분야의 데이터셋을 찾아보시길 추천드렸습니다.

 

 

강의 피드백

 

챌린지의 난이도(매우 쉬움-1 매우 어려움-7) : 4.04

커리큘럼(주제) 만족도(매우 불만족-1 매우 만족-7) : 5.15

멘토의 세션 진행 적극도(매우 소극적-1 매우 적극적-7) : 5.93

멘토의 세션 진행을 위한 분야 전문성(매우 부족함-1 매우 충분함-7) : 5.76

 

긍정적인 피드백

"지금까지 국비지원으로 들었던 수업과 프로젝트 경험보다 더 알찼던 수업이에요 ㅠㅠ 파이썬 강의도 해주세요~!! 감사합니다"

"시각화 방식, 분석 사례를 꼼꼼하게 잘 알려주셔서 좋았습니다 많은 도움이 된 거 같아요"

"감사합니다 정규수업 외 커리어에 대한 이야기들도 많이 도움이 됐습니다"

"기초적인 부분들이지만 놓치기 쉬운 부분들, 이 데이터가 왜 필요한지를 생각해서 데이터 표현 및 시각화하는 걸 배울 수 있었습니다. 또, 어렵지 않게 차근차근 설명해주셔서, 잘 따라갈 수 있었어요. 감사합니다~"

"질문에 대해 상세하게 답변해주셔서 도움이 많이 됐습니다. 감사합니다."

"실무에서는 어떻게 일을 하는지 알 수 가 없었는데 교육을 통해 대략적인 느낌을 알게 되었습니다."

"꼼꼼히 설명해주시려 하고 피드백도 잘해주셔서 이해하기 수월했습니다. 그동안 감사했습니다!"

 

 

보완이 필요한 피드백

"해당 주 강의 주제 및 수준에 맞는 과제가 있으면 좋을 것 같습니다. ex. 1주(1일차, 2일차) 강의 목적에 부합하는 과제"

"데이터 분석이라하여 스킬적인 것보다는 데이터를 해석하고 의사결정에 적용하는 일련의 과정들에대한 교육을 기대했는데 코드 위주라살짝 아쉬움이 있었어요ㅠㅠ"

"코드 일부분은 시간이 부족해 넘어간 부분이 있습니다. 그래서 코드에 자세한 설명이 적힌 주석이 달리면 좋겠습니다."

"세션 구성 및 중간 과제도 있으면 좋을 것 같아요"

"사전과제말고도 주차별 과제가 있으면 더 좋을꺼같아요!/사전질문을 받는것도 좋은 방법 같아요"

 

KPT(Keep Problem Try)

Keep

사전 과제, 실전 프로젝트, 다양한 수업자료 업로드 등은 많은 분들께서 좋은 피드백을 주셔서 계속 유지하는게 좋을 것 같습니다.

 

강의 난이도는 쉬웠다는 분도 있구 어려웠다는 분도 있었는데 평점을 내보니 거의 가운데였습니다. 수강생들의 편차가 굉장히 크다보니 어쩔 수 없는 부분인 것 같고 그래도 난이도 부분은 평타 친 것 같습니다. 이러한 난이도로 수업을 진행해도 큰 문제 없을 것 같다는 생각이 듭니다.

 

Problem

커리큘럼(주제) 만족도가 조금 아쉬운 부분인 것 같습니다. 아무래도 짧은 시간 내 준비하다보니 더 양질의 내용을 추가하지 못했던 게 아쉬움이 남습니다. 스킬적인 것보다 데이터를 해석하고 의사결정에 적용하는 과정을 기대하셨다는 피드백에 공감하고 있고 다음에도 강의할 기회가 생긴다면 그러한 것들을 체험할 수 있는 실전 프로젝트를 더 많이 포함하는 것이 좋아보입니다. 

 

Try

또 생각 못했던 부분인데 주차별 과제, 사전 질문도 추가하면 좋을 것 같습니다. 학생 분들의 참여도도 많이 높일 수 있을 것 같고 나와있는 예제를 그냥 실행하는 것보다 직접 코드를 짜보고 만들어보면 좋을 것 같다는 생각이 들었습니다. 코딩을 처음 해보시는 초보자 분들은 수업 때 아무리 설명을 하더라도 어려움을 많이 겪고 계셨습니다. 그래서 강의 자료에 좀 더 자세한 주석을 써두어 복습하실 때 도움이 되도록 해야겠습니다.

 

 

 

728x90
728x90

Feature Engineering(특성 공학)

Feature Engineering은 도메인 지식과 창의성을 바탕으로 데이터셋에 존재하는 feature를 재조합하여 새로운 feature를 만드는 것입니다. 조합은 간단한 연산일 수도 있고 복잡한 연산일 수도 있습니다.

간단한 조합

  • 가족 수 = 형제/자매 수 + 부모님 수 + 자식 수

복잡한 조합

  • BMI 지수 = 몸무게 / (신장*신장)
  • Outlier Detection
  • One hot encoding
  • handling missing values

이상치를 찾는 과정은 모든 데이터에서 필요합니다. 어떤 특정 데이터가 원래 데이터와는 상식에 벗어날만큼 떨어져 있을 때, 이 특정 데이터를 제거해주어야 합니다. 예를 들면, 사람의 키가 3m라고 한다면 이 값은 상식적으로 제거하는 것이 맞습니다.

좋은 데이터를 넣어줬을 때 우리가 원하는 더 좋은 모델을 만들 수 있기 때문에 데이터를 가공하는 작업을 해주는 것입니다.

Tidy

Tidy는 데이터를 표준화하기 위해 탄성했습니다.

Tidy의 특징

  1. 하나의 열에는 하나의 feature를 기반으로 저장
  2. 각 관측치는 행을 구성한다.
  3. 각 표는 단 하나의 관측기준에 의해서 조직된 데이터를 저장한다.

잘못된 예

구분처리A처리B
Richard51
Charlie29

좋은 예

구분처리결과
RichardA5
CharlieA2
RichardB1
CharlieB9

NaN이라는 값은 프로그래밍상 float라는 type을 갖는다. 하나의 특성에 NaN 값이 있다면 다른 값들도 float가 존재하게 된다.

그렇다면 위와 유사한 Na, NULL, Nan, 0, Undefined의 type의 차이는 무엇일까?

표에 들어가 있는 string 값을 int로 바꾸기 위한 과정

object와 string의 차이점

Feature Engineering을 공부하면서 도메인 지식과 데이터를 다루는 사람의 인사이트가 중요하다는 걸 느꼈습니다.

데이터프레임에 내부 String data에 있는 쉼표 없애기

  1. replace 함수
    `df['money'].replace(',','')

  2. read_cvs 함수, thousands 옵션
    `df=pd.read_csv('data.csv',thousands=',')
    int or float 형변환 함수
    Int 형 변환

apply함수

728x90
728x90

EDA(Exploratory Data Analysis)란?

탐색적 자료 분석

데이터에는 우리가 모르는 정보들이 숨어있습니다. 데이터의 특성을 알아내고 그로부터 모델링하여 유용한 결과를 얻어내는 것이 data science입니다. 데이터의 특성을 알아보는 작업이 바로 EDA입니다.

EDA 작업 순서

1. 데이터셋을 불러옵니다.

import pandas as pd
df = pd.read_csv('data/csv') # read_csv(경로, 구분자, 헤더,…)

2. 데이터셋에 대한 대략적인 정보를 파악합니다.

  • 행과 열의 수
df.shape
  • 데이터셋의 헤더
df.columns
  • 결측 데이터 확인
print(df.isnull().sum())
  • 원본의 형태 확인하기

csv 파일을 직접 열어서 확인을 해봅니다. 만일, dataframe의 헤더 부분이 columns이 아니라 rows에 있다면 transpose를 하는 작업을 해주어야 합니다. 그렇지 않는다면, pandas의 다른 함수를 적용하는데 어려움을 겪을 수 있습니다.

3. 시각화

Uni - Graphic

Histogram Pie Chart, Stem-leaf plot, Boxplot, QQplot

import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings(action='ignore')
plt.rcParams['figure.figsize'] = [15,6]

index = np.arange(len(df))
plt.figure()
plt.barplot(index,df['A'].values)
plt.xlabel('index')
plt.ylabel('A')
plt.title('A with index')
728x90
728x90

pandas의 cut과 qcut은 간단히 설명하면 절대평가와 상대평가의 의미와 비슷합니다.  절대평가는 특정 점수 이상일 경우에 성적을 부여하는 것이고 상대평가는 인원수에 따라 상위 몇 %인지에 따라 성적이 부여됩니다.

 

cut의 경우 특정 점수가 부여되고 그 점수를 경계로 성적이 부여되고, qcut의 경우 상위 퍼센트가 부여되고 그 퍼센트를 경계로 성적이 부여됩니다. 

 

예시를 통해 알아보겠습니다.

 

CUT
import pandas as pd
import numpy as np

df=pd.read_csv('StudentsPerformance.csv')
df.head()

df.columns

 

df = df.drop(columns=['race/ethnicity', 'parental level of education', 'lunch', 'test preparation course'])
df.head()

pd.cut(df['math score'],bins=4)

 

pd.cut(df['math score'],bins=4).value_counts()

 

grades = ['C','B-', 'B', 'A-', 'A']
cut_bins = [0, 40, 55, 65, 85, 100]

df['grades'] = pd.cut(df['math score'], bins = cut_bins, labels = grades)
df.head()

qcut
pd.qcut(df['math score'],q=4)

 

pd.qcut(df['math score'], q=4).value_counts

df['math score'].describe()

 

[참조]

https://www.youtube.com/watch?v=cgpiFkpBLyY

728x90

+ Recent posts