{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Cube multidimensionnel - \u00e9nonc\u00e9\n", "\n", "Ce notebook aborde diff\u00e9rentes solutions pour traiter les donn\u00e9es qu'on repr\u00e9sente plus volontiers en plusieurs dimensions. Le mot-cl\u00e9 associ\u00e9 est [OLAP](https://en.wikipedia.org/wiki/Online_analytical_processing) ou cube OLAP. [Mondrian](http://community.pentaho.com/projects/mondrian/) est une solution open source, [cubes](http://cubes.databrewery.org/) est \u00e9crit en python. [Kylin](http://kylin.apache.org/) propose ce service sur des donn\u00e9es stock\u00e9es sur Hadoop. L'objectif est ici de d\u00e9couvrir pas d'explorer ces solutions."]}, {"cell_type": "code", "execution_count": 1, "metadata": {"collapsed": false}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Populating the interactive namespace from numpy and matplotlib\n"]}, {"data": {"text/html": ["Plan\n", "
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use('ggplot')\n", "import pyensae\n", "from pyquickhelper.helpgen import NbImage\n", "from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Repr\u00e9sentation"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le module [pandas](http://pandas.pydata.org/) manipule des tables et c'est la fa\u00e7on la plus commune de repr\u00e9senter les donn\u00e9es. Lorsque les donn\u00e9es sont multidimensionnelles, on distingue les coordonn\u00e9es des valeurs :"]}, {"cell_type": "code", "execution_count": 2, "metadata": {"collapsed": false}, "outputs": [{"data": {"image/png": "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\nMRfbUUpwsiYIs0/V6F+IlbeKiZ0xF9tRSnCyJgizT9XoX4iVt4qJnTEX21FKcLImCLNP1ehfiJW3\niomdMRfbUUpwsiYIs0/V6F+IlbeKiZ0xF9tRSnCyJgizT9XoX4iVt4qJnTEX21FKcLImCLNP1ehf\niJW3iomdMRfbUUpwsiYIs0/V6F+IlbeKiZ0xF9tRSnCyJgizT9XoX4iVt4qJnTEX21FKcLImiCP2\n+cdbuM7Gk09/0cpX4q9fXz5uAucAQyIlEugCvf1MKvz7f79/eoEXSbz8+HtVuQc0ISXDfH+13bm9\ndri4MV79QSp4hNWqsb/7TipIgbbkqTP6fHnjpzzEm2+kwuLAlJCSe+DrL361Hx5++UIuaQVyRS/s\nhtnn4/DPxycuX8bYCqAKKdmBWkgM4iVK7PPzO39XF/zaNTYbrSys1pqf0VF7oCF56owmP3576uea\nxs1I6hWA6SAlt8+3136dXZh9Bqk6/JndAE61z2Jp8GxHHALt8/JFhE5IiRCcAZeDT4azTyb54Lgv\nfv1ntBpXGHz3yAcvaEaeOqPJZp+vv2Yl4VDy9MPPVLg297ej/PuG1x/8hyezT7PPGZxlnxzoEMW9\nHt0+twQwpaZ9cpmnE2RMXlgtuGzjIL63FjXQiDx1xhD4Ltde4QbubUf5T0iwvvjuwexTap/+k/4m\nVcUbM/ZjfpAwH4yQlRWYu2e3y4hHHBLhmHJBkswbP1lv4ahUBs3cAxdIyQE4q8axPJ595vhk6jnH\nw2KVJCZfLuJuNdy31aqF+SnOqSKgEXnqFgXPkc/f/8jLf75/5kqLE2fJnx+euxpmnwGYDFKijoG1\n9q9tN8s0+4wM2ec7fzIoggglyl8ehcYVVpRF4QeZdSHU7fIolVeQJO95fA47vV3bPqmL5IW3aZ/k\nA4GwWnvIuMH4JegAbchTtyz1OVJgjai59vI2ArNBShQiXGtfDRfX7DOC78qqKIUJRc1F+lwfCrNP\n+vXZCPrPtJ4Tx2CoWaGvlikgulTlW+yXYRDdJLe2hb5j2oXminvjRs0CVUjJIOEzRHn3VF7EsH8A\n0IyUjNOyT0yyeV4sfXGvml+I+i5xO3GXukAb8tQtDP6ECJ4/UC7JGSUHvfPh2W9/0kvrAvNBSlQi\nWGt/SI2La/YZGbNP4hDoakmpW6/UkK0+c9X3kzr3t+t3W8u0NEmOWo4HejvTPkMaIbi5Ze3TRXMh\nGkATUjJOyz7TTiu2Fs5nmj1ZtXq9AmafM8AjiJPI1rEy/yFMF3buJMCckBKd7K21L8wM1ewz4tWq\nNMuallr58sxLgsyxHUZl5CPZD+12xD4FSTJc1Ns17dMFPX3WxFZ1/j2gASkZp2mf/Fhi0NVvxK59\n9i71gDbkqVubcKD0wRwrqX26sNNnBswHKdFKb629uRaGavYZmWyfxCMLR2kekjDa9lmf+dCxilsP\nJAlwXp63HejtTPssid8cix106AAK9UnJOB37BOgegPS42dut1lodO33OA1USovPaNhArm4MGYDJI\niV5aa+3LyZqafUam2+dGIX+hcyzcuxdQd0v11EfpDeIkownRyNsODPl69unwCexPI3dk3wHqk5Jx\n/EoNuJcwz7JaexJwces9uQO0IU/d6oRf5YTo/MBtRvkt2vLAVJASvTTWOrzX7YX+5YYk0Qu7occ+\nEd95PCqJBZ126/3p5YvNpTBayewnSbLaqEV/YMjXtU/8JDHoNyJmZDhqn615JpBqzUnAtdg/nVOg\nEXnq1iZ44RsvrJKjRutb0kWBqSAlWmmutdnnY9onqSCWNtKt18rOXTzCJFF5yyHXoi/szaHx9BlO\n2HsrWwD1Sck4Y/Yp3BJ1tUbDpq3uAq3IU7cy2e8zhC/Ger+14rHTZwFMBSnRyfBa28vbyFT7dOKV\nK1elcSj9VPXcV5u1dfUNr2YgSRfJ7UJWTA67vW1UX82yQA1S0mdbGtJnSJ4Mhzj3wFekBdCClIzj\nM6znzc0S95GlqiysFseYjR3fK+wtBAs0I0/duhB9DF+MRV/cBJeoZ/zxk5tR1bOBuSAlGtlbawaz\nz0hQHCYyFRt0pjIKNYy/gUAj77yyqEar8pAhNryBHAS9pcIYvHzDBVLSp700eVb8nG/Bp9EB2pAS\nIZ1dFO0NP0tVQT4VCasN1ZQADclTtypohLmAZr/b4P6J5xUmBD9ktAwwHaREH/trzWD2GZlqn7Ek\nRt0EqBSfHpKqbps/7FMfbWWGVzioa7LNQ952pDcgz7Bx5oMrpGSfeuDcK+LaSA5bCCkRIrFPZt25\nsYirbZD5GTxt50Br8tStCaon/QFa1Nn0vWY4pqTYf7u7FjAlpEQb0rUmmH3eFN6xKksI0nnMKq4P\npEpKtKE/w/OAsZOnzjAuwXaUEpysCeJO7dOfFJmDBR5TzD5noT/D84Cxk6fOMC7BdpQSnKwJ4q7t\ns3qPGt5Y1u9XlQK5khJt6M/wPGDs5KkzjEuwHaUEJ2uCuFP77P10zJFfUXgsIFtSog39GZ4HjJ08\ndYZxCbajlOBkTRD3ap8b9Y/LXvBzIo8CpExKtKE/w/OAsZOnzjAuwXaUEpysCeKu7fP20b8QK28V\nEztjLrajlOBkTRBmn6rRvxArbxUTO2MutqOU4GRNEGafqlG+EP/x638a5MEzjMOYfSpBap9/cwGN\nLSx2gxjJmuBcWFhY3FGgF3aD91i4gP/P4lFD+UJ4/8B/rBeLD99iepjwKgnhQph9qg6zT81h9mkx\nN0x4lYTZ5z2E2afmMPu0mBsmvErC7PMewuxTc5h9WswNE14lYfZ5D2H2qTnMPi3mhgmvkjD7vIcw\n+9QcZp8Wc8OEV0mYfd5DmH1qDrNPi7lhwqskzD7vIcw+NYfZp8XcMOFVEqKF+Pff/wdIN1XiuDSp\nlgAAAABJRU5ErkJggg==\n", "text/plain": [""]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["NbImage(\"cube1.png\")"]}, {"cell_type": "markdown", "metadata": {"collapsed": true}, "source": ["Dans cet exemple, il y a :\n", " \n", "* 3 coordonn\u00e9es : Age, Profession, Ann\u00e9ee\n", "* 2 valeurs : Esp\u00e9rance de vie, Population\n", "\n", "On peut repr\u00e9senter les donn\u00e9s \u00e9galement comme ceci :"]}, {"cell_type": "code", "execution_count": 3, "metadata": {"collapsed": false}, "outputs": [{"data": {"image/png": "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\nYII=\n", "text/plain": [""]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["NbImage(\"cube2.png\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est assez simple. Prenons un exemple : [table de mortalit\u00e9 de 1960 \u00e0 2010](http://www.data-publica.com/opendata/7098--population-et-conditions-sociales-table-de-mortalite-de-1960-a-2010) qu'on r\u00e9cup\u00e8re \u00e0 l'aide de la fonction [table_mortalite_euro_stat](http://www.xavierdupre.fr/app/actuariat_python/helpsphinx/actuariat_python/data/population.html#actuariat_python.data.population.table_mortalite_euro_stat). C'est assez long (4-5 minutes) sur l'ensemble des donn\u00e9es car elles doivent \u00eatre pr\u00e9trait\u00e9es (voir la documentation de la fonction). Pour \u00e9couter, il faut utiliser le param\u00e8tre *stop_at*."]}, {"cell_type": "code", "execution_count": 4, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["'mortalite.txt'"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["from actuariat_python.data import table_mortalite_euro_stat \n", "table_mortalite_euro_stat()"]}, {"cell_type": "code", "execution_count": 5, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["os.stat_result(st_mode=33206, st_ino=73183493945221205, st_dev=2797837379, st_nlink=1, st_uid=0, st_gid=0, st_size=104871002, st_atime=1445699900, st_mtime=1445699915, st_ctime=1445699900)"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["import os\n", "os.stat(\"mortalite.txt\")"]}, {"cell_type": "code", "execution_count": 6, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " annee | \n", " valeur | \n", " age | \n", " age_num | \n", " indicateur | \n", " genre | \n", " pays | \n", "
\n", " \n", " \n", " \n", " 0 | \n", " 2009 | \n", " 0.00080 | \n", " Y01 | \n", " 1 | \n", " DEATHRATE | \n", " F | \n", " AM | \n", "
\n", " \n", " 1 | \n", " 2008 | \n", " 0.00067 | \n", " Y01 | \n", " 1 | \n", " DEATHRATE | \n", " F | \n", " AM | \n", "
\n", " \n", " 2 | \n", " 2007 | \n", " 0.00052 | \n", " Y01 | \n", " 1 | \n", " DEATHRATE | \n", " F | \n", " AM | \n", "
\n", " \n", " 3 | \n", " 2006 | \n", " 0.00123 | \n", " Y01 | \n", " 1 | \n", " DEATHRATE | \n", " F | \n", " AM | \n", "
\n", " \n", " 4 | \n", " 2013 | \n", " 0.00016 | \n", " Y01 | \n", " 1 | \n", " DEATHRATE | \n", " F | \n", " AT | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" annee valeur age age_num indicateur genre pays\n", "0 2009 0.00080 Y01 1 DEATHRATE F AM\n", "1 2008 0.00067 Y01 1 DEATHRATE F AM\n", "2 2007 0.00052 Y01 1 DEATHRATE F AM\n", "3 2006 0.00123 Y01 1 DEATHRATE F AM\n", "4 2013 0.00016 Y01 1 DEATHRATE F AT"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["import pandas\n", "df = pandas.read_csv(\"mortalite.txt\", sep=\"\\t\", encoding=\"utf8\", low_memory=False)\n", "df.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Cubes de donn\u00e9es avec xarray"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### cr\u00e9ation\n", "\n", "Cette r\u00e9pr\u00e9sentation sous forme de table n'est pas toujours tr\u00e8s lisible. Les informations sont souvent r\u00e9p\u00e9t\u00e9es et les donn\u00e9es sont vraiment multidimensionnelles. Le module [xarray](http://xarray.pydata.org/en/stable/) propose de distinguer les coordonn\u00e9es des valeurs pour proposer des manipulations plus intuitives. Le module propose un DataFrame multidimensionnelle [DataSet](http://xarray.pydata.org/en/stable/data-structures.html#dataset)."]}, {"cell_type": "code", "execution_count": 7, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["Index(['annee', 'valeur', 'age', 'age_num', 'indicateur', 'genre', 'pays'], dtype='object')"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["from actuariat_python.data import table_mortalite_euro_stat \n", "table_mortalite_euro_stat()\n", "import pandas\n", "df = pandas.read_csv(\"mortalite.txt\", sep=\"\\t\", encoding=\"utf8\", low_memory=False)\n", "df.columns"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Dans ce cas-ci, pour reprendre la temrinologie du module [xarray](http://xarray.pydata.org/en/stable/), nous avons :\n", "\n", "* les **dimensions** : annee, age_num, pays, genre\n", "* les **valeurs** : une valeur par indicateur\n", "\n", "On peut passer d'un [DataFrame](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html) \u00e0 un [DataSet](http://xarray.pydata.org/en/stable/data-structures.html#dataset) de la fa\u00e7on suivante :\n", "\n", "* les colonnes ind\u00e9x\u00e9es repr\u00e9sentent les dimensions\n", "* les colonnes non ind\u00e9x\u00e9es sont les valeurs\n", "\n", "On garde supprime les colonnes qui ne nous int\u00e9ressent pas et les valeurs manquantes :"]}, {"cell_type": "code", "execution_count": 8, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["(Index(['annee', 'valeur', 'age', 'age_num', 'indicateur', 'genre', 'pays'], dtype='object'),\n", " Index(['annee', 'age_num', 'indicateur', 'pays', 'genre', 'valeur'], dtype='object'))"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["df2 = df[[\"annee\", \"age_num\",\"indicateur\",\"pays\",\"genre\",\"valeur\"]].dropna().reset_index(drop=True)\n", "df.columns, df2.columns"]}, {"cell_type": "code", "execution_count": 9, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " annee | \n", " age_num | \n", " indicateur | \n", " pays | \n", " genre | \n", " valeur | \n", "
\n", " \n", " \n", " \n", " 0 | \n", " 2009 | \n", " 1 | \n", " DEATHRATE | \n", " AM | \n", " F | \n", " 0.00080 | \n", "
\n", " \n", " 1 | \n", " 2008 | \n", " 1 | \n", " DEATHRATE | \n", " AM | \n", " F | \n", " 0.00067 | \n", "
\n", " \n", " 2 | \n", " 2007 | \n", " 1 | \n", " DEATHRATE | \n", " AM | \n", " F | \n", " 0.00052 | \n", "
\n", " \n", " 3 | \n", " 2006 | \n", " 1 | \n", " DEATHRATE | \n", " AM | \n", " F | \n", " 0.00123 | \n", "
\n", " \n", " 4 | \n", " 2013 | \n", " 1 | \n", " DEATHRATE | \n", " AT | \n", " F | \n", " 0.00016 | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" annee age_num indicateur pays genre valeur\n", "0 2009 1 DEATHRATE AM F 0.00080\n", "1 2008 1 DEATHRATE AM F 0.00067\n", "2 2007 1 DEATHRATE AM F 0.00052\n", "3 2006 1 DEATHRATE AM F 0.00123\n", "4 2013 1 DEATHRATE AT F 0.00016"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["df2.head()"]}, {"cell_type": "code", "execution_count": 10, "metadata": {"collapsed": false}, "outputs": [], "source": ["df2[\"indicateur\"] = df2[\"indicateur\"].astype(str)\n", "df2[\"genre\"] = df2[\"genre\"].astype(str)\n", "df2[\"pays\"] = df2[\"pays\"].astype(str)"]}, {"cell_type": "code", "execution_count": 11, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["annee int64\n", "age_num float64\n", "indicateur object\n", "pays object\n", "genre object\n", "valeur float64\n", "dtype: object"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["df2.dtypes"]}, {"cell_type": "markdown", "metadata": {}, "source": ["L'op\u00e9ration complexe consiste \u00e0 faire passer les valeurs de la colonne *indicateur* en tant que colonnes. C'est l'objet de la m\u00e9thode [pivot_table](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot_table.html?highlight=pivot#pandas.DataFrame.pivot_table) :"]}, {"cell_type": "code", "execution_count": 12, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " | \n", " | \n", " indicateur | \n", " DEATHRATE | \n", " LIFEXP | \n", " PROBDEATH | \n", " PROBSURV | \n", " PYLIVED | \n", " SURVIVORS | \n", " TOTPYLIVED | \n", "
\n", " \n", " annee | \n", " age_num | \n", " pays | \n", " genre | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", "
\n", " \n", " \n", " \n", " 1960 | \n", " 1 | \n", " BE | \n", " F | \n", " 0.00159 | \n", " 73.7 | \n", " 0.00159 | \n", " 0.99841 | \n", " 97316 | \n", " 97393 | \n", " 7179465 | \n", "
\n", " \n", " M | \n", " 0.00207 | \n", " 68.2 | \n", " 0.00207 | \n", " 0.99793 | \n", " 96420 | \n", " 96520 | \n", " 6580601 | \n", "
\n", " \n", " T | \n", " 0.00184 | \n", " 70.9 | \n", " 0.00184 | \n", " 0.99816 | \n", " 96856 | \n", " 96945 | \n", " 6874529 | \n", "
\n", " \n", " BG | \n", " F | \n", " 0.00652 | \n", " 73.2 | \n", " 0.00650 | \n", " 0.99350 | \n", " 95502 | \n", " 95813 | \n", " 7017023 | \n", "
\n", " \n", " M | \n", " 0.00644 | \n", " 70.0 | \n", " 0.00642 | \n", " 0.99358 | \n", " 94801 | \n", " 95107 | \n", " 6653130 | \n", "
\n", " \n", "
\n", "
"], "text/plain": ["indicateur DEATHRATE LIFEXP PROBDEATH PROBSURV PYLIVED \\\n", "annee age_num pays genre \n", "1960 1 BE F 0.00159 73.7 0.00159 0.99841 97316 \n", " M 0.00207 68.2 0.00207 0.99793 96420 \n", " T 0.00184 70.9 0.00184 0.99816 96856 \n", " BG F 0.00652 73.2 0.00650 0.99350 95502 \n", " M 0.00644 70.0 0.00642 0.99358 94801 \n", "\n", "indicateur SURVIVORS TOTPYLIVED \n", "annee age_num pays genre \n", "1960 1 BE F 97393 7179465 \n", " M 96520 6580601 \n", " T 96945 6874529 \n", " BG F 95813 7017023 \n", " M 95107 6653130 "]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["piv = df2.pivot_table(index=[\"annee\", \"age_num\",\"pays\",\"genre\"],\n", " columns=[\"indicateur\"],\n", " values=\"valeur\")\n", "piv.head()"]}, {"cell_type": "code", "execution_count": 13, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["indicateur\n", "DEATHRATE float64\n", "LIFEXP float64\n", "PROBDEATH float64\n", "PROBSURV float64\n", "PYLIVED float64\n", "SURVIVORS float64\n", "TOTPYLIVED float64\n", "dtype: object"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["piv.dtypes"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Les donn\u00e9es sont maintenant pr\u00eates \u00e0 passer sous *xarray* :"]}, {"cell_type": "code", "execution_count": 14, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["\n", "Dimensions: (age_num: 84, annee: 54, genre: 3, pays: 54)\n", "Coordinates:\n", " * annee (annee) int64 1960 1961 1962 1963 1964 1965 1966 1967 1968 ...\n", " * age_num (age_num) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ...\n", " * pays (pays) object 'AM' 'AT' 'AZ' 'BE' 'BG' 'BY' 'CH' 'CY' 'CZ' ...\n", " * genre (genre) object 'F' 'M' 'T'\n", "Data variables:\n", " DEATHRATE (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " LIFEXP (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBDEATH (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBSURV (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " SURVIVORS (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " TOTPYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ..."]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["import xarray\n", "ds = xarray.Dataset.from_dataframe(piv)\n", "ds"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### s\u00e9lection\n", "\n", "Il est facile ensuite d'extraire les donn\u00e9es d'un pays avec la m\u00e9thode [sel](http://xarray.pydata.org/en/stable/indexing.html#indexing-and-selecting-data) :"]}, {"cell_type": "code", "execution_count": 15, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["\n", "Dimensions: (age_num: 84, annee: 54, genre: 3, pays: 1)\n", "Coordinates:\n", " * annee (annee) int64 1960 1961 1962 1963 1964 1965 1966 1967 1968 ...\n", " * age_num (age_num) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ...\n", " * pays (pays) object 'FR'\n", " * genre (genre) object 'F' 'M' 'T'\n", "Data variables:\n", " DEATHRATE (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " LIFEXP (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBDEATH (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBSURV (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " SURVIVORS (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " TOTPYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ..."]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["ds.sel(pays=[\"FR\"])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ou de plusieurs pays :"]}, {"cell_type": "code", "execution_count": 16, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["\n", "Dimensions: (age_num: 84, annee: 54, genre: 3, pays: 2)\n", "Coordinates:\n", " * annee (annee) int64 1960 1961 1962 1963 1964 1965 1966 1967 1968 ...\n", " * age_num (age_num) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ...\n", " * pays (pays) object 'FR' 'BE'\n", " * genre (genre) object 'F' 'M' 'T'\n", "Data variables:\n", " DEATHRATE (annee, age_num, pays, genre) float64 nan nan nan 0.00159 ...\n", " LIFEXP (annee, age_num, pays, genre) float64 nan nan nan 73.7 68.2 ...\n", " PROBDEATH (annee, age_num, pays, genre) float64 nan nan nan 0.00159 ...\n", " PROBSURV (annee, age_num, pays, genre) float64 nan nan nan 0.9984 ...\n", " PYLIVED (annee, age_num, pays, genre) float64 nan nan nan 9.732e+04 ...\n", " SURVIVORS (annee, age_num, pays, genre) float64 nan nan nan 9.739e+04 ...\n", " TOTPYLIVED (annee, age_num, pays, genre) float64 nan nan nan 7.179e+06 ..."]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["ds.sel(pays=[\"FR\", \"BE\"])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ou plusieurs dimensions :"]}, {"cell_type": "code", "execution_count": 17, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["\n", "Dimensions: (age_num: 84, genre: 3)\n", "Coordinates:\n", " annee int64 2000\n", " * age_num (age_num) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ...\n", " pays object 'FR'\n", " * genre (genre) object 'F' 'M' 'T'\n", "Data variables:\n", " DEATHRATE (age_num, genre) float64 0.00043 0.00046 0.00044 0.00021 ...\n", " LIFEXP (age_num, genre) float64 82.3 74.7 78.5 81.3 73.7 77.6 80.3 ...\n", " PROBDEATH (age_num, genre) float64 0.00043 0.00046 0.00044 0.00021 ...\n", " PROBSURV (age_num, genre) float64 0.9996 0.9995 0.9996 0.9998 0.9997 ...\n", " PYLIVED (age_num, genre) float64 9.957e+04 9.944e+04 9.951e+04 ...\n", " SURVIVORS (age_num, genre) float64 9.959e+04 9.947e+04 9.953e+04 ...\n", " TOTPYLIVED (age_num, genre) float64 8.196e+06 7.432e+06 7.817e+06 ..."]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["ds.sel(pays=\"FR\", annee=2000)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Pour acc\u00e9der \u00e0 la s\u00e9rie ``LIFEXP`` pour les hommes, les ann\u00e9es 2000 et 2010, le pays ``FR``, on fait la diff\u00e9rence, puis on la r\u00e9cup\u00e8re sous forme de DataFrame :"]}, {"cell_type": "code", "execution_count": 18, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " LIFEXP | \n", " genre | \n", " pays | \n", "
\n", " \n", " age_num | \n", " | \n", " | \n", " | \n", "
\n", " \n", " \n", " \n", " 1 | \n", " 2.6 | \n", " T | \n", " FR | \n", "
\n", " \n", " 2 | \n", " 2.6 | \n", " T | \n", " FR | \n", "
\n", " \n", " 3 | \n", " 2.6 | \n", " T | \n", " FR | \n", "
\n", " \n", " 4 | \n", " 2.6 | \n", " T | \n", " FR | \n", "
\n", " \n", " 5 | \n", " 2.6 | \n", " T | \n", " FR | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" LIFEXP genre pays\n", "age_num \n", "1 2.6 T FR\n", "2 2.6 T FR\n", "3 2.6 T FR\n", "4 2.6 T FR\n", "5 2.6 T FR"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["(ds.sel(pays=\"FR\", annee=2010, genre=\"T\")[\"LIFEXP\"] - \n", " ds.sel(pays=\"FR\", annee=2000, genre=\"T\")[\"LIFEXP\"]).to_dataframe().head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On a gagn\u00e9 presque deux ans et demi d'esp\u00e9rance de vie \u00e0 la naissance en 10 ans."]}, {"cell_type": "code", "execution_count": 19, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " | \n", " LIFEXP | \n", " annee | \n", "
\n", " \n", " age_num | \n", " genre | \n", " | \n", " | \n", "
\n", " \n", " \n", " \n", " 1 | \n", " F | \n", " 2.6 | \n", " 2010 | \n", "
\n", " \n", " M | \n", " -0.3 | \n", " 2010 | \n", "
\n", " \n", " 2 | \n", " F | \n", " 2.7 | \n", " 2010 | \n", "
\n", " \n", " M | \n", " -0.4 | \n", " 2010 | \n", "
\n", " \n", " 3 | \n", " F | \n", " 2.7 | \n", " 2010 | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" LIFEXP annee\n", "age_num genre \n", "1 F 2.6 2010\n", " M -0.3 2010\n", "2 F 2.7 2010\n", " M -0.4 2010\n", "3 F 2.7 2010"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["(ds.sel(pays=\"FR\", annee=2010, genre=[\"F\",\"M\"])[\"LIFEXP\"] - \n", " ds.sel(pays=\"UK\", annee=2010, genre=[\"F\",\"M\"])[\"LIFEXP\"]).to_dataframe().head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Quelques graphes"]}, {"cell_type": "code", "execution_count": 20, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 21, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\nzMzU7t27FRsbq6VLl2rRokWFLr9lyxY9/vjjHkcPxMXFGaohKyvLY695SEiIoaF92dnZSktLK/aR\n+AULFmjcuHGSpO+++04ffvihnnzySR0+fFjz5s3TiBEjDLXzyCOPqHz58u7f88svv+zeDnsTEBCg\nvn37qmnTppo9e7Y6dOignj17ys/Pz9D3Kffn7+fnp6pVqxY5eOa0k1NzgwYNVKtWrSIFz5yetpx/\ni5zac7alRpj9beXffuc+yGS0htDQUPeBtuTkZG3dulXh4eF64oknDC2fU+vTTz+t9957T+PHj9fp\n06c1bNgwwwdurVjHeFKU7Y7Z/Tnp6ki0nH0ASapVq5b74N6HH37odfmYmBhNmTIlz/e5Ro0aGj58\nuEaNGuU1fJr9bUlSvXr1NGnSJEOvNaJcuXJq0KCBkpKSdPToUR0+fNjrMl988YVq1aqlzp07u3tL\ni/o9OHXqVJ7gmeOuu+7SvHnzCl3W6XSqc+fO6ty5s86cOaO4uDgNHz5c/fr1c48CMsrsvq0n1atX\nL9b5/z4TPosrKipKY8aMUXZ2tlq0aKG6detKuroxMxKcqlevXmCiN2rEiBGKj4/XK6+8oqZNmyoy\nMrLIG+Qvv/xScXFxeuihh9xHw8PDw7321OVo3Lixpk+fripVqiglJcV9VOvcuXOGhjeWK1fOvZIJ\nCgpSrVq1LAueRlWpUsW9YxocHJxnWFZwcLChNurUqaM333yz2DUcO3ZMCxcuVJUqVfTGG2+4j8oX\nxaOPPqpXXnlFDz/8sO644w5Nnz5dLVu2VGJiopo1a2aojdzfn2rVqql79+7q3r27Tpw4ofj4eK/L\nBwYG6vPPP9fly5dVsWJFrVu3Tu3atdO33357zRCYwqSkpFzzHUxJSTH0/a5UqZJiYmLUuHFjd49G\nznsz+vsoLOQaDV6eZGZmGl5hnjhxQiNHjpTL5dKpU6c0cuRISVffh7dJTaxYv0i/nmvUsWNHLVmy\nRI0bN1bVqlXdj3vbcBQ2xDEsLMxQDadOndLkyZPdn0NO77mRzyFHzZo1DY8I8cTMv0WOKVOmuGuf\nOnWquw2jHnjgAT333HPKzs5Wnz59NH36dIWGhurgwYNq166doTbyf/8DAgLUsmVLtWzZUunp6V6X\nDw8PV926dXXHHXdc89zKlSsNv4+xY8eqXbt27jD+yy+/KD4+Xg8++KDX5atUqWJoGGNBsrOz3euW\n+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\nCQAAQO3eABjD0cGVyulcAAAAAElFTkSuQmCC\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["ds.sel(annee=2010,age_num=1,genre=\"T\")[\"LIFEXP\"].to_dataframe() \\\n", " .sort_values(\"LIFEXP\", ascending=False) \\\n", " .plot(y=\"LIFEXP\", kind=\"bar\", figsize=(16,6), ylim=[65,85])"]}, {"cell_type": "code", "execution_count": 21, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["[]"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\nCNHr/wF95EtFT3uvYgAAAABJRU5ErkJggg==\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["ds.sel(annee=2010,genre=\"T\",pays=\"FR\")[\"LIFEXP\"].plot()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 : que font les lignes suivantes ?\n", "\n", "On pourra s'aider des pages :\n", "\n", "* [align nad reindex](http://xarray.pydata.org/en/stable/indexing.html#align-and-reindex)\n", "* [transforming datasets](http://xarray.pydata.org/en/stable/data-structures.html?highlight=assign#transforming-datasets)"]}, {"cell_type": "code", "execution_count": 22, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["\n", "Dimensions: (age_num: 84, annee: 54, genre: 3, pays: 54)\n", "Coordinates:\n", " * annee (annee) int64 1960 1961 1962 1963 1964 1965 1966 1967 1968 ...\n", " * age_num (age_num) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 ...\n", " * pays (pays) object 'AM' 'AT' 'AZ' 'BE' 'BG' 'BY' 'CH' 'CY' 'CZ' ...\n", " * genre (genre) object 'F' 'M' 'T'\n", "Data variables:\n", " DEATHRATE (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " LIFEXP (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBDEATH (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBSURV (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " SURVIVORS (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " TOTPYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " LIFEEXP_add (annee, age_num, pays, genre) float64 nan nan nan nan nan ..."]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["ds.assign(LIFEEXP_add = ds.LIFEXP-1)"]}, {"cell_type": "code", "execution_count": 23, "metadata": {"collapsed": false}, "outputs": [], "source": ["meanp = ds.mean(dim=\"pays\")\n", "ds1, ds2 = xarray.align(ds, meanp, join='outer')"]}, {"cell_type": "code", "execution_count": 24, "metadata": {"collapsed": false}, "outputs": [], "source": ["joined = ds1.assign(meanp = ds2[\"LIFEXP\"])"]}, {"cell_type": "code", "execution_count": 25, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/html": ["\n", "
\n", " \n", " \n", " | \n", " | \n", " | \n", " | \n", " DEATHRATE | \n", " LIFEXP | \n", " PROBDEATH | \n", " PROBSURV | \n", " PYLIVED | \n", " SURVIVORS | \n", " TOTPYLIVED | \n", " meanp | \n", "
\n", " \n", " age_num | \n", " annee | \n", " genre | \n", " pays | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", "
\n", " \n", " \n", " \n", " 1 | \n", " 1960 | \n", " F | \n", " AM | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " 73.52 | \n", "
\n", " \n", " AT | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " 73.52 | \n", "
\n", " \n", " AZ | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " NaN | \n", " 73.52 | \n", "
\n", " \n", " BE | \n", " 0.00159 | \n", " 73.7 | \n", " 0.00159 | \n", " 0.99841 | \n", " 97316 | \n", " 97393 | \n", " 7179465 | \n", " 73.52 | \n", "
\n", " \n", " BG | \n", " 0.00652 | \n", " 73.2 | \n", " 0.00650 | \n", " 0.99350 | \n", " 95502 | \n", " 95813 | \n", " 7017023 | \n", " 73.52 | \n", "
\n", " \n", "
\n", "
"], "text/plain": [" DEATHRATE LIFEXP PROBDEATH PROBSURV PYLIVED \\\n", "age_num annee genre pays \n", "1 1960 F AM NaN NaN NaN NaN NaN \n", " AT NaN NaN NaN NaN NaN \n", " AZ NaN NaN NaN NaN NaN \n", " BE 0.00159 73.7 0.00159 0.99841 97316 \n", " BG 0.00652 73.2 0.00650 0.99350 95502 \n", "\n", " SURVIVORS TOTPYLIVED meanp \n", "age_num annee genre pays \n", "1 1960 F AM NaN NaN 73.52 \n", " AT NaN NaN 73.52 \n", " AZ NaN NaN 73.52 \n", " BE 97393 7179465 73.52 \n", " BG 95813 7017023 73.52 "]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["joined.to_dataframe().head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Lire, \u00e9crire des datasets"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le module [xarray](http://xarray.pydata.org/en/stable/) s'appuie sur le module [netCDF4](https://github.com/Unidata/netcdf4-python) qui lui-m\u00eame est un [wrapper](https://fr.wikipedia.org/wiki/Adaptateur_(patron_de_conception)) poython de la libraire [netCDF-c](https://github.com/Unidata/netcdf-c). Celle-ci est sp\u00e9cialis\u00e9e dans la lecture et l'\u00e9criture de donn\u00e9es scientifiques. Concr\u00e8tement, ce n'est pas [xarray](http://xarray.pydata.org/en/stable/) qui s'en occupe mais [netCDF4](https://github.com/Unidata/netcdf4-python). Cela explique la syntaxe d\u00e9crite par [Serialization and IO](http://xarray.pydata.org/en/stable/io.html#serialization-and-io) :"]}, {"cell_type": "code", "execution_count": 26, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["Data variables:\n", " DEATHRATE (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " LIFEXP (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBDEATH (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PROBSURV (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " PYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " SURVIVORS (annee, age_num, pays, genre) float64 nan nan nan nan nan ...\n", " TOTPYLIVED (annee, age_num, pays, genre) float64 nan nan nan nan nan ..."]}, "execution_count": 27, "metadata": {}, "output_type": "execute_result"}], "source": ["ds.data_vars"]}, {"cell_type": "code", "execution_count": 27, "metadata": {"collapsed": false}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["l'\u00e9criture a \u00e9chou\u00e9\n"]}], "source": ["try:\n", " ds.to_netcdf('mortalite.nc')\n", "except ValueError as e:\n", " # it breaks with pandas 0.17\n", " # xarray has to be updated\n", " print(\"l'\u00e9criture a \u00e9chou\u00e9\")\n", " pass"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est un format binaire plus efficace que le format texte :"]}, {"cell_type": "code", "execution_count": 28, "metadata": {"collapsed": false}, "outputs": [], "source": ["import os\n", "if os.path.exists(\"mortalite.nc\"):\n", " os.stat('mortalite.nc').st_size, os.stat('mortalite.txt').st_size"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On relit :"]}, {"cell_type": "code", "execution_count": 29, "metadata": {"collapsed": false}, "outputs": [], "source": ["if os.path.exists(\"mortalite.nc\"):\n", " ds_lu = xarray.open_dataset('mortalite.nc')\n", " ds_lu"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le module [xarray](http://xarray.pydata.org/en/stable/) propose \u00e9galement de lire des donn\u00e9es de plusieurs fichiers pour ne former qu'un seul dataset (voir [Combining multiple files](http://xarray.pydata.org/en/stable/io.html#combining-multiple-files)) :"]}, {"cell_type": "code", "execution_count": 30, "metadata": {"collapsed": false}, "outputs": [{"data": {"text/plain": ["['AM', 'AT', 'AZ', 'BE', 'BG']"]}, "execution_count": 31, "metadata": {}, "output_type": "execute_result"}], "source": ["pays = list(_.values for _ in ds[\"pays\"])\n", "pays[:5]"]}, {"cell_type": "code", "execution_count": 31, "metadata": {"collapsed": false}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["enregistre AM\n", "l'\u00e9criture a \u00e9chou\u00e9 pour AM\n", "enregistre AT\n", "l'\u00e9criture a \u00e9chou\u00e9 pour AT\n", "enregistre AZ\n", "l'\u00e9criture a \u00e9chou\u00e9 pour AZ\n", "enregistre BE\n", "l'\u00e9criture a \u00e9chou\u00e9 pour BE\n", "enregistre BG\n", "l'\u00e9criture a \u00e9chou\u00e9 pour BG\n"]}], "source": ["for p in pays[:5]:\n", " print(\"enregistre\", p)\n", " d = ds.sel(pays=[p])\n", " try:\n", " d.to_netcdf(\"mortalite_pays_%s.nc\" % p)\n", " except ValueError:\n", " print(\"l'\u00e9criture a \u00e9chou\u00e9 pour\", p)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On relit :"]}, {"cell_type": "code", "execution_count": 32, "metadata": {"collapsed": false}, "outputs": [], "source": ["import os\n", "if os.path.exists(\"mortalite_pays_AM.nc\"):\n", " ds_lu2 = xarray.open_mfdataset('mortalite_pays*.nc')\n", " ds_lu2"]}, {"cell_type": "markdown", "metadata": {}, "source": ["A quoi \u00e7a sert ?\n", "\n", "Lorsqu'on travaille avec des gros fichiers de donn\u00e9es, on cherche \u00e0 retarder le plus possible l'ex\u00e9cution d'un calcul, on manipule les donn\u00e9es sans les charger en m\u00e9moire. On appelle ceci [\u00e9valuation paresseuse](https://fr.wikipedia.org/wiki/%C3%89valuation_paresseuse) ou [lazy evaluation](https://en.wikipedia.org/wiki/Lazy_evaluation) en anglais. [xarray](http://xarray.pydata.org/en/stable/) et [dask](http://dask.pydata.org/en/latest/) permettent de faire cela (voir [Using dask with xarray](http://xarray.pydata.org/en/stable/dask.html#dask-io)). La logique qu'on suit est alors assez proche de la [programmation fonctionnelle](https://fr.wikipedia.org/wiki/Programmation_fonctionnelle)."]}, {"cell_type": "code", "execution_count": 33, "metadata": {"collapsed": true}, "outputs": [], "source": []}], "metadata": {"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.5.2"}}, "nbformat": 4, "nbformat_minor": 2}