view notebooks/test_hubness.ipynb @ 105:edd82eb89b4b branch-tests tip

Merge
author Maria Panteli
date Sun, 15 Oct 2017 13:36:59 +0100
parents e279ccea5f9b
children
line wrap: on
line source
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pickle\n",
    "from scipy.stats import pearsonr\n",
    "from scipy.stats import skew\n",
    "import sys\n",
    "from sklearn.metrics.pairwise import pairwise_distances\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "sys.path.append('../')\n",
    "import scripts.outliers as outliers\n",
    "import scripts.utils_spatial as utils_spatial\n",
    "import scripts.utils as utils"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#X_list, Y, Yaudio = pickle.load(open('../data/lda_data_melodia_8.pickle','rb'))\n",
    "X_list, Y, Yaudio = pickle.load(open('../data/lda_data_melodia_8_30sec.pickle','rb'))\n",
    "#ddf = outliers.load_metadata(Yaudio, metadata_file='../data/metadata.csv')\n",
    "#w, data_countries = utils_spatial.get_neighbors_for_countries_in_dataset(Y)\n",
    "#w_dict = utils_spatial.from_weights_to_dict(w, data_countries)\n",
    "X = np.concatenate(X_list, axis=1)\n",
    "\n",
    "# global outliers\n",
    "#df_global, threshold, MD = outliers.get_outliers_df(X, Y, chi2thr=0.999)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8200, 381)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## distance matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "D = pairwise_distances(X, metric='mahalanobis')\n",
    "#np.savetxt('../data/D_mahal.csv', D)\n",
    "np.savetxt('../data/D_mahal_30_sec.csv', D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8200, 8200)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#D = np.loadtxt('../data/D_mahal.csv')\n",
    "D = np.loadtxt('../data/D_mahal_30_sec.csv')\n",
    "D.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEACAYAAAB78OvLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG0pJREFUeJzt3W2MVFd+5/HvD/MQz4yXdntW+IG2p7VqVsNoZsKwgtns\nRCnWY9yMsuAXfmC0xr02mjeTyN68yI5hJdOtWElQZHksrfCLjMduowTsxRnMaFHojqG0kVYGJ7YT\nYkyAVdiFJjSjxo3zoGxA/PfFPU1feop+PKa6qn8fqdSnTt1z7j1tXL8+99xbpYjAzMwsh3n1PgAz\nM2seDhUzM8vGoWJmZtk4VMzMLBuHipmZZeNQMTOzbCYMFUn/WtIHpcclSU9LapXUL+mEpD5JLaU2\nWySdlHRc0tpS/UpJR9NrL5XqF0l6I9W/K+m+0mtdaR8nJD1Rqm+XdDi12S1pQZ5fiZmZTdeEoRIR\nfx0RKyJiBbAS+EfgJ8CzQH9ELAPeSc+RtBx4DFgOdAI7JCl19zKwOSI6gA5Jnal+MzCU6l8Etqe+\nWoHngFXpsU3S4tRmO/BCavNJ6sPMzOpoqqe/vg2ciogzwHqgN9X3Ag+l8gZgV0RcjojTwClgtaS7\ngNsi4kja7vVSm3JfbwH3p/KDQF9EDEfEMNAPrEshtQbYU2P/ZmZWJ1MNlY3ArlReEhGDqTwILEnl\nu4GzpTZngXtq1A+ketLPMwARcQW4JOmOcfpqBYYj4mqNvszMrE4mHSqSFgL/AfjvY1+L4rNebtbn\nvfhzZczMZqn5U9h2HfDnEfGz9HxQ0p0RcT6d2rqQ6geAtlK7pRQzjIFUHls/0uZe4Jyk+cDiiBiS\nNABUSm3agIPARaBF0rw0W1ma+riOJAeQmdkURYQm3qq2qZz++i6jp74A9gFdqdwF7C3Vb5S0UFI7\n0AEciYjzwKeSVqc1kU3A2zX6ephi4R+gD1grqUXS7cADwIE0MzoEPFJj/9eJiKZ8bNu2re7H4PF5\nfB5f8z1malIzFUmfp1ik/16p+neBNyVtBk4Dj6Y38WOS3gSOAVeA78fokX4feA24FdgfEX+c6l8B\ndko6CQxRrN0QERcl/RbwXtquJ4oFe4AfALslPQ+8n/owM7M6mlSoRMQ/AF8cU3eRImhqbf/bwG/X\nqP9z4Ks16v8fKZRqvPYq8GqN+r8BVk/i8M3M7CbxHfUNqlKp1PsQPlMeX2Pz+OYu5TiHNltJimYe\nn5lZbpKIm7RQb2ZmNi6HipmZZeNQMTOzbBwqZmaWjUPFzMyycaiYmVk2DhUzM8vGoWJmZtk4VMzM\nLBuHipmZZeNQMTOzbKbyJV3WoIqvrxnlz0Mzs8+KZypzxs38xmczm6s8U2lSY2cnZmY3g2cqTc2z\nEzO7uRwqZmaWjUPFzMyycaiYmVk2DhUzM8vGoWJmZtk4VMzMLJtJhYqkFkl7JH0s6Zik1ZJaJfVL\nOiGpT1JLafstkk5KOi5pbal+paSj6bWXSvWLJL2R6t+VdF/pta60jxOSnijVt0s6nNrslrRg5r8O\nMzObicnOVF4C9kfEl4GvAceBZ4H+iFgGvJOeI2k58BiwHOgEdmj0TryXgc0R0QF0SOpM9ZuBoVT/\nIrA99dUKPAesSo9tkhanNtuBF1KbT1IfZmZWRxOGSnoT/+WI+DFARFyJiEvAeqA3bdYLPJTKG4Bd\nEXE5Ik4Dp4DVku4CbouII2m710ttyn29Bdyfyg8CfRExHBHDQD+wLoXUGmBPjf3bBCRde5iZ5TSZ\nmUo78DNJr0p6X9LvS/o8sCQiBtM2g8CSVL4bOFtqfxa4p0b9QKon/TwDRWgBlyTdMU5frcBwRFyt\n0ZdNyHfam9lnYzKf/TUf+Abw6xHxnqQfkk51jYiIkHSz3qWmtJ/u7u5r5UqlQqVSyXw4ZmaNq1qt\nUq1Ws/U3mVA5C5yNiPfS8z3AFuC8pDsj4nw6tXUhvT4AtJXaL019DKTy2PqRNvcC5yTNBxZHxJCk\nAaBSatMGHAQuAi2S5qXZytLUx88ph4qZmV1v7B/bPT09M+pvwtNfEXEeOCNpWar6NvAR8FOgK9V1\nAXtTeR+wUdJCSe1AB3Ak9fNpunJMwCbg7VKbkb4eplj4B+gD1qarz24HHgAORPGFIIeAR2rs38zM\n6kST+cImSV8HfgQsBP438CRwC/AmxQzjNPBoWkxH0lbgKeAK8ExEHEj1K4HXgFspriZ7OtUvAnYC\nK4AhYGNa5EfSk8DWdCjPR0Rvqm8HdlOsr7wPPB4Rl8ccd8zVL6Qqcntk7Dcuz9Xfj5nVJomImPZV\nPJMKlUblUHGomNnUzDRUfEe9mZll41AxM7Ns/HXCTcQ3M5pZvXmm0nR8Y6OZ1Y9DxczMsnGomJlZ\nNg4VMzPLxqFiZmbZOFTMzCwbh4qZmWXjUDEzs2x88+McV75h0p8DZmYz5ZnKnOebJc0sH4eKmZll\n41AxM7NsHCpmZpaNQ8XMzLJxqJiZWTYOFTMzy8ahYmZm2ThUzMwsG4eKmZll41AxM7NsJhUqkk5L\n+ktJH0g6kupaJfVLOiGpT1JLafstkk5KOi5pbal+paSj6bWXSvWLJL2R6t+VdF/pta60jxOSnijV\nt0s6nNrslrRgpr8MMzObmcnOVAKoRMSKiFiV6p4F+iNiGfBOeo6k5cBjwHKgE9ih0U8tfBnYHBEd\nQIekzlS/GRhK9S8C21NfrcBzwKr02CZpcWqzHXghtfkk9WFmZnU0ldNfGvN8PdCbyr3AQ6m8AdgV\nEZcj4jRwClgt6S7gtog4krZ7vdSm3NdbwP2p/CDQFxHDETEM9APrUkitAfbU2L+ZmdXJVGYqfyLp\nzyR9L9UtiYjBVB4ElqTy3cDZUtuzwD016gdSPennGYCIuAJcknTHOH21AsMRcbVGX2ZmVieT/T6V\nfxcRfyvpXwL9ko6XX4yIkHSzPj99Svvp7u6+Vq5UKlQqlcyHY2bWuKrVKtVqNVt/kwqViPjb9PNn\nkn5Csb4xKOnOiDifTm1dSJsPAG2l5kspZhgDqTy2fqTNvcA5SfOBxRExJGkAqJTatAEHgYtAi6R5\nabayNPXxc8qhYmZm1xv7x3ZPT8+M+pvw9Jekz0m6LZU/D6wFjgL7gK60WRewN5X3ARslLZTUDnQA\nRyLiPPCppNVpTWQT8HapzUhfD1Ms/AP0AWsltUi6HXgAOBDFVxQeAh6psX8zM6sTTfQVsikYfpKe\nzgf+ICJ+J12Z9SbFDOM08GhaTEfSVuAp4ArwTEQcSPUrgdeAW4H9EfF0ql8E7ARWAEPAxrTIj6Qn\nga1p/89HRG/puHZTrK+8DzweEZfHHHvMpa/ILbJ6ZLxTL8+l35WZ1SaJiBh7Ydbk2zfzG4lDxaFi\nZlMz01DxHfVmZpbNZK/+sjlg9B5VPGsxs2nxTMVKgilesW1mdh2HipmZZeNQMTOzbBwqZmaWjUPF\nzMyy8dVfDa58xZaZWb15ptIUfNWWmc0ODhUzM8vGoWJmZtk4VMzMLBuHipmZZeNQMTOzbBwqZmaW\njUPFzMyycaiYmVk2DhUzM8vGoWJmZtk4VMzMLBuHipmZZeNQMTOzbBwqZmaWzaRCRdItkj6Q9NP0\nvFVSv6QTkvoktZS23SLppKTjktaW6ldKOppee6lUv0jSG6n+XUn3lV7rSvs4IemJUn27pMOpzW5J\nC2b6i7DrSbr2MDObrMnOVJ4BjjH6pR3PAv0RsQx4Jz1H0nLgMWA50Ans0Oi70svA5ojoADokdab6\nzcBQqn8R2J76agWeA1alxzZJi1Ob7cALqc0nqQ/Lyt/RYmZTN2GoSFoKfAf4ETASEOuB3lTuBR5K\n5Q3Aroi4HBGngVPAakl3AbdFxJG03eulNuW+3gLuT+UHgb6IGI6IYaAfWJdCag2wp8b+zcysjiYz\nU3kR+E3gaqluSUQMpvIgsCSV7wbOlrY7C9xTo34g1ZN+ngGIiCvAJUl3jNNXKzAcEVdr9GVmZnU0\n7nfUS/pV4EJEfCCpUmubiAhJN+s8yZT3093dfa1cqVSoVCoZD8fMrLFVq1Wq1Wq2/sYNFeCXgPWS\nvgP8AvAvJO0EBiXdGRHn06mtC2n7AaCt1H4pxQxjIJXH1o+0uRc4J2k+sDgihiQNAJVSmzbgIHAR\naJE0L81WlqY+aiqHipmZXW/sH9s9PT0z6m/c018RsTUi2iKiHdgIHIyITcA+oCtt1gXsTeV9wEZJ\nCyW1Ax3AkYg4D3wqaXVaE9kEvF1qM9LXwxQL/wB9wFpJLZJuBx4ADkREAIeAR2rs38zM6miimcpY\nI6effhd4U9Jm4DTwKEBEHJP0JsWVYleA76cQAPg+8BpwK7A/Iv441b8C7JR0EhiiCC8i4qKk3wLe\nS9v1pAV7gB8AuyU9D7yf+jAzszrT6Ht+85EUzTw+IN1HMjLGz6bc7L9DMxsliYiY9g1qvqPezMyy\ncaiYmVk2DhUzM8vGoWJmZtk4VMzMLBuHipmZZeNQMTOzbBwqZmaWjUPFzMyycaiYmVk2DhUzM8vG\noWJmZtk4VMzMLBuHipmZZTPV71OxOaj4eP2CPwbfzMbjmYpNQjD6/SpmZjfmUDEzs2wcKmZmlo1D\nxczMsnGomJlZNg4VMzPLxqFiZmbZOFTMzCybcUNF0i9IOizpQ0nHJP1Oqm+V1C/phKQ+SS2lNlsk\nnZR0XNLaUv1KSUfTay+V6hdJeiPVvyvpvtJrXWkfJyQ9UapvT8d1UtJuSQty/ULMzGz6xg2ViPgn\nYE1E/CLwNWCNpG8BzwL9EbEMeCc9R9Jy4DFgOdAJ7NDo7dgvA5sjogPokNSZ6jcDQ6n+RWB76qsV\neA5YlR7bJC1ObbYDL6Q2n6Q+5gxJ1x5mZrPJhKe/IuIfU3EhcAvFm/h6oDfV9wIPpfIGYFdEXI6I\n08ApYLWku4DbIuJI2u71UptyX28B96fyg0BfRAxHxDDQD6xLIbUG2FNj/3OI73I3s9lnwlCRNE/S\nh8AgcCgiPgKWRMRg2mQQWJLKdwNnS83PAvfUqB9I9aSfZwAi4gpwSdId4/TVCgxHxNUafZmZWR1N\n+IGS6c37F9OppwOS1ox5PSTdrD+Zp7yf7u7ua+VKpUKlUsl4OGZmja1arVKtVrP1N+lPKY6IS5L+\nB7ASGJR0Z0ScT6e2LqTNBoC2UrOlFDOMgVQeWz/S5l7gnKT5wOKIGJI0AFRKbdqAg8BFoEXSvBR4\nS1MfNZVDxczMrjf2j+2enp4Z9TfR1V9fHLmyS9KtwAPAB8A+oCtt1gXsTeV9wEZJCyW1Ax3AkYg4\nD3wqaXVaE9kEvF1qM9LXwxQL/wB9wFpJLZJuT/s+EMVnrx8CHqmxfzMzqyON9/0Ykr5KsRA+Lz12\nRsTvpSuz3qSYYZwGHk2L6UjaCjwFXAGeiYgDqX4l8BpwK7A/Ip5O9YuAncAKYAjYmBb5kfQksDUd\nzvMR0Zvq24HdFOsr7wOPR8TlGscfzfj9H0Uuj4zr5pab8fdpZqMkERHTvrR03FBpdA4Vh4qZTc1M\nQ8V31JuZWTb+OmGbEn+1sJmNxzMVmyLfdGlmN+ZQMTOzbBwqZmaWjUPFzMyycaiYmVk2DhUzM8vG\noWJmZtk4VMzMLBuHipmZZeNQMTOzbBwqZmaWjUPFzMyycaiYmVk2DhUzM8vGoWJmZtk4VMzMLBt/\nSZdNm7+wy8zG8kzFZsBf2GVm13OomJlZNg4VMzPLxqFiZmbZTBgqktokHZL0kaS/kvR0qm+V1C/p\nhKQ+SS2lNlsknZR0XNLaUv1KSUfTay+V6hdJeiPVvyvpvtJrXWkfJyQ9Uapvl3Q4tdktaUGOX4iZ\nmU3fZGYql4HfiIivAN8Efk3Sl4Fngf6IWAa8k54jaTnwGLAc6AR2aPQyoZeBzRHRAXRI6kz1m4Gh\nVP8isD311Qo8B6xKj22SFqc224EXUptPUh9mZlZHE4ZKRJyPiA9T+e+Bj4F7gPVAb9qsF3golTcA\nuyLickScBk4BqyXdBdwWEUfSdq+X2pT7egu4P5UfBPoiYjgihoF+YF0KqTXAnhr7NzOzOpnSmoqk\nLwErgMPAkogYTC8NAktS+W7gbKnZWYoQGls/kOpJP88ARMQV4JKkO8bpqxUYjoirNfoyM7M6mfTN\nj5K+QDGLeCYi/m7MjW8h6WbdsDCl/XR3d18rVyoVKpVK5sMxM2tc1WqVarWarb9JhUpaBH8L2BkR\ne1P1oKQ7I+J8OrV1IdUPAG2l5kspZhgDqTy2fqTNvcA5SfOBxRExJGkAqJTatAEHgYtAi6R5abay\nNPXxc8qhYmZm1xv7x3ZPT8+M+pvM1V8CXgGORcQPSy/tA7pSuQvYW6rfKGmhpHagAzgSEeeBTyWt\nTn1uAt6u0dfDFAv/AH3AWkktkm4HHgAORPGZIIeAR2rs38zM6kQTfWaTpG8B/xP4S0ZPPW0BjgBv\nUswwTgOPpsV0JG0FngKuUJwuO5DqVwKvAbcC+yNi5PLkRcBOivWaIWBjWuRH0pPA1rTf5yOiN9W3\nA7sp1lfeBx6PiMtjjj2a8TOpikweGdfsKDfj79lsLpJERGjiLW/QvpnfDBwqDhUzm5qZhorvqDcz\ns2z80feWhT8G38zAMxXLxh+Db2YOFTMzy8ihYmZm2ThUzMwsGy/UN4jyQriZ2WzlmUpD8WK4mc1u\nDhUzM8vGoWJmZtk4VMzMLBuHipmZZeNQMTOzbHxJsWXnzwEzm7s8U7HPgC99NpurHCpmZpaNQ8XM\nzLJxqJiZWTYOFTMzy8ahYmZm2ThUzMwsG4eKmZll41AxM7NsJgwVST+WNCjpaKmuVVK/pBOS+iS1\nlF7bIumkpOOS1pbqV0o6ml57qVS/SNIbqf5dSfeVXutK+zgh6YlSfbukw6nNbkkLZvqLsM+GpGsP\nM2t+k5mpvAp0jql7FuiPiGXAO+k5kpYDjwHLU5sdGn03eRnYHBEdQIekkT43A0Op/kVge+qrFXgO\nWJUe2yQtTm22Ay+kNp+kPmxW8t31ZnPJhKESEX9K8cZdth7oTeVe4KFU3gDsiojLEXEaOAWslnQX\ncFtEHEnbvV5qU+7rLeD+VH4Q6IuI4YgYBvqBdSmk1gB7auzfzMzqaLprKksiYjCVB4ElqXw3cLa0\n3Vngnhr1A6me9PMMQERcAS5JumOcvlqB4Yi4WqMvMzOroxl/SnFEhKSbdX5jyvvp7u6+Vq5UKlQq\nlYyHY2bW2KrVKtVqNVt/0w2VQUl3RsT5dGrrQqofANpK2y2lmGEMpPLY+pE29wLnJM0HFkfEkKQB\noFJq0wYcBC4CLZLmpdnK0tRHTeVQMTOz6439Y7unp2dG/U339Nc+oCuVu4C9pfqNkhZKagc6gCMR\ncR74VNLqtCayCXi7Rl8PUyz8A/QBayW1SLodeAA4EMUXdBwCHqmxfzMzqyNN9CVKknYBvwJ8kWL9\n5DmKQHiTYoZxGng0LaYjaSvwFHAFeCYiDqT6lcBrwK3A/oh4OtUvAnYCK4AhYGNa5EfSk8DWdCjP\nR0Rvqm8HdlOsr7wPPB4Rl2scezTLl0QVWTwylsYsN8t/C7NmJomImPY9ABOGSiNzqMy28qhm+e9i\n1mxmGiq+o95uIt+zYtbsHCpmZpaNQ8XMzLJxqJiZWTYzvvnRbDrKHzDpRXuz5uGZitWJF+3NmpFn\nKrOYPy7ezBqNZyqznv+iN7PG4VAxM7NsfPrL6s6L9mbNwzMVmwV8is+sWThUzMwsG4eKmZll4zUV\nm1W8vmLW2DxTsVnG6ytmjcyhYmZm2fj0l81aPhVm1ng8U7FZzKfCzBqNZyrWEMZ+DppnLmazk0PF\nGkQ5RORTY2azlEPFGtRIkDhgzGYTh8os44+7nw4HjNls0dAL9ZI6JR2XdFLSD+p9PPl4gXr6Rn93\nkq49zOzmaNhQkXQL8N+ATmA58F1JX67vUd1M1XofQAOoHTCzIWyq1Wrd9n0zeHxzV8OGCrAKOBUR\npyPiMrAb2FDnY7qJqvU+gAZTnv3VP2ya/U3J45u7GnlN5R7gTOn5WWB1nY7FGtboesyN1mam3KPX\ncmwOa+SZyqT+zx35y/P48eOf9fFM22w4HWNj1Z7ZTKZ8o9lP+dHT0zPhNiNmyyk7s8lQo/5VJemb\nQHdEdKbnW4CrEbG9tE1jDs7MrI4iYtp/vTRyqMwH/hq4HzgHHAG+GxEf1/XAzMzmsIZdU4mIK5J+\nHTgA3AK84kAxM6uvhp2pmJnZ7NPIC/U31Gw3RUpqk3RI0keS/krS06m+VVK/pBOS+iS11PtYp0vS\nLZI+kPTT9LyZxtYiaY+kjyUdk7S6yca3Jf3bPCrpDyUtauTxSfqxpEFJR0t1NxxPGv/J9J6ztj5H\nPXk3GN/vpX+ffyHpjyQtLr02pfE1Xag06U2Rl4HfiIivAN8Efi2N6VmgPyKWAe+k543qGeAYo5dT\nNdPYXgL2R8SXga8Bx2mS8Un6EvA94BsR8VWKU9EbaezxvUrx/lFWczySlgOPUbzXdAI7JM3299Va\n4+sDvhIRXwdOAFtgeuOb7YOfjqa7KTIizkfEh6n898DHFPfprAd602a9wEP1OcKZkbQU+A7wI4ob\nRqB5xrYY+OWI+DEUa4ERcYkmGR/wKcUfPZ9LF898juLCmYYdX0T8KfDJmOobjWcDsCsiLkfEaeAU\nxXvQrFVrfBHRHxFX09PDwNJUnvL4mjFUat0UeU+djiW79JfhCor/8EsiYjC9NAgsqdNhzdSLwG8C\nV0t1zTK2duBnkl6V9L6k35f0eZpkfBFxEXgB+L8UYTIcEf00yfhKbjSeuyneY0Y0w/vNU8D+VJ7y\n+JoxVJr2ygNJXwDeAp6JiL8rvxbFFRcNN3ZJvwpciIgPGJ2lXKdRx5bMB74B7IiIbwD/wJhTQY08\nPkn/CvjPwJco3oC+IOnx8jaNPL5aJjGehh2rpP8K/HNE/OE4m407vmYMlQGgrfS8jeuTtiFJWkAR\nKDsjYm+qHpR0Z3r9LuBCvY5vBn4JWC/pb4BdwL+XtJPmGBsU//bORsR76fkeipA53yTj+zfA/4qI\noYi4AvwR8G9pnvGNuNG/x7HvN0tTXcOR9J8oTkP/x1L1lMfXjKHyZ0CHpC9JWkixyLSvzsc0Iyo+\nm+MV4FhE/LD00j6gK5W7gL1j2852EbE1Itoiop1igfdgRGyiCcYGxXoYcEbSslT1beAj4Kc0wfgo\nLjr4pqRb07/Tb1NccNEs4xtxo3+P+4CNkhZKagc6KG7EbiiSOilOQW+IiH8qvTT18UVE0z2AdRR3\n258CttT7eDKM51sU6w0fAh+kRyfQCvwJxdUafUBLvY91huP8FWBfKjfN2ICvA+8Bf0Hxl/ziJhvf\nf6EIyqMUi9gLGnl8FDPmc8A/U6zPPjneeICt6b3mOPBgvY9/GuN7CjgJ/J/S+8uO6Y7PNz+amVk2\nzXj6y8zM6sShYmZm2ThUzMwsG4eKmZll41AxM7NsHCpmZpaNQ8XMzLJxqJiZWTb/H7qaU1b+6cl+\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f75aa474a50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(D.ravel(), bins=100);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## n-occurrence and stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def n_occurrence_from_D(D, k=10, n_items=None):\n",
    "    if n_items is None:\n",
    "        n_items = len(D)\n",
    "    sort_idx = np.argsort(D, axis=1)\n",
    "    D_k = sort_idx[:, 1:(k+1)]  # nearest neighbour is the item itself\n",
    "    N_k = np.bincount(D_k.astype(int).ravel(), minlength=n_items)\n",
    "    return N_k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "60\n",
      "10.5914304167\n",
      "1.0\n",
      "348.006117132\n",
      "129 0.0157317073171\n",
      "3332 0.406341463415\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f761c127950>]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEACAYAAABcXmojAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFrRJREFUeJzt3X+MXWd95/H3hzgDTjDj9bJyfkrxtpMmrugSzGK6wGay\nTbPDqiT5K3EkIqvrRUJuN3RXothIu8lfTECqStAqWW2XEgeBuy6FKFlS106aK1XqbsyPpJgYN/G2\nJtjgMQstgXaj9Sjf/eM+c3yZNZmxfT1z47xf0lWe85znnPs9M/H9zPOcO3NTVUiSBPC65S5AkjQ6\nDAVJUsdQkCR1DAVJUsdQkCR1DAVJUmfBUEiyPcmzSfYn+XyS1ydZk2RvkueS7Emyet7455McTHLT\nQP+Gdo7nk9x3ri5IknTmXjEUklwFfAB4W1W9BbgA2ARsA/ZW1dXAE22bJOuB24H1wBRwf5K00z0A\nbKmqCWAiydTQr0aSdFYWmim8CJwALkqyArgI+C5wM7CjjdkB3NratwA7q+pEVR0GDgEbk1wKrKqq\nfW3cQwPHSJJGxCuGQlX9EPgd4AX6YfC3VbUXWFtVM23YDLC2tS8Djgyc4ghw+Sn6j7Z+SdIIWWj5\n6OeA3wKuov/C/sYk7x8cU/2/k+HfypCk88CKBfa/HfjzqvoBQJIvAr8MHEtySVUda0tDx9v4o8CV\nA8dfQX+GcLS1B/uPnuoJkxgwknSaqioLj1rYQvcUDgLvTLKy3TC+ETgAPApsbmM2Aw+39iPApiRj\nSdYBE8C+qjoGvJhkYzvPnQPH/H+qaqQfd99997LXYJ3WaZ3WOPcYplecKVTVXyR5CPgq8DLwdeC/\nAKuAXUm2AIeB29r4A0l20Q+OWWBrnax4K/AgsBJ4rKp2D/VKJElnbaHlI6rqE8An5nX/kP6s4VTj\nPwZ87BT9XwPecgY1SpKWiL/RfAYmJyeXu4RFsc7hss7hejXU+Wqocdgy7PWos5WkRq0mSRplSagl\nutEsSXoNMRQkSR1DQZLUMRQkSR1DQZLUMRQkSZ2RDIXLL7+Gdeuu4cc//vFylyJJrykL/kbzcvju\ndx/mwgvfzssvv7zcpUjSa8pIzhTgGpILlrsISXrNGdFQkCQtB0NBktQxFCRJHUNBktQxFCRJHUNB\nktQxFCRJHUNBktRZMBSS/EKSpwceP0pyV5I1SfYmeS7JniSrB47ZnuT5JAeT3DTQvyHJ/rbvvnN1\nUZKkM7NgKFTVX1bVdVV1HbAB+HvgS8A2YG9VXQ080bZJsh64HVgPTAH3J5n7mLgHgC1VNQFMJJka\n9gVJks7c6S4f3QgcqqrvADcDO1r/DuDW1r4F2FlVJ6rqMHAI2JjkUmBVVe1r4x4aOEaSNAJONxQ2\nATtbe21VzbT2DLC2tS8DjgwccwS4/BT9R1u/JGlELDoUkowB7wP+cP6+qiqghliXJGkZnM6fzn4v\n8LWq+n7bnklySVUda0tDx1v/UeDKgeOuoD9DONrag/1HT/1U9zA7+xLT09NMTU0xOTl5GmVK0vmt\n1+vR6/XOybnT/yF/EQOTPwD+uKp2tO1PAD+oqo8n2Qasrqpt7Ubz54F30F8eehz4+aqqJE8BdwH7\ngC8Dn6qq3fOep6AYGxvn+PEXGB8fH9KlStL5KQlVlYVHLmxRM4UkF9O/yfyBge57gV1JtgCHgdsA\nqupAkl3AAWAW2Fonk2cr8CCwEnhsfiBIkpbXomcKS8WZgiSdnmHOFPyNZklSx1CQJHUMBUlSx1CQ\nJHUMBUlSx1CQJHUMBUlSx1CQJHUMBUlSx1CQJHUMBUlSx1CQJHUMBUlSx1CQJHUMBUlSx1CQJHUM\nBUlSx1CQJHUMBUlSZ1GhkGR1ki8k+VaSA0k2JlmTZG+S55LsSbJ6YPz2JM8nOZjkpoH+DUn2t333\nnYsLkiSducXOFO4DHquqa4FfAg4C24C9VXU18ETbJsl64HZgPTAF3J9k7gOlHwC2VNUEMJFkamhX\nIkk6awuGQpJx4D1V9fsAVTVbVT8CbgZ2tGE7gFtb+xZgZ1WdqKrDwCFgY5JLgVVVta+Ne2jgGEnS\nCFjMTGEd8P0kn0ny9SS/l+RiYG1VzbQxM8Da1r4MODJw/BHg8lP0H239kqQRsWKRY94G/GZVfSXJ\nJ2lLRXOqqpLU8Mq6h9nZl5ienmZqaorJycnhnVqSXuV6vR69Xu+cnDtVr/xanuQS4H9U1bq2/W5g\nO/CPgRuq6lhbGnqyqq5Jsg2gqu5t43cDdwPfbmOubf13ANdX1QfnPV9BMTY2zvHjLzA+Pj7M65Wk\n804SqioLj1zYgstHVXUM+E6Sq1vXjcCzwKPA5ta3GXi4tR8BNiUZS7IOmAD2tfO82N65FODOgWMk\nSSNgMctHAP8W+FySMeB/Ab8OXADsSrIFOAzcBlBVB5LsAg4As8DWOjkd2Qo8CKyk/26m3UO6DknS\nECy4fLTUXD6SpNOzpMtHkqTXDkNBktQxFCRJHUNBktQxFCRJHUNBktQxFCRJHUNBktQxFCRJHUNB\nktQxFCRJHUNBktQxFCRJHUNBktQxFCRJHUNBktQxFCRJHUNBktQxFCRJnUWFQpLDSb6R5Okk+1rf\nmiR7kzyXZE+S1QPjtyd5PsnBJDcN9G9Isr/tu2/4lyNJOhuLnSkUMFlV11XVO1rfNmBvVV0NPNG2\nSbIeuB1YD0wB9yeZ+0DpB4AtVTUBTCSZGtJ1SJKG4HSWjzJv+2ZgR2vvAG5t7VuAnVV1oqoOA4eA\njUkuBVZV1b427qGBYyRJI+B0ZgqPJ/lqkg+0vrVVNdPaM8Da1r4MODJw7BHg8lP0H239kqQRsWKR\n495VVd9L8o+AvUkODu6sqkpSwyvrHmZnX2J6epqpqSkmJyeHd2pJepXr9Xr0er1zcu5Und5reZK7\ngZ8AH6B/n+FYWxp6sqquSbINoKrubeN3A3cD325jrm39dwDXV9UH552/oBgbG+f48RcYHx8/y0uU\npPNbEqpq/hL/GVlw+SjJRUlWtfbFwE3AfuARYHMbthl4uLUfATYlGUuyDpgA9lXVMeDFJBvbjec7\nB46RJI2AxSwfrQW+1N5AtAL4XFXtSfJVYFeSLcBh4DaAqjqQZBdwAJgFttbJ6chW4EFgJfBYVe0e\n4rVIks7SaS8fnWsuH0nS6VnS5SNJ0muHoSBJ6hgKkqSOoSBJ6hgKkqSOoSBJ6hgKkqSOoSBJ6hgK\nkqSOoSBJ6hgKkqSOoSBJ6hgKkqSOoSBJ6hgKkqSOoSBJ6hgKkqSOoSBJ6hgKkqTOokIhyQVJnk7y\naNtek2RvkueS7EmyemDs9iTPJzmY5KaB/g1J9rd99w3/UiRJZ2uxM4UPAQeAatvbgL1VdTXwRNsm\nyXrgdmA9MAXcn2Tuw6QfALZU1QQwkWRqOJcgSRqWBUMhyRXAvwL+KzD3An8zsKO1dwC3tvYtwM6q\nOlFVh4FDwMYklwKrqmpfG/fQwDGSpBGxmJnC7wIfBl4e6FtbVTOtPQOsbe3LgCMD444Al5+i/2jr\nlySNkBWvtDPJrwHHq+rpJJOnGlNVlaROte/M3cPs7EtMT08zNTXF5OQpn1qSXpN6vR69Xu+cnDtV\nP/v1PMnHgDuBWeANwJuALwL/FJisqmNtaejJqromyTaAqrq3Hb8buBv4dhtzbeu/A7i+qj54iucs\nKMbGxjl+/AXGx8eHeLmSdP5JQlVl4ZELe8Xlo6r6aFVdWVXrgE3An1bVncAjwOY2bDPwcGs/AmxK\nMpZkHTAB7KuqY8CLSTa2G893DhwjSRoRr7h8dApz04p7gV1JtgCHgdsAqupAkl3036k0C2ytk1OR\nrcCDwErgsarafXalS5KG7RWXj5aDy0eSdHqWbPlIkvTaYihIkjqGgiSpYyhIkjqGgiSpYyhIkjqG\ngiSpYyhIkjqGgiSpYyhIkjqGgiSpYyhIkjqGgiSpYyhIkjqGgiSpYyhIkjqGgiSpYyhIkjqGgiSp\n84qhkOQNSZ5K8kySA0mmW/+aJHuTPJdkT5LVA8dsT/J8koNJbhro35Bkf9t337m7JEnSmXrFUKiq\nl4AbquqtwC8BNyR5N7AN2FtVVwNPtG2SrAduB9YDU8D9SeY+TPoBYEtVTQATSabOxQVJks7cgstH\nVfX3rTkGXAD8DXAzsKP17wBube1bgJ1VdaKqDgOHgI1JLgVWVdW+Nu6hgWMkSSNiwVBI8rokzwAz\nwJNV9Sywtqpm2pAZYG1rXwYcGTj8CHD5KfqPtn5J0ghZsdCAqnoZeGuSceBPktwwb38lqeGWdQ+z\nsy8xPT3N1NQUk5OTwz29JL2K9Xo9er3eOTl3qhb/ep7kPwD/B/g3wGRVHWtLQ09W1TVJtgFU1b1t\n/G7gbuDbbcy1rf8O4Pqq+uApnqOgGBsb5/jxFxgfHz/LS5Sk81sSqioLj1zYQu8+evPcO4uSrAR+\nFXgaeATY3IZtBh5u7UeATUnGkqwDJoB9VXUMeDHJxnbj+c6BYyRJI2Kh5aNLgR1JXkc/QD5bVU8k\neRrYlWQLcBi4DaCqDiTZBRwAZoGtdXIqshV4EFgJPFZVu4d9MZKks3Nay0dLweUjSTo9S7Z8JEl6\nbTEUJEkdQ0GS1DEUJEkdQ0GS1DEUJEkdQ0GS1DEUJEkdQ0GS1DEUJEkdQ0GS1DEUJEkdQ0GS1DEU\nJEkdQ0GS1DEUJEkdQ0GS1DEUJEkdQ0GS1FkwFJJcmeTJJM8m+WaSu1r/miR7kzyXZE+S1QPHbE/y\nfJKDSW4a6N+QZH/bd9+5uSRJ0plazEzhBPDvquoXgXcCv5HkWmAbsLeqrgaeaNskWQ/cDqwHpoD7\nk8x9oPQDwJaqmgAmkkwN9WokSWdlwVCoqmNV9Uxr/wT4FnA5cDOwow3bAdza2rcAO6vqRFUdBg4B\nG5NcCqyqqn1t3EMDx0iSRsBp3VNIchVwHfAUsLaqZtquGWBta18GHBk47Aj9EJnff7T1S5JGxIrF\nDkzyRuCPgA9V1Y9PrghBVVWSGl5Z9zA7+xLT09NMTU0xOTk5vFNL0qtcr9ej1+udk3OnauHX8iQX\nAv8d+OOq+mTrOwhMVtWxtjT0ZFVdk2QbQFXd28btBu4Gvt3GXNv67wCur6oPznuugmJsbJzjx19g\nfHx8aBcrSeejJFRVFh65sMW8+yjAp4EDc4HQPAJsbu3NwMMD/ZuSjCVZB0wA+6rqGPBiko3tnHcO\nHCNJGgGLWT56F/B+4BtJnm5924F7gV1JtgCHgdsAqupAkl3AAWAW2FonpyNbgQeBlcBjVbV7SNch\nSRqCRS0fLSWXjyTp9Czp8pEk6bXDUJAkdQwFSVLHUJAkdQwFSVLHUJAkdQwFSVLHUJAkdQwFSVLH\nUJAkdQwFSVLHUJAkdQwFSVLHUJAkdQwFSVLHUJAkdQwFSVLHUJAkdRYMhSS/n2Qmyf6BvjVJ9iZ5\nLsmeJKsH9m1P8nySg0luGujfkGR/23ff8C9FknS2FjNT+AwwNa9vG7C3qq4GnmjbJFkP3A6sb8fc\nn2Tuc0MfALZU1QQwkWT+OSVJy2zBUKiqPwP+Zl73zcCO1t4B3NratwA7q+pEVR0GDgEbk1wKrKqq\nfW3cQwPHSJJGxJneU1hbVTOtPQOsbe3LgCMD444Al5+i/2jrlySNkLO+0VxVBdQQapEkLbMVZ3jc\nTJJLqupYWxo63vqPAlcOjLuC/gzhaGsP9h/92ae/h9nZl5ienmZqaorJyckzLFOSzj+9Xo9er3dO\nzp3+D/oLDEquAh6tqre07U8AP6iqjyfZBqyuqm3tRvPngXfQXx56HPj5qqokTwF3AfuALwOfqqrd\np3iugmJsbJzjx19gfHx8KBcqSeerJFRVFh65sAVnCkl2AtcDb07yHeA/AvcCu5JsAQ4DtwFU1YEk\nu4ADwCywtU6mzlbgQWAl8NipAkGStLwWNVNYSs4UJOn0DHOm4G80S5I6hoIkqWMoSJI6hoIkqWMo\nSJI6hoIkqWMoSJI6hoIkqWMoSJI6hoIkqWMoSJI6hoIkqWMoSJI6hoIkqWMoSJI6hoIkqWMoSJI6\nhoIkqbPgZzQvp9WrV//U9qh9dKgknW+WfKaQZCrJwSTPJ/nIwkdUe0iSzrUlDYUkFwD/CZgC1gN3\nJLl2KWsYhl6vt9wlLIp1Dpd1Dteroc5XQ43DttQzhXcAh6rqcFWdAP4AuGWxByfpHsvp1fI/inUO\nl3UO16uhzldDjcO21KFwOfCdge0jrW+RTi4ljUpASNL5ZKlvNC/q5sCb3vQ+fvKTv1vkqc5NMHhT\nW9JrUZbyxS/JO4F7qmqqbW8HXq6qjw+M8dVYkk5TVQ3lp+OlDoUVwF8CvwJ8F9gH3FFV31qyIiRJ\nP9OSLh9V1WyS3wT+BLgA+LSBIEmjY0lnCpKk0TYyf+bi9H+pbejP//tJZpLsH+hbk2RvkueS7Emy\nemDf9lbrwSQ3DfRvSLK/7btvyDVemeTJJM8m+WaSu0a0zjckeSrJM0kOJJkexToHnuOCJE8neXRU\n60xyOMk3Wp37RrjO1Um+kORb7Xu/cZTqTPIL7Ws49/hRkrtGqcZ5z/tse47PJ3n9ktRZVcv+oL+U\ndAi4CrgQeAa4dolreA9wHbB/oO8TwG+39keAe1t7favxwlbzIU7OuvYB72jtx4CpIdZ4CfDW1n4j\n/fsz145ane2cF7X/rgD+J/DuUayznfffA58DHhnF73s7518Da+b1jWKdO4B/PfC9Hx/FOtt5Xwd8\nD7hy1Gpsz/VXwOvb9n8DNi9FnUP9Ip/FF+CXgd0D29uAbctQx1X8dCgcBNa29iXAwdbeDnxkYNxu\n4J3ApcC3Bvo3Af/5HNb7MHDjKNcJXAR8BfjFUawTuAJ4HLgBeHRUv+/0Q+EfzusbqTrpB8BfnaJ/\npOocOO9NwJ+NYo3AGvo/9P0D+uH6KPCrS1HnqCwfneUvtZ0za6tqprVngLWtfRn9GufM1Tu//yjn\n6DqSXEV/ZvPUKNaZ5HVJnmn1PFlVz45incDvAh8GXh7oG8U6C3g8yVeTfGBE61wHfD/JZ5J8Pcnv\nJbl4BOucswnY2dojVWNV/RD4HeAF+u/U/Nuq2rsUdY5KKIz83e7qx+xI1JnkjcAfAR+qqh8P7huV\nOqvq5ap6K/2fxP95khvm7V/2OpP8GnC8qp4GTvke71Gos3lXVV0HvBf4jSTvGdw5InWuAN4G3F9V\nbwP+jv6svzMidZJkDHgf8Ifz941CjUl+Dvgt+qsXlwFvTPL+wTHnqs5RCYWj9Nf15lzJT6fbcplJ\ncglAkkuB461/fr1X0K/3aGsP9h8dZkFJLqQfCJ+tqodHtc45VfUj4MvAhhGs858BNyf5a/o/Mf6L\nJJ8dwTqpqu+1/34f+BL9vyM2anUeAY5U1Vfa9hfoh8SxEasT+uH6tfb1hNH7Wr4d+POq+kFVzQJf\npL/Mfs6/lqMSCl8FJpJc1RL8duCRZa4J+jVsbu3N9Nfw5/o3JRlLsg6YAPZV1THgxfaOiwB3Dhxz\n1to5Pw0cqKpPjnCdb557V0SSlfTXQp8etTqr6qNVdWVVraO/lPCnVXXnqNWZ5KIkq1r7Yvpr4ftH\nrc52/u8kubp13Qg8S389fGTqbO7g5NLRXC2jVONB4J1JVrbz3wgcYCm+lsO+eXMWN1beS//GyiFg\n+zI8/076a3f/l/79jV+nf7PnceA5YA+wemD8R1utB4F/OdC/gf4/2EPAp4Zc47vpr30/Q/9F9mn6\nf4Z81Op8C/D1Vuc3gA+3/pGqc17N13Py3UcjVSf9tfpn2uObc/8+Rq3Odv5/Qv+NBX9B/6fb8VGr\nE7gY+N/AqoG+kaqxnf+36Yfqfvrv6rpwKer0l9ckSZ1RWT6SJI0AQ0GS1DEUJEkdQ0GS1DEUJEkd\nQ0GS1DEUJEkdQ0GS1Pl/K2rf7rVpmykAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f75a9e9edd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nrrH85JPw9NNvfThNI3iv3YivUy3V+0DzAuDlwv3dwLI612BmdRSRfU3E4cPw5ptw9Og7b7/9bfZ4\nf392O3QI3ngDnnsOvvvd7Mvofve7rP/gwez2xhtw4EDW//rr8Npr8Ktfwd692foWLIAPfSj7eooz\nz4TPfx42bIC5c8t+RRpbvUNhRAcLPvOZYVYygrWM9LDESMbt3JkddKrX9kYy5oUX4Ic/rN/2RjLm\nl7+EkbyJqufv76WX4PHHa7OuWo55+WXYsqV22zt0KPs5MH6gPZL7A32vvgrt7SNb5tCh7A/8wC3i\n7feLfZCd0nniidm0zJQp77w1NWVTONOmZbfp0+Hkk6GnB44cydonnZStY+ZMmDULmpvhfe/L+mfO\nhFNPzfYEPvABOO20kb3rt3eq64FmSRcAbRHRmu6vA94sHmyW5KPMZmbHqFYHmusdClOB54D/AvwH\n0Al8NiJ+UbcizMzsXdV1+igijkj6a+AxslNS73AgmJk1job77iMzMytPw3w8Q1KrpG5JOyV9ZYy3\n9S1JfZJ2FPrmSOqQ9LykrZJmFx5bl+rqlrS80L9U0o702K2jrGmRpCckPSvp55KuL7suSSdJelLS\nM5K6JP1d2TUV1jdF0nZJDzVQTT2Sfpbq6myEuiTNlnSvpF+k3+Gykv9N/X56fQZu+yVd3wCv07r0\nf2+HpHskndgANd2Q1vVzSTekvrGvKSJKv5FNJe0CTgemAc8AZ4/h9i4CzgN2FPq+Dnw5tb8C3Jza\nS1I901J9u3hrD6sTOD+1HwFaR1HTXODc1J5Jduzl7Aaoa0b6ORX4MXBh2TWldfx34G5gcyP8/tI6\nfgnMGdRX9u+vHfiLwu/wlLJrKtR2AvAKsKjMmtJ6XwROTPf/L7Cq5Jo+CuwATiL7+9gBnFGPmkb1\nS63VDfgjYEvh/lpg7Rhv83TeHgrdQHNqzwW6U3sd8JXCuC3ABcA84BeF/pXA/65hfQ8ClzZKXcAM\n4CfAH5RdE7AQeBy4BHioUX5/ZKFw2qC+0uoiC4AXh+gv/bVK61kO/KDsmoA5ZG/CTiULzoeAPy65\npv9G9jVAA/f/B/DletTUKNNHQ32obUGda2iOiL7U7gOaU3t+qmfAQG2D+3upUc2STifbk3my7Lok\nnSDpmbTtJyLi2bJrAv4B+BLwZqGv7Jog+xzO45KeknRdA9S1GNgn6U5JT0v6pqSTS66paCWwMbVL\nqykiXgX+Hvh3srMifxMRHWXWBPwcuChNF80AriB7MzTmNTVKKDTU0e7IIrWUmiTNBO4DboiI18uu\nKyLejIhzyf5BflrSJWXWJOkzwN6I2A4MeV52ib+/T0XEecDlwF9JuqjkuqYCHwdui4iPAwfJ9sLL\nrAkASdOBPwG+O/ixEv5NnQHcSDZ7MB+YKelzZdYUEd3A14CtwKNkU0NH61FTo4RCL9m84oBFvD3d\n6qFP0lwASfOAve9S28JUW29qF/t7R1OApGlkgfDtiHiwUeoCiIj9wMPA0pJr+iSwQtIvyd5l/mdJ\n3y65JgAi4pX0cx/wANl3fZVZ125gd0T8JN2/lywk9pT9WpEF50/TawXlvk6fAP41In4dEUeA+8mm\ntEt9nSLiWxHxiYi4GHgNeJ46vE6NEgpPAS2STk/vIK4BNte5hs1kB5dIPx8s9K+UNF3SYqAF6IyI\nPcCBdDaHgGsLyxyztI47gK6IuKUR6pL0/oGzGyQ1kc2zbi+zpoi4KSIWRcRisumHf4qIa8usCUDS\nDEmzUvtksvnyHWXWldb1sqSzUtelwLNkc+alvVbJZ3lr6mhg22XV1A1cIKkpretSoIuSXydJH0w/\nfw/4r8A91ON1Op6DIGNxI3vn8BzZUfN1Y7ytjWRzh4fJjmX8OdnBpsfJ0ngrMLsw/qZUVzdwWaF/\nKdl//F3AN0ZZ04Vkc+TPkP3h3U72FeOl1QWcAzydavoZ8KXUX+prVVjnxbx19lHZv7/F6XV6hmw+\neF2D1PWfyE4Q+Deyd8CnNEBNJwO/AmYV+squ6ctkgbmD7IytaQ1Q0/dTTc8Al9TrdfKH18zMLNco\n00dmZtYAHApmZpZzKJiZWc6hYGZmOYeCmZnlHApmZpZzKJiZWc6hYGZmuf8PZ2wAgLNjtEkAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f75aa8ed9d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# take k mean of country sample\n",
    "uniq_countries, uniq_counts = np.unique(Y, return_counts=True)\n",
    "k = np.int(np.round(np.mean(uniq_counts)))\n",
    "#k = 200\n",
    "N_k = n_occurrence_from_D(D, k=k)\n",
    "\n",
    "print k\n",
    "print skew(N_k)\n",
    "print np.median(N_k)\n",
    "print np.std(N_k)\n",
    "print len(np.where(N_k>1000)[0]), len(np.where(N_k>1000)[0]) / float(len(N_k))\n",
    "print len(np.where(N_k==0)[0]), len(np.where(N_k==0)[0]) / float(len(N_k))\n",
    "\n",
    "plt.figure()\n",
    "plt.hist(N_k, bins=100);\n",
    "plt.figure()\n",
    "plt.plot(np.sort(N_k))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sort_idx = np.argsort(D, axis=1)\n",
    "k = 100\n",
    "D_k = sort_idx[:, 1:(k+1)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4650, 2942, 3520, ..., 3488, 2864, 6361],\n",
       "       [1933, 6143, 6757, ..., 2346, 3441, 6857],\n",
       "       [3170, 2549, 4860, ..., 2260, 2978, 7433],\n",
       "       ..., \n",
       "       [6016, 2243, 1616, ..., 3486, 3441, 4554],\n",
       "       [7027, 4860, 6346, ..., 7312, 6972, 5532],\n",
       "       [5119, 1563, 4035, ..., 6253, 7433, 3232]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D_k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "129\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f75aadd3390>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nCf4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f767424fc10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "large_hubs_idx = np.where(N_k>1000)[0]\n",
    "print len(large_hubs_idx)\n",
    "labs, counts = np.unique(Y[large_hubs_idx], return_counts=True)\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.bar(range(len(labs)), counts, align='center');\n",
    "plt.xticks(range(len(labs)), labs, rotation=90);\n",
    "plt.ylabel('Count')\n",
    "plt.xlabel('Country origins for recordings identified as large hubs')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## let's get the audio url to listen to tracks identified as large hubs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/homes/mp305/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py:2822: DtypeWarning: Columns (0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,29,31,35,38,39,40,41,44,45,48,55,56,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,93,95,96) have mixed types. Specify dtype option on import or set low_memory=False.\n",
      "  if self.run_code(code, result):\n"
     ]
    }
   ],
   "source": [
    "ddf = outliers.load_metadata(Yaudio, metadata_file='../data/metadata_BLSM_language_all.csv')\n",
    "#ddf = outliers.load_metadata(Yaudio, metadata_file='/Users/mariapanteli/Documents/'+\n",
    "#                             'QMUL/Code/MyPythonCode/MergeBL-Smith/data/metadata_BLSM_language_all.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8200, 108)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ddf.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"songurls_Album\" in ddf.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### first, fix the url for BL tracks (because it was changed recently and the metadata.csv file is not updated) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/homes/mp305/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py:115: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self._setitem_with_indexer(indexer, value)\n"
     ]
    }
   ],
   "source": [
    "bl_inds = np.where(np.isnan(ddf['BuyLinkTrackDownload']))[0]\n",
    "for bl_ind in bl_inds:\n",
    "    ddf['songurls_Album'].iloc[bl_ind] = ('https://sounds.bl.uk/World-and-traditional-music/' + \n",
    "                                        ddf['Folder'].iloc[bl_ind] + '/' + \n",
    "                                        ddf['MetaFile'].iloc[bl_ind].split('.')[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 'https://sounds.bl.uk/World-and-traditional-music/Decca-West-African-recordings/025M-1CS0043663XX-0100V0',\n",
       "       'https://sounds.bl.uk/World-and-traditional-music/Rycroft/025M-C0811X0005XX-2000V0',\n",
       "       'https://sounds.bl.uk/World-and-traditional-music/Colin-Huehns-Pakistan/025M-C0485X0085XX-3100V0',\n",
       "       'https://sounds.bl.uk/World-and-traditional-music/Rycroft/025M-C0811X0005XX-1300V0',\n",
       "       'https://sounds.bl.uk/World-and-traditional-music/Colin-Huehns-Pakistan/025M-C0485X0031XX-0500V0'], dtype=object)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "large_hubs_idx = np.array([515, 2549, 3486, 5020, 5119])\n",
    "ddf['songurls_Album'].iloc[large_hubs_idx].get_values()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## what if we use a different distance metric?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.20652171267\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7616b7dd90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "D_cos = pairwise_distances(X, metric='cosine')\n",
    "uniq_countries, uniq_counts = np.unique(Y, return_counts=True)\n",
    "k = np.int(np.round(np.mean(uniq_counts)))\n",
    "N_k = n_occurrence_from_D(D_cos, k=k)\n",
    "print skew(N_k)\n",
    "plt.figure()\n",
    "plt.hist(N_k, bins=100);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## are the extreme hubs same as before?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[232 233 238 246 256] [ 'https://sounds.bl.uk/World-and-traditional-music/Dinka-songs-from-South-Sudan/025M-C1580X0004XX-0001V0'\n",
      " 'https://sounds.bl.uk/World-and-traditional-music/Dinka-songs-from-South-Sudan/025M-C1580X0109XX-0001V0'\n",
      " 'https://sounds.bl.uk/World-and-traditional-music/Terry-Yarnell-Collection/025M-C1005X0002XX-1200V0'\n",
      " 'https://sounds.bl.uk/World-and-traditional-music/Roy-Palmer-collection/025M-C1023X0006XX-0700V0'\n",
      " 'https://sounds.bl.uk/World-and-traditional-music/Terry-Yarnell-Collection/025M-C1005X0004XX-1900V0']\n"
     ]
    }
   ],
   "source": [
    "sort_idx = np.argsort(N_k)\n",
    "print N_k[sort_idx[-5:]], ddf['songurls_Album'].iloc[sort_idx[-5:]].get_values()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## pairwise Mahalanobis seems to have extreme values, how about Mahalanobis from the whole set?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nWLDE1f0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa475850810>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "threshold, y_pred, MD = utils.get_outliers_Mahal(X, chi2thr=0.999)\n",
    "plt.figure()\n",
    "plt.hist(MD, bins=100);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa475850e90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "threshold, y_pred, MD = utils.get_outliers_Mahal(X[:, :50], chi2thr=0.999)\n",
    "plt.figure()\n",
    "plt.hist(MD, bins=100);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}