플레이데이터 부트캠프 데이터 엔지니어링 트랙 4주차 (6.26~.30)

안인균·2023년 7월 1일
0
post-thumbnail

SQL과 파이썬 관련 수업을 들었고, 여러 SQL 쿼리문 실습 예제를 실행하면서 학습하였습니다. 이후 27-28일 이틀동안 여태 배운 내용들로 간단한 팀프로젝트를 실행했고 29일부터 머신러닝-딥러닝 관련 수업을 학습하였습니다.


Liked

  • 데이터베이스 기본을 파악할 수 있는 좋은 시간이었습니다.
    한 번 보면 좋은 영상

  • SQLD 자격증 시험을 준비하는 입장에서 유익한 수업이었습니다.

  • 처음으로 팀 프로젝트를 시작하게 되어 재밌어 보였습니다.

  • 이제까지 배운 내용의 복습을 할 수 있는 기회였기에 좋은 기회라고 생각되었습니다.

  • 데이터 시각화 수업을 들으면서 언급됐던 데이터 분석의 본격적인 학습을 할 수 있다는 점이 좋았습니다.

  • 다양한 데이터셋에 따른 서로 다른 데이터 분할 방법에 대해 알게 되어서 좋았습니다.

  • 예제 코드를 실행하면서 이전에 배운 파이썬 문법들을 다시 활용할 수 있어서 좋았습니다.


Lacked

  • 짧은 시간 안에 SQL 쿼리에 대해 배우느라 복잡한 쿼리문을 짜는데 시간이 부족하여 아쉬웠습니다.

  • 파이썬과 데이터베이스를 연동하여 다양한 실습 예제문을 못한 점이 아쉬웠습니다.

  • 다양한 데이터 셋들을 탐색하고 각자 원하는 데이터 셋을 고르는데 어려움이 있었습니다.

  • 초기 단계에서 정확히 어떻게 해야할 지에 대한 가이드라인이 없었기에 혼란이 있었습니다.

  • Streamlit에서 원하는 내용을 표현하는데 어려움이 있었습니다.

  • 처음에 웹 페이지에 대한 설계 단계를 거치지 않았기에, 서로 다른 양식으로 코드를 짜서 취합하는데 통일성을 맞추느라 힘들었습니다.

  • Streamlit에서 map을 구현할 때, colab에서 구현했을 때와 다르게 웹 페이지 화면에서 map 자꾸만 깜빡 거리는 이슈가 있었습니다. 이를 해결하기 위해 강사님의 도움을 받았고, @st.cache_data 라는 데코레이터를 map을 화면에 업로드하는 함수에 추가하여 해당 문제를 해결하였습니다.
    이 과정에 데이터 캐싱@데코레이터 라는 개념을 이해하기 위해 따로 검색하여 학습하였습니다.
    공부 내용 정리한 블로그 글

  • 각종 plot, 그래프, 차트를 Streamlit 에서 plotly 로 표현했을 때 한글 인코딩이 자동으로 되었으나 pyplot으로 구현했을 때, 한글 인코딩이 되지 않아 처음에 당황스러웠습니다. 이를 검색을 통해 matplotlib.font_manager 모듈을 import하고 원하는 폰트를 받아 이를 통해 pyplot에서의 한글 인코딩 이슈를 해결할 수 있었습니다.

  • 머신러닝과 딥러닝의 차이를 조금은 알 수 있었습니다.

  • 데이터 관련 용어를 배웠습니다.

### Feature (X)
- 추론하기 위한 근거가 되는 값들을 표현하는 용어.
- 예측 하거나 분류해야 하는 데이터의 특성, 속성 값을 말한다.
- 입력 변수(Input), 독립변수라고도 한다.
- 일반적으로 X로 표현한다.

### Label (y)
- 예측하거나 분류해야 하는 값들을 표현하는 용어
- 출력 변수(Output), 종속변수, Target 이라고도 한다.
- 일반적으로 y로 표현한다.

### Class
- Label이 범주형(Categorical) 일 경우 그 고유값을 Class라고 한다.
    - 개/고양이, 남성/여성, A형/AB형/B형/O형

### 데이터 포인트
- 개별 데이터를 표현하는 용어. 
  • 이전에 Numpy 모듈의 random.seed() 의 개념을 알 수 있었고, train_test_split() 메서드의 파라미터인 random_state가 존재하는 이유, 설정하는 의미가 무엇인지 학습할 수 있었습니다.

train_test_split에서 random_state(random seed) 설정의 의미 :

전체 데이터에서 traintest 데이터로 무작위로 나누고 여러 모델에 학습하여 테스트할 때,
무작위로 데이터를 뽑아서 각기 다른 데이터 셋으로 모델들을 테스트하는 것은 각각의 모델들의 신뢰성과 연관이 없어지기 때문에
무작위로 뽑는 데이터 셋들을 random_state를 통해 모두가 일정하게 무작위로 뽑힌 데이터 셋을 사용하게 함으로써 예측 모델들의 평가의 신뢰성을 주기 위함입니다.


Learned

  • SQL 기본 쿼리문들 학습

  • DB 실습, SQL 환경 사이트
    PlanetScale
    Supabase

  • 팀프로젝트는 '경기데이터드림' 사이트에서 '경기도 내 응급의료기관 및 응급의료지원센터 현황' 관련 데이터 셋으로 결정해서 각종 시각화를 진행하기 했습니다.

  • Streamlit 모듈을 이용해 데이터 시각화 자료를 웹 페이지에 구현하는 것을 목적으로 삼았습니다.

  • 서로 구현한 코드들을 취합하는 과정을 시작했습니다.

  • 코드를 취합하여 완성된 웹 페이지를 확인했고, 이를 발표할 간단한 발표 자료를 준비했습니다.

  • 부족한 코드 설명을 주석을 통해 기재하였습니다.

  • Streamlit에서 cache 데이터를 지우는 방법을 검색했으나 현재 버전에서 코드상 지울 수 있는 방법은 없었기에 프로젝트 결과물의 불안정성을 느껴 아쉬웠습니다.

  • 데이터셋을 분할하는 방법으로 두 가지를 학습할 수 있었습니다.

Hold out 방식
Cross Validation 방식
  • Cross Validation 방식에서 데이터셋의 타입에 따라 나뉘는 문제에 맞춰서 두 가지 방법의 모델 검증 방식을 배웠습니다.
KFold - 회귀 문제의 데이터셋을 분리할 때 사용
StratifiedKFold - 분류 문제의 데이셋을 분리할 때 사용.
  • KFold 방식을 학습할 때, Generator 관련 예시 코드와 함께 해당 객체에 대한 이해를 도울 수 있었습니다.

  • KFoldStratifiedKFold는 사용되는 메서드나 모델명이 다를 뿐 전체 코드 흐름이 똑같기 때문에 이를 함수화할 수 있었고, 이를 메서드로 만든 Cross Validation Utility 함수에 대한 내용을 배웠습니다.

cross_val_score() : 한 개의 평가지표만을 설정하여 사용 가능한 메서드.
cross_validate() : 여러 개의 평가지표를 설정하여 사용 가능한 메서드.
  • 데이터 전처리에 대한 학습을 시작했고, 결측치 관련 내용을 배웠습니다.
결측치 처리 방식 : 제거, 다른 값으로 대체

# 제거
dataframe.isnull(), dataframe.isna() # 원소별 결측치 인지 여부 확인
dataframe.dropna(axis=0, subset=None, inplace = False) # 해당 행 or 열 제거

#  다른 값 대체
dataframe.fillna(value)

sklearn.impute.SimpleImputer - transformer 클래스 사용

Longed for

  • PlanetScale을 이용해 실습한 SQL 쿼리문을 Supabase 를 이용해 복습하기

  • 이후 Streamlit을 통해 다른 기능들을 추가하여 구현할 예정입니다.

  • 코드 리뷰를 위해 풍족한 주석 설명문을 코드에 추가할 예정입니다.


팀프로젝트 결과물 Streamlit 사이트

0개의 댓글