빅데이터분석기사/코드

[빅데이터분석기사] 작업형 1유형 연습문제 #2

EveningPrimrose 2023. 5. 31. 01:45
반응형

데이터 출처(유튜브 공범컨텐츠 동영상 데이터) : https://www.kaggle.com/kukuroo3/youtube-episodic-contents-kr

 

youtube ep contents statistics(interval 10min)

monitoring Mafia GAME(daily update)

www.kaggle.com

 

데이터 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

 

반응형