1. 데이터 전처리

- 특정 분석에 적합하게 데이터를 가공하는 작업

 

- 완결성: 필수로 기입되어 있어야 하는 데이터는 모두 입력되어야 한다.

- 유일성: 동일한 데이터가 불필요하게 중복되어 있으면 안된다.

- 통일성: 데이터가 모두 동일한 형식으로 입력되어야 한다.

 

2. 주의해야 하는 점

- 잡음 Noise: 측정 과정에서 무작위로 발생하여 측정값의 에러를 발생시키는 것. 이상치와 달리 예측하기 어려움

- 아티펙트 Digital Artifact: 어떤 기술적인 요인으로 인해 반복적으로 발생하는 왜곡이나 에러

- 정밀도 Precision: 동일한 대상을 반복적으로 측정했을 때, 각 결과의 친밀성을 나타내는 것. 측정 결과의 표준편차로 표현 가능

- 편향 bias: 측정 장비에 포함된 시스템적인 변동 (ex. 영점 조절이 되지 않은 체중계)

- 정확도 Accuracy: 평향에 영향 받음. 유효 숫자의 사용에 있어서 중요함

- 이상치 Outlier: 대부분의 데이터와 다른 특성을 보이너가, 특정 속성의 값이 다른 개체들과 달리 유별난 값을 가지는 데이터. 잡음과 다름

- 결측치 Missing Value: 값이 표기되지 않은 값

- 모순, 불일치 Inconsistent Value: 동일한 개체에 대한 측정 데이터가 다르게 나타나는 경우

- 중복 Duplicated data: 중복된 데이터 사이에 속성의 차이나, 값의 불일치가 발생하면 문제가 됨

 

3. 전처리 순서

1) 데이터 수집: 분석이나 학습에 필요한 데이터를 수집하는 작업

- 데이터 분석 및 모델 생성의 첫 과정

- 목적에 맞는 정보 수집을 위해 문제 정의 필요

 

2) 데이터 정제: 비어있는 데이터나 잡음, 모순된 데이터를 정합성이 맞도록 교정하는 작업

- 데이터를 활용할 수 있도록 만드는 과정

- 컴퓨터가 읽을 수 없는 요소의 제거 및 숫자나 날짜 등의 형식에 대해 일관성 유지

- 누락값, 불일치 값, 오류 값 수정

 

3) 데이터 통합: 여러 개의 데이터 베이스, 데이터 집합 또는 파일을 통합하는 작업

- 서로 다른 데이터 세트가 호환이 가능하도록 통합

- 같은 객체, 같은 단위나 좌표로 통합

 

4) 데이터 축소: 샘플링, 차원 축소, 특징 선택 및 추출을 통해 데이터 크기를 줄이는 작업

- 대용량 데이터에 대한 복잡한 데이터 분석은 실행하기 어렵거나 불가능한 경우가 많음

 

5) 데이터 변환: 데이터를 정규화, 이산화 또는 집계를 통해 변환하는 작업

 

4. 데이터 전처리 기법

- 집계 Aggregation

- 샘플링 Sampling

- 차원 축소 Dimensionality Reduction

- 특징 선택 Feature Subset Selection

- 특징 생성 Feature Creation

- 이산화와 이진화 Discretization and Binarization

- 속성 변화 Attribute Transformation

 

5. 전처리 전 데이터 확인

- shape: 데이터 크기 출력

- head(): 데이터 상위 5개 행 출력

- tail(): 데이터 하위 5개 행 출력

- info(): 데이터 전반적인 정보 제공 (행/열 크기, 컬럼명, 컬럼을 구성하는 값의 자료형 등)

- describe(): 데이터 컬럼별 요약 통계량 제공

 

6. 결측치 처리

- NA : 값이 표기되지 않은 값. 결측치

- 제거, 대치, 예측모델로 처리

 

1) 전체 결측치 확인

df.isnull()
pd.isnull(df)

# 결측치일 때 true 반환
# isnull -> notnull : 결측치일 때 false 반환

 

2) 인덱싱 후 결측치 개수 확인하기

df['col'].isnull()

 

3) 결측치 만들기

df.ix[[row1, row2], ['col']] = None

 

4) 전체 결측치 개수 확인

df.isnull().sum()
df.isnull().value_counts()
df.isnull().sum(1)

 

5-1) 결측치 제거

- dropna() : 판다스에서 누락 데이터를 제거하는 함수

- 목록삭제 : 결측치가 있는 행/열은 전부 삭제

df = df.dropna()           # default, 행 제거
df = df.dropna(axis = 1)   # 열 제거

 

- 단일값 삭제 : 행/열 자체가 결측치일 때, 혹은 조건부 삭제

df = df.dropna(how = 'all')   
df = df.dropna(thresh = 1)     

df = df.dropna(subset=['col1', 'col2', 'col3'], how = 'all')  # 모두 결측치일 때 해당 행 삭제
df = df.dropna(subset=['col1', 'col2', 'col3'], thresh = 2)   # 특정 열에 2개 초과의 결측치가 있을 때 해당 행 삭제

 

5-2) 대치

- 단순 대치: 중앙값, 최빈값, 0, 분위수, 주변값, 예측값 등으로 결측치 대치

- 다중 대치: 단순 대치법을 여러번! (대치 - 분석 - 결합)

 

- 판다스에서 결측치 대치하는 함수들

fillna()

# 전체 결측치를 특정 단일값으로 대치
df.fillna(0)  

# 특정 열에 결측치가 있을 경우 다른 값으로 대치
df['col'] = df['col'].fillna(0)
df['col'] = df['col'].fillna(df['col'].mean())

# 결측치 바로 이후 행 값으로 채우기
df.fillna(method='bfill')

# 결측치 바로 이전 행 값으로 채우기
df.fillna(method='pad')
replace()

# 결측치 값 0으로 채우기
df.replace(to_replace = np.nan, value = 0)
interpolate()

# 인덱스를 무시하고, 값을 선형적으로 같은 간격으로 처리
df.interpolate(method = 'linear', limit_direction = 'forward')

 

5-3) 예측 모델

- 결측값을 제외한 데이터로부터 모델을 훈련하고 추정값을 계산하고 결측치 대체

- K-NN, 가중 K-NN, 로지스틱 회귀, SVM, 랜덤 포레스트 방식 등

 

7. 중복 데이터 처리

- 중복은 언제든지 발생할 수 있지만, 중복 데이터 사이에 속성의 차이나 값의 불일치가 발생한 경우, 처리해야 함

- 두 개체를 합치거나 응용에 적합한 속성을 가진 데이터를 선택하는 등

# 중복 데이터 확인
df.duplicated(['col'])

# 중복 데이터 삭제
drop_duplicates()

# 해당 열의 첫 행을 기준으로 중복 여부 판단 후, 중복되는 나머지 행 삭제
drop_duplicated(['col'])

df.drop_duplicates(keep = )
    subset = None           # default, 특정 열 지정 X, 모든 열에 대해 작업 수행
    keep = 'first'          # 가장 처음에 나온 데이터만 남김
    keep = 'last'           # 가장 마지막에 나온 데이터만 남김
    keep = False            # 중복된 어떤 데이터도 남기지 않음

 

8. 불균형 데이터 처리

- 분류를 목적으로 하는 데이터 셋에 클래스 라벨의 비율이 불균형한 경우

- 각 클래스에 속한 데이터 개수 차이가 큰 데이터

- 정상 범주의 관측치 수와 이상 범주의 관측치 수가 현저히 차이나는 데이터

- 이상 데이터를 정확히 찾아내지 못할 수 있음

 

8-1) Under Sampling

- 다수 범주의 데이터를 소수 범주의 데이터 수에 맞게 줄이는 샘플링 방식

- Random Undersampling, Tomek's Link, CNN

 

8-2) Over Sampling

- 소수 범주의 데이터를 다수 범주의 데이터 수에 맞게 늘리는 샘플링 방식

- Random Oversampling

- ADASYN, SMOTE

 

9. 이상치 탐지 기법

1) z-score

- z = (x - μ) / σ

- 변수가 정규분포 따른다고 가정, 각 특성값이 평균에서 표준편차의 몇 배만큼 떨어져 있는지 나타냄

- z-score가 임계치보다 크거나 작은 관측치를 이상치라고 규정

- 임계치 조정함으로써 기준 조정

def z_score_outlier(df, col, thres = 3):
    z_score = (df[col] - df[col].mean()) / df[col].std()
    return df[(z_score > thres) | (z_score < -thres)]

 

2) IQR

- IQR = Q3 - Q1

- Q3 + 1.5*IQR 이상이거나, Q1 - 1.5*IQR 이하인 경우 이상치라고 규정

- 1.5 대신 다른 값 이용해 기준 조정 가능

def IQR_outlier(df, col, scale = 1.5):
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower_limit = Q1 - scale * IQR
    upper_limit = Q3 + scale * IQR
    
    return df[(df[col] > upper_limit) | df[col] < lower_limit)]

 

3) DBSCAN

- 밀도 기반 군집화 알고리즘

- 하이퍼 파라미터: eps(반경, default=0.5), min_samples(core point가 되기 위한 최소한의 이웃 수, default=5)

# 이상치 탐지
from sklearn.cluster import DBSCAN

model = DBSCAN(eps = .3, min_samples = 10)
pred = model.fit_predict(abalone)

# 이상치 개수
(pred == -1).sum()

 

10. 레이블 인코딩

- 문자열 카테고리 피처를 코드형 숫자 값으로 변환하는 것

# pandas
df.factorize()

# scikit-learn
LabelEncoder()
encoder.fit_transform() # 학습, 변환 한번에

 

11. 원핫 인코딩

- 피처값의 유형에 따라 새로운 피처를 생성해 고유값에 해당하는 컬럼에만 1 표시, 나머지 컬럼에는 0을 표시하는 방식

- 숫자의 크기 차이를 만드는 레이블 인코딩의 단점 보완

 

12. Feature Scaling

- 서로 다른 변수 값의 범위를 일정한 수준으로 맞추는 작업

- 변수 값의 범위 또는 단위가 달라서 발생 가능한 문제 예방

- 머신러닝 모델이 특정 데이터의 bias 갖는 것 방지

 

1) 표준화 Standardization

- 서로 다른 범위의 변수들을 평균이 0이고 분산이 1인 가우시안 정규분포를 가진 값으로 변환

- ScandardScaler()

 

2) 정규화 Normalization

- 변수값들을 모두 0과 1 사이의 값으로 변환하는 방식

- MinMaxScaler()

'ML & DL' 카테고리의 다른 글

[BITAmin] 선형 회귀  (0) 2023.01.23
[BITAmin] K-최근접 이웃 알고리즘  (2) 2023.01.23

출처 https://www.boostcourse.org/ds214/lecture/102086?isDesc=false 

 

프로젝트로 배우는 데이터사이언스

부스트코스 무료 강의

www.boostcourse.org

 

1. 당뇨병 데이터셋

https://www.kaggle.com/uciml/pima-indians-diabetes-database

https://www.scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html#sklearn.datasets.load_diabetes

* pregnancies : 임신횟수
* glucose : 2시간 동안의 경구 포도당 내성 검사에서 혈장 포도당 농도
* bloodPressure : 이완기 혈압 (mm Hg)
* skinThickness : 삼두근 피부 주름 두께 (mm), 체지방을 추정하는데 사용되는 값
* insulin : 2시간 혈청 인슐린 (mu U / ml)
* BMI : 체질량 지수 (체중kg / 키 (m)^2)
* diabetesPedigreeFunction : 당뇨병 혈통 기능
* age : 나이
* outcome : 당뇨병인지 아닌지, 768개 중에 268개의 결과 클래스 변수 (0 / 1)는 1이고 나머지는 0이다. 

 

2. 라이브러리 import

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

%matplotlib inline

 

3. 데이터셋 로드

df = pd.read_csv("diabetes.csv")  #주피터노트북에서 실행 -> 경로 간단
df.shape

9개의 feature가 존재하고, 768개의 데이터가 있다.

 

df.head()

결측치가 없고 다 숫자로 되어있기 때문에 이 데이터셋은 전처리를 하지 않아도 괜찮다.

 

4. 학습, 예측 데이터셋 나누기

# 8:2 비율로 구하기 위해 전체 데이터 행에서 80% 위치에 해당되는 값을 구해서 split_count 변수에 담기

split_count = int(df.shape[0] * 0.8) 
split_count

# train, test로 슬라이싱을 통해 데이터 나눔

train = df[:split_count].copy()
train.shape

test = df[split_count:].copy()
test.shape

데이터셋 자체로 학습을 하고, 예측 후 정확도까지 알아보기 위해서 위에서부터 80%는 학습데이터, 나머지 20%는 예측데이터로 분리했다.

80% 지점이 614번째 데이터이기 때문에

학습데이터는 614개,

예측데이터는 154개이다.

 

5. 학습, 예측에 사용할 컬럼

# feature_names 라는 변수에 학습과 예측에 사용할 컬럼명을 가져옴
# 여러개를 가져왔기 때문에 list 형태로 가져옴

feature_names = train.columns[:-1].tolist()
feature_names

# label_name 에 예측할 컬럼의 이름 담음

label_name = train.columns[-1]
label_name

feature는 이렇게 9개가 있는데, 우리가 예측할 것은 마지막 컬럼인 outcome (당뇨병인지 아닌지) 이기 때문에 뒤에서 두번째 컬럼인 Age까지를 feature_names에 저장하고, 마지막 outcome을 label_name에 저장했다.

 

6. 학습, 예측 데이터셋 만들기

# 학습 세트 만들기 
# 행렬

X_train = train[feature_names]
print(X_train.shape)
X_train.head()

앞에서 나눈 80%의 학습데이터셋 train에 feature_names 컬럼을 적용하여 학습데이터셋 X_train 을 만들었다.

 

# 정답 값
# 벡터

y_train = train[label_name]
print(y_train.shape)
y_train.head()

마찬가지로 앞에서 나눈 80%의 학습데이터셋에 label_name 컬럼을 적용하여 학습할 때 정답을 맞추는 데이터셋 y_train을 만들었다.

 

# 예측에 사용할 데이터셋

X_test = test[feature_names]
print(X_test.shape)
X_test.head()

 

다음은 앞에서 나눈 20%의 예측데이터셋에 feature_names를 적용하여 학습한 알고리즘에 적용할 예측데이터셋 X_test를 만들었다.

# 예측의 정답값
# 실전에는 없지만, 실전 적용 전 정답을 알고있기 때문에 내가 만든 모델의 성능을 측정해봐야 함

y_test = test[label_name]
print(y_test.shape)
y_test.head()

마지막으로, 예측 모델의 성능을 측정하기 위한 예측 정답 데이터셋을 만들었다.

20% 예측 데이터셋에 label_name을 적용한 데이터셋으로, 실전 예측 문제에는 없지만 이 예제에서는 알고있는 값이기 때문에 모델의 성능을 측정할 때 사용할 것이다.

 

7. 머신러닝 알고리즘 가져오기

from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()
model

decision tree classifier 알고리즘을 사용할 것이기 때문에 이 알고리즘을 model 변수에 저장해준다.

 

8. 학습 (훈련)

model.fit(X_train, y_train)

아주 간단하다.

머신러닝 알고리즘.fit(훈련데이터, 정답데이터) 형식이다.

 

9. 예측

y_predict = model.predict(X_test)
y_predict[:5]

학습이 기출문제와 정답으로 공부를 하는 과정이었다면, 예측은 실전 문제를 푸는 과정이라고 볼 수 있다.

위에서 5개 데이터의 예측 결과를 보자면 이와 같다. 1은 당뇨병, 0은 당뇨병이 아니라는 것이다.

 

10. 트리 알고리즘 분석

from sklearn.tree import plot_tree

#plot_tree(model, 
#         feature_names = feature_names)  
# 글자로 나옴

# 시각화

plt.figure(figsize = (20, 20))

tree = plot_tree(model, 
                 feature_names = feature_names,
                filled = True,
                fontsize = 10)

 

# 피처의 중요도 표시 

model.feature_importances_

각 피처의 중요도를 알려준다.

 

# 피처의 중요도 시각화

sns.barplot(x = model.feature_importances_, y = feature_names)

seaborn을 활용해서 각 피처의 중요도를 시각화했다.

 

11. 정확도(Accuracy) 측정하기

# 실제값 - 예측값 -> 같은 값은 0으로 나옴
# 여기서 절대값을 씌운 값 = 1 인 값이 다르게 예측한 값임

diff_count = abs(y_test - y_predict).sum()
diff_count

# decision tree 예측할 때마다 다르게 예측할 수 있기 때문에 이 값은 다르게 나올 수 있음
# 항상 같게 하려면 model = DecisionTreeClassifier(random_state = 42)처럼 random_state 지정

우리는 예측 데이터셋의 정답도 알고있기 때문에 모델의 정확도를 측정할 수 있다.

outcome 값은 0 또는 1이기 때문에 실제값에서 예측값을 뺀 값의 절대값이 1인 값이 틀린 것이라고 볼 수 있다.

실제값에서 예측값을 뺀 값들의 합을 (틀린 예측의 수) diff_count 변수에 저장했다.

 

# 예측의 정확도 구하기 -> 100점 만점에 몇 점인지

(len(y_test) - diff_count) / len(y_test) * 100

예측데이터셋에서 틀린 예측의 수를 뺀 비율로 정확도를 구했더니 약 69%가 나왔다.

decision tree는 예측할 때마다 가지의 수 등의 원인으로 다르게 예측할 수 있다.

이를 고정하려면 알고리즘을 불러올 때 속성에서 random_state 값을 지정해주어야 한다.

 

# 위처럼 직접 구할 수도 있지만, 미리 구현된 알고리즘을 가져와 사용한다

from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict) * 100

 

이건 사이킷런에 미리 구현된 알고리즘으로 정확도를 계산한 것이다. 위와 같은 값이다.

 

# model 의 score로 점수 계산 (정답값 y_test 알고있을 때)

model.score(X_test, y_test)

이건 model 의 score로 점수를 계산한 것이다. 정답값을 알고있을 때 사용하며, 위에서의 정확도와 같다.

출처 https://www.boostcourse.org/ds214/joinLectures/28155

 

프로젝트로 배우는 데이터사이언스

부스트코스 무료 강의

www.boostcourse.org

 

1. Scikit Learn

- 대표적인 파이썬 머신러닝 라이브러리

- classification, regression, clustering, dimensionality reduction, model selection, preprocessing 등 알고리즘

 

- supervised machine learning

clf = RandomForestClassifier()  # 머신러닝 모델 (트리모델)

clf.fit(X_train, y_train)  # 학습, x는 학습 데이터, y는 정답

 

y_pred = clf.predict(X_test)  # 예측

clf.score(X_test, y_test)  # 확인, 현실 문제에서는 y_test 알 수 없을 것, 하지만 임의로 데이터를 나누어 학습시켰다면 알 수 있음

 

- unsupervised transfomations

pca = PCA()  # 비지도학습 중 차원축소기법

pca.fit(X_train)

X_new = pca.transform(X_test)

 

- estimator.fit(X, [y])

estimator: 지정해줄 수 있는 알고리즘 모델

fit -> 학습 (비지도학습은 y 없음)

 

* estimator.predict -> classification, regression, clustering

* estimator.transform -> preprocessing, dimensionality reduction, feature seelction, feature exteaction

 

2. 데이터 검증

 

데이터에 알맞는 모델과 파라미터를 찾기 위해 훈련 데이터로 테스트를 진행한다.

 

1. 데이터를 training data와 test data로 구분한다.

2. cross-validation을 통해 여러 fold로 나눈다.

3. 나눠준 폴더의 개수만큼 훈련을 진행한다.

4. 예를 들어 5개의 폴더로 나누면 fold1부터 5까지 하나씩 test data로 놓고 나머지로 training 후 test data로 성능을 확인한다.

5. 각각의 fold에 있는 점수의 평균을 내서 가장 좋은 점수를 내는 모델과 파라미터를 찾는다.

 

clf = SVC(파라미터)

clf.fit(X_train, y_train)

 

3. grid searches

이러한 과정을 거쳐 알맞은 모델과 파라미터를 구한다.

 

4. 기본 예제

from sklearn imoprt tree
X = [[0, 0], [1, 1]]
y = [0, 1]

clf = tree.DecisionTreeClassifier()
clf.fit(X, y)

clf.predict([[2., 2.]])

clf.predict_proba([[2., 2.]])

 

결정 트리 분류 모델에 x = [0, 0] 일  때 y = 0이고, x = [1, 1] 일 때 y = 1인 훈련 데이터를 학습시켰다.

그리고 x = [2., 2.]일 때 y값을 예측했더니 1이 나왔다.

 

estimator.predict_proba 는 예측값을 비율로 출력하는 함수이다.

 

5. iris dataset 예제

from sklearn.datasets import load_iris
from sklearn import tree
import matplotlib.pyplot as plt

X, y = load_iris(return_X_y = True)
X, y              # decisiontree 알고리즘이 숫자만 읽을 수 있기 때문에 카테고리 데이터 -> 숫자화

사이킷런 라이브러리에 내장되어 있는 아이리스 데이터셋을 불러왔다.

원래는 문자로 된 범주형 데이터지만, decision tree 알고리즘이 숫자만 읽을 수 있기 때문에 숫자로 변환한 것이다.

 

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)

plt.figure(figsize = (20, 10))
t = tree.plot_tree(clf.fit(X, y), filled= True)

 

decision tree classifier 를 이용하여 데이터를 학습시킨 트리 모델이다.

이를 통해 중요한 변수가 무엇인지 등을 알 수 있다.

 

더 그래프를 보기좋게 그리기 위해서 graphviz 라이브러리를 활용할 수 있다. 하지만 설치가 조금 까다롭기 때문에 나중에 다시 해보려고 한다.

수업 출처) 숙명여자대학교 소프트웨어학부 수업 "데이터사이언스개론", 박동철 교수님

 

1. Data Science Process

 

데이터 사이언스의 기본 원리는 데이터 마이닝이다. 데이터 마이닝은 상당히 잘 이해된 단계를 가진 process이다.

 

데이터 사이언티스트는 실생활의 문제를 하위 작업으로 분리한다.

하위 작업들의 솔루션들이 모여서 전체적인 문제를 해결할 수 있다.

 

문제의 기저가 되는 공통적인 데이터 마이닝 작업이 존재한다. 

(ex) classification, regression, clustering, association rule discovery

 

좋은 데이터 과학자가 되기 위해서는 다양한 공통적인 데이터 마이닝 작업을 해결하는 방법을 알아야 하고, 문제를 이렇게 공통적인 작업들로 나눌 수 있어야 한다.

 

각각의 하위 작업들은 그에 맞는 데이터 마이닝 기법으로 병렬처리 된다. 작업을 나눌 때 마이닝 방법을 생각해놓는 것이 좋다.

 

2. Common Data Mining Tasks

 

- classification : 분류 

- regression (a.k.a. value estimation) : 회귀 (value 추정)

- similarity matching : 유사도 매칭

- clustering : 군집화

- co-occurrence grouping (a.k.a. association rule discovery) : 동시발생 (관계 규칙 발견)

- profiling (a.k.a. behavior description) : 프로파일링 (행동 묘사)

- link prediction : 연관성 예측 (ex. recommendation)

- data reduction : 데이터 사이즈 줄이기 (불필요한 데이터 제거, 형태 변환 등)

- causal modeling : 인과관계 모델링

 

2-1. Classification 분류

 

모집단의 각 개체가 어떠한 클래스의 집합에 속할지 예측하는 방법이다. 

 

 

주로 상호배타적인 클래스로 분류할 때 사용한다.

분류에서 끝나는 것이 아니고, 분류를 학습하여 "예측" 하는 데 활용한다. → 지도학습에 활용

 

각각의 개체를 instance라고 하고, 속성을 attribute라고 한다.

예측의 대상이 되는 속성(클래스)를 classificaiton target 이라고 한다.

그리고 그 타겟들은 이미 상호배타적으로 설정되어 있다.

 

예를 들면, 연봉, 성별, 나이 등의 데이터로 이 사람이 어떠한 물건을 살지 안살지 예측하는 것이다.

이때 타겟은 "물건을 산다" 라는 속성이고, 클래스는 Yes 또는 No 이다.

 

일반적인 과정 : 훈련 데이터셋 → 데이터의 클래스를 묘사하는 모델 설정 (모델링) → 새로운 인스턴스가 주어질 때, 해당 모델을 적용하여 추측된 클래스 생성

 

비슷한 작업으로 scoring이나 class probability estimation 이 있다.

이는 각 개체가 각 클래스에 속할 확률을 도출하는 것이다.

예를 들어, 위의 예시에서 (Lee, 42000, male, 44) → (YES : 80%, NO : 20%) 이렇게 각 개체에 대해 클래스를 가질 확률을 계산한다.

 

2-2. Regression 회귀

 

각 개체가 특정 변수에 대해 어떠한 숫자 값을 가질 것을 예측하는 모델이다.

value estimation 이라고도 불린다.

 

 

예를 들어, 특정한 키의 사람은 어떤 값의 몸무게를 가질지 예측하는 것이다.

 

일반적인 과정 : 훈련 데이터셋이 주어질 때, 각 개인에 대해 특정 변수 값을 묘사하는 모델 설정 → 새로운 개체에 모델을 적용하여 측정된 값 생성

 

 

classification과의 차이점

- classification은 인스턴스의 "클래스"를 예측하는 것이다.  (ex. YES / NO)

- regression은 인스턴스와 관련된 "숫자 값"을 예측하는 것이다.   (ex. 178)

 

2-3. Similarity Matching 유사도 매칭

 

알고있는 데이터를 기반으로 유사한 데이터를 찾는 모델이다.

 

 

일반적인 과정 : 두 개체 사이의 거리 측정 → 한 개체에 대해서 가장 작은 거리를 갖는 개체 탐색

 

데이터의 종류가 다양하기 때문에 거리 측정에서는 유클리드 거리, 코사인 거리 등 다양한 종류의 거리를 사용한다.

 

(유클리드 거리) 예를 들어서, User 3 = (5, 4, 7, 4, 7), User 4 = (7, 1, 7, 3, 8) → distance ≅ 3.87

 

2-4. Clustering 군집화

 

비슷한 개체를 하나의 군집으로 묶는 모델이다. 

유사도를 측정하기 위해 "거리"를 사용한다. 

 

산점도에서 자연스럽게 형성되는 그룹을 분석할 때 유용하다. → 비지도학습에 활용

 

 

예를 들면, 주로 어떤 종류의 고객을 보유하고 있는지 파악할 때 사용된다.

 

2-5. Co-occurrence grouping 동시발생

 

개체들 사이의 동시 발생을 통해 관계를 찾는 모델이다. 

 

예를 들어서, 마트 판매 상품을 분석해보니 기저귀를 살 때 맥주도 같이 사는 손님의 비율이 높았다.

 

이와 같이 분석을 통해 특별 프로모션, 상품 진열, 세트 판매, 추천 등 마케팅에 활용할 수 있다.

 

2-6. Profiling 행동 특성 묘사

 

개인이나 집단의 전형적인 행동을 특징짓는 모델이다. 

 

normal한 행동특성에서 벗어난 행동을 탐지할 때 매우 유용하다.

프로필은 normal한 행동을 묘사하기 때문에, 갑자기 그것에 벗어난 행동을 할 때 알림을 주는 것이다.

 

한 예시로는 사기 탐지에 사용된다.

 

2-7. Link Prediction 연관성 예측

 

데이터 아이템들 사이의 연관성을 예측하는 모델이다. 

일반적으로 연결고리가 존재한다고 제안하고, 그 강도를 추정함으로써 사용된다.

 

"추천" 알고리즘에 매우 유용하다. SNS에서 친구를 추천해주거나, 넷플릭스 등에서 영화를 추천할 때 주로 사용된다.

 

2-8. Data Reduction 데이터 사이즈 감소

 

큰 데이터셋을 중요한 정보를 많이 포함하는 작은 데이터셋으로 사이즈를 줄이는 것이다.

 

작은 데이터셋은 다루기 쉽고, 정보나 향상된 인사이트를 보다 더 잘 드러낸다. 

하지만, 정보의 손실 또한 일어나기 쉽다는 단점이 있다.

 

2-9. Causal Modeling 인과관계 모델링

 

다른 사건에 실질적으로 영향을 주는 사건을 찾는 모델이다. 

 

예를 들어 담배피는 사람들 중에 이가 누런 사람과 폐암에 걸린 사람들이 있다고 할 때,

이 누래짐과 폐암이 담배때문에 발생한건지, 아니면 그냥 그런 사람들이 담배를 피는건지 인과관계를 파악하는 것이다.

 

3. Supervised 지도학습 vs. Unsupervised 비지도학습 Methods

 

3-1. Supervised

- 지도학습은 training data를 통해 이미 정답을 알고 학습을 시키는 것이다.

- 명시되어 있는 특정한 타겟이 존재한다.

- (ex) classification

 

Supervised data mining

- 알고싶은 특정한 타겟이 존재한다 → 답이 존재한다.

- training dataset이 반드시 존재한다 → 각각의 target value가 존재하는

- target value는 label 이라고도 부른다. 

- (ex) classification, regression, causal modeling

 

3-2. Unsupervised

- 비지도학습은 정답을 모르고 학습을 시키는 것이다.

- 정의해야 할 명시되어 있는 특정한 타겟이 없다.

- (ex) clustering

 

Unsupervised data mining

- 특정한 타겟이 아닌, 어떠한 패턴을 찾는 것이 목적이다.

- training dataset이 필요하지 않다.

- (ex) clustering, co-occurrence grouping, profiling

 

4. Classification vs. Regression

 

둘 다 supervised data mining task이다.

 

4-1. Classification

- 타겟이 카테고리 값이다. (ex. YES / NO, HIGH / MID / LOW)

- (ex) 이 고객이 인센티브를 받으면 이 상품을 구매할까? → YES / NO

고객이 인센티브를 받으면 (S1, S2, S3) 중에서 어떤걸 구매할 가능성이 높을까? → S1 / S2 / S3

 

4-2. Regression

- 타겟이 숫자 값이다. (ex. 2.5, 68)

- (ex) 이 고객이 이 서비스에 얼마를 쓸까? → $2,500

 

5. Data Mining and its Results

데이터 마이닝에는 두가지 단계가 있다.

 

5-1. Mining phase

: Historical Data (Training Data) → Data mining → Model

 

- training data를 통해 패턴 찾기 or 모델링

- training data는 모든 값이 명시되어 있어야 한다.

 

5-2. Use phase

: New data item → Model → Result

 

- 새로운 데이터에 패턴이나 모델 적용 → 예측

- 새로운 데이터는 알려지지 않은 class value가 존재한다.

 

6. Data Mining Process

: CRISP - DM (Cross Industry Standard Process for Data Mining)

산업을 통틀어서 데이터 마이닝을 위한 표준화된 Process이다.

 

: Business Understanding → Data Understanding → Data Preparation → Modeling → Evaluation → Deployment

 

기본적인 틀은 저 순서이고, 계속적인 평가를 통해 이전 과정으로 돌아가기도 하고 수정을 거듭하면서 점차 성능이 향상된다.

 

6-1. Business Understanding

- 해결해야 할 비즈니스 문제를 이해한다.

    -대부분 모호하거나 폭넓거나 이해하기 어려운 문제이다.

 

- 해결해야 할 비즈니스 문제를 하나 이상의 데이터 사이언스 문제로 간주한다.

    - 데이터 과학자들에 의해 공식화된 창의적인 문제가 성공의 열쇠가 된다.

 

- 문제를 여러 개의 하위 작업으로 나누고, 각각의 데이터 사이언스 문제를 해결할 방법을 디자인한다.

    - classification, regression, clustering 등

    - 각 문제에 맞는 효과적인 툴을 사용할 수 있다.

 

- 문제를 재구성하고 해결책을 설계하는 것은 반복적인 발견의 과정이다.

 

6-2. Data Understanding

- Data

    - 세운 해결책들에 이용가능한 원상태의 데이터셋이 존재한다.

    - (ex) a customer database, a transaction database, a marketing response database

 

- 각 데이터의 강점과 한계점을 이해한다.

    - 문제와 완벽하게 알맞는 데이터는 거의 존재하지 않는다.

    - 각 데이터로 할 수 있는 것과 없는 것을 찾고, 해당 데이터로 문제를 해결할 수 있을지 생각한다.

    - (ex) classification 을 하기 위해서는 라벨이 존재하는 데이터가 필요하다. 

 

- 데이터에 더 투자가 필요한지 결정한다.

    - 몇몇 데이터는 무료이지만, 몇몇 데이터는 얻기 위해 노력이 필요하거나 돈을 지불해야 한다.

 

6-3. Data Preparation

- 데이터를 정리해서 보다 유용한 형태로 변환한다.

    - 몇몇 데이터 분석 툴들은 특정한 형태의 데이터만 요구하기 때문이다.

 

- 일반적인 예시들

    - converting data to tabular format : 테이블 형식의 데이터로 변환

    - removing or inferring missing values : 결측치 제거하거나 유추

    - converting data to different types : (ex) 'male', 'female' → 0, 1  타입 변경 

    - normalizing or scaling numerical values : (ex) [-100, 100] → [0, 1]  범위 조절

    - cleaning data : (ex) Age : 999 → ? 데이터 정리

 

- 데이터 마이닝 결과의 질은 이 단계에 달려있다.

    - (ex) 결측치, 비정상 값, 정규화되지 않은 값

 

6-4. Modeling

- 가장 주요한 단계이다.

 

- output

   - 데이터의 규칙을 나타내는 모델이나 패턴의 일종을 생성한다.

 

- 데이터 마이닝의 근본적인 아이디어를 이해하는 것이 매우 중요하다.

    - 존재하는 데이터 마이닝 기술과 알고리즘을 이해하자.

 

6-5. Evaluation

- 데이터 마이닝 결과를 엄격하게 평가한다.

    - 다음 단계로 넘어가기 전에 그 결과가 유효하고 신뢰할 수 있다는 확신을 얻어야 한다.

 

- Examples

    - 모델의 예측 정확도 추정 (ex. 90%?)

    - training data를 넘어서는 모델의 보편성 확인 (overfitting 되지 않았는지)

    - 허위 경보의 비율 추정

 

- 결과를 즉각적으로 적용하는 대신, 일반적으로 통제된 상황에서 모델을 먼저 테스트하는 것이 바람직하다.

    - 그것이 더 쉽고 저렴하고 빠르고 안전하다.

 

- 데이터 사이언티스트는 그 모델과 평과 결과를 다른 데이터 사이언티스트들 외에 이해관계자들에게 쉽게 설명해야 한다.

    - 매니저, 고위 관계자, 프로그래머 등

 

 

6-6. Deployment

- 실제 상황에 데이터 마이닝 결과 (시스템)을 적용한다.

 

- 일반적인 시나리오

    - 새로운 예측 모델이 구현된다.

    - 그 모델은 기존의 정보 시스템과 통합된다.

 

- 많은 경우

    - Data Science Team : 프로토타입을 제작하고 평가한다.

    - Data Engineering Team : 모델을 생산 시스템에 적용한다.

 

- 적용 이후, 과정은 첫번째 단계로 되돌아간다.

    - 이 과정을 통해 얻은 통찰력과 경험을 통해 더욱 개선된 해결책을 제시할 수 있다.

 

7. Other Analytics Techniques & Technologies

- 데이터 마이닝 외에도 데이터 분석을 위한 다양한 기술들이 있다.

    - 통계학, 데이터베이스 시스템, 머신러닝 등

 

- 이러한 기술들을 익혀두는 것이 중요하다. 

    - 그것들의 목표가 무엇인지, 어떠한 역할을 하는지, 그것들의 차별점이 무엇인지

 

- 데이터 과학자에게 중요한 기술은 어떤 종류의 분석 기술이 특정한 문제를 해결하는데 적합한지 인지할 수 있는 것이다.

 

7-1. Statistics 통계학

- 분석의 바탕이 되는 많은 지식들을 제공한다.

 

- Examples

    - Data Summary (means, median, variance 등)

    - Understanding different data distributions

    - Testing hypotheses : 가설 테스트

    - Quantifying uncertainty : 불확실성 증명

    - Measuring correlation : 연관관계 측정

 

- 많은 기술들이 데이터에서 도출하는 모델이나 패턴들은 통계학에 근본을 두고 있다.

 

7-2. Database Querying

- Database system

    - 데이터 삽입, 질의 (쿼리), 업데이트 및 관리 할 수 있는 소프트웨어 응용 프로그램 

 

- Database query

    - 데이터나 데이터의 통계에 대한 특정한 요청

    - 데이터를 통해서 얻고자 하는 질문

        - (ex) 지정된 데이터 검색, 정렬, 요약 통계량 계산

    - 기술적 언어로 공식화되고 데이터베이스 시스템에 질문을 제기함

        - (ex) SQL (Structured Query Language)

SQL문 예시

 

- Data science vs. databases technologies

    - 데이터 사이언스에서 데이터베이스 시스템에 저장된 관심있는 데이터를 찾거나 조사하기 위해 데이터베이스 기술을 사용할 수 있다.

       

 

7-3. Machine Learning

- 컴퓨터 시스템이 명시적인 프로그래밍 없이, 데이터를 가지고 학습할 수 있는 능력을 제공하는 것이다.

    - 인공지능의 한 분야이다.

 

- 모델을 개발하고 모델 성능을 향상시키는 데에 데이터를 활용한다.

    - (ex) decision tree, artificial neural networks (deep learning), support vector machines, clustering, bayesian networks,...

 

- 하지만,이들 사이의 경계가 모호해졌다.

 

- 데이터 마이닝과 머신러닝은 긴밀히 연결되어있다.

    - 데이터 마이닝의 한 분야가 머신러닝으로 파생되기 시작하였다.

    - 데이터 마이닝은 머신러닝의 한 가지이다.

        - KDD (Knowledge Discovery and Data mining)

        - 둘 사이에 기술과 알고리즘은 공유된다.

    - 데이터로부터 유용하고 유익한 패턴을 찾아낸다.

 

- 그럼에도 불구하고 머신러닝은 성능향상, 인지능력 향상에 더욱 집중되어 있다.

    - (ex) robotics and computer vision

    - (ex) agent가 이 환경에서 학습된 지식을 어떻게 활용하는가

 

- 데이터 마이닝은 데이터로부터 패턴, 규칙을 찾는 것에 더욱 집중되어 있다. 

    - 상업적 응용 프로그램 및 비즈니스 문제에 특히 활용된다.

 

8. Examples of Applying These Techniques

- "어떤 고객이 가장 수익성이 있는가?" : Database systems (profiable can be calculated from existing data., not predict)

- "수익성이 있는 고객과 평균의 고객들 간에 정말 차이가 있는가?" : Statistics (hypothesis testing)

- "하지만 이 고객들은 정말 누구인가? 특징화 할 수 있는가?" : Data mining (profiling)

- "어떤 특정한 새로운 고객이 수익성이 있을까? 얼마나?" : Data mining (classification, regression)

수업 출처) 숙명여자대학교 소프트웨어학부 수업 "데이터사이언스개론", 박동철 교수님

 

1. Intro

 

데이터 사이언스는 다양한 형태로부터 얻은 데이터로 지식이나 인사이트를 도출하는 융합적인 학문이다.

크게 컴퓨터 사이언스, 수학과 통계학, 경영학적 지식이 요구된다. 

 

데이터 엔지니어는 데이터를 다루기 위한 소프트웨어와 시스템을 디자인하고 개발한다. 프로그래밍과 데이터베이스 지식을 필요로 한다. 가장 중요한 것은 데이터를 분석하기 전 전처리하는 과정을 맡는다는 것이다.

 

통계학자는 통계학적 이론과 방법을 실생활에 적용하여 문제를 해결한다. 통계학과 수학적 지식을 필요로 한다.

 

데이터 사이언티스트는 쉽게 말해서 둘 다 하는 사람이다. 분석적이고 기술적인 능력을 통해서 데이터로부터 인사이트를 도출한다. 위에서 말했듯이 프로그래밍, 통계, 경영학적 이해를 바탕으로 한다.

 

데이터 사이언티스트가 주로 필요로 하는 기술은 데이터 분석, 통계 분석 패키지 (R), 파이썬, 데이터 모델링, 머신러닝 등이다. 

주로 IT & 서비스 직군에서 근무하며, 교육이나 금융 분야에서도 데이터 과학자를 필요로 한다.

 

2. Data Science

 

최근 경영 산업은 전반적으로 데이터를 수집하는 능력을 가지고 있다. 

전략, 제조, 마케팅, 공급망 관리 등 모든 경영학적 측면에서 데이터 수집을 필요로 하고 있다. 

 

이제 거대한 양의 데이터가 생산되면서 대부분의 기업들은 경쟁우위로써 데이터 수집에 집중하고 있다.

과거에는 통계학자와 분석가가 데이터셋을 수작업으로 탐색했다면, 이제는 데이터의 양이 커지면서 수작업으로는 분석을 하기 어려워졌다.

컴퓨터와 네트워크가 중요해진 것이다.

이를 통해 데이터 과학의 원리와 기술을 더 넓은 분야에 적용하게 되었다.

 

3. Data Mining

 

데이터 마이닝은 큰 데이터셋에서 패턴을 찾는 과정이다.

경영학적 측면에서는 주로 고객의 행동을 분석하는 데 활용한다. 

고객의 패턴을 분석하여 타겟 마케팅, 온라인 광고, 추천, 신용 분석, 사기 탐색 등에 적용할 수 있다.

 

4. Data Science vs. Data Mining

 

데이터 사이언스는 데이터에서 지식을 도출하도록 하는 일련의 근본적인 원칙이다.

데이터 마이닝보다 좀 더 넓은 의미로 사용된다.

 

데이터 마이닝은 데이터로부터 숨겨진 패턴을 찾는 과정으로, 보통 데이터 수집 및 가공 이후 첫번째로 수행되는 과정이다.

즉, 데이터 마이닝 기술은 데이터 사이언스의 근본 원리를 실체화한 것이라고 볼 수 있다.

 

데이터로부터 지식을 도출할 때에는 자명하지 않으면서 수치적으로 도출되어야 한다. 

예를 들면 허리케인이 지나간 후 생수의 판매율이 20% 증가했다던가, 어떠한 과자가 기존보다 7배 많이 팔렸다던가 하는 형식으로 말이다.

 

또 한 가지 유명한 예시는 미국의 통신사 예시이다.

제한된 예산으로 고객이 다른 통신사로 넘어가는 것을 막을 방법을 찾아야 한다.

미국의 통신사 MegaTelco는 일반적으로 휴대폰 고객의 20%는 계약이 만료되면 다른 통신사로 떠나간다.

이제 휴대폰 시장이 포화되었기 때문에 통신사들은 고객을 유지하려고 노력하고 있다. 

 

회사는 몇몇 고객들의 계약 만료 전에 특별 상품을 제공하려고 한다.

이때 어떻게 최대한 고객이탈을 막을 수 있도록 상품을 제공할 고객을 고를 수 있을까.

이럴때 데이터 사이언스가 활용되는 것이다.

 

5. Data-Driven Decision Making (DDD)

 

데이터기반 의사 결정은 단순한 직관보다는 데이터 분석에 기초한 의사 결정이다. 

예를 들어, 광고를 할 때 한 사람의 경험과 직관에 기반하기보다는 소비자가 다른 광고에 어떻게 반응하는지에 대한 데이터 분석에 기초한다.

 

이 DDD에 데이터 사이언스가 필요하다. 

자동화된 데이터 분석을 통해 현상을 이해하기 위한 방법, 과정, 기술 등을 제공한다.

 

통계적으로 기업이 데이터기반 의사결정을 활용할수록 생산력이 4-6% 증가한다.

 

예를 들어, 마트의 고객은 주로 본인이 가던 곳만 가기 때문에 변화를 찾기 어렵지만, 아기가 태어남을 기점으로 한 번의 변화가 일어날 수 있다. 따라서 많은 상업자들은 아기가 태어난 것을 알고 새로운 고객에게 특별 상품(할인권 등)을 제공한다. 

하지만 미국의 마트 '타겟'은 이것을 넘어서서 아기가 태어나기 전, 임신 전부터 그것을 예측하여 마케팅을 했다. 그 결과 그들의 경쟁자보다 더 높은 이익을 얻을 수 있었다.

 

점점 더 많은 비즈니스 결정이 컴퓨터 시스템에 의해 자동화되고 있다.

미리 설계된 알고리즘을 통해 거의 실시간으로 데이터를 분석하고 의사 결정을 하고 있다.

 

예를 들면, 은행과 통신사에서는 사기 범죄를 제어하고, 소매 업체에서는 상품화 결정 시스템을 자동화한다. 아마존과 넷플릭스는 추천 시스템을, 광고 회사는 실시간 광고 결정 시스템을 자동화한다. 

 

6. Data Engineering vs. Data Science

 

데이터 엔지니어링과 데이터 사이언스는 다르다.

 

데이터 엔지니어링은 데이터를 처리하는 기술로, 시스템, 소프트웨어 디자인, 개발, 유지 및 보수 등을 포함한다. 

오라클과 같은 데이터 베이스 시스템과 하둡, 스파크와 같은 빅데이터 플랫폼 등의 소프트웨어를 개발하고 유지한다.

이들을 통해서 데이터 사이언스를 support한다.

 

데이터 사이언스는 앞에서도 말했지만, 데이터를 모으고 탐색하고 분석한다. 

데이터 엔지니어링 기술을 활용해서 데이터에 접근할 수 있다. 

 

7. Data Science and Big Data

 

빅데이터는 네트워크와 컴퓨팅 기술의 발달로 전통적인 데이터 처리 시스템으로 관리하기에는 너무 큰, 따라서 새로운 처리 기술이 필요한 데이터셋을 말한다.

 

빅데이터의 4가지 특징으로는 크기, 다양성, 속도, 정확성이 있다.

 

빅데이터 기술은 위의 4가지 특징 (4V)을 다룬다.

이를 위해 데이터 사이언스를 활용한다.

예시로는 Hadoop, HBase, MongoDB, Spark 등이 있다.

 

데이터와 데이터로부터 유용한 지식을 도출하는 능력은 핵심 전략 자산으로 간주되어야 한다.

이는 최상의 결과를 내기 위해 적절한 데이터와 데이터 사이언스 기술 두가지 모두에 투자해야한다는 것이다.

 

8. Data-Analytic Thinking

 

실생활 문제에 직면했을 때, 우리는 그 문제를 "분석적으로" 바라보아야 한다. 데이터가 성능을 향상시킬 수 있는지 여부와 그 방법을 정량적으로 평가해야 한다.

 

데이터 분석적 사고는 일련의 근본적인 개념과 원칙에 의해 가능해진다. 시스템적인 틀(framework) 을 구조화해야 한다.

 

데이터 분석적 사고를 통해서 다른 사람들과 능숙하게 교류할 수 있고, 데이터기반 의사 결정을 향상시킬 수 있으며 데이터 중심의 경쟁 위협을 바라보는 사고를 기를 수 있다.

 

최근 산업, 기업에서는 수익을 높이고 비용을 절감하기 위해 데이터 사이언스 팀을 만들고 있고, 주요 전략 요소에 데이터 마이닝을 사용하고 있다.

 

데이터 사이언티스트가 아니더라도 매니저, 마케터, 경영 전략가 등의 직업에서도 데이터 사이언스를 활용한다. 

 

9. Example of Fundamental Concepts

 

1) 자료에서 유용한 지식을 추출하기 위해 체계적인 절차를 밟는다.

 

체계적인 절차란 명확히 정의된 단계를 말한다. (ex) 문제 분석 -> 모델링 -> 면밀한 평가

이러한 과정은 데이터에 대한 우리의 생각을 구조화하기 위한 틀을 제공한다.

 

2) 대량의 데이터에서 관심있는 개체에 대한 정보 속성을 찾는다.

 

즉, 우리에게 필요한 정보를 제공하는 변수를 찾는 것이다.

 

3) overfitting을 피한다.

 

모델링을 하는 이유는 새로운 데이터를 "예측"하기 위함이다. 

overfitting된 모델은 특정 training data에만 적합할 뿐, 새로운 데이터에 대해서는 좋은 성능을 낼 수 없다. 

 

4) 마이닝 결과를 신중하고 객관적으로 평가한다.

 

우리가 도출한 결과가 얼마나 더 나은지 공식화 해야 한다.

단순히 더 낫다가 아니라 얼마나 더 나은지 보여주어야 한다.

 

10. Engineering side of Data Science

 

데이터 사이언티스트는 두가지 종류의 능력을 갖춰야 한다.

 

1) Science

- 이론적인 개념과 원칙을 실제 상황에 적용하는 능력

- ex) logistic regression, support vector machines

 

2) Technology

- 트렌드에 맞는 (상황에 맞는, 인기있는) 프로그래밍 언어와 툴을 사용하는 능력

- ex) Hadoop, MongoDB, Spark, TensorFlow 

 

최근에는 특정 종류의 소프트웨어 툴에 익숙하지 않은 데이터 과학자를 상상하기 힘들다. 

그럼에도 우리는 기술보다 과학에 조금 더 집중해야 한다. 우세한 기술들은 빠르게 바뀌기 때문이다.

모든 과정의 출처는 개인적으로 수강 중인 강의에 있습니다. 

 

1. 라인 차트 꾸미기 (하이라이트, 주석)

 

2. 영역 차트, 워드 클라우드, 히스토그램

 

3. 방탄소년단 앨범 워드 클라우드

앨범을 선택하면 그에 따른 워드 클라우드 사진을 보여준다.

워드 클라우드는 파이썬으로 만든 것이다. (강사님이)

 

'Software > Tableau' 카테고리의 다른 글

[Tableau] 기초 시각화 연습  (0) 2021.02.07
[Tableau] 기초 연습  (0) 2021.02.07
[Tableau] 태블로 & 지도 시각화  (2) 2021.01.17

1. 색으로 시각화한 라인 차트

 

 

2. 맵에 시각화한 차트

 

3. 크기로 시각화한 막대 차트

 

4. 원과 색으로 시각화한 파이 차트

'Software > Tableau' 카테고리의 다른 글

[Tableau] 초급 데이터 시각화 활용  (0) 2021.02.07
[Tableau] 기초 연습  (0) 2021.02.07
[Tableau] 태블로 & 지도 시각화  (2) 2021.01.17

따로 명시하지 않은 모든 데이터는 태블로에 기본적으로 저장되어 있는 Sample - Superstore 데이터를 활용했다.

 

1. 막대 차트

 

 

2. 서버 데이터 - 구글 스프레드 시트 활용하여 연결

 

www.worldometers.info/coronavirus/

 

Coronavirus Update (Live): 106,400,532 Cases and 2,321,743 Deaths from COVID-19 Virus Pandemic - Worldometer

COVID-19 Coronavirus Pandemic Last updated: February 07, 2021, 10:11 GMT Coronavirus Cases: 106,400,532 Active Cases 25,876,367 Currently Infected Patients 25,917,355 (99.6%) in Mild Condition 104,335 (0.4%) Serious or Critical Show Graph Closed Cases 80,5

www.worldometers.info

 

 

3. 데이터 전처리, 피벗 사용

 

 

4. 데이터 관계

 

 

 

'Software > Tableau' 카테고리의 다른 글

[Tableau] 초급 데이터 시각화 활용  (0) 2021.02.07
[Tableau] 기초 시각화 연습  (0) 2021.02.07
[Tableau] 태블로 & 지도 시각화  (2) 2021.01.17

0. R과 R Studio 설치

R 설치: http://cran.r-project.org 

 

The Comprehensive R Archive Network

 

cran.r-project.org

 

R Studio 설치: http://www.rstudio.com 

 

RStudio | Open source & professional software for data science teams

RStudio provides free and open source tools for R and enterprise-ready professional software for data science teams to develop and share their work at scale.

rstudio.com

 

1. 저장할 폴더 지정하기 (Working Directory)

Session 메뉴에서 Set Working Directory > Choose Directory 를 누른 뒤 원하는 폴더를 선택하면 그 폴더에 앞으로 스크립트 등이 저장된다. 그리고 이 작업은 매번 RStudio를 실행할 때마다 해주어야 한다.

 

2. attach( ) & detach( )

attach(변수명) , detach(변수명)

 

원래 R에서 데이터를 이용할 때에는 일일히 데이터명$변수명 형식으로 입력을 해주어야 했다.

예를 들어 student 데이터의 grade 속성의 평균을 구하려면 mean(student$grade) 이렇게 입력해야 하는 것이다.

하지만, attach 함수를 이용하면 student$ 는 입력하지 않고, 그냥 mean(grade) 라고 적을 수 있다.

그리고, attach 함수를 해제하는 함수가 detach() 이다. 

detach를 한 후에는 다시 데이터명$변수명 형식으로 써야한다.

 

이번 예제에서는 Rstudio에서 기본적으로 제공하는 mtcars 데이터를 이용했다.

3. 산포도 plot( )

plot(x) / plot(x, y)

 

plot함수는 기본적으로 값을 점으로 나타내는 산포도를 그리는 함수이다.

변수를 한 개만 넣으면 자동으로 index가 생성된다.

이번 예제에서는 자동차의 연비와 무게의 관계를 보기 위해 무게를 x축으로, 연비를 y축으로 설정했다.

 

 

plot(x, y, type = "l") 과 같이 타입을 적어주면 직선으로 연결된 그래프를 보여준다.

l(line), d(density) 등이 있다.

col = "blue" 와 같이 입력해주면 색을 바꿀 수 있다.

 

type = "o" 는 선과 점을 같이 표현한다.

4. abline( )

abline(a= , b= ) / abline(h= ) / abline(v= )

 

abline은 그래프에 선을 긋는 함수이다.

첫번째 식은 대각선을 긋는 함수이다. y=a+bx 인 직선함수를 넣는 것이다. 따라서 a는 y절편, b는 기울기를 말한다.

두번째 식은 수평선을 긋는 함수이다. h=3 을 넣으면 y=3 직선을 그린다.

세번째 식은 수직선을 긋는 함수이다. v=4 를 넣으면 x=4 직선을 그린다. 

이 식도 col=" " 속성으로 색을 바꿀 수 있다.

 

 

이 예제에서는 abline 안에 lm(mpg~wt) 를 넣었다. 

lm( ) 은 단순회귀분석을 하는 함수이다. 

아래 콘솔에 lm(mpg~wt)를 실행시켜보았더니 intercept가 37.285, wt가 -5.344가 나왔다.

이것은 두 변수가 mpg(y) = 37.285 - 5.344wt 의 관계를 갖는다는 것이다.

 

따라서 이 함수를 abline에 넣으면 위와 같은 직선이 그려진다.

 

그리고 title(" ") 함수는 plot 위에 제목을 붙여주는 함수이다.

 

5. 그래프 PDF로 저장

 

dev( ) 함수는 여러 그래픽 기능을 제어하는 함수이다.

dev.set( )으로 시작하고, dev.off( )로 끝낸다. 사실 dev.set( )은 안해도 된다.

 

plot결과를 pdf로 저장하기 위해 pdf("제목") 함수를 실행한다.

 

그리고 위의 예제와 똑같이 그래프를 그려준 뒤 dev.off( )를 해주면 처음에 지정해준 폴더에 pdf파일이 저장된다.

 

이렇게 파일이 저장된 것을 확인할 수 있다.
pdf파일을 실행하면 이렇게 그래프가 저장된 것을 볼 수 있다.

 

pdf 외에도 이미지 저장 함수로는 win.metafile(), png(), jpeg(), bmp(), tiff(), xfig(), postscript() 가 있다.

5-1. 바로 이미지/PDF로 저장하기 

plot을 만들고 Export를 누르면 다음과 같이 이미지 또는 PDF 파일로 저장할 수 있다.

 

SQL 실행 과정

 

1. SQL 파싱 (PARSING)

SQL 파싱은

 

1) SQL 문장에 문법적 오류가 없는지 검사 (Syntax 검사)

2) 의미상 오류가 없는지 검사 (Semantic 검사)

3) 사용자가 발생한 SQL과 그 실행계획시 라이브러리캐시(프로시저캐시)에 캐싱되어 있는지 확인

4) 캐싱되어 있다면 소프트파싱, 캐싱되어있지 않다면 하드파싱

 

으로 구성된다.

 

* 소프트파싱: SQL과 실행계획을 캐시에서 찾아 곧바로 실행단계로 넘어가는 경우

* 하드파싱: SQL과 실행계획을 캐시에서 찾지 못해 최적화 과정을 거치고나서 실행단계로 넘어가는 경우

 

* 라이브러리캐시는 해시구조로 엔진에서 관리된다. SQL마다 해시값에 따라 여러 해시 버킷으로 나뉘며 저장되고, SQL을 찾을 때는 SQL 문장을 해시 함수에 적용하여 반환되는 해시값을 이용해서 해시 버킷을 탐색한다.

 

2. 규칙기반 옵티마이저 (RBO)

실행계획을 정해진 룰에 따라 만든다.

룰은 데이터베이스 엔진마다 여러 가지가 있다.

 

예를 들어서 오라클의 RBO는 다음과 같다.

순위 액세스 경로
1 Single Row by Rowid
2 Single Row by Cluster Join
3 Single Row by Hash Cluster Key with Unique or Primary Key
4 Single Row by Unique or Primary Key
5 Clustered Join
6 Hash Cluster Key
7 Indexed Cluster Key
8 Composite Index
9 Single-Column Indexes
10 Bounded Range Search on Indexed Columns
11 Unbounded Range Search on Indexed Columns
12 Sort Merge Join
13 MAX or MIN of Indexed Column
14 ORDER BY on Indexed Column
15 Full Table Scan

 

자세한 과정은 잘 모르겠지만, 크게 보면 엑세스를 할 때에 인덱스를 이용하느냐, 전체 테이블을 스캔하느냐 등으로 나눌 수 있다. 1번부터 순서대로 맞는 경우에 진행하며, 아래로 갈수록 data가 흐트러져서 저장되기 때문에 비용이 많이 든다.

그리고 요즘에는 대부분 RBO보다 CBO를 이용한다.

 

3. 비용기반 옵티마이저 (CBO)

비용을 기반으로 최적화를 수행하는 방식이다. 이때 비용이란 쿼리를 수행하는데 소요되는 일의 양 또는 시간 예상치이다.

 

딕셔너리에서 테이블과 인덱스를 통해 레코드 개수, 블록 개수, 평균 행 길이, 칼럼 값의 수, 칼럼 값 분포, 인덱스 높이, 클러스터링 팩터 등의 통계값을 기반으로 비용을 예측하는 방식이다. 이 예측된 비용에 따라 최적의 실행 계획을 도출한다. 최근에는 추가적으로 하드웨어적 특성을 반영한 시스템 통계정보 (CPU 속도, 디스크 I/O 속도 등)까지 이용한다.

 

4. SQL 실행계획

실행 계획은 SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다. 즉, SQL을 어떤 순서로 어떻게 진행할 지 결정한다는 것이다.

 

실행 계획의 구성요소는 다음 다섯 가지가 있다.

  • 조인 순서 (Join Order) : JOIN 수행에서 어떤 테이블이 먼저 조회되는가
  • 조인 기법 (Join Method) : loop, merge, sorting 등
  • 액세스 기법 (Access Method) : Index / Full table 등
  • 최적화 정보 (Optimization Information) : 알고리즘
  • 연산 (Operation) : 크다, 작다, 함수, MAX, MIN 등

 

5. INDEX

INDEX는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조이다.

 

CREATE INDEX IDX_### ON db, table (column);

ALTER TABLE db.table ADD INDEX IDX_###;

 

두 코드 모두 column에 대한 INDEX를 생성하는 코드이다.

 

ALTER TABLE db.table DROP INDEX IDX_###;

 

테이블에 있는 인덱스를 삭제하는 코드이다.

 

EXPLAIN SELECT * FROM db.table;

 

실행 계획을 확인하는 코드이다.

 

예제) 

DESC kaggle.titanic;

 

EXPLAIN SELECT * FROM kaggle.titanic WHERE `Age` = 23;

>> Age가 23인 데이터를 찾기 위해 418개의 rows를 모두 검색하는 것이 플랜임을 알 수 있다.

 

[INDEX 생성 후]

 

DESC kaggle.titanic;

Age에 인덱스가 생성된 것을 확인할 수 있다.

 

EXPLAIN SELECT * FROM kaggle.titanic WHERE `Age` = 23;

>> IDX_AGE를 사용해서 reference를 통해서 쿼리를 실행하는 것이 플랜임을 알 수 있다.

>> 데이터를 얻기 위해서 11개의 row만 검색하면 된다.

'Database > SQL' 카테고리의 다른 글

[Lecture] 2. DBMS 개념과 아키텍쳐  (0) 2022.03.21
[Lecture] 1. 데이터베이스 시스템  (0) 2022.03.21
[MySQL] 데이터 제어어 : DCL  (0) 2021.01.18
[MySQL] Titanic 예제  (0) 2021.01.11
[MySQL] University DB 예제  (0) 2021.01.10

+ Recent posts