반응형
데이터 출처(유튜브 공범컨텐츠 동영상 데이터) : https://www.kaggle.com/kukuroo3/youtube-episodic-contents-kr
데이터 URL :
dataurl1 (비디오 정보) = https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/videoInfo.csv
dataurl2 (참가자 채널 정보) = https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/channelInfo.csv
import pandas as pd
channel = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/channelInfo.csv')
video = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/youtube/videoInfo.csv')
display(channel.head())
display(video.head())
각 데이터의 'ct' 컬럼을 시간으로 인식할 수 있게 datatype을 변경하고, video 데이터의 videoname의 각 value 마다 몇개의 데이터를 가지고 있는지 확인하여라.
video['ct'] = pd.to_datetime(video['ct'])
answer = video.videoname.value_counts()
print(answer)
수집된 각 video의 가장 최신화 된 날짜의 viewcount값을 출력하라.
answer = video.sort_values(['videoname', 'ct']).drop_duplicates('videoname', keep='last')[['viewcnt', 'videoname', 'ct']].reset_index(drop=True)
display(answer)
Channel 데이터 중 2021-10-03일 이후 각 채널에 처음 기록되었던 구독자 수(subcnt)를 출력하라.
channel.ct = pd.to_datetime(channel.ct)
target = channel[channel.ct >= pd.to_datetime('2021-10-03')].sort_values(['ct', 'channelname']).drop_duplicates('channelname')
answer = target[['channelname', 'subcnt']].reset_index(drop=True)
print(answer)
각 채널의 2021-10-03 03:00:00 ~ 2021-11-01 15:00:00까지 구독자 수(subcnt)의 증가량을 구하여라
end = channel.loc[channel.ct.dt.strftime('%Y-%m-%d %H') == '2021-11-01 15']
start = channel.loc[channel.ct.dt.strftime('%Y-%m-%d %H') == '2021-10-03 03']
end_df = end[['channelname', 'subcnt']].reset_index(drop=True)
start_df = start[['channelname', 'subcnt']].reset_index(drop=True)
각 비디오는 10분 간격으로 구독자수, 좋아요수, 싫어요수, 댓글수가 수집된 것이다. 공범 EP1의 비디오정보 데이터 중 수집간격이 5분 이하, 20분 이상인 데이터 구간(해당 시점 전, 후)의 시각을 모두 출력하라.
import datetime
ep_one = video.loc[video.videoname.str.contains('1')].sort_values('ct').reset_index(drop=True)
ep_one[
(ep_one.ct.diff(1) >= datetime.timedelta(minutes=20)) |
(ep_one.ct.diff(1) >= datetime.timedelta(minutes=5))
]
answer = ep_one[ep_one.index.isin([720, 721, 722, 723, 1635, 1636, 1637])]
display(answer)
각 에피소드의 시작날짜(연월일)를 에피소드 이름과 묶어 데이터프레임으로 만든 후 출력하라
start_date = video.sort_values(['ct', 'videoname']).drop_duplicates('videoname')[['ct', 'videoname']]
start_date['date'] = start_date.ct.dt.date
answer = start_date[['date', 'videoname']]
display(answer)
"공범" 컨텐츠의 경우 19:00에 공개 된다. 공개된 날 21시의 viewcnt, ct, videoname으로 구성된 데이터프레임의 viewcnt를 내림차순으로 정렬하여 출력하라.
video['time'] = video.ct.dt.hour
answer = video.loc[video['time'] == 21]
.sort_value(['videoname', 'ct'])
.drop_duplicates('videoname')
.sort_value('viewcnt', ascending=False)[['videoname', 'viewcnt', 'ct']]
.reset_index(drop=True)
display(answer)
video의 가장 최근 데이터들에서 각 에피소드의 싫어요/좋아요 비율을 ratio 컬럼으로 만들고, videoname, ratio로 구성된 데이터프레임의 ratio를 오름차순으로 정렬하라.
target = video.sort_values('ct').drop_duplicates('videoname', keep='last')
target['ratio'] = target['dislikecnt'] / target['likecnt']
answer = target.sort_values('ratio')[['videoname', 'ratio']].reset_index(drop=True)
answer
2021-11-01 00:00:00 ~ 15:00:00 각 에피소드별 viewcnt의 증가량을 데이터프레임으로 만드시오
start = pd.to_datetime("2021-11-01 00:00:00")
end = pd.to_datetime("2021-11-01 15:00:00")
target = video.loc[(video["ct"] >= start) & (video['ct'] <= end)].reset_index(drop=True)
def chech(x) :
result = max(x) - min(x)
return result
answer = target[['videoname', 'viewcnt']].groupby("videoname").agg(check)
answer
video 데이터에는 중복되는 데이터가 존재한다. 중복되는 데이터의 시간대와 videoname을 구하여라.
answer = video[video.index.isin(set(video.index) - set(video.drop_duplicates().index))]
result = answer[['videoname', 'ct']]
display(result)
출처 : https://www.datamanim.com/dataset/03_dataq/typeone.html#id4
반응형
'빅데이터분석기사 > 코드' 카테고리의 다른 글
[빅데이터분석기사] 작업형 2유형 연습문제 #2 (0) | 2023.06.14 |
---|---|
[빅데이터분석기사] 작업형 2유형 연습문제 #1 (0) | 2023.06.12 |
[빅데이터분석기사] 작업형 1유형 연습문제 #1 (0) | 2023.05.30 |
[빅데이터분석기사] 작업형 2유형 예시문제 풀이 (0) | 2023.05.25 |
[빅데이터분석기사] 작업형 1유형 예시문제 풀이 (0) | 2023.05.24 |