kt_aivle4
데이터처리에 대해서 배웠다.
<데이터 전처리>
데이터 구조 만들기
모델링이 가능하려면 데이터의 모든 셋이 값이 있어야 하고 값은 모두 숫자여야 한다.
또, 필요시 숫자의 범위를 맞춰줘야 한다.
전처리를 할 때는 비어 있는 값은 값을 채워주고 숫자가 아닌 것은 숫자로 바꿔줘야 한다.
데이터프레임 변경
- 열 이름 변경
- 모든 열 이름 변경
Data.columns = [‘새로운칼럼이름’,…..] 모든 열의 새로운 열이름을 다 적어준다.
- 일부 열 이름 변경
Data.rename(columns = {‘기존열’ : ‘새로운열이름’, …..}, inplace = True)
inplace = True는 변경사항이 실제 반영되게 해 준다.즉 새로운 변수에 할당하지 않아도 저렇게만 해주면 값이 반영되어 바뀐다.
- 열 추가
data[‘새롭게만든열’] = ~~
특정 위치 열에 넣고 싶으면 insert(열번호, ‘새로운열’, ~) -> 보통은 데이터프레임 칼럼 위치는 신경을 안 쓰기 때문에 잘 사용되지 않는다.
- 열 삭제
Data.drop(‘열’, axis=1, inplace=True)
axis = 0: 행삭제(기본값), axis = 1 : 열삭제
여러 열 삭제: Data.drop([‘열1’,’열2’], axis=1, inplace=True)
값 변경1
- 조건에 의한 값 변경 1
Data.loc[조건문, ‘열’] = 값
loc는 조건 가지고 조회, iloc은 인덱스 가지고 조회
- 조건에 의한 값 변경 2
Data[‘열’] = Np.where(조건문, 참, 거짓)
값 변경 2
.map() – 주로 범주형 값을 다른 값으로 변경
Data[‘열’].map({‘a’:1, ‘b’:2})
pd.cut – 숫자형 변수를 범주형 변수로 변환해 준다.
Labels는 분할된 범주에 이름을 붙여준다.
Pd.cut(data[‘열’], 몇등분몇 등분, labels = [‘이름’, …..])
내가 원하는 구간으로 자르기: bins=[]
Pd.cut(data[‘열’], bins = [0,10,20], labels = [‘이름’, …..])
구간은 0에서 10까지, 마지막은 11에서 20까지 라는 의미!, 10< <=20 (구간 두 개)
데이터프레임 결합
concat – 이어 붙여라붙여라
pd.concat()
인덱스, 열이름 기준
방향 axis=0 인덱스(행) –> 행방향으로 붙여라(위, 아래로 붙여라) = 세로(행)로 합치기
axis=1이면 가로(열)로 붙여라(옆으로 붙여라)
이어 붙이는 방법 : join
‘outer’: 모든 행과 열 합치기(기본값)
‘inner’: 같은 행과 열만 합치기
Eg) pd.concat([df1, df2, ….], axis = 0, join = 'inner')
데이터프레임 구조에 맞게 합치기
merge
특정 칼럼의 값 기준으로 결합(옆으로만 붙인다)
pd.merge(df1, df2, how = 'inner')
how = inner, outer, left, right 기본값은 inner인 듯
데이터 값 기준으로 합치기
Pivot
pivot(‘인덱스’, ‘column’, ‘value’) – 이런순서로 원하는 자리에 특정 열 넣어주기
시계열 데이터
행과 행에 시간의 흐름이 있고, 행 사이의 시간간격이 동일해야 한다.
날짜 요소 뽑기
.dt.날짜요소(date, year, month, day, tiome, hour, week, ….)
날짜 타입으로 변환
- pd.to_datetime(날짜데이터, format = '입력되는 날짜 형식')
기본 년, 월, 일이 아닌 다른 형식이면 format이용
Eg} format = '%d-%m-%Y'이런식으로 날짜 형식이 입력되어 있다고 알려주면 년월일에 맞게 출력
시간에 따른 흐름 추가하기 : 시계열데이터일 때만 사용
1. shift
Shift는 시간의 흐름 전후로 정보를 이동시킬 때 사용
Df[‘a’].shift() – 전날을 당겨온다
Df[‘a’].shift(2) – 이틀전을 당겨온다
Df[‘a’].shift(-1) – 다음날을 가져온다
2. rolling + 집계함수
Eg) 시간의 흐름에 따라 일정기간 동안 합을 이동하면서 구하기
Df[‘a’].rolling(n, min_periods=?).sum()
N 기본값은 1, min_periods는 최소 데이터 수
N일 이동합(평균 등) 매출액을 구해준다.
3. diff
특정 시점 데이터, 이전 시점 데이터와의 차이 구하기
전날 대비 오늘의 증감 –> df[‘a’].diff()
기본값 1
eg) df[‘a’].diff(2) = 이틀전 대비 오늘의 증감
차트 그리기
plt.plot()
X축: 인덱스, y축: 1차원 값
plt.plot(x축,y축)
차트 꾸미기
X축 값 조정 – plt.xticks(rotation=각도)
X축 이름 지정 – plt.xlabel(‘이름’)
y축 이름 지정 – plt.ylabel(‘이름’)
타이틀 – plt.title(‘이름’)
라인스타일 조정하기
plt.plot(data['a'], data['b']
,color='green' (g) # 칼러
, linestyle='dotted' # 라인스타일 or ‘--'
, marker='o') # 값 마커(모양)
여러 그래프 겹쳐서 그리기
X축이 같아야 한다
- 범례, 그리드 추가
plt.plot(data['a'], data['b'], label = 'b') # label = : 범례추가를 위한 레이블값
plt.plot(data['a'], data['c'], label = 'c')
plt.legend(loc = 'upper right') # 레이블 표시하기. loc = : 위치
plt.grid() #그래프에 선(행,열)
plt.show()
그래프 크기
eg) plt.figure(figsize = (12,8))
eg) data.plot(x='a', y=['b', 'c', 'd'], figsize=(12,8))
여러 그래프 나눠서 그리기
plt.subplot(row, column, index(순서))
eg) plt.subplot(3,1,1)
- 그래프 간 간격을 적절히 맞추기
plt.tight_layout()
- 주피터에서 이미지를 복사하려면 shift를 누른 후 마우스 오른쪽 눌러서 이미지 복사
- .T는 행과 열을 뒤바꿔준다.
비즈니스 이해 단계
문제정의 – 데이터분석의 방향과 목표 – 가설수립
데이터를 분석하는 방법
Eda: 그래프, 통계량
Cda: 가설검정, 실험
순서
1. 단변량 분석: 개별 변수의 분포
2. 이변량분석이변량분석 1 : feature와 target 간의 관계
3. 이변량 분석 2:들 간의 관계
시각화
밀도함수 그래프
히스토그램의 단점을 해결. 구간 잡는 부분 문제를 해결!
eg) sns.kdeplot(x='a', data = df)
히스토그램
eg) sns.histplot(x='a',data=df, bins=10)
옵션으로 kde = True을 지정하면 히스토그램과 밀도함수를 함께 나타내줄 수 있다.
sns.histplot(x='a', data=df, bins=16, kde=True)
boxplot
주의사항: 값에 NaN이 있으면 그래프가 그려지지 않는다.
박스는 4분위수
eg) plt.boxplot(temp['Age'], vert = False) -> vert = False은 옆으로 그려져 나온다.
sns.boxplot()
seaborn 패키지 함수들은 NaN을 알아서 빼준다.
eg) sns.boxplot(x = df['a'])
IQR = 3 사분위수사분위수 - 1 사분위수사분위수
IQR*1.5 범위 이내의 최소, 최댓값 결정: 이상치를 판정해 주는 기준 (범위를 넘는 값은 이상치)
범주형 변수에 사용하는 시각화
수치화: 기초통계량
범주별 빈도수
.value_counts() : 범주의 개수와 상관 없이 범주 별 개수를 count해준다.
범주별 비율
.value_counts(normalize = True)
bar chart
sns.countplot(x = 'a', data = df)
order=[ ]을 넣어주면 순서를 지정할 수 있다.
pie chart
- 범주별 비율 비교할 때 파이차트 사용
- 먼저 집계를 한 후 사용
- plt.pie( 값, labels=범주이름, autopct = ‘%.3f%%’)
autopct: 그래프에 표시할 비율 값 설정
.3f%: 소수점 세 자리까지 퍼센트로 표기
각도와 방향 추가
startangle = 90: 90도부터 시작
counterclock = False: 시계 방향으로
많은 도움이 되고, 재밌고 유익한 시간이었다.