{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "dsh9q8YTrkwD"
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from datetime import datetime, timedelta \n",
    "import numpy as np\n",
    "from tqdm import tqdm\n",
    "import warnings\n",
    "from collections import defaultdict\n",
    "import os\n",
    "import seaborn as sns\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get Data & Process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "path = '/Users/zhan009/Desktop/streaming_decay/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "b'Skipping line 7921485: expected 7 fields, saw 8\\nSkipping line 7921489: expected 7 fields, saw 8\\nSkipping line 7921492: expected 7 fields, saw 8\\nSkipping line 7921520: expected 7 fields, saw 8\\nSkipping line 7921529: expected 7 fields, saw 8\\nSkipping line 7921604: expected 7 fields, saw 8\\nSkipping line 7921644: expected 7 fields, saw 8\\nSkipping line 7921675: expected 7 fields, saw 8\\n'\n"
     ]
    }
   ],
   "source": [
    "data = pd.read_csv(path + 'all_track_with_isrc.csv', error_bad_lines=False)\n",
    "data = data.sort_values(by=['primary_artist_name', \n",
    "                            'product_family_name',\n",
    "                             'isrc_cd', \n",
    "                            'report_date']).reset_index().drop(['index', 'product_family_no'], axis = 1)\n",
    "data = data.rename(columns={'sum':'streams'})\n",
    "data.report_date = pd.to_datetime(data.report_date)\n",
    "data.min_report_date = pd.to_datetime(data.min_report_date)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### Only keep the song with total stream greater than 5000 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "filter_data = data.groupby(['primary_artist_name',\n",
    "                            'product_family_name', \n",
    "                            'isrc_cd',\n",
    "                            'min_report_date']).sum().reset_index()\n",
    "filter_data = filter_data[filter_data.streams >= 5000]\n",
    "selected_data = data[data.isrc_cd.isin(filter_data.isrc_cd)].reset_index().drop('index', axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "6Xj9mCx9rkwQ"
   },
   "outputs": [],
   "source": [
    "frame_artist_song = selected_data.groupby(['primary_artist_name',\n",
    "                                           'product_family_name', \n",
    "                                           'isrc_cd', 'min_report_date']).report_date.count().reset_index()\n",
    "\n",
    "##### Select Data only have 85 days \n",
    "frame_artist_song = frame_artist_song[frame_artist_song.report_date == 85]\n",
    "frame_artist_song = frame_artist_song.reset_index().drop('report_date', axis = 1)\n",
    "\n",
    "final_data = pd.merge(selected_data, frame_artist_song, on = ['primary_artist_name', \n",
    "                                                'product_family_name',\n",
    "                                                 'isrc_cd', \n",
    "                                                 'min_report_date'], how='inner')\n",
    "final_data = final_data.sort_values(by=['primary_artist_name', \n",
    "                                        'product_family_name',\n",
    "                                        'isrc_cd', \n",
    "                                        'report_date']).reset_index().drop('index', axis = 1)\n",
    "\n",
    "final_data['week'] = 0\n",
    "final_data['predict'] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 28616/28616 [00:29<00:00, 966.10it/s]\n"
     ]
    }
   ],
   "source": [
    "for i in tqdm(range(0, len(new_data), 85)):\n",
    "    for j in range(0,85):\n",
    "        if i + j < len(new_data) -1:\n",
    "            final_data.at[i+j, 'week'] = j//7 + 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "1p5SRy52rkwe"
   },
   "outputs": [],
   "source": [
    "#### Percentage Change\n",
    "final_data['ratio'] = final_data.groupby(['primary_artist_name',\n",
    "                                          'product_family_name', \n",
    "                                          'isrc_cd', \n",
    "                                          'min_report_date'])['streams'].apply(pd.Series.pct_change) + 1\n",
    "final_data = final_data.reset_index().drop('index', axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_data = final_data[final_data.week <= 2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "w_Z04XbArkw4",
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "test_data['shift_ratio'] = test_data.groupby(['primary_artist_name', 'product_family_name', 'isrc_cd', 'min_report_date']).streams.shift(1).dropna()\n",
    "summary_data = test_data[test_data.week == 2].groupby(['primary_artist_name', 'product_family_name', 'isrc_cd', 'min_report_date']).mean().reset_index()\n",
    "song_isrc = summary_data.isrc_cd\n",
    "ratio_list = [i+0.03 if i < 0.97 else i for i in summary_data.ratio]\n",
    "\n",
    "artist_info = {}\n",
    "for i in set(summary_data.primary_artist_name):\n",
    "    artist_data = summary_data[summary_data.primary_artist_name == i]\n",
    "    artist_info[i] = set(artist_data.isrc_cd)\n",
    "\n",
    "song_to_ratio = dict(zip(song_isrc, ratio_list))\n",
    "song_info = dict(zip(summary_data.isrc_cd, summary_data.product_family_name))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prediction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Data Needs to do Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "-4LWsULqrkxG"
   },
   "outputs": [],
   "source": [
    "'''\n",
    "'''\n",
    "week_start = 2\n",
    "apply_data = final_data[final_data.week > week_start]\n",
    "apply_data = apply_data.sort_values(['primary_artist_name', 'product_family_name', 'min_report_date'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "aritist_name = 'Beyoncé'\n",
    "track_name = 'Sandcastles'\n",
    "decay_rate = 1 - 0.015 #### add decay rate to make growth slower \n",
    "momentum = 1 + 0.006\n",
    "week_into_future = 10\n",
    "isrc_info = artist_info[aritist_name]\n",
    "isrc_code = [i for i in isrc_info if song_info[i] == track_name][0]\n",
    "song_ratio = song_to_ratio[isrc_code]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [],
   "source": [
    "product_data = test_data[test_data.isrc_cd == isrc_code].reset_index()\n",
    "product_data.predict = product_data.shift_ratio * song_to_ratio[isrc_code]\n",
    "prediction = [product_data.loc[product_data.index[-1],'predict']]\n",
    "for j in range(1, 10 * 7):\n",
    "    '''\n",
    "    Feature to add: update the streaming prediction everyweek \n",
    "    '''\n",
    "    if j % 7 == 0:\n",
    "        decay_rate = decay_rate * momentum\n",
    "    value = prediction[-1] * song_ratio * decay_rate\n",
    "    prediction.append(value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [],
   "source": [
    "BC = apply_data[apply_data.isrc_cd == isrc_code]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x12ba192d0>"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(range(len(prediction)), prediction)\n",
    "sns.lineplot(range(len(BC)), BC.streams)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "product_data['difference'] = product_data.streams - product_data.new_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "cU-CmX1urkxN",
    "outputId": "531e6204-2852-4a42-b97f-cdb6f392819d",
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "\n",
    "# new_data[new_data.product_family_name == 'Different World']\n",
    "# new_data.groupby('product_family_name').difference.mean()/new_data.groupby('product_family_name').streams.mean()\n",
    "# new_data.groupby('product_family_name').streams.mean()\n",
    "# new_data.groupby('product_family_name').difference.mean()"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "Decay Prediction Notebook.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
