반응형
데이터과학에서 python을 도구로 사용할 시 pandas, numpy 등의 라이브러리를 떨어질 수 없는 관계이다. 해당 연습을 위해 DataMinim 님의 데이터를 활용하여 연습하고, 결과를 공유하려 한다.
데이터 다운받기
사용하는 데이터는 DataMinim 님이 정제해둔 데이터이다. 아래와 같이 다운로드 한다.
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/youtube.csv",index_col=0)
df.head()
문제 1. 인기동영상 제작횟수가 많은 채널 상위 10개명을 출력하라 (날짜기준, 중복포함)
결과를 구하면 아래와 같은 리스트를 얻을 수 있다.
['짤툰',
'파뿌리',
'SPOTV',
'런닝맨 - 스브스 공식 채널',
'엠뚜루마뚜루 : MBC 공식 종합 채널',
'장삐쭈',
'BANGTANTV',
'채널 십오야',
'이과장',
'총몇명']
더보기
df_channelTitle = df.groupby('channelTitle')['title'].count().reset_index()
df_channelTitle.sort_values("title", ascending=False).head(10).channelTitle.to_list()
문제 2. 논란으로 인기동영상이 된 케이스를 확인하고 싶다. dislikes수가 like 수보다 높은 동영상을 제작한 채널을 모두 출력하라
결과
['핫도그TV', 'ASMR 애정TV', '하얀트리HayanTree', '양팡 YangPang', '철구형 (CHULTUBE)', '왜냐맨하우스', '(MUTUBE)와꾸대장봉준', '오메킴TV', '육지담', 'MapleStory_KR', 'ROAD FIGHTING CHAMPIONSHIP', '사나이 김기훈', '나혼자산다 STUDIO', 'Gen.G esports']
더보기
df[(df.dislikes > df.likes)].channelTitle.unique()
문제 3. 채널명을 바꾼 케이스가 있는지 확인하고 싶다. channelId의 경우 고유값이므로 이를 통해 채널명을 한번이라도 바꾼 채널의 갯수를 구하여라.
결과
71
더보기
df_sub = df[['channelTitle', 'channelId']].drop_duplicates()
change_channel = df_sub.channelId.value_counts()
change_channel = change_channel[change_channel > 1]
len(change_channel)
문제 4. 일요일에 인기있었던 영상들중 가장많은 영상 종류(categoryId)는 무엇인가?
결과
24
더보기
해설
youtube = df.copy()
# 1) pandas의 to_datetime을 이용하여 datetime object를 값으로 하는 새로운 컬럼 생성
youtube['datetime'] = pd.to_datetime(youtube.trending_date2)
# 2) youtube 데이터프레임에서 일요일에 해당하는지 is_sunday 컬럼에 추가 (일요일 1, 아니면 0)
youtube['is_sunday'] = (youtube.datetime.dt.day_name() == 'Sunday') + 0
# 3) 일요일에 해당하는 행만 추출
youtube_sunday = youtube[youtube.is_sunday == 1]
# 4) 일요일 중 categoryId 기준으로 값을 카운팅하고 가장 많은 값을 가진 0번째 index를 출력
youtube_sunday.categoryId.value_counts().index[0]
문제 5. 각 요일별 인기 영상들의 categoryId는 각각 몇개 씩인지 하나의 데이터 프레임으로 표현하라.
답안
더보기
해설
두 가지 방법으로 해결을 할 수 있다. 첫 번째는 pandas에서 제공하는 crosstab() 을 이용하는 방법이고, 두 번째는 pivot() 을 이용하는 방법이다.
첫 번재 crosstab()을 이용하는 방법은 아래와 같다.
youtube = df.copy()
# 1) datetime 정보를 기반으로 새로운 컬럼 생성
youtube['datetime'] = pd.to_datetime(youtube.trending_date2)
# 2) datetime에서 day_name()을 이용하여 요일 정보 새로운 컬럼에 추가
youtube['day'] = youtube.datetime.dt.day_name()
# 3) crosstab을 이용하여 정보 출력
pd.crosstab(youtube.categoryId, youtube.day)
두번 째 pivot()을 이용하는 방법이다.
# datetime 전처리는 동일하다.
youtube['datetime'] = pd.to_datetime(youtube.trending_date2)
youtube['day'] = youtube.datetime.dt.day_name()
# 1) groupby()를 이용하여 day, categoryId를 포함한 새로운 데이터 프레임을 생성한다.
# 해당 데이터 프레임은 day, categoryId, size를 컬럼으로 가진 데이터프레임이다.
youtube_group = youtube.groupby(['day', 'categoryId'], as_index = False).size()
# 2) 데이터프레임을 pivot()을 이용하여 day를 컬럼데이터로 전환하다.
youtube_group.pivot(index = 'categoryId', columns='day')
문제 6. 댓글의 수로 (comment_count) 영상 반응에 대한 판단을 할 수 있다. viewcount대비 댓글수가 가장 높은 영상을 확인하라 (view_count값이 0인 경우는 제외한다)
답안
'60분 동안 댓글이 달리지 않으면, 영상이 삭제됩니다. (챌린지)'
더보기
# 1) 기존 데이터에서 view_count가 0보다 큰 행들만 추출하여 새로운 데이터프레임 변수에 할당
view_count_not0 = df[df.view_count > 0].copy()
# 2) viewcount 대비 comment_count 비율 계산하여 새로운 컬럼 추가
view_count_not0['ratio'] = (df.comment_count / df.view_count)
# 3) 새로운 컬럼 기준으로 정렬하고, 첫 번재 데이터의 제목 확인
view_count_not0.sort_values(by = 'ratio', ascending=False).iloc[0,:].title
문제 7. 댓글의 수로 (comment_count) 영상 반응에 대한 판단을 할 수 있다.viewcount대비 댓글수가 가장 낮은 영상을 확인하라 (view_counts, ratio값이 0인경우는 제외한다.)
답안
Join the BTS #PermissiontoDance Challenge only on YouTube #Shorts
더보기
#1. view_counts, ratio값이 0인경우는 제외한 데이터 추출
view_count_not0 = df[(df.view_count > 0) & ((df.comment_count / df.view_count) > 0)].copy()
#2. 비율을 구한다.
view_count_not0['ratio'] = (df.comment_count / df.view_count)
#3. 오름차순 정렬하여 제목 추출
view_count_not0.sort_values(by = 'ratio').iloc[0,:].title
문제 8. like 대비 dislike의 수가 가장 적은 영상은 무엇인가? (like, dislike 값이 0인경우는 제외한다)
답안
[줌터뷰] *최초공개* 사부작즈🐰🐶의 비공식 이름은 아이라인즈? 꿀조합 티키타카 가득한 NCT 127 도영&정우의 줌터뷰
더보기
# likes, dislikes 0이 아닌 데이터 추출
like_dislike = df[(df.likes > 0) & (df.dislikes > 0)].copy()
# likes 대비 dislikes의 비율값을 새로운 컬럼으로 추가
like_dislike['ratio'] = (df.dislikes / df.likes)
# ratio 기준으로 정렬 및 title 출력
like_dislike.sort_values('ratio').head(1).title
반응형
'AI > Data Science' 카테고리의 다른 글
[Data Science] 월드컵 출전선수 골기록 데이터 (0) | 2023.02.07 |
---|---|
[Data Science] 유튜브 공범컨텐츠 동영상 데이터 분석하기 (1) | 2023.01.19 |
[데이터 과학] 확률분포 (이산형, 연속형) (0) | 2023.01.17 |
[데이터 과학] 베이즈 정리 (2) | 2022.12.26 |
[데이터 과학] 통계량 (추정량) (0) | 2022.12.26 |