728x90
반응형
# 05_Time_Series
# 주가 데이터 : https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/06_Stats/Wind_Stats/wind.data DataUrl = ‘https://raw.githubusercontent.com/Datamanim/pandas/main/timeTest.csv’
## Q64 데이터를 로드하고 각열의 데이터 타입을 파악하라
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/timeTest.csv')
print(df.info())
## Q65 Yr_Mo_Dy을 판다스에서 인식할 수 있는 datetime64타입으로 변경하라
df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy)
print(df.Yr_Mo_Dy)
## Q66 Yr_Mo_Dy에 존재하는 년도의 유일값을 모두 출력하라
print(df.Yr_Mo_Dy.dt.year.unique())
## Q67 Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다. 해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하라
def fix_year(x):
import datetime
year = x.year - 100 if x.year >= 2061 else x.year
return pd.to_datetime(datetime.date(year, x.month, x.day))
df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_year)
print(df)
## Q68 년도별 각컬럼의 평균값을 구하여라
print(df.groupby(df.Yr_Mo_Dy.dt.year).mean())
## Q69 weekday컬럼을 만들고 요일별로 매핑하라 (월요일 : 0 ~ 일요일 : 6)
df['weekday'] = df.Yr_Mo_Dy.dt.weekday
print(df['weekday'].to_frame())
## Q70 weekday컬럼을 기준으로 주말이면 1 평일이면 0의 값을 가지는 WeekCheck 컬럼을 만들어라
df['WeekCheck'] = df['weekday'].map(lambda x : 1 if x in[5,6] else 0)
print(df['WeekCheck'].to_frame())
## Q71 년도, 일자 상관없이 모든 컬럼의 각 달의 평균을 구하여라
print(df.groupby(df.Yr_Mo_Dy.dt.month).mean())
## Q72 모든 결측치는 컬럼기준 직전의 값으로 대체하고 첫번째 행에 결측치가 있을경우 뒤에있는 값으로 대채하라
df = df.fillna(method='ffill').fillna(method='bfill')
print(df.isnull().sum())
## Q73 년도 - 월을 기준으로 모든 컬럼의 평균값을 구하여라
print(df.groupby(df.Yr_Mo_Dy.dt.to_period('M')).mean())
## Q74 RPT 컬럼의 값을 일자별 기준으로 1차차분하라
print(df['RPT'].diff())
## Q75 RPT와 VAL의 컬럼을 일주일 간격으로 각각 이동평균한값을 구하여라
print(df[['RPT', 'VAL']].rolling(7).mean())
## Q76 년-월-일:시 컬럼을 pandas에서 인식할 수 있는 datetime 형태로 변경하라. 서울시의 제공데이터의 경우 0시가 24시로 표현된다
def change_date(x):
import datetime
hour = x.split(':')[1]
date = x.split(":")[0]
if hour == '24':
hour = '00:00:00'
FinalDate = pd.to_datetime(date + " " + hour) + datetime.timedelta(days=1)
else:
hour = hour + ':00:00'
FinalDate = pd.to_datetime(date + " " + hour)
return FinalDate
df['(년-월-일:시)'] = df['(년-월-일:시)'].apply(change_date)
Ans = df
## Q77 일자별 영어요일 이름을 dayName 컬럼에 저장하라
df['dayName'] = df['(년-월-일:시)'].dt.day_name()
## Q78 일자별 각 PM10등급의 빈도수를 파악하라
Ans1 = df.groupby(['dayName','PM10등급'],as_index=False).size()
Ans2 = Ans1.pivot(index='dayName',columns='PM10등급',values='size').fillna(0)
## Q79 시간이 연속적으로 존재하며 결측치가 없는지 확인하라
# 시간을 차분했을 경우 첫 값은 nan, 이후 모든 차분값이 동일하면 연속이라 판단한다.
check = len(df['(년-월-일:시)'].diff().unique())
if check ==2:
Ans =True
else:
Ans = False
## Q80 오전 10시와 오후 10시(22시)의 PM10의 평균값을 각각 구하여라
Ans = df.groupby(df['(년-월-일:시)'].dt.hour).mean().iloc[[10,22],[0]]
## Q81 날짜 컬럼을 index로 만들어라
df.set_index('(년-월-일:시)',inplace=True,drop=True)
## Q82 데이터를 주단위로 뽑아서 최소,최대 평균, 표준표차를 구하여라
Ans = df.resample('W').agg(['min','max','mean','std'])
728x90
반응형
'기타' 카테고리의 다른 글
[Python] 빅데이터 분석기사 판다스 연습 튜토리얼(Merge , Concat 91 ~ 95) (0) | 2023.11.29 |
---|---|
[Python] 빅데이터 분석기사 판다스 연습 튜토리얼(Pivot 83 ~ 90) (0) | 2023.11.28 |
[Python] 빅데이터 분석기사 판다스 연습 튜토리얼(56 ~ 63) (1) | 2023.11.28 |
[Python] 빅데이터 분석기사 판다스 연습 튜토리얼(44 ~ 55) (0) | 2023.11.27 |
[Python] 빅데이터 분석기사 판다스 연습 튜토리얼(20 ~ 43) (3) | 2023.11.26 |