데이터 전처리의 두가지 단계 !
① 데이터 구조 만들기
② 모델링을 위한 전처리
Raw data
csv, 데이터베이스, Log...
|
① 데이터 구조 만들기
|
하나의 데이터셋

행 : 분석단위
열 : 정보, 변수
|
② 모델링을 위한 전처리
|
모델링 가능한 데이터 셋

모든 셀은 값이 있어야하고, 숫자 !
<데이터프레임 변경>
- 모든 열 이름 변경
df.columns = ['column_1', 'column_2', 'column_3', 'column_4', 'column_5']
이런 식으로 열 이름 하나씩 지정 !
- 지정한 열 이름 변경
df.rename(columns={'column_1': '바꿀이름_1',
'column_2': '바꿀이름_2',
'column_3': '바꿀이름_3',
'column_4': '바꿀이름_4',}, inplace=True)
inplace = False(기본값) --> 단순 조회 기능/ 컬럼명이 바뀌지 않고!
inplace = True --> 실제로 값이 바뀜
열 추가
data['새로 만들 열'] = data['column_1'] / (1+data['column_2']/100 )
기존 열 column_1과 column_2를 계산한 결과로 새로운 열을 만든다.
열 삭제
@@@열을 삭제할 때는 항상 조심!!@@@
drop() : 메소드를 사용해 열을 삭제
- axis=0: 행 삭제(기본 값)
- axis=1: 열 삭제
- inplace=True: 옵션을 지정해야 실제로 반영이 됩니다.
False : 삭제한 것 처럼 보여줘(조회!)
#열 하나 삭제
data.drop('column_1', axis=1, inplace=True)
#여러 열 삭제
data.drop(['column_1','column_2'], axis=1, inplace=True)
# 여러개일 때 리스트!
값 변경
.map({ ‘기존값’:’새값’, ‘ ‘:’ ‘ , …})
범주형 값을 다른 값으로 변경
cut()
pd.cut(숫자형변수, 분할방식, 범주값)
숫자형 변수를 범주형 변수로 변환
# 3 등분으로 분할후 a,b,c로 이름 붙이기기
age_group = pd.cut(data['Age'], 3, labels = ['a','b','c'])
(32, 40]
32< <= 46
<데이터프레임 결합>
pd.concat()
- 매핑 기준 : 인덱스(행), 칼럼이름(열)
pd.merge()
- 매핑 기준 : 특정 칼럼(key)의 값 기준으로 결합
CONCAT
방향
• axis=0 : 세로(행)로 합치기 --> 아래로 붙여라
• axis=1 : 가로(열)로 합치기 --> 옆으로 붙여라
방법
• join = ‘outer’ : 모든 행과 열 합치기 (기본값)
• Join = ‘inner’ : 매핑되는 행과 열만 합치기
pd.concat([df1, df2], axis = 1, join = 'inner')
MERGE
두 데이터프레임을 지정한 키 값을 기준으로 병합
left/right/outer/inner join
• how='inner'
• how='outer'
pd.merge(df1, df2, how = 'inner')
pd.merge(df1, df2, how = 'inner', on = 'A')
Pivot
집계된 데이터를 재구성
dataframe.plot(index, column, values)
시게열 데이터
: 행과 행에 시간의 순서가 있고 시간 간격이 동일한 데이터
시계열 데이터일때 사용하는 3가지 함수
- .shift() : 시계열 데이터에서 시간의 흐름 전후로 정보를 이동시킬 때 사용
- .rolling().mean() : 시간의 흐름에 따라 일정 기간 동안 평균을 이동하면서 구하기
- .diff() : 특정 시점 데이터, 이전시점 데이터와의 차이 구하기

① Business Understanding
: 문제정의, 요인파악을 위해 가설 수립
과학 연구에서는..
- 귀무가설: 기존 연구 결과로 이어져 내려오는 정설
- 대립가설: 기존의 입장을 넘어서기 위한 새로운 연구 가설
- 우리가 수립하는 가설을 대립가설이라고 부르기도 함
가설을 세울 때!
해결해야 하는 문제(목표, y)가 무엇인가? → y를 설명하기 위한 요인(x)을 찾음 → 가설의 구조를 정의(x→y)
② Data Understanding
: 데이터 원본 식별, 취득 / 데이터 탐색
Exploratory Data Analysis 탐색적 데이터 분석
: 개별 데이터 분포, 가설 맞는지 확인, NA, 이상치 파악
Confirmatory Data Analysis 확증적 데이터 분석
: 탐색적으로 파악하기 애매한 정보는 통계적 분석 도구(가설검정)사용
③ Data Preparation
- 모든 셀에 값이 있어야 한다.
- 모든 값은 숫자이어야 한다. (범주 -> 숫자)
- 값의 범위를 일치시켜야 한다. (옵션)
- 결측치 조치, 가변수화(범주 -> 숫자), 스케일링, 데이터 분할
④ Modeling
: 중요 변수들을 선택하고 적절한 알고리즘을 적용하여 예측모델 생성
생성된 모델 평가
⑤ Evaluation
: 모델에 대한 데이터 분석 목표와 비즈니스 목표달성에 대한 평가
비즈니스 목표에 부합되는지 보장
⑥ Deployment
: 프로젝트 결과물 최종확정 / 모델 및 배포가 고객 목표를 충족하는지 확인
시각화 라이브러리
데이터에는 비즈니스가 담겨있다 !
※ 데이터 시각화의 목적 - 비즈니스의 인사이트를 파악하는 것 !
기본 차트 그리기
(1) 차트그리기
plt.plot(1차원 값)
(2) x축과 y축의 값 지정하기
plt.plot(x축, y축)
(3) 차트 꾸미기
plt.xticks(rotation = 25) # x축 값 꾸미기 : 방향을 25도 틀어서
plt.xlabel('x축 이름') # x축 이름 지정
plt.ylabel('y축 이름') # y축 이름 지정
plt.title('제목') # 타이틀
# 그 외 옵션들
plt.plot(data['column_1'], data['column_2']
,color='green' # 칼러
, linestyle='dotted' # 라인스타일
, marker='o') # 값 마커(모양)
그래프 여러개 겹쳐 그리기
#첫번째 그래프
plt.plot(data['column_1'], data['column_2'], color='green', linestyle='dotted', marker='o')
# 두번째 그래프
plt.plot(data['column_3'], data['column_4'], color='r', linestyle='-', marker='s')
# 레이블 표시하기. loc = : 위치
plt.legend(loc = 'upper right')
plt.grid() #격자는 수치 볼 때 편리한므로 추천
#마지막에 show
plt.show()
데이터프레임.plot() --> 이것도 가능!!
그래프 여러개 한번에 출력하기
plt.subplot(row, column, index)
index:순서
| (2,1,1) |
| (2,1,2) |
: 2행 1열로 나누고 1,2로 순서 정하기
| (1,2,1) | (1,2,2) |
: 1행 2열로 나누고 1,2로 순서 정하기
개별 변수 분석 도구(단변량 분석)
숫자형 변수, 범주형 변수
<숫자형 변수>
- 기초 통계량 : 숫자로 요약하기 (정보의 대푯값)
- 도수분포표 : 구간을 나누고 빈도수 계산
숫자로 요약하는 방법
평균 -
- 산술 평균: 모든 값들을 더한 후 개수로 나눈 수
- 기하 평균
- 조화 평균: 분자가 동일한 두 비율의 평균
중위수 - 자료의 순서상 가운데 위치한 값
최빈값 - 자료 중에서 가장 빈번한 값
사분위수
: 데이터를 오름차순으로 정렬한 후, 전체를 4등분하고 각 경계에 해당되는 값(25%, 50%, 75%)을 의미
--> df.describe() 활용하면 기초통계량 구할 수 있음

총 800명이라면
0.42~20.12까지 200명이 있다는 뜻!
시각화
1. 히스토그램
: plt.hist() / sns.histplot()
plt.hist(titanic.Fare, bins = 5, edgecolor = 'gray')
sns.histplot(x= 'Fare', data = titanic, bins = 20)
# bins 값을 크게하면 Fare의 구간이 세분화된다.
bins의 숫자를 적절히 조절해가며 자료를 파악하는 것이 중요
2. 밀도함수 그래프(kde plot)
: 막대의 너비를 가정하지 않고 모든 점에서 데이터의 밀도를 추정하는 커널 밀도 추정 방식을 사용하여 히스토그 램의 단점을 해결 / 밀도함수 그래프 아래 면적은 1
※ 히스토그램 단점: 구간 bin의 너비에 따라 전혀 다른 모양이 됨
sns.histplot(x = 'Age', data= titanic, kde=True, bins =16)

3. Box plot
:plt.boxplot()
반드시 NaN을 제외해야 한다. (sns.boxplot은 NaN 알아서 빼고 그림)
--> .notnull()로 제거 후 ..
plt.boxplot(temp['Age'])
plt.grid()
plt.show()
#옆으로 그리기
plt.boxplot(temp['Age'], vert = False)

sns.boxplot(x = titanic['Age'])
plt.grid()
plt.show()

<범주형 변수>
범주형 빈도수
: 시리즈.values_counts()
범주별 비율
: df.shape() 했을때 행의 수인 ([0])으로 나눔
시리즈.values_counts() / 시리즈.shape[0]
# 기초통계량
boston['chas'].value_counts() / boston['chas'].shape[0]

시각화
1. Bar Plot
sns.countplot : 범주별 빈도수를 계산하고 bar plot으로 나타냄
plt.bar를 이용하려면 범주별 빈도수를 직접 계산한 결과를 입력해야 범주별 빈도 bar plot이 그려짐
sns.countplot(boston['chas'])
plt.grid()
plt.show()

'AIVLE' 카테고리의 다른 글
| Web Crwaling ② - 네이버 주가 데이터 수집 (1) | 2023.02.17 |
|---|---|
| Web Crwaling ① - basic (0) | 2023.02.17 |
| 데이터 분석 및 의미 찾기 (0) | 2023.02.09 |
| Python 라이브러리 (0) | 2023.02.06 |
| Python 프로그래밍 (0) | 2023.02.03 |