안녕하세요 늑대양입니다 :)
오늘은 [AI 데이터 사이언티스트 취업 완성 과정]의 6일차 일과를 정리하여 안내해드리도록 하겠습니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif)
Day 6. 시간표:
- 온라인 학습: [한 번에 끝내는 데이터 사이언스]
- 오프라인 강의: [프로그래밍 기초 : Python]
Day 6. 온라인 학습 범위:
- 13강
- 예상 학습 시간: 4:27:09
대주제(Part) | 중주제(Chapter) | 소주제(Clip) |
Part.1 데이터사이언스 기초 | Pre-Chapter. 강의를 보기 전에 알아야할 것 | CH00_01 강의 진행 방식 소개 |
Part.1 데이터사이언스 기초 | Pre-Chapter. 강의를 보기 전에 알아야할 것 | CH00_02 Notion 소개 |
Part.1 데이터사이언스 기초 | Pre-Chapter. 강의를 보기 전에 알아야할 것 | CH00_03 Colab 소개 |
Part.1 데이터사이언스 기초 | Chapter.01 데이터 사이언스란? | CH01_01 Job Description으로 살펴보는 Data Science |
Part.1 데이터사이언스 기초 | Chapter.01 데이터 사이언스란? | CH01_02 데이터 사이언스 기초 용어 |
Part.1 데이터사이언스 기초 | Chapter.01 데이터 사이언스란? | CH01_03 데이터 분석 레포트 |
Part.1 데이터사이언스 기초 | Chapter.01 데이터 사이언스란? | CH01_04 모델링 |
Part.1 데이터사이언스 기초 | Chapter.02 데이터 엔지니어링이란? | CH02_01. Job Description으로 살펴보는 Data Engineering |
Part.1 데이터사이언스 기초 | Chapter.02 데이터 엔지니어링이란? | CH02_02. 데이터 엔지니어링 필수 용어 |
Part.1 데이터사이언스 기초 | Chapter.02 데이터 엔지니어링이란? | CH02_03. Data Pipeline |
Part.1 데이터사이언스 기초 | Chapter.02 데이터 엔지니어링이란? | CH02_04. Hadoop Ecosystem |
Part.1 데이터사이언스 기초 | Chapter.02 데이터 엔지니어링이란? | CH02_05. Cloud Computing |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_03. Data Type (이론) |
한 번에 끝내는 데이터 사이언스:
Part.1 데이터 사이언스 기초:
Pre-Chapter. 강의를 보기전에 알아야할 것:
01. 강의 진행 방식 소개:
- 김용* 강사님 진행
- 이경* 강사님 진행 (데이터 엔지니어링 파트)
- 21년 12월 촬영
네 가지 파트를 다룸:
- 데이터 사이언스란?
- 데이터 엔지니어링 with SQL
- 데이터 분석 with Python
- 머신러닝 with Python
SQL과 파이썬에 익숙해진 다음 빅 쿼리(BigQuery)를 간단하게 다룸
구글 코랩 기반의 강의 진행
준비물:
- 구글 계정
- 구글 크롬
노션 기반 교안을 통해 학습 진행
02. Notion 소개:
- 문서협업 도구
- 모바일(안드로이드, iOS), PC 환경(Windows, macOS) 모두 지원
- 일반적인 마크다운 지원
- 노션 다운로드
- 아래 링크 접속 후, 복제 진행
- https://fastcampus-datascience.notion.site/fastcampus-datascience/0d38aaa667614a04894aabba4234304c
[공유용] 한 번에 끝내는 데이터사이언스
Part1. 데이터사이언스 기초
fastcampus-datascience.notion.site
03. Colab 소개:
- Colab을 통해, 코드 실행 가능
- 구글 클라우드의 자원 활용
- 셀로 구성, ipynb 파일
- 기본적인 마크다운 지원
- 구글 드라이브에 노트북 파일 저장
Google Colaboratory
colab.research.google.com
- 하드웨어 가속기: 데이터 분석을 할 때, 하드웨어 성능이 실제 머신러닝 학습 성능에 굉장히 큰 영향을 줌!!
- CPU, RAM, GPU, TPU: 프로그램에 직접적인 영향을 주는 하드웨어 요소
- GPU(Graphic Processing Unit): 그래픽 처리를 위한 하드웨어, 머신러닝, 딥러닝에서 많이 쓰임
- TPU(Tensor Processing Unit): 딥러닝 전용으로 나온 하드웨어, 구글 소유, 구매 불가능, 구글 코랩, 캐글 노트북, GCP에서 사용 가능
- CPU와 GPU의 속도 차이는 10배 ~ 100배 정도
- GPU와 TPU의 속도 차이는 4배 ~ 7배 정도
- CPU와 TPU의 학습 속도 차이는 거의 1000배..ㅇㅅㅇ..
- 코랩에서 GPU, TPU 무료로 사용 가능!!
코랩에서 GPU 할당해보기!:
Chapter.01 데이터 사이언스란?
01. Job Description으로 살펴보는 Data Science:
Data Science:
- 데이터를 통해 실제 현상을 이해하고 분석하는데, 통계학, 데이터 분석, 기계학습과 연관된 방법론을 통합하는 개념이다.
- Data를 이용하는 과학의 분야 중에 하나
- Data 어쩌구 하는 용어들과 밀접한 관련이 있다
e.g. Database, Data Engineering, Data Analysis, Data Literacy, … - 하나의 확정된 개념은 아니다. 아직 지속적으로 발전 중
→ 그래서 단체/기관마다 정의하는 Data Science의 개념이 약간씩 다르다 - Data Science를 업으로 삼는 사람들을 Data Scientist라고 한다. 그들이 하는 일을 살펴보면 Data Science가 어떤 일인지 조금은알 수 있다.
- 각 회사들이 정의하고 있는 Data Scientist의 역할들을 살펴보면서 Data Science의 구성요소들에 대해서 알아가 봅시다
JD 요약:
- 데이터 사이언티스트에게 요구하는 역량들이 비슷비슷했다
(하지만, 많았다) - 데이터에 대한 이해도와 분석 역량을 주로 요구한다
- 데이터 분석 경험을 우대사항으로 많이 적었다
- 회사마다 조금씩은 정의가 다르다
- 통계분석, Python, SQL, 머신러닝/딥러닝 역량은 빠지지 않고 거의 다 있었다
JD 공통 역량:
- Python (or R)
- SQL
- 통계, 산업공학, 컴퓨터 공학 등 관련 전공
- 2년 정도(또는 그 이상)의 현업 경험
- 머신러닝/딥러닝 프레임워크 기반 모델링 경험
- 대용량 데이터 프레임워크(Hadoop Ecosystem, Spark) 사용 경험
- 예측 모델링 기반 프로젝트 경험
- 클라우드 서비스(AWS, GCP) 같은 리눅스 기반 환경 사용 경험
02. 데이터 사이언스 기초 용어:
선형대수학(linear algebra):
벡터: 숫자의 나열, 숫자들의 묶음. (수치값과 방향을 갖고 있는 정보) (벡터 스페이스의 원소)
ex) x = (1, 2, 3), y = (4, 3, 1)
- 벡터의 연산: x + y = (5, 5, 5) // 3 * x = (3, 6, 9)
- 벡터의 특징: 원소값, 방향(상대적인 위치)
- 벡터의 차원: 원소의 개수
- 벡터의 크기(norm): 벡터의 모든 원소를 제곱하고 다 더한 뒤, 루트를 씌워준 값 → 원점과의 거리 (L2 norm)
- 벡터 공간(Vector Space): 벡터가 정의되는 집합, 연산, 차원, 기저(basis)(=축), …
통계:
기술통계량(descriptive statistics): 데이터에서 측정할 수 있는 요약된 수치값들
- 평균: 모든 데이터의 값을 더한 다음, 개수로 나눈 값
- 분산: 데이터의 퍼진 정도, 각 데이터에서 평균을 뺀 값을 제곱해서 다 더한 뒤, 데이터 개수로 나눈 값
- 표준편차: 분산의 양의 제곱근
- 중앙값: 오름차순으로 정렬했을 때, 한가운데 있는 값
- 최빈값: 데이터 중에서 가장 많이 등장한 횟수
- 사분위수: 오름차순으로 정렬해서 4등분한 지점, 25% / 50% / 75%
추론통계량(inferential statistics): 모집단에 대해서 예측한 수치값들
- 모집단: 우리가 알고 싶은 대상
- 표본집단: 모집단에 대상이 될 것 같은 데이터의 일부 (sample)
- 표본평균: 표본집단의 평균
- 표본분산: 표본집단의 분산
- 추정(estimation): 표본집단을 통해서 모집단의 정보들을 예측하는 행위
- 가설 검정(testing hypothesis): 추정할 때, 가정하는 명제가 맞는지 틀리는지를 확인하는 작업
정보 이론:
정보 이론(information theory): 정보라는 대상에 대해서 다루는 학문
- Bit: 0 또는 1
- Byte: 8bits = 1B
- KB, MB, GB, TB, PB: 1024B = 1024B = 1KB, 1024KB = 1MB, 1024MB = 1GB, 1024GB = 1TB, 1024TB = 1PB
- 데이터(data): 관측된 사실
- Entropy(엔트로피): 정보의 차이를 나타낸 값
- 데이터(data): 관측된 사실
- 정보(information): 데이터를 가공해서 정형화한 수치값, 양, 사실
03. 데이터 분석 레포트:
- 데이터 분석 내용을 정리해서 공유하는 것도 중요한 능력이다!
- 데이터 분석은 “설득의 도구"로써 사용되기 때문에 분석한 내용을 전달하는 것도 중요하다
- 데이터 분석 레포트는 주로 다음과 같은 3가지로 공유된다
- 대시보드 (주로 웹)
- 논문
- 블로그
Dashboard:
- 주로 웹으로 제작되며, interactive하게 분석 결과를 확인할 수 있는 환경을 말한다
- Tableau가 대표적인 웹 대시보드, BI(Business Intelligence) 툴이다.
- Tableau
- Wandb(Weights and Biases): 요즘 핫하게 떠오르고 있는 AI 학습결과를 관리하는 대시보드
Paper:
- 분석 결과를 연구로써 출판
- 보통 Journal(학술지)이나 Conference(학회)에 pdf 형식으로 공유
- 해당 분야에서 새로운 아이디어를 제시할 때, 데이터 분석을 활용했다면 그 내용을 양식에 맞게 작성하여 투고한 결과
- Data Science Journal: https://datascience.codata.org/
- AAAI: https://aaai.org/Conferences/AAAI-22/
Data Science Journal
The CODATA Data Science Journal is a peer-reviewed, open access, electronic journal, publishing papers on the management, dissemination, use and reuse of research data and databases across all research domains, including science, technology, the humaniti
datascience.codata.org
AAAI 2022 Conference | Thirty-Sixth AAAI Conference on Artificial Intelligence
3) My third paper, published in #AAAI2022 Learning Bayesian Networks in the Presence of Structural Side Information https://ojs.aaai.org/index.php/AAAI/article/view/20750 We show that Bayesian network discovery can be solved in polynomial time when the cli
aaai.org
Blog:
- 데이터 분석을 수행한 분석가들이 개인적인 내용들을 올림
- Medium의 Towards Data Science처럼 전문적으로 article을 배포하는 블로그도 있음
- tistory나 velog처럼 분석 결과를 편하게 공유하는 블로그도 있음
- 개발자(또는 데이터 분석가) 직군들이 선호하는 github.io도 있음
Towards Data Science
Your home for data science. A Medium publication sharing concepts, ideas and codes.
towardsdatascience.com
서포트 벡터 머신 (Support Vector Machine) · ratsgo's blog
이번 글에서는 딥러닝 이전 뛰어난 성능으로 많은 주목을 받았던 서포트 벡터 머신(Support Vector Machine)에 대해 살펴보도록 하겠습니다. 이번 글 역시 고려대 강필성 교수님과 같은 대학의 김성범
ratsgo.github.io
요약:
- 데이터 분석은 글쓰기도 중요!!
- 데이터 분석 레포트를 잘 쓰는 것은 논래전개를 잘한다는 의미이며, 최고의 포트폴리오가 된다!!
04. 모델링:
모델링(Modeling) : 수학/통계적인 방법을 이용하여 데이터를 해석하는 과정
- 근본적인 개념은 수학적인 모델과 통계적인 모델의 개념에서 나온다.
- 데이터 사이언스에 사용하는 모델은 통계 모델 그 자체일 수도 있고, 데이터를 분석하는 어떤 시스템 그 자체일 수도 있다.
- 모델은 하려고하는 task에 따라 여러가지 이름으로 불린다. e.g. 예측 모델, 생성 모델, 요약 모델, …
- 데이터 사이언스는 주로 예측 모델이 사용된다.
- 예측 모델이란, 주어진 데이터의 패턴을 파악해서 미래의 데이터의 패턴을 예측할 수 있는 시스템을 말한다.
- 모델링에는 통계적인 모델링과 머신러닝(Machine Learning) 방법이 주로 사용된다.
통계적 모델링(Statistical Modelling):
데이터가 정의되는 공간(S, sample space)와 그 공간에서의 확률 분포(P, probability distribution on S)가 있다고 할 때, 어떤 데이터는 S에서의 P를 통해서 만들어졌다고 가정하고 데이터를 잘 기술하는 P를 찾는 과정
- 보통 P는 parameter들에 대해서 정의된다.
- Parameter란 어떤 통계 집단을 기술하는 측정된 값이다. e.g. 평균(mean), 표준편차(standard deviation) ...
- 적절한 parameter를 찾게 되면 잘 기술하는 P를 찾을 수 있다
- 이러한 parameter를 찾아가는 과정이라고 볼 수 있다
머신러닝 모델링(Machine Learning Modeling_:
주어진 학습 데이터로 얻은 정보로 학습하지 않은 데이터에 대해서 예측(또는 추론)을 하는 과정
- 머신러닝 모델은 여러가지 종류가 있다
- 어떤 task를 수행하느냐에 따라서 적합한 모델들이 있다. e.g. 분류 - Logistic Regression, Naive Bayes, ... 회귀 - Linear Regression, Random Forest, ...
- 통계적인 모델링처럼 적절한 parameter(또는 weight)를 찾는 과정이라고 볼 수 있다
- 학습 방법을 결정하는 parameter인 hyper-parameter의 영향을 받는다
요약:
- 통계적 모델링은 데이터를 해석할 수있는 확률 분포를 찾아가는 과정이다. 그 확률분포는 parameter를 통해 결정된다.
- 머신러닝 모델링은 주어진 학습 데이터로 정보를 학습해서 학습하지 않은 데이터를 판단하는 기준을 설정하는 과정이다.
그 판단하는 기준은 parameter를 통해 결정된다. - 모델링이라는 것은 어떠한 parameter를 찾아가는 과정이다.
Chapter.02 데이터 엔지니어링이란?:
01. Job Description으로 살펴보는 Data Engineering:
Data Engineering: 빅데이터를 수집, 가공, 저장하는 모든 시스템을 구축/관리하는 과정
- 대용량 데이터 처리를 위한 Database(DB)를 관리하는 작업
- Database란, 데이터를 효율적으로 저장/관리하기 위한 시스템을 말한다
- 회사/기관이 운영하는 서비스에서 발생하는 모든 데이터를 데이터베이스로 효과적으로 관리하기 위한 모든 시스템을 운영한다
- 주로, Hadoop Ecosystem과 관련이 깊다.
- 하나의 확장된 개념은 아니다.
→ 그래서 단체/기관마다 정의하는 Data Engineering의 개념이 약간씩 다르다. - Data Engineering을 업으로 삼는 사람들이 Data Engineer 이다. 그들이 하는 일들을 살펴보면 Data Engineering이 어떤 일인지 조금 더 알 수 있다.
- 각 회사들이 정의하는 Data Engineer들의 역할을 살펴보면서 Data Engineering은 어떤 것들로 구성되어 있는지 확인해보자!
- AWS: https://www.amazon.jobs/en/jobs/1446001/data-engineer-aws-data-platform
- Kakao: https://careers.kakao.com/jobs/P-11888?page=6
- 두나무: https://www.wanted.co.kr/wd/92730
Data Engineer, AWS Data Platform
Each day, thousands of developers make trillions of transactions worldwide on our cloud. Almost all of them are harnessing the power of Amazon Web Services (AWS) to enable innovative applications, websites, and businesses. We store all these transactions f
www.amazon.jobs
카카오 영입
데이터 엔지니어 및 사이언티스트 (경력) / 테크 / 정규직
careers.kakao.com
[두나무(업비트/증권플러스)] 데이터 (Data) 엔지니어 채용 | 원티드
두나무(업비트/증권플러스)에 지원하고 합격하면 보상금 50만원
www.wanted.co.kr
컴퓨터 공학의 7가지 기본 과목:
- 데이터구조(자료구조)
- 알고리즘
- OS(운영체제)
- 데이터베이스
- 네트워크
- 컴퓨터구조
- 오토마타 / 프로그래밍언어
데이터 엔지니어 공통 역량:
- Hadoop Ecosystem
- Spark / Hive
- 대용량 데이터 처리 경험
- 데이터 파이프라인 설계
- Python / C++ / Java / Scala
- 대용량 데이터 전처리
- CS 지식 (자료구조, 알고리즘, 운영체제, 데이터베이스, 네트워크, 컴퓨터구조, 오토마타/프로그래밍언어론/컴파일러)
요약:
- 데이터 엔지니어 포지션 역시 비슷한 역량들을 요구했다. (역시, 많았다..)
- 대용량 데이터를 처리하는 시스템을 만드는 역할 = Data Engineer
- 대용량 데이터를 효과적으로 처리하는 것이 중요하다.
02. 데이터 엔지니어링 기초 용어:
Computing Resource: 데이터를 처리하기 위해서 필요한 리소스 (=능력)
- CPU(Central Processing Unit): 연산 능력(=계산량) e.g. # of cores
- 메인 메모리(main memory): 데이터를 임시 저장할 수 있는 공간의 크기 (=단기 기억 능력)
- 스토리지(storage): 데이터를 저장할 수 있는 크기 (=장기 기억 능력)
Network: 컴퓨터가 특정 시스템을 통해서 연결되어 있는 구조, 이 구조에서는 컴퓨터들이 서로 통신을해서 데이터를 주고 받을 수 있다.
- Network model: Computer Network를 이해하는 방식. (OSI 7 layer VS TCP/IP Model)
- Client: end-user, 실제 사용자, 서비스 사용자, 작업을 요청하는 사람(또는 프로그램)
- Server: 요청을 받는 대상, 서비스를 운영해주는 컴퓨터
- Web: WWW(World Wide Web)와 같은 단어, hypertext와 media로 구성된 페이지들을 연결한 구조 또는 시스템
데이터베이스: 데이터를 효율적으로 운영/관리/저장하는 시스템
- RDB: Relational Database, 관계형 데이터베이스, 테이블 형태로 데이터를 관리하는 체계
- Table: row와 column으로 구성된 2차원 데이터, RDB의 구성 요소, table 단위로 데이터를 관리
- Schema: 어떤 테이블에 대한 정의, 테이블에 대한 metadata. column에 대한 정의, row에 대한 정의
- SQL: Structured Query Language, 데이터베이스를 다루기 위한 언어
- NoSQL: Not only SQL. SQL 그 이상, SQL로 지원되지 않는 데이터베이스들을 포함한 모든 시스템
e.g. MongoDB, ElasticSearch, Hive, HBase - Data Warehouse: 분석을 목적으로 만들어진 대용량 데이터 처리가 가능한 (보통) 관계형 데이터베이스(정형화)
- Data Lake: 수집을 목적으로 만들어진 대용량 데이터 처리가 가능한 (보통) NoSQL
03. Data Pipeline:
ETL: Extract, Transform, Load의 약자로 다양한 데이터 소스로부터 데이터를 수집 및 처리하는데 사용되는 파이프라인
- 데이터 분석가들이 분석에 사용할 데이터를 정의하게 되면, 데이터 엔지니어에게 요청을해서 해당 데이터를 처리해주길 원한다
- 대용량 데이터(e.g. 10,000,000 rows)를 한 번에 처리하는 걸 데이터베이스에 요청을 했다면 어떻게 처리해야할까?
- 만약에 데이터 분석가가 Pandas(Python 에서 정형데이터를 다루는 오픈소스 라이브러리)를 이용해서 데이터를 처리하기로 정했다. Pandas에서 데이터를 처리할 수 있게 요청을 했다면 어떻게 처리해야할까?
Extract(추출):
- 데이터를 원본 소스로부터 가져오는 작업
- SQL의 SELECT와 같다 (아직, SQL을 모른다면 Excel의 VLOOKUP과 같다)
- 원본 소스가 꼭 RDB일 필요는 없다(RDB가 효율은 가장 좋다)
- 분석가가 정의한 모든 데이터를 다 가져온다
Transform(변환):
- 추출한 데이터를 분석에 필요한 형태로 변환한다
- 데이터의 포맷을 통일시켜주는 작업
- 분석 요청 사항에 맞는 형태로 저장 (Data Warehouse의 schema 정의)
Load(적재):
- 변환된 데이터를 Data Warehouse에 저장한다
- 저장된 데이터를 분석가가 편의에 따라 자유롭게 사용할 수 있다. (주로 application 형태로 제공됨)
- 원본 데이터에 정보를 모두 나타내고 있어야 한다
특징:
- ETL은 데이터 엔지니어의 손을 많이 탄다.
- 데이터 엔지니어가 직접 각 프로세스마다 처리 방식을 모두 구현해주어야한다
- 명세사항이 변경되는 경우, 그에 맞춰서 다시 처리 단계(특히 Transform)을 맞춰줘야한다
- 대신에 솔루션 사용자 입장에서는 맞춰진 프로세스에 따라 편하게 데이터를 처리 및 사용이 가능하다
ELT: Extract, Load, Transform의 약자로 Transform이 일어나는 위치만 ETL과 다른 데이터 파이프라인
특징:
- ELT는 ETL과 각 단계의 정의는 같다. (Extract, Load, Transform)
- ELT는 ETL과 달리, 데이터를 일단 적재한 다음에 변환을 수행한다.
- 일단 데이터를 먼저 올려놓기 때문에, Data Warehouse보다는 Data Lake가 적합하다
- Data Lake는 정형/비정형/반정형 데이터 모두 자유롭게 적재가 가능하기 때문에 저장 효율성이 좋다
- 다양한 데이터 타입을 모두 저장할 수 있다
- 단, 처리 속도가 ETL에 비해 느리다 (왜냐면 저장된 이후에 Transform을 제일 마지막에 하기 때문에)
- 대신에 저장의 유연성과 명세사항에 없던 추후에 사용될지도 모르는 데이터까지 모두 수집이 가능하다
요약:
- ETL에서 ELT로 가는 중이다
- ETL에서는 Data Warehouse를 구성하고, ELT에서는 Data Lake를 구성한다
04. Hadoop Ecosystem:
Hadoop : High-Availability Distributed Object-Oriented Platform의 약자로 대용량 데이터를 분산처리할 수 있는 Java 기반 프레임워크다.
- Apache(아파치) 재단에서 관리하는 프리웨어인 Hadoop Project에서 만들어지는 모든 소프트웨어 솔루션들의 집합을 말한다
- Hadoop은 HDFS라는 파일처리 시스템과 YARN이라는 리소스 관리 시스템, MapReduce라는 대용량 서리 시스템을 기반으로 하는 프레임워크이다
- 대용량 데이터를 효과적으로 처리하는 것을 목적으로 하는 많은 소프트웨어들이 함께 있는 플랫폼이라고 볼 수 있다
HDFS(Hadoop Distributed File System):
- Hadoop에서 관리하는 모든 데이터를 저장/관리하는 시스템 (스토리지 관리)
- Namenode와 Datanode로 데이터를 분산관리한다.
- Node: 컴퓨터 한 대
- Rack: Node 여러 대를 물리적으로 묶어놓은 것, 같은 네트워크 스위치를 공유한다.
- Cluster: 여러 rack을 물리적으로 묶은 것
- Namenode는 실제 데이터가 어떤 Datanode에 저장되어 있는지를 관리하는 메타데이터를 관리하는 노드이다.
- Datanode엔 실제 데이터가 분산 저장된다. (replica들이 존재함)
YARN (Yet Another Resource Negotiator):
- Hadoop에서 처리되는 모든 리소스를 관리해주는 시스템
- 어떤 요청이 어떤 클러스터에 할당되어야 하는지 관리한다
- Resource Manager와 Node Manager가 리소스를 관리한다
- Resource Manager는 각 Node Manager가 각 Node의 리소스를 얼마나 사용하는지를 관리한다
- Node Manager는 각 Node를 관리하며, Node의 리소스를 관리한다. Resource Manager의 요청을 수행하는 역할이다
- Client가 작업을 요청하면 Resource Manager가 Node Manager들을 관리하여 리소스를 할당하고, 작업을 수행한다
MapReduce:
- Hadoop에서 데이터를 분산처리하는 방법 중 하나이다 (가장 많이 쓰임)
- Map task 와 Reduce task가 있다
- Map task를 수행하는 노드를 Mapper, Reduce task를 수행하는 노드를 Reducer라고 한다
Process:
- 전처리기는 Mapper가 일을 할 수 있는 형태로 데이터를 정의하여 Mapper들에게 전달한다 (splitting)
- Mapper는 처리해야하는 데이터를 Reducer가 연산할 수 있는 형태로 변환한다 (mapping)
- Reducer에게 전달하기 전에 데이터를 기준에 맞게 Sort & Merge 한다 (shuffling)
- Reducer는 전달받은 데이터에 요청한 연산을 수행한다 (Reducing = sum)
- Reducer들이 처리한 데이터를 합친다
요약:
- Hadoop Ecosystem은 대용량 데이터를 처리하는 프로그램의 플랫폼(또는 집합체)
- HDFS, YARN, MapReduce 핵심 컨셉에 따라 실제 데이터를 처리한다.
- Hadoop Ecosystem에 있는 구성 프로그램들은 모두 오픈소스며, 대용량 데이터 처리를 위해, 기능별로 구현되고 있다.
05. Cloud Computing:
Cloud Computing: 사용자의 필요에 따라 Computing Resource를 할당해주는 시스템. 할당을 해주는 서버가 네트워크/서비스를 통해서 제공해주는 시스템
- 지금은 ‘대'클라우드 시대이다.
- Cloud Computing으로 우리는 컴퓨터(컴퓨팅 리소스)를 빌려쓰는 시대에 살게되었다.
- “Pay-as-you-Go” → 사용한만큼 지불한다.
- Cloud Computing을 하기 위해서는 Data Center와 실시간 분산처리 시스템이 필요하다.
- 주로 IT 대기업들(e.g. Amazon, Google, Microsoft, Naver, ...)가 서비스를 제공한다.
- ~aaS (as a Service)라는 개념이 생겨났다.
- Cloud computing을 직접 운영하는 회사들의 서비스 설명을 보며, 개념을 구체화해보자.
Cloud Services:
- AWS (Amazon Web Service): https://aws.amazon.com/ko/what-is-cloud-computing/
- GCP (Google Cloud Platform): https://cloud.google.com/learn/what-is-cloud-computing
- Microsoft Azure: https://azure.microsoft.com/ko-kr/resources/cloud-computing-dictionary/what-is-cloud-computing/
클라우드 컴퓨팅이란 | 클라우드 컴퓨팅 소개 | Amazon Web Services
모든 유형, 규모 및 산업의 조직이 데이터 백업, 재해 복구, 이메일, 가상 데스크톱, 소프트웨어 개발 및 테스트, 빅 데이터 분석, 고객 대상 웹 애플리케이션 등 다양한 사용 사례에 클라우드를
aws.amazon.com
클라우드 컴퓨팅이란 무엇인가요? | Google Cloud
클라우드 컴퓨팅에 대해 헷갈리시나요? 퍼블릭 클라우드 컴퓨팅은 확장 가능한 주문형 서비스를 제공합니다. 클라우드 컴퓨팅 유형에 대해 자세히 알아봅니다.
cloud.google.com
What Is Cloud Computing? A Beginner’s Guide | Microsoft Azure
What is cloud computing and how does cloud computing work? Learn the benefits of cloud computing. Discover how you use cloud computing services every day online.
azure.microsoft.com
요약:
- Cloud computing은 "on-demand"로 computing resource를 사용할 수 있는 시스템
- ~aaS(e.g. IaaS, PaaS, BaaS, SaaS, ...) 개념으로 리소스와 함께 서비스를 제공하여 "Pay-as-you-Go" 형태로 가성비가 좋게 효율적인 서비스 구현이 가능하다
Part.3 파이썬 기초와 데이터 분석:
Chapter.01 파이썬 프로그래밍:
03. Data Type (이론):
Data type: 프로그래밍 언어가 이해하는 사용자(프로그래머)의 데이터의 사용의도를 정의한 것
- 데이터 타입은 프로그래밍 언어보다 조금씩 다릅니다
→ 프로그래밍 언어마다 목적이 조금씩 다르기 때문입니다 - 위의 그림은 Python3에 정의되어 있는 Data Type들을 다룰 것입니다
- 데이터 타입은 우리가 사용하는 데이터를 컴퓨터가 이해할 수 있게 규격화한 것입니다
- 컴퓨터는 정의된 데이터 타입을 통해서 해당 수치값이 어떤 의미인지 이해하고 계산할 수 있게 됩니다
Python Data Types:
- 저희가 수업에서 다루게 되는 Python의 data type들은 다음과 같습니다.
- int - 정수
- float - 실수(소수)
- str - 문자열(character sequence)
- list - 자유롭게 변경이 가능한 여러 개의 데이터 묶음
- tuple - 생성 후에 변경이 불가능한 여러 개의 데이터 묶음
- set - 집합
- dict - key-value store 방식을 가지고 자료를 저장하는 구조
요약:
- 파이썬에서 다루고 있는 data type 들에는 int, float, str, list, tuple, set, dict 등이 있습니다
- data type은 프로그래밍을 할 때, 기본이 되는 데이터(재료)를 담을 수 있는 그릇을 정의한 것입니다
Day 6. 프로그래밍 기초 : Python
Day 5. Iteration (while, for) 복습 진행
프로그래밍을 잘하기 위해서는 프로그래밍을 많이 짜봐야한다!
반복분을 제어하는 break, continue:
break:
반복을 하다가 break를 만나면 끝남
continue:
특정 조건에서 반복 과정을 스킵하고 진행하고 싶을 때 사용
# break 예제
# 자판기의 커피 수량
coffee = 5
# 일단 작동!
while True: # 영원히 만족, 인피니티 루프, 베터리 녹이기...ㅇㅅㅇ..
if coffee <= 0:
break
# 실제로는 자판기를 통해서 넣은 금액.
money = int(input("금액을 입력하세요."))
if money == 300:
# 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
print("Coffee")
# 이제 커피를 하나씩 줄인다.
coffee = coffee - 1
elif money < 300:
# 실제로 이 파트는 돈을 반환한다.
print("%d원을 반환합니다." % money)
else: # or elif money > 300:
print("Coffee")
# 커피를 뽑아주고
coffee = coffee - 1
# 이제 커피를 하나씩 줄인다.
print("%d원을 반환합니다." % (money-300))
# 거스름돈을 돌려준다.
# if coffee <= 0: # 해당 코드에서는 처음 or 마지막에 판단 모두 가능!
# break
# 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
>금액을 입력하세요.1000
Coffee
700원을 반환합니다.
금액을 입력하세요.300
Coffee
금액을 입력하세요.500
Coffee
200원을 반환합니다.
금액을 입력하세요.500
Coffee
200원을 반환합니다.
금액을 입력하세요.500
Coffee
200원을 반환합니다.
커피가 모두 소진되었으니, 관리자에게 문의해주세요.
# continue 예제
# Q. 커피가 다 떨어질 때 까지 자판기 프로그램을 반복하면서 실행한 뒤, 돈을 입력받아서 커피를 주는 프로그램을 작성해보자.
# 이번에는 돈이 모자랄 때는, 추가로 돈을 입력받아 300원을 넘는 경우에 커피를 뽑아주는 프로그램을 작성해보자.
# 자판기의 커피 수량
coffee = 5
# 거스름돈 보관
cache = 0
# 일단 작동!
while coffee > 0:
# 이 위치로 돌아오면 다시 판단 가능!
# cache = 0 # 여기 있으면 돌아올 때마다 저금통이 초기화...
# 실제로는 자판기를 통해서 넣은 금액.
money = int(input("금액을 입력해주세요 : ")) # 150
# 저장했던 돈과 새로 입력받은 돈을 합쳐서 판단해주어야 한다!
money = money + cache
if money == 300:
# 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
print("Coffee")
# 이제 커피를 하나씩 줄인다.
coffee = coffee - 1
# cache = 0
elif money < 300: # 150
# 돈을 더 받자.
print("돈이 모자랍니다. 추가로 금액을 입력해주세요.")
# 돈을 더 받는다. (돈을 더 내놓으시오!)
# money = in(input("금액을 입력해주세요 : ")) # overwrite 해버리기 때문에 수정 필요, 돈을 저장해 둘 장소가 필요
cache = money # 이전에 받은 돈을 저장하는 cache!
continue # continue를 통해 위로 올릴 수 있음
else: # or elif money > 300:
print("Coffee")
# 커피를 뽑아주고
coffee = coffee - 1
# 이제 커피를 하나씩 줄인다.
print("%d원을 반환합니다." % (money-300))
# 거스름돈을 돌려준다.
# cache = 0
# 정산
cache = 0 # if 랑 else에 넣어도 되지만 여기서 한 번에 정산해줘도 좋다!
# 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
>금액을 입력해주세요 : 300
Coffee
금액을 입력해주세요 : 500
Coffee
200원을 반환합니다.
금액을 입력해주세요 : 150
돈이 모자랍니다. 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 150
Coffee
금액을 입력해주세요 : 150
돈이 모자랍니다. 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 200
Coffee
50원을 반환합니다.
금액을 입력해주세요 : 100
돈이 모자랍니다. 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 150
돈이 모자랍니다. 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 100
Coffee
50원을 반환합니다.
커피가 모두 소진되었으니, 관리자에게 문의해주세요.
# nested loop 예제
# 전설의 구구단 구현. nested loop를 연습해보자!
# nested loop를 이용하여 구구단을 구현합시다.
for dan in range(2, 10):
print("-" * 10)
for i in range(1, 10):
print(f"{dan} x {i} = {dan * i}")
>----------
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
----------
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
----------
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
----------
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
----------
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
----------
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
----------
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
----------
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
Programming Practice02(control statement):
# Programming Practice02 (Control statement)
# 1. if 지옥
a = "Life is too short, you need python"
if "wife" in a:
print("wife")
elif "python" in a and "you" not in a:
print("python")
elif "shirt" not in a:
print("shirt")
elif "need" in a:
print("need")
else:
print("none")
>shirt
# 2. 약수 찾기
# 100 이하의 자연수 중에서 5의 배수를 모두 찾아서 출력해주세요.
# 문제2의 코드를 작성하세요.
a = list(range(1, 101))
# print(a)
for b in a:
if b % 5 == 0:
print(b)
>5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
# 3. 별 찍기!
number = int(input("Input the number of lines : "))
for i in range(0, number + 1):
print((number - i) * "*")
# 아래와 같은 방법도 가능 - 1
# for i in range(5, 0, -1):
# print(i * "*")
# 아래와 같은 방법도 가능 - 2
# for i in range(number):
# print((number - i) * "*")
# 아래와 같은 방법도 가능 - 3 (전통적인 방식)
# for i in range(number):
# for j in range(number - i):
# print("*", end="")
# print()
>Input the number of lines : 7
*******
******
*****
****
***
**
*
# 4. 단어 갯수 구하기
# 힌트 1. news1.split()
# 힌트 2. Dictionary 사용하면 쉽게 구현 가능
# 제한. from collection import Counter
# 다음과 같은 영어기사 5개가 있다.
# 철수는 다음 뉴스기사들의 어떤 단어가 얼마나 나왔는지 궁금해졌다.
# 뉴스기사에서 등장하는 모든 단어마다 개수를 세어보자!
#아래 5개의 변수들은 각각 하나의 문서를 의미합니다.
news1 = "earn champion products ch approves stock split champion products inc said its board of directors approved a two for one stock split of its common shares for shareholders of record as of april the company also said its board voted to recommend to shareholders at the annual meeting april an increase in the authorized capital stock from five mln to mln shares reuter"
news2 = "acq computer terminal systems cpml completes sale computer terminal systems inc said it has completed the sale of shares of its common stock and warrants to acquire an additional one mln shares to sedio n v of lugano switzerland for dlrs the company said the warrants are exercisable for five years at a purchase price of dlrs per share computer terminal said sedio also has the right to buy additional shares and increase its total holdings up to pct of the computer terminal s outstanding common stock under certain circumstances involving change of control at the company the company said if the conditions occur the warrants would be exercisable at a price equal to pct of its common stock s market price at the time not to exceed dlrs per share computer terminal also said it sold the technolgy rights to its dot matrix impact technology including any future improvements to woodco inc of houston tex for dlrs but it said it would continue to be the exclusive worldwide licensee of the technology for woodco the company said the moves were part of its reorganization plan and would help pay current operation costs and ensure product delivery computer terminal makes computer generated labels forms tags and ticket printers and terminals reuter"
news3 = "earn cobanco inc cbco year net shr cts vs dlrs net vs assets mln vs mln deposits mln vs mln loans mln vs mln note th qtr not available year includes extraordinary gain from tax carry forward of dlrs or five cts per shr reuter"
news4 = "earn am international inc am nd qtr jan oper shr loss two cts vs profit seven cts oper shr profit vs profit revs mln vs mln avg shrs mln vs mln six mths oper shr profit nil vs profit cts oper net profit vs profit revs mln vs mln avg shrs mln vs mln note per shr calculated after payment of preferred dividends results exclude credits of or four cts and or nine cts for qtr and six mths vs or six cts and or cts for prior periods from operating loss carryforwards reuter"
news5 = "earn brown forman inc bfd th qtr net shr one dlr vs cts net mln vs mln revs mln vs mln nine mths shr dlrs vs dlrs net mln vs mln revs billion vs mln reuter"
# news_list는 뉴스 5개가 원소인 리스트입니다.
# word_Dict는 문서 하나당 단어와 단어 갯수가 저장되는 사전입니다. 하나만 사용하셔도 되고, 여러개를 사용하셔도 됩니다.
#news_list는 뉴스 5개가 원소인 리스트입니다.
#word_Dict는 문서 하나당 단어와 단어 갯수가 저장되는 사전입니다. 하나만 사용하셔도 되고, 여러개를 사용하셔도 됩니다.
# word_list = []
# count_list = []
# key : value = word : count
#
word_Dict = {}
news_list = news1.split() + news2.split() + news3.split() + news4.split() + news5.split()
for word in news_list:
# for word in news1.split():
# print(word)
if word in word_Dict: # 해당 단어가 이미 존재하는 경우
# word_Dict[word] = word_Dict[word] + 1 # 핵심 원리!!!
word_Dict[word] += 1 # 핵심 원리!!!
else: # 해당 단어가 word_Dict에 없는 경우
word_Dict[word] = 1
word_Dict
>{'earn': 4,
'champion': 2,
'products': 2,
'ch': 1,
'approves': 1,
'stock': 6,
'split': 2,
'inc': 6,
'said': 9,
'its': 8,
'board': 2,
'of': 17,
'directors': 1,
'approved': 1,
'a': 3,
'two': 2,
'for': 8,
'one': 3,
'common': 4,
'shares': 5,
'shareholders': 2,
'record': 1,
'as': 1,
'april': 2,
'the': 18,
'company': 5,
'also': 3,
'voted': 1,
'to': 12,
'recommend': 1,
'at': 5,
'annual': 1,
'meeting': 1,
'an': 2,
'increase': 2,
'in': 1,
'authorized': 1,
'capital': 1,
'from': 3,
'five': 3,
'mln': 24,
'reuter': 5,
'acq': 1,
'computer': 7,
'terminal': 6,
'systems': 2,
'cpml': 1,
'completes': 1,
'sale': 2,
'it': 4,
'has': 2,
'completed': 1,
'and': 9,
'warrants': 3,
'acquire': 1,
'additional': 2,
'sedio': 2,
'n': 1,
'v': 1,
'lugano': 1,
'switzerland': 1,
'dlrs': 8,
'are': 1,
'exercisable': 2,
'years': 1,
'purchase': 1,
'price': 3,
'per': 4,
'share': 2,
'right': 1,
'buy': 1,
'total': 1,
'holdings': 1,
'up': 1,
'pct': 2,
's': 2,
'outstanding': 1,
'under': 1,
'certain': 1,
'circumstances': 1,
'involving': 1,
'change': 1,
'control': 1,
'if': 1,
'conditions': 1,
'occur': 1,
'would': 3,
'be': 2,
'equal': 1,
'market': 1,
'time': 1,
'not': 2,
'exceed': 1,
'sold': 1,
'technolgy': 1,
'rights': 1,
'dot': 1,
'matrix': 1,
'impact': 1,
'technology': 2,
'including': 1,
'any': 1,
'future': 1,
'improvements': 1,
'woodco': 2,
'houston': 1,
'tex': 1,
'but': 1,
'continue': 1,
'exclusive': 1,
'worldwide': 1,
'licensee': 1,
'moves': 1,
'were': 1,
'part': 1,
'reorganization': 1,
'plan': 1,
'help': 1,
'pay': 1,
'current': 1,
'operation': 1,
'costs': 1,
'ensure': 1,
'product': 1,
'delivery': 1,
'makes': 1,
'generated': 1,
'labels': 1,
'forms': 1,
'tags': 1,
'ticket': 1,
'printers': 1,
'terminals': 1,
'cobanco': 1,
'cbco': 1,
'year': 2,
'net': 6,
'shr': 8,
'cts': 10,
'vs': 20,
'assets': 1,
'deposits': 1,
'loans': 1,
'note': 2,
'th': 2,
'qtr': 4,
'available': 1,
'includes': 1,
'extraordinary': 1,
'gain': 1,
'tax': 1,
'carry': 1,
'forward': 1,
'or': 5,
'am': 2,
'international': 1,
'nd': 1,
'jan': 1,
'oper': 4,
'loss': 2,
'profit': 7,
'seven': 1,
'revs': 4,
'avg': 2,
'shrs': 2,
'six': 3,
'mths': 3,
'nil': 1,
'calculated': 1,
'after': 1,
'payment': 1,
'preferred': 1,
'dividends': 1,
'results': 1,
'exclude': 1,
'credits': 1,
'four': 1,
'nine': 2,
'prior': 1,
'periods': 1,
'operating': 1,
'carryforwards': 1,
'brown': 1,
'forman': 1,
'bfd': 1,
'dlr': 1,
'billion': 1}
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
긴 글 읽어주셔서 감사합니다 :)
'AI > [부트캠프] 데이터 사이언티스트 과정' 카테고리의 다른 글
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 8. (0) | 2022.08.31 |
---|---|
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 7. (0) | 2022.08.30 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 5. (0) | 2022.08.26 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 4. (0) | 2022.08.25 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 3. (0) | 2022.08.24 |