import pandas as pd import numpy as np pd.set_option('display.max_columns', None) def main(): process_yt() def process_yt(): stream_counts = pd.read_feather(f'../data/yt_streams.feather') stream_counts['stream_date'] = stream_counts['as_of'].dt.date stream_info = pd.read_feather(f'../data/yt_info.feather') stream_info['first_seen'] = stream_info['first_seen'].dt.date release_dates = stream_info.groupby('ytid')[['first_seen']].first().reset_index() stream_counts = pd.merge(stream_counts, release_dates, left_on='video_ytid', right_on='ytid') stream_counts = stream_counts[['ytid', 'comment_count', 'dislike_count', 'favorite_count', 'like_count', 'view_count', 'stream_date', 'first_seen']] stream_counts['days_after_first_seen'] = (stream_counts['stream_date'] - stream_counts['first_seen'])/pd.Timedelta('1d') stream_counts[stream_counts['days_after_first_seen'] < 0].groupby('ytid')['days_after_first_seen'].first() stream_counts = stream_counts.sort_values('stream_date') first_seen_after = stream_counts.groupby('ytid')['days_after_first_seen'].first() counts_per_track = stream_counts.groupby('ytid').size() remove_tracks = counts_per_track[counts_per_track < 15].index.values # 3024 stream_counts = stream_counts[~stream_counts.ytid.isin(remove_tracks)] stream_counts_change = stream_counts.copy() sc_change = stream_counts_change[stream_counts_change['days_after_first_seen'] < 100].set_index('ytid')[['view_count', 'stream_date','days_after_first_seen']].sort_values('stream_date') sc_change['view'] = sc_change['view_count'].astype(np.float64) a = sc_change.groupby('ytid')['view'].diff() def process_soundcloud(): idfield = 'scid' stream_counts = pd.read_feather('../data/sound_cloud_streams.feather') stream_counts['stream_date'] = stream_counts['as_of'] stream_info = pd.read_feather('../data/sound_cloud_info.feather') release_dates = stream_info.groupby(idfield)[['created_at']].first().reset_index() stream_counts = pd.merge(stream_counts, release_dates, left_on='track_scid', right_on=idfield) stream_counts['days_after_first_seen'] = (stream_counts['stream_date'] - stream_counts['created_at'])/pd.Timedelta('1d') first_seen_after = stream_counts.groupby(idfield)['days_after_first_seen'].first() counts_per_track = stream_counts.groupby(idfield).size() remove_tracks = counts_per_track[counts_per_track < 15].index.values stream_counts = stream_counts[~stream_counts[idfield].isin(remove_tracks)] stream_counts_change = stream_counts.copy() stream_counts_change = stream_counts_change.sort_values([idfield, 'stream_date']) stream_counts_change['view_count'] = stream_counts_change['playback_count'] stream_counts_change['view_count_day'] = stream_counts_change.groupby(idfield)['playback_count'].diff() stream_counts_change['daydiff'] = stream_counts_change.groupby(idfield)['stream_date'].diff()/pd.Timedelta('1d') stream_counts_change = stream_counts_change[['scid', 'download_count', 'favoritings_count', 'comment_count', 'stream_date', 'days_after_first_seen', 'daydiff', 'view_count', 'view_count_day']] stream_counts_change.reset_index().to_feather('../data/sound_cloud_streams_with_diff.feather') def normaliseStreams(yt, idfield, max_days = 100): yt = stream_counts_change yt_n = yt.copy() yt_n = yt_n[yt_n['days_after_first_seen'] <= max_days] yt_n = yt_n[yt_n['days_after_first_seen'] >= 0] total_count_per_track = yt_n.groupby(idfield)[['view_count_day']].sum().reset_index().rename(columns = {'view_count_day':'total_view_count'}) yt_n = pd.merge(yt_n, total_count_per_track, on= idfield) yt_n['normalised_count_day'] = yt_n['view_count_day']/yt_n['total_view_count'] return yt_n