이번 학습 주제도 저번 시간에 이어 데이터 사전 처리(Preprocessing)에 관한 것입니다
그 중에서도 정규화(Normalization)와 시계열 데이터(time series)에 관해 학습하겠습니다
먼저 정규화(Normalization)에 대해 알아보겠습니다
분석하려는 데이터의 어떤 두 열 A, B가 각각 A 열의 데이터는 0~ 10000, B 열의 데이터는 0~1의 범위를 갖는다고 가정하겠습니다
이 때 두 개의 열에 대해서 그래프를 그린다고하면 범위가 더 큰 A 열에 의해 그래프가 더 영향도가 높을 것입니다
이런 차이를 제거하고 분석의 신뢰도를 높이기 위해 데이터를 동일한 크기 기준으로 나눈 비율로 나타내는 방법을 사용하는데
이를 정규화(Normalization)라고 하고 이 과정을 거친 데이터의 범위는 0~1 또는 -1~1이 됩니다
# 판다스(Pandas)
import pandas
import numpy
from sklearn import preprocessing
filepath = "/Users/dennis_sa/Documents/"
#header가 없고 길이가 정해지지 않은 공백이 구분자인 데이터
read_data = pandas.read_csv(filepath+"auto-mpg.data-original", header = None, sep = '\s+')
read_data.columns = ['연비(mpg)', '실린더 수(cylinders)', '배기량(displacement)', '출력(horsepower)',
'차중(weight)', '가속능력(acceleration)', '출시년도(model_year)', '제조국(origin)', '모델명(name)']
print(read_data.head(), end = '\n') #앞 5행 보기
# 데이터 자료형 확인
print(read_data.dtypes, end = '\n')
# 출력(horsepower)의 고유값 확인
print(read_data['출력(horsepower)'].unique())
# 누락 데이터 제거
read_data.dropna(subset = ['출력(horsepower)'], axis = 0, inplace = True)
print(read_data['출력(horsepower)'].unique())
# 요약 정보 확인
print(read_data['출력(horsepower)'].describe(), end = '\n')
# 최대값(Max) - 최소값(Min)을 기준값으로 설정하고 모든 데이터를 나눔
minus_min = read_data['출력(horsepower)'] - read_data['출력(horsepower)'].min()
max_minus_min = read_data['출력(horsepower)'].max() - read_data['출력(horsepower)'].min()
read_data['출력(horsepower)'] = minus_min/max_minus_min
print(read_data['출력(horsepower)'].describe(), end = '\n')
다음으로 시계열(Time series) 데이터에 대해 알아보겠습니다
판다스(Pandas)는 금융데이터(환율, 주식 등)를 다루기 위해서 개발되었기 때문에 시계열 데이터를 다루는 유용한 기능을 제공합니다
환율과 주식에 대해 잘 모르기 때문에 왜 시계열 데이터가 중요한지는 좀 알아봐야겠네요-_-
아시는 분이 혹시 이 글을 보신다면 댓글로 알려주시면 감사하겠습니다^^
학습할 내용은 판다스의 시간 표시 방식 중에 시계열 데이터 표현에 자주 이용된다는 Timestamp(시점)와 Period(기간)입니다
※ freq 옵션 정보
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
freq 옵션 | |||
옵션 | 설명 | 옵션 | 설명 |
D | day(1일) | B | business day(휴일 제외) |
W | week(1주) | H | hour(1시간) |
M | month end(월말) | T | minute(1분) |
MS | month begin(월초) | S | second(1초) |
Q | quarter end(분기말) | L | milisecond(1/1000초) |
QS | quarter begin(분기초) | U | microsecond(1/1000000초) |
A | year end(연말) | N | nanosecond(1/1000000000초) |
AS | year begin(연초) |
# 판다스(Pandas)
import pandas
import numpy
from sklearn import preprocessing
filepath = "/Users/dennis_sa/Documents/"
# header가 있고 구분자가 ',' 인 데이터
read_data = pandas.read_csv(filepath+"주식.csv", header = 0, sep = ',')
print(read_data.head(), end = '\n')
print(read_data.info(), end = '\n')
# Date 컬럼이 문자열 타입이므로 Timestamp 형으로 변환
read_data['Date'] = pandas.to_datetime(read_data['Date'])
# Data Frame 속성을 이용하여 연-월-일 정보 구분
read_data['Year'] = read_data['Date'].dt.year
read_data['Month'] = read_data['Date'].dt.month
read_data['Day'] = read_data['Date'].dt.day
# to_period() 메소드를 이용하여 연, 연-월 정보 추출
read_data['Date_Year'] = read_data['Date'].dt.to_period(freq = 'A')
read_data['Date_YrMn'] = read_data['Date'].dt.to_period(freq = 'M')
read_data.set_index('Date', inplace = True)
print(read_data.head(), end = '\n')
print(read_data['2018'], end = '\n')
print(read_data['2018-06'], end = '\n')
print(read_data.loc['2018-06', 'Start':'High'], end = '\n')
reference_date = pandas.to_datetime('2019-10-10')
read_data['Interval_date'] = reference_date - read_data.index
read_data.set_index('Interval_date', inplace = True)
print(read_data, end = '\n')
print(read_data['480 days' : '500 days'], end = '\n')
# Timestamp 배열 생성
timestamp_array = pandas.date_range(start = '2019-01-01', # 날짜 범위 시작점
end = None, # 날짜 범위 끝점
periods = 6, # 생성할 timestamp 개수
freq = '3MS', # 월의 시작일
tz = 'Asia/Seoul') # 시간대(timezone)
print(timestamp_array, end = '\n')
# Timestamp 형을 Period 형으로 변환
period_day = timestamp_array.to_period(freq = 'D')
print(period_day, end = '\n')
period_month = timestamp_array.to_period(freq = 'M')
print(period_month, end = '\n')
period_year = timestamp_array.to_period(freq = 'A')
print(period_year, end = '\n')
# Period 배열 생성
period_month = pandas.period_range(start = '2019-01-01', # 날짜 범위 시작점
end = None, # 날짜 범위 끝점
periods = 3, # 생성할 period 개수
freq = '3M') # 월
print(period_month, end = '\n')
이것으로 오늘의 학습을 마치겠습니다-_-
'Python' 카테고리의 다른 글
[Python] 데이터 프레임(Data Frame) 심화_2 (0) | 2019.10.16 |
---|---|
[Python] 데이터 프레임(Data Frame) 심화_1 (0) | 2019.10.11 |
[Python] 데이터 사전 처리(Preprocessing)_3 (0) | 2019.10.07 |
[Python] 데이터 사전 처리(Preprocessing)_2 (0) | 2019.10.07 |
[Python] 데이터 사전 처리(Preprocessing)_1 (0) | 2019.10.01 |