빅데이터분석기사/작업형1

[작업형1] 평균 / 그룹합 / datetime 변환 구하기

seo0seok 2023. 6. 17. 21:26

// 퇴근후딴짓 님의 강의를 참고하였습니다. //

 

Dataset :

members.csv
0.01MB

 

문제7)

  • index '2001' 데이터(행)의 평균보다 큰 값의 수와
  • index '2003' 데이터(행)의 평균보다 작은 값의 수를 더하시오.
# 데이터 생성
import pandas as pd
import random
df = pd.DataFrame()
for i in range(0, 5):
    list_box = []
    for k in range(0, 200):
        ran_num = random.randint(1,200)
        list_box.append(ran_num)
    df[i+2000] = list_box
df = df.T
df.to_csv("data.csv", index=True)

→  7번 문제에서 사용할 data.csv 파일을 만드는 코드이다.

 

df = pd.read_csv("data.csv", index_col="Unnamed: 0")
print(df.head(2))

실행 결과 :
        0   1    2    3    4    5   6    7    8    9  ...  190  191  192  193  \
2000  137  74  114  140   80  150  16  133  178  181  ...  124   94  118   12   
2001  176  87   64  110  128   16   8    4  123   87  ...   59   22    3  108   

      194  195  196  197  198  199  
2000   50  191  137  174   56  128  
2001   17  104  101  161  156   43
m2001 = df.loc[2001].mean()
cond = df.loc[2001] > m2001
r1 = sum(cond)
print(r1)

m2003 = df.loc[2003].mean()
cond = df.loc[2003] < m2003
r2 = sum(cond)
print(r2)

print(r1+r2)

실행 결과 : 
100
102
202

→ 2001년도 평균을 구해 m2001 변수에 담은 후 평균보다 큰 개수를 r1에 담는다. 개수는 100개이다.

→ 2003년도 평균을 구해 m2003 변수에 담은 후 평균보다 작은 개수를 r2에 담는다. 개수는 102개이다.

→ 두 개수를 합하면 202개가 나오게 된다.

 

문제8)

  • 결측 값을 가진 데이터는 바로 뒤에 있는 값으로 대체한 후 (바로 뒤가 결측값이라면 뒤에 있는 데이터 중 가장 가까운 값)
  • city와 f2 컬럼 기준으로 그룹합을 계산한 뒤
  • views가 세번째로 큰 city(도시) 이름은?
import pandas as pd
df = pd.read_csv("members.csv")
display(df.head(7))
df = df.fillna(method='bfill')
display(df.head(7))

→ 결측치를 바로 뒤에 있는 값으로 대체하는 방법은 fill.na(method='bfill')을 사용하면 된다.

→ 앞에 있는 값으로 대체하는 방법은 fill.na(method='ffill')이다.

 

df = df.groupby(['city','f2']).sum().reset_index()
df = df.sort_values('views', ascending=False)
print(df.iloc[2,0])

실행 결과 : 대구

→ 그룹합을 구하는 방법은 .groupby(['열이름']).sum()을 하면된다. 그 이후 .reset_index()를 하여 인덱스를 초기화한다.

→ 그룹합 이후 3번째로 큰 도시 이름을 구하기 위해 sort_values를 통해 내림차순으로 정렬해준다.

→ 정렬 이후 3번째 도시 이름을 iloc[2,0]을 통해 구하면 대구가 나오게 된다.

 

문제9)

  • 구독(subscribed) 월별로 데이터 개수를 구한 뒤
  • 가장 작은 구독 수가 있는 월을 구하시오.
import pandas as pd
df = pd.read_csv("members.csv")
df['subscribed'] = pd.to_datetime(df['subscribed'])
df['year'] = df['subscribed'].dt.year
df['month'] = df['subscribed'].dt.month
df['day'] = df['subscribed'].dt.day

→ object형인 subscribed 열을 pd.to_datatime을 사용해 datatime 형태로 바꾸어 준다.

→ dt.year / dt.month / dt. day를 통해 년 / 월 / 일 열을 간단하게 만들어 줄 수 있다.

 

df = df.groupby('month').count()
df

→ groupby('month').count()를 통해 월별 개수를 구해준다.

 

df.sort_values('subscribed')

→ 가장 적은 구독자 수의 달을 구하기 위해 sort_values()를 통해 오름차순으로 정렬한다.

 

df.sort_values('subscribed').index[0]

실행 결과 : 11

→ 오름차순 정렬 후 index 0번째를 구하면 11월 달이 나오게 된다.