1일차

Suhyeon Lee·2024년 9월 30일
0

개강 OT

캠프 커리큘럼

  • 발제, 강의, 프로젝트, 면담, 취업준비로 구성되어 있음
    • 발제: 집중해야 하는 내용 상세 안내 및 수행해야 하는 일 공유

강의

  • 온라인 강의: 시간표와 진도에 따라 학습
  • 실시간 강의: 시간표 일정에 맞춰 링크 접속 후 수강

학습방법과 질의응답

  • 자기주도적 학습 지향
    • 스택 오버플로우 등을 이용해 스스로 해결하려는 자세 가지기
    • 개념 이해, 툴을 다루는 과정에서의 에러 등은 먼저 스스로 해결하려고 노력하기
  • 적어도 주 80시간 이상 학습
    • 매일 14시간(e.g. 09-23시) * 6일 = 84시간
  • 아무리 해도 해결이 안 될 때에는 튜터님께 질문

출석 주의사항

  • 12시간 이상 공부 필수
  • 12시간 지난 뒤 퇴실을 누르지 않으면 입실을 제 시간에 했어도 결석처리되니 주의

기록과 회고

  • 학습일지 블로그 생성 후 매일/매주 기록 남기기
    • TIL(Today I Learned)
      • 매일 저녁 작성
      • 저녁 9시까지 구글폼으로 블로그 링크 제출
      • 자신의 말로 학습한 내용을 정리하면 됨
    • WIL(Week I Learned)
      • 매주 일요일 작성
      • 한 주를 마무리하며 매주 일요일 9시까지 구글폼으로 블로그 링크 제출
      • 지난 일주일을 되돌아보고, 다음 일주일 동안 성장하기 위한 발판으로 삼기 위한 것
      • 회고가 포함되어야 함
      • 이번 한 주 동안 배운 것, 느낀 것, 잘한 것, 아쉬웠던 것 정리
  • 데일리 스크럼
    • 오늘 계획 팀원과 공유
    • 진행 상황 공유하고 피드백 받기
  • 일/주간 회고
    • 팀원과 일간 또는 주간으로 진행한 활동에 대한 회고 진행

좋은 분석가란

  1. 호기심이 많은 사람
  2. 스스로 문제를 파고들 줄 아는 사람 → 자기주도학습
  3. 함께 밥 먹고 싶고, 일 하고 싶은 사람 → 커뮤니케이션 역량, 협업 능력

발제 자료 확인

커리큘럼 구성

CH 1 온보딩

sql 위주 기초 학습

  • 전반적인 데이터 직무 이해
  • Data, DB, Query, SQL 기본 개념

CH 2 프로그래밍 기초

Python 기초 문법을 활용한 프로그래밍 학습

  • 조건문, 반복문과 같은 기본 개념
  • Python의 Library의 개념 이해 및 실습

SQL+Python을 활용한 기초 프로젝트

  • ON AIR 분석 절차를 기반으로 한 프로젝트
    • ON AIR 분석 절차
      • Objective: 목표(가설) 설정
      • Necessary Data: 데이터 선정 → 데티터 수집, 정제
      • Analytics: 분석 방법 결정 → EDA, 분석 틀
      • Interpretation: 해석 및 검증
      • Report: 보고
      • 모든 과정에서 보고 대상자와 지속적인 커뮤니케이션 필요
  • 제공되는 주제 및 데이터로 프로젝트 진행

CH 3 데이터 분석 입문

통계와 머신러닝을 활용한 데이터 분석

  • 데이터 분석 및 과학을 위한 핵심 통계 지식 개념 학습
  • ML을 활용한 지도 학습, 비지도 학습 이해
  • 실습

머신러닝 기법을 활용한 데이터 분석 프로젝트

  • 군집, 회귀, 분류 기법 활용한 주제 제공 및 특강 진행

CH 4 데이터 분석 숙련

BI(Business Intelligence)툴 활용한 대시보드 구축

  • 태블로 활용 데이터 시각화와 탐색적 데이터분석
    • 태블로(Tableau)
      • 데이터 시각화와 비즈니스 인텔리전스(BI)를 위한 도구
      • 다양한 데이터를 시각화 및 분석하고 이를 통해 인사이트를 도출
  • 태블로 클라우드 환경에서 대시보드 구축

태블로 활용 대시보드 구축 프로젝트

  • 기본 태블로 기능 활용한 대시보드 제작
  • 비즈니스 지표에 맞는 대시보드 구축

CH 5 데이터 분석 심화

최종 프로젝트 관력 특강

  • 데이터 수집 방법 등 강의 예정
  • 최종 프로젝트 준비 과정 수행

CH 6 최종 프로젝트

최종 데이터 분석 프로젝트

  • SQL, Python, My, Tableau 활용한 실제 분석

데일리 루틴

스크럼(Scrum)

  • 팀 활동을 위해 팀이 자체적으로 조직하는 미팅
  • 팀의 방향성과 진행 정도를 논의하고 인지해 보다 효율적인 목표 달성을 도움

오전 스크럼

  • 오늘 하루의 일간 목표 설정
  • 지켜야 할 작은 목표 설정
  • 이번 주 초에 설정된 주간 목표를 달성한 과정을 회고
    • 달성하지 못했다면 그 이유를 분석하고 논의

오후 스크럼

  • 오전에 설정한 목표를 달성한 과정을 회고하며, 달성하지 못했다면 그 이유를 분석하고 논의

CodeKata

  • Kata?
    • '반복되는 연습'이라는 뜻

SQL 코드가타

36. 보호소에서 중성화한 동물

프로그래머스 코딩테스트 연습

  • 나의 풀이
SELECT
  ai.animal_id
  , ai.animal_type
  , ai.name
FROM 
  animal_ins ai 
  LEFT JOIN animal_outs ao 
  ON ai.animal_id = ao.animal_id
WHERE 
  (ai.sex_upon_intake LIKE 'Intact%') 
  AND (ao.sex_upon_outcome NOT LIKE 'Intact%')
ORDER BY 
  1
;
  • WHERE절에 LIKE 대신 정규 표현식(Regular Expression)을 이용해 검색하는 REGEXP를 사용해도 좋다고 함
    • 정규표현식을 활용하여 기본 연산자보다 복잡한 문자열 조건을 걸어 데이터 검색 가능
    • 하지만 정규표현식 검색을 이용할 때 절대 사용자에게 정규식 기능을 제공해서는 안 된다고 함
      • 각종 오류를 포함할 수 있고 SQL Injection에 취약해질 수 있기 때문
      • 정규표현식의 검색은 개발자가 미리 정한 테두리 안에서 행해져야 함
SELECT
  ai.animal_id
  , ai.animal_type
  , ai.name
FROM
  animal_ins ai 
  LEFT JOIN animal_outs ao 
  ON ai.animal_id = ao.animal_id
WHERE 
  ai.sex_upon_intake REGEXP 'Intact' 
  AND ao.sex_upon_outcome REGEXP 'Spayed|Neutered'
ORDER BY
  1
;

35. 오랜 기간 보호한 동물(2)

프로그래머스 코딩테스트 연습

  • 나의 풀이
SELECT
  ai.animal_id
  , ai.name
FROM
  animal_ins ai 
  LEFT JOIN animal_outs ao 
  ON ai.animal_id = ao.animal_id
WHERE
  ao.datetime IS NOT NULL
ORDER BY
  DATEDIFF(ao.datetime, ai.datetime) DESC
LIMIT
  2
;
  • WHERE절은 없어도 되는 듯 하다.

    • 다른 분 MySQL 풀이 보니 #WHERE o.datetime IS NOT NULL - NOT NEEDED - BOTH DATETIMES IS NOT NULLABLE라고 주석처리 하셨음
  • 날짜형 데이터를 직접 빼기 연산으로 구하면 안 될까?

    • oracle에서는 가능하지만, mysql에서는 직접 연산을 하게되면 DATETIME 타입 데이터를 숫자형으로 변환하여 연산하기 때문에 정확한 시간 차이를 구할수 없다고 함
    • TIMESTAMPDIFF나 DATEDIFF 이용하여 날짜 차이를 구하는 것을 추천
      • 예를 들어 DATETIME타입 데이터 '2003-12-26', '2003-10-22' 라는 두 날짜형 데이터를 그냥 빼기(-) 연산하면 컨텍스트에 의해 정수형으로 변환하여 계산해버리기 때문에 204라는 결과가 출력됨
      • 직접 연산 시 계산 오류가 나오는 것을 확인해보려면 아래 코드 실행해보기
      SELECT O.DATETIME, I.DATETIME, O.DATETIME - I.DATETIME
      FROM ANIMAL_INS I JOIN ANIMAL_OUTS O USING (ANIMAL_ID);
      • '2018-02-02 14:17:00' 값이 '20180202141700' 이라는 정수값으로 변환되어 빼기 연산을 한 결과가 O.DATETIME - I.DATETIME 컬럼값으로 나오게 됨
  • RANK를 써서 풀어보고 싶어서 추가로 작성함

SELECT
  ar.animal_id
  , ar.name
FROM (
  SELECT
    ai.animal_id
    , ai.name
    , RANK() OVER (
      ORDER BY DATEDIFF(ao.datetime, ai.datetime) DESC
    )AS rnk
  FROM
    animal_ins ai 
    LEFT JOIN animal_outs ao 
    ON ai.animal_id = ao.animal_id
  WHERE
    DATEDIFF(ao.datetime, ai.datetime) IS NOT NULL
  ORDER BY
    rnk
  ) AS ar
WHERE
  ar.rnk < 3
;

Python 알고리즘 코드가타

1. 두 수의 차

프로그래머스 코딩테스트 연습

  • 나의 풀이
def solution(num1, num2):
    if (-50000 <= num1) & (num1 <= 50000) & (-50000 <= num2) & (num2 <= 50000):
        answer = num1 - num2
    else:
        answer = "num1, num2 제한사항을 확인해주세요."
    return answer
  • 문제에 써져 있는 제한 사항은 뭘까?
    • 제한 사항은 테스트에서 정해준 것으로 그 범위 안에서 TestCase가 주어지는 거라고 함
    • 예를 들어 이번 문제의 제한 사항이 의미하는 건 num1과 num2가 -50000보다 크거나 같으며 50000보다 작거나 같은 값 안에서 무작위로 주어진다는 것
    • 제한 사항이 지켜지지 않는 문제들이 간혹 있으므로 구현하지 않는 편이 좋다고 함
  • Lambda를 이용해 한 줄로 간단하게 풀 수 있음
    • 람다식(lambda expression), 람다함수(lambda function)는 익명 함수(anonymous function)를 표현하는 방법임
      • 익명 함수는 이름이 없는 함수를 뜻함
      • 람다식 == 이름이 없는 익명 함수
      • 변수에 할당하거나 다른 함수(map, filter, sorted 등)의 인자로 전달 가능
    • 함수를 정의할 때 함수의 이름을 명시적으로 지정하지 않고 필요한 매개변수와 함수 본문만을 사용하여 함수를 생성하는 것을 의미
    • 특정 기능을 수행하는 함수들을 한 줄로 작성할 수 있어 주로 간단한 작업을 수행하는 함수나 일회성으로 사용되는 함수를 정의할 때 사용
      • 함수를 간단하게 표현할 수 있어 코드를 더 간결하게 만들 수 있음
      • 주로 한 줄로 간단한 연산을 수행하는 함수를 정의할 때 사용
solution = lambda num1, num2 : num1 - num2

직무 스터디

데이터 사이언티스트 조사

온라인 강의 학습

SQLD 자격증 챌린지

1주차 학습
2주차 학습

엑셀보다 쉽고 빠른 SQL

1주차 복습

회고

  1. 첫 날이라 아직 뭐가 뭔지 잘 모르겠음
  2. 카메라, 마이크 설정 다시 해야 함 → 팀원분들이 잘 안들리신다고 함
  3. 주말에 python 코드가타 좀 따라잡아야겠음
profile
2 B R 0 2 B

0개의 댓글