공부/파이썬 머신러닝 판다스 데이터 분석


목차 1. 날짜 데이터 분리 2. 날짜 인덱스 활용 날짜 데이터 분리 연-월-일 날짜 데이터에서 일부를 분리하여 추출할 수 있다. 먼저 연-월-일 정보를 연, 월, 일 각각으로 구분하는 방법부터 알아본다. 이전에 사용한 A 주식의 거래 데이터를 다시 사용한다. # 예제 5-19(1) import pandas as pd df = pd.read_csv('stock-data.csv') df['new_Date'] = pd.to_datetime(df['Date']) print(df.head()) print('\n') df['Year'] = df['new_Date'].dt.year df['Month'] = df['new_Date'].dt.month df['Day'] = df['new_Date'].dt.day pri..


목차 1. Timestamp 배열 2. Period 배열 Timestamp 배열 판다스 date_range() 함수를 사용하면 여러 개의 날짜(Timestamp)가 들어 있는 배열 형태의 시계열 데이터를 만들 수 있다. 파이썬 range() 함수로 숫자 배열을 만드는 것과 비슷하다. # 예제 5-17(1) import pandas as pd ts_ms = pd.date_range(start='2019-01-01', end=None, periods=6, freq='MS', tz='Asia/Seoul') print(ts_ms) 날짜 범위의 시작점으로 '2019-01-01'을 설정하고, 날짜 범위의 끝을 따로 정하지 않는다.(end=None) 또한 periods=6은 Timestamp를 6개 생성한다는 뜻이다..


보통 접하는 많은 시간 데이터들은 별도의 시간 자료형(파이썬 datetime 라이브러리 등)으로 기록되지 않고, 문자열 또는 숫자로 저장되는 경우가 많다. 판다스는 다른 자료형으로 저장된 시간 데이터를 판다스 시계열 객체인 Timestamp로 변환하는 함수를 제공하고 있다. 목차 1. 문자열을 Timestamp로 변환 2. Timestamp를 Period로 변환 문자열을 Timestamp로 변환 판다스 to_datetime() 함수를 사용하면 문자열 등 다른 자료형을 판다스 Timestamp를 나타내는 datetime64 자료형으로 변환 가능하다. 예제에서 사용할 'stock-data.csv'는 주식 시장에서 거래되는 A 종목의 거래 데이터를 정리한 csv 파일이다. # 예제 5-15(1) import ..


주식, 환율 등 금융 데이터를 다루기 위해 개발된 판다스는 시계열 데이터를 다루는 여러 가지 유용한 기능을 제공한다. 특히 시계열 데이터를 데이터프레임의 행 인덱스로 사용하면, 시간으로 기록된 데이터를 분석하는 것이 매우 편리하다. 판다스의 시간 표시 방식 중에서 시계열 데이터 표현에 자주 이용되는 두 가지 유형을 알아본다. 특정한 시점을 기록하는 Timestamp와 두 시점 사이의 일정한 기간을 나타내는 Period가 있다. HTML 삽입 미리보기할 수 없는 소스


각 변수(데이터프레임의 열)에 들어 있는 숫자 데이터의 상대적 크기 차이 때문에 머신러닝 분석 결과가 달라질 수 있다. 예를 들어, A 변수는 0~1000 범위의 값을 갖고, B 변수는 0~1 범위의 값을 갖는다고 하자. 이 경우 상대적으로 큰 숫자 값을 갖는 A 변수의 영향이 더 커진다. 따라서 숫자 데이터의 상대적인 크기 차이를 제거할 필요가 있다. 각 열(변수)에 속하는 데이터 값을 동일한 크기 기준으로 나눈 비율로 나타내는 것을 정규화(normalization)라고 한다. 정규화 과정을 거친 데이터의 범위는 0~1 또는 -1~1이 된다. 각 열(변수)의 데이터를 해당 열의 최대값(의 절대값)으로 나누는 정규화 방법이 있다. 어떤 열의 원소 값을 그 열의 최대값으로 나누면 가장 큰 값은 최대값 자기..


앞에서 'horsepower' 열의 숫자형 연속 데이터를 'hp_bin' 열의 범주형 데이터로 변환하였다. 하지만 이처럼 카테고리를 나타내는 범주형 데이터를 회귀분석 등 머신러닝 알고리즘에 바로 사용할 수 없는 경우가 있는데, 컴퓨터가 인식 가능한 입력값으로 변환해야 한다. 이럴 때 숫자 0 또는 1로 표현되는 더미 변수(dummy variable)를 사용한다. 여기서 0과 1은 수의 크고 작음을 나타내지 않고, 어떤 특성이 있는지 없는지 여부만을 표시한다. 해당 특성이 존재하면 1로 표현하고, 존재하지 않으면 0으로 표시하는 개념이다. 이처럼 범주형 데이터를 컴퓨터가 인식할 수 있도록 0과 1로만 구성되는 원핫벡터(one hot vector)로 변환한다고 해서 원핫인코딩(one-hot-encoding)..


데이터 분석 알고리즘에 따라서는 연속 데이터를 그대로 사용하기 보다는 일정한 구간(bin)으로 나눠서 분석하는 것이 효율적인 경우가 있다. 가격, 비용, 효율 등 연속적인 값을 일정한 수준이나 정도를 나타내는 이산적인 값으로 나타내어 구간별 차이를 드러내는 것이다. 이처럼 연속 변수를 일정한 구간으로 나누고, 각 구간을 범주형 이산 변수로 변환하는 과정을 구간 분할(binning)이라고 한다. 판다스 cut() 함수를 이용하면 연속 데이터를 여러 구간으로 나누고 범주형 데이터로 변환할 수 있다. 다음 예제에서 'horsepower' 열은 엔진 출력을 나타낸다. 경우에 따라서는 엔진 출력을 숫자로 표시하는 대신 '저출력', '보통출력', '고출력' 등 구간으로 나누어서 표시하는 것이 효율적일 수 있다. 판..


숫자가 문자열(object)로 저장된 경우에 숫자형(int 또는 float)으로 변환해야 한다. 먼저 dtypes 속성을 사용하여 데이터프레임을 구성하는 각 열의 자료형을 확인한다. dtypes 속성 대신 info() 메소드를 사용해도 각 열을 자료형을 확인할 수 있다. # 예제 5-9(1) import pandas as pd df = pd.read_csv('auto-mpg.csv', header=None) df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name'] print(df.dtypes) print('\n') 예제에서 엔진 출력을 나타내는 ..


같은 데이터셋 안에서 서로 다른 측정 단위를 사용한다면, 전체 데이터의 일관성 측면에서 문제가 발생한다. 따라서 측정 단위를 동일하게 맞출 필요가 있다. 흔히, 외국 데이터를 가져오면 국내에서 잘 사용하지 않는 도량형 단위를 사용하는 경우가 많다. 영미권에서 주로 사용하는 마일, 야드, 온스 등이 있는데, 한국에서 사용하는 미터, 평, 그램 등으로 변환하는 것이 좋다. UCI 자동차 연비 데이터셋을 사용하여 여러 예제를 살펴본다. 여기서 'mpg' 열은 영미권에서 사용하는 '갤런당 마일' 단위로 연비를 표시하고 있다. 한국에서 사용하는 익숙한 표기법인 '리터당 킬로미터' 단위로 변환해 본다. # 예제 5-8 import pandas as pd df = pd.read_csv('auto-mpg.csv', h..