공부하자, 학문적 지식

빅데이터 분석기사 실기 전처리 암기

로뱅이 2025. 11. 10. 23:47

6번째 컬럼의 데이터 타입을 확인하라

답 : df.iloc[:,5].dtype
데이터 마지막 3개행을 출력하라
답 : df.tail(3)

수치형 변수를 가진 컬럼을 출력하라

Ans = df.select_dtypes(exclude=object).columns
 

범주형 변수를 가진 컬럼을 출력하라

Ans = df.select_dtypes(include=object).columns
 

거주인구 컬럼의 값들을 출력하라

Ans = df['거주인구']
 

읍면동명 컬럼의 유일값 갯수를 출력하라

Ans = df.읍면동명.nunique()
 
 

quantity , item_price 두개의 컬럼으로 구성된 새로운 데이터 프레임을 정의하라

Ans =df[['quantity','item_price']]
 

item_price 컬럼의 달러표시 문자를 제거하고 float 타입으로 저장하여 new_price 컬럼에 저장하라

df['new_price'] = df['item_price'].str[1:].astype('float')

df의 item_name 컬럼 값중 Chips 포함하는 경우의 데이터를 출력하라

Ans = df.loc[df.item_name.str.contains('Chips')]
 

df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라

Ans = df.iloc[:,::2]
 

df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, item_name를 기준으로 중복행이 있으면 제거하되 첫번째 케이스만 남겨라

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
Ans = Ans.drop_duplicates('item_name')
 

df의 데이터 중 item_name의 값이 Izze 데이터를 Fizzy Lizzy로 수정하라

df.loc[df.item_name =='Izze','item_name'] = 'Fizzy Lizzy'

df의 데이터 중 choice_description 값에 Black이 들어가는 경우를 인덱싱하라

Ans = df[df.choice_description.str.contains('Black')]
 

df의 데이터 중 choice_description 값에 Vegetables 들어가지 않는 경우의 갯수를 출력하라

Ans = len(df.loc[~df.choice_description.str.contains('Vegetables')])
 

df의 데이터 중 item_name 값이 N으로 시작하는 데이터를 모두 추출하라

Ans = df[df.item_name.str.startswith('N')]
 

df의 데이터 중 item_name 값의 단어갯수가 15개 이상인 데이터를 인덱싱하라

Ans= df[df.item_name.str.len() >=15]
 

데이터의 각 host_name의 빈도수를 구하고 host_name으로 정렬하여 상위 5개를 출력하라

Ans = df.groupby('host_name').size()

# or

Ans = df.host_name.value_counts().sort_index()

 

neighbourhood_group의 값에 따른 neighbourhood컬럼 값의 갯수를 구하여라

Ans = df.groupby(['neighbourhood_group','neighbourhood'], as_index=False).size()
 

neighbourhood_group의 값에 따른 neighbourhood컬럼 값 중 neighbourhood_group그룹의 최댓값들을 출력하라

Ans= df.groupby(['neighbourhood_group','neighbourhood'], as_index=False).size()\
                  .groupby(['neighbourhood_group'], as_index=False).max()

neighbourhood_group 값에 따른 price값의 평균, 분산, 최대, 최소 값을 구하여라

Ans = df[['neighbourhood_group','price']].groupby('neighbourhood_group').agg(['mean','var','max','min'])
 

neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 구하라

Ans = df.groupby(['neighbourhood','neighbourhood_group']).price.mean()

 

neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 계층적 indexing 없이 구하라

Ans = df.groupby(['neighbourhood','neighbourhood_group']).price.mean().unstack()

 

Income_Category의 카테고리를 map 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라 Unknown : N
dic = {
    'Unknown'        : 'N',
    'Less than $40K' : 'a',
    '$40K - $60K'    : 'b',
    '$60K - $80K'    : 'c',
    '$80K - $120K'   : 'd',
    '$120K +'        : 'e'   
}

df['newIncome']  =df.Income_Category.map(lambda x: dic[x])

Ans = df['newIncome']

 

Income_Category의 카테고리를 apply 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라 Unknown : N
Less than $40K : a
$40K - $60K : b
$60K - $80K : c
$80K - $120K : d
$120K +’ : e

def changeCategory(x):
    if x =='Unknown':
        return 'N'
    elif x =='Less than $40K':
        return 'a'
    elif x =='$40K - $60K':   
        return 'b'
    elif x =='$60K - $80K':    
        return 'c'
    elif x =='$80K - $120K':   
        return 'd'
    elif x =='$120K +' :     
        return 'e'

df['newIncome']  =df.Income_Category.apply(changeCategory)

 

Customer_Age의 값을 이용하여 나이 구간을 AgeState 컬럼으로 정의하라. (0~9 : 0 , 10~19 :10 , 20~29 :20 … 각 구간의 빈도수를 출력하라

df['AgeState']  = df.Customer_Age.map(lambda x: x//10 *10)

Ans = df['AgeState'].value_counts().sort_index()

 

Education_Level의 값중 Graduate단어가 포함되는 값은 1 그렇지 않은 경우에는 0으로 변경하여 newEduLevel 컬럼을 정의하고 빈도수를 출력하라

df['newEduLevel'] = df.Education_Level.map(lambda x : 1 if 'Graduate' in x else 0)
Ans = df['newEduLevel'].value_counts()

 

Marital_Status 컬럼값이 Married 이고 Card_Category 컬럼의 값이 Platinum인 경우 1 그외의 경우에는 모두 0으로 하는 newState컬럼을 정의하라. newState의 각 값들의 빈도수를 출력하라

def check(x):
    if x.Marital_Status =='Married' and x.Card_Category =='Platinum':
        return 1
    else:
        return 0


df['newState'] = df.apply(check,axis=1)

Ans  = df['newState'].value_counts()

 

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

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

 

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

def fix_century(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_century)

Ans = df.head(4)

 

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

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

 

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

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

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

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

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

Ans= df[['RPT','VAL']].rolling(7).mean()
년-월-일:시 컬럼을 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
 

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

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

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

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

날짜 컬럼을 index로 만들어라

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

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

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

Dim1에 따른 년도별 사망비율의 평균을 구하라

Ans = df.pivot_table(index='Dim1',columns='Period',values='First Tooltip',aggfunc='mean')
 
df1과 df2 데이터를 하나의 데이터 프레임으로 합쳐라
total = pd.concat([df1,df2])