본 영상은 2021-2 KMOOC-데이터엔지니어링 강의의 원본이며, 강좌 오픈 이후에는 질의 응답 채널으로 이용 예정입니다. 각 Topic에 질문 해주시면 가능한 답은 달아드리도록 하겠습니다.
강의노트 (SlideShare) - https://www.slideshare.net/ssuser4a9113
코드 (GitHub) - https://github.com/JaewookByun/data_engineering
총 11강
구성
- ArrayList 연산
- MyArrayList - 배열 기반 List interface 구현
- LinkedList 연산
- MyLinkedList - 참조 기반 List & Queue interfaces 구현
- HashSet/HashMap 연산
- Lambda Expression
- Stream - Open JDK 15에서 이용가능한 거의 대부분의 연산을 다루려고 노력함
1. DataAnalysis
(Lecture 1 - Introduction)
1
Jaewook Byun
Ph.D. Assistant Professor, Department of Software, Sejong University
Associate Director, Auto-ID Labs, Korea
jwbyun@sejong.ac.kr , bjw0829@gmail.com
https://sites.google.com/view/jack-dfpl/home
2. 목차
• 데이터 엔지니어링 소개
• 데이터 처리 과정 소개
• 실 세계 데이터 셋 소개
• 실습 환경 소개 및 구축
• 실 세계 데이터 셋 워밍업
2
3. 데이터 엔지니어링 소개
• 기술의 시대
• 방대한 양의 데이터와 인공지능 기술을 활용한 서비스의 폭발적인 등장
3
Netflix icon: https://en.wikipedia.org/wiki/Netflix
Netflix screen recording: www.netflix.com
DeepMind icon: https://en.wikipedia.org/wiki/DeepMind
Deepmind Image: https://www.exoplatform.com/blog/2016/03/18/machine-crushes-go-world-champion/
DeepDream icon: https://southsouthwest.com.au/news/google-deepdream/
DeepDream image: https://deepdreamgenerator.com/
4. 데이터 엔지니어링 소개
• 빅데이터란?
• 가트너 리포트: "2021년에는 620억개의 사물이 존재”
• 620억개의 사물과 79억명의 사람이 빠르게 만들어내는 이질적인 큰 규모의 데이터
4
Big Data
Variety Velocity
Volume
Data in 30 sec.
가트너 인용: https://www.gartner.com/en/newsroom/press-releases/2021-04-01-gartner-forecasts-
global-devices-installed-base-to-reach-6-2-billion-units-in-2021
빅데이터 icon: https://www.pngkit.com/bigpic/u2w7r5e6t4r5r5e6/
오른쪽 그림: https://pbs.twimg.com/media/CJpQUc2WUAQHztb.png
Internet in 30 sec.: https://www.digitalinformationworld.com/2014/05/Twitter-Facebook-GooglePlus-Instagram-Pinterest-Real-Time-Internet-infographic.html
5. 데이터 엔지니어링 소개
• 기술 범람의 시대
5
이미지: https://mattturck.com/data2019/
6. 데이터 엔지니어링 소개
• 데이터엔지니어링이란?
• 특정 목적의 서비스를 만들기 위해 빅데이터의 파이프라인을 설계 구축하는 것
• 데이터 수집, 데이터 가공, 데이터 저장 등
6
데이터 저장
데이터 가공
데이터 수집
Data processing, data collection and data storage icons: www.flaticon.com
빅데이터 icon: https://www.pngkit.com/bigpic/u2w7r5e6t4r5r5e6/
Netflix screen recording: www.netflix.com
Deepmind Image: https://www.exoplatform.com/blog/2016/03/18/machine-crushes-go-world-champion/
DeepDream 이미지: https://deepdreamgenerator.com/
7. 데이터 엔지니어링 소개
• 본 강의의 소개
• 개념적
• 실 세계 오픈 데이터를 처리
• 특정 문제에 대한 적절한 자료구조 선택의 중요성 학습
• 데이터 파이프라인 설계 구축 과정의 숙달
• 실무적
• Java Collection Framework 학습
• Java Parallel Stream 학습
• 사전지식
• 자료구조
• 객체지향 프로그래밍
• Java 언어
• 실습환경
• Open JDK 15
• Eclipse IDE for Enterprise Java and Web Developers
7
8. 데이터 처리 과정
• 데이터 수집
• 데이터 소스와 수집 방법이 다양함
• 데이터 소스
• 웹 데이터, 센서 데이터, 파일, 데이터베이스 등
• 데이터 수집 방법
• API 호출, 센서 신호, 파일 읽기, 데이터베이스 접근 등
8
Facebook은 개발자들에게 데이터를 API를 통해 제공함
/me?fields=email,id,name + 억세스 토큰
본인의 email,id,name 획득
예)
페이스북 ICON: https://en.wikipedia.org/wiki/Facebook
9. 데이터 처리 과정
• 데이터 수집
• 본 과정에서 사용되는 오픈 데이터셋
• Stanford Network Analysis Project (SNAP)
• 50개 이상의 네트워크 데이터셋 제공
• https://snap.Stanford.edu/data/
• 이메일 데이터
• http://snap.stanford.edu/data/email-EuAll.html
• 2003년 2005 사이에 이메일을 보낸 사실에 대한 기록
• 계정은 익명화 되어 숫자로 제공
9
# 데이터 명세
# 데이터 명세
# …
0 1
1 2
1 3
…
0
1
2
3
“계정 1이 계정 2에게 이메일을 보냄”
10. 데이터 처리 과정
• 데이터 가공
• 데이터 저장을 위한 형태로 데이터를 가공
• 데이터 추상화, 데이터 파싱, 데이터 검증, 데이터 정제 등
10
# 데이터 명세
# 데이터 명세
# …
0 1
0 1
0
*1912ㄴ 5
0 8
0 11
0 20
0 48
0 430
…
데이터 명세 제거
중복 데이터 제거
누락 데이터 제거
결함 데이터 제거
“0 20”
처리할 데이터 “0”
“20”
토큰화 정수변환 0
20
11. 데이터 처리 과정
• 데이터 저장
• 데이터를 특정 목적의 서비스를 만들기 적절한 형태로 유지함
• 메모리, 데이터베이스 등
11
# 데이터 명세
# 데이터 명세
# …
0 1
0 4
0 5
0 8
0 11
0 20
0 48
0 130
0 160
…
메모리
데이터베이스
리스트
스택
큐
해시
트리
관계형DB
문서형DB
그래프DB
0 130
이메일 설계도
데이터 추상화:
보낸 사람(정수)
받는 사람(정수)
프로시저 추상화:
…
이메일 객체
보낸 사람: 0
받는 사람: 8
변환기
12. 실습 환경 준비
• Open JDK 15
• Microsoft Windows 10 기준
• 다운로드: https://jdk.java.net/archive/
12
압축을 푼 후 아래 폴더의 모습
C:Program Filesjavajdk-15.0.2
13. 실습 환경 준비
• Open JDK 15
• 환경 준비 영상
• 유튜브: https://youtu.be/Zqi4ayfhEQc
13
14. 실습 환경 준비
• Eclipse IDE for Enterprise Java and Web Developers
• Microsoft Windows 10 기준
• 다운로드: https://www.eclipse.org/downloads/packages/
14
15. 실습 환경 준비
• Eclipse IDE for Enterprise Java and Web Developers
• 환경 준비 영상
• 유튜브: https://youtu.be/ivjPjcJpNes
15
16. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 객체지향 프로그래밍: 개념을 추상화 해 놓은 클래스들의 객체들을 조합하여 목적을 이루어가는 것
• 파일 읽기
• 특정 위치의 파일을 한 줄 읽을 수 있는 BufferedReader 클래스를 객체화 하여 파일 읽기를 수행
• 한 줄 읽기를 반복하여 전체 파일 읽기를 수행
• Email 데이터 위치: http://snap.stanford.edu/data/email-EuAll.html
• 실 세계 데이터셋 위치: C:UsersSejongDAemail.txt 로 가정
16
BufferedReader r =
new BufferedReader(new FileReader(
“C:UsersSejongDAemail.txt"));
String line = r.readLine();
17. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
17
생성자
Class FileReader() : 문자로 이루어진 파일을 읽을 수 있는 클래스
예외처리:
FileNotFoundException : 파일을 찾지 못하였을때 발생
FileReader f =
new FileReader(“C:UsersSejongDAemail.txt");
email.txt
파일시스템
18. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
18
생성자
Class BufferedReader(Reader in) : 버퍼를 이용하여 효율적으로 문자열을
읽는 클래스
BufferedReader r = new BufferedReader(
new FileReader(“C:UsersSejongDAemail.txt"));
email.txt
Buffer
파일시스템
19. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
19
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
연산자(BufferedReader)
String ReadLine(): 텍스트의 한 줄을 읽어옵니다.만약 텍스트의 끝에 도달
하면 null 을 반환한다
예외처리:
IOException : I/O 에러 발생시 발생한다
String line;
line = r.readLine()
20. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
20
String ReadLine(): 텍스트의 한 줄을 읽어옵니다.만약 텍스트의 끝에 도달
하면 null 을 반환한다
예외처리:
IOException : I/O 에러 발생시 발생한다
String line;
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
line = r.readLine();
line = r.readLine();
연산자(BufferedReader)
21. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
21
String ReadLine(): 텍스트의 한 줄을 읽어옵니다.만약 텍스트의 끝에 도달
하면 null 을 반환한다
예외처리:
IOException : I/O 에러 발생시 발생한다
String line;
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
line = r.readLine();
line = r.readLine();
line = r.readLine();
연산자(BufferedReader)
22. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 파일 읽기
• BufferedReader 활용
22
String ReadLine(): 텍스트의 한 줄을 읽어옵니다.만약 텍스트의 끝에 도달
하면 null 을 반환한다
예외처리:
IOException : I/O 에러 발생시 발생한다
String line;
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 42004
line = r.readLine();
line = r.readLine();
line = r.readLine();
line = r.readLine();
연산자(BufferedReader)
23. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 데이터 파싱
• BufferedReader의 readLine 연산을 통해 얻어진 문자열을 프로그래밍 언어가 이해할 수 있는 형
태로 처리
23
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 4
0 5
0 8
0 11
0 20
0 48
…
#으로 시작하는 데이터 설명 무시
boolean startsWith(“#”)
TAB(t)으로 문자열을 분리
String[] split(“t”)
0이 1에게 메일을 보낸 이벤트
배열의 요소를 정수형(Integer)로 변환
static int parseInt(“1”)
email.txt
24. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 데이터 파싱
• BufferedReader의 readLine 연산을 통해 얻어진 문자열을 프로그래밍 언어가 이해할 수 있는 형
태로 처리
24
연산자(String)
boolean startsWith(String prefix) : 문자열이 특정 prefix 로 시작하면
true 를 반환한다
String line = r.readLine();
# Directed graph (each unordered pair of nodes is …
if(line.startsWith("#"))
continue;
true
25. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 데이터 파싱
• BufferedReader의 readLine 연산을 통해 얻어진 문자열을 프로그래밍 언어가 이해할 수 있는 형
태로 처리
25
연산자(String)
String[] split(String regex) : 문자열을 주어진 정규표현식에 맞춰 분리
한다
String line = "0 1";
String[] splited =line.split("t");
splited[0]
splited[1]
‘0’
‘1’
‘0’ ‘t’ ‘1’
26. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 데이터 파싱
• BufferedReader의 readLine 연산을 통해 얻어진 문자열을 프로그래밍 언어가 이해할 수 있는 형
태로 처리
26
연산자(Integer)
static int parseInt(String s) : 숫자형의 문자열 ‘s’ 를 10진수의 정수형
으로 반환한다
예외사항:
NumberFormatException : 숫자형의 문자열이 아닐때 발생한다
int num1 = Integer.parseInt("3");
int num2 = Integer.parseInt("5");
num1 + num2 8
int num = Integer.parseInt("a");
27. 실 세계 데이터 셋 추출 및 모델링 실습
• 실습을 위한 개념 소개
• 데이터 추상화
• Java 클래스
• 데이터 추상화
• 프로시저 추상화
27
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 4
0 5
0 8
0 11
0 20
0 48
…
email.txt
0이 1에게 메일을 보낸 이벤트
public class Email {
//데이터 추상화
int from; // 보낸 사람
int to; // 받는 사람
//프로시저 추상화
public Email(int from, int to){
this.from = from; this.to = to;
}
public String toString(){
return from + “->” + to;
}
}
Email e1 = new Email(0,1);
System.out.println(e1);
인스턴스화
콘솔 결과
0->1
콘솔 추상화 매개변수를 콘솔에 출력
28. 실 세계 데이터 셋 추출 및 모델링 실습
• 실 세계 데이터 셋 추출 및 모델링 실습 수행
• 환경 준비 영상
• 유튜브: https://youtu.be/mjDkkk2T74U
28