유튜브 인기동영상 데이터
데이터 출처 :https://www.kaggle.com/rsrishav/youtube-trending-video-dataset?select=KR_youtube_trending_data.csv
데이터 설명 : 유튜브 데일리 인기동영상 (한국)
dataurl : https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/youtube.csv
⭕️ 1. 인기동영상 제작횟수가 많은 채널 상위 10개명을 출력하라 (날짜기준, 중복포함)
df['channelTitle'].value_counts().head(10).index
⭕️ 2. 논란으로 인기동영상이 된 케이스를 확인하고 싶다. dislikes수가 like 수보다 높은 동영상을 제작한 채널을 모두 출력하라
print(df[df['dislikes']>df['likes']]['channelTitle'].unique())
❌ 3. 채널명을 바꾼 케이스가 있는지 확인하고 싶다. channelId의 경우 고유값이므로 이를 통해 채널명을 한번이라도 바꾼 채널의 갯수를 구하여라
# 채널 id 개수를 세면 안됨
temp = df.groupby('channelId')['channelTitle'].count()
temp = pd.DataFrame(temp)
temp = temp.reset_index()
temp = temp.rename(columns={'channelTitle':'changeCount'}) # 컬럼명을 바꾸고 나서는 다시 덮어씌워줘야 함!★
df = pd.merge(df, temp, on = 'channelId', how='left')
df[df['changeCount']>1]['channelTitle'].nunique()
# 1815
# 해설 : 차라리 똑같은 제목의 중복을 모두 제외해보고, 채널id별 채널명 개수를 세면 됨
change = df[['channelTitle','channelId']].drop_duplicates()['channelId'].value_counts()
print(len(change[change>1]))
# 71
⭕️ 4. 일요일에 인기있었던 영상들중 가장많은 영상 종류(categoryId)는 무엇인가?
dt.weekday → ★ 월요일: 0 화요일: 1 수요일: 2 목요일: 3 금요일: 4 토요일: 5 일요일: 6
.dt.day_name() → ★ 정수 없이 바로 요일 표현
df['trending_date2'] = pd.to_datetime(df['trending_date2'])
df['weekday'] = df['trending_date2'].dt.weekday
print(df[df['weekday']==6]['categoryId'].value_counts().head(1).index)
print(df[df['weekday']==6]['categoryId'].value_counts().head(1).index[0])
Index([24], dtype='int64', name='categoryId')
24
★ 여기서 주요 포인트 : index로 값 뽑으면 [24]가 되니까 [0]으로 한번 더 뽑아줘서 24만 나오도록 해야함
print(df[df['weekday']==6]['categoryId'].value_counts().head(1).index[0])
🔺 5. 각 요일별 인기 영상들의 categoryId는 각각 몇개 씩인지 하나의 데이터 프레임으로 표현하라
temp = df.groupby('weekday')['categoryId'].count()
temp = pd.DataFrame(temp)
print(temp)
★ groupby 할 때 as_index=False 하면 바로 데이터프레임화 가능
df.groupby('weekday', as_index=False)['categoryId'].count()
★ print하면 데이터프레임 형식이 깨지는데, display 하면 깨지지 않음 (시험장에서도 가능한지는 모르겠음) → display 사용 불가능
# 아. 각각 몇개씩이 피봇 테이블을 의미하는 거였다.
result = pd.pivot_table(data=df, columns= 'weekday', index='categoryId', values= 'title', aggfunc='count')
display(result)
⭕️ 6. 댓글의 수로 (comment_count) 영상 반응에 대한 판단을 할 수 있다. viewcount대비 댓글수가 가장 높은 영상을 확인하라 (view_count값이 0인 경우는 제외한다)
temp = df[df['view_count']>0]
temp['rate'] = temp['comment_count'] / temp['view_count']
print(temp.sort_values('rate', ascending=False)['title'].head(1).values)
# ['60분 동안 댓글이 달리지 않으면, 영상이 삭제됩니다. (챌린지)']
⭕️ 7. 댓글의 수로 (comment_count) 영상 반응에 대한 판단을 할 수 있다.viewcount대비 댓글수가 가장 낮은 영상을 확인하라 (view_counts, ratio값이 0인경우는 제외한다.)
temp2 = temp[temp['rate']>0]
print(temp2.sort_values('rate')['title'].head(1).values)
# ['Join the BTS #PermissiontoDance Challenge only on YouTube #Shorts']
⭕️ 8. like 대비 dislike의 수가 가장 적은 영상은 무엇인가? (like, dislike 값이 0인경우는 제외한다)
★ 일부 행을 기준으로만 결측치를 삭제하고 싶을 때 일단 dropna 하고 subset=[컬럼명] 서브셋으로 컬럼명 지정해주기
temp3 = df[(df['dislikes']>0) & (df['likes']>0)]
temp3['rate'] = temp3['dislikes'] / temp3['likes']
print(temp3.sort_values('rate')['title'].head(1).values)
# ['[줌터뷰] *최초공개* 사부작즈🐰🐶의 비공식 이름은 아이라인즈? 꿀조합 티키타카 가득한 NCT 127 도영&정우의 줌터뷰']
⭕️ 9. 가장많은 트렌드 영상을 제작한 채널의 이름은 무엇인가? (날짜기준, 중복포함)
print(df['channelTitle'].value_counts().head(1).index[0])
# 짤툰
❌ 10. 20회(20일)이상 인기동영상 리스트에 포함된 동영상의 숫자는?
df.sort_values(['title', 'trending_date2'])
temp = df.groupby('title', as_index=False)['trending_date2'].count()
print(len(temp[temp['trending_date2']>=20]))
# 41
# 아하, 제목이 겹칠 수 있으니까 카운트 할 때는 항상 유니크한 애들을 함께 껴서 생각해야겠다.
# 두개 컬럼 세트로 묶고 value_counts()하면, 각 조합의 빈도를 나타냄
# (df[['title','channelId']].value_counts() >= 20) 까지만 하면 true, false가 나옴. true는 1이니까 다 sum 때리면 개수 나옴
(df[['title','channelId']].value_counts() >= 20).sum()
$ 40
'📝 자격증 > 빅데이터 분석기사' 카테고리의 다른 글
[빅분기 실기 준비] 데이터마님 1유형 월드컵 출전선수 골기록 데이터 (8회 실기 1유형과 가장 비슷했던 데이터셋) (0) | 2024.07.06 |
---|---|
[빅분기 실기 준비] 데이터마님 1유형 유튜브 공범컨텐츠 동영상 데이터 (0) | 2024.07.06 |
[빅분기 실기 준비] T1 2회 기출유형 Python (결측치 → 중앙값으로 대체, 70% 데이터 추출) (0) | 2024.06.09 |
[빅분기 실기 준비] T1-1. 이상치를 찾아라 (IQR활용) - 작업형1 (0) | 2024.06.07 |
제8회 빅데이터분석기사-필기 합격 ❤️ (0) | 2024.05.12 |