Prologue
스파크 강의를 듣고, 부트캠프를 마무리 하기 위해 이것저것 고민한 과정을 기록한다.
Spark 강의 1주차
스파크는?
Apache 재단에서 제공중인 무료 대용량 처리 도구
100GB 이상의 데이터를 효과적으로 처리 가능
다만 몇 십GB의 데이터의 경우는 파이썬만으로 처리하는 것이 더 효과적
Out Of Memory 문제
파이썬으로 대용량 처리하다 만날 수 있는 문제. 메모리 용량 부족을 뜻함
스파크든 파이썬이든 메모리 관리가 중요
Memory
메모리 = 기억 장치
크게 Ram
과 Disk
로 나눔
Ram = 작업 공간 = 요리할 때 도마
작업할 때만 단기 기억되고 컴퓨터를 종료하면 삭제됨
예) read_csv, 크롬 실행
스파크를 통해 램 16GB의 컴퓨터를 여러 대 사용하여 작업을 처리할 수 있어서 사용함Disk(하드디스크 또는 SSD) = 보관 공간 = 요리할 때 냉동고
컴퓨터를 꺼도 삭제되지 않음
각 PC의 CPU(일꾼)를 모두 사용하여 작업을 처리(병렬 처리)하기 위해 스파크를 사용함
쓰레드, 프로세스, GIL
Data type에 따른 램 메모리 절약법
적절한 데이터 타입을 사용하면 보통 30% 이상의 메모리(이 절에서 적는 방법은 메모리는 Ram을 의미함)를 절약함
-> 스파크가 필요하지 않을 수도..
- 정수
16학년까지를 표현하기 위해 16까지 숫자만 필요
이런 작은 숫자를 표현할 땐 비트(메모리의 단위)를 낮추자
컴퓨터는 1 또는 0으로 숫자를 기억함.
2 이상의 숫자는? 2진법으로 숫자를 기억함
1비트 -> 0과 1(2의 0승)
2비트 -> 0 ~ 3(1+2) 표현
3비트 -> 0 ~ 7(1+2+4) 표현
4비트 -> 0 ~ 23(1+2+4+16) 표현
학년을 나타내려면 int 3으로 충분함. 종류가 int 8, 16, 32, 64 이렇게 나눠져 있어서 최소 단위인 int8을 사용하면 됨
int 8은 -120 ~ 120
int 16은 -3만 ~ 3만
int 32는 -20억 ~ 20억
int 64는 -9000경 ~ 9000경
을 표현함
만약 범위를 벗어나는 숫자를 표현한다? 다시 처음으로 돌아감 = Over Flow
예) int 8에서 120에 1을 더하면 -120이 됨
파이썬은 자동으로 데이터형이 바뀜(동적-Dynamic 데이터 타입)
- 소수점을 포함한 실수
정수가 아닌 소수점을 포함한 실수는 정확하게 표현할 수 없음
부동소수점을 활용 = 소수점을 표현할 때 표현식과 자리수로 나누어서 표현
예) $384.12 = 3.8412e^2$, $0.009 = 9e3
e는 0의 개수라고 생각하면 편하다. $e^2$는 100, $e^4$는 10,000
딥러닝의 경우에는 메모리 사용 감소를 위해 의도적으로 float 16을 사용하기도 함
- 문자열
유니코드를 통해 숫자를 문자로 바꿔서 표현함
곰 -> U+(유니코드라는 의미)ACF0 -> int16으로 표현
: 굉장히 많은 메모리를 차지
판다스에서 카테고리형 데이터로 지정해서 90% 메모리를 절약
How? 핸드크림 -> 0 , 폼클렌징 -> 1 , 썬크림 -> 2
과 같이 카테고리로 지정하면 판다스 내부적으로는 숫자로 범주화 하여 처리하고 문자열을 표현함
- Datetime(시간)
Unix Timestamp
를 사용하여 시간을 표시
- UTC(태평양) TimeZone이 기준(나라마다 시간이 다른데 한국과는 9시간 차이)
한국은 KST이지만 다른 나라에서의 시간도 함께 수집하는 데이터라면 UTC를 사용 - 1970년 1월 1일 0시를 기준으로 몇 초 경과했는지 표시
파일 유형
Disk에 데이터를 어떻게 저장하는지를 설명
파일 유형에 따라 읽고 쓰는데(파일 생성) 걸리는 시간(시간적 비용)이 다르고,
저장된 파일의 크기(공간적 비용)이 다름
- CSV, txt
개발 및 분석 직군이 아닌 사람도 많이 사용하는 데이터 유형
-> 어디서나 읽을 수 있기 때문에 범용성 좋음
- csv는 ,로 데이터가 구분된 파일: 데이터 안에 ,(숫자 3자리 마다 ,로 표시)가 있다면 Tab으로 구분된 파일인 tsv 파일을 사용
- 느리고 무거워서 소규모 데이터에만 사용
- encoding에 따라 다르게 저장, UTF-8 일반적
- Json
파이썬의 Dictionary 형태로 저장, 이를 Json Object라고 함
- 무거워서 소규모 데이터에만 사용
- encoding에 따라 다르게 저장, UTF-8 일반적
Pickle
혼자 사용할 때만 적절하여 사용하지 않음Parquet("파케이")
대용량 데이터에서 표준 형식
- Columnar 형태 파일 (컬럼을 단위로 저장)
- Row-Wise 형태 파일은 행을 단위로 저장하고 엑셀, RDBMS(SQL, Postgre)와 같은 곳에서 사용하는 형태
고객 1명 1명의 데이터도 확인해야 할 때(행 단위로 데이터 확인) 사용함
IO
Input, Output = 파일을 읽고 쓰기
Output, 전처리를 끝내고 파일을 저장할 때 메모리 용량을 초과할 수 있음(OOM)
-> 저장에 사용할 메모리를 확보한 후 저장
데이터를 가져올 때 Network < Disk < Memory(Ram) 순서로 빠름
스파크는 모든 데이터를 Memory로 처리
클라우드
클라우드: On premise(로컬 DB)와 다르게 가상 서버의 컴퓨터
AWS(아마존 웹 서비스), GCP(구글 클라우드 플랫폼), Azure(MS 클라우드)를 주로 사용
AWS에서는 S3(스토리지)에 데이터를 보관하고 EC2(엔진)을 통해 작업을 처리
- 데이터베이스 관리 시스템: 여러 사용자에게 동시 접근, 보안, 인덱싱, 백업 기능을 제공함
RDBMS: 관계형 데이터베이스 관리 시스템, My SQL
항상 서버가 존재해야 해서 그만큼 비용이 큼Athena: Amazon의 S3에 저장된 데이터 대상 쿼리 언어
쿼리를 돌릴 때만 비용을 지불하면 돼서 비용이 저렴(S3에서 스캔하는 데이터 1TB당 5 달러)
Spark와 연동 가능Redshift: Amazon의 데이터 웨어하우스(대용량 데이터 저장 기능)
구동을 위해 여러 대의 컴퓨터를 클러스터로 만들어서 사용해야 하기 때문에 비용이 비쌈
Spark와 연동 가능
- Amazon EMR
: 테라바이트 이상 빅 데이터를 처리하고 분석 및 학습하게 해주는 플랫폼
데이터 분석가로 취업할 때 고려할 것(데이터리안 세미나 유튜브 참고)
데이터 분석가 서칭 결과 정리..
왜?가 더 중요
왜 왜 왜??..
기술적인 스킬셋보다는 왜 이런 분석을 진행했고, 왜 기준을 이렇게 정의했는지가 중요
따라서 데이터 애널리스트
에게 중요한 것은
SQL 쿼리 실력과 독창적인 분석 주제
면접 채용 시 보는 부분
회사 상황에 따라 중요하게 보는 점이 달라지지만..
- 그 사람이 커리어를 쌓아가는 키워드, 그 사람의 가치
- 내가 원하는 것과 회사가 원하는 것에 모두 답할 수 있는가?
데이터 분석가 자질
스킬셋보다는 협업
같이 일하고 싶은 사람이라는 생각이 드는 사람(Basic to Basics)
- 과제를 명확히 해결하고 이유를 설명하여 협업할 때 어떻게 일을 하겠다는 상상이 되는 사람
읽어볼 책 추천
- '그로스 해킹'
- '린 분석'
- '진화된 마케팅 그로스 해킹'
- '디맨드'
- '틀리지 않는 법'
- '빅 데이터를 활용한 예측 마케팅 전략'
석사 취득 등 대학원이 중요?
대학원은 경험 그 이상 그 이하도 아님
정말 깊게 연구하고 싶은 분야가 있을 때 가면됨
SQL 코딩테스트
설사 풀지 못해도 문제 해결의 적극성을 주석, 파이썬 코드로 해결 등으로 보여주기
코딩테스트 끝나면 복기하기. 어떤 문제였고 나는 어떤 어려움이 있었는지, 어떤 과정으로 해결했는지
이력서
리스트 형식으로 내가 한 일을 보여주는 것
- 과거에 어떤 성과를 만들었는지 보여주고 읽는 사람이 질문을 만들 수 있어야 함
- 조직에서 어떤 기여를 할 수 있는지 보여주고 읽는 사람이 질문을 만들 수 있어야 함
채용하는 입장에서 이력서를 보고 드는 생각
궁금하다 vs 궁금하지 않다(만나보고 싶지 않다)
면접 시 보는 것
컬처핏
지원자의 가치관, 커리어 키워드 등을 확인해서 회사와 맞고 얼마나 오래 다닐지 확인함회사에서 원하는 경험을 하기에 충분한 역량이 있는지
데이터 분석가란?
문제를 해결하는 사람. 데이터로 포인트를 잡으면서..
따라서 주어진 조건에서 어떤 시도를 했고, 어떤 것을 이뤘다.
그런 환경에서 최소한 이건 해봤어라는 내용을 전달해야 함
다른 사람의 프로젝트 참고
프로젝트 개요
도메인 조사와 문제 정의 가설 설정이 매우 중요한 과정!
그 후 EDA, 전처리, 파생변수 생성 등의 과정도 앞의 가설 설정 논리에 따라 이뤄져야 함
PPT 제작
발표 PPT와 보고서용 PPT를 따로 만들기
발표 PPT에는 결론을 전하기 위해 중요한 이미지와 글(1장 당 2-3줄)을 담기
보고서용 PPT에는 연구한 과정을 상세하게 담기
지원 시 공고에 맞춰서 포트폴리오를 구성하거나 면접을 대비할 때 참고할 수 있게 하기
비젼, 해결책을 제시하려면?
관심 있는 주제를 찾고, 거기서 문제를 찾아야 함
그 후에 비젼을 제시할 수 있음
파생변수
추가로 변수를 만들 때는 그 변수가 왜 중요해서 만들게 되었는지 설명해야 함
연구 그 이후..?
문제를 해결하기 위해 연구했다면
그 이후에 연구를 통해 어떻게 문제를 해결하는지 실제 사용한 예시나 액션 플랜을 제시해야 함
그 후 한계점을 언급해도 좋음
라떼톡
튜터님들, 매니저님들의 라떼는~ 경험 이야기 및 조언
데이터 분석가란?
앞선 정의와 같음
따라서 커뮤니케이션과 끈질기게 문제를 찾는 능력이 중요함
채용 지원 시 내가 최소한 해야 할 것
Cover Letter(반 페이지 분량으로 지원동기 및 후킹 문구)를 이력서 및 포폴 앞에 붙여서
채용 고려 요청드리기
회사 입장에서 신입 채용은 Risk를 감수하는 것임. 채용되면 기대 역량의 200% 퍼포먼스를 보여야 함.
내가 원하는 일을 충분히 자신있게 할 수 있을만큼 미리 공부하고 정리하고 어필하기
이력서와 인터뷰를 도메인 가리지 말고 닥치는 대로 쓰고 지원해서 업그레이드하기
도메인과 커리어.. 방향을 잡는 방법
내가 해결하고자 하는 문제를 찾기
문제가 명확할수록 더 집중해서 공부하고, 공부한 것을 사용하면서 익힐 수 있음
튜터님들의 질문과 응답 시간!
최종 프로젝트 도메인 선택 어떻게..ㅠ
해결하고 싶은 문제를 상상해서, 이런 문제를 해결하려면 이런 데이터가 필요할 것 같은데? 상상해서 선택하기
사회문제, 범용적으로 도움이 되는 문제를 해결하는 주제를 선택하기
E-commerce 도메인에 어떤 프로젝트가 도움이..
수익을 높일 수 있는
'Today I Learned' 카테고리의 다른 글
[TIL] 25.03.05 SQLD와 SQL 그리고 구미시 버스 프로젝트 시작 (0) | 2025.03.05 |
---|---|
[TIL] 25.02.27 API 및 웹 크롤링 (0) | 2025.02.27 |
[TIL] 25.02.25 프로젝트 발표 및 회고 (0) | 2025.02.25 |
[TIL] 25.02.24 실전 프로젝트 종료 (0) | 2025.02.25 |
[TIL] 25.02.21 피그마를 활용해서 태블로 보기 좋게 수정하기 (0) | 2025.02.21 |