{"cells":[
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output."
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "tp = pd.read_csv(\"../input/train.csv\", chunksize=500000,\nusecols=[\"Semana\",\"Canal_ID\",\"Ruta_SAK\",\"Cliente_ID\",\"Producto_ID\",\"Demanda_uni_equil\",\"Agencia_ID\"]\n,dtype  = {'Semana' : 'int8',\n                              'Agencia_ID' :'int32',\n                              'Canal_ID' : 'int8',\n                              'Ruta_SAK' : 'int32',\n                              'Cliente-ID' : 'int64',\n                              'Producto_ID':'int32',\n                              'Demanda_uni_equil':'int32'}\n)\n\n#tp.get_chunk(5)\n\ndf_train = pd.concat(tp, ignore_index=True)\n"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "df_train.head(3)\ndf_train.tail(3)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "#https://www.kaggle.com/armalali/grupo-bimbo-inventory-demand/benchmark-medians/code\nprod_median_tab = df_train.groupby('Producto_ID').agg({'Demanda_uni_equil': np.median})"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "prod_median_tab.head(3)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "prod_median_tab2 = df_train.groupby(['Producto_ID', 'Cliente_ID']).agg({'Demanda_uni_equil': np.median})"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "prod_median_tab2.head(3)"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "global_median = np.median(df_train['Demanda_uni_equil'])"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "print global_median"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "prod_median_dict2 = prod_median_tab2.to_dict()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "prod_median_dict = prod_median_tab.to_dict()"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "\ndef gen_output(key):\n    key = tuple(key)\n    try:\n        val = prod_median_dict2['AdjDemand'][key]\n        try:\n            val = prod_median_dict['AdjDemand'][key[0]]\n        except:\n            val = global_median\n    except:\n        val = global_median\n    return val\n    \ndf_test = pd.read_csv('../input/test.csv')\ndf_test.columns = [\"id\", \"Semana\",\"Canal_ID\",\"Ruta_SAK\",\"Cliente_ID\",\"Producto_ID\",\"Agencia_ID\"]"
 },
 {
  "cell_type": "code",
  "execution_count": null,
  "metadata": {
   "collapsed": false
  },
  "outputs": [],
  "source": "                   \n#Generating the output\ndf_test['Demanda_uni_equil'] = df_test[['Producto_ID', 'Cliente_ID']].\\\n                apply(lambda x:gen_output(x), axis=1)\ndf_submit = df_test[['id', 'Demanda_uni_equil']]\ndf_submit = df_submit.set_index('id')\ndf_submit.to_csv('naive_product_client_median.csv')\n"
 }
],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}}, "nbformat": 4, "nbformat_minor": 0}