판다스 책 공부하기
정규화부터~
import pandas as pd
import numpy as np
df = pd.read_csv('auto-mpg.csv',header= None)
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
'acceleration','model year','origin','name']
df['horsepower'].replace('?',np.nan, inplace = True)
df.dropna(subset=['horsepower'],axis=0,inplace=True)
df['horsepower'] = df['horsepower'].astype('float')
print(df.horsepower.describe())
열 이름을 부여해주고,
horsepower열의 '?'를 nan값으로 바꿔주고 행 삭제,
데이터타입 float으로 변환
df.horsepower = df.horsepower/abs(df.horsepower.max())
print(df.horsepower.head())
print(df.horsepower.describe())
최대값으로 나눠서 정규화
horsepower의 최대값은 1이 됨
min_x = df.horsepower - df.horsepower.min() #최소값을 뺌
min_max = df.horsepower.max() - df.horsepower.min() #최대값과 최소값의 차
df.horsepower = min_x/min_max #최소값을 뺀 값을 최대최소의 차로 나누는 방법으로 정규화
print(df.horsepower.head())
df.horsepower.describe()
이 방법도 horsepower의 최대값은 1이 됨
정규화를 하는 이유는 다른 행에 비해 숫자가 커서 영향을 주는 비중?이 커지는 것을 방지하기 위함
그래서 정규화를 통해 일정하게 바꾸어주는 것! 최소 0 에서 최대 1로
시계열 데이터
import pandas as pd
df = pd.read_csv('stock-data.csv')
print(df.head())
print(df.info())
df['new_Date'] = pd.to_datetime(df['Date'])
print(df.head())
원래 Date열은 obiect타입인데 datetime을 사용해서 datetime타입으로 바꾸어줌
df.set_index('new_Date',inplace=True)
df.drop('Date',axis=1,inplace=True)
datetime으로 된 열을 인덱스 열로 바꿔주기
to_period()
dates = ['2019-01-01', '2020-03-01','2021-06-01']
ts_dates = pd.to_datetime(dates)
print(ts_dates)
dates 리스트를 datetime 타입으로 바꾸기
pr_day = ts_dates.to_period(freq = 'D')
print(pr_day)
pr_month = ts_dates.to_period(freq='M')
print(pr_month)
pr_year = ts_dates.to_period(freq='A')
print(pr_year)
일, 월, 년의 기간으로 리스트 생성
Timestamp
ts_ms = pd.date_range(start = '2019-01-01',
end = None,
periods = 6,
freq = 'MS',
tz = 'Asia/Seoul')
print(ts_ms)
ts_me = pd.date_range(start = '2019-01-01',
end = None,
periods = 6,
freq = 'M',
tz = 'Asia/Seoul')
print(ts_me)
ts_3m = pd.date_range(start = '2019-01-01',
end = None,
periods = 6,
freq = '3M',
tz = 'Asia/Seoul')
print(ts_3m)
MS는 월의 첫날부터 M은 월의 마지막날 3M은 3개월 건너뛰기?
pr_h = pd.period_range(start = '2019-01-01',
end = None,
periods = 3,
freq = 'H') #한 시간
print(pr_h)
pr_2h = pd.period_range(start = '2019-01-01',
end = None,
periods = 3,
freq = '2H') #두 시간
print(pr_2h)
H는 시간, 2H는 2시간을 건너뛰기
날짜 데이터 분리
df = pd.read_csv('stock-data.csv')
df['new_Date'] = pd.to_datetime(df['Date'])
print(df.head())
df['Year'] = df['new_Date'].dt.year
df['Month'] = df['new_Date'].dt.month
df['Day'] = df['new_Date'].dt.day
print(df.head())
new_date에서 년, 월, 일만 추출해서 새로운 열 만들기
df['Date_yr'] = df['new_Date'].dt.to_period(freq = 'A') #연도만
df['Date_m'] = df['new_Date'].dt.to_period(freq='M') #연도 + 월
df.head()
df.set_index('Date_m',inplace = True)
import pandas as pd
import numpy as np
df = pd.read_csv('stock-data.csv')
df['new_Date'] = pd.to_datetime(df['Date'])
df.set_index('new_Date',inplace=True)
#df.drop('Date',axis=1,inplace=True)
print(df.head())
df.index
다른 것을 하기 위해 데이터를 다시 불러오기
df_y = df.loc['2018']
print(df_y.head())
df_ym = df.loc['2018-07']
print(df_ym)
df_ym_cols = df.loc['2018-07','Start':'High']
print(df_ym_cols)
df_ymd = df.loc['2018-07-02']
print(df_ymd)
df_ymd_range = df['2018-06-25':'2018-06-20']
print(df_ymd_range)
행 슬라이싱
today = pd.to_datetime('2018-12-25')
df['time_delta'] = today - df.index
df.set_index('time_delta', inplace = True)
df_180 = df['180 days':'189 days']
print(df_180)
2018년 12월 25일을 기준으로 며칠의 간격이 있는지를 time_delta열에 저장하고 180일~189일의 행 출력하기
데이터프레임의 다양한 응용
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:,['age','fare']]
df['ten'] = 10
df.head()
타이타닉 자료의 age와 fare열에 값이 10인 ten열 추가, 모든 값이 10
def add_10(n):
return n+10
def add_two_obj(a, b):
return a+b
print(add_10(10))
print(add_two_obj(10,10))
함수생성
sr1 = df['age'].apply(add_10)
print(sr1.head())
sr2 = df['age'].apply(add_two_obj, b = 10)
print(sr2.head())
sr3 = df['age'].apply(lambda x: add_10(x))
print(sr3.head())
apply함수로 값을 계산하는 3가지 방법
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:,['age','fare']]
df.head()
데이터 재로드
df_map = df.applymap(add_10)
print(df_map.head())
apply함수는 시리즈(열)에 적용 applymap은 각각의 데이터에 적용하는 함수
def missing_value(series):
return series.isnull()
result = df.apply(missing_value,axis = 0)
print(result.head())
def min_max(x):
return x.max() - x.min()
result = df.apply(min_max)
print(result)
print(type(result))
df['ten'] = 10
df['add'] = df.apply(lambda x: add_two_obj(x['age'],x['ten']),axis=1)
print(df.head())
df = df.drop(['ten','add'], axis = 1)
ten과 add열 삭제
def missing_value(x):
return x.isnull()
def missing_count(x):
return missing_value(x).sum()
def total_number_missing(x):
return missing_count(x).sum()
함수선언
result_df = df.pipe(missing_value)
result_df.head()
result_series = df.pipe(missing_count)
print(result_series)
result_value = df.pipe(total_number_missing)
print(result_value)
pipe() : 테이블 형태로 정리해주는 함수 어플리케이션, 함수를 연속적으로 호출해야하는 경우에 권장됨, 메서드를 연속적으로 사용할 수 있게 함
apply() : 행 혹은 열로 정리해주는 함수 어플리케이션
applymap() : 요소별 적용 함수
'데이터 청년 캠퍼스(경남대학교) > 스터디' 카테고리의 다른 글
2021-07-13 (0) | 2021.07.14 |
---|---|
2021-07-12 (0) | 2021.07.12 |
2021-07-06 (0) | 2021.07.06 |
2021-07-05 (0) | 2021.07.05 |
2021-07-01 (0) | 2021.07.02 |