Time_Series

 

064. 데이터를 로드하고 각 열의 데이터 타입을 파악하라.

DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/timeTest.csv'
df = pd.read_csv(DataUrl)
df.info()
[output]

 

065. Yr_Mo_Dy을 판다스에서 인식할 수 있는 datetime64타입으로 변경하라.

df['Yr_Mo_Dy'] = pd.to_datetime(df['Yr_Mo_Dy'])
df['Yr_Mo_Dy'].dtype
[output]
dtype('<M8[ns]')

 

066. Yr_Mo_Dy에 존재하는 년도의 유일값을 모두 출력하라.

print(df['Yr_Mo_Dy'].dt.year.unique())
[output]
[2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 1971 1972 1973 1974 1975 1976 1977 1978]

 

067. Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다. 해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하라.

def new_date(x):
    import datetime
    if x.year >= 2061:
        return pd.to_datetime(datetime.date(x.year - 100, x.month, x.day))
    else:
        return x

df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(new_date)
df.head()
[output]

 

068. 년도별 각컬럼의 평균값을 구하라.

df.groupby(df.Yr_Mo_Dy.dt.year).mean()
[output]

 

069. weekday컬럼을 만들고 요일별로 매핑하라. ( 월요일: 0 ~ 일요일: 6)

df['weekday'] = df.Yr_Mo_Dy.dt.weekday
df['weekday'].to_frame()
[output]

 

070. weekday컬럼을 기준으로 주말이면 1 평일이면 0의 값을 가지는 WeekCheck 컬럼을 만들어라.

df['WeekCheck'] = df['weekday'].apply(lambda x: 1 if x in [5, 6] else 0)
df['WeekCheck'].to_frame()
[output]

 

071. 년도, 일자 상관없이 모든 컬럼의 각 달의 평균을 구하라.

df.groupby(df.Yr_Mo_Dy.dt.month).mean()
[output]

 

072. 모든 결측치는 컬럼기준 직전의 값으로 대체하고 첫번째 행에 결측치가 있을경우 뒤에있는 값으로 대체하라.

df.fillna(method = 'ffill').fillna(method = 'bfill')
[output]

 

073. 년도 - 월을 기준으로 모든 컬럼의 평균값을 구하라.

df.groupby([df.Yr_Mo_Dy.dt.to_period('M')]).mean()
[output]

 

074. RPT 컬럼의 값을 일자별 기준으로 1차차분하라.

df['RPT'].diff()
[output]

 

075. RPT와 VAL의 컬럼을 일주일 간격으로 각각 이동평균한값을 구하라.

df[['RPT', 'VAL']].rolling(7).mean()
[output]

 

076. 년-월-일:시 컬럼을 pandas에서 인식할 수 있는 datetime 형태로 변경하라. 서울시의 제공데이터의 경우 0시가 24시로 표현된다.

def new_date(x):
    import datetime
    date = x.split(':')[0]
    hour = x.split(':')[1]
    if hour == '24':
        newDate = pd.to_datetime(date + ' 00:00:00') + datetime.timedelta(days = 1)
    else:
        newDate = pd.to_datetime(date + ' ' + hour + ':00:00')
    return newDate

df['(년-월-일:시)'] = df['(년-월-일:시)'].apply(new_date)
df['(년-월-일:시)']
[output]

 

077. 일자별 영어요일 이름을 dayName 컬럼에 저장하라.

df['dayName'] = df['(년-월-일:시)'].dt.day_name()
df['dayName']
[output]

 

078. 요일별 각 PM10등급의 빈도수를 파악하라.

df.head()
df.groupby(df.dayName).PM10등급.value_counts().sort_index().unstack()
[output]

 

079. 시간이 연속적으로 존재하며 결측치가 없는지 확인하라.

# 시간을 차분했을 경우 첫 값은 nan, 이후 모든 차분값이 동일하면 연속이라 판단
if len(df['(년-월-일:시)'].diff().unique()) == 2:
    answer = True
else:
    answer = False

answer
[output]
True

 

080. 오전 10시와 오후 10시(22시)의 PM10의 평균값을 각각 구하라.

print(df[df['(년-월-일:시)'].dt.hour == 10].PM10.mean())
print(df[df['(년-월-일:시)'].dt.hour == 22].PM10.mean())
[output]
70.38461538461539
69.94117647058823

 

081. 날짜 컬럼을 index로 만들어라.

df.set_index('(년-월-일:시)', inplace = True, drop = True)
df.head()
[output]

 

082. 데이터를 주단위로 뽑아서 최소,최대 평균, 표준표차를 구하여라.

df.resample('W')['PM10', 'PM2.5', '오존', '이산화질소'].agg(['min','max','mean','std'])
[output]

 


출처 : https://www.datamanim.com/dataset/99_pandas/pandasMain.html

+ Recent posts