[SK쉴더스 루키즈 24기] 생성형 AI활용 사이버보안 전문가 양성과정-241219

Chris Kim·2024년 12월 19일
post-thumbnail

1. 데이터 분석 1 - 기초 분석

1.1 데이터 탐색적 분석(EDA)

  • EDA는 데이터 분석 과정에서 데이터를 이해하고 통찰을 얻기 위한 초기 분석 단계
    • 데이터 셋의 구조와 특성을 탐색
    • 문제가 되는 부분을 확인
    • 분석 방향을 설정하는 데 필수적인 과정

EDA의 주요 목적

  • 데이터의 기본 특성 이해
  • 데이터 정리
  • 가설 수립 및 데이터 기반 의사 결정
  • 문제 발견

1.2 EDA의 주요 단계

(1) 데이터의 기본 특성 이해

  • 데이터 불러오기 및 기본 정보 확인데이터셋의 크기, 변수명, 데이터 유형, 결측치 유무 등을 확인
  • pandas의 head(), info(), describe() 등을 사용

(2) 결측 값과 이상치 확인

  • 결측 값, 이상치 처리방법
    • 삭제
    • 대체(평균값, 중앙값, 또는 특정 값)
    • sns.boxplot()으로 확인할 수 있음

(3) 데이터 분포 확인

  • 변수의 분포를 이해하기 위해 히스토그램이나 커널 밀도 그래프를 사용
  • 데이터가 정규 분포를 따르는 지 확인할 수 있음

(4) 변수간 관계 탐색

  • 두 변수 사이의 상관관계를 확인하거나, 그룹별 통계량을 계산

(5) 시각화

  • 시각화는 데이터를 더 직관적으로 이해할 수 있게 도와준다.
  • 대표적인 도구: Matplotlib, Seaborn, Plotly등

(6) 결과물

  • 데이터셋의 구조와 특성에 대한 이해
  • 이상치와 결측치 처리 계획
  • 데이터 분포와 변수 간 관계에 대한 통찰
  • 분석 방향성 설정 및 가설 정립

1.3 데이터의 기본 구조 파악

기본 구조 파악 과정

  • 데이터의 모양
  • 데이터 타입
  • 변수의 분포 및 관계
  • 결측 값 유무

데이터 기본 구조
1. 데이터셋의 크기
2. 데이터 타입(수치형, 범주형, 문자형, 날짜/시간)
3. 변수의 이름과 의미
4. 결측값
5. 데이터 분포
6. 중복값

데이터 기본구조를 파악하는 방법
1. 데이터 준비
2. 데이터셋의 크기 확인(df.shape)
3. 데이터의 기본 정보 확인(df.info)
4. 통계적 요약(df.describe())
5. 결측값 확인(df.isnull().sum())
6. 데이터 타입 확인(df.dtypes)
7. 중복값 확인(df.duplicated().sum())

1.4 주요 기초 통계량

  1. 중심 경향성: 평균, 중앙값, 최빈값
  2. 산포도: 분산, 표준편차, 범위
  3. 데이터 분포 특성: 왜도, 첨도
    (scipy 모듈로 계산할 수 있다. ex>import scipy.stats)

2. 그룹별 집계

2.1 그룹별 집계와 피벗 테이블 생성

2.1.1 그룹별 집계

  • 데이터를 특정 기준으로 묶은 후, 각 그룹에 대해 합계, 평균, 최대값 등 다양한 연산을 수행
  • 대량의 데이터 요약 및 패턴파악, 데이터의 시각적 이해 및 보고서 작성에 사용한다.
  • ex> df.groupby(<group>)[<column>].mean()

2.1.2 피벗 테이블(Pivot Table)

  • 데이터를 행과 열로 재구성하여 원하는 방식으로 요약하는 테이블
  • 여러 집계 연산을 한 버 에 수행할 수 있어 유연성이 뛰어남
  • 다차원데이터 요약 및 여러 기준에서의 분석, 직관적인 데이터 비교 및 분석에 사용한다.
  • ex)
pivot_table = pd.pivot_table(df, values=<column>, index=<column>, aggfunc=<mean,sum.etc...>
print(pivot_table)

2.2 데이터 간 비교 분석

  • 두 개 이상의 데이터 집합을 비교하여 차이점, 유사점, 상관관계 등을 분석하는 작업
  • 데이터의 경향이나 패턴을 이해하고 으사 결정을 돕는 데 사용

2.2.1 데이터 비교 분석 방법

  1. 기술 통계 비교: 각 데이터 세트의 기본 통계를 계산하여 비교
  2. 시각화 비교: 데이터를 그래프로 표현하여 직관적으로 비교
  3. 상관관계 분석: 상관 계수를 사용(np.corrcoef())
  4. 처아 분석: 두 데이터 집합 간 차이를 계산하여 변화량을 분석
  5. 피벗 테이블을 사용한 비교

2.2.2 데이터 비교 분석의 활용

  • 비즈니스 의사 결정
  • 과학 연구
  • 교육 분석

3. 상관관계와 회귀 분석 개요

3.1 상관계수와 상관행렬

상관계수는 두 변수 간의 선형 관계의 강도와 방향을 나타내는 값으로 값의 범위는 -1부터 1까지다.
상관행렬은 여러 변수 간의 상관계수를 표 형태로 보여준다.

3.2 단순 회귀 분석 개념

단순 회귀 분석이란 하나의 독립 변수와 하나의 종속 변수 사이의 관계를 모델링하여 독립 변수를 이용해 종속 변수를 예측하는 방법이다.

  • 이 방법은 데이터가 선형적 관계를 가지고 있을 때 유용하다.
  • 결과는 1차 방정식으로 표현한다.

주요 개념

  • 잔차(Residuals) : 실제 값과 회귀선 간의 차이
  • 최소제곱법(Least Squares Method) : 잔차의 합이 최소가 되는 회귀선을 찾는방법
  • 결정계수: 상관계수의 제곱으로 계산

3.3 변수 간 관계 분석

  • 두 변수 또는 여러 변수 간의 상관성이나 영향력을 이해하고
  • 한 변수가 다른 변수에 어떻게 영향을 미치는지를 분석하는 과정
  • 관계는 상관 관계인과 관계로 나눌 수 있음

관계 분석의 도구

  • 상관 계수
  • 산점도
  • 회귀 분석

4. 데이터 전처리의 개요

4.1 데이터의 유형

  1. 정형 데이터(Structured Data)
    행과 열로 구성되어 있는, 잘 정리된 데이터
  2. 비정형 데이터(Unstructured Data)
    고정된 구조가 없는, 정리되지 않은 데이터(이미지, 동영상, 텍스트)
  3. 반정형 데이터(Semi-Structured Data)
    데이터의 구조는 있지만, 정형 데이터처럼 엄격하지 않음(JSON, XML등)

4.2 데이터 전처리 과정 개요

4.2.1 데이터 수집

  • 데이터를 가져올 출처를 결정하고 필요한 데이터를 수집
  • 데이터가 불완전학더나 잘못된 경우가 많기 때문에, 수집한 데이터의 품질을 확인해야 함

4.2.2 데이터 정제(Cleaning)

  • 수집한 데이터는 종종 불완전하고 오류가 있을 수 있다.
  • 주요작업은 다음과 같다.
    • 결측 값 처리
    • 오류 수정
    • 중복 제거
    • 이상치 제거

4.2.3 데이터 변환

  • 정제된 데이터르 분석과 모델링에 적한한 형태로 변환하는 단계
  • 주요작업은 다음과 같다.
    • 형태변환
    • 정규화
    • 집계
    • 차원 축소: 불필요한 데이터 제거

4.2.4 데이터 통합(Integration)

  • 다양한 데이터 자원에서 수집한 데이터를 하나로 합치는 과정
  • 주요작업
    • 데이터 병합 : 두 개 이상의 데이터셋을 결합
    • 일관성 유지 : 서로 다른 데이터의 포맷과 구조를 맞춤
    • 중복 제거

5. 데이터 정제(Cleaning)

5.1 결측치 처리

  • 결측치는 데이터 분석 결과에 영향을 줄 수 있으므로 반드시 처리해야한다.
  • 결측치 제거 : 결측치가 데이터셋에서 차지하는 비율이 매우 적을 때, 해당 열이나 행이 분석에 큰 영향을 주지 않을 때 사용한다.(df.dropna())
  • 결측치 대체 : 데이터의 양이 적거나, 결측치가 무작정 삭제되면 데이터 손실이 너무 클 때.(고정값, 통계기반, 예측기반 대체)
  • 데이터 손실을 최소화하고 분석에 미치는 영향을 줄이려면
    • 결측치의 양, 데이터의 중요성, 그리고 분석 목표를 고려해야 함
    • 간단한 데이터셋에서는 제거와 평균/중간값 대체가 유용하다.
    • 하지만, 복잡한 데이터에서는 머신러닝 기반 대체를 활용한다.

5.2 이상치 처리

이상치란 데이터셋에서 다른 값들과 크게 동떨어져 있는 값이다.

IQR방법
이상치 기준은 Q1-1.5IQR 보다 작은 값, Q3+1.5IQR보다 큰 값을 이상치로 본다.

Z-Score
Z값이 3 초과 혹은 -3 미만 인 경우 이상치로 간주한다.(기준은 바뀔 수 있다.)(scipy.stats.zscore)

5.3 데이터 중복 확인 및 제거

  • 중복 데이터는 데이터셋에서 동일한 행이 반복적으로 나타나는 것이다.
  • 중복 데이터가 있으면 분석 결과가 왜곡될 수 있으며, 특히 데이터의 크기가 큰 경우 처리 속도와 메모리 사용량에 영향을 줄 수 있음

6. 데이터 변환 및 스케일링

6.1 데이터 변환

6.1.1 로그 변환(Log Transformation)

  • 데이터 값의 로그를 취하는 방법
  • 데이터 값이 매우 크거나, 몇 개의 값이 지나치게 크고 나머지는 작은 경우에 효과적
  • 로그 변환을 하면, 큰 값은 축소되고, 작은 값은 상대적으로 더 커지며 데이터 분포를 평탄화한다.

장점 및 주의점

  • 장점: 큰 값의 영향과 왜도를 줄일 수 있으며, 작은 값의 상대적 차이를 부각할 수 있다.
  • 주의점: 데이터에 0이나 음수가 있으면 안된다.(log(x+1)을 사용한다)

6.1.2 스퀘어 루트 변환(Square Root Transformation)

  • 데이터의 제곱근을 구하는 방법으로 로그 변환보다는 덜 극단적이며, 데이터의 크기를 축소하거나 오른쪽 치우침을 완화하는 데 사용한다.

장점 및 주의점

  • 장점: 데이터 스케일을 줄이면서 상대적 관계를 유지하고 비선형적 관계를 일부 선형화 할 수 있다.
  • 주의점: 음수 값에 사용할 수 없다.

6.2 데이터 스케일링

6.2.1 표준화

  • 표준화는 데이터의 값을 평균이 0, 표준편차가 1이 되도록 변환하는 방법이다.

장점 및 주의점

  • 장점: 데이터가 서로 다른 범위와 단위를 가지더라도 동일한 기준으로 변환 가능하다.(거리 기반 알고리즘에서 효과적)
  • 주의점: 정규분포를 따르지 않는 데이터에 적용할 수 있으나 분포의 왜도는 남아 있을 수 있다.

6.2.2 정규화

  • 정규화는 데이터를 0과 1 사이로 변환하는 방법이다.
  • 값의 크기를 줄이고 데이터를 일정한 스케일로 맞춘다.

장점 및 주의점

  • 장점: 데이터가 일정 범위내에 있어, 스케일에 민감한 알고리즘(신경망, 회귀)에 적합하고 이상치의 영향을 줄이는데 유용하다.
  • 주의점: 이상치가 있는 경우, 최대값과 최소값이 크게 왜곡될 수 있음

6.2.3 예제

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler
import matplotlib.pyplot as plt

# 데이터 생성
data = pd.DataFrame({'Original': [50, 80, 90, 100, 60]})

# 표준화
scaler_standard = StandardScaler()
data['Standardized'] =
scaler_standard.fit_transform(data[['Original']])

# 정규화
scaler_minmax = MinMaxScaler()
data['Normalized'] = scaler_minmax.fit_transform(data[['Original']])

6.3 범주형 데이터 처리

6.3.1 레이블 인코딩(Label Encoding)

  • 범주형 데이터를 정수로 매핑하여 각 범주를 고유한 숫자로 변환하는 방법

장/단점

  • 장점: 간단, 직관적, 메모리를 적게 사용
  • 단점 : 범주의 순서가 없는데, 숫자가 순서를 암시할 수 있음

6.3.2 원-핫 인코딩(One-Hot Encoding)

  • 범주형 데이터를 이진 벡터로 변환
  • 각 범주마다 별도의 열을 만드고, 해당 범주에만 1을 표시하고 나머지는 0으로 표시

장/단점
= 장점 : 숫자가 범주의 순서를 암시하지 않는다.

  • 단점 : 점주의 수가 많아질수록 많은 열이 생성되어, 메모리 소모가 큼

6.3.3 예제

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 데이터 생성
data = pd.DataFrame({'Fruits': ['사과', '배', '포도', '사과', '포도']})

# Step 1: 레이블 인코딩
label_encoder = LabelEncoder()
data['Label Encoding'] = label_encoder.fit_transform(data['Fruits'])

# Step 2: 원-핫 인코딩 (OneHotEncoder 사용, sparse_output=False로 개선)
one_hot_encoder = OneHotEncoder(sparse_output=False)
one_hot_encoded = one_hot_encoder.fit_transform(data[['Label Encoding']])

# Step 3: 결과를 DataFrame으로 변환
one_hot_columns = one_hot_encoder.get_feature_names_out()
one_hot_df = pd.DataFrame(one_hot_encoded, columns=one_hot_columns)

# Step 4: 원래 데이터에 추가
data = pd.concat([data, one_hot_df], axis=1)

# 출력
print(data)
profile
회계+IT=???

0개의 댓글