Python

05 Time_Series

hyerimir 2022. 8. 13. 22:14

 

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html#grouping

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 64

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

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

 

Question 65

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

df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy)
Ans = df.Yr_Mo_Dy

Ans.head(4)

pd.to_datetime()

판다스에서 인식할 수 있는 datetime64타입으로 변경

 

 

Question 66

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

Ans = df.Yr_Mo_Dy.dt.year.unique()
Ans

 

Question 67

Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다.

해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하라

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


df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century)

Ans = df.head(4)
Ans

 

 

 

Question 68

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

Ans = df.groupby(df.Yr_Mo_Dy.dt.year).mean()
Ans.head(4)

 

 

 

Question 69

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

df['weekday'] = df.Yr_Mo_Dy.dt.weekday
Ans = df['weekday'].head(3).to_frame()
Ans

dt.weekday; 월요일이 0, 일요일이 6

 

 

 

Question70

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

df['WeekCheck']  = df['weekday'].map(lambda x : 1 if x in [5,6] else 0)
Ans = df['WeekCheck'].head(3).to_frame()
Ans

 

 

Question71

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

Ans = df.groupby(df.Yr_Mo_Dy.dt.month).mean()
Ans.head(4)

 

 

 

Question72

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

df = df.fillna(method='ffill').fillna(method='bfill')
df.isnull().sum()

 

 

 

Question73

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

Ans = df.groupby(df.Yr_Mo_Dy.dt.to_period('M')).mean()
Ans.head(3)

 

 

Question74

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

Ans = df['RPT'].diff()
Ans.head(3)

 

 

Question75

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

Ans= df[['RPT','VAL']].rolling(7).mean()
Ans.head(9)

 

 

 

Question76

df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/seoul_pm.csv')
df

년-월-일:시 컬럼을 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
Ans.head(3)

 

 

 

Question77

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

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

dt.day_name()

일자별 영어 요일

 

 

 

 

Question78

일자별 각 PM10등급의 빈도수를 파악하라

Ans1 = df.groupby(['dayName','PM10등급'],as_index=False).size()
Ans2 = Ans1.pivot(index='dayName',columns='PM10등급',values='size').fillna(0)
Ans1.head()

 

Ans2

 

 

Question79

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

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

 

 

Question80

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

Ans = df.groupby(df['(년-월-일:시)'].dt.hour).mean().iloc[[10,22],[0]]
Ans

 

 

Question81

날짜 컬럼을 index로 만들어라

df.set_index('(년-월-일:시)',inplace=True,drop=True)
Ans =df
Ans.head(3)

 

 

 

Question82

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

Ans = df.resample('W').agg(['min','max','mean','std'])
Ans.head(5)