SlideShare a Scribd company logo
1 of 33
Download to read offline
DataAnalysis
(Lecture 2 - Motivation)
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
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
1. 줄 수 구하기
• line이라는 변수를 0으로 두고
• 파일의 줄을 읽을 때 마다 line을 하나씩 늘려 줌
• 예제의 답: 11
3
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 2
0 4
1 3
2 5
3 1
3 4
0이 1에게 메일을 보낸 이벤트
d:email.txt 예제
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
1. 줄 수 구하기
• 유튜브: https://youtu.be/9I9TzDa__so
4
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
2. 이벤트의 수 구하기
• 줄 수를 구할 때 #로 시작되는 줄에서는 line을 늘려주지 않음
• 예제의 답: 7
5
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 2
0 4
1 3
2 5
3 1
3 4
0이 1에게 메일을 보낸 이벤트
d:email.txt 예제
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
2. 이벤트의 수 구하기
• 유튜브: https://youtu.be/3Cr3YS_2DPw
6
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
3. 최소 사람 ID를 구하기
• min이라는 변수를 아주 큰 수로 두고
• 각 줄마다 확인되는 ID가 min보다 작으면 갱신
7
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 2
0 4
1 3
2 5
3 1
3 4
0이 1에게 메일을 보낸 이벤트
d:email.txt 예제
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
3. 최소 사람 ID를 구하기
• 유튜브: https://youtu.be/ayniDgWBktQ
8
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
4. 최대 사람 ID를 구하기
• max라는 변수를 아주 작은 수로 두고
• 각 줄마다 확인되는 ID가 max보다 크면 갱신
9
# Directed graph (each unordered…
# Email network of a large Europe…
# Nodes: 265214 Edges: 420045
# FromNodeId ToNodeId
0 1
0 2
0 4
1 3
2 5
3 1
3 4
0이 1에게 메일을 보낸 이벤트
d:email.txt 예제
실 세계 데이터셋 추출 및 모델링 실습
• 간단한 분석 수행
4. 최대 사람 ID를 구하기
• 유튜브: https://youtu.be/jLa_NYYxE78
10
데이터 구조 사용의 필요성
• 간단한 분석 수행
• 파일을 4번 읽어 다음의 분석 수행
1. 줄 수 구하기
2. 이벤트의 수 구하기
3. 최소 사람 ID를 구하기
4. 최대 사람 ID를 구하기
11
email.txt
파일시스템
분석1
분석2
분석3
분석4
데이터 구조 사용의 필요성
• 간단한 분석 수행
• 파일을 4번 읽어 다음의 분석 수행
• 유튜브: https://youtu.be/P9C8ZQp-YrA
12
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
13
int[] GET
int[] array = new int[5];
array[0] 1 2 3 4 5
array[1]
array[2]
array[3]
array[4]
첫 인덱스
length 5의 Array
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
14
int[] (Reference type)
int[] array = new int[5]; 0 0 0 0 0
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
15
int[] SET
int[] array = new int[5];
array[0] = 1;
1 0 0 0 0
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
16
int[] SET
int[] array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
1 2 3 4 5
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
17
int[] GET
int[] array = new int[5];
array[0] 1 2 3 4 5
array[1]
array[2]
array[3]
array[4]
데이터 구조 사용의 필요성
• Data Structure(데이터 구조)의 필요성
• Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• int 모음, bool 모음, String 모음, Object 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
18
int[] 순회 방법
for(int index = 0 ; index < array.length ; index++)
System.out.println("array["+index+"]value:"+array[index]);
for(int value : array)
System.out.println(value);
데이터 구조 사용의 필요성
• Array를 이용한 데이터 재사용 실습
• Email[]에 데이터 셋을 적재하여 재사용
• 공간: 파일 시스템 > 메모리
• 속도: 메모리 > 파일 시스템
• 유튜브: https://youtu.be/mBAWGfTdCZw
19
적절한 데이터 구조 사용의 필요성 - 리스트
• List(리스트) 자료구조의 필요성
• Array(배열)
• Homogeneous(동종)한 Value(값)의 모음
• 연속된 메모리 공간에 고정된 개수의 Value들을 저장
• Index에 의해 Value를 GET 혹은 SET 할 수 있음
• 적절한 배열 크기는?
20
new Email[100000];
이벤트
420045개
부족
new Email[999999];
공간낭비
적절한 데이터 구조 사용의 필요성 - 리스트
• List(리스트) 자료구조의 필요성
• 편리성: 길이가 자유로운 가변 데이터 구조를 통해 원 자료를 순서대로 저장
• 효율성: 데이터 크기의 변화에 따른 적절한 크기를 효율적으로 관리함
21
Head
8 1 9
6
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
5. 265213이라는 ID가 있는지 확인하기
• 접근 방법
• Email[]을 순회하며, 265213이 발견되면 “발견"을 출력하고 종료
22
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
5. 265213이라는 ID가 있는지 확인하기
• 유튜브: https://youtu.be/Cfc_f7EsRts
23
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
6. 이메일을 보낸 사람의 수 구하기
• 풀이 방법
1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성
2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가
3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서
null을 제외한 값의 수가 답
24
Integer[] senders = new Integer[999999];
null null null null null null null null null null
Integer[] Email
0 0 0 1 1 1 3 3 5 10
~ null null
265212 265213
~
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
6. 이메일을 보낸 사람의 수 구하기
• 풀이 방법
1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성
2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가
3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서
null을 제외한 값의 수가 답
25
Integer[] senders
0 null null null null null null null null null
Integer[] Email
0 0 0 1 1 1 3 3 5 10
~ null null
265212 265213
~
0 1 null null null null null null null null ~ null null
0 1 3 null null null null null null null ~ null null
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
6. 이메일을 보낸 사람의 수 구하기
• 풀이 방법
1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성
2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가
3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서
null을 제외한 값의 수가 답
26
Integer[] senders
0 1 3 5 10 null null null null null ~ null null
….
0 1 3 5 10 11 12 14 15 16 ~ 265212 265213
Integer[] senders
적절한 데이터 구조 사용의 필요성 – 해시
• 간단한 데이터 분석
6. 이메일을 보낸 사람의 수 구하기
• 유튜브: https://youtu.be/a8lrjUKVCak
27
적절한 데이터 구조 사용의 필요성 - 해시
• Hash(해시) 자료구조의 필요성
• 간단한 분석 5,6
• 5번 문제: 빠른 탐색의 필요성
• 6번 문제: 중복 제거의 필요성
28
KEY
DATA
Hash 함수
KE
Y
DATA
적절한 데이터 구조 사용의 필요성 - 트리
• 간단한 데이터 분석
7. 100000의 다음 ID 찾기
• 접근 방법
1. 해당 ID를 유지할 int higher를 아주 큰 수로 초기화 한다.
2. Email[]을 순회하며, 각 ID에 대해 100000보다 크면서 higher 보다 작은 수가 발견되면, 갱
신한다.
3. 순회가 종료된 후, higher 의 값이 100000의 다음 값이다.
29
적절한 데이터 구조 사용의 필요성 - 트리
• 간단한 데이터 분석
7. 100000의 다음 ID 찾기
• 유튜브 - https://youtu.be/vYbXHJKnhEg
30
적절한 데이터 구조 사용의 필요성 - 트리
• 간단한 데이터 분석
8. 100000의 이전 ID 찾기
• 접근 방법
1. 해당 ID를 유지할 int lower를 아주 작은 수로 초기화 한다.
2. Email[]을 순회하며, 각 ID에 대해 100000보다 작으면서 lower 보다 큰 수가 발견되면, 갱
신한다.
3. 순회가 종료된 후, lower 의 값이 100000의 이전 값이다.
31
적절한 데이터 구조 사용의 필요성 - 트리
• 간단한 데이터 분석
8. 100000의 이전 ID 찾기
• 유튜브 - https://youtu.be/9JbrvpKENlw
32
적절한 데이터 구조 사용의 필요성 - 트리
• Tree(트리) 자료구조의 필요성
• 간단한 분석 7,8
• Key 간의 전후 관계를 효율적으로 유지할 수 있는 데이터 구조의 필요성
33
8
3 10
1 6
4 7
14
13
Key DATA
최소값 최대값
8의 다음값
`

More Related Content

What's hot

Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석용 최
 
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoTfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoMario Cho
 
05 컬렉션제너릭
05 컬렉션제너릭05 컬렉션제너릭
05 컬렉션제너릭rjawptlsghk
 
Binary Search
Binary SearchBinary Search
Binary Searchskku_npc
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - QueueBill Kim
 
Data Structures
Data StructuresData Structures
Data Structuresskku_npc
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출동윤 이
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for BioinformaticsHyungyong Kim
 
JVM 메모리 해부학
JVM 메모리 해부학JVM 메모리 해부학
JVM 메모리 해부학Greg Lee
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow InternalsKiho Hong
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.Kenu, GwangNam Heo
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: FunctionChan Shik Lim
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
단순 Linked list
단순 Linked list단순 Linked list
단순 Linked listKimDaeho
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 

What's hot (20)

Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoTfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
 
05 컬렉션제너릭
05 컬렉션제너릭05 컬렉션제너릭
05 컬렉션제너릭
 
Gpg1
Gpg1Gpg1
Gpg1
 
Binary Search
Binary SearchBinary Search
Binary Search
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
Data Structures
Data StructuresData Structures
Data Structures
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 
JVM 메모리 해부학
JVM 메모리 해부학JVM 메모리 해부학
JVM 메모리 해부학
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow Internals
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
Openface
OpenfaceOpenface
Openface
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
단순 Linked list
단순 Linked list단순 Linked list
단순 Linked list
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 

Similar to 데이터 분석 2 - 동기부여

집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & RankingIan Choi
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3in2acous
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출kidoki
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Younghan Kim
 
3장 데이터 수집, 정제에서 분석까지
3장 데이터 수집, 정제에서 분석까지3장 데이터 수집, 정제에서 분석까지
3장 데이터 수집, 정제에서 분석까지Hyochan PARK
 
Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍용 최
 
기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작Do Hoerin
 
SQL Server Access Patterns
SQL Server Access PatternsSQL Server Access Patterns
SQL Server Access PatternsSung wook Kang
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지Han Woo PARK
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)크몽
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐S.O.P.T - Shout Our Passion Together
 
데이터 분석 프로세스
데이터 분석 프로세스데이터 분석 프로세스
데이터 분석 프로세스Lee Seungeun
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율S.O.P.T - Shout Our Passion Together
 

Similar to 데이터 분석 2 - 동기부여 (20)

집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출
 
Stl 컨테이너
Stl 컨테이너Stl 컨테이너
Stl 컨테이너
 
MySQL 기초
MySQL 기초MySQL 기초
MySQL 기초
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 
3장 데이터 수집, 정제에서 분석까지
3장 데이터 수집, 정제에서 분석까지3장 데이터 수집, 정제에서 분석까지
3장 데이터 수집, 정제에서 분석까지
 
Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍
 
기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작기계학습을 이용한 숫자인식기 제작
기계학습을 이용한 숫자인식기 제작
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
SQL Server Access Patterns
SQL Server Access PatternsSQL Server Access Patterns
SQL Server Access Patterns
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지
인포그래픽스 데이터분석과 저널리즘 3장 데이터수집,정제에서 분석까지
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
Amazon DynamoDB
Amazon DynamoDBAmazon DynamoDB
Amazon DynamoDB
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐
[SOPT] 데이터 구조 및 알고리즘 스터디 - #04 : 트리 기초, 이진 트리, 우선순위 큐
 
데이터 분석 프로세스
데이터 분석 프로세스데이터 분석 프로세스
데이터 분석 프로세스
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 

데이터 분석 2 - 동기부여

  • 1. DataAnalysis (Lecture 2 - Motivation) 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. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 1. 줄 수 구하기 • line이라는 변수를 0으로 두고 • 파일의 줄을 읽을 때 마다 line을 하나씩 늘려 줌 • 예제의 답: 11 3 # Directed graph (each unordered… # Email network of a large Europe… # Nodes: 265214 Edges: 420045 # FromNodeId ToNodeId 0 1 0 2 0 4 1 3 2 5 3 1 3 4 0이 1에게 메일을 보낸 이벤트 d:email.txt 예제
  • 4. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 1. 줄 수 구하기 • 유튜브: https://youtu.be/9I9TzDa__so 4
  • 5. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 2. 이벤트의 수 구하기 • 줄 수를 구할 때 #로 시작되는 줄에서는 line을 늘려주지 않음 • 예제의 답: 7 5 # Directed graph (each unordered… # Email network of a large Europe… # Nodes: 265214 Edges: 420045 # FromNodeId ToNodeId 0 1 0 2 0 4 1 3 2 5 3 1 3 4 0이 1에게 메일을 보낸 이벤트 d:email.txt 예제
  • 6. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 2. 이벤트의 수 구하기 • 유튜브: https://youtu.be/3Cr3YS_2DPw 6
  • 7. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 3. 최소 사람 ID를 구하기 • min이라는 변수를 아주 큰 수로 두고 • 각 줄마다 확인되는 ID가 min보다 작으면 갱신 7 # Directed graph (each unordered… # Email network of a large Europe… # Nodes: 265214 Edges: 420045 # FromNodeId ToNodeId 0 1 0 2 0 4 1 3 2 5 3 1 3 4 0이 1에게 메일을 보낸 이벤트 d:email.txt 예제
  • 8. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 3. 최소 사람 ID를 구하기 • 유튜브: https://youtu.be/ayniDgWBktQ 8
  • 9. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 4. 최대 사람 ID를 구하기 • max라는 변수를 아주 작은 수로 두고 • 각 줄마다 확인되는 ID가 max보다 크면 갱신 9 # Directed graph (each unordered… # Email network of a large Europe… # Nodes: 265214 Edges: 420045 # FromNodeId ToNodeId 0 1 0 2 0 4 1 3 2 5 3 1 3 4 0이 1에게 메일을 보낸 이벤트 d:email.txt 예제
  • 10. 실 세계 데이터셋 추출 및 모델링 실습 • 간단한 분석 수행 4. 최대 사람 ID를 구하기 • 유튜브: https://youtu.be/jLa_NYYxE78 10
  • 11. 데이터 구조 사용의 필요성 • 간단한 분석 수행 • 파일을 4번 읽어 다음의 분석 수행 1. 줄 수 구하기 2. 이벤트의 수 구하기 3. 최소 사람 ID를 구하기 4. 최대 사람 ID를 구하기 11 email.txt 파일시스템 분석1 분석2 분석3 분석4
  • 12. 데이터 구조 사용의 필요성 • 간단한 분석 수행 • 파일을 4번 읽어 다음의 분석 수행 • 유튜브: https://youtu.be/P9C8ZQp-YrA 12
  • 13. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 13 int[] GET int[] array = new int[5]; array[0] 1 2 3 4 5 array[1] array[2] array[3] array[4] 첫 인덱스 length 5의 Array
  • 14. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 14 int[] (Reference type) int[] array = new int[5]; 0 0 0 0 0
  • 15. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 15 int[] SET int[] array = new int[5]; array[0] = 1; 1 0 0 0 0
  • 16. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 16 int[] SET int[] array = new int[5]; array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; 1 2 3 4 5
  • 17. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 17 int[] GET int[] array = new int[5]; array[0] 1 2 3 4 5 array[1] array[2] array[3] array[4]
  • 18. 데이터 구조 사용의 필요성 • Data Structure(데이터 구조)의 필요성 • Data Structure: 효율적인 접근 조작을 가능하게 하는 데이터 조직/관리/저장 구조 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • int 모음, bool 모음, String 모음, Object 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 18 int[] 순회 방법 for(int index = 0 ; index < array.length ; index++) System.out.println("array["+index+"]value:"+array[index]); for(int value : array) System.out.println(value);
  • 19. 데이터 구조 사용의 필요성 • Array를 이용한 데이터 재사용 실습 • Email[]에 데이터 셋을 적재하여 재사용 • 공간: 파일 시스템 > 메모리 • 속도: 메모리 > 파일 시스템 • 유튜브: https://youtu.be/mBAWGfTdCZw 19
  • 20. 적절한 데이터 구조 사용의 필요성 - 리스트 • List(리스트) 자료구조의 필요성 • Array(배열) • Homogeneous(동종)한 Value(값)의 모음 • 연속된 메모리 공간에 고정된 개수의 Value들을 저장 • Index에 의해 Value를 GET 혹은 SET 할 수 있음 • 적절한 배열 크기는? 20 new Email[100000]; 이벤트 420045개 부족 new Email[999999]; 공간낭비
  • 21. 적절한 데이터 구조 사용의 필요성 - 리스트 • List(리스트) 자료구조의 필요성 • 편리성: 길이가 자유로운 가변 데이터 구조를 통해 원 자료를 순서대로 저장 • 효율성: 데이터 크기의 변화에 따른 적절한 크기를 효율적으로 관리함 21 Head 8 1 9 6
  • 22. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 5. 265213이라는 ID가 있는지 확인하기 • 접근 방법 • Email[]을 순회하며, 265213이 발견되면 “발견"을 출력하고 종료 22
  • 23. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 5. 265213이라는 ID가 있는지 확인하기 • 유튜브: https://youtu.be/Cfc_f7EsRts 23
  • 24. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 6. 이메일을 보낸 사람의 수 구하기 • 풀이 방법 1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성 2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가 3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서 null을 제외한 값의 수가 답 24 Integer[] senders = new Integer[999999]; null null null null null null null null null null Integer[] Email 0 0 0 1 1 1 3 3 5 10 ~ null null 265212 265213 ~
  • 25. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 6. 이메일을 보낸 사람의 수 구하기 • 풀이 방법 1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성 2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가 3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서 null을 제외한 값의 수가 답 25 Integer[] senders 0 null null null null null null null null null Integer[] Email 0 0 0 1 1 1 3 3 5 10 ~ null null 265212 265213 ~ 0 1 null null null null null null null null ~ null null 0 1 3 null null null null null null null ~ null null
  • 26. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 6. 이메일을 보낸 사람의 수 구하기 • 풀이 방법 1. ID를 중복없이 유지할 충분한 크기의 Integer[] senders 생성 2. Email[]을 순회하며, 각 ID에 대해 ID가 senders에 존재하지 않는 다면 추가 3. Email[]의 순회가 종료되었을 때, senders는 중복되지 않는 ID를 담고 있음. senders에서 null을 제외한 값의 수가 답 26 Integer[] senders 0 1 3 5 10 null null null null null ~ null null …. 0 1 3 5 10 11 12 14 15 16 ~ 265212 265213 Integer[] senders
  • 27. 적절한 데이터 구조 사용의 필요성 – 해시 • 간단한 데이터 분석 6. 이메일을 보낸 사람의 수 구하기 • 유튜브: https://youtu.be/a8lrjUKVCak 27
  • 28. 적절한 데이터 구조 사용의 필요성 - 해시 • Hash(해시) 자료구조의 필요성 • 간단한 분석 5,6 • 5번 문제: 빠른 탐색의 필요성 • 6번 문제: 중복 제거의 필요성 28 KEY DATA Hash 함수 KE Y DATA
  • 29. 적절한 데이터 구조 사용의 필요성 - 트리 • 간단한 데이터 분석 7. 100000의 다음 ID 찾기 • 접근 방법 1. 해당 ID를 유지할 int higher를 아주 큰 수로 초기화 한다. 2. Email[]을 순회하며, 각 ID에 대해 100000보다 크면서 higher 보다 작은 수가 발견되면, 갱 신한다. 3. 순회가 종료된 후, higher 의 값이 100000의 다음 값이다. 29
  • 30. 적절한 데이터 구조 사용의 필요성 - 트리 • 간단한 데이터 분석 7. 100000의 다음 ID 찾기 • 유튜브 - https://youtu.be/vYbXHJKnhEg 30
  • 31. 적절한 데이터 구조 사용의 필요성 - 트리 • 간단한 데이터 분석 8. 100000의 이전 ID 찾기 • 접근 방법 1. 해당 ID를 유지할 int lower를 아주 작은 수로 초기화 한다. 2. Email[]을 순회하며, 각 ID에 대해 100000보다 작으면서 lower 보다 큰 수가 발견되면, 갱 신한다. 3. 순회가 종료된 후, lower 의 값이 100000의 이전 값이다. 31
  • 32. 적절한 데이터 구조 사용의 필요성 - 트리 • 간단한 데이터 분석 8. 100000의 이전 ID 찾기 • 유튜브 - https://youtu.be/9JbrvpKENlw 32
  • 33. 적절한 데이터 구조 사용의 필요성 - 트리 • Tree(트리) 자료구조의 필요성 • 간단한 분석 7,8 • Key 간의 전후 관계를 효율적으로 유지할 수 있는 데이터 구조의 필요성 33 8 3 10 1 6 4 7 14 13 Key DATA 최소값 최대값 8의 다음값 `