diff --git a/__pycache__/func.cpython-39.pyc b/__pycache__/func.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f77164a27b7ce4b18c72a3d29b904570ac6855a Binary files /dev/null and b/__pycache__/func.cpython-39.pyc differ diff --git a/__pycache__/myfunc.cpython-39.pyc b/__pycache__/myfunc.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93556c16a264c0ac49773fabd430c8de6ced1826 Binary files /dev/null and b/__pycache__/myfunc.cpython-39.pyc differ diff --git a/cosine_similarity.ipynb b/cosine_similarity.ipynb index 12ccd4651300197eba0090a45a5164b2e1ce0d3a..052974db9a5a636f3a887c95b20ea5c2b2ef54ec 100644 --- a/cosine_similarity.ipynb +++ b/cosine_similarity.ipynb @@ -2,3207 +2,412 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "id": "tFr3s1eh9_Mi" - }, + "metadata": {}, "source": [ - "# Gaussian Mixture Models Implementation\n", - "Oscar Contreras Carrasco\n", - "\n", - "Hi everyone! This is a full implementation of Gaussian Mixture Models in Python. I really hope you will find it useful to further understand how the algorithm works.\n", - "\n", - "Let's first import the libraries we are going to be using throughout the exercise:" + "# Imports" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": { "id": "irGOL_Dcw8ja" }, "outputs": [], "source": [ - "import imageio\n", - "import matplotlib.animation as ani\n", - "import matplotlib.cm as cmx\n", - "import matplotlib.colors as colors\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import json\n", - "import os\n", "import pandas as pd\n", + "import random\n", "import statistics\n", "\n", - "from sklearn.metrics.pairwise import cosine_similarity,cosine_distances\n", - "from matplotlib.patches import Ellipse\n", - "from PIL import Image\n", - "from sklearn import datasets\n", - "from sklearn.cluster import KMeans\n", - "from sklearn.model_selection import train_test_split" + "from sklearn.model_selection import train_test_split\n", + "from myfunc import *" ] }, { "cell_type": "markdown", - "metadata": { - "id": "hN_TKq1kVRJT" - }, + "metadata": {}, "source": [ - "For the purposes of this exercise, we will be using the Iris dataset, which is probably already familiar to you. We can easily obtain it by using the __load_iris__ function provided by sklearn:" + "# Load Data" ] }, { - "cell_type": "code", - "execution_count": 4, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "def load_data(path):\n", - " \"\"\"\n", - " Load events from files and convert to dataframe.\n", - " \"\"\"\n", - " map_lst=[]\n", - " for f in os.listdir(path):\n", - " file_name=os.path.join(path,f)\n", - " if os.path.isfile(file_name):\n", - " for line in open(file_name):\n", - " obj = json.loads(line.strip())\n", - " if not obj is None:\n", - " map_lst.append(obj)\n", - " return pd.DataFrame(map_lst) \n", - "\n", - "def load_dataset(df):\n", - " \"\"\"\n", - " Convert dataframe to user-item-interaction matrix, which is used for \n", - " Matrix Factorization based recommendation.\n", - " In rating matrix, clicked events are refered as 1 and others are refered as 0.\n", - " \"\"\"\n", - " df = df[~df['documentId'].isnull()]\n", - " df = df.drop_duplicates(subset=['userId', 'documentId']).reset_index(drop=True)\n", - " df = df.sort_values(by=['userId', 'time'])\n", - " n_users = df['userId'].nunique()\n", - " n_items = df['documentId'].nunique()\n", - "\n", - " ratings = np.zeros((n_users, n_items))\n", - " new_user = df['userId'].values[1:] != df['userId'].values[:-1]\n", - " new_user = np.r_[True, new_user]\n", - " df['uid'] = np.cumsum(new_user)\n", - " item_ids = df['documentId'].unique().tolist()\n", - " new_df = pd.DataFrame({'documentId':item_ids, 'tid':range(1,len(item_ids)+1)})\n", - " df = pd.merge(df, new_df, on='documentId', how='outer')\n", - " df_ext = df[['uid', 'tid']]\n", - " \n", - " for row in df_ext.itertuples():\n", - " ratings[row[1]-1, row[2]-1] = 1.0\n", - " return ratings" + "Load dataset" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "mcCzJFnT_fRQ", - "outputId": "6132d687-b3bd-4620-996a-d729893231b3" - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "df = load_data(\"active1000\")" ] }, { - "cell_type": "code", - "execution_count": 6, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>eventId</th>\n", - " <th>category</th>\n", - " <th>activeTime</th>\n", - " <th>title</th>\n", - " <th>url</th>\n", - " <th>userId</th>\n", - " <th>publishtime</th>\n", - " <th>time</th>\n", - " <th>documentId</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>2029361762</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:i9i5zdr4ns9bm4ky:2by1rj0hmjgy</td>\n", - " <td>None</td>\n", - " <td>1483225227</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>351617637</td>\n", - " <td>None</td>\n", - " <td>41.0</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:iimz2wwcwxu7d721:2r8odp9zhg5yp</td>\n", - " <td>None</td>\n", - " <td>1483225320</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>483221791</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no/nyheter/trondheim/2016/12/31...</td>\n", - " <td>cx:iimz2wwcwxu7d721:2r8odp9zhg5yp</td>\n", - " <td>None</td>\n", - " <td>1483225328</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>929295193</td>\n", - " <td>None</td>\n", - " <td>11.0</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:idlec1eyfbpru62o:2yhui5zv6k12b</td>\n", - " <td>None</td>\n", - " <td>1483225334</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>1908339310</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no/pluss/kultur/2016/12/31/bare...</td>\n", - " <td>cx:iimz2wwcwxu7d721:2r8odp9zhg5yp</td>\n", - " <td>None</td>\n", - " <td>1483225387</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>...</th>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207603</th>\n", - " <td>521670073</td>\n", - " <td>pluss|magasin</td>\n", - " <td>112.0</td>\n", - " <td>Slektsgården på Lundamo fra 1700-tallet er fyl...</td>\n", - " <td>http://adressa.no/pluss/magasin/2017/03/31/tre...</td>\n", - " <td>cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i</td>\n", - " <td>2017-03-31T11:49:17.000Z</td>\n", - " <td>1490997586</td>\n", - " <td>b270d294f458b61648f4ccf997205d0601cd1d2a</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207604</th>\n", - " <td>230731556</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:1308583952725345187693:udud1r6r2t9x</td>\n", - " <td>None</td>\n", - " <td>1490997592</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207605</th>\n", - " <td>109227474</td>\n", - " <td>None</td>\n", - " <td>3.0</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:13575749204861928455228:1k8qdj5v2uedm</td>\n", - " <td>None</td>\n", - " <td>1490997594</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207606</th>\n", - " <td>844878186</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>None</td>\n", - " <td>http://adressa.no</td>\n", - " <td>cx:1371407323707628343591:3792vi84kak09</td>\n", - " <td>None</td>\n", - " <td>1490997595</td>\n", - " <td>None</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207607</th>\n", - " <td>701335784</td>\n", - " <td>None</td>\n", - " <td>NaN</td>\n", - " <td>- Første gang en politiker etterforskes</td>\n", - " <td>http://adressa.no/incoming/2017/03/31/transpar...</td>\n", - " <td>cx:13575749204861928455228:1k8qdj5v2uedm</td>\n", - " <td>2017-03-31T21:43:55.000Z</td>\n", - " <td>1490997599</td>\n", - " <td>5238b753c8d91dfbdc72bbdf809a47b6464dd591</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "<p>2207608 rows × 9 columns</p>\n", - "</div>" - ], - "text/plain": [ - " eventId category activeTime \\\n", - "0 2029361762 None NaN \n", - "1 351617637 None 41.0 \n", - "2 483221791 None NaN \n", - "3 929295193 None 11.0 \n", - "4 1908339310 None NaN \n", - "... ... ... ... \n", - "2207603 521670073 pluss|magasin 112.0 \n", - "2207604 230731556 None NaN \n", - "2207605 109227474 None 3.0 \n", - "2207606 844878186 None NaN \n", - "2207607 701335784 None NaN \n", - "\n", - " title \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "... ... \n", - "2207603 Slektsgården på Lundamo fra 1700-tallet er fyl... \n", - "2207604 None \n", - "2207605 None \n", - "2207606 None \n", - "2207607 - Første gang en politiker etterforskes \n", - "\n", - " url \\\n", - "0 http://adressa.no \n", - "1 http://adressa.no \n", - "2 http://adressa.no/nyheter/trondheim/2016/12/31... \n", - "3 http://adressa.no \n", - "4 http://adressa.no/pluss/kultur/2016/12/31/bare... \n", - "... ... \n", - "2207603 http://adressa.no/pluss/magasin/2017/03/31/tre... \n", - "2207604 http://adressa.no \n", - "2207605 http://adressa.no \n", - "2207606 http://adressa.no \n", - "2207607 http://adressa.no/incoming/2017/03/31/transpar... \n", - "\n", - " userId \\\n", - "0 cx:i9i5zdr4ns9bm4ky:2by1rj0hmjgy \n", - "1 cx:iimz2wwcwxu7d721:2r8odp9zhg5yp \n", - "2 cx:iimz2wwcwxu7d721:2r8odp9zhg5yp \n", - "3 cx:idlec1eyfbpru62o:2yhui5zv6k12b \n", - "4 cx:iimz2wwcwxu7d721:2r8odp9zhg5yp \n", - "... ... \n", - "2207603 cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i \n", - "2207604 cx:1308583952725345187693:udud1r6r2t9x \n", - "2207605 cx:13575749204861928455228:1k8qdj5v2uedm \n", - "2207606 cx:1371407323707628343591:3792vi84kak09 \n", - "2207607 cx:13575749204861928455228:1k8qdj5v2uedm \n", - "\n", - " publishtime time \\\n", - "0 None 1483225227 \n", - "1 None 1483225320 \n", - "2 None 1483225328 \n", - "3 None 1483225334 \n", - "4 None 1483225387 \n", - "... ... ... \n", - "2207603 2017-03-31T11:49:17.000Z 1490997586 \n", - "2207604 None 1490997592 \n", - "2207605 None 1490997594 \n", - "2207606 None 1490997595 \n", - "2207607 2017-03-31T21:43:55.000Z 1490997599 \n", - "\n", - " documentId \n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "... ... \n", - "2207603 b270d294f458b61648f4ccf997205d0601cd1d2a \n", - "2207604 None \n", - "2207605 None \n", - "2207606 None \n", - "2207607 5238b753c8d91dfbdc72bbdf809a47b6464dd591 \n", - "\n", - "[2207608 rows x 9 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "df" + "Split data-set" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>documentId</th>\n", - " <th>userId</th>\n", - " <th>rating</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>2207589</th>\n", - " <td>505c6ab9e135314d3faa58747060b74977af3a72</td>\n", - " <td>cx:29bm1b20piobtth7k2dwn6h7x:2xxeqdwxx58ld</td>\n", - " <td>1</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207598</th>\n", - " <td>40a78175db0a481e4b85546d587963bf8f02376a</td>\n", - " <td>cx:iaxvnnrzl6wm1z5f:uf8xinqqiaa1</td>\n", - " <td>1</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207599</th>\n", - " <td>e0e0a5fc5b0b14d0e51b2908f15cdcc1a4743717</td>\n", - " <td>cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i</td>\n", - " <td>1</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207603</th>\n", - " <td>b270d294f458b61648f4ccf997205d0601cd1d2a</td>\n", - " <td>cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i</td>\n", - " <td>1</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2207607</th>\n", - " <td>5238b753c8d91dfbdc72bbdf809a47b6464dd591</td>\n", - " <td>cx:13575749204861928455228:1k8qdj5v2uedm</td>\n", - " <td>1</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - " documentId \\\n", - "2207589 505c6ab9e135314d3faa58747060b74977af3a72 \n", - "2207598 40a78175db0a481e4b85546d587963bf8f02376a \n", - "2207599 e0e0a5fc5b0b14d0e51b2908f15cdcc1a4743717 \n", - "2207603 b270d294f458b61648f4ccf997205d0601cd1d2a \n", - "2207607 5238b753c8d91dfbdc72bbdf809a47b6464dd591 \n", - "\n", - " userId rating \n", - "2207589 cx:29bm1b20piobtth7k2dwn6h7x:2xxeqdwxx58ld 1 \n", - "2207598 cx:iaxvnnrzl6wm1z5f:uf8xinqqiaa1 1 \n", - "2207599 cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i 1 \n", - "2207603 cx:2w0lpa13j3fvs185zvyme5hscg:2rx8mzv52s32i 1 \n", - "2207607 cx:13575749204861928455228:1k8qdj5v2uedm 1 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "data = [df[\"documentId\"], df[\"userId\"]]\n", - "headers = [\"documentId\", \"userId\"]\n", - "df_compact = pd.concat(data, axis=1, keys=headers)\n", - "\n", - "\n", - "df_compact = df_compact[df_compact['documentId'].notna()]\n", - " \n", - "# length before removing duplicates\n", - "#print(len(df_compact))\n", - "\n", - "# dropping duplicate values\n", - "df_compact.drop_duplicates(keep=False,inplace=True)\n", - " \n", - "# length after removing duplicates\n", - "#print(len(df_compact))\n", - "\n", - "\n", - "df_compact[\"rating\"] = 1\n", - "\n", - "pd.set_option('display.max_colwidth', 60)\n", - "#df_compact.loc[df_compact[\"eventId\"] == 1187690539][\"title\"]\n", - "\n", - "df_compact.tail()" + "train, test = train_test_split(df, test_size=0.2)" ] }, { - "cell_type": "code", - "execution_count": 8, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "cx:ib1vo01vq38f2mqc:20lut6o1pv35i 7956\n", - "cx:1351271770996936245545:2ohfnjzl6i0r 1460\n", - "cx:i7kfakxrqw18lh79:1vccko6gkzhyn 1396\n", - "cx:3ny1lwklkwjew2vqwkl5adkarl:3lqt7vftb3hfu 1357\n", - "cx:f5e48x6ex7f53j657ibytaxs2:25ny9hhau79nc 1354\n", - " ... \n", - "cx:1374422107708501055096:1xlyme6qz9g0z 93\n", - "cx:13910658260121461569850:p9s59tp5nk86 91\n", - "cx:13107309109141761847803:1e1rswsawyyc3 89\n", - "cx:2r608j1wwxufl2bvmc5nevkswr:ilbdpw1kl69v 72\n", - "cx:2sf5o8rm80qqm2qlpgbi8qe2ro:1l7kv1n1ca9j6 51\n", - "Name: userId, Length: 1000, dtype: int64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "users_read = df_compact['userId'].value_counts()\n", - "users_read" + "# Preperation" ] }, { - "cell_type": "code", - "execution_count": 10, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19371" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "articles = df_compact['documentId'].unique()\n", - "len(articles)" + "### Data Preprocessing" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "M = df_compact.pivot_table(index=['documentId'], columns=['userId'], values='rating')" + "data = [train[\"documentId\"], train[\"userId\"]]\n", + "headers = [\"documentId\", \"userId\"]\n", + "train_compact = pd.concat(data, axis=1, keys=headers)\n", + "train_compact = train_compact[train_compact['documentId'].notna()]\n", + "train_compact = train_compact[train_compact['userId'].notna()]\n", + "train_compact.drop_duplicates(keep=False,inplace=True)\n", + "train_compact[\"rating\"] = 1\n", + "\n", + "train_M = train_compact.pivot_table(index=['documentId'], columns=['userId'], values='rating')\n", + "train_M.shape\n", + "train_M = train_M.fillna(0)" ] }, { - "cell_type": "code", - "execution_count": 12, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(19371, 1000)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "M.shape" + "### Train" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>userId</th>\n", - " <th>cx:10k2wzm1b3jsk2y5ym1utnjo97:2kefzqaxe9jx7</th>\n", - " <th>cx:11asuyo07mbi13b849lp87hlje:1i9z1hu1xx694</th>\n", - " <th>cx:13077170178592105431908:2so1nc52xur4d</th>\n", - " <th>cx:13082126012361420762846:3nhzg71lk2zqc</th>\n", - " <th>cx:13082926635761580649288:30q2cgmwa3mzi</th>\n", - " <th>cx:1308583952725345187693:udud1r6r2t9x</th>\n", - " <th>cx:1309558690741378897676:2952b0y4ym2yb</th>\n", - " <th>cx:13107309109141761847803:1e1rswsawyyc3</th>\n", - " <th>cx:13107395951811145781879:31h108vvvw6te</th>\n", - " <th>cx:1311701842831565911801:20af369r0nju6</th>\n", - " <th>...</th>\n", - " <th>cx:xgx9bvnqjnwn3na33zslm41j6:1141wmv8rxo4m</th>\n", - " <th>cx:xz8qx9tccgls29jx1ggejvc2o:3dcgsybzandnb</th>\n", - " <th>cx:xzx3d9an4u6r614zazbm41gx:3d1u2by0zprqf</th>\n", - " <th>cx:y3ojtj1dah373vh26yiostnfa:3bnuogklc05m0</th>\n", - " <th>cx:ym4dpjqbcqqp138to9m6mm0m7:2mgigrnofe6bf</th>\n", - " <th>cx:ymgd4qz84t6z31b22zecmrpz3:2bclyyq01sfwd</th>\n", - " <th>cx:ywxiqgtmxyfc24eqhyzpz7jer:28kehwib7kyi8</th>\n", - " <th>cx:z5nmgvym79d91yxajr8rncjp3:dd23bgkvv19x</th>\n", - " <th>cx:zdxhidle29xquzztafvsik92:2w17zz40qj619</th>\n", - " <th>cx:ztquyfd3pug92dd4jpqzsvxfw:dixlo02oz5eu</th>\n", - " </tr>\n", - " <tr>\n", - " <th>documentId</th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0006b2caef9ae801cfa0a48ec737544241ec4dca</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>00098cc438af89c1ba8fb6a37035af2e2f606ce3</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>000b8a3813a9ae59e9e14641ddcdfbd910aa6b76</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>000fd9e1ee3153e955d5e64b35691d799189aa2d</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>1.0</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>1.0</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>001b555b5fad3b0390f6f305bafcde1d3bdc5fc3</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>...</th>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffea2777d7703dc7307e9a6333657cfb4bf6131e</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffeea037b0cf89ab7b2ad06d1494537fb7b9954d</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>fff0ee44bb6de4dcab4828abfa90302af0f30d36</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>fffcc5d96f6d91418c68b17c191eb25093947b37</th>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>...</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "<p>19371 rows × 1000 columns</p>\n", - "</div>" - ], - "text/plain": [ - "userId cx:10k2wzm1b3jsk2y5ym1utnjo97:2kefzqaxe9jx7 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:11asuyo07mbi13b849lp87hlje:1i9z1hu1xx694 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:13077170178592105431908:2so1nc52xur4d \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 1.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:13082126012361420762846:3nhzg71lk2zqc \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:13082926635761580649288:30q2cgmwa3mzi \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:1308583952725345187693:udud1r6r2t9x \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:1309558690741378897676:2952b0y4ym2yb \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:13107309109141761847803:1e1rswsawyyc3 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 1.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:13107395951811145781879:31h108vvvw6te \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:1311701842831565911801:20af369r0nju6 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId ... \\\n", - "documentId ... \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca ... \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 ... \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 ... \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d ... \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 ... \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e ... \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e ... \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d ... \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 ... \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 ... \n", - "\n", - "userId cx:xgx9bvnqjnwn3na33zslm41j6:1141wmv8rxo4m \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:xz8qx9tccgls29jx1ggejvc2o:3dcgsybzandnb \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:xzx3d9an4u6r614zazbm41gx:3d1u2by0zprqf \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:y3ojtj1dah373vh26yiostnfa:3bnuogklc05m0 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:ym4dpjqbcqqp138to9m6mm0m7:2mgigrnofe6bf \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:ymgd4qz84t6z31b22zecmrpz3:2bclyyq01sfwd \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:ywxiqgtmxyfc24eqhyzpz7jer:28kehwib7kyi8 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:z5nmgvym79d91yxajr8rncjp3:dd23bgkvv19x \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:zdxhidle29xquzztafvsik92:2w17zz40qj619 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 NaN \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "userId cx:ztquyfd3pug92dd4jpqzsvxfw:dixlo02oz5eu \n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca NaN \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 NaN \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 NaN \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d NaN \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 NaN \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e NaN \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e NaN \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d NaN \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 1.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 NaN \n", - "\n", - "[19371 rows x 1000 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "M" + "userId_list = train_compact['userId'].value_counts().axes[0].tolist()\n", + "\n", + "corr_list_list = []\n", + "for uid in userId_list:\n", + " corr_list_list.append([uid, get_corr_list(uid, train_M)])" ] }, { - "cell_type": "code", - "execution_count": 14, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style scoped>\n", - " .dataframe tbody tr th:only-of-type {\n", - " vertical-align: middle;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: right;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>userId</th>\n", - " <th>cx:10k2wzm1b3jsk2y5ym1utnjo97:2kefzqaxe9jx7</th>\n", - " <th>cx:11asuyo07mbi13b849lp87hlje:1i9z1hu1xx694</th>\n", - " <th>cx:13077170178592105431908:2so1nc52xur4d</th>\n", - " <th>cx:13082126012361420762846:3nhzg71lk2zqc</th>\n", - " <th>cx:13082926635761580649288:30q2cgmwa3mzi</th>\n", - " <th>cx:1308583952725345187693:udud1r6r2t9x</th>\n", - " <th>cx:1309558690741378897676:2952b0y4ym2yb</th>\n", - " <th>cx:13107309109141761847803:1e1rswsawyyc3</th>\n", - " <th>cx:13107395951811145781879:31h108vvvw6te</th>\n", - " <th>cx:1311701842831565911801:20af369r0nju6</th>\n", - " <th>...</th>\n", - " <th>cx:xgx9bvnqjnwn3na33zslm41j6:1141wmv8rxo4m</th>\n", - " <th>cx:xz8qx9tccgls29jx1ggejvc2o:3dcgsybzandnb</th>\n", - " <th>cx:xzx3d9an4u6r614zazbm41gx:3d1u2by0zprqf</th>\n", - " <th>cx:y3ojtj1dah373vh26yiostnfa:3bnuogklc05m0</th>\n", - " <th>cx:ym4dpjqbcqqp138to9m6mm0m7:2mgigrnofe6bf</th>\n", - " <th>cx:ymgd4qz84t6z31b22zecmrpz3:2bclyyq01sfwd</th>\n", - " <th>cx:ywxiqgtmxyfc24eqhyzpz7jer:28kehwib7kyi8</th>\n", - " <th>cx:z5nmgvym79d91yxajr8rncjp3:dd23bgkvv19x</th>\n", - " <th>cx:zdxhidle29xquzztafvsik92:2w17zz40qj619</th>\n", - " <th>cx:ztquyfd3pug92dd4jpqzsvxfw:dixlo02oz5eu</th>\n", - " </tr>\n", - " <tr>\n", - " <th>documentId</th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0006b2caef9ae801cfa0a48ec737544241ec4dca</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>00098cc438af89c1ba8fb6a37035af2e2f606ce3</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>000b8a3813a9ae59e9e14641ddcdfbd910aa6b76</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>000fd9e1ee3153e955d5e64b35691d799189aa2d</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>1.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>1.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>001b555b5fad3b0390f6f305bafcde1d3bdc5fc3</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>...</th>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " <td>...</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffea2777d7703dc7307e9a6333657cfb4bf6131e</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>ffeea037b0cf89ab7b2ad06d1494537fb7b9954d</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>fff0ee44bb6de4dcab4828abfa90302af0f30d36</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>fffcc5d96f6d91418c68b17c191eb25093947b37</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>...</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "<p>19371 rows × 1000 columns</p>\n", - "</div>" - ], - "text/plain": [ - "userId cx:10k2wzm1b3jsk2y5ym1utnjo97:2kefzqaxe9jx7 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:11asuyo07mbi13b849lp87hlje:1i9z1hu1xx694 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:13077170178592105431908:2so1nc52xur4d \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 1.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:13082126012361420762846:3nhzg71lk2zqc \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:13082926635761580649288:30q2cgmwa3mzi \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:1308583952725345187693:udud1r6r2t9x \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:1309558690741378897676:2952b0y4ym2yb \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:13107309109141761847803:1e1rswsawyyc3 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 1.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:13107395951811145781879:31h108vvvw6te \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:1311701842831565911801:20af369r0nju6 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId ... \\\n", - "documentId ... \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca ... \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 ... \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 ... \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d ... \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 ... \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e ... \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e ... \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d ... \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 ... \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 ... \n", - "\n", - "userId cx:xgx9bvnqjnwn3na33zslm41j6:1141wmv8rxo4m \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:xz8qx9tccgls29jx1ggejvc2o:3dcgsybzandnb \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:xzx3d9an4u6r614zazbm41gx:3d1u2by0zprqf \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:y3ojtj1dah373vh26yiostnfa:3bnuogklc05m0 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:ym4dpjqbcqqp138to9m6mm0m7:2mgigrnofe6bf \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:ymgd4qz84t6z31b22zecmrpz3:2bclyyq01sfwd \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:ywxiqgtmxyfc24eqhyzpz7jer:28kehwib7kyi8 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:z5nmgvym79d91yxajr8rncjp3:dd23bgkvv19x \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:zdxhidle29xquzztafvsik92:2w17zz40qj619 \\\n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 0.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "userId cx:ztquyfd3pug92dd4jpqzsvxfw:dixlo02oz5eu \n", - "documentId \n", - "0006b2caef9ae801cfa0a48ec737544241ec4dca 0.0 \n", - "00098cc438af89c1ba8fb6a37035af2e2f606ce3 0.0 \n", - "000b8a3813a9ae59e9e14641ddcdfbd910aa6b76 0.0 \n", - "000fd9e1ee3153e955d5e64b35691d799189aa2d 0.0 \n", - "001b555b5fad3b0390f6f305bafcde1d3bdc5fc3 0.0 \n", - "... ... \n", - "ffe93cc30458ece7dc3ebf6a61e07d1d71e3bb6e 0.0 \n", - "ffea2777d7703dc7307e9a6333657cfb4bf6131e 0.0 \n", - "ffeea037b0cf89ab7b2ad06d1494537fb7b9954d 0.0 \n", - "fff0ee44bb6de4dcab4828abfa90302af0f30d36 1.0 \n", - "fffcc5d96f6d91418c68b17c191eb25093947b37 0.0 \n", - "\n", - "[19371 rows x 1000 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "M = M.fillna(0)\n", - "M" + "# Usage" ] }, { - "cell_type": "code", - "execution_count": 15, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.14573312097672908" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "A=M['cx:29bm1b20piobtth7k2dwn6h7x:2xxeqdwxx58ld'].to_numpy()\n", - "B=M['cx:iaxvnnrzl6wm1z5f:uf8xinqqiaa1'].to_numpy()\n", - "result=cosine_similarity(A.reshape(1,-1),B.reshape(1,-1))\n", - "result[0][0]" + "### Data Preprocessing" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "def get_users(user, M, num):\n", - " clicks = []\n", - " for u in M.columns:\n", - " if u == user:\n", - " continue\n", - " A=M[user].to_numpy()\n", - " B=M[u].to_numpy()\n", - " result=cosine_similarity(A.reshape(1,-1),B.reshape(1,-1))\n", - " cor = result[0][0]\n", - " clicks.append((u, cor))\n", - " clicks.sort(key=lambda tup: tup[1], reverse=True)\n", - " return clicks[:num]" + "data = [test[\"documentId\"], test[\"userId\"]]\n", + "headers = [\"documentId\", \"userId\"]\n", + "test_compact = pd.concat(data, axis=1, keys=headers)\n", + "test_compact = test_compact[test_compact['documentId'].notna()]\n", + "test_compact.drop_duplicates(keep=False,inplace=True)\n", + "test_compact[\"rating\"] = 1" ] }, { - "cell_type": "code", - "execution_count": 17, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('cx:iikvyk1xbtjs8dfd:6h5bv0t10r03', 0.44495179980138044),\n", - " ('cx:ibl5xzqy8lzet1i9:t1y533t72djd', 0.4361302621298705),\n", - " ('cx:iii0ycatlbist2gc:2w40r1ypbnz4w', 0.42748169568106176),\n", - " ('cx:ictag62kg988zqg3:5ohqpdu2u97s', 0.41890886033956154),\n", - " ('cx:ikwt5hlo2bjdg1wr:2ub0shn3jpxf2', 0.4144401723067728),\n", - " ('cx:7hf6o4ggul2qz5y7wr5j0j6d:3l4q0cx6f6669', 0.4057269699921616),\n", - " ('cx:i7kfakxrqw18lh79:1vccko6gkzhyn', 0.40556402701114314),\n", - " ('cx:ijpfm1f17fytt1py:1enkt11ljeu8y', 0.4012425208068239),\n", - " ('cx:ibwazmhun5896ylh:2nchnkenka1bd', 0.39862851754557826),\n", - " ('cx:f5e48x6ex7f53j657ibytaxs2:25ny9hhau79nc', 0.3876240744058908),\n", - " ('cx:i5w5r4qss90t4duq:gdkqppfz1ax0', 0.380877138654505),\n", - " ('cx:ijtjdxpz93t5f8m5:2iz9n4nuh22ky', 0.38057591159902),\n", - " ('cx:ibdk1kdii4su5rtq:1bno5af3lb5j5', 0.3794762059436236),\n", - " ('cx:23p5u4f5q09ig3o0koa0zqlqqq:cx7sxgjny8h4', 0.378077012679135),\n", - " ('cx:31vb5age6wo2q35mowecaz95ji:15yxl536xys5t', 0.37755039480287933),\n", - " ('cx:ih24myddm90agujz:rar6aw2t3p7e', 0.37574724600911164),\n", - " ('cx:i8rkgdc6m43lfb8f:34c1bz8xj07ev', 0.37432247561128906),\n", - " ('cx:h2ljo3krw2ie33pp363laavq7:2vrzccxgi1xmd', 0.3736084425232495),\n", - " ('cx:vsjeqzr2a4dt379s0nd37cqt4:3flw79sr1jbl3', 0.3727843551247872),\n", - " ('cx:i66hq9wllds267y6:16mhjso07qwvu', 0.3723764306696227)]" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "user = 'cx:1351271770996936245545:2ohfnjzl6i0r'\n", - "users = get_users(user, M, 20)\n", - "users" + "### Set Variables" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "498bc52ed4d2fd169a628af22e94982f0ffd76e7 17\n", - "58efb777e5df92096a6c27170f795eddd25e250c 17\n", - "b3d47ea2b17b4518b044acbd73ece5ddf3073867 16\n", - "6af41040924f1aa5cbc5427af8ecb63df0b36fc3 16\n", - "494a1f550157cc78c7ef55dd2498faa450bdaa5b 16\n", - "314584a62f4260b74aaf660cfe793eb00a1e618d 16\n", - "1dc7d27f199bdd5579024eac267aba275b3b16cc 16\n", - "a4108a6448e235d895c62807f493d918a9b8125e 15\n", - "1657feec39b7b76bc5b12865a0cbc81a61de9996 15\n", - "73da9c9dd611d4cc68d7ba1e0d52a58573bb9671 15\n", - "Name: documentId, dtype: int64" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "def get_recs(user, users, df, df_, num, filter=True):\n", - " users_list = [x[0] for x in users]\n", - " df_users_clicks = df[df['userId'].isin(users_list)]\n", - " user_clicks = df_[df_['userId'].isin([user])]['documentId'].to_list()\n", - " if filter:\n", - " df_unread_only = df_users_clicks[~df_users_clicks['documentId'].isin(user_clicks)]\n", - " titles = df_unread_only['documentId'].value_counts()\n", - " else:\n", - " titles = df_users_clicks['documentId'].value_counts()\n", + "simular_users_count = 50 # How many corr values to care about\n", + "rec_count = 50 # number>0, -1=avarage of corr\n", "\n", - " return titles[:num]\n", + "random_user_index = random.randint(0, len(userId_list))\n", + "random_user = corr_list_list[random_user_index]\n", "\n", - "recs = get_recs(user, users, df_compact, df_compact, 10)\n", - "recs" + "test_period_read_list = test_compact[test_compact['userId'].isin([random_user[0]])]['documentId'].tolist() # list of all articles the user actually read in test-period\n", + "if rec_count is None:\n", + " rec_count = len(test_period_read_list)\n", + "elif rec_count == -1:\n", + " read = []\n", + " users_list = [x[0] for x in random_user[1][:simular_users_count]]\n", + " for usr in users_list:\n", + " c = len(test_compact[test_compact['userId'].isin([usr])]['documentId'].tolist())\n", + " read.append(c)\n", + " avg_read = statistics.mean(read)\n", + " rec_count = int(avg_read)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get a reccomendation" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 8, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['b16b516eefb647edec256ad2f9b2c7a897b9785b',\n", - " 'a02dc58701d0a51ec7717261846fbb9dd4e608af',\n", - " '735628ed2428f2a7b2a1b78f95f3c6d777e1865b',\n", - " 'f9ad33b317728440d5ed10efce23ccfbb81e9c70',\n", - " 'ca1952721582ff9e2b6d3555c26ee81a3f3f8fdb',\n", - " 'dccdcc4b672df99eabf2dbbfc350c9917dee9a0b',\n", - " '70a19fd7c9f6827feb3eb4f3df95121664491fa7',\n", - " '71e7c18e889b7e19352cfb63a15bd8aa32c51630',\n", - " 'bb81fd1ecfbe283c8e0c3ed5e3d017b79ad11acb',\n", - " '197fa137aae522a87d6bd210610bc2c71191d5fa',\n", - " '7b98a1ddfc682d87d9f2f867a27406252773d548',\n", - " '2a00c43cf84f7c433431027845505a0fdc77a55d',\n", - " 'a60c0b9a0ba539404271d0d51ffd209760a42cff',\n", - " 'ff44bfe03558714a01451c37fef1326b78d84461',\n", - " '7dbbd7f3a7ec287bdcbdaf8b8f042732074bf2bd',\n", - " '1217b19ae6a41b6d58a1bfe0d9aed91c6355ac23',\n", - " '66f8175bc3d484fee592762988c90d482ff1ef7e',\n", - " 'b28e7c163c39941aa1cbd0b7b3a821576771f893',\n", - " '0867dbb33bb90970ae48592057be34246a0124ac',\n", - " 'e50892cca93cd6a5b1fba7e3545fa55b53a260b1',\n", - " '1e6875f377d6ce529cebe701e080de7b8b4d85c7',\n", - " 'bb82d51d4124f30220d50af19135411a33dad356',\n", - " '14e07e0abfcdc157d09a6c8b054c276450b73f34',\n", - " 'd2ccabbfede826a140a1d2980a3f214bc6ec3598',\n", - " 'ff6eab0817ab6f1995022cbf91a40613e3400357',\n", - " '3e89174cad7210974c7ee29b0d2b3b617d50bce5',\n", - " 'bcd7e83ecb8720e2d062cd50a65ae08006284f00',\n", - " 'ae167d304a4ef49e874389abcba68636b0011f85',\n", - " 'c2d75d47f276abf947b7c5c478f1aa8b57e5be93',\n", - " 'e27aa8bf50c210baebfcf1a4a0ebdf5ad8550a6c',\n", - " '053e888fe61b192854e848f8b285114f53e08f9d',\n", - " 'f0d74cfd93ccc894699e3280b90649c4c12acbb6',\n", - " 'cf83d342459ce871e2a8562a91b7dca946e3201a',\n", - " 'e1c7994f71cd740d9ba008e9b1e059f5a48b2f1d',\n", - " '981fc06c9b9c898ea2ee67dc9f5e50812d3b9dd5',\n", - " '520177dbc2569bf8fe888556339730c36a9a032d',\n", - " '430992ca45c2d35f71632c45eb0148e5d8ec98ee',\n", - " 'b8f0c7b1667846ffc08b7d25059fa03f2dbe9fea',\n", - " 'dff8e5c69a2f08f0be4ada9c6425a9d497af1a0d',\n", - " '9619c84999c07907f752a66972f4fb7c7cc90b9f',\n", - " '300849a183ef001c215bb8714e4a342f287cfae6',\n", - " 'ae754eccc7c0f901e36de39d1ec6a5b2276d77e8',\n", - " '0304544e56e0f3d6f2b3f31de00a5e0391451c5a',\n", - " '65241fa7829a9c0b6d240758450d488ff9282292',\n", - " 'a7f41c1930d978fae5a811cf466b248933ce7eed',\n", - " '265d0e347e08d19ab62ffe4eadd0333eaad6e57c',\n", - " '5d472b25f0c26ad591f2d2aba2c63336655d0fd5',\n", - " 'a31f5bbe18de23903983309058edf0f0cd40067c',\n", - " '7d41ff193e60031975b2148f7aea0cae4e775a32',\n", - " '4e2fd6d44bc38e54519e93ae1e0dae5f0d4dd2af',\n", - " 'a897ce1a7ba5b7a4b692d4cec5fe9320d9823426',\n", - " '7c4aeecfb6cdabaa077f4c297b63055b3c126efa',\n", - " '2b7426852e5b2b60f54be6d411594bed9a1523cc',\n", - " 'd945bcb7a7e88c8cd51176a2a59c382984fca80a',\n", - " '581b732ea20c73c52eac7d87bdb7e95680712087',\n", - " '9387a91daabb3b76d3b5a4f3ff2114cd28ccc134',\n", - " 'acbfefce3b879863362adae158aa571f3712c598',\n", - " 'd89863e151c4d28d0d9a023ebe3fa7d523d9878c',\n", - " '57649e30cd6b9e6100237cf0f4e65663f6ce0a1a',\n", - " '45592156397a2a76e03b9938395d95e9f304aa66',\n", - " '6a2f95774cfe85e893e090852b1695e6be7aa903',\n", - " '3136e7750d99a57bc6e672e8dd9d3a424b5ab72f',\n", - " 'f0e35fca40ef2365b67b9a8635844f9e10efe97a',\n", - " '5154d39394e4c1b9a26b757e200631bfbef8a6e4',\n", - " '5cf7f63ff777c6248752a8273509a3a5cf4bd0fe',\n", - " '03dc495034e66db95ddf47821bed0d6c72115f69',\n", - " 'e0719cedc76796a83a94c4646d2220eef2f324f1',\n", - " 'a0f0e60ed3a20b97b570c0bd8439c0c3fe2afc5e',\n", - " '6bffa7ff4a81f779bd1df918c841e3be082f3832',\n", - " '9880f152ad8e27db059b44e4f42e6ac7503273ff',\n", - " '8480aae3d889da2b8709fe395573ee4e01b37cd3',\n", - " '44d3e6498035638f2e1c0580332b67e0d71af45c',\n", - " 'd6162ed770cd29f64b7c66984b1abe3d19b0ae8b',\n", - " 'aa6a5862cb2ae9fb8996f35a692192559b9083e1',\n", - " 'c626cf9d2a9494cff38780081d5e610c04458030',\n", - " '594d6458ecbd19fbb0657314bb5c742606ef57b9',\n", - " 'ac30d1b073ae1b203720789b06ee10cdbc8b01a4',\n", - " 'b0dd19fdd1694030dece5f2b4ae57647719f1f32',\n", - " 'a7d9728d8b3b1aab5736f847481b1beca0527978',\n", - " '7b597ae3a1174d205a681f509cabd1bb16dc4470',\n", - " 'f6ee74f5aaf7c73366438cfd80cac1f5f002136a',\n", - " '0d0f78f8eec517fcb848d1b2927ab085e3051a12',\n", - " '279a7c7945f827add2fe1708b57a5b94ab1b4ce5',\n", - " 'd717858075bc455d81689ba5a172998f54fd1afc',\n", - " 'd9d352251c41666d150d418ac649339236a2a880',\n", - " '40780cb81ee170d442aa8610e04abe18b3627690',\n", - " 'efc59df8977d58b04e20dca9a80b0efadcb7e7a4',\n", - " '1eb1df9384cda7a23035dfbbb75b59c70f2acb10',\n", - " '8ff4fd2f620465f1148bc39e03f12a1a374e8e7a',\n", - " '99bd2ea0f5bf79bd3d9d42a6d8e4f3e7f0ed196d',\n", - " '0a627f83f0bc9a5e2e86a6c5369613aa6d5d5a37',\n", - " '5b05aa19b1eab4aa99b1c000c4dc93229825827a',\n", - " 'a2758e0417361fed0ccc0e73162c7a015cba95d9',\n", - " 'a8f437d220fbc3fec16620f5abbc302f636c157c',\n", - " '2b41113b2dbf2a7d0284634067a4439d5ad86149',\n", - " 'b46889a940e2cbc00e6a3d0c876f1610c7a4e9f8',\n", - " '28ad926af5db8a365887b217e296bae137adc2f0',\n", - " '3bf8d9b00a0f5d4bb33502013e11a871ee7831ce',\n", - " '8875d9afd4acbb01e43908b23170424a34cccce3',\n", - " '6bc51a12a597014dad63be136e1ac7fed42795a6',\n", - " '675955e11136d4f1bc80bb10b0d5d7fd8481c2b7',\n", - " '280b4693e2be357f0f383f8938f4de59f175fc8f',\n", - " 'a5017e2700a5db44bffbfc6a6a0424b3f9baec94',\n", - " '17a7ea777cb261130668d4314b1591f3767cd090',\n", - " '5220cf8c8aff21bddbc4aaf7d13f686ed15ea923',\n", - " '2eeb20499aff71bbcb7cea59dc0421e24ce2b542',\n", - " 'd26dae18a47ee499c4aaca4a9b6017f1b5b1da13',\n", - " 'c91bbc99daa5591754e85676a57e52eb7ceecb3d',\n", - " '5716316e7bddb297ca49a4068b748baa2111ece2',\n", - " 'a9e33ba027cf99ed00c76f65da11e7f75591d7a1',\n", - " 'b75dbf2ac4dd0c710f9f585d01d80f4f063290c8',\n", - " '3ae0ad0cc6cdbac49d92314f61ad47644f4f0b1c',\n", - " '8a3d76e1d7452ce38ae70fe900a9952be4305c63',\n", - " '4d44e61d966ed5a2c8b70a95eb9948aa2a10696f',\n", - " '8fe6d702cefd9a70d887d90b88c035a7117fd233',\n", - " '74ae0f1205f070c3f85cc54a93eb007c14426db5',\n", - " 'e4dd94bf641b1b47e925b9bea840765b2fb6a486',\n", - " '57cb5bef55820aba3afa0bdb01f6316a31592223',\n", - " '570f94ab13ae21cfa3f2891ca3c95696f339e29a',\n", - " '7a9ba4a245c064870b2485acca1e4b2490dc2cb8',\n", - " '1edfda79c48c5f87047c79acecfc5ce6dcf72f15',\n", - " '77f48ece4c9621db11be6346740a30737db94dbc',\n", - " 'eefa352f50c1c75de6f6ebc38d0700e12af5aa43',\n", - " '72885cf64f58f7d0b915d8bdbc84ad106c7bb7f9',\n", - " 'dd09df704c0634edecee7be546b214d32863100d',\n", - " '47cf7d498b48d83ee04fbb070ea3bebcbafab235',\n", - " 'be2705daeceab5fe78a9c1f05e68bd5396d99e28',\n", - " '0a129915c2523475a232e87eaffd5f4591a26cef',\n", - " 'e10c52bcb5c30a05f20a8d7ad2d968e23bd293f6',\n", - " '3a9211d947ace4e78c63b93b07c5719c6d0c72ff',\n", - " '8e0f647639b930770cd566177d2779c9cb4bd675',\n", - " '97352e496bee9ac1dca5fb27ca2c53ced526466d',\n", - " '146b30b8d9b8e66e23dc85e37f3581f07df75ab6',\n", - " '57f207c1a3a861e31138f515df4debbeb36118ff',\n", - " '64ae4a1db60e066701aa444bc0af2f8f3dbcda3f',\n", - " '5151ea995586714e273c8cf6080b9fc3df6a1d4e',\n", - " '22dd85f572068dc01b86986e9a89115376f93868',\n", - " 'e72f60b96a44fcd206cb19967eaef463823edf54',\n", - " '04fab323e721cfa7b3286d770643cd43aaa75bab',\n", - " 'cdb052aea204bf1b2b27d6173a33b078b3f96cc6',\n", - " '34260d5991f9ab10465242683c8c4f6547b98b11',\n", - " 'b0b31bf7d92fc2d9983c5c294906055c7b9337e6',\n", - " 'c7dbdd2364695a506d3cb8ed75bba5676fc15b3c',\n", - " '3c395fa5ae6362b3bc701f24b0f9883910e8eaaa',\n", - " '8d1d795644c5f367714dee6c15ecba05faa90432',\n", - " '58b628edbb4143b9449ced2e4bbf04c8e82f57be',\n", - " '6655e50489f86445a0503222964097eb304affc7',\n", - " 'fe53de5d42d11c5e8a41e1115c688dd3ad94b1d6',\n", - " 'b7225bbc7e6ee05622ae49ab70a1ec950a38227a',\n", - " 'e543c0e24d7a797bdf5057e547f19411e85d371d',\n", - " '9726536a9aee5758f32e6a98dcca57a38b5132b6',\n", - " 'e51f2365996b075dac531466f8a3af0b691cd87a',\n", - " '5b34593fe7fcba47da64d24aacf23d82f073b163',\n", - " 'edaa3d0b3f8d2a075651ee6020dd245143c68e51',\n", - " '6104471d3b37803f446e4fafb4dfca55ee8b7316',\n", - " '802962e63d1a848d9685b805948400bd3dd08333',\n", - " 'bd59b35733186f0370bf305fdf58ffdfeb43c959',\n", - " '6fda7bc06ff349d1e049ecea094a77c1bc78da8f',\n", - " '49408285b43943190e471bac260cfc6624298b13',\n", - " '18e882d7a1c472f3ca6bca18371e35d89730d6d6',\n", - " '6e05af50befddfbfc2701384cd09e5ff7990c789',\n", - " 'ffe7344b2550c475de286de0f34da337b1af1851',\n", - " 'e98dd6487de32ff7de3da294cb17c1eb454d9a01',\n", - " 'c04b1684c8158dd99ddfdd3cf949b350a8607046',\n", - " '55fcdd0eded790f2b2d53f6336e61b3d96b25454',\n", - " '30c8e9d91439822ad04f2b1f0050d1c06655d237',\n", - " 'd4b155906d1868be6b085a5fb7ef806132a2955d',\n", - " '5975a135afd10ccb98e6a155d1537a412c5eb165',\n", - " '6a83c1700f14a8184a870f4aeb9ab2fcfdf2bb1b',\n", - " '1852a275a853f02fbc680633a2a3703265e1282e',\n", - " 'f96de58921a49657b6de98e3d6c6c52a31adb8e4',\n", - " 'a33ca63d7da2ec5eee74800480e7101ac4f1362b',\n", - " '7b37701ba1916986c0d63c074df278f9ea9117cb',\n", - " '958ac9a59f5323aca47712b84c9f1eff3d9da1f0',\n", - " '00f7e3503795ef0fd7934458523c9fd3f26f99ce',\n", - " '698113d5fa149ed9db63d99ca2d03049f740bbf2',\n", - " 'df11b9d801fd4e8001307a6ae33870e74398ee07',\n", - " 'b121995ab164864edf4a8b00489e9f14c45e5813',\n", - " '4d4e055781341a48fcb8ce49c5938f3cee005202',\n", - " '081970bf04b7b80aa7bdc6eff74a265bfe63c651',\n", - " '97d254878e2be3799a41221173440f7fdd354f73',\n", - " '780b4afa803d77de90894ef7a16bb28a174d6746',\n", - " '11b075c8da8695f85b83084b3a5ffa8ffc231188',\n", - " 'da654a30f38d957e63c32fee7163ac93578beff4',\n", - " 'cfb911041ecfe5118e123345a04d75c9d600bb33',\n", - " '0ae5ac1aba45e36fbaf47fde4936b6666b7d3169',\n", - " '229c2851bd5681ad149595e06b3d5e0d15f67215',\n", - " 'd52284273371a460c97ea6ed529b06b67b26b847',\n", - " '614253f4c9ef9a57caae2ad93166b5bb8e5a4fdc',\n", - " '2d50b0e67a9e8d2878e77556664ac41754943613',\n", - " '48854d0d2f52e4433f6e2a25ea06935d922aba60',\n", - " '3f2fba821a71dc1cd849122318840112f4b65b5d',\n", - " 'b9a9a2189ef882bba470f27049dda27ec9698da2',\n", - " '51117a8b237a0083204be7cbf291492e353a9e4d',\n", - " '38959f537b253bf338ef00120d66589ce551612b',\n", - " 'fdb028834913e99f889f1ccd02a43e8dd06a9f29',\n", - " '52105467154e5019bd316cd12c5bc680d5b0b419',\n", - " '01ffc80fa0e31acc8cfd6f0680f09fdfd137567f',\n", - " 'e0d0005dce2cc3adc9e7cd3eb6d735b0d07712cc',\n", - " 'e8e2fdb43a15cf44be9dfc0148c9ce2a9046facd',\n", - " '39b7760f90cec6fb40b0a8edec7ae0aa18ef1660',\n", - " '3726a45c9798bee30c05a8e1076f1dafe9064a89',\n", - " 'ca1819f5dcae65269e392b2aa11b9a0a3df2f348',\n", - " 'c7f418e3387037ee5c5e3e279ef2ef0f0889a826',\n", - " '503477395f5014ffdecd3428f6326d869c6a44f2',\n", - " 'fed272c0de95da5b2e7922b04e56f1418b5f9d79',\n", - " 'a8660f27dcfd94bd0b010c0ca82293cd26b8da08',\n", - " 'b349e9941ab16681e6599b8c70711d9f4ac80357',\n", - " '4a2a905a0307cffeb5fa6cb601fa78b40d2e85f0',\n", - " 'de8b13a0a8c9b65639f6950a234cac6b163cb9e1',\n", - " '1dfa80d27ca1dd09e2802d9123b476d97f9970ed',\n", - " '41ce41a5b5c8a22138e7e23d108d0268ff0914af',\n", - " '685536a3b0da3b98e38684ba626377d48b69185f',\n", - " '35181e65bad44ad85f0c7d2fe337f0a940a5b294',\n", - " 'c07359270dda0c08dae5c81d54c13c35aff2d284',\n", - " '8ac58b03233256de16ab4ded2f487d7ae02a6dee',\n", - " '769305b8afafdfefef5a212518f023a06e4c30af',\n", - " '092dffffc0e6f064ead554ae1be68a8d8e5af0b0',\n", - " 'f69318c181d02b71b5d19de4e6548b25546fca11',\n", - " '323266290f616de2372f890d39e5cf64e4c2fe3c',\n", - " '62ce0161309f9507b800c4f7c4b8ea3a26e99a62',\n", - " '1055c90f70a378e97e23e5d68e20a016d248c3ef',\n", - " '6c646b341f8eb6c625e7ab941be280577358e7bc',\n", - " 'fb4b6e8ac96afcb71b325d84ecda71fa90215db2',\n", - " '88d119b63d5b29db0db6129621cd86254586314d',\n", - " '3580bacc6ca0f02842dedb898871778b4b264c9a',\n", - " 'cdf5d6552318de6f53f8b8ea2c105cff7204273b',\n", - " '4f8cb9bd473b5a7ec50f4aa133bba32e00ee5dcb',\n", - " 'e649420577596b19d15945c38921b47449520d9e',\n", - " '0ddf52128cfb8216b8380f796a4b20eabfada907',\n", - " '06d79ebeba7d9b02486b56ada761790b275995eb',\n", - " '6b5c99456b9a66295cec2548b6ff8dec60aac3ab',\n", - " 'fdf9a83f958b334a27c34049f7cdaa6ee810bc6f',\n", - " 'eea83cedaff4c8b4f4bcb2cf2884a98bef7c4927',\n", - " '05674528a441ebd76cff23fe367a4b4ded59598a',\n", - " '7475b5519a353cf4e178183474487d120d14e2a0',\n", - " '37572c3c0e943e8f8152866d4c64658de4ba7098',\n", - " '7df765c8012cbc234f3fbdfafe3da46ad35713e2',\n", - " 'e4f776e1d2519aadf507c2248ff576cb9d56e485',\n", - " 'd6a3f60255820093ceb363e633e4317481dff09c',\n", - " 'b8271f4a289e47aa331b8cb862d32c3b26cdb481',\n", - " '6c2478c824124ec8060a58be8175b2bc6f4ce7b1',\n", - " '344f734757ea601c58fe120496b63b05c4e54a60',\n", - " 'c3374a6e07b06744edf60810da77bf0f37a7bb2d',\n", - " '8d8870fc7432172fb87ac171dd2c76c5cb33c153',\n", - " 'd83f01f95f8f3211aa376eaed2ccb62505a9d40c',\n", - " '3a2fac018482564c1297c40cafd837edf7e63d58',\n", - " 'f97b2d0145376ecb55beefd8d8236976ae8680e4',\n", - " '23ef1c387d1311b2adc41fab2c579d85a235068b',\n", - " 'd4ac97b6f754174249174e16690d184514ef40b5',\n", - " '829505a0e826b4730838b84a7d7df04c600aff09',\n", - " 'bf5d76fc2bb97b786e479a586dde10c5f6f59fee',\n", - " 'deae4afecf0f0bb09e4b2d5682704f86f8d6a804',\n", - " '50b0b413420783808336e321adcbca4695061e1e',\n", - " '0e39e47d3b61cf4d46d3f30afa3dbc0beef96a18',\n", - " '996621bee63e938aaa88817a1f473b4fe390bafc',\n", - " '44cdb5e62551168b73ec9b3ce528f050d8e69f9b',\n", - " '83123635bd1677f2241841f9c358042c9ae7601d',\n", - " '182bdde37d54dbdb6deb4e1472e96aeac604bc66',\n", - " '7eaac94996e7697a2441f8dd1dac63688af14bd8',\n", - " '6e9ab71ab6eb6ebf53615e6fa6d2587384799efc',\n", - " '3b00ef70090fa79b40820fc50e39e57b8ee693e5',\n", - " '2d1d35dfb0a618e5f8e16259fdf0ec2813f7abb7',\n", - " 'aef83bb62dfede54cb27a31fe418d3895198e821',\n", - " 'fc15286b04e4537bc62d7506d93e5bd5940b25d4',\n", - " 'cd625da5a4f18ba4912ce7c6a50340b364c2c7f1',\n", - " '74c2ae83eb05e7e04b0fae8fb17717a1a123214b',\n", - " 'b2fd9ca9de3f6a8b79571b5ebd812f19d5788187',\n", - " '75e13e4704ed2b691c076b679b90d29c3fd45b8b',\n", - " '67b9b31224d6b45774635420c8c2fe73479950b4',\n", - " 'a346e097029ca5c3b9484450e550358739657401',\n", - " '7e09f213f40c5ca3f0b0697534bcb11d94c39688',\n", - " '97670821a79cb366a760c5f85924d94ec5bf44e9',\n", - " 'f874f1912d057d06afbd45cb3e2f39042d14846b',\n", - " '972802ba3cd65400a01de3f391f6451b95c52f9d',\n", - " '3ef6ba65aa09266e122deda2ba70d346662ba44b',\n", - " 'a381656246a43eb024772851b78acdf7a3f976e3',\n", - " 'bb199f3a979e2fd7f9cdb985f0d9d746fee38539',\n", - " '2c4c52193ec3a8d6ffd65a4ca1c3a2edd5f222c7',\n", - " 'ecfc7447917718b0dd0cd885eb187a6cf5b2ea44',\n", - " '0df9081347e414e7828a1b4b2ebe7557e98daae7',\n", - " 'f75021e8720184c678d1ab95ce4339437503b994',\n", - " 'fec01e53f1c622b11ce8b842010ee33f097fd300',\n", - " '75628d96a699878a144a4077ffceba1ce7c8af85',\n", - " '01c2314028766d6d49bdf75ff3a195a9892abfd7',\n", - " 'ec7f0ce6515ff71558304a4682f23e9c6bec2286',\n", - " '84e34c104559a285bf5b603cc14a1c9dfb2d3764',\n", - " 'ced5146efe0c6b5872b47b2c3c2492f6b56f087e',\n", - " 'b9b7c55b5f887815349279c7decad2eac69c0f96',\n", - " '8023f34009196894ed0824a3bd9a7f3f34a6fba4',\n", - " 'eeb01dc0b2c30ab1e39c911b022d29f809166926',\n", - " '62df54cecc4284f41f807753dce9ce58dd8edb8f',\n", - " 'be1b93462a8362c840feb9697c9ff3c78400a78d',\n", - " '253f2ace6afbb5d4ce03c03cf6fb6f801a448bd0',\n", - " '0b419c0a7a6d4bad388c87ebe31c8e70c550805d',\n", - " '171c07da9d21552b82e4a7e6de572212639ce128',\n", - " 'f12301301b1934bef244b243a2c3ae9b9d4bd8c8',\n", - " '52902f2748073b1a2c9b93884071a70aa6089c62',\n", - " 'cd68d188276db65d45fa2255d2975599de793463',\n", - " '670b3325b03c4fac2e4e7828f6fddaec49cd1b03',\n", - " 'bf305b616b56322c18929f5ffa81acb56e37eca2',\n", - " '5609d53603bee1ebb39188ab0b52659e7097a405',\n", - " 'e7baa552bbb38a032a12d227dfebe5a401cc867d',\n", - " '6eba9b0aed2683844469da941f92a9a2857f164a',\n", - " 'e9f7b8052b53839ddff821707ab00b559b48b9a6',\n", - " 'bdfae3d674251881629e867e5fae093e5ca4b1ff',\n", - " '9be6663a43810e22dca07a332e48c2ac9d589a1e',\n", - " 'df880125aaa6b7ccf5d58a8b67dcb58130c5d969',\n", - " 'fcdb09be96115e23cede9e9c40ca575e56f5d2aa',\n", - " '0cbfb4d0936054bddd5b1b2177e93a9dce5bd6de',\n", - " 'dc4073024241ad07f7915a75b944260b5116e04b',\n", - " '9b550ef1a6c6e43175799605fb08652f4977ada3',\n", - " 'b96d0556cebc13eedf1b6993b5ee1caaf86f54d9',\n", - " 'd0de8424b74289e747d4d322dd975fe1e1fb0357',\n", - " 'a0cc7cc65d4a9e0e0ba2f82ca13d2627b3550bbf',\n", - " 'd5edee4ec64a68a2c2e15108a7fd744d906a31fa',\n", - " 'e6059d89959f5d0ba50f0054315c25e11eb64361',\n", - " '670e01f166c7cffa871a8b8a45d7f44a21b1d20a',\n", - " '1eaccfc54c4f0b6c9a5b621a9adba6045072b5ad',\n", - " '0fd72f5614b023962a7b9e20214bb8694eba539d',\n", - " '7e5ed916499f423e447ee39eec65d9be4e80425f',\n", - " 'fc76d270897418e3db364be85633ce73f8ffad8d',\n", - " 'f3f3de3476e3620de589574e2ffd8b1d1b0fb69f',\n", - " '64a8354015e789d1da48b6f6bcb4a42184895c90',\n", - " '1a945ee58a75730d6836f84545fa849a4951cbeb',\n", - " 'd60150cb49f6f5af1fd8f0c95fac2315f356d91f',\n", - " 'cb7dd843d1f8c60fc9444afad35823797602713d',\n", - " '1b17684faec231cbd16924906f4047ed4aa0644c',\n", - " '7c5a05ac4356e646e48a338f5f8c0ec99b6512f3',\n", - " 'c712b362bdda36a28c935e8b32b7ea3f5a38c87a',\n", - " 'a9d1576072f655a0b654c70ff14bb2a7fa7c2ba5',\n", - " '0be38617b8a73a922136c5680a2dd1f1a3f404e5',\n", - " '2e9474578f7682cf897a5653951f5ba25fbbc5a8',\n", - " 'b0e38e9156f0d0c826753dd5898ac506652d94fa',\n", - " 'd8f52c860ec2f226fcd95bb54d2f0574bda25bee',\n", - " '5f0cde8f34c1a618523d8e9994d2555647a262ac',\n", - " '2ca90a4453ef7bf427c978a0d628c61ea35129a5',\n", - " 'e28042d799720332562cc0e12d70b080c84dc8cb',\n", - " '7cc65ad2d0f4829bf1e4d40d07ab40cc0d7d8555',\n", - " '0066e790f51f2aeee04283fedc25869c4071e045',\n", - " 'd71dea37e3afbf83aa22f9cf1b6f30ff91a2f597',\n", - " '76b7436b9685c26e754c4836876c315ca21dd17b',\n", - " 'bfb3ae84c586996a71a11d2c9190c0162b057c5a',\n", - " '331cbfc38d7467ea5ee2794df6848424055230bd',\n", - " '993196395b1289c795888f369a94095537b9d4e6',\n", - " '3d070a4c2be8be8e0c64792fb94f782de3d0e719',\n", - " '211c2a5dc3730141ca4c8d7021c7827332b544f2',\n", - " 'edbf0e0efaf5b3d28105f1db7c10c6f67ee20744',\n", - " '8278fe4f4177e1a83e58ad558292e5a2a9b8fbc1',\n", - " '619d33d89dd99c13391635cd289b6b4883b85bc2',\n", - " 'c2ba794fc337b59e570e0c46be2cc9b2a2e9010a',\n", - " '3f502bbed390ff6df530445509b643af36b651f4',\n", - " '2e55461be4bcdb649b62760fca83ffccb0703bb6',\n", - " '5005e3e9b530ffecd1041394a2b566249c761e26',\n", - " 'c3aa825509baa13ac21f86083db2516d132a59fb',\n", - " '68690e60afe342d189b1a10eb0ea7848e889805a',\n", - " 'e6406808b98c48cc772baaf4cdf9d66a73697aa3',\n", - " 'bc2193dedb5131f0440e6428f32a7fd096815fb9',\n", - " '546e4994066ecaa63e777e3924c24de85cbd48c8',\n", - " 'ab00b2d2caa64641b6f6cc75be15584d4565985f',\n", - " '930d3ceea5807cccd238832033dbe3ada82a1fb5',\n", - " '837a85c677fb9cebe78281177fbac38b9367e9a4',\n", - " 'c380153c08f5194ea48e087c6e2812f993395773',\n", - " '221faa74f127224d99f7ac2782c000a07d4c585d',\n", - " '12cceb0ccc38e7f391a970c4ba61c283a1b2bad2',\n", - " '8b3b56e30bb06ede6275c7e389978726e27b9db8',\n", - " 'b26187733f8ed90dc8311048808b0fc2d9e602a0',\n", - " 'b19df3748e1bc12ab2811038463532a6ca8329a2',\n", - " '2ece8e60d97079bd7f3e41053fa2e4a7fc23a07d',\n", - " 'ec7eb49a79e5b0c3cae338aec998b8e25fd07928',\n", - " '4df12780ca0436c81e1d2db0906617a827fc0795',\n", - " '4a325c82c9c9a20604ef70a2ad33637f69133326',\n", - " 'c978f7186409e1dc243a7815a862753a4e593d81',\n", - " 'eaa9326f3acb9be9e73f0796d59c0fae680b4588',\n", - " '32c484a530db860c3687dae3dc2e0b190bfc68c5',\n", - " 'f942d5fbed593bd3916d283789cd7a815e4bcd01',\n", - " '650bf2d4386174a120a5754a541d19e17e566ad0',\n", - " 'd7f1dca7bce3bbaa0b27a02d36dfd597a0d0b646',\n", - " 'c6bdc64e03dff6f979c2ab914ad793b5f1cd5b33',\n", - " '7c3675ddd9dac75eaf67539c0ca48482214ac5c7',\n", - " '76ba3a9b7593ed4346633728bd7902d5a263eb92',\n", - " '5313c7de1ebeae424bddaa5719f578acaee9b012',\n", - " 'd0d172faaf7d39cc70760b76ef0b7ffffeb28b64',\n", - " 'ba12c41e23cfd818e478990b30f94504081c5b36',\n", - " '6b7f8124b4edec3c716fc8b7ef0fc70dd43a7e78',\n", - " '03c83f26f95bbdd77abac4eb1fd860bc6837ff78',\n", - " '899336f477c540c41114c2376df931deecbfb009',\n", - " 'ebf4327ffb865464f2a8eb90c7ad1153b48ee512',\n", - " '40944b972b1db2289be9fcd9ab7177f995c4cf4d',\n", - " 'd22e40e4d5ad6603a239493e6cc78601250ed2dd',\n", - " '59d4b1d3444a5c0b8d2d3ca6956729bd69098720',\n", - " '34da1bb9bdfcec7cff3a33474bd0c9a983127be0',\n", - " '1dbb4213005cab17d5e17e4f345be4fd8a6d132c',\n", - " 'ca20eb750d4d8029f4c9348e3d512b8cb5493fc5',\n", - " 'cc016e04df59f653bc7a09fd92baf08d0e29a95a',\n", - " 'b38cc6dc38edb08d721f337a09a6bcfcfaba148e',\n", - " 'c177e498088a8d1f4a4a0971caec01311e77f607',\n", - " 'eed1532cd6272b2e3bc913566a9e11a0f2f98c22',\n", - " 'bf3c09a49074fc9884e422bffbcecc1330b6aa57',\n", - " '6bbf75849c3c530bdec9d234249768c053c8faae',\n", - " '53cdf376e0fb0f1c3e44e3fa4ac50b86c068ebef',\n", - " '771ee32aa7b4224a086c536e5d26df16de157352',\n", - " '71f65e92308a485a5b14c67834194ab415356baa',\n", - " '1b00089faaa14baf2765794f567a9b83dc2d1a93',\n", - " '821f6ea1723966632c3b53cac3e4854dcb021a64',\n", - " '1e8f7a901c17e252bf554edb3f76cd0044b02481',\n", - " 'cd6c5b99f8cff8ed0d4ccf0350e57e4bcf711148',\n", - " '849c3747c24acbd77d45f11ae7c16ffcfe09c0fa',\n", - " '710b8c9c7c4d00a406a2d4add2b7537314b9d9ae',\n", - " '0e74377bba7ca9587ac6a21604708c594a6c7160',\n", - " 'cafd39face6d6e61053314f98a598dd297ce6741',\n", - " '64987b229082c227e7cfd7cb42dd248fce90ac8d',\n", - " 'ab70ce7d5ef50e5afa114682fef3816608a4d97d',\n", - " 'cfaa7668b683ee9d3be75814762c82de33fd3f53',\n", - " '8ca6a9fea2f176845c0e654670ab95105a30ab1d',\n", - " '1e78b84f637a2032210f638c1e0242821f6d2510',\n", - " 'd1aa478ea6e71d0da8553c28c18d60c5595fbf1c',\n", - " 'b94c255a66149311c974e79304ecc8172b34d043',\n", - " '6b9f63c4bbec075f569e6296e653df58ccd8a8b6',\n", - " 'bd21faffe0730cbec3538febc21199faa0fea819',\n", - " '31aae312f58abd3532e53d3e55ae3e23e0a85da1',\n", - " 'bf27dd7c5e57e228fe0a652b5ea3dabc2d63dc2b',\n", - " '45673acde69708d1e59d44d867362095deed66ec',\n", - " '4b8d1aa6d9b9b88acf3ab7e31475fad007b2d5c1',\n", - " 'ba6833792f7041f1878919d703a3005b35beb402',\n", - " '578b27aeb63ce9c6a728085432f5f86e8f400dd6',\n", - " '08a17a4aad811ae8a09fc9e1356909cd3632bc60',\n", - " 'd16953d9ba08f1f5b82ead9b0feefa7e3d676aa0',\n", - " '622f667f927459f62ffb94a8676e8bb7bfe8f201',\n", - " 'd6794dcaf536c81824aef82450e45147f5f65faa',\n", - " 'cd22a4977467b9b1f1e438a68b302707e5520eb6',\n", - " '654d299660befaaa77c51b59a5a7e66df2e24271',\n", - " 'a99b9e5bb3d232d35269663e379e88ab5069b365',\n", - " '711a433e24cfafe69c19b0692c68372cea2e56f9',\n", - " 'a3421a35a2ff2b986a41ff96bfa47f1e81fe78da',\n", - " 'a8a1717a486481ab22cb9fe0d2261a82b4545d23',\n", - " 'f8381198ef27f17067331bb539cedad65c7e6013',\n", - " 'c02861f916ee74dafa4ec36cbd8d7832398d961f',\n", - " 'bab39a1d4fd29deae96bea496e03f460a4569fa5',\n", - " '5c88c4e58db4bc2b5912992d678a837b6a233802',\n", - " '68d8878a6c8683becabc1dce2f845ef99294bc58',\n", - " '74106a9d9d8ab673c2ea65a9b9d615ee714fc6fb',\n", - " '057c9cf02250db98d8932eae11fd2e543fc40fe7',\n", - " 'd9a526814ccfb51e42314d81d11619771b56664d',\n", - " 'f6436ccdc7aca1c475f73bda24efc034e6fce953',\n", - " '523d4df90c272c318f17d4dffb968baec3f2fd9a',\n", - " 'd160d5748757edfa7a288d8ac9e684f92b898a1d',\n", - " '2c0a04523fe31c7fa837d89e6c7e86a9e1be1c10',\n", - " '8c039e12d98ce0828b40af813540303e11910939',\n", - " '6c5dad5ff04269645de18f81306b5d9d8783d176',\n", - " 'e24d848c0d60750bb4dd94b8b752f089194ddf3c',\n", - " 'a2b335d7ae29204f62c76d6a3d15199e9f75b680',\n", - " '82a4b883e2c52065dd231956c7a24e2b385da60f',\n", - " '1cffbb780f2f2b53c4ed30355307d71bd2e2818b',\n", - " 'dc852c42f4e371f8014528d667f5aee756f814d0',\n", - " '32b02edc8ec27ee12e0715dc946988314e17b18b',\n", - " '2a27eb8bfed4a05ac7e83cbb96bccbf3870b683c',\n", - " '9d81e52e1868f4f009c7a9805535dab0c653c7d3',\n", - " 'd24ff88c81c5ba16122713da2b2f6d972c696192',\n", - " 'c94f75e0012aa436a685a19af61596c42de58131',\n", - " 'f659c67118adc160eb483c177f0b170403385ca6',\n", - " '454d1644b71cffd4166766aea6c519ef67f03d24',\n", - " 'bdb9e03f5ba8f496a018f44f1fe06908d842c65a',\n", - " '7bc8dca00c31c01c9f9b4aa2fca2969536565b11',\n", - " '10c93f052cc6b8f7ab2aa29ec5b9682787403157',\n", - " 'd37788a1c65a5fac998202ab0981f0b37737701c',\n", - " 'c12e20a3868a6b9d36d75660d597bcaf5f6682ba',\n", - " '7111de3b311315e9e91f0e9f7d4066796e2eda11',\n", - " '6a2cd8dcc2ce2ea5919edee4e294e38ea4a614f6',\n", - " '331f7d55dc795f1d6732695de8b0bd19f5b0423f',\n", - " '63096a2f2cb9986c66ffbe18fcdb7cab81312c94',\n", - " '04cfdcedbee2b799f7a9ad7255ef3d3606ff217a',\n", - " '668a3e4e0ee74d6ed6cdbbe3e08a332ff0887c95',\n", - " 'd6a064a959f7e2d94ca0de09b5f6a5a7b9fca606',\n", - " 'd41b9ed04e0cc086481afe72042bf6e636298d0b',\n", - " '29f05d7374ea13bf74fc9b8e61d519f19c730b72',\n", - " '2eacaace09697f204571264a18e228dbda5d2896',\n", - " '986f79b54ab076b4877b358a49f18d31d9257493',\n", - " 'a98e70ee769f16a62871b3065a3e5508ee36677b',\n", - " '1b557691abb932d2edb394a0db88e63fbb8c4220',\n", - " '6101dce305671a25878075adecbb507bb350aa4b',\n", - " '14b3045384c35fc8d68de44579d0355ef506a08e',\n", - " '2ec2dea64fedcee0a8c6175bcae6bf0a9069eeef',\n", - " '14cd6bdd07c1677923cb5ad477bde42c3c7cecff',\n", - " '4d1f5e684315ea20b79d88eac2f503ebe5897837',\n", - " 'ba1f145de0f04084c7c89972985e41eaf4c834ba',\n", - " '8338c59bec9c59a1d6bf7922cb74f3b9c23e33fb',\n", - " 'ddebaa099f5075915f06bc2e3eeaf799afd74932',\n", - " '2b2d693745d25445db3f8f3ae4030dc38179db1a',\n", - " 'e922a7653e2bfe1c4cef6c919ec378033dd4aa34',\n", - " '5c4c0cdaaaf76a01545c07f2b6c55b6c2af996df',\n", - " '2f0062a062b4a44a7b6bcb3a3a2d7612780c1e92',\n", - " 'ddee7709bcca0049472b72ea492a5a8c6e1e4b7b',\n", - " '3bfb43b00696498acc584225e19401d2ebc1cbf3',\n", - " 'f86a24e381fc69ea054bd027b649c2cabaa974d5',\n", - " 'a38733d61d483d609f7d90efc44348094ff5e1d8',\n", - " '8ccbfc8011a9a6df4b14380ed9a9d6f77fa26b38',\n", - " '433d24fc5217f4312211d6c882109e0f1194067a',\n", - " '14f0dafda66b0a5b1db8cb2499a65d0b68da215c',\n", - " 'e8cd34e6c52c25b4943a5a1384e6a1fe7860e786',\n", - " '25957e11981d68a2512132674fbbc44e1f3909b0',\n", - " '240c188d908252481604cd9e3aa4869051c5f55e',\n", - " 'ce3032a8bfdc4984c7bde7eff37d9829938fae78',\n", - " '1b9b9a78354e5c85a3ced4fd929611456634282f',\n", - " '3813381162c3ddb20f9736c2eb391ffb4a89aa93',\n", - " '10cd43a555c2398db86a792844df0d243150135d',\n", - " '0a3f5e61b9733317db281264269d81c9ad4aaf5f',\n", - " 'fa97873ac3a0a88ecda2ce71d4268724aab05c68',\n", - " 'e85056da44bc3bb5efe31187721f9b80074de17d',\n", - " 'f553e3e7340f99028652c1faca7986fed9e5fb44',\n", - " 'a2758920c7e879494a6c3333a5e846f00188e555',\n", - " '6103cdc76cc27846f21f0e213b262a8c1447caf2',\n", - " 'dcd1da64c5c4e49676cfd49ee00ddd168e4db811',\n", - " '02fc121a50c971f3497a042f090a41af30aaa9a2',\n", - " '0de77a5ae24316755a6ae5a85b5e67cbfcc77fd4',\n", - " '9daf54cc9172d39538790ec0a0ccb38950d0d0aa',\n", - " '8c70564509e08d6c34bf9ae6e9cee8eb8fb0aa4f',\n", - " 'fd9b63bf3cfad10b8506ce10a1b8ff112e7fbe4d',\n", - " 'bc83959fb2c589c27a97171efe8fdb806dd8f912',\n", - " '2a251a6d8262fffa51b322e8c688602cdd69e5c1',\n", - " '637dcd5bc42e2b0bba3370ae32703c2c0bffa4c7',\n", - " '0b200d658737e786901515c80fc01e45f1d0892d',\n", - " '5a0a6ee7f6a0720b2c40ffb77aeb9b65cb746e18',\n", - " '67b9ac979bc2ec93a095066fa2952cb509c7e021',\n", - " '17ce34eb5b7d67dde38a85d4065357a05ebb16ff',\n", - " '5b1ce067914c6e3b1d0e7663100aea888110c575',\n", - " '834e8d60bd6a6c70677adcf7127f7325e6a2758c',\n", - " 'ca4d90fdac70b334c8845d8149b40d9db5ec9264',\n", - " 'd19b3e87be9d8682b655a7baa056dab77b5dabaa',\n", - " '8136cd1ab60e0480c620873342a93dee57c737a2',\n", - " '19655699f72300e80aea8fe80ba485cb134bfa10',\n", - " '644875e6b35d3b8df257d05446b5c14a7b284524',\n", - " '75bce913200d26fd7668201bbe6d3ead21693863',\n", - " '087e6410c89bd1ac2364c1337638041057f3e707',\n", - " '4226a9caae853284b26cc14ef3b8582e732bf2ba',\n", - " '0bad5f842d38601fe714f625d46be941fb27f28c',\n", - " '1e0e068438efc3d17401e802397b1a8177181a4a',\n", - " 'f1ac7182ed21f7b3cd87c6aee6177922b78cbe77',\n", - " '5afb806e4da1764707ab4e920948309bde045925',\n", - " '98cc5d647ea8518a300a8bca7e08fda51d25c88c',\n", - " '0d28a70173c6377f6ec1abd6b80bc0ab030d2a9e',\n", - " '5d897e0e9e3b8902e881ffb5a747c825eb5ed0fb',\n", - " '497afbaa33004e865b6cb372f6a4b0da136a4e07',\n", - " '64bceead0f1c1f39e7c1dd51d93c4ba78f1724eb',\n", - " 'b9dbe75f92862de5c226927abe56404750f83936',\n", - " '9ad9f7e32a30281aef80cac3165876dc56ee9a2c',\n", - " '5e30126bd70edccbb0394334a532d96e42476ff4',\n", - " 'f8e547db9ce45630905dbebef2a77a842005d2a8',\n", - " 'cbf3339ac738edbe5627002178da2982cfdd861f',\n", - " '45b232b4f766bf3df323d9d7fab960796b5e80c6',\n", - " 'f47eb601137e2020f78f603f5df16891d92eb907',\n", - " '043f2154f08c6589e6985d302dc22adae615a481',\n", - " '75b2530a4c53c2fb1723c11a44f552b340ceeb80',\n", - " '43e1c9a50faf0a6117f37bd3714007c69ca980b4',\n", - " '9684f7fa2ec42f39ce6f22d8c260fff15dd52d08',\n", - " '24140b894345f13b6edf787080503ef145695bd4',\n", - " '76e163cc48e5886e9559bd705127bb3e33044d3b',\n", - " 'e55131465d1a1babc0f528286691fd7ed6964b38',\n", - " '9a76e0ea98b89c4f6e5e0a6900179321800fce2c',\n", - " '93f904ea72fcbb14d2cf65dd99fff0095d39590a',\n", - " '8ece5b301a390bc4b7d3174f930b20545502ad41',\n", - " '368f9ddc13687340e0ba340c6c5f32cc49191c3b',\n", - " 'd01d6642253360e8fd3529c9b4f4d4b4f240c86e',\n", - " 'fb8b9ca2ddee2ea8dd0d6a2145008dcff48d08fc',\n", - " '1220e4448414edf9317cfa64fa7723ed9ef9ac11',\n", - " '3266d3c2450fb9e615b446ffe588beaad6e73a89',\n", - " 'c9f0ca242cff8f3f77bf607cd9602b8c5af89efe',\n", - " '00fdd0e7f8080d95bce35e2192e74c6538f641a2',\n", - " 'cabe03d0a84d35a9c5b43e57e7bbc69a3939f2ef',\n", - " '978f33c124793220109e54daf456ba41d3ff65b3',\n", - " '1b5bbfe6ca6f8b511e983990b722c6ab9f23b05f',\n", - " 'bd9d99337ac6f836e7609e8668771db19d1ab2fe',\n", - " 'd34422ccd1e292bd2842ff0131011cd62c138634',\n", - " '524757eb9ba847efbb30d62b334e3e52f7e8352d',\n", - " '42868d3eb9f527f1791eabffe148d738a8f359a0',\n", - " 'ba969abe4a41d9bf07bf870f20fcf9a9c0750f74',\n", - " '009e6759a188566730262cd31de5932cb259de0d',\n", - " '74670f27c5d5c622f2a922535c85944f4941e013',\n", - " '88b266c87a5e88f09218c490a2d449ff500be7ff',\n", - " '5380708193136bf304a2480eeab833a214502dca',\n", - " '4e1680339aac4907a13fa39226e5ab627ae1e81f',\n", - " 'acbba6a8fed1c115044ab2747d0a378f2fa27ec8',\n", - " '480f143ad2faf8765b40f771e168a74a9fcdebc5',\n", - " 'bf69f32f1139868202d1cdcaecf5eae4c8e32ed4',\n", - " 'a7ef2b94a69b486491b4bdb7ed172890e14bf2b0',\n", - " 'f3da53f52529c2d8c9cde018c77823efa183074f',\n", - " 'e06f689aa413efffae998cbaf829a76853bf2937',\n", - " '07f27a367dadcd4de202db8c95a3faa820228257',\n", - " '20cdff5529daf7cd818fdadda4aaeb34201f6a2a',\n", - " '97d3df939965de31431ee24622f9a757c27c0dd1',\n", - " '8534fef94a10182a6d513fd1048ae35a4654bef8',\n", - " '0c0d7fac80839f6a573318ba62c1b3fbed5e913c',\n", - " '9763dcd70575d1faca751f66eef7920ce187a5ca',\n", - " '154e8d0e877a34d3e28795405d980420295c4875',\n", - " 'feb39acc85c88a6974e7880bca005142779288d1',\n", - " 'e131695fa63fc1bf28c14f13eabaa4dc88df09ec',\n", - " '4a23ba485e659235498eb3e0b5e5db15bfb08550',\n", - " 'ed2f034c263ea3ac0291e4039745e72ae2ae8d79',\n", - " 'a5ff2140604b58497018ffa87a8322619874c76a',\n", - " '857da85ddd24ebc30636a9c2c54bf4e3fa575fa0',\n", - " '50233387f6de4202415f9d7bfc374ad50e424398',\n", - " 'afd18997d067fcf995737b6bb991c417454a0d03',\n", - " 'cec17e3509f546596448b302599b15bbc591948a',\n", - " '81b2b4b3fcea863e7cfa213d99ca551054ea5ee5',\n", - " '3f3dd033a4d550653443f10de8b9e71c8a14f046',\n", - " '9270ec4d89940e8d3c70469812dfc03d0c306837',\n", - " '1598c725d681790d5f7a2637918884f6eefae2e6',\n", - " '240b9187c821dcada944cc86eea9d81586345b53',\n", - " '01c5521e7feff6e8424d5dd43f01469739282e02',\n", - " 'f15a0dab02d60f8d5a9514f81041c01666e10241',\n", - " '4463b7c1cae294a1a542c8724e7ddcc26e6778f2',\n", - " '11e9e21aefca90831e7a57007b9b993bebb9ce32',\n", - " '3064d2a747bf1c9d1a67c4bc2a23b985b69b6581',\n", - " '4137ae3b3a970a43911a21b50a03a0c43285e822',\n", - " 'bbdffe5b3d84fa37ddc52ceb6b2ddb6a8b91a1dd',\n", - " '331e2c271829353b0a25b913804735837877309a',\n", - " 'bbb92ab6e050e5b71fa213f2271e51f8dc54dd6b',\n", - " '18c7e30728f3375b326b045e8cfd3df26df82d15',\n", - " 'f5b5b19096770040b0e7afd5f190897e917f1891',\n", - " '96813ce88dc070597d385227d4b85bd424e4105d',\n", - " '27fdfd62322fcca5b9993caaf4bf6e32ee7985c0',\n", - " '4957b13ba1c8537125a5019993b8d761a446458f',\n", - " '721900cf742eb2bf0c2a570794e08d458a174563',\n", - " 'd038336cdbb72d1df75febeced07294d21c47131',\n", - " '2a22a913436ccbdf9cc2b21d173a540fc0ed4148',\n", - " 'd89013897e74078e7e357fb37b23418f28ca2f90',\n", - " '46a9692307a8815c3f1d90bc2c3993e8481e205b',\n", - " '0df9847037279fd59d5b05740198a8616d805917',\n", - " 'cbc61f3cf10e5584d2b4b0d886e6c2adc5c63fbc',\n", - " 'e7ec9d578ed95db55dd378bfd8ca4fc4932cd92a',\n", - " '7adf55366c408ad002d197b74d4cdbba2c941060',\n", - " 'e08c4aeaa86940be7cf43f3c1167e88e7006a614',\n", - " '45c29a6053e6fc917a74580ee3563800793fa713',\n", - " '9f3d9f3471f7761ab727e785968c43c5bb4a98ea',\n", - " 'fd67b87768978ec341fb9f0556268c9fbda53f16',\n", - " 'e677a592beca3b411a1aac07b4d27834a0e73479',\n", - " '5cadfb4091f5d30eaa703b9523270a00b76c3184',\n", - " '5713bb9517d115d35f1a8dfc6abedebb5d7db1a0',\n", - " '1c54403a370461b5fdf5ae41b5553af7b9681d52',\n", - " 'cc8564e10269a70baf5cfaa0a1a7f1bd7c4c177c',\n", - " '0c2c9247850cafc1143db88372116ace2b4085d3',\n", - " '4bff772997c4adb5655c3e978de0b63e441f1aaf',\n", - " '7a7a2d96bf9483b92cba5a2db75370b5b73b0f31',\n", - " 'd2f67cb5688b31d85a47f4f65a751b286f57f635',\n", - " '0f267220a5ffd6a4798188ce3990cc5e58c99dd6',\n", - " '730fc34060f29c214d919ca0af877a1a50640856',\n", - " '74578862b1c9202de8ae89369542b52c1b2e2f25',\n", - " '7cdd4d5ace517921d1dc4b7b5c1719ad0dc87a8e',\n", - " 'b46e51a15ec74b24a1378273dcd966b3215ec496',\n", - " '4c05bd21b1e99e67ee63f3c6c4163e8e2dba6655',\n", - " 'dff3471f505424723a63181f46383844011a976f',\n", - " '728a45bfac797951a84bdfc1da194a44485f849c',\n", - " '5829ec96bfb48f48609724b75a623a0c80a4c103',\n", - " '56118a9b8d2e6eafd1af17466330d00620fa697b',\n", - " '809da106532b5492d94c242e70cac473301018f0',\n", - " 'b4ceb29ea823839da1bc3d04364d3b246ad16c50',\n", - " 'e9ac1ce881184b9f75215b132e0f45c0b5029d7c',\n", - " 'c955de8fc92f54ad9f07048abaa2d62fd3a27d96',\n", - " '7dd53651e7319f103fdc78b3d3cf390d91460513',\n", - " '60b41293768df80930b2b541241925d31346a3cf',\n", - " '34697484e25977e23ff3af21d2ae263100090d1f',\n", - " 'db5835526af62e7e0b1058e03d0a78c2aa363297',\n", - " '74662c0d2aa229d1ac777d2bcf42c7948a1d30f3',\n", - " '76c28c57ab094dc55826728e6a4db1d7c8875801',\n", - " 'e27351a64a19619dd906a8514d98b15973cd2244',\n", - " 'a144fdaf0c1c82ac0fb92fbf13a4a064aadaa029',\n", - " '7dcbf170f757dbedd3167d35f9987dcbabe34de3',\n", - " '6cf1dbf7a9d4c0ea360fe05a2ba5992fd7aeaa93',\n", - " '3561b103a0b6f7ce3685b3c325ed63a6c5c6579b',\n", - " '47b7106e5332c7e7bce347e3f9325e1d914e1d44',\n", - " '2f85827bb9fc1471da55ff260c15ad36c8125721',\n", - " '67cfbbaf4c0d20c7cd408114628f49ece8b80a3b',\n", - " 'e049583872b25a0536284ef006e1e7f11783fa00',\n", - " 'e7b1257ec009ca68b4156ade4e702846d98c3512',\n", - " '296813a46aabf4d2fd61463e174ffb9d6d7cf1d8',\n", - " '91bbfd811fdddd86b69db80f7a3d7badf80e31e0',\n", - " '77043a282b4b0705738c8a22f5eb586ea1e5d114',\n", - " '957d60c5ed14bb2266a1f2291f775ed72a24ac5c',\n", - " '536d88e54e02142ad224c3b0262f8eb1da84e0d9',\n", - " '171cd3cba91726fcc03829f1f23e331941383dba',\n", - " '4868ed304c7f6460d0474bf23e53e874277f3fca',\n", - " '87df382d9a8eb76c09963792e473e0a69c6fc33b',\n", - " 'f30cee2fd33f53498b2a4fac3ce99138d59f56a0',\n", - " 'cb32cd4367162be16f97a5cada741235f876601d',\n", - " '10e22c9d280097554eb21dcc9e63027069a9c841',\n", - " '6050bb960533620c66208aebe9600c58aacd1855',\n", - " '7efbecd7e5dd974917ea50532d07bc224e05857d',\n", - " 'cc3a003dd0176d0636fd789935e59114e53e218b',\n", - " '2386763c03ebd3bab6ac69550e05284d4df0b4ed',\n", - " '63737c07d3a15eca09ff3f6414baf4bdba5aa788',\n", - " 'f2dd7b1d7ef6cae88f4934ed685a2bbdf63870fc',\n", - " '271fd76bb41defb41b56d8e41f3f9e61fc9a08ba',\n", - " 'd7ce33471ea61ce8ba69435062078d88a2d088d2',\n", - " '64109c5cd8f711427d3e9850c9b34cf30d8b3bdf',\n", - " 'b3ceefb4e625eb2e44c2c427ef0f76c3974e3ca1',\n", - " 'f09ecebee85eee7fd5a3f14a9c4dcb796341f8ff',\n", - " '407756d4ba0ece5ecd0139534b9b4c6390ec0244',\n", - " '8df1dc6ff9e80d1b44b8e4b0b7f133c91172cc71',\n", - " '5493aaf7b96c1d1008ea2ad09a7a373da02843dc',\n", - " '97fa2a09cfec62de375f1057bbc3757e0e2dae93',\n", - " 'f59688e88ce057b388b573e7740bf7998496e46c',\n", - " 'd3a698917b691472383393580d4d3673296c82fe',\n", - " '5d002fe83da1430d741eaeb63f4cedc1e16464d8',\n", - " '27f79219fd963f273d662a49e79b03d6197ab51e',\n", - " '175e539ab0f1d8a303ade67fa419492f278556a6',\n", - " '7a66db5fafa87125e0fc95ad5c54e195ad775e47',\n", - " '1aacb2b597bf89ce570e6e0aa26566acdaf2dd37',\n", - " '443ba5ebac72ac93e42fa44459643b24f0c1c45c',\n", - " '9e92883921f7bd5e6fe8c0874f7ef47713826f84',\n", - " '625bf2b455bf6c26275d87bf4f33e59c9005e4e6',\n", - " '0640c1d359f7418db8efe501472a4d400c6da285',\n", - " '0d2dfd147d6604e49b85e92641a8c0e371c6d24e',\n", - " 'c671bc5cf8034a58d975cc9feea83540ed72146b',\n", - " '0fcbe4d4caa802029a5810272548ad3fe1a9ad3a',\n", - " '3dff5482629abc65241949362fff497e941d25c9',\n", - " '57f8888826e286371ccd93738358a36a5e661b24',\n", - " '43baa29cbc84f7185b23e2feafadf86033a9b000',\n", - " '65a089e4cb2033e1c7b9ec0074efc20458aad397',\n", - " '531495b2b82c1f1a8ac7954821fe3b0676c1a254',\n", - " 'b8ee136eb706b7bdc59c582a3b3f5236481c3ad3',\n", - " '60a5adfd53e73e44d1fdd9ed07c890879640b2e6',\n", - " 'cf38246c1290d7e40b1d05912ae8ad4f956bad3c',\n", - " '9d85302bdd73264e8a8b733050c56233c04c6cbb',\n", - " 'a3a2f5671c908a762620931cc175d1c7956a7208',\n", - " '05080e1ba295e44567e888a574cad533341946bf',\n", - " '090bb23487734c8ccba87656d861bcfc6bd8fefd',\n", - " '6068e786d052be5856ed2f8fb13fe92bb8f4a39c',\n", - " '6eccd6eec73be9007498733bc83716f67cb7198f',\n", - " 'fcaea8294fc2ba97d022fe107cd022020f55e819',\n", - " 'ee1ac10cbc051f00ad784a48d3438aaff651659c',\n", - " '60d78d5afb4bf698751c8838286dd43726d2e2fd',\n", - " 'a30b47da99b57bde1e203720e49d2261e3ea7f01',\n", - " '868f835babdb30f380fabf2ad19197f02bd0666b',\n", - " '016186e8e4bfc383165e5059c6211473d28cfa06',\n", - " 'd5964e463dcfccd496c18fbfb8e61de6b9d174b9',\n", - " '8b290aca909e5168346a4ffee966373cb00af179',\n", - " '39bc957abbbca9b1f046edc63e57031e1a1028e0',\n", - " 'b847eb93ca56c292f4f5808c59160853d4e3c4be',\n", - " '1910a876b733198303829e41ec4dd88d519b78c4',\n", - " '76b6fe417c2a90bb55f1117246e28ca06bb95d0a',\n", - " '378fe0b1e4bbf50c28aa6dcb61e8aef1e9165406',\n", - " 'd57153933e4926ffea632deecca2d7d036d8767a',\n", - " '0c9f9680e95fe5f222f644c148eaed82201502ea',\n", - " '05f5ff3866044dee526828db0252dca24b3174ba',\n", - " 'f834efe8713c2dae9a05506f2bf5b482a39dbea9',\n", - " 'f653ac206f747ef5b30e4d0b5b757d698cf7a06c',\n", - " '0f0d8372e7c03625357c0dfd9acb09f310cccb9d',\n", - " 'f89d5df0e8cfd384b78fb2a02d6c96e70b63a37a',\n", - " '129265830332a04dd3dfbbffb2af8032926c6aa8',\n", - " '0e94d2421fdfabc96ecf4202c9187f1d9618162c',\n", - " 'a43f400be087993b2190dbb72a95235a66057a60',\n", - " 'd3c4512180ec0e1f0b475d0426c31d9a0e131ddb',\n", - " 'dcf1b1ea83932d57e4800afef942c71585d9b958',\n", - " 'f2e809c7bfaf41d3eb6df2c8e87f641536f4d191',\n", - " '227e6c1ff32d1b153fe645f8499897e8c18f0f9e',\n", - " 'e0e6c67f9e7709c40c5ebc83f6d74b81b31c5d8b',\n", - " '4d9116666daff22522ea536aeb0971bde24b57b4',\n", - " '49dc7c1d9cd1f33e123bb13f565ea97149c336c2',\n", - " '38533fd3c3a28b28422e502fe5db4464153effa8',\n", - " '30b1e2a5f064c02327f8798f747228b233606375',\n", - " 'aea4dcf673543353fb9f0ff6aff83a56f6b30d79',\n", - " '1ef733354ab1a3bf1db74c6948d26dc2bccfa2b0',\n", - " 'a9731463fed871df09d13add27a75e7694710d48',\n", - " '967f174e48b18d7c7c346d7e9957858aa61dbb33',\n", - " '38c223ef7ecc26ff0a66e25f1bf2b9c88b7ba9fc',\n", - " '1965041aa1f4d79eac58792947b9f68a968a1644',\n", - " '4708d288b96dae17079427d8beceaaf2900c45d8',\n", - " '3e206726fb7c85361917ce856a2f9cf85d7c06d9',\n", - " 'aff78c761d67c7651046db5f2f250739767d2042',\n", - " '9b720a9287974e9291b856aef5ffea1c10a6f264',\n", - " 'ce4061a816113885524eb5bdfa17b46cf5be279d',\n", - " '55cb612b1b7f09e817909fb95156ef74f1711b70',\n", - " '8b29072654e6e9565190113a60341169506caf9b',\n", - " 'f5135438d8194dc19dbbc2f165e222e0b8f851eb',\n", - " '8efc32dcb487d23737ba2571f400d6e9c112dd06',\n", - " 'e490a5990e54e3854264552194b4bdcc78c23da0',\n", - " '471127a563ca89d37fc39f9adff7be80eb4b8e2d',\n", - " '0bfed41b5b70e6985d0032854fa2905fad4028b0',\n", - " 'ee6697963625a3ba7616212a3b18528304b50d8d',\n", - " 'd700f022d90b32676267c8bf691005b2d78082ab',\n", - " 'e5fe3cf517c0214e1a95c1831d8be9ef981de283',\n", - " '031ae8a3d96b03bc124def2e052dd220fe2c06fa',\n", - " '8697abbbb40a0901809b0c33691e30dfe8435fab',\n", - " 'd4cd6789b1845711589829f0f5aaf0378373059d',\n", - " 'e07a5f05c527b5f6885cea982eac75d7922246c7',\n", - " 'b9fc4b7671596cae2ca0d36d9f3bd01654d9835b',\n", - " '83823f6873e8c8e44ed3aa8e646a30b711b9b442',\n", - " '6f33f5f486150b9a69085431cbcb57c7635f7269',\n", - " 'eb57a300e9ca1dbf454e6f54405733265783ef45',\n", - " 'd8747b3fb48907d6855b0c41c6a3e3bc509a3e4c',\n", - " '407f9bcf7d1e702dd9f709231cd31820cccf558b',\n", - " 'cf409c89f44d1574b003e457bd90116f1691e1f2',\n", - " '225f94ea3f23413994ddbdccdda81a0bb0e64cbb',\n", - " 'eedd64f49a0d4afad51ab74e1cf7f730fb64b952',\n", - " '0a3a523125d1f183a018d01b9532049054de795f',\n", - " 'ac1400f88b583e946c8f08e3630cef966d4071de',\n", - " 'e8de1f8519e76a49b681ada1507049b72077a2e6',\n", - " 'c0097691f098e5f5583def7d395fde31c95a7139',\n", - " 'bbe69f8bf50c7ad150fdc1eece49a01f8a809c50',\n", - " 'ce2343b4411cfdc55489e5f867ac9a9ba6a69053',\n", - " '0ff218eda4867c233795e7078eb8f782a486fd47',\n", - " '1625e2e5776f21451da9d0d1eaf06c4476c58a9c',\n", - " '0a982db3348e863cb9b2c0c82a1bf7097ae055ea',\n", - " '5a2355e761149521c6eca2fa784a4010d63722aa',\n", - " '7e2cc93982129ca6beade4d41c9d23bb964330ad',\n", - " '1924f4f30046636ddf22cf2447fd93a1dcb2a652',\n", - " '5f1e372153f51049db8557dcc81312fe967bc81a',\n", - " '37792bde93cd2dc757253a5952dc2d7c61146b41',\n", - " 'db49f544bbc0829533b6151c85296facdf9e7792',\n", - " '35987fe0b2938beaaba152fe79f982869c3c4f87',\n", - " '41e2261e6a1f6ad202c4bff5061486bc2918c4da',\n", - " '3c81bf0c5b897ad6725c2e628945d20dd34160b2',\n", - " '3a449374300b342bc3cbf9c90bd2976ba6969c4b',\n", - " '3abac45bd08f9bc18c82a48814b7f38656ea4b47',\n", - " 'c1105870fb3bd7cd0cff1628308d69aba1c03ae5',\n", - " '628a2011f0e212f2e57cf89e27d768b85809afd1',\n", - " '164faa61976e1684a83925a5f982a988e7f9c531',\n", - " 'd6cd319d94e9627123e89b7a1bcaf78b35894d6c',\n", - " 'dff139999bfd211c174369acab297bf0e72542ba',\n", - " 'c47243bfa504692b6ed512adc576d2d9f6d0728d',\n", - " '83c262710e5e8129090c9b9eb1d33537627ac700',\n", - " '551d4f52bc9841a9e018aabb6e4d22eab1322ae9',\n", - " '9db5971b3b7ef4e67d725fb3b09586555baf8ef2',\n", - " '2428f6b0b85f66aba29543310080c7e38fe7b928',\n", - " '4def6a26f9f96d60d69321a5619f4b3cbb85c677',\n", - " '693307777f8360c53d0ca13bb4283d2e0a694225',\n", - " 'ca0bec5db1ef288622167c90e510607ae74f03f1',\n", - " 'b6906e4319f5575711df3a724bcb2c243a35fb0e',\n", - " 'bdaf758e033cc4849f84a54b8f5fcb6e590f4af1',\n", - " '1b1570d1e07e88a91036f0074aff7e1650a21252',\n", - " '3fbd54a8cc5de83d5069a55e3586f2be9ff1fa46',\n", - " '1482d5129e7a888fd67409aaa0481efd7dc7460e',\n", - " 'e83d3bddf879477095fc66880f66a4b8939a01b9',\n", - " 'ae36cef9aac9b272cf06bf7849ac84ef676a6e6f',\n", - " 'd9f03642940f45f08cb51d2677358b728e166b89',\n", - " 'a535a5b9dd38e343901b5a7f0abf3ee7efbdb901',\n", - " '7c81d2549fb84686bf01e81a5cf497aa9d3f5861',\n", - " '0199a4f6e7c87690b9c954935307a1fd0b0bbc4f',\n", - " 'fb37c53c7a875896753193dd04be862c4b6f65b1',\n", - " 'f7a143511c406b20cebf1b3255d65303054753fe',\n", - " '1033c914f477b6d0197070ed6d820a479d807390',\n", - " '91fab6343607fa38a55cbe64247d3b4dfbc5fdc7',\n", - " '279fd295c0edb7c2fa7c7ba5f167ca47a40ef385',\n", - " '07aefd14a65ef1278b32f13559ef51f21e87793a',\n", - " '1feb7940469347a939321a6e6d75841e7fc2ca54',\n", - " '32451371c858e17e7e0c1072aaba4a0a36cdb63a',\n", - " '591b9dc8eb0e29d0e4cdac903ac4676867173b20',\n", - " '2dbfb3f8666c6c76cc5e456777ac4113bd0dc5f1',\n", - " '382c385e4b2e643a0921fa00ee4e686775af7e50',\n", - " '18773bbf707ccd5ba5a625cb5db2972ef3414f6c',\n", - " '62e585001ae9f0b2950f0ce394a40d886cb8cd4a',\n", - " 'e6279e581c4bb530a14781a587887d99f18c5d50',\n", - " 'caa00adac6fb490860c069e14a044af3bb3f8b76',\n", - " '1ae48cc9bf00e7a94c6fb70e7beb74ee9b926998',\n", - " '5fa96dc35be30e482622157ecb297b7b11d55794',\n", - " '12e5bff93c4e17bfdb96a2b45f6fa72576128359',\n", - " 'fafad7ab942eee1a75162a77e113d64e08693fa8',\n", - " '13664ad9f5aa2de8da1376a9ca7f6d5ea8f1a3c0',\n", - " '87c9a0981ed036213f40f3ad52af20961f516f79',\n", - " '1bec9cdc1bc885e22c3b9e3a382f7a3305e3c342',\n", - " '4ae0c3ed418ae6ce0a5c88350ddf80735e381092',\n", - " '5c7975fafa7a91dd1a8a7019d5cb6454abad962d',\n", - " '4b85cec4d210f9d9bece5f22bbc634a4f4152480',\n", - " '5f5995256bc3a955c62022a3e106e49e7d0c5c16',\n", - " '9ef75dffe6b0208e06ed2f89db759bab7dddcc6f',\n", - " '381d1288eb3f4844ce23add52d0fb3fbc6386345',\n", - " 'ad0f78107c8fdd75ccdc1de0338c9a01bce5a345',\n", - " '2be16e2bd7fedbba25a6da92c95fe63952e0390f',\n", - " '7e8f0570220cf50abcee7feca08d0b8b1974d42c',\n", - " '92cf23b4733e4ce19f012cbf2a0db25b0a7dd02f',\n", - " 'a3c6b674fcd123289488f834f8f71d27bb0d3c03',\n", - " '8c3c71fb19111e68a7b1bde51d90fdbe266acfe4',\n", - " '944e582632d0a8ab524833c80d2475f7e74d4e17',\n", - " '4d8ab07e79b1cb297e419b4480910b2e6445afbf',\n", - " '53cf73610d7b5dbaea98b94ce2ad17cbbdfde998',\n", - " '73e5aa1b92683cc20a8160c7f7d7a455d49e9808',\n", - " '11091efeef51651017bd796ff53753e1fc2d9629',\n", - " '23faa02fea5a83a088c87bd0c9bc91e5c5d5f6ff',\n", - " '3f6f73a4577bd74893a44b72a06b3e0d5ac8d646',\n", - " '06017a0ccad66f8ce691a90a988e12c3a2ea8e48',\n", - " '356a94d25d022e2d98f7fbe474d95e07c6299bd6',\n", - " 'd333a6b9c64b858e0a1280dfebda505e409db1dd',\n", - " '57852f2a3877fcb45d610c6ebcf0d7e7a7c348ce',\n", - " 'c6cfef75f09d3447f23ad1a49fc65370e0a2032a',\n", - " '3686ae2bbe62a3312ade3866dfeb2d768a87b1d4',\n", - " '0438f314da4b431c937da8b0ef00a253d3e809e0',\n", - " 'cfbdec748fa7ce468b6d6d04d2713d9a04c18f41',\n", - " 'efe372eef34bdc71be684c9c702c4ca30a1cb10d',\n", - " '70082f99266406c96864653a59eca7cc2c8af3fb',\n", - " '6fde5ff6ef120ae2b96c6b484dd0f387d6522f16',\n", - " 'd34d3a2475132fc547625f0a4122c819c551011d',\n", - " 'b4d0e060b45f1713d48039ed508f3097d3765aa5',\n", - " 'a301659be1a57d4203b80851c554a4ac0f2d2c4c',\n", - " 'bea874b3168d873a5d2a6784491c6162677c1d96',\n", - " 'fa8a2d8bf390e793aae36397eeb70c45703a7933',\n", - " 'f10c79aacf3ef595f68e6bbc7f87ed9d5681a6a2',\n", - " 'b6f08e0fe6567ed39d3b244f2afeceef43e0dbd3',\n", - " '2b6a756baea24d1804807cb4001b1da239bb448a',\n", - " '8158e1ba6f3102efbd3f7a360051c0a29fadd998',\n", - " 'f5ff1246659bda3797c61912e62a6881035a4202',\n", - " 'f5638b968e8eefe920657f06fdafc1daee771f50',\n", - " '1225a3b7f0aee9085a6a4b847b7b5cf1e3985970',\n", - " '7136b45ea9a0f122560590701420d3e48fa6f787',\n", - " '2516866542c32e84a11113dea2d97ae1dcdddcaf',\n", - " '0771efcfd425f2d83a45ac97ad277e499d4eee39',\n", - " 'eaf89add05c2df655201371969abb502cfeab278',\n", - " 'ef7bdb45a2a9d2f47a249a20930ae533a955f6d4',\n", - " 'cae7d7008393e8dd547c99e88a2d524966cfd73b',\n", - " '2346efabe0498937defecfd0289cd9ab4ed03f6d',\n", - " '62d1d491c2c60bff8904e79f7dbc0700dd7ba358',\n", - " 'f84e1d851d5d2d1ac1a831feb133c9ceeeb4d084',\n", - " 'c1eeedc4b40ac8f0f4c6bace72c5a90c26b88d36',\n", - " '169b625d2e5c449c8380a43c25e78cfd7f182c15',\n", - " '844309b9439a3d4fa923e04acaa0e9f31684bfbd',\n", - " '55127b9b011a9cfc28075562fb7bba19d20d5b8c',\n", - " '391cca6098e44086191daa773737d20eaf3b72b5',\n", - " '18fab5fe8f02bcaf18ae2e57e11d7b2b1450b2a7',\n", - " '5c5a2d33190fac4aa845dffcc0791e3b187e7435',\n", - " 'bcbad89cbb12ed3cc8cd4441a02ab45d2c5207b6',\n", - " '1f8820f74479a48363e63bff444c675fd2c01421',\n", - " '746578d4494c92921d3cc053083139b9d2c57c37',\n", - " 'e0f616f0e00eb82a30511300ba4ab21ca0b576e1',\n", - " '1fc3a3c7fe36b109a4164a60ce53ce97378703fb',\n", - " '64694a6f62e7959b044f0f1f18569f2ac043df57',\n", - " 'ba082741eebf108251c9cddbaca56f4fe9113b37',\n", - " 'f09c7668ce237c95bd9bb292594bef8ff397e67d',\n", - " '1632c94a26475e4c2aa98981bbf57d2f5122c094',\n", - " '6d2cddf2ca86c044a4bc222b15c20f138860f664',\n", - " 'a20a8cb192bf19ed5012f41bad00e54df20afd53',\n", - " '7afd36146d0cde1c64af722ca6d69757d5cb9125',\n", - " '27ad979dd91454494af1ed94e54a9bdde2497686',\n", - " 'd56ec9abf21e50f40fb47429637f55776904b640',\n", - " 'f3e915227d9afaeba6e47f1db577ff166d9e34b6',\n", - " 'aeb6dd23ebcdb3b915144d2e447365b9d7d44e78',\n", - " '15098a4d589acec5802e890673999e361c3da5ae',\n", - " '9c67f509f939279b4ec1183bfb65024521abd919',\n", - " '7653bc09873c7a3735d6b99d30f42dd2241df5d1',\n", - " '3d22ab531a4b9079de5c73253ea1a5075e4f2417',\n", - " '62e491c55bb9717ea3da15d0e46952903115bc75',\n", - " 'c953c6cce69e977e461801afa7a55d0275725052',\n", - " 'cb57dd9fcd676b564fdb8f40180994040010f211',\n", - " '56c8936874a50a5f020a334586a20521dd9128ff',\n", - " 'a2390f937ab1c28645925ca028c364bc97121d49',\n", - " 'a4aa2cdd84bee279570f021407c74e8b9223dcd8',\n", - " '71c609d29d02aeedff7f0cf94101aefe8672a179',\n", - " '4f599c53a1ec0e557b8cc21ac481777d250b4b87',\n", - " '5210509947582a5f451b89fe5d019bf9661196f2',\n", - " 'cdae6aef90dc110af222941ad96bf2df7ad42a43',\n", - " '76eba81f7057173ede203973050c579f2fca073c',\n", - " 'a39d7f32ae921515e766a204a805f901430cbc67',\n", - " '63150ecbac9cc4c658ba47def5d21897fa1398ce',\n", - " 'ad08ea2342c53290c025960d90fd953520e64222',\n", - " '56f6d7dd8388a296ac84de95764f6942314e3fcf',\n", - " 'e5fc62e47665358c0f2cd257795dfc762720b179',\n", - " '0d2eb67140621893f151e15f79544d4358238277',\n", - " 'aa97f96e83b43f081ca13334153729383fee92ad',\n", - " '51aaf15a593fcccdba8a1eb9a5004002e58cb0c6',\n", - " 'aa64f839c81d2d2ddaa934bd67c78d1b889ba22b',\n", - " 'db0d17531a802433fa24e67461a4a36aa86a0e56',\n", - " 'b3aa4b3a8d5f22ea512f67fd2b9ce0a572de0323',\n", - " '411a1eaed3f10b453dd8d963fe9bf937d8a82b65',\n", - " '2502156af3029af7d49979ce32718ddb0f0f94b3',\n", - " '1fda40911065c5822c5dcf069da305e17b3ac81a',\n", - " '62c6affc9dc626ce1abfc0b0c49118143684514e',\n", - " '5d5eaad5e82606d21782699d822e23f1b9d69d72',\n", - " 'bff3b596efd938846ea240fd762aaf7e04603ddc',\n", - " '8de287496c83c14997239eb26420e286a90c69de',\n", - " 'f7972f255206e779f2a51daf662af55cfd3a8aa4',\n", - " 'c40a785b02b76ba6afc24ee58bcb8f6b343d963d',\n", - " '382ffafb2144769560a08e189d2d9c2689d6f936',\n", - " '73a691c9414b0b1f3167c4daac921b35351a53f7',\n", - " 'f98c78557ea09c15ea674bd2e374137bd90b9da2',\n", - " '4188b25cd82d0094a4ff8e39af5fc4a04cd6d9eb',\n", - " '8af53a2b642450ad596615a0df1415ab40639868',\n", - " 'eb5e774c71409fff8acea673757f9850d023b8a7',\n", - " '6a97b7b1c58f466973c30b6b508ef0353bdef568',\n", - " '39c99ce9738d98d2b762509c8d681efd58b31285',\n", - " 'a6ea3b9f418ec5e62166dbcee83212b139297f85',\n", - " '2d402788fcf7856c65805810ef41faeffe86192a',\n", - " '5f01fff720fa19c67de886350dbb5322d1c18cc1',\n", - " '212e31a050ee341a12ac3cba740beb5a22acbd6a',\n", - " '1ffcae226fae38963b354a7fc1424b797b0dc785',\n", - " '1d6796313c23e48ac0b84f82562742e8939ef098',\n", - " 'b03d18bb36b8e3eadc03ef165d3d8b3273c5edd6',\n", - " 'cbdeaa4eecba8859d5bfd644e18f13f7732e0b14',\n", - " 'a44d595402e9a588d11d44b56f96638fb4e8ada1',\n", - " 'e9a8deeda6a04df6afb887619a3a1880250aed7a',\n", - " '9944bb5c670d59b63a908c8ed0ecdf1d69fbcacc',\n", - " '8d3f1b75887dc808b2bd6d5e2552615af6bb7a76',\n", - " '8f0429f92ec2af8ddbe2bde5854a065926a4f08e',\n", - " '91281c9cb6e49e73e760c0925383036c4941e482',\n", - " '23bdf3d3a9937c5bfdc378946a19935e26317ef9',\n", - " '25f9ab3818f27da5137d69f6d4360e47334401c3',\n", - " '3bade72bd6474920220425b8487202bea0493daa',\n", - " '6120f57d638dab7665b9257775ae79b5e4b510f1',\n", - " '14e5d19bafb8142b631698247ff517199afb10c1',\n", - " 'd0518cd065df011dca2f92210cbbf3c63f68e962',\n", - " '111ba55daeb0c1afc111dcbb5ff35295b75b1cdc',\n", - " '0c04a4deefb234f521a4d0098f1a328fa4561af8',\n", - " '065dc9999874099666452703a732fce7ede3987a',\n", - " ...]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "read = df_compact[df_compact['userId'].isin([user])]['documentId'].tolist()\n", - "read" + "recommendation = get_rec(random_user, train_compact, test_compact, rec_count, simular_users_count).index.tolist()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Single Recomendation Evaluation" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 9, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "40" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "CTR 8.00 %\n", + "MSE: 1.44 %\n", + "MSE affected-only: 97.52 %\n" + ] } ], "source": [ - "user = 'cx:f5e48x6ex7f53j657ibytaxs2:25ny9hhau79nc'\n", - "\n", - "df_train = M\n", - "df_test = df_compact\n", + "overlap = list(set(test_period_read_list).intersection(recommendation)) # list of successfully predicted acticles\n", + "articles = test_compact.documentId.unique()\n", "\n", - "users = get_users(user, df_train, 10)\n", - "prediction = get_recs(user, users, df_test, df_test, 50, filter=False).axes[0].tolist()\n", - "read = df_compact[df_compact['userId'].isin([user])]['documentId'].tolist()\n", - "#actually_read = df_test[df_test['userId'].isin([user]) & df_test['documentId'].isin(prediction)]\n", - "actually_read = list(set(read).intersection(prediction))\n", - "len(actually_read)" + "format_float = \"{:.2f}\".format(len(overlap)/len(recommendation)*100)\n", + "print(\"CTR\", format_float, \"%\")\n", + "format_float = \"{:.2f}\".format(get_MSE(test_period_read_list, recommendation, articles)*100)\n", + "print(\"MSE:\", format_float, \"%\")\n", + "format_float = \"{:.2f}\".format(get_MSE2(test_period_read_list, recommendation, articles)*100)\n", + "print(\"MSE affected-only:\", format_float, \"%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Combined" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CTR 12.00 %\n", + "MSE: 1.57 %\n", + "MSE affected-only: 96.61 %\n" + ] + } + ], "source": [ - "train, test = train_test_split(df, test_size=0.2)\n", + "simular_users_count = 50 # How many corr values to care about\n", + "rec_count = 50 # number>0, -1=avarage of corr\n", "\n", - "data = [train[\"documentId\"], train[\"userId\"]]\n", - "headers = [\"documentId\", \"userId\"]\n", - "train_compact = pd.concat(data, axis=1, keys=headers)\n", - "train_compact = train_compact[train_compact['documentId'].notna()]\n", - "train_compact.drop_duplicates(keep=False,inplace=True)\n", - "train_compact[\"rating\"] = 1\n", - "M = train_compact.pivot_table(index=['documentId'], columns=['userId'], values='rating')\n", - "M.shape\n", - "M = M.fillna(0)\n", + "random_user_index = random.randint(0, len(userId_list))\n", + "random_user = corr_list_list[random_user_index]\n", "\n", - "data = [test[\"documentId\"], test[\"userId\"]]\n", - "headers = [\"documentId\", \"userId\"]\n", - "test_compact = pd.concat(data, axis=1, keys=headers)\n", - "test_compact = test_compact[test_compact['documentId'].notna()]\n", - "test_compact.drop_duplicates(keep=False,inplace=True)\n", - "test_compact[\"rating\"] = 1\n", + "test_period_read_list = test_compact[test_compact['userId'].isin([random_user[0]])]['documentId'].tolist() # list of all articles the user actually read in test-period\n", + "if rec_count is None:\n", + " rec_count = len(test_period_read_list)\n", + "elif rec_count == -1:\n", + " read = []\n", + " users_list = [x[0] for x in random_user[1][:simular_users_count]]\n", + " for usr in users_list:\n", + " c = len(test_compact[test_compact['userId'].isin([usr])]['documentId'].tolist())\n", + " read.append(c)\n", + " avg_read = statistics.mean(read)\n", + " rec_count = int(avg_read)\n", + "\n", + "recommendation = get_rec(random_user, train_compact, test_compact, rec_count, simular_users_count).index.tolist()\n", "\n", - "test_users = train_compact['userId'].value_counts().axes[0].tolist()[1:51] #top 50 excluding top 1" + "overlap = list(set(test_period_read_list).intersection(recommendation)) # list of successfully predicted acticles\n", + "articles = test_compact.documentId.unique()\n", + "\n", + "format_float = \"{:.2f}\".format(len(overlap)/len(recommendation)*100)\n", + "print(\"CTR\", format_float, \"%\")\n", + "format_float = \"{:.2f}\".format(get_MSE(test_period_read_list, recommendation, articles)*100)\n", + "print(\"MSE:\", format_float, \"%\")\n", + "format_float = \"{:.2f}\".format(get_MSE2(test_period_read_list, recommendation, articles)*100)\n", + "print(\"MSE affected-only:\", format_float, \"%\")" ] }, { - "cell_type": "code", - "execution_count": 22, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "def get_MSE(results):\n", - " \n", - " print(\"Test\")" + "# Evaluation" ] }, { - "cell_type": "code", - "execution_count": 23, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "def test_rec(M, test_compact, test_users, user_count, rec_count=None):\n", - " if rec_count is None:\n", - " print(\"Predicting number of articles equal to actual reading number from test-data for top\", len(test_users),\"users excluding the top 1 using top\", user_count, \"cor users.\")\n", - " else:\n", - " print(\"Predicting number of articles equal to\", rec_count,\"for top\", len(test_users),\"users excluding the top 1 using top\", user_count, \"cor users.\")\n", - " \n", - " rec_count = rec_count\n", - " results = []\n", - " for u in test_users:\n", - " users = get_users(u, M, user_count) # get users with high cor\n", - " reality = test_compact[test_compact['userId'].isin([u])]['documentId'].tolist() # list of all articles the user actually read in test-period\n", - " if rec_count is None:\n", - " rec_count = len(reality)\n", - " prediction = get_recs(u, users, test, train, rec_count).axes[0].tolist() # get as many recommendations as articles the user will actually read\n", - " overlap = list(set(read).intersection(prediction)) # list of successfully predicted acticles\n", - " if len(reality) > 0 and len(prediction) > 0:\n", - " results.append([u, len(users), len(prediction), len(reality), len(overlap), len(overlap)/len(prediction), len(overlap)/len(reality), prediction, reality, overlap]) # userId, high cor users used, prediction count, read count, success count, accuracy, coverage\n", - " #recall = []\n", - " clicks = 0\n", - " rec_count = 0\n", - " for r in results:\n", - " #recall.append(r[4]/r[2])\n", - " clicks += r[4]\n", - " rec_count += r[2]\n", - " ctr = clicks / rec_count * 100\n", - " #avg_recall = statistics.mean(recall) * 100\n", - " #format_float = \"{:.5f}\".format(avg_recall)\n", - " #print(\"AVG Recall: \", format_float, \"%\")\n", - " format_float = \"{:.5f}\".format(ctr)\n", - " print(\"CTR: \", format_float, \"%\")\n", - " print(\"MSE: \", get_MSE(results), \"%\")" + "### Config" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "df = load_data(\"active1000\")\n", - "train, test = train_test_split(df, test_size=0.2)\n", + "userId_count = 999 # 0-1000 depending on skip\n", + "userId_skip_count = 1\n", + "simular_users_count = 50 # How many corr values to care about\n", + "rec_count = 50 # number>0, -1=avarage of corr\n", "\n", - "data = [train[\"documentId\"], train[\"userId\"]]\n", - "headers = [\"documentId\", \"userId\"]\n", - "train_compact = pd.concat(data, axis=1, keys=headers)\n", - "train_compact = train_compact[train_compact['documentId'].notna()]\n", - "train_compact.drop_duplicates(keep=False,inplace=True)\n", - "train_compact[\"rating\"] = 1\n", - "M = train_compact.pivot_table(index=['documentId'], columns=['userId'], values='rating')\n", - "M.shape\n", - "M = M.fillna(0)\n", + "total_users = 1000\n", + "if userId_skip_count < 0 or userId_skip_count > total_users-2:\n", + " userId_skip_count = 0\n", "\n", - "data = [test[\"documentId\"], test[\"userId\"]]\n", - "headers = [\"documentId\", \"userId\"]\n", - "test_compact = pd.concat(data, axis=1, keys=headers)\n", - "test_compact = test_compact[test_compact['documentId'].notna()]\n", - "test_compact.drop_duplicates(keep=False,inplace=True)\n", - "test_compact[\"rating\"] = 1\n", - "\n" + "if userId_count+userId_skip_count > total_users-1:\n", + " userId_count = total_users-userId_skip_count\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Test" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 12, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicting number of articles equal to actual reading number from test-data for top 999 users excluding the top 1 using top 50 cor users.\n", - "CTR: 52.07109 %\n", - "Test\n", - "MSE: None %\n" - ] + "data": { + "text/plain": [ + "998" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "test_user_count = 999\n", - "skip = 1\n", - "test_users = train_compact['userId'].value_counts().axes[0].tolist()[skip:test_user_count+skip]\n", - "\n", - "test_rec(M, test_compact, test_users, 50)" + "recommendations = []\n", + "for uid in userId_list[userId_skip_count:userId_count+userId_skip_count-1]:\n", + " test_period_read_list = test_compact[test_compact['userId'].isin([random_user[0]])]['documentId'].tolist() # list of all articles the user actually read in test-period\n", + " if rec_count is None:\n", + " rec_count = len(test_period_read_list)\n", + " elif rec_count == -1:\n", + " read = []\n", + " users_list = [x[0] for x in random_user[1][:simular_users_count]]\n", + " for usr in users_list:\n", + " c = len(test_compact[test_compact['userId'].isin([usr])]['documentId'].tolist())\n", + " read.append(c)\n", + " rec_count = int(statistics.mean(read))\n", + " recommendations.append([uid, get_rec(random_user, train_compact, test_compact, rec_count, simular_users_count).index.tolist(), test_period_read_list])\n", + "len(recommendations)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Results" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Predicting number of articles equal to 10 for top 50 users excluding the top 1 using top 50 cor users.\n", - "CTR: 68.00000 %\n", - "Test\n", - "MSE: None %\n" + "AVG CTR 12.00000 %\n", + "AVG MSE: 1.57082 %\n", + "AVG MSE affected-only: 96.61 %\n" ] } ], "source": [ - "test_user_count = 50\n", - "skip = 1\n", - "test_users = train_compact['userId'].value_counts().axes[0].tolist()[skip:test_user_count+skip]\n", + "articles = test_compact.documentId.unique()\n", + "\n", + "clicks = 0\n", + "rec_count = 0\n", + "for r in recommendations:\n", + " clicks += len(list(set(r[2]).intersection(r[1])))\n", + " rec_count += len(r[1])\n", + "\n", + "format_float = \"{:.5f}\".format(clicks / rec_count * 100)\n", + "print(\"AVG CTR\", format_float, \"%\")\n", "\n", - "test_rec(M, test_compact, test_users, 50, 10)" + "MSE = []\n", + "for r in recommendations:\n", + " MSE.append(get_MSE(r[2], r[1], articles))\n", + " \n", + "format_float = \"{:.5f}\".format(statistics.mean(MSE) * 100)\n", + "print(\"AVG MSE:\", format_float, \"%\")\n", + "\n", + "MSE2 = []\n", + "for r in recommendations:\n", + " MSE2.append(get_MSE2(r[2], r[1], articles))\n", + " \n", + "format_float = \"{:.2f}\".format(statistics.mean(MSE2) * 100)\n", + "print(\"AVG MSE affected-only:\", format_float, \"%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "AVG CTR 12.00000 %\n", + "AVG MSE: 1.57082 %\n", + "AVG MSE affected-only: 96.61 %" ] } ], @@ -3226,7 +431,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.12" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/myfunc.py b/myfunc.py new file mode 100644 index 0000000000000000000000000000000000000000..2858c8885fa55eecafe617786639a55fa09b263e --- /dev/null +++ b/myfunc.py @@ -0,0 +1,125 @@ +import matplotlib.animation as ani +import matplotlib.cm as cmx +import matplotlib.colors as colors +import matplotlib.pyplot as plt +import numpy as np +import json +import os +import pandas as pd +import statistics + +from sklearn.metrics.pairwise import cosine_similarity +from matplotlib.patches import Ellipse +from PIL import Image +from sklearn import datasets +from sklearn.cluster import KMeans +from sklearn.model_selection import train_test_split +from sklearn.metrics import mean_squared_error + +def load_data(path): + """ + Load events from files and convert to dataframe. + """ + map_lst=[] + for f in os.listdir(path): + file_name=os.path.join(path,f) + if os.path.isfile(file_name): + for line in open(file_name): + obj = json.loads(line.strip()) + if not obj is None: + map_lst.append(obj) + return pd.DataFrame(map_lst) + +def load_dataset(df): + """ + Convert dataframe to user-item-interaction matrix, which is used for + Matrix Factorization based recommendation. + In rating matrix, clicked events are refered as 1 and others are refered as 0. + """ + df = df[~df['documentId'].isnull()] + df = df.drop_duplicates(subset=['userId', 'documentId']).reset_index(drop=True) + df = df.sort_values(by=['userId', 'time']) + n_users = df['userId'].nunique() + n_items = df['documentId'].nunique() + + ratings = np.zeros((n_users, n_items)) + new_user = df['userId'].values[1:] != df['userId'].values[:-1] + new_user = np.r_[True, new_user] + df['uid'] = np.cumsum(new_user) + item_ids = df['documentId'].unique().tolist() + new_df = pd.DataFrame({'documentId':item_ids, 'tid':range(1,len(item_ids)+1)}) + df = pd.merge(df, new_df, on='documentId', how='outer') + df_ext = df[['uid', 'tid']] + + for row in df_ext.itertuples(): + ratings[row[1]-1, row[2]-1] = 1.0 + return ratings + +def get_corr_list(user, M): + corr_list = [] + for u in M.columns: + if u == user: + continue + A=M[user].to_numpy() + B=M[u].to_numpy() + result=cosine_similarity(A.reshape(1,-1),B.reshape(1,-1)) + cor = result[0][0] + corr_list.append((u, cor)) + corr_list.sort(key=lambda tup: tup[1], reverse=True) + return corr_list + + +def get_rec(user, train_df, test_df, num, simular_users_count, filter=True): + users_list = [x[0] for x in user[1][:simular_users_count]] + simular_clicks_df = train_df[train_df['userId'].isin(users_list)] + user_clicks = test_df[test_df['userId'].isin([user])]['documentId'].to_list() + if filter: + df_unread_only = simular_clicks_df[~simular_clicks_df['documentId'].isin(user_clicks)] + titles = df_unread_only['documentId'].value_counts() + else: + titles = simular_clicks_df['documentId'].value_counts() + return titles[:num] + + + +def get_MSE(reality, prediction, articles): + # Given values + Y_true = np.zeros(len(articles)) # Y_true = Y (original values) + + # calculated values + Y_pred = np.zeros(len(articles)) # Y_pred = Y' + + for a in reality: + Y_true[np.where(articles == a)] = 1 + + for a in prediction: + Y_pred[np.where(articles == a)] = 1 + + # Calculation of Mean Squared Error (MSE) + r = mean_squared_error(Y_true,Y_pred) + return r + +def get_MSE2(reality, prediction, articles): + # Given values + Y_true = np.zeros(len(articles)) # Y_true = Y (original values) + + # calculated values + Y_pred = np.zeros(len(articles)) # Y_pred = Y' + + for a in reality: + Y_true[np.where(articles == a)] = 1 + + for a in prediction: + Y_pred[np.where(articles == a)] = 1 + + new_y_true = [] + new_y_pred = [] + + for i in range(0, len(Y_true)): + if Y_true[i] == 1 or Y_pred[i] == 1: + new_y_true.append(Y_true[i]) + new_y_pred.append(Y_pred[i]) + + # Calculation of Mean Squared Error (MSE) + r = mean_squared_error(new_y_true,new_y_pred) + return r \ No newline at end of file