작업 1유형 : 서울시 따릉이 이용정보 데이터

SOOYEON·2022년 5월 17일
0

빅데이터분석기사

목록 보기
9/36

서울시 따릉이 이용정보 데이터

Q3.

각 요일별 가장 많이 이용한 대여소의 이용횟수와 대여소 번호를 데이터 프레임으로 출력하라

  • df_day.reset_index() / ,ignore_index=True
# s
df_day = df.groupby(['day_name', '대여소번호'])['대여소번호'].count().to_frame('size').sort_values('size', ascending=False)
df_day
df_day.reset_index().drop_duplicates('day_name', keep='first',ignore_index=True)

#
result = df.groupby(['day_name','대여소번호']).size().to_frame('size').sort_values(['day_name','size'],ascending=False).reset_index()
answer  = result.drop_duplicates('day_name',keep='first').reset_index(drop=True)
display(answer)

Q4.

나이대별 대여구분 코드의 (일일권/전체횟수) 비율을 구한 후 가장 높은 비율을 가지는 나이대를 확인하라. 일일권의 경우 일일권 과 일일권(비회원)을 모두 포함하라

# day lent 
day_lent = df[(df['대여구분코드']=='일일권') | (df['대여구분코드']=='일일권(비회원)')]
day_lent_count = day_lent.groupby('연령대코드').count().sort_values('연령대코드')['이용건수']

# total lent
total_lent = df.groupby('연령대코드').count().sort_values('연령대코드')['이용건수']
total_lent

# answer
ans =(day_lent_count /total_lent).sort_values(ascending=False).index[0]
print(ans)

✅ .sort_index()

daily = df[df.대여구분코드.isin(['일일권','일일권(비회원)'])].연령대코드.value_counts().sort_index()
total = df.연령대코드.value_counts().sort_index()

ratio = (daily / total).sort_values(ascending=False)
print(ratio)
print('max ratio age ',ratio.index[0])

Q6. ❓

연령대 코드가 20대인 데이터를 추출하고,이동거리값이 추출한 데이터의 이동거리값의 평균 이상인 데이터를 추출한다.최종 추출된 데이터를 대여일자, 대여소 번호 순서로 내림차순 정렬 후 1행부터 200행까지의 탄소량의 평균을 소숫점 3째 자리까지 구하여라

# s
df_20 = df[df['연령대코드']=='20대']
res =  df_20[(df_20['이동거리']) >= (df_20['이동거리'].mean())]
res.sort_values(['대여일자','대여소번호'], ascending=False)
round(res[:200]['탄소량'].astype(float).mean(),3)

---> 1.667

# 
tw = df[df.연령대코드 =='20대'].reset_index(drop=True)
tw_mean = tw[tw.이동거리 >= tw.이동거리.mean()].reset_index(drop=True)
tw_mean['탄소량'] =tw_mean['탄소량'].astype('float')
target =tw_mean.sort_values(['대여일자','대여소번호'], ascending=False).reset_index(drop=True).iloc[:200].탄소량
result = round(target.sum()/len(target),3)
print(result)

---> 1.613

Q7.

6월 7일 ~10대의 “이용건수”의 중앙값은?

# describe
df[(df['연령대코드']=='~10대') & (df['대여일자'] =='2021-06-07')]['이용건수'].describe().to_frame().loc['50%'][0]

# median
df[(df['연령대코드']=='~10대') & (df['대여일자'] =='2021-06-07')]['이용건수'].median()

#
df['대여일자']  =pd.to_datetime(df['대여일자'])
result = df[(df.연령대코드 =='~10대') & (df.대여일자 ==pd.to_datetime('2021-06-07'))].이용건수.median()
print(result)

Q8. 🌟

평일 (월~금) 출근 시간대(오전 6,7,8시)의 대여소별 이용 횟수를 구해서 데이터 프레임 형태로 표현한 후 각 대여시간별 이용 횟수의 상위 3개 대여소와 이용횟수를 출력하라

size()


target = df[(df.day_name.isin(['Tuesday', 'Wednesday', 'Thursday', 'Friday','Monday'])) & (df.대여시간.isin([6,7,8]))]
# target = df[~(df.day_name.isin(['Saterday', 'Sunday'])) & (df.대여시간.isin([6,7,8]))]

result = target.groupby(['대여시간','대여소번호']).size().to_frame('이용 횟수')


answer = result.sort_values(['대여시간','이용 횟수'],ascending=False).groupby('대여시간').head(3)
display(answer)

Q10. ✅

남성(‘M’ or ‘m’)과 여성(‘F’ or ‘f’)의 이동거리값의 평균값을 구하여라

# s
df['성별']= df['성별'].str.lower()
df.groupby('성별')['이동거리'].mean().to_frame('이동거리')

# .map(lambda x:
df['sex'] = df['성별'].map(lambda x: '남' if x in ['M','m'] else '여')
answer = df[['sex','이동거리']].groupby('sex').mean()
display(answer)

0개의 댓글