반응형
데이터과학에서 python을 도구로 사용할 시 pandas, numpy 등의 라이브러리를 떨어질 수 없는 관계이다. 해당 연습을 위해 DataMinim 님의 데이터를 활용하여 연습하고, 결과를 공유하려 한다.
데이터 다운받기
사용하는 데이터는 DataMinim 님이 정제해둔 데이터이다. 아래와 같이 다운로드 한다.
import pandas as pd
df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/bicycle/seoul_bi.csv')
df.head()
문제 1. 대여일자별 데이터의 수를 데이터프레임으로 출력하고, 가장 많은 데이터가 있는 날짜를 출력하라
df['대여일자'].value_counts().sort_index().to_frame().idxmax()
답안
대여일자 2021-06-04
문제 2. 각 일자의 요일을 표기하고 (‘Monday’ ~’Sunday’) ‘day_name’컬럼을 추가하고 이를 이용하여 각 요일별 이용 횟수의 총합을 데이터 프레임으로 출력하라
df.대여일자 = pd.to_datetime(df.대여일자)
df['day_name'] = df.대여일자.dt.day_name()
df.day_name.value_counts().to_frame()
답안
문제 3. 각 요일별 가장 많이 이용한 대여소의 이용횟수와 대여소 번호를 데이터 프레임으로 출력하라
df_sub = df.groupby(['day_name', '대여소번호'] , as_index=False).size()
df_sub = df_sub.sort_values(['day_name', 'size'], ascending = False).reset_index(drop=True)
df_sub.drop_duplicates('day_name', keep='first').reset_index(drop=True)
답안
문제 4. 나이대별 대여구분 코드의 (일일권/전체횟수) 비율을 구한 후 가장 높은 비율을 가지는 나이대를 확인하라. 일일권의 경우 일일권 과 일일권(비회원)을 모두 포함하라
df_sub = pd.crosstab(df.연령대코드, df.대여구분코드)
(df_sub['일일권(비회원)'] + df_sub['일일권']) / df_sub.sum(axis = 1)
또는
daily = df[df.대여구분코드.isin(['일일권', '일일권(비회원)'])].연령대코드.value_counts().sort_index()
total = df.연령대코드.value_counts().sort_index()
(daily/total).sort_values(ascending=False)
답안
문제 5. 연령대 코드가 20대인 데이터를 추출하고,이동거리값이 추출한 데이터의 이동거리값의 평균 이상인 데이터를 추출한다.최종 추출된 데이터를 대여일자, 대여소 번호 순서로 내림차순 정렬 후 1행부터 200행까지의 탄소량의 평균을 소숫점 3째 자리까지 구하여라
df_20 = df[df.연령대코드 == '20대']
mean_20 = df_20.이동거리.mean()
df_mean_20 = df_20[df_20.이동거리 >= mean_20].reset_index(drop = True)
df_sort = df_mean_20.sort_values(['대여일자', '대여소번호'], ascending=False).iloc[:200, :]
round(df_sort.탄소량.astype('float').mean(),3)
답안 : 1.613
문제 6. 평일 (월~금) 출근 시간대(오전 6,7,8시)의 대여소별 이용 횟수를 구해서 데이터 프레임 형태로 표현한 후 각 대여시간별 이용 횟수의 상위 3개 대여소와 이용횟수를 출력하라
df_day = df[df.day_name.isin(['Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Monday', ])]
df_day_time = df_day[df_day.대여시간.isin([6, 7, 8])]
df_sub = df_day_time.groupby(['대여시간', '대여소번호'])['이용건수'].size().to_frame('이용횟수')
df_sub.sort_values(['대여시간', '이용횟수'], ascending=False).groupby('대여시간').head(3)
문제 7. 남성(‘M’ or ‘m’)과 여성(‘F’ or ‘f’)의 이동거리값의 평균값을 구하여라
df['sex'] = df.성별.apply(lambda x: '남성' if x in ['m', 'M'] else '여성')
df.groupby('sex', as_index=False)['이동거리'].mean()
반응형
'AI > Data Science' 카테고리의 다른 글
t-value와 t-test (0) | 2023.03.28 |
---|---|
정규화는 데이터 분리 전? 후? 언제 해야할까? (0) | 2023.03.12 |
[Data Science] 월드컵 출전선수 골기록 데이터 (0) | 2023.02.07 |
[Data Science] 유튜브 공범컨텐츠 동영상 데이터 분석하기 (1) | 2023.01.19 |
[Data Science] 유튜브 인기 동영상 분석하기 (0) | 2023.01.17 |