{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[原版（英文）图书地址](https://www.oreilly.com/library/view/feature-engineering-for/9781491953235/)\n",
    "\n",
    "**翻译**：[apachecn](https://github.com/apachecn)，[翻译版本地址](https://github.com/apachecn/feature-engineering-for-ml-zh)\n",
    "\n",
    "**代码修改和整理**：[黄海广](https://github.com/fengdu78)，原文修改成jupyter notebook格式，并增加和修改了部分代码，测试全部通过，所有数据集已经放在[百度云](data/README.md)下载。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 二、简单数字的奇特技巧\n",
    "\n",
    "> 译者：[@coboe](https://github.com/coboe)\n",
    "> \n",
    "> 校对者：[@ZiseonJiao](https://github.com/emengjzs)\n",
    "\n",
    "在深入研究诸如文本和图像这样的复杂数据类型之前，让我们先从最简单的数字数据开始。它们可能来自各种来源：地理位置或人、购买的价格、传感器的测量、交通计数等。数字数据已经是数学模型容易消化的格式。这并不意味着不再需要特征工程。好的特征不仅代表数据的显著方面，而且符合模型的假设。因此，转换常常是必要的。数字特征工程技术是基础。当原始数据被转换为数字特征时，它们可以被应用。\n",
    "\n",
    "数值数据的第一个健全检查是大小是否重要。我们只需要知道它是正面的还是负面的？或者我们只需要知道一个非常粗粒度的大小？这一明智的检查对于自动累积数尤其重要，比如统计，每天访问网站的次数，餐馆所获得的评论数量等等。\n",
    "\n",
    "接下来，考虑特征的规模。最大值和最小值是什么？它们跨越几个数量级吗？输入特性平滑的模型对输入的尺度敏感。例如，3x+ 1是输入X的简单线性函数，其输出的规模直接取决于输入的比例。其他例子包括k-均值聚类，最近邻居方法，RBF内核，以及使用欧几里得距离的任何东西。对于这些模型和建模组件，通常规范化特征以使输出保持在预期的规模上通常是一个好主意。\n",
    "\n",
    "另一方面，逻辑函数对输入特征量表不敏感。无论输入是什么，它们的输出都是二进制的。例如，逻辑，并采取任何两个变量和输出1，当且仅当两个输入均为真。逻辑函数的另一个例子是阶跃函数“输入x大于5”。决策树模型由输入特征的阶跃函数组成。因此，基于空间划分树（决策树、梯度提升机、随机森林）的模型对尺度不敏感。唯一的例外是如果输入的规模随着时间的增长而增长，那么如果该特征是某种类型的累积计数。最终它将生长在树被训练的范围之外。如果可能是这样的话，那么就有必要周期性地重新调整输入。另一个解决方案是第5章讨论的bin计数方法。\n",
    "\n",
    "考虑数值特征的分布也是很重要的。分布总结了承担特定价值的可能性。输入特征的分布对某些模型比其他模型更重要。例如，线性回归模型的训练过程假定预测误差分布得像高斯。这通常是好的，除非预测目标在几个数量级上扩散。在这种情况下，高斯误差假设可能不再成立。解决这一问题的一种方法是转变产出目标，以驯服规模的增长。（严格地说，这将是目标工程，而不是特征工程。）对数变换，这是一种功率变换，将变量的分布接近高斯。另一个解决方案是第5章讨论的bin计数方法。\n",
    "\n",
    "除了裁剪模型或培训过程的假设, 多个功能可以组合成更复杂的功能。希望复杂的功能能够更简洁地捕捉原始数据中的重要信息。通过使输入功能更加 \"雄辩\", 模型本身可以更简单, 更容易进行培训和评估, 并做出更好的预测。作为一个极端的, 复杂的特点本身可能是统计模型的输出。这是一个称为模型堆叠的概念, 我们将在7章和8章中更详细地讨论。在本章中, 我们给出了复杂特征的最简单示例: 交互功能。\n",
    "\n",
    "交互特征易于制定，但特征的组合导致更多的输入到模型中。为了减少计算开销，通常需要使用自动特征选择来修剪输入特征。\n",
    "\n",
    "我们将从标量、向量和空间的基本概念开始，然后讨论尺度、分布、交互特征和特征选择。\n",
    "\n",
    "## 标量、向量和空间\n",
    "\n",
    "在我们开始之前, 我们需要定义一些基本概念, 这本书的其余部分。单个数字特征也称为标量。标量的有序列表称为向量。向量位于向量空间中。在绝大多数机器学习应用中, 对模型的输入通常表示为数字向量。本书的其余部分将讨论将原始数据转换为数字向量的最佳实践策略. \n",
    "\n",
    "向量可以被可视化为空间中的一个点。（有时人们从原点到那一点画一条线和一个箭头。在这本书中，我们将主要使用这一点。例如，假设我们有一个二维向量$v=[1，-1]$。也就是说，向量包含两个数，在第一方向$d1$中，向量具有1的值，并且在第二方向$d2$中，它具有$-1$的值。我们可以在二维图中绘制$v$。\n",
    "\n",
    "![A single vector](images/chapter2/A_single_vector.png)\n",
    "\n",
    "**Figure 2-1. A single vector.**\n",
    "\n",
    "在数据世界中, 抽象向量及其特征维度具有实际意义。例如, 它可以代表一个人对歌曲的偏爱。每首歌都是一个特征, 其中1的值相当于大拇指向上,$-1$ 个拇指向下。假设向量 $v$ 表示一个听众 Bob 的喜好。Bob喜欢 Bob Dylan 的  “Blowin’ in the Wind” 和 Lady Gaga 的 \"Poker Face\"。其他人可能有不同的喜好。总的来说, 数据集合可以在特征空间中可视化为点云. \n",
    "\n",
    "相反，一首歌可以由一组人的个人喜好来表示。假设只有两个听众，Alice 和 Bob。Alice 喜欢 Leonard Cohen 的 “Poker Face”, “Blowin’ in the Wind” 和 “Hallelujah”，但讨厌 Katy Perry 的 “Roar” 和 Radiohead 的 “Creep”。Bob 喜欢 “Roar\", “Hallelujah”和“Blowin’ in the Wind”，但讨厌 “Poker Face” 和 “Creep” 。在听众的空间里，每一首歌都是一个点。就像我们可以在特征空间中可视化数据一样，我们可以在数据空间中可视化特征。图2-2显示了这个例子。\n",
    "\n",
    "![Illustration of feature space vs. data space](images/chapter2/Illustration_of_feature_space_vs_data_space.png)\n",
    "\n",
    "**Figure 2-2. Illustration of feature space vs. data space.**\n",
    "\n",
    "## 处理计数\n",
    "\n",
    "在大数据时代，计数可以快速积累而不受约束。用户可以将歌曲或电影放在无限播放中，或者使用脚本反复检查流行节目的门票可用性，这会导致播放次数或网站访问计数迅速上升。当数据可以以高的体积和速度产生时，它们很可能包含一些极值。这是一个好主意，检查他们的规模，并确定是否保持它们作为原始数字，将它们转换成二进制变量，以指示存在，或将它们放入粗粒度。\n",
    "\n",
    "## 二值化\n",
    "\n",
    "Million Song 数据集中的用户品味画像包含了一百万个用户在 Echo Nest 的完整音乐聆听历史。下面是有关数据集的一些相关统计数据。\n",
    "\n",
    "###  Echo Nest 品味画像数据集的统计\n",
    "\n",
    "- 有超过4800万个用户ID、音乐ID和监听计数三元组。\n",
    "- 完整的数据集包含1019318个独特用户和384546首独特歌曲。\n",
    "- 引文：Echo Nest 品味画像的数据子集，官方的 Million Song 数据集的用户数据集，可从这里获得：http://labrosa.ee.columbia.edu/millionsong/tasteprofile\n",
    "\n",
    "假设任务是建立一个推荐器向用户推荐歌曲。推荐器的一个组件可以预测用户将对一首特别的歌曲会有多少喜欢。由于数据包含实际的听歌次数，这应该是预测的目标吗？如果一个大的听计数意味着用户真的喜欢这首歌，反之亦然，那是正确的。然而，数据表明，虽然99%的听计数是24或更低，也有一些听计数数以千计，最大为9667。（如图2-3所示，直方图最接近于0的bin中的峰值。但是超过10000个三元组的计数更大，几千个则有几个。这些值异常大；如果我们试图预测实际的听计数，那么模型将被这些大的值拉离。\n",
    "\n",
    "![Histogram of listen counts in the user taste profile of the Million Song Dataset. Note that the y-axis is on a log scale.](images/chapter2/listen_count.png)\n",
    "\n",
    "**Figure 2-3. Histogram of listen counts in the user taste profile of the Million Song Dataset. Note that the y-axis is on a log scale.**\n",
    "\n",
    "在 Million Song 数据集中，原始监听计数不是用户口味的可靠度量。（在统计术语中，健壮性意味着该方法在各种各样的条件下工作。）用户有不同的听力习惯。有些人可能把他们最喜欢的歌曲放在无限的循环中，而其他人可能只在特殊的场合品尝它们。很难说听一首歌20次的人一定喜欢听10次的人的两倍。\n",
    "\n",
    "用户偏好的更健壮表示是使计数二元化和修剪所有大于1的计数为1。换句话说，如果用户至少听过一首歌，那么我们将其视为用户喜欢歌曲。这样，模型不需要花费周期来预测原始计数之间的微小差异。二进制目标是用户偏好的简单而稳健的度量。\n",
    "\n",
    "### 例2-1:使 Million Song 数据集中听歌计数二进制化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "listen_count = pd.read_csv(\n",
    "    'data/train_triplets.txt.zip', header=None, delimiter='\\t')\n",
    "# The table contains user-song-count triplets. Only non-zero counts are\n",
    "# included. Hence to binarize the count, we just need to set the entire\n",
    "# count column to 1.\n",
    "listen_count[2] = 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这是我们设计模型目标变量的一个例子。严格地说, 目标不是一个特征, 因为它不是输入。但有时我们确实需要修改目标以解决正确的问题。\n",
    "\n",
    "## 量化或装箱\n",
    "\n",
    "对于本练习, 我们从第 6 轮 Yelp 数据集挑战中采集数据, 并创建一个更小的分类数据集。Yelp 数据集包含用户对来自北美和欧洲十个城市的企业的评论。每个商户都标记为零个或多个类别。以下是有关数据集的相关统计信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 关于第 6 轮 Yelp 数据集的统计\n",
    "\n",
    "- 有782种商户类别。\n",
    "- 完整的数据集包含 1569264 个（约1.6M）评论和 61184 个（61K）商户。\n",
    "- “餐厅”（990627个评论）和“夜生活”（210028个评论）是最流行的类别，评论计数是明智的。\n",
    "- 没有一个商户同时属于餐厅和夜生活分类。因此，这两组评论之间没有重叠。\n",
    "\n",
    "每个商户都有一个评论计数。假设我们的任务是使用协同过滤来预测用户可能给企业的评级。评论计数可能是一个有用的输入特征，因为通常在流行和良好的评级之间有很强的相关性。现在的问题是，我们应该使用原始评论计数或进一步处理它吗？图2-4显示了所有商户评论计数的直方图。我们看到和音乐听歌计数一样的模式。大部分的统计数字都很小，但一些企业有成千上万的评论。\n",
    "\n",
    "### 例2-2:在YELP数据集中可视化商户评论计数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import json\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Load the data about businesses\n",
    "biz_file = open('data/yelp_academic_dataset_business.json')\n",
    "biz_df = pd.DataFrame([json.loads(x) for x in biz_file.readlines()])\n",
    "biz_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Occurrence')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e831c4470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### Plot the histogram of the review counts\n",
    "sns.set_style('whitegrid')\n",
    "fig, ax = plt.subplots()\n",
    "biz_df['review_count'].hist(ax=ax, bins=100)\n",
    "ax.set_yscale('log')\n",
    "ax.tick_params(labelsize=14)\n",
    "ax.set_xlabel('Review Count', fontsize=14)\n",
    "ax.set_ylabel('Occurrence', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-4. Histogram of business review counts in the Yelp reviews dataset. The y-axis is on a log-scale.**\n",
    "\n",
    "对于许多模型来说，跨越数个数量级的原始计数是有问题的。在线性模型中，相同的线性系数必须对计数的所有可能值工作。大量的计数也可能破坏无监督学习方法，如k-均值聚类，它使用相似性函数来测量数据点之间的相似性。k-均值使用数据点之间的欧几里得距离。数据向量的一个元素中的大计数将超过所有其他元素中的相似性，这可能会丢弃整个相似性度量。\n",
    "\n",
    "一种解决方案是通过量化计数来包含标量。换句话说，我们将计数分组到容器中，并且去掉实际的计数值。量化将连续数映射成离散数。我们可以把离散化的数字看作是代表强度度量的容器的有序的序列。\n",
    "\n",
    "为了量化数据，我们必须决定每一个箱子应该有多宽。解决方案分为固定宽度或自适应两种类型。我们将给出每个类型的例子。\n",
    "\n",
    "### 固定宽度装箱\n",
    "\n",
    "对于固定宽度装箱, 每个 bin 都包含一个特定的数值范围。范围可以是定制设计或自动分割, 它们可以线性缩放或指数缩放。例如, 我们可以将一个人的年龄分组为十年: 0-9 岁归纳到bin 1, 10-19 年归纳到 bin 2 等。要从计数映射到 bin, 只需除以 bin 的宽度并取整部分。\n",
    "\n",
    "也经常看到定制设计的年龄范围更适合于生活的阶段：\n",
    "- 0-12 岁\n",
    "- 12-17 岁\n",
    "- 18-24 岁\n",
    "- 25-34 岁\n",
    "- 35-44 岁\n",
    "- 45-54 岁\n",
    "- 55-64 岁\n",
    "- 65-74 岁\n",
    "- 75 岁以上\n",
    "\n",
    "\n",
    "当数字跨越多个数量级时，最好用10个幂（或任何常数的幂）来分组：0－9、10-99、100-999、100-9999等。容器宽度呈指数增长，从O（10）、O（100）到O（1000）和以上。要从计数映射到bin，取计数的log值。指数宽度的划分与对数变换非常相关，我们在“对数变换”中讨论。\n",
    "\n",
    "### 例2-3:用固定宽度的箱进行量化计数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([84, 45, 51, 18, 50, 78, 40, 25, 75, 17, 39, 44, 69, 53, 35,  5,  8,\n",
       "       51, 63, 34])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "### Generate 20 random integers uniformly between 0 and 99\n",
    "small_counts = np.random.randint(0, 100, 20)\n",
    "small_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([8, 4, 5, 1, 5, 7, 4, 2, 7, 1, 3, 4, 6, 5, 3, 0, 0, 5, 6, 3],\n",
       "      dtype=int32)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.floor_divide(small_counts, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "### An array of counts that span several magnitudes\n",
    "large_counts = [\n",
    "    296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971,\n",
    "    926, 122, 22222\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2., 3., 4., 1., 0., 2., 2., 3., 3., 4., 4., 1., 1., 3., 2., 2., 4.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### Map to exponential-width bins via the log function\n",
    "np.floor(np.log10(large_counts))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分位数装箱\n",
    "\n",
    "固定宽度装箱很容易计算。但是如果计数有很大的差距, 那么将会有许多空的垃圾箱没有数据。该问题可以通过基于数据分布的垃圾箱自适应定位来解决。这可以使用分发的分位数来完成。\n",
    "\n",
    "分位数是将数据划分为相等部分的值。例如, 中位数将数据分成一半;一半的数据是较小的, 一半大于中位数。分位数把数据分成几个部分, 十分位数把数据划分成十份。示例2-4 演示如何计算 Yelp 商户评论数的十等分, 图2-5 覆盖直方图上的十等分。这就更清楚地说明了对更小的计数的歪斜。\n",
    "\n",
    "### 例 2-4:计算 Yelp 商户评论数的十分位数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1     3.0\n",
       "0.2     3.0\n",
       "0.3     4.0\n",
       "0.4     5.0\n",
       "0.5     6.0\n",
       "0.6     8.0\n",
       "0.7    12.0\n",
       "0.8    23.0\n",
       "0.9    50.0\n",
       "Name: review_count, dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "deciles = biz_df['review_count'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9])\n",
    "deciles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Occurrence')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEaCAYAAADQVmpMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XlUU2f+BvCHJUkDYtwKFseftdQqJS6Iy1Swi6O1GnTQY1vqghsuI3UrFkVFUbEW3DpiLS6F4xSqRe0449iq1ZlqrbUtmlZ7BJVYxrqgGXFEG0iA8PvDISWCeHPJSp7POR69782990su5sl737t4VFdXV4OIiEgET0cXQEREroshQkREojFEiIhINIYIERGJxhAhIiLRGCJERCQaQ4SIiERzqRDRaDQIDQ1FZWWlo0shIiK4UIj8+uuvSEtLw2OPPeboUoiI6H9cJkSWLVuGWbNmQS6XO7oUIiL6H29HFyDEhx9+iLCwMISEhFi03A8//ACZTGb5BtXq+3+Hhlq+LACcP3//786drft6S9fbyGX1ev2j37/G1GRtzlRLQ5y0TkH7m5qMhva3Xq9Hjx49BK3HwxXunRUVFQU/Pz8A94OhT58++PDDDx+5XH5+PoKDgy3fYIsW9//+738tXxYAXnzx/t9ffmnd11u63kYuK+j9a0xN1uZMtTTESesU/f+FXFJD+9uS3wWX6Ins3bvX9O8BAwZg8+bNDqyGiIhqOGRMxGAwIDIyEidOnDBrS0pKQu/evREeHo6tW7c6ojQiIrKA3Xsier0e8fHxuHjxoll7Wloa1Go1srKyUFxcjISEBAQGBkKlUpm97p///Kc9yyUiogbYNUQKCwsRHx+PB4dhdDodcnNzkZGRAaVSCaVSidjYWGRnZ9cJEUvo9Xrk5+dbvNwzRiMA4IKIZQHg/3Q6AMBlgcsLfb2l623ssuXl5Y98/xpTk7U5Uy0NcdY6hexvajqstb/tGiJ5eXkIDw/HzJkzzUb+CwoKYDAYEBYWZmoLCwvDpk2bUFlZCW9vcWXKZDJxA4We94/yiR5k9PGxbHmhr7d0vY1cVtDgWmNqsjZnqqUhTlonB9bdy6MG1oWya4hER0fX267VaqFQKMxON2vTpg0qKipQUlICf39/e5VIRA5QWlqKmzdvoqKiwtGlNHkSicSqn6lOcXZWWVkZpFKpWVvNtMFgcERJRGQnpaWluHHjBtq1awe5XA4PDw9Hl9RkVVdXo6ysDFevXkVVVZVV1ukUV6zLZLI6YVEzzSvUiZq2mzdvol27dvDx8WGA2JiHhwd8fHzQrl27OmPTYjlFiAQEBKC0tNQsSLRaLaRSKRQKhUNqcvorMO3gUcfHyyus802G3FtFRQW/LNqZXC63Wog4xeGs4OBgSCQSqNVq9O3bFwBw6tQphISEiB5UbywPAE8u2C9q2Z2XbgEAogUuL/T1lq7XWss+TNG74s+cI6qNPRD7sub77RQ9EblcjqioKCxbtgxnzpzBkSNHkJmZiZiYGEeXRkREDXCKEAGAxMREdO3aFePHj8fSpUsRFxeHoUOHOrosIiJB1q9fj3HjxjVqHQsWLMC8efMAAOnp6XjjjTesUZpNOexw1vmaO5n+j1wuR2pqKlJTUx1UERGRYy1atMjRJVjMKcZEiIgIpruVuxKnOZxFRORKCgsL8cYbb6B79+6YOHEi/lvr0RF5eXkYNWoUunXrBpVKZXYncgD46KOP8Ic//AGhoaGIiYmBRqMBYH4460ENrfP69euIjY1Fz5490adPHyQmJuLXX3+1wU9dF0OEiMhCBoMBU6dOxe9+9zt8+umnGDhwIHbt2gXg/uUJU6dOxbBhw7Bv3z7ExcUhJSXFdPPYXbt2Yf369Zg7dy727t2Ltm3bYsaMGQ2ecvuodS5fvhze3t7Ys2cPMjMzoVarkZGRYfs3AjycRUTO6C9/ATIz7bvNSZMAgWeEnjhxArdv30ZycjJ8fX0RFBSEb7/9Frdv30ZOTg769u2L8ePHAwA6dOiAS5cuYfv27RgwYAB27tyJcePGITIyEgCQlJSETZs24d69ew/d3qPWefXqVXTu3Bnt2rWDVCrFxo0b7XbaNEOEiMhChYWFaN++PXx9fU1tSqUSX331FS5duoSvvvoKobUer11ZWYlWrVoBADQaDaZPn26a5+fnh/nz5ze4vUetc9asWZg7dy6OHDmCiIgIvPzyy3Y7u5UhQkTOJyZGcK/AUR48/FRzYXRlZSVUKhVmzJhhNt/zf3cHl0gkFm/rUescOHAgjh49isOHD+PYsWNITEzE8ePH8e6771q8LUtxTISIyEKdOnXC5cuXcefOHVPbuXPnAAAdO3ZEUVEROnToYPpz/Phx7N69G8D9Q1E1rwXuP08pPDwcFy5ceOj2HrXO9evXo7i4GK+99ho2btyIlJQUfPbZZ7b40etgiBARWahfv34IDAzEwoULUVhYiN27d+PgwYMAgNGjRyM/Px9r165FUVERDhw4gNWrVyMgIAAAEBMTg48++ggHDx5EUVERli5dihYtWuDpp59+6PYetc5Lly5h+fLlOHfuHC5duoRDhw4hJCTE9m8EGCJERBaTSCTYsmUL7t27h5EjRyI3NxejR48GALRr1w6bN2/GiRMnEBkZidTUVMycOdM0f/jw4Zg2bRpWrlyJESNGoKSkBB988IHp0FR9HrXO5ORkBAQEYMKECRg5ciSqqqqwdu1a278R4JgIEZEo7du3x/bt2+ud99xzz2HPnj0PXXbKlCmYMmVKnfbaYxgzZ87EzJkzBa2zdevW+POf/yy0dKtiT4SIiERjiBARkWgMESIiEo0hQkREojFEiMjhrPWoVhLGmu83Q4SIHEoikaCsrMzRZbiVsrIyq91biyFCRA7l7++Pq1evQqfTsUdiY9XV1dDpdLh69arVQoTXiRCRQzVv3hwAcO3aNVRUVDi4mqZPIpEgICAAV69etcr6GCJE5HDNmzc3hQnZh7VChIeziIhINIYIERGJxhAhIiLRGCJERCQaQ4SIiERjiBARkWgMESIiEo0hQkREojFEiIhINIYIERGJxhAhIiLRGCJERCQaQ4SIiERzibv4GgwGJCQk4ObNm5DL5Vi9ejVatWrl6LKIiNyeS/RE9u/fjyeeeAIff/wxVCoVtmzZ4uiSiIgILtITGTFiBCorKwEAxcXFaN26tYMrIiIiwEVCBAC8vb0xdepUnD17FpmZmY4uh4iI4CKHs2ps2bIFO3bswOzZsx1dChERwUVCJCcnBzk5OQAAHx8feHq6RNlNXnlFlVttl4jqcsjhLIPBgJEjR2LhwoXo16+fqW3FihU4cOAApFIpJkyYgClTpgAAIiMjkZCQgM8//xxGoxEpKSmOKJse8JjECycv3QIARC/Yb7ftFr2rstu2iKhhdg8RvV6P+Ph4XLx40aw9LS0NarUaWVlZKC4uRkJCAgIDA6FSqaBQKLB582Z7l0pERI9g1xApLCxEfHw8qqurzdp1Oh1yc3ORkZEBpVIJpVKJ2NhYZGdnQ6US/61Tr9cjPz/f4uWeMRrhxUNmTq2+/fp/Oh0A4LKIfW5PzlpneXm5qP8v5Jqstb/tGiJ5eXkIDw/HzJkz0aNHD1N7QUEBDAYDwsLCTG1hYWHYtGkTKisr4e0trkyZTIbg4GDLF2SAOL1696uPz8PnORMnrTM/P9/paiLbaWh/WxIudg2R6Ojoetu1Wi0UCgVkMpmprU2bNqioqEBJSQn8/f3tVSIREVnAKb5yl5WVQSqVmrXVTBsMBkeUREREAjhFiMhksjphUTMtl8sdURIREQngFCESEBCA0tJSsyDRarWQSqVQKBQOrIyIiBriFCESHBwMiUQCtVptajt16hRCQkJED6oTEZHtOUWIyOVyREVFYdmyZThz5gyOHDmCzMxMxMTEOLo0IiJqgNN8zU9MTERycjLGjx8PX19fxMXFYejQoY4ui4iIGuCwEDl//rzZtFwuR2pqKlJTUx1UERERWcopDmcREZFrYogQEZFoDBEiIhKNIUJERKIxRMjlWPOhVHzAFVHjOM0pvkRCPSbxwpP1PARrp4gHZPEBV0SNw54IERGJxhAhIiLRGCJERCQaQ4TcmtiBdQ7IE93HgXVyaw8bpH8UDsgT3WdRT0Sv1+Pvf/87NmzYgP/+9784efIktFqtrWojIiInJ7gn8u9//xsTJ06Ep6cniouLMWLECOzcuRPffPMNPvzwQyiVSlvWSURETkhwTyQlJQUDBgzAF198AYlEAgBYt24dBg8ejHfeecdmBRIRkfMSHCJqtRpjxoyBh4fHbwt7eiI2Nhb5+fk2KY6IiJyb4BDx8fGpd/zjwoULaN68uVWLIiIi1yA4RKKjo7FkyRIcPnwYAKDRaJCbm4slS5Zg1KhRNiuQiIicl+CB9RkzZsDPzw8pKSkoKyvD9OnT0bp1a0ycOBGTJ0+2ZY1EROSkLLpOZNy4cRg7dizKyspQVVWF6upqHsoiInJjgg9nabVaTJ48Ge+99x58fHzg5+eHIUOGYNq0aSgpKbFljURE5KQEh8jSpUsBwGz8IycnB5WVlUhJSbF+ZURE5PQEH8769ttvsXv3brRv397U9uSTT2LhwoWIjo62SXFEzqq8ogqPSbys/loiVyM4RHx9fXHlyhV07NjRrP3GjRumiw+J3IUl99zifbaoKRMcIqNGjcKiRYswe/ZshISEAADOnTuH9PR0jBgxwmYFErk6IT0R9lbIVQkOkTfffBNGoxFr1641DaS3atUKMTExmDJlis0KJHJ1D/Za6nuML3sr5KoEh4inpyfmzJmDOXPmoKSkBFKpFM2aNbNlbURE5OQsuk5Eo9Hgp59+QmVlJaqrq83m8ap1IiL3IzhEtmzZgnXr1kGhUMDX19dsnoeHB0OEiMgNCQ6RnTt3Yu7cuZg2bZot6yEiIhci+GLD0tJSDB482Ja1ELmtRz2znc90J2cluCfyxz/+ETt37sT8+fPNnilCRI33qOtOePYWOSvBIXL79m0cOnQI+/btQ7t27epcYJiTk2P14oiIyLkJDpGnnnoK06dPt2UtRETkYiy62LBGZWUlvLy87HZYq7y8HAkJCbh16xYqKyuxYMEChIaG2mXbRET0cIIH1oH7h6wGDRqEHj164MqVK0hKSsK6detgNBptVR8AIDc3F506dUJOTg5WrVqFlStX2nR7REQkjOAQycrKwrZt2xAXFwdv7/sdmPDwcOzZswfvvfeezQoEgJEjR5qenlhVVcUbPhIROQnBIbJz504sX74cUVFRpsNYr7zyCtLS0rB3716bFQgAzZo1g4+PD27duoWEhATMnTvXptsjciUPO/2XpwWTPQgeEykuLsaTTz5Zp71t27YoLS21Zk310mg0mDNnDuLj49GnTx+bb4/IVTzs9GCeFkz2ILgn0qNHD+zZs8eszWg0Ytu2bejWrZvVC6vt6tWriIuLwzvvvIMXX3zRptsickbsVZCzEtwTWbx4MaZMmYIvv/wSBoMBS5cuRVFREQwGA7Zt22bRRg0GA0aOHImFCxeiX79+prYVK1bgwIEDkEqlmDBhgukW8xs3bkRZWRnS0tIAAC1btsSGDRss2iaRK2voYkT2OMiRBIdIUFAQDh48iH379kGj0aCqqgqDBg3C8OHD69yQsSF6vR7x8fG4ePGiWXtaWhrUajWysrJQXFyMhIQEBAYGQqVSYdWqVcJ/IiIishvBITJ8+HCsWbOmUXfrLSwsRHx8fJ3byOt0OuTm5iIjIwNKpRJKpRKxsbHIzs6GSiX+W5Zer0d+fr7Fyz1jNMLL06Kzn4mckiW//+Xl5aL+v5Brstb+Fhwid+7cgZdX4x7fmZeXh/DwcMycORM9evQwtRcUFMBgMCAsLMzUFhYWhk2bNqGystJ0SrGlZDIZgoODLV+QAUJNhCW///n5+eL+v5BLamh/WxIuFvVEJk2ahGHDhqFdu3aQyWRm84X0UKKjo+tt12q1UCgUZuts06YNKioqUFJSAn9/f6FlEhGRHQkOkc8//xwSiQQHDhyoM6+xD6UqKyuDVCo1a6uZNhgMotdLRES2JThEli1bhp49e1o0iC6UTCarExY103K53OrbIyIi6xB88H/evHm4evWqTYoICAhAaWmpWZBotVpIpVIoFAqbbJOIiBpPcIh07twZeXl5NikiODgYEokEarXa1Hbq1CmEhISIHlQncnf1XaAotI1IKMGf0L6+vlixYgXS09PrHVhvzEOp5HI5oqKisGzZMrz77rvQarXIzMzEihUrRK+TyN3Vd4Fi0buqetuIxBIcIiEhIQgJCbFZIYmJiUhOTsb48ePh6+uLuLg4DB061GbbIyKixhP1UCprOH/+vNm0XC5HamoqUlNTrbodIiKyHcEhkpCQ0OD8mvtaERGR+xA8sO7l5WX2p7q6GpcvX8bBgwfRtm1bW9ZIRDZUM7Be++plDraTUIJ7Ig+7CWJWVhbOnTtntYKIyL4eNgBPJESjbxI1aNAgHD582Bq1EBGRixHcEzEajXXa7t27h+3bt6Nly5ZWLYqIiFyD4BB59tlnTc9Wr00mkyElJcWqRRERkWsQHCJ/+ctfzKY9PDwgkUjw9NNPo1mzZlYvjIiInJ/gMZE+ffrA29sbnp6e6NOnD3r37o2vvvoKGo3GlvURkQM8eHYWz9aihxEcInv27MGECRPMLhK8du0aYmJi8Nlnn9mkOCJyjJoztmr+PCZp3APpqOkSHCIZGRlYtWoVxowZY2pbtWoVVq5ciQ0bNtikOCJyTuypUA3BYyJarbbee2cplUpcv37dqkURkXMpr6gy6408eG0JrytxX4J7Il27dsX27dtRXV1t1p6Tk4MuXbpYvTAich4PHt4iqiG4J5KYmIiJEyfi6NGjptsjFBQUQKfTYfPmzTYrkIiInJdF14kcOHAAn332GTQaDSQSCcLDwzF8+HCe4kvk5mof7nrw0Bc1bRY9NvDnn39G586dTYPr6enp0Gg06N69u02KIyLXUHuMhOMj7oWn+BIRkWiCeyI1p/iqVL99y1i1ahXCw8OxYcMGPoWQiMgNCe6J8BRfIhKi9jUjvH6k6eMpvkRkVbVPB+YAe9PHU3yJiEg0wSESHByMbdu24euvv8bp06fx1FNP8RRfIiI398gQ0ev12LRpE3bv3o2SkhLT4ayffvoJo0aNgkQisXmRRETknBoMEb1ej7Fjx+LGjRuYNGkSevXqhebNm+PmzZs4c+YMtm/fjpMnTyI7OxtSqdReNRMRkZNoMES2bt2K8vJy7N+/H35+fqb2jh07om/fvoiOjsa4ceOwbds2zJgxw+bFEhGRc2nw7Kz9+/fjrbfeMguQ2vz8/DB37lzs27fPJsURkWvj6b5NX4M9kWvXrqFz584NruCZZ57hdSJEVC/eDqXpa7An0qJFC1y7dq3BFVy5cgWtW7e2alFEROQaGgyRl156Cenp6TAajfXONxqNeP/99/Hyyy/bpDgiInJuDYbIrFmz8MsvvyAmJgbHjh3D7du3YTQacePGDRw5cgSjRo3C9evXMW3aNHvVS0QuypLxkZr5HEdxfg2OibRq1Qo7duzA8uXLMX36dLNbnnh5eWHw4MFITExEixYtbF4oEbk2S8ZHal7LcRTn98iLDQMCAvD++++jpKQEP/30E+7cuQOFQoGuXbuiZcuW9qiRiJqwmodY8WFWrknwbU9atWqF559/3pa1EJEbYq/DtQm+iy8REdGDXDJEDh8+jLffftvRZRARuT2LnrHuDFJTU/Gvf/0LSqXS0aUQEbk9l+uJdOvWDcnJyY4ug4iI4IIhMmTIEHh4eDi6DCIigguGCBE1Tbyw0DUxRIjIKdR+Nju5DoeGiMFgQGRkJE6cOGHWlpSUhN69eyM8PBxbt251YIVEZAu27nXwtin247Czs/R6PeLj43Hx4kWz9rS0NKjVamRlZaG4uBgJCQkIDAyESvXbhUh9+/ZF37597V0yEVmJrW8RzwsY7cchIVJYWIj4+Hize3EBgE6nQ25uLjIyMqBUKqFUKhEbG4vs7GyzEBFKr9cjPz/f4uWeMRrh5ckjfUTOQMz/4eDg4EYt7w7Ky8ut8t44JETy8vIQHh6OmTNnokePHqb2goICGAwGhIWFmdrCwsKwadMmVFZWwtvbsnJlMpnZL5NgDBAipyHq/7AVl2+q8vPzH/reWBIuDgmR6Ojoetu1Wi0UCgVkMpmprU2bNqioqEBJSQn8/f3tVSIROSnesNG5ONVX7rKyMkilUrO2mmmDweCIkojIydSMdzBAnINThYhMJqsTFjXTcrncESUREVEDnCpEAgICUFpaahYkWq0WUqkUCoXCgZURkSMIOVWXp/M6llOFSHBwMCQSCdRqtant1KlTCAkJsXhQnYhcn5BDVzy85VhOFSJyuRxRUVFYtmwZzpw5gyNHjiAzMxMxMTGOLo2IiOrhdF/vExMTkZycjPHjx8PX1xdxcXEYOnSoo8siIifDs7Ocg8ND5Pz582bTcrkcqampSE1NdVBFROQKeFW6c3Cqw1lERORaGCJE5PR45pXzYogQkdPjbeKdF0OEiIhEY4gQEZFoDBEiarJqX83+sH9T4zBEiKjJqn01+8P+TY3DECEiItEYIkREJBpDhIiIRGOIEFGTUHvA3BrLiFmfO2KIEFGTUHvA3NJlLJ1Hv2GIEBGRaAwRIiISjSFCRESiMUSIiEg0hggRNXm1z7J68Iyr+m6BwrOyhGOIEFGTV/ssqwfPuKrvFig8K0s4hggREYnGECEiItEYIkREJBpDhIiIRGOIEBGRaAwRIiISjSFCRESieTu6ACIiZ1BzgWFD14g87DX1XZzoLteaMESIiCDsQ7+h28a7Kx7OIiIi0RgiREQkGkOEiIhEY4gQEZFoDBEiIhKNIUJERKK5xCm+RqMRycnJuHDhAiQSCd555x20b9/e0WUREbk9l+iJfPHFF6iqqsLOnTsxe/ZspKWlObokIiKCi4TI6dOn0b9/fwBAr169cPbsWQdXREREgIuEyL179+Dn52earq6udmA1RERUwyVCpFmzZvj1119N015e7nuLASIiZ+ISIdKzZ08cO3YMAJCXl4fg4GAHV0RERICDQsRgMCAyMhInTpwwa0tKSkLv3r0RHh6OrVu3muYNGjQInp6eiI6Oxpo1a5CQkOCIsomI6AF2P8VXr9cjPj4eFy9eNGtPS0uDWq1GVlYWiouLkZCQgMDAQKhUKnh6emL58uWitpWfn2/xcs8YjfDydIlOGhFZUXlFVZ078tb+DAkODkZ5RZXZuKxc6l3vsr+W6eH5v0PvxqrfbhV/uegS/u/Jp0zTtV9zueiSqb3mNbVfXzP/wWkAaNOmDf7zn/88dH6dn7W8XNTn44PsGiKFhYWIj4+vMzCu0+mQm5uLjIwMKJVKKJVKxMbGIjs7GyqVSvT2ZDKZuENfDBAit/SYxAtPLtiPond/+9x58DPkwZCpef2D7b5yWa2p3z5qH/6Z5F3vvNptD85/cPrxxx9vcH5t+fn5D51vSbjY9dMyLy8P4eHh+OSTT8zaCwoKYDAYEBYWZmoLCwvD2bNnUVlZac8SiYjIAnbtiURHR9fbrtVqoVAoIJP9ltxt2rRBRUUFSkpK4O/vb68SiYjIAk5x3KasrAxSqdSsrWbaYDA4oiQiIhLAKUJEJpPVCYuaablc7oiSiIhIAKcIkYCAAJSWlpoFiVarhVQqhUKhcGBlRETUEKcIkeDgYEgkEqjValPbqVOnEBISAm9vl7jRMBGRW3KKEJHL5YiKisKyZctw5swZHDlyBJmZmYiJiXF0aURE1ACn+ZqfmJiI5ORkjB8/Hr6+voiLi8PQoUMdXRYRETXAo7oJ3xL3hx9+MDttmIiIHk2v16NHjx6CXtukQ4SIiGzLKcZEiIjINTFEiIhINIYIERGJxhAhIiLRGCJERCQaQ4SIiERjiBARkWgMERLl8OHDePvttx1dBtlQeXk5Zs2ahTFjxuD11183u7cdNT0GgwFz5szB6NGjMXnyZJSUlAhajiFCFktNTcWaNWvqPOaYmpbc3Fx06tQJOTk5WLVqFVauXOnoksiG9u/fjyeeeAIff/wxVCoVtmzZImg5p7l3FrmObt264YUXXsDu3bsdXQrZ0MiRI+Hpef97ZlVVFSQSiYMrIlsaMWKE6XHkxcXFaN26taDl2BMhiw0ZMgQeHh6OLoNsrFmzZvDx8cGtW7eQkJCAuXPnOroksjFvb29MnToVH330ESIiIgQtwxAhoofSaDSYMGECZs+ejT59+ji6HLKDLVu2YMeOHZg9e7ag1/NwFhHV6+rVq4iLi8Pq1avRtWtXR5dDNpaTkwMAGDNmDHx8fEyHMh+FPRE3ZzAYEBkZiRMnTpi1JSUloXfv3ggPD8fWrVsdWCFZi6X7euPGjSgrK0NaWhrGjRuHWbNmOaJsEsnS/R0ZGYljx45h7NixmDNnDlJSUgRthz0RN6bX6xEfH4+LFy+ataelpUGtViMrKwvFxcVISEhAYGAgVCqV6TV9+/ZF37597V0yiSRmX69atcpB1VJjidnfCoUCmzdvtnhb7Im4qcLCQrz22mu4fPmyWbtOp0Nubi4WLlwIpVKJgQMHIjY2FtnZ2Q6qlBqL+9q92Ht/M0TcVF5eHsLDw/HJJ5+YtRcUFMBgMCAsLMzUFhYWhrNnz5pO/yPXwn3tXuy9v3k4y01FR0fX267VaqFQKMweK9ymTRtUVFSgpKQE/v7+9iqRrIT72r3Ye3+zJ0JmysrKIJVKzdpqpg0GgyNKIhvhvnYvttrfDBEyI5PJ6vxC1UzL5XJHlEQ2wn3tXmy1vxkiZCYgIAClpaVmv2xarRZSqRQKhcKBlZG1cV+7F1vtb4YImQkODoZEIjG7Y+upU6cQEhICb28OoTUl3NfuxVb7myFCZuRyOaKiorBs2TKcOXMGR44cQWZmJmJiYhxdGlkZ97V7sdX+5tcNqiMxMRHJyckYP348fH19ERcXh6FDhzq6LLIB7mv3Yov97VHNh0IQEZFIPJxFRESiMUSIiEg0hggREYnGECEiItEYIkREJBpDhIiIRGOIEBGRaAwRalIGDBiAzp07m/506dIFffr0wZ/Kjd3cAAAHR0lEQVT+9Cdcv3690ev/9ttv0blzZ7s8b0Oj0SA+Ph7h4eEIDQ3Fq6++ioMHD9p8uzV++eUXfPnll3bbHrkmhgg1OQsWLMDx48dx/PhxHD16FOvXr8fFixcxf/78Rq87NDQUx48ft/m9pdRqNV599VU89thj2Lx5M/bu3QuVSoW33noLubm5Nt12jYULF5rdZ4moPrztCTU5zZo1w+OPP26aDggIwKxZs/D222/j7t278PPzE71uqVRqtm5bqK6uxoIFC/DKK69g5cqVpvYJEybg3r17WLt2LYYNG8bbtZNTYE+E3ELNw3c8Pe//yt+9exfz589HWFgYwsPDkZSUhHv37gEAXnvtNaxfv95s+djYWKSmptY5nFVcXIwZM2agR48eePHFF7FmzRoYDAbcvn0bwcHBKCgoAHA/GPr06YOUlBTTOlesWIHFixfXqfX06dMoKirC5MmT68wbN24ctmzZYno6nUajweTJk9GzZ09EREQgPT0dRqMRAJCeno433njDbPkBAwZg165dpnW9//77mDx5Mrp3745hw4bh6NGjAO735r777jtkZGRg3LhxlrzV5GYYItTkFRUVYcOGDejfvz98fX0B3D9Uc/v2beTk5GDz5s34+eefkZiYCAAYOnQoDh06ZFr+zp07OHnyJFQqldl6q6urERcXB4VCgT179mDNmjX48ssvsW7dOrRs2RIhISE4efIkAOD8+fMoLS3F6dOnTcufOHECzz//fJ16CwoK4Ovri6CgoDrzFAoFunfvDk9PT5SUlGD06NHw9/fHrl27kJycjJycHGRmZgp+b7Zs2QKVSoVPP/0UHTt2xKJFi1BVVYVFixYhNDQU48ePR3p6uuD1kfthiFCTs3z5coSGhiI0NBRdu3bFyJEjERISgtWrVwMALl++jC+++AJpaWno0qULlEolUlNTcejQIVy/fh1Dhw5FUVERCgsLAQCHDx9GYGAglEql2XZOnjyJK1euICUlBUFBQejVqxeWLFmC7OxsVFZWIiIiAt999x0A4LvvvsMLL7yA8+fPQ6fTobi4GJcvX0a/fv3q1H/37l00a9bskT/nP/7xD8hkMixfvhxBQUEYOHAgZs+ejW3btgl+r55//nmMHDkSQUFBmDFjBrRaLW7cuAE/Pz9IJBLI5XK0aNFC8PrI/XBMhJqcN998E6+88gp0Oh02btyIa9euYe7cuWjZsiWA+4eAqqur8dJLL9VZtqioCM899xx69eqFQ4cO4emnn8aBAwfqvV22RqNBaWkpevXqZWqrrq5GRUUFrl27hoiICHz88ccwGo34/vvvMWTIEFy4cAE//vgjrl27htDQ0HrDomXLlrh79+4jf06NRoNnn30WEonE1BYaGorbt2+jpKRE0HvVvn17079rarHHmWfUdDBEqMlp1aoVOnToAABYv349Ro0ahbi4OOTm5kIikaCqqgo+Pj7Yu3dvnWVrBs0jIyOxY8cOjB07Ft988w0SEhLqvLayshIdOnTA5s2b68xr27YtAgMDYTQaUVBQgO+//x4JCQkICwvDqVOn8PPPP6N///711t+1a1fodDpcvHgRnTp1Mpt369YtzJs3D0lJSaZxkdpqxkOMRiM8PDzqrbm22gFUg0+HIEvwcBY1aVKpFCkpKSgoKEBWVhYAoGPHjtDpdKiqqkKHDh1MgbNq1SrT4PrgwYNRWFiInTt3omPHjnU+zGvWU1xcjBYtWpjWo9VqsXbtWlRXV8Pb2xu///3vsWPHDkilUrRv3x69evVCXl4evv7663rHQwDg2WefxTPPPFPv2EZOTg7OnDmDJ554AkFBQTh37hwqKipM89VqNVq0aIFWrVpBIpGYfh4A0Ol0gnsoREIxRKjJ69atG0aNGoUPPvgAN27cQFBQEPr374+EhAT8+OOPKCgowPz583Hr1i34+/sDAFq0aIF+/frhgw8+eOiT3yIiItC+fXvMmzcPBQUFUKvVWLx4MTw9PU29hIiICPz1r381HfLq3bs3Tp48CW9vb3Tp0uWhNS9duhT79+9HUlIS8vPzodFokJ6ejoyMDCxevBhyuRyRkZEwGo1YsmQJNBoNjhw5gvT0dERHR8PT0xNdu3bFhQsX8Le//Q1FRUVYsmSJ6ew0IXx9fXH58mXcunVL8DLkfhgi5Bbmzp0LiUSC1NRUAEBaWho6dOiASZMmYezYsfD398emTZvMllGpVNDpdHXOyqrh5eWFTZs2wcvLC9HR0Zg+fTp69epldhpvREQEKioqEBYWBgAICgpCy5YtERERUe/hphq9evVCdnY2tFotJk2ahFGjRuH48eNIT0/HiBEjANz/kN+2bRt++eUXREVFYfny5YiJicHs2bMBAM899xwmT56MlJQUvP7663jqqafQs2dPwe/Z66+/jq+//hpTpkwRvAy5Hz4el4iIRGNPhIiIRGOIEBGRaAwRIiISjSFCRESiMUSIiEg0hggREYnGECEiItEYIkREJNr/A49vUCEZxlnkAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e833d9d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### Visualize the deciles on the histogram\n",
    "sns.set_style('whitegrid')\n",
    "fig, ax = plt.subplots()\n",
    "biz_df['review_count'].hist(ax=ax, bins=100)\n",
    "for pos in deciles:\n",
    "    handle = plt.axvline(pos, color='r')\n",
    "ax.legend([handle], ['deciles'], fontsize=14)\n",
    "ax.set_yscale('log')\n",
    "ax.set_xscale('log')\n",
    "ax.tick_params(labelsize=14)\n",
    "ax.set_xlabel('Review Count', fontsize=14)\n",
    "ax.set_ylabel('Occurrence', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-5. Deciles of the review counts in the Yelp reviews dataset. Note that both x- and y-axes are in log scale.**\n",
    "\n",
    "为了计算分位数和映射数据到分位数箱，我们可以使用 `Pandas` 库。 `pandas.DataFrame.quantile` 和 `pandas.Series.quantile` 用于计算分位数。`pandas.qcut`将数据映射到所需数量的分位数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-5:按分位数分箱计数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 2, 1, 0, 3], dtype=int64)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### Continue example Example 2-3 with large_counts\n",
    "import pandas as pd\n",
    "### Map the counts to quartiles\n",
    "pd.qcut(large_counts, 4, labels=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.25     122.0\n",
       "0.50     926.0\n",
       "0.75    8286.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### Compute the quantiles themselves\n",
    "large_counts_series = pd.Series(large_counts)\n",
    "large_counts_series.quantile([0.25, 0.5, 0.75])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对数转换\n",
    "\n",
    "在“量化或装箱”中，我们简要地介绍了把计数的对数映射到指数宽度箱的概念。让我们现在再看一看。\n",
    "\n",
    "对数函数是指数函数的逆。它定义为$\\log _{a}\\left({a}^{x}\\right)=X$\n",
    "其中 $a$ 为正常数, $x$ 可以是任何正数。由于$a^0=1$,我们有$\\log _{{a}}(1)=0$。这意味着对数函数将小范围的数字 (0、1) 映射到负数的整个范围$(-\\infty, 0)$。函数$\\log _{{a}}(10)=0$ 将 $[1、10]$ 映射到 $[0、1]$、将$[10、100]$ 映射到 $[1、2]$ 等等。换言之, 对数函数压缩大数的范围, 并扩展小数的范围。越大的 $x$ , $log(x)$的增量越慢。通过查看 $log$ 函数的图像, 可以更容易地消化这一点。(见图2-6)。\n",
    "\n",
    "\n",
    "![The log function](images/chapter2/2-6.png)\n",
    "\n",
    "**Figure 2-6. The log function compresses the high numeric range and expands the low range. Note how the horizontal x values from 100 to 1000 got compressed into just 2.0 to 3.0 in the vertical y range, while the tiny horizontal portion of x values less than 100 are mapped to the rest of the vertical range.**\n",
    "\n",
    "对数变换是处理具有重尾分布的正数的有力工具。（重尾分布在尾部范围内的概率比高斯分布的概率大）。它将分布在高端的长尾压缩成较短的尾部，并将低端扩展成较长的头部。图2-7比较d对数转换之前和之后的YELP商户评论计数的直方图。Y轴现在都在正常（线性）尺度上。在$(0.5,1)$范围内的底部图中增加的仓间隔是由于在1和10之间只有10个可能的整数计数。请注意，原始审查计数非常集中在低计数区域，离群值在4000以上。对数变换后，直方图不集中在低端，更分散在X轴上。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-6:可视化对数变换前后评论数分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(23.625,0.5,'Occurrence')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e8353e208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(2,1)\n",
    "fig.tight_layout(pad=0, w_pad=4.0, h_pad=4.0)\n",
    "biz_df['review_count'].hist(ax=ax1, bins=100)\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_xlabel('review_count', fontsize=14)\n",
    "ax1.set_ylabel('Occurrence', fontsize=14)\n",
    "biz_df['log_review_count'] = np.log(biz_df['review_count'] + 1)\n",
    "biz_df['log_review_count'].hist(ax=ax2, bins=100)\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_xlabel('log10(review_count))', fontsize=14)\n",
    "ax2.set_ylabel('Occurrence', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-7. Comparison of Yelp business review counts before (top) and after (bottom) log transformation.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一个例子是来自 UC Irvine 机器学习库的在线新闻流行数据集。以下是有关数据集的相关统计信息。\n",
    "\n",
    "### 在线新闻流行数据集的统计\n",
    "\n",
    "- 该数据集包括 MasHabor 在两年的时间内出版的 39797 个新闻文章的60个特征。\n",
    "- 引证: K. Fernandes, P. Vinagre 和 P. Cortez . 一种用于预测在线新闻的流行程度的主动智能决策支持系统。2015 第十七届 EPIA 活动, 葡萄牙人工智能会议论文集, 9月, 葡萄牙科英布拉。\n",
    "\n",
    "目的是利用这些特征来预测文章在社交媒体上的用分享数量表示的流行度。在本例中, 我们将只关注一个特征——文章中的单词数。图2-8 显示了对数转换前后特征的直方图。请注意, 在对数转换后, 分布看起来更高斯, 除了长度为零的文章 (无内容) 的断裂。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('data/OnlineNewsPopularity.csv', delimiter=', ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "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>url</th>\n",
       "      <th>timedelta</th>\n",
       "      <th>n_tokens_title</th>\n",
       "      <th>n_tokens_content</th>\n",
       "      <th>n_unique_tokens</th>\n",
       "      <th>n_non_stop_words</th>\n",
       "      <th>n_non_stop_unique_tokens</th>\n",
       "      <th>num_hrefs</th>\n",
       "      <th>num_self_hrefs</th>\n",
       "      <th>num_imgs</th>\n",
       "      <th>...</th>\n",
       "      <th>min_positive_polarity</th>\n",
       "      <th>max_positive_polarity</th>\n",
       "      <th>avg_negative_polarity</th>\n",
       "      <th>min_negative_polarity</th>\n",
       "      <th>max_negative_polarity</th>\n",
       "      <th>title_subjectivity</th>\n",
       "      <th>title_sentiment_polarity</th>\n",
       "      <th>abs_title_subjectivity</th>\n",
       "      <th>abs_title_sentiment_polarity</th>\n",
       "      <th>shares</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>http://mashable.com/2013/01/07/amazon-instant-...</td>\n",
       "      <td>731.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>219.0</td>\n",
       "      <td>0.663594</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.815385</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.7</td>\n",
       "      <td>-0.350000</td>\n",
       "      <td>-0.600</td>\n",
       "      <td>-0.200000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>-0.187500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.187500</td>\n",
       "      <td>593</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>http://mashable.com/2013/01/07/ap-samsung-spon...</td>\n",
       "      <td>731.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>255.0</td>\n",
       "      <td>0.604743</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.791946</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.7</td>\n",
       "      <td>-0.118750</td>\n",
       "      <td>-0.125</td>\n",
       "      <td>-0.100000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>http://mashable.com/2013/01/07/apple-40-billio...</td>\n",
       "      <td>731.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>211.0</td>\n",
       "      <td>0.575130</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.663866</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.466667</td>\n",
       "      <td>-0.800</td>\n",
       "      <td>-0.133333</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>http://mashable.com/2013/01/07/astronaut-notre...</td>\n",
       "      <td>731.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>531.0</td>\n",
       "      <td>0.503788</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.665635</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.136364</td>\n",
       "      <td>0.8</td>\n",
       "      <td>-0.369697</td>\n",
       "      <td>-0.600</td>\n",
       "      <td>-0.166667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>http://mashable.com/2013/01/07/att-u-verse-apps/</td>\n",
       "      <td>731.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>1072.0</td>\n",
       "      <td>0.415646</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.540890</td>\n",
       "      <td>19.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.220192</td>\n",
       "      <td>-0.500</td>\n",
       "      <td>-0.050000</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.136364</td>\n",
       "      <td>0.045455</td>\n",
       "      <td>0.136364</td>\n",
       "      <td>505</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 61 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                 url  timedelta  \\\n",
       "0  http://mashable.com/2013/01/07/amazon-instant-...      731.0   \n",
       "1  http://mashable.com/2013/01/07/ap-samsung-spon...      731.0   \n",
       "2  http://mashable.com/2013/01/07/apple-40-billio...      731.0   \n",
       "3  http://mashable.com/2013/01/07/astronaut-notre...      731.0   \n",
       "4   http://mashable.com/2013/01/07/att-u-verse-apps/      731.0   \n",
       "\n",
       "   n_tokens_title  n_tokens_content  n_unique_tokens  n_non_stop_words  \\\n",
       "0            12.0             219.0         0.663594               1.0   \n",
       "1             9.0             255.0         0.604743               1.0   \n",
       "2             9.0             211.0         0.575130               1.0   \n",
       "3             9.0             531.0         0.503788               1.0   \n",
       "4            13.0            1072.0         0.415646               1.0   \n",
       "\n",
       "   n_non_stop_unique_tokens  num_hrefs  num_self_hrefs  num_imgs   ...    \\\n",
       "0                  0.815385        4.0             2.0       1.0   ...     \n",
       "1                  0.791946        3.0             1.0       1.0   ...     \n",
       "2                  0.663866        3.0             1.0       1.0   ...     \n",
       "3                  0.665635        9.0             0.0       1.0   ...     \n",
       "4                  0.540890       19.0            19.0      20.0   ...     \n",
       "\n",
       "   min_positive_polarity  max_positive_polarity  avg_negative_polarity  \\\n",
       "0               0.100000                    0.7              -0.350000   \n",
       "1               0.033333                    0.7              -0.118750   \n",
       "2               0.100000                    1.0              -0.466667   \n",
       "3               0.136364                    0.8              -0.369697   \n",
       "4               0.033333                    1.0              -0.220192   \n",
       "\n",
       "   min_negative_polarity  max_negative_polarity  title_subjectivity  \\\n",
       "0                 -0.600              -0.200000            0.500000   \n",
       "1                 -0.125              -0.100000            0.000000   \n",
       "2                 -0.800              -0.133333            0.000000   \n",
       "3                 -0.600              -0.166667            0.000000   \n",
       "4                 -0.500              -0.050000            0.454545   \n",
       "\n",
       "   title_sentiment_polarity  abs_title_subjectivity  \\\n",
       "0                 -0.187500                0.000000   \n",
       "1                  0.000000                0.500000   \n",
       "2                  0.000000                0.500000   \n",
       "3                  0.000000                0.500000   \n",
       "4                  0.136364                0.045455   \n",
       "\n",
       "   abs_title_sentiment_polarity  shares  \n",
       "0                      0.187500     593  \n",
       "1                      0.000000     711  \n",
       "2                      0.000000    1500  \n",
       "3                      0.000000    1200  \n",
       "4                      0.136364     505  \n",
       "\n",
       "[5 rows x 61 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['log_n_tokens_content'] = np.log10(df['n_tokens_content'] + 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-7:可视化在有对数变换和没有对数变换时新闻文章流行度的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(23.625,0.5,'Number of Articles')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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+dGYYHv06CHNqDN69Gh89dVXaNOmTaMFRkREpMtkvV9z7949jROwExERUVWyEqyxsTFUKpW2YyEiImoxZI3kNGjQIPj6+sLd3R1WVlYwMjJSq589e7ZWgiMiqqBLHYceNQiFLn0vVHeyEuylS5dgb2+PO3fuVJk9p7oBKIiIGpouDexQXay6Ejs1HFkJdvPmzRrrrly50mDBEBERtRSyEuzDcnNzsW/fPsTGxuLChQscKpGIiOghshNsWVkZjh07hj179uDHH39ESUkJnJycEBUVpc34iIiIdNIjE2xKSgp2796NuLg43L17F+bm5igrK8PatWurzKxDRNRQ2BGIdJ3GBLtx40bExsbi0qVLsLGxwZgxYzB8+HD07t0b9vb26NChQ2PGSUSPGV3q1ERUHY0JNjIyEjY2NliyZAm8vLw45ysREVEtaMyan3zyCbp06YLAwEC4ubnhvffew/79+5Gfn9+Y8RERtThFJWXVfl3dMukujVewo0aNwqhRo5CXl4fvvvsOcXFx+OCDD9CqVSuUl5fj5MmT6NixIwwNDRszXiIinffwxAC8Fd4yPfK+b5s2bfDqq69i06ZNOHr0KN577z3Y2dkhIiICgwYNQnh4eGPESUREpFNq9R6shYUFJk+ejMmTJyM9PR179+7F/v37tRUbERGRzqpzzyUbGxu88847TLBERETVYNfgBtCxUxe1ZXZSICKiOg2VSOpMWhuxkwJRA+DgEtSSaLyC3blzJwoKChozFiJ6zFX0rq38D+vjpqikDD179lRbJt2kMcGGh4cjNzcXANCzZ88q09QREVHDq/xPRqeAfbyi12EabxF37NgRM2bMQNeuXSGEQGhoaJWJ1issXry4VgdVqVQYO3Ys5s2bh/79+wN4MEPPggULcPz4cZiZmWHmzJkYM2aMtE1KSgoWLlyIlJQU2NraIiQkBL1795bq9+/fj+joaNy6dQv9+/dHeHg42rZtW6u4iIiIGorGK9j169fDzc0N+voPcrCenh5atWpV7ac2iouL8d577+Hy5ctq5QEBAcjNzcXWrVvx9ttvY8GCBTh79iwA4P79+5gyZQocHR2xe/duuLi44K233pJGlTp37hwCAgIwffp0bN++Hfn5+fD3969VXERERA1J4xWspaUl5s2bBwD466+/EBoaijZt2tTrYFeuXMH7778PIYRaeUZGBn78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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e85713320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(2,1)\n",
    "fig.tight_layout(pad=0, w_pad=4.0, h_pad=4.0)\n",
    "df['n_tokens_content'].hist(ax=ax1, bins=100)\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_xlabel('Number of Words in Article', fontsize=14)\n",
    "ax1.set_ylabel('Number of Articles', fontsize=14)\n",
    "\n",
    "df['log_n_tokens_content'].hist(ax=ax2, bins=100)\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_xlabel('Log of Number of Words', fontsize=14)\n",
    "ax2.set_ylabel('Number of Articles', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-8. Comparison of word counts in Mashable news articles before (top) and after (bottom) log transformation.**\n",
    "\n",
    "## 对数转换实战\n",
    "\n",
    "让我们看看在监督学习中对数转换如何执行。我们将使用上面的两个数据集。对于 Yelp 评论数据集, 我们将使用评论的数量来预测商户的平均评级。对于 Mashable 的新闻文章, 我们将使用文章中的字数来预测其流行程度。由于输出是连续的数字, 我们将使用简单的线性回归作为模型。我们在没有对数变换和有对数变换的特色上，使用 Scikit Learn 执行10折交叉验证的线性回归。模型由 R 方评分来评估, 它测量训练后的回归模型预测新数据的良好程度。好的模型有较高的 R 方分数。一个完美的模型得到最高分1。分数可以是负的, 一个坏的模型可以得到一个任意低的负评分。通过交叉验证, 我们不仅得到了分数的估计, 还获得了方差, 这有助于我们判断两种模型之间的差异是否有意义。\n",
    "\n",
    "### 例2-8:使用对数转换 YELP 评论数预测平均商户评级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import json\n",
    "from sklearn import linear_model\n",
    "from sklearn.model_selection import cross_val_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Using the previously loaded Yelp reviews dataframe,\n",
    "## compute the log transform of the Yelp review count.\n",
    "## Note that we add 1 to the raw count to prevent the logarithm from\n",
    "## exploding into negative infinity in case the count is zero.\n",
    "biz_df['log_review_count'] = np.log10(biz_df['review_count'] + 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "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>business_id</th>\n",
       "      <th>categories</th>\n",
       "      <th>city</th>\n",
       "      <th>full_address</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>name</th>\n",
       "      <th>neighborhoods</th>\n",
       "      <th>open</th>\n",
       "      <th>review_count</th>\n",
       "      <th>stars</th>\n",
       "      <th>state</th>\n",
       "      <th>type</th>\n",
       "      <th>log_review_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rncjoVoEFUJGCUoC1JgnUA</td>\n",
       "      <td>[Accountants, Professional Services, Tax Servi...</td>\n",
       "      <td>Peoria</td>\n",
       "      <td>8466 W Peoria Ave\\nSte 6\\nPeoria, AZ 85345</td>\n",
       "      <td>33.581867</td>\n",
       "      <td>-112.241596</td>\n",
       "      <td>Peoria Income Tax Service</td>\n",
       "      <td>[]</td>\n",
       "      <td>True</td>\n",
       "      <td>3</td>\n",
       "      <td>5.0</td>\n",
       "      <td>AZ</td>\n",
       "      <td>business</td>\n",
       "      <td>0.602060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0FNFSzCFP_rGUoJx8W7tJg</td>\n",
       "      <td>[Sporting Goods, Bikes, Shopping]</td>\n",
       "      <td>Phoenix</td>\n",
       "      <td>2149 W Wood Dr\\nPhoenix, AZ 85029</td>\n",
       "      <td>33.604054</td>\n",
       "      <td>-112.105933</td>\n",
       "      <td>Bike Doctor</td>\n",
       "      <td>[]</td>\n",
       "      <td>True</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>AZ</td>\n",
       "      <td>business</td>\n",
       "      <td>0.778151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3f_lyB6vFK48ukH6ScvLHg</td>\n",
       "      <td>[]</td>\n",
       "      <td>Phoenix</td>\n",
       "      <td>1134 N Central Ave\\nPhoenix, AZ 85004</td>\n",
       "      <td>33.460526</td>\n",
       "      <td>-112.073933</td>\n",
       "      <td>Valley Permaculture Alliance</td>\n",
       "      <td>[]</td>\n",
       "      <td>True</td>\n",
       "      <td>4</td>\n",
       "      <td>5.0</td>\n",
       "      <td>AZ</td>\n",
       "      <td>business</td>\n",
       "      <td>0.698970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>usAsSV36QmUej8--yvN-dg</td>\n",
       "      <td>[Food, Grocery]</td>\n",
       "      <td>Phoenix</td>\n",
       "      <td>845 W Southern Ave\\nPhoenix, AZ 85041</td>\n",
       "      <td>33.392210</td>\n",
       "      <td>-112.085377</td>\n",
       "      <td>Food City</td>\n",
       "      <td>[]</td>\n",
       "      <td>True</td>\n",
       "      <td>5</td>\n",
       "      <td>3.5</td>\n",
       "      <td>AZ</td>\n",
       "      <td>business</td>\n",
       "      <td>0.778151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>PzOqRohWw7F7YEPBz6AubA</td>\n",
       "      <td>[Food, Bagels, Delis, Restaurants]</td>\n",
       "      <td>Glendale Az</td>\n",
       "      <td>6520 W Happy Valley Rd\\nSte 101\\nGlendale Az, ...</td>\n",
       "      <td>33.712797</td>\n",
       "      <td>-112.200264</td>\n",
       "      <td>Hot Bagels &amp; Deli</td>\n",
       "      <td>[]</td>\n",
       "      <td>True</td>\n",
       "      <td>14</td>\n",
       "      <td>3.5</td>\n",
       "      <td>AZ</td>\n",
       "      <td>business</td>\n",
       "      <td>1.176091</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              business_id                                         categories  \\\n",
       "0  rncjoVoEFUJGCUoC1JgnUA  [Accountants, Professional Services, Tax Servi...   \n",
       "1  0FNFSzCFP_rGUoJx8W7tJg                  [Sporting Goods, Bikes, Shopping]   \n",
       "2  3f_lyB6vFK48ukH6ScvLHg                                                 []   \n",
       "3  usAsSV36QmUej8--yvN-dg                                    [Food, Grocery]   \n",
       "4  PzOqRohWw7F7YEPBz6AubA                 [Food, Bagels, Delis, Restaurants]   \n",
       "\n",
       "          city                                       full_address   latitude  \\\n",
       "0       Peoria         8466 W Peoria Ave\\nSte 6\\nPeoria, AZ 85345  33.581867   \n",
       "1      Phoenix                  2149 W Wood Dr\\nPhoenix, AZ 85029  33.604054   \n",
       "2      Phoenix              1134 N Central Ave\\nPhoenix, AZ 85004  33.460526   \n",
       "3      Phoenix              845 W Southern Ave\\nPhoenix, AZ 85041  33.392210   \n",
       "4  Glendale Az  6520 W Happy Valley Rd\\nSte 101\\nGlendale Az, ...  33.712797   \n",
       "\n",
       "    longitude                          name neighborhoods  open  review_count  \\\n",
       "0 -112.241596     Peoria Income Tax Service            []  True             3   \n",
       "1 -112.105933                   Bike Doctor            []  True             5   \n",
       "2 -112.073933  Valley Permaculture Alliance            []  True             4   \n",
       "3 -112.085377                     Food City            []  True             5   \n",
       "4 -112.200264             Hot Bagels & Deli            []  True            14   \n",
       "\n",
       "   stars state      type  log_review_count  \n",
       "0    5.0    AZ  business          0.602060  \n",
       "1    5.0    AZ  business          0.778151  \n",
       "2    5.0    AZ  business          0.698970  \n",
       "3    3.5    AZ  business          0.778151  \n",
       "4    3.5    AZ  business          1.176091  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "biz_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R-squared score without log transform: 0.00215 (+/- 0.00329)\n",
      "R-squared score with log transform: 0.00136 (+/- 0.00328)\n"
     ]
    }
   ],
   "source": [
    "## Train linear regression models to predict the average stars rating of a business,\n",
    "## using the review_count feature with and without log transformation\n",
    "## Compare the 10-fold cross validation score of the two models\n",
    "m_orig = linear_model.LinearRegression()\n",
    "scores_orig = cross_val_score(\n",
    "    m_orig, biz_df[['review_count']], biz_df['stars'], cv=10)\n",
    "m_log = linear_model.LinearRegression()\n",
    "scores_log = cross_val_score(\n",
    "    m_log, biz_df[['log_review_count']], biz_df['stars'], cv=10)\n",
    "print(\"R-squared score without log transform: %0.5f (+/- %0.5f)\" %\n",
    "      (scores_orig.mean(), scores_orig.std() * 2))\n",
    "print(\"R-squared score with log transform: %0.5f (+/- %0.5f)\" %\n",
    "      (scores_log.mean(), scores_log.std() * 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从实验的结果来看, 两个简单的模型 (有对数变换和没有对数变换) 在预测目标时同样不好, 而有对数变换的特征表现略差。真令人失望!这并不奇怪, 他们都不是很好, 因为他们都只使用一个功能。但是, 人们本来希望日志转换的功能执行得更好。\n",
    "\n",
    "让我们看看对数转换在线新闻流行数据集上如何表现。\n",
    "\n",
    "### 例2-9:利用经过对数转换在线新闻数据中的词数量预测文章流行度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R-squared score without log transform: -0.00242 (+/- 0.00509)\n",
      "R-squared score with log transform: -0.00114 (+/- 0.00418)\n"
     ]
    }
   ],
   "source": [
    "## Download the Online News Popularirty dataset from UCI, then use\n",
    "## Pandas to load the file into a dataframe\n",
    "\n",
    "## Take the log transform of the 'n_tokens_content' feature, which\n",
    "## represents the number of words (tokens) in a news article.\n",
    "df['log_n_tokens_content'] = np.log10(df['n_tokens_content'] + 1)\n",
    "\n",
    "## Train two linear regression models to predict the number of shares\n",
    "## of an article, one using the original feature and the other the\n",
    "## log transformed version.\n",
    "m_orig = linear_model.LinearRegression()\n",
    "scores_orig = cross_val_score(\n",
    "    m_orig, df[['n_tokens_content']], df['shares'], cv=10)\n",
    "m_log = linear_model.LinearRegression()\n",
    "scores_log = cross_val_score(\n",
    "    m_log, df[['log_n_tokens_content']], df['shares'], cv=10)\n",
    "print(\"R-squared score without log transform: %0.5f (+/- %0.5f)\" %\n",
    "      (scores_orig.mean(), scores_orig.std() * 2))\n",
    "print(\"R-squared score with log transform: %0.5f (+/- %0.5f)\" %\n",
    "      (scores_log.mean(), scores_log.std() * 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "置信区间仍然重叠，但具有对数变换特征的模型比没有对数变换的表现更好。为什么对数转换在这个数据集上更成功？我们可以通过观察输入特征和目标值的散点图来得到线索。如图2-9的底部面板所示，对数变换重塑了$X$轴，将目标值（大于200000个份额）中的大离群值进一步拉向轴的右手侧。这给线性模型在输入特征空间的低端更多的“呼吸空间”。没有对数转换（上部面板），在输入值变化下非常小的情况下，模型有更大的压力下适应非常不同的目标值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-10:可视化新闻流程度预测问题中输入输出相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of Shares')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e84dc7518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig2, (ax1, ax2) = plt.subplots(2, 1,figsize=(10, 4))\n",
    "fig.tight_layout(pad=0.4, w_pad=4.0, h_pad=6.0)\n",
    "ax1.scatter(df['n_tokens_content'], df['shares'])\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_xlabel('Number of Words in Article', fontsize=14)\n",
    "ax1.set_ylabel('Number of Shares', fontsize=14)\n",
    "\n",
    "ax2.scatter(df['log_n_tokens_content'], df['shares'])\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_xlabel('Log of the Number of Words in Article', fontsize=14)\n",
    "ax2.set_ylabel('Number of Shares', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "**Figure 2-9. Scatter plot of number of words (input) vs. number of shares (target) in the Online News dataset. The top plot visualizes the original feature, and the bottom plot shows the scatter plot after log transformation.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将此与应用于YELP评论数据集的相同散点图进行比较。图2-10看起来与图2-9非常不同。在1到5，步长0.5的区间，平均星级是离散的。高评论计数（大致＞2500评论）与较高的平均星级评级相关。但这种关系远不是线性的。没有一种清晰的方法可以根据输入来预测平均星级。从本质上讲，该图表明，评论数及其对数都是平均星级的不良线性预测因子。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(23.625,0.5,'Average Star Rating')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e84d594e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 例2-11。可视化 Yelp 商户评论预测中输入与输出的相关性。\n",
    "fig, (ax1, ax2) = plt.subplots(2,1)\n",
    "fig.tight_layout(pad=0, w_pad=4.0, h_pad=4.0)\n",
    "ax1.scatter(biz_df['review_count'], biz_df['stars'])\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_xlabel('Review Count', fontsize=14)\n",
    "ax1.set_ylabel('Average Star Rating', fontsize=14)\n",
    "\n",
    "ax2.scatter(biz_df['log_review_count'], biz_df['stars'])\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_xlabel('Log of Review Count', fontsize=14)\n",
    "ax2.set_ylabel('Average Star Rating', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-10. Scatter plot of review counts (input) vs. average star ratings (target) in the Yelp Reviews dataset. The top panel plots the original review count, and the bottom panel plots the review count after log transformation.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据可视化的重要性\n",
    "\n",
    "对数变换在两个不同数据集上的影响的比较，说明了可视化数据的重要性。在这里，我们故意保持输入和目标变量简单，以便我们可以很容易地可视化它们之间的关系。如图2-10所示的曲线，立即显示所选择的模型（线性）不可能代表所选择的输入和目标之间的关系。另一方面，人们可以令人信服地在给定平均星级模拟评论数的分布。在建立模型时，最好直观地检查输入和输出之间的关系，以及不同输入特征之间的关系。\n",
    "\n",
    "### 功率变换：对数变换的推广\n",
    "\n",
    "对数变换是一个称为功率变换的变换族的特殊例子。在统计方面，这些是方差稳定的变换。为了理解为什么方差稳定是好的，考虑泊松分布。这是一个方差等于它的平均值的重尾分布。因此，它的质量中心越大，其方差越大，尾部越重。功率变换改变变量的分布，使得方差不再依赖于平均值。例如，假设一个随机变量X具有泊松分布。假如我们使用开平方根变换$X$, $\\widetilde{X}=\\sqrt{X}$的方差大致是恒定的, 而不是等于平均值。\n",
    "\n",
    "![](../images/chapter2/2-11.png)\n",
    "\n",
    "**Figure 2-11. A rough illustration of the Poisson distribution. λ represents the mean of the distribution. As λ increases, not only does the mode of of the distribution shift to the right, but the mass spreads out and the variance becomes larger. The Poisson distribution is an example distribution where the variance increases along with the mean.**\n",
    "\n",
    "平方根变换和对数变换的简单推广称为Box-Cox变换：\n",
    "$$\n",
    "\\tilde{x}=\\left\\{\\begin{array}{ll}{\\frac{x^{2}-1}{\\lambda}} & {\\text { if } \\lambda \\neq 0} \\\\ {\\ln (x)} & {\\text { if } \\lambda=0}\\end{array}\\right.\n",
    "$$\n",
    "\n",
    "\n",
    "图2-12， 展示出了在  $\\lambda =0$（log变换），$\\lambda =0.25$,$\\lambda =0.5$（平方根的缩放和移位版本），$\\lambda =0.75$, 和$\\lambda =1.5$时的Box-Cox变换。设置$\\lambda$ 小于1时压缩较高的值，并且设置$\\lambda$大于1时具有相反的效果。\n",
    "\n",
    "![](images/chapter2/2-12.png)\n",
    "\n",
    "**Figure 2-12. Box-Cox transforms for different values of $\\lambda$.**\n",
    "\n",
    "只有当数据为正值时, Box-Cox 公式才能工作。对于非正数据, 可以通过加上固定常量来移动数值。当应用 Box-Cox 变换或更一般的功率变换时, 我们必须确定参数 $\\lambda$ 的值。这可能是通过最大似然(找到的$\\lambda$,使产生的变换信号的高斯似然最大) 或贝叶斯方法。完全介绍 Box-Cox 和一般功率变换的使用超出了本书的范围。感兴趣的读者可以通过 Jack Johnston 和John DiNardo (McGraw Hill) 编写的Econometric Methods 找到更多关于幂转换的信息。幸运的是, Scipy 的数据包包含了一个 Box-Cox 转换的实现, 其中包括查找最佳变换参数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-12:Yelp商户评论数的 Box-Cox 变换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy import stats\n",
    "\n",
    "# Continuing from the previous example, assume biz_df contains\n",
    "# the Yelp business reviews data\n",
    "# Box-Cox transform assumes that input data is positive.\n",
    "# Check the min to make sure.\n",
    "biz_df['review_count'].min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['business_id', 'categories', 'city', 'full_address', 'latitude',\n",
       "       'longitude', 'name', 'neighborhoods', 'open', 'review_count', 'stars',\n",
       "       'state', 'type', 'log_review_count'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "biz_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Setting input parameter lmbda to 0 gives us the log transform (without constant offset)\n",
    "rc_log = stats.boxcox(biz_df['review_count'], lmbda=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "biz_df['rc_log']=rc_log"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.5631160899391674"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# By default, the scipy implementation of Box-Cox transform finds the lmbda parameter\n",
    "# that will make the output the closest to a normal distribution\n",
    "rc_bc, bc_params = stats.boxcox(biz_df['review_count'])\n",
    "bc_params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "biz_df['rc_bc']=rc_bc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "图2-13 提供了原始和转换评论数分布的可视化比较。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(29.125,0.5,'Occurrence')"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAFACAYAAADqEuYHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xtczvf/P/BHOi+URjZtyKGkc1GbsJU5lUMMs5Gc5ixapOTUgSs5ZKWGNYaiKPqwWcxhThtzuLAoh4tUo1wTkriu6nr9/vDr/e3S6brquro6PO+323Wb9/n5fl3v9bxer/fr/XqrMcYYCCGEEFJnLVQdACGEENJUUFIlhBBCFISSKiGEEKIglFQJIYQQBaGkSgghhCgIJVVCCCFEQSipkkbP1dUVZmZm3KdHjx5wdHTE7Nmz8fjx4zrv/+LFizAzM0NJSYkCoq2eQCCAr68vnJ2dYWdnh7Fjx+Lo0aNKP26Z7Oxs/PHHH7Xa1szMDH/++WeF+fv374erqysAICcnB2ZmZnj48KFSYyFEVSipkibB398f586dw7lz53D69GlERETg7t27WLJkSZ33bWdnh3PnzkFDQ0MBkVaNz+dj7Nix0NHRwdatW5GSkgJ3d3d899132Ldvn1KPXWbp0qXg8/lK2/+HH36Ic+fO4aOPPlJ5LIQog3L/ShBST1q2bIl27dpx0+3bt4e3tzcWL16Mly9folWrVrXet5aWltS+lYExBn9/fwwZMgSrV6/m5k+ePBmFhYXYsGEDhg8fDl1dXaXGoWzq6upKL0tCVIlqqqTJ0tLSAgC0aPH2Mn/58iWWLFkCBwcHODs7Y/ny5SgsLAQAjBs3DhEREVLbT58+HWvXrq3Q/Jubm4s5c+bA1tYWn3/+OdavXw+xWIxnz57B3NwcGRkZAN4mSkdHR4SGhnL7DAkJwbJlyyrEevXqVWRmZmLatGkVlnl6emLbtm3Q1tYG8LaJeNq0abC3t0ffvn0RFRUFiUQCAIiKisLXX38ttb2rqyv279/P7Ss6OhrTpk2DjY0Nhg8fjtOnTwN4W9v/+++/sWXLFnh6egIA4uPjMWDAAFhZWWH48OE4deqUzOVfmXebf1NTU+Hm5gYrKysMGjQIycnJVcaSm5uLBQsWwNHREU5OTggODoZIJOL2fe7cOQwfPhzW1taYPn06QkJC4O/vz5XLrFmz4Onpid69e+PMmTN48uQJvL290bt3b1haWsLDwwOXLl2SivPEiRNwdXWFnZ0dwsLCcPv2bYwePRq2traYNWsWioqK6lQepOmhpEqapMzMTERGRqJfv37Q09MD8LY58dmzZ4iPj8fWrVvx4MEDBAQEAADc3Nxw7NgxbvsXL17gwoULcHd3l9ovYwxz586Fvr4+kpOTsX79evzxxx/YuHEj2rRpAwsLC1y4cAEAcPv2bRQUFODq1avc9n/++Sf69+9fId6MjAzo6emha9euFZbp6+vDxsYGLVq0QH5+Pr755hsYGRlh//79WLVqFeLj47F9+3aZy2bbtm1wd3fHgQMHYGJigsDAQJSWliIwMBB2dnbw8vJCVFQUbt26BR6Ph4CAAC75LVy4EAUFBTIfqzpPnz7FokWLMHnyZKSmpmLmzJlYtmwZBAJBhVjEYjG8vLxQVFSEXbt24fvvv8eZM2cQFhYG4O3919mzZ2Pw4MFISUmBlZUV4uPjpY536tQpDB48GLt374a9vT38/PxQUlKChIQEpKSk4IMPPsDKlSultvnxxx8RExODVatWYceOHVzrx48//ohLly5xPwIIKUPNv6RJCA4Oxpo1awAAJSUl0NTUxIABA7B06VIAQFZWFn7//XdcuHABBgYGAIC1a9fC1dUVjx8/hpubG9auXYt79+6hW7duOH78ODp06ABLS0tcvHiRO86FCxeQk5ODffv2QV1dHQCwYsUKTJ06FYsWLULfvn3x999/Y/Lkyfj777/x2Wef4dy5cygqKkJBQQGysrLQp0+fCvG/fPkSLVu2rPE8f/nlF2hrayM4OBiampro2rUrhEIhvv/+e0yfPl2msurfvz9Gjx4NAJgzZw5GjhyJvLw8dOjQAZqamtDV1YWBgQFXazM2NoaxsTFmzpwJKysraGpqVrnvWbNmceVSpqSkpNIm37y8PBQXF6N9+/YwNjbGl19+iQ4dOqBt27Zo1aqVVCwnTpxAbm4uEhMTue9vxYoVmDVrFr777jvs378fFhYWmDdvHgBgwYIF+Ouvv6SOZ2BggIkTJ3LTLi4uGDRoED788EMAwIQJEzB9+nSUHw599uzZ6NGjB3r06IE1a9bA3d0dn376KQDA0dER9+/fl6nMSfNBSZU0CfPmzcOQIUNQVFSEzZs349GjR/Dx8UGbNm0AvG0yZYzBxcWlwraZmZn49NNP0atXLxw7dgzdunXjambvEggEKCgoQK9evbh5jDEUFxfj0aNH6Nu3L/bs2QOJRIJLly5h6NChuHPnDq5fv45Hjx7Bzs6u0uTZpk0bvHz5ssbzFAgE6Nmzp1Ris7Ozw7Nnz5Cfny9TWX388cfcv8tiqaxnc9++feHg4AAPDw+YmprC1dUVY8aMqfa+bnBwMOzs7KTmpaamIjExscK65ubmGDZsGGbMmIGOHTvCxcUFo0ePhr6+foV1BQIBOnbsyCVUALC3t0dpaSkyMzNx+/ZtWFpaSm1jY2ODFy9ecNPGxsZSy7/++mscOXIEV69exYMHD5CWlgYAKC0t5dYp36FKW1sbHTp04KZ1dHQgFourLAvSPFFSJU2CoaEhOnXqBACIiIjAmDFjMHfuXOzbtw+ampooLS3Fe++9h5SUlArbltWihg0bhr1792LixIn466+/4OfnV2HdkpISdOrUCVu3bq2w7IMPPkCHDh0gkUiQkZGBS5cuwc/PDw4ODrhy5QoePHiAfv36VRq/lZUVioqKcPfuXXTv3l1qWVkz6fLly7n7quWV3U+VSCRQU1OrNObyKqtpVvayKl1dXfz888+4cuUKTp06hdTUVMTFxSE+Ph49evSo9DyMjIy476GMoaFhpeuqqalhw4YNmDp1Kk6ePImTJ09iz5492LJlC/r27Su1bmXnXZb8JBJJhdpxZedUfh8SiQRTp07Fixcv4ObmBldXVxQXF3M13TLv9vguuz9PSFXkukJEIhEOHTqEyMhIPH/+HBcuXIBQKFRWbITUipaWFkJDQ5GRkYEdO3YAAExMTFBUVITS0lJ06tSJ+8PP4/G4zkqDBw/GvXv3kJCQABMTkwrJrWw/ubm5MDAw4PYjFAqxYcMGMMagoaGBTz75BHv37oWWlhY+/vhj9OrVC5cvX8b58+crvZ8KAD179oSpqWml90bj4+Nx48YNfPjhh+jatStu3bqF4uJibjmfz4eBgQEMDQ2hqanJnQ8AFBUVyVyDfRefz0dMTAx69eqFxYsX47fffkPbtm1x5syZWu3vXQKBADweDxYWFpg/fz4OHjyIXr164ffff6+wbteuXZGVlYXnz59z865duwZ1dXV07NgR3bt352qaZW7evFnlse/du4dLly7hp59+wuzZs/H555/jyZMnACr/gUGIrGROqg8fPsTQoUMRGRmJbdu24eXLl0hISMCwYcMqXMyEqJq1tTXGjBmDH374AXl5eejatSv69esHPz8/XL9+HRkZGViyZAmePn0KIyMjAG/vufXp0wc//PBDpU2/wNsm0Y8//hiLFi1CRkYG+Hw+li1bhhYtWnA1ob59+3IJAgB69+6NCxcuQENDo8oaHgCsXLkSv/76K5YvX4709HQIBAJERUVhy5YtWLZsGXR1dTFs2DBIJBKsWLECAoEAJ06cQFRUFMaPH48WLVrAysoKd+7cwf/+9z9kZmZixYoVctWu9PT0kJWVhadPn0JHRwcxMTFISEhATk4OTp48icePH1doZq2t1q1bIzExEVFRUcjOzsaFCxekmnHLx9KnTx907twZfn5+yMjIwMWLFxEaGgo3Nze0adMG48aNQ1paGrZs2YIHDx5g69atuHz5cqU197Jjt2jRAkeOHMG///6L1NRUREVFAQA16ZI6kfn/ttDQULi6uuL333/nmo82btyIwYMHcx1ECGlIfHx8oKmpibVr1wIAwsPD0alTJ0ydOhUTJ06EkZERYmJipLZxd3dHUVFRhV6/ZdTV1RETEwN1dXWMHz8es2bNQq9evaQem+nbty+Ki4vh4OAA4G0tq02bNujbt2+Vf+QBoFevXoiLi4NQKMTUqVMxZswYnDt3DlFRURg1ahSAt4kmNjYW2dnZ8PDwQHBwMCZNmoQFCxYAAD799FNMmzYNoaGh+Oqrr9ClSxfY29vLXGZfffUVzp8/j2+//Rbm5ubg8XjYuXMnhg4dCh6PhyVLllTa0ao22rVrh6ioKJw4cQLu7u5YvHgxvv76a4wZM6ZCLC1atEB0dDTU1NTw1VdfYeHChXBxceGe6TU2NkZkZCQOHjyI4cOH4+rVq/jiiy+q7FT1wQcfcD163d3dsXXrVixbtgyamppIT09XyPmR5kmNydjW0atXL+zfvx8mJiaws7PDoUOH8PHHHyMrKwsjR46kkU8IISpz584dlJSUoGfPnty8GTNmwMrKCvPnz1dhZKS5kbmm+t5771V6//TOnTto3bq1QoMihBB5ZGVlYfLkyTh//jz+/fdf7N+/H3/99RcGDhyo6tBIMyNz79/x48djxYoVWLRoEYC3nQz++usvbNq0qcIILoQQUp+++OIL3L17F4GBgXj69ClMTEwQERFR7T1sQpRB5uZfANi9ezd++ukn5ObmAgDef/99TJ48GdOmTaOu5oQQQpo9uZIq8La7+evXr1FaWgrGGDX9EkIIIf+fzM2/QqEQ/v7+sLS0hI+PDwDA2dkZlpaW4PF4VT7grUrXrl2r9KFxeYhEojrvg1RE5ap4VKbKQeWqeI2xTEUiEWxtbWtcT+aa6pw5cyASibBq1SpumLPMzEyEhIRAX18fGzdurFvESpCeng5zc3OV74NUROWqeFSmykHlqniNsUxljVnmmurFixeRlJQkNW5o586dsXTpUowfP752URJCCCFNiMy9i/T09JCTk1Nhfl5eXrVvrWgK3hSXVjtNCCGEAHLUVMeMGYPAwEAsWLAAFhYWAIBbt25JjfbSVOloqqOz/6/cdGZY5aPtEEIIad5kTqrz5s2DRCLBhg0buAG6DQ0NMWnSJHz77bdKC5AQQghpLGROqi1atMDChQuxcOFC5OfnQ0tLS6aXKhNCCCHNhVzvUxUIBEhLS0NJSUmF1yOVDYJNCCGENFcyJ9Vt27Zh48aN0NfXh56entQyNTU1SqqEEEKaPZmTakJCAnx8fDBz5kxlxkMIIYQ0WjI/UlNQUIDBgwcrMxZCCCGkUZM5qY4cORIJCQkV7qUSQggh5C2Zm3+fPXuGY8eO4fDhwzA2Nq4w4EN8fLzCg2uo3hSXQkdTvcppQgghzZPMSbVLly6YNWuWMmNpNGgwCEIIIZWRa/CHMiUlJVBXV4eamppSgiKEEEIaI7neLB4fH4+BAwfC1tYWOTk5WL58OTZu3AiJRKKs+AghhJBGQ+akumPHDsTGxmLu3LnQ0HhbwXV2dkZycjI2bdqktAAbg/ID7NNg+4QQ0nzJnFQTEhIQHBwMDw8Prtl3yJAhCA8PR0pKitICBIA3b97A29sbEyZMwFdffQU+n6/U48mr7B5r+fusZSjJEkJI8yHzPdXc3Fx07ty5wvwPPvgABQUFioypgn379qF79+6IjIzE/fv34efnh6SkJKUes7aoExMhhDRfMtdUbW1tkZycLDVPIpEgNjYW1tbWCg+svNGjR2PatGkAgNLS0ib//lZCCCGNk8w11WXLluHbb7/FH3/8AbFYjJUrVyIzMxNisRixsbHKjJF7G87Tp0/h5+eHgIAApR5PkeiZVkIIaT5kTqpdu3bF0aNHcfjwYQgEApSWlmLgwIEYMWJEhQH2lUEgEGDhwoXw9fWFo6Oj0o+nKO82B2eEDOH+TQmWEEKaFpmT6ogRI7B+/XqVvI3m33//xdy5c7Fu3TpYWVnV+/EVqXySLZ9gAUqyhBDS2Ml8T/XFixdQV1fMH3yxWIxhw4bhzz//lJq3fPly9O7dG87Ozvjxxx+5ZZs3b8br168RHh4OT09PeHt7KyQOVSvfa7iz/6+UUAkhpJGTq6Y6depUDB8+HMbGxtDW1pZaLmsNViQSwdfXF3fv3pWaHx4eDj6fjx07diA3Nxd+fn7o0KED3N3dwePxZA2zUavu/ivVYgkhpOGTOan+9ttv0NTURGpqaoVlsr6k/N69e/D19a3wppuioiLs27cPW7ZsgaWlJSwtLTF9+nTExcXB3b32j6SIRCKkp6fXenvg7TOy9aWyx3HKpjPD3Ot8Lg3JmzdvmtT5NARUpspB5ap4TblMZU6qQUFBsLe3r1OnpMuXL8PZ2Rnz58+Hra0tNz8jIwNisRgODg7cPAcHB8TExKCkpIQbwUle2traMDc3r3W8ABrMF/+muFTqXBp7r+L09PQ6fzdEGpWpclC5Kl5jLFNZc4HM2WrRokXYvXs3TE1Nax3U+PHjK50vFAqhr68v1aTctm1bFBcXIz8/H0ZGRrU+ZlNRXS0WoF7FhBDSEMjcUcnMzAyXL19WShCvX7+GlpaW1LyyabFYrJRjNjXlOz1RQiWEENWQuaaqp6eHkJAQREVFVdpRqS4vKdfW1q6QPMumdXV1a73f5qqmpuHG3nRMCCENlcxJ1cLCAhYWFkoJon379igoKIBYLOZqqEKhEFpaWtDX11fKMZuympqKqemYEEKUo1YvKVc0c3NzaGpqgs/nw8nJCQBw5coVWFhY1LqTEpEdDUhBCCGKIXPG8vPzq3Z5eHh4rYPQ1dWFh4cHgoKCEBYWBqFQiO3btyMkJKTW+yS1U92wigAlWUIIqY7MSfXd0ZRKSkqQnZ2N9PR0eHl51TmQgIAArFq1Cl5eXtDT08PcuXPh5uZW5/2SulHU2MXvrtuxcxfFBUkIIQ2EzEm1qlGNduzYgVu3bsl94Nu3b0tN6+rqYu3atVi7dq3c+yL1p3ySffddsdV1gKL3zBJCmoM637AcOHAgIiMjFRELaeRqajomhJCmTubnVCUSSYVPQUEBdu7ciTZt2igzRtJAvSkurXZ5+WdnVaV8jDXFSwghdSVzTbVnz55QU1OrMF9bWxuhoaEKDYo0DnVp0pXn5QF1edFAdc3VhBCiaDIn1V27dklNq6mpQVNTE926dUPLli0VHhhp2qpLyDU1I1OiJIQ0VDInVUdHR1y9ehUSiQS9evUCAERFRUFNTQ02NjZKC5A0D9XVOKmTEyGksZD5nmpycjImT54s1Wv30aNHmDRpEo4cOaKU4EjzUR/3X9+9p1rdtDzrEkJIGZlrqlu2bAGPx5N6vymPx4OzszMiIyPpmVKiEvKMY1xTjbe6ZmVFPa9bl/gJIQ2fzElVKBRWOvavpaUlHj9+rNCgCJGVLOMcV6W6BCZPByh5Rp16dxk1bRPStMicVK2srLBz506sWLFCqhdwfHw8evTooZTgCFEmeTpLVZfslLUuIaTxkTmpBgQEYMqUKTh9+jT3xvaMjAwUFRVh69atSguQkMamvpp03320SBH7qWy/9NpAQmQn13OqqampOHLkCAQCATQ1NeHs7IwRI0bQIzWElFNftVFFPVokb42datqEVE2uYQofPHgAMzMzTJgwAcDbR2oEAgE9UkMIIYSAHqkhhBBCFEbmpFr2SE1ZLRV4+0jN6tWraUB9QqpRH8+0viku5fo6VHZMecZArm288j7bq6jnghW1bn09i1yX4yhrLGtVjJGtrPJW9TPl9EgNIUpWH8MqynLvs3wMtX1et64xyHqc+ux9LWu5KEpd7rkr61pSxdCfyup7oOoe9mqMMSbLip6enujWrVuFR2pWr16NGzduIDExUWlB1ta1a9egra2t6jAIIYQ0ciKRCLa2tjWuJ3NSvXXrFqZMmQI9Pb1KH6mxtrauW8SEEEJIIydzUmWMIS0tDefPn8fVq1fRpUsXdOzYkR6pIYQQQv6/Gu+pikQixMTEICkpCfn5+SjLwWlpaRgzZgw0NTWVHiQhhBDSGFRbUxWJRJg4cSLy8vLg5eWFXr16oXXr1njy5Alu3LiBnTt3okOHDoiLi4OWllZ9xk0IIYQ0ONUm1c2bN+Po0aPYs2cPWrVqVWH5y5cv4enpiUGDBmHOnDlKDZQQQghp6Kp9TvXXX3/Fd999V2lCBYBWrVrBx8cHhw8fVkpwhBBCSGNSbVJ99OgRzMzMqt2BqakpPadKCCGEoIakamBggEePHlW7g5ycHLz//vsKDaohEIvFWL58OXr37g1nZ2f8+OOPqg6pwcvKysKsWbPQu3dv9O/fH2FhYRCJRACAf//9F1OnToWtrS2GDh2K06dPS2174cIFDB8+HDY2NvD09MTDhw9VcQoNXmBgIDw9PbnpjIwMfPXVV7CxscHo0aNx48YNqfWPHDmCgQMHwsbGBrNnz8bTp0/rO+QGq7i4GDweD05OTnBycsLKlSshFosB0PVaWy9evMCiRYvg6OiIfv36Yf369SgtfTui0fPnz+Ht7Q17e3u4urri4MGDUtvWdC03FtUmVRcXF0RFRUEikVS6XCKRIDo6GoMGDVJKcKoUHh4OPp+PHTt2ICgoCD/88AN+/fXXmjdspsRiMWbNmgUtLS0kJCRg/fr1OH78OCIiIsAYw5w5c2BgYICkpCSMGjUK3t7eyM7OBgA8fvwYs2fPxogRI5CcnIy2bdtizpw5VV53zdVff/2FpKQkbrqoqAjTp0+HjY0NDhw4AAcHB8ycOROFhYUAgBs3bsDf3x+zZ89GYmIiCgsL4efnp6rwG5zw8HD8/vvviImJwQ8//ICzZ88iOjqartc6CAoKQl5eHuLi4rBu3TqkpKRgx44dAAB/f388f/4ce/fuxZw5c7BixQpcvXoVQM3XcqPCqvH06VPm4uLCJkyYwE6fPs3y8/NZaWkpy83NZcePH2ejRo1igwYNYs+ePatuN43Oq1evmJWVFTt//jw3Lzo6mo0fP16FUTVsly5dYhYWFqywsJCbd+jQIdanTx/2559/MisrK/by5UtumZeXF9u4cSNjjLFNmzZJlW1RURGzs7OTKv/m7tWrV2zAgAFs/PjxbOLEiYwxxvbv388+//xzVlpayhhjTCKRsIEDB7J9+/YxxhhbvHgx8/X15fbx6NEjZmpqyjIzM+v/BBqYFy9eMAsLC3bu3DluXnJyMps2bRpdr3Vgb2/Pfv/9d26ax+OxadOmsYcPH1a49pYuXcpdnzVdy41JtTVVQ0ND7N27F/r6+pg1axb69OkDCwsLfP7551iwYAFMTEwQHx8PAwOD+voNUC8yMjIgFovh4ODAzXNwcMA///yDkpISFUbWcHXp0gXbtm2Dnp4eN09NTQ1isRjXr19Hz549pQYJcXBwwLVr1wAA169fR+/evbllurq6sLCwAJ/Pr78TaOAiIiLg6OgIR0dHbt7169dhb2+PFi3e/m+spqYGe3t7rtzeLdcPP/wQxsbGVK4Arly5Ah0dHfTp04ebN3r0aMTGxtL1WgcGBgY4dOgQXr9+jby8PJw9exYWFha4fv062rVrh06dOnHrvlum1V3LjUmNgz+0b98e0dHRyM/PR1paGl68eAF9fX1YWVmhTZs29RFjvRMKhdDX15caN7ht27YoLi5Gfn4+jIyMVBhdw2RoaCj1B0oikSAuLg4ODg4QCoUVyuz9999Hbm4uAFS5PC8vT/mBNwJ8Ph+pqan45ZdfsH37dm6+UCiEiYmJ1Lrvv/8+MjIyAABPnjyhcq1CVlYWjI2N8csvv2DLli0oKirCkCFD4OPjQ9drHaxcuRJ+fn6wt7eHRCLBJ598gvnz52PXrl01lml113JjIvNbagwNDdG/f39lxtJgvH79usJgFmXTZR0ZSPV4PB7S09ORlJSEHTt2VBh5S0tLC8XFxQCqLm8q67fXW2BgIJYuXQp9fX2pZTWV25s3b6hcq/Dq1Svk5OQgLi4OQUFBePXqFYKCglBSUoLXr1/T9VpLWVlZ6NmzJ+bOnYvCwkKEhIRg7dq1MDAwqLTMiouLwRhrUmUqc1JtTrS1tSt8mWXTurq6qgip0WCMYfXq1di7dy++//57dO/eHdra2hU6HIjFYujo6ACouryb2m2F2oiOjkanTp0wdOjQCsuqKreayrVseXOmoaGBwsJCrFu3Dh07dgQA+Pn5wc/PD6NGjaLrtRaysrKwZs0anDx5Eh988AGAt2U1depULFy4sMprUU1NrUldq5RUK9G+fXsUFBRALBZzv56EQiG0tLQq1BbI/5FIJAgMDMThw4cRERGBL774AsDb8ny3Gee///5Du3btuOVCobDC8u7du9dP4A3Y4cOHIRQKYWdnB+DtYyClpaWws7PDsGHDKi238uX633//Vbm8OTMyMoKGhgaXUAHAxMQEIpEI7dq1w507d6TWp+u1ZmlpadDT0+MSKvD2fdulpaUQi8XVXotVlWljvFar7ajUXJmbm0NTU1PqJvmVK1dgYWEBDQ36HVKVsLAwHD58GFFRUVKPWdnY2HCvCSxz5coV7t2ENjY2XNd64G3z2q1bt2R6d2FTt3v3bvzyyy9ISUlBSkoKxo4dC0tLS6SkpMDGxgZ8Pp97yQVjDHw+X6pcr1y5wu3r8ePHePToEZUrAFtbW5SUlOD27dvcPIFAAD09Pdja2tL1WgtGRkYoKCiQGgxIIBAAAPr374+8vDzk5ORwy65cuQIbGxsAqPFablRU2fW4IVu+fDkbOnQou379Ojt+/Dizt7dnv/76q6rDarD4fD4zNTVlW7duZU+ePJH6lJSUMDc3NzZ//nx2584dtnXrVmZjY8Oys7MZY4xlZ2czKysrFhMTw+7evct8fHyYu7s7172e/J+NGzdyj9S8fPmSffLJJywoKIjdvXuXrV69mn366afcoyBXr15lFhYWLDExkWVkZDBPT082ffp0VYbfoMyePZuNGjWK/fPPP+zSpUvMxcWF8Xg8ul5rqbi4mI0cOZJ5eXmx9PR0xufz2fDhw9nixYsZY4xNnTqVffPNNyw9PZ0Kja/nAAAgAElEQVQlJSUxS0tLdvXqVcZYzddyY0JJtQpFRUXMz8+P2draMmdnZ/bTTz+pOqQGLSwsjJmamlb6KS4uZpmZmWzChAnM0tKSubm5sbNnz0pt/8cff7DBgwcza2tr5unpyR4+fKiiM2nYyidVxhi7fv068/DwYJaWluzLL79k//zzj9T6Bw4cYJ9//jmztbVlc+bMYU+fPq3vkBusly9fMn9/f2Zvb88cHR3ZmjVrmFgsZowxul5rKTc3l3l7ezNHR0fm7OzMQkJC2OvXrxljjP33339s5syZzMrKirm4uLCUlBSpbWu6lhsLmV9STgghhJDq0T1VQgghREEoqRJCCCEKQkmVEEIIURBKqoQQQoiCUFIlhBBCFISSKiGEEKIglFQJIYQQBaGkSgghhCgIJVVCCCFEQSipEkIIIQpCSZUQQghREEqqhBBCiIJQUiWEEEIUhJIqIYQQoiCUVAkhhBAFoaRKCCGEKAglVUIIIURBKKkSQgghCkJJlRBCCFEQSqqEEEKIglBSJYQQQhSEkiohhBCiIJRUCSGEEAWhpEoIIYQoCCVVojBmZmb4888/lX6cAwcOwMzMrMqPv7+/0mN4V3p6OgYMGAAbGxucPn263o9fk/79++PAgQNVLpdIJIiLi8PIkSNha2uLzz77DCtWrMB///1XL/ExxrB3715IJBK5t42KisLXX39d6bLy5+3v749FixYpNRZCNFQdACHycnNzQ79+/QC8TQb9+/dHVFQU7OzsAAA6Ojr1HlNUVBQ6d+6MnTt3om3btvV+/LpauHAh/vnnH/j6+sLa2hpPnjzB+vXr4eXlhcTERLRs2VKpx7906RJWrVqFsWPHokUL5fzWDwwMbDCxkKaLkippdHR0dLjEWVJSAgDQ19dHu3btVBbTy5cvYW9vj48++khlMdTWoUOHcPLkSfz666/o1KkTAKBjx47Ytm0bBgwYgD179mDGjBlKjYExptT9A0CrVq1kWq8+YiFNF/0MI/WGz+fj66+/hq2tLVxdXREfHy+1/Oeff0a/fv1gb2+P0NBQeHp6VttkWZ2LFy+if//+CA4OhoODA6KiolBcXIy1a9eif//+sLCwgIuLC/bs2cNt4+rqiri4OIwfPx42NjYYM2YMbty4wS2Pj4/HgAEDYGVlheHDh+PUqVPcdn///Te2bNkCV1dXAEBubi4WLFgAR0dHODk5ITg4GCKRCMDb5utx48bB29sbDg4O2L9/Pzw9PbFt2zZMmTIF1tbWGDt2LLKysrBs2TLY2dlh8ODBuHz5MhfL3bt3MWnSJFhbW2PgwIHYvn27VDJISEjAZ599BgcHB2zdurXasjp48CAGDhzIJdQyrVu3xk8//YQvv/wSwNtWgdjYWHzxxRewtrbGxIkTkZGRwa3/bvP/gQMH0L9/f6nvIzExEf3794eTkxMWL16MN2/eICcnB5MmTQIAWFhY4OLFi3j8+DGmT58Oe3t7ODo6IiAgAK9evarpa69W+ebfwsJCLFy4EI6OjrC3t8e8efMgFAorjaXsXNzc3GBtbY3Ro0dz8wHgzZs3CAwMhIODA/r164f9+/ejZ8+eyMnJ4cpl06ZN+OSTTzB58mQAQHJyMoYOHQpLS0s4OTlh5cqV3A9Ef39/hIWFwcfHBzY2NnB3d0dGRgYiIiLQq1cvfPbZZzh27FidyoIoDyVVUi8EAgG8vLzQu3dvHDx4EPPnz8e6devw22+/AXhbW/r+++8REBCAxMRE5OTk4NKlS3U6Zl5eHgoLC3Hw4EGMGjUKP/74I06ePInIyEikpqZi1KhRCA0NRV5eHrfN5s2bMX36dCQmJkJbWxshISEAgFu3boHH4yEgIACpqalwc3PDwoULUVBQgKSkJNjZ2cHLywtJSUkQi8Xw8vJCUVERdu3ahe+//x5nzpxBWFgYd5zr16+jU6dO2L9/P1xcXAAAP/zwA8aOHYsDBw7gxYsX+PLLL/HBBx8gKSkJnTp1wpo1awC8/SM+ffp02Nra4tChQ1i2bBl27tyJuLg4AMDZs2exevVq+Pj4ICEhAdeuXZM6x3dlZGTAysqq0mXW1tZ4//33AQDR0dHYvn07AgICcPDgQXz00UeYPn06CgsLZfo+nj59iiNHjmDbtm1YvXo1jh07hgMHDuDDDz9EVFQUAODMmTOws7NDcHAwNDQ0kJycjO3bt4PP52PLli0yHUcWmzZtwr///ovdu3dj3759ePr0KXg8XqWxHDhwAMHBwZgxYwb+97//wdnZGTNmzMCjR48AAKGhobhy5QpiY2MRERGB2NhYlJaWSh3vxIkT2LNnDwIDA3H58mUEBQXBx8cHR48eRVBQEA4cOCCVKOPi4uDg4ID//e9/aNWqFTw9PfHs2TMkJibC2dkZy5cvpxp1Q8UIURBTU1N2/vz5SpetWbOGjRkzRmreunXr2OjRoxljjH311Vdsw4YN3LLnz58zGxsblpycXO0xi4uLmampKbtw4YLU/AsXLjBTU1N2+/Ztbt7vv//OLl26xE2LRCJmamrK/vrrL8YYYy4uLozH43HLjx8/znr06MEYY+zYsWPMwsKC3bp1izHGWGlpKTt79iwrKipijDE2ceJEtnHjRm47a2tr9uzZM25fp0+fZubm5qygoIAlJyczU1NT9vLlS275xIkTmbe3NzfN4/HY559/zk0fO3aM2djYMMYY27dvHxs+fLjU+R44cIANGDCAMcbY/Pnz2ZIlS7hlT58+ZZaWllWWpYWFBdu3b1+ly8pIJBLm6OjI4uPjuXlisZh99tlnLC4ujjFW8ftPTk5m/fr1Y4z93/eRkZHBLZ87dy7z9/eXWl5cXMwYY2z48OFs0aJFTCQSMcYYu3v3Lrt3716lsUVGRrIePXowW1vbCh8zMzPuvJcsWcJ8fX0ZY4zNmjWLTZo0iRUWFjLGGMvKymJpaWmVxuLh4cHCw8Oljjlu3DgWFhbGCgsLmYWFBTt79iy37MyZM8zU1JRlZ2dz5bJ7925u+T///MMOHTpUYX/ff/89F+eXX37JLdu1axezsLBgb968YYwxdvPmTWZqasqePn1aaXkQ1aJ7qqReCAQC2NjYSM2zs7PjmoBv376NadOmccv09fVhYmJS5+MaGxtz//7iiy9w/vx5hIWF4f79+7h16xYASPXy/Pjjj7l/t2zZEhKJBKWlpejbty8cHBzg4eEBU1NTuLq6YsyYMdDV1a30XDt27AgDAwNunr29PUpLS5GZmQkAMDAwqND5p/yxtbW10aFDB6lpsVgMALh//z7u3bvHdcwqOwexWAyxWAyBQICxY8dyywwNDaXK4V0GBgZ48eJFlcuBt7XM58+fS32HmpqasLS0hEAgqHbb8jp27Mj9u2XLllyT57u8vb3h4+ODEydOoG/fvhg0aBDc3Nyq3K+5uTkiIiIqzJ8wYUKl68+YMQMzZszAp59+CicnJwwcOBAeHh6VrisQCDB79mypeba2trh//z7u37+P4uJiqZp++e+lTPnyt7S0hI6ODiIjI3Hv3j3cvn0bDx8+xCeffMKtU/5a0NHRQdu2baGtrQ0A3H/LrgfSsFDzL6kXZX8IyitLWACgrq5eoTnr3em6HjciIgK+vr5QV1fHyJEjkZiYWGF9LS2tCvMYY9DV1cXPP/+M+Ph49O/fH6mpqfDw8JC6p1jZMcuUnWdZAq9sHXV1danpqnqelpSUwNHRESkpKdzn0KFDSE1NhYaGBhdzeZqampXuCwCsrKyk7h2XFxMTg+jo6ErjLTuvd5s6yy9717txVPUdf/HFFzh9+jT8/f0hkUgQEBCApUuXVnkO2tra6NSpU4VPVWVoZ2eHU6dOITQ0FK1bt0ZYWJjUj7ryKutNXnbelZV3ZedUvvzOnj2LUaNGQSgUol+/foiMjIS9vb3U+rJeC6ThkeubEolEOHToECIjI/H8+XNcuHABQqFQWbGRJqRr1664fv261Dw+n8/VRrt164abN29yywoLC/Hw4UOFxpCQkIBly5Zh8eLFcHd3x+vXrwHIlrz5fD5iYmLQq1cvLF68GL/99hvatm2LM2fOVFi3a9euyMrKwvPnz7l5165dg7q6ulRNrbZMTEyQmZkJY2NjLnmkp6fjxx9/RIsWLdC9e3f8888/3PqFhYXIzs6ucn8jR47EyZMnuVp0madPn2LXrl1o0aIFWrVqhXbt2kl9h8XFxbh58yb3HWpqakrdX63umO9SU1OTmo6IiEBubi7GjRuHzZs3IzQ0FEeOHJF5fzX5+eefcf36dYwYMQIbNmzAtm3b8Pfff+O///6rEEuXLl0qXLvXr1+HiYkJOnbsCE1NTalrNy0trdpj79+/H6NGjUJISAjGjh3LXS+kaZA5qT58+BBDhw5FZGQktm3bhpcvXyIhIQHDhg2r8SIizUdaWhrOnDkj9SksLMQ333yDO3fuYOPGjXjw4AFSUlKwZ88eTJw4EQDg6emJuLg4HD16FAKBAIGBgSgqKqrwB64uDAwMcOrUKWRnZ+PKlSvw8/MDIFszmo6ODmJiYpCQkICcnBycPHkSjx8/hqWlZYV1+/Tpg86dO8PPzw8ZGRm4ePEiQkND4ebmhjZt2tT5PEaMGAGxWIxly5ZBIBDg/PnzCA4Ohr6+PoC3TZ7Hjh1DQkICBAIBli1bxvU8rsyQIUPQt29fTJkyBUeOHEF2djbOnTuHqVOnol27dlxv2KlTp2Lz5s04ceIEBAIBVqxYAZFIhGHDhgF4W+PdsWMHMjMzcerUKbl6br/33nsA3nYIE4lEuH//PoKDg3Hr1i3cv38fx44dg4WFRW2LrILc3FyEhITg6tWryM7OxuHDh9GhQwe0adOmQixTpkzBnj17kJKSggcPHmDDhg1IT0/HuHHjoKenh9GjR4PH4+HatWu4du0aVq9eDaDiD4UyBgYG4PP5yMjIwN27d+Hv7w+hUEjNuU2EzPdUQ0ND4erqisDAQK6pYuPGjVi1ahXWrFkj9WgCab42bNhQYV5SUhKsrKywdetWhIeHY/v27ejQoQOWLFnC3ftzd3fHw4cPsWrVKohEIowdOxYfffRRtc2W8lqzZg1WrVoFd3d3GBkZYdy4cdDU1MStW7e4HrhVMTc3B4/Hww8//IDVq1fDyMgIS5YsQZ8+fSqs26JFC0RHRyMkJARfffUV3nvvPQwfPhy+vr4KOY+WLVsiNjYWPB4Po0aNQuvWrTFq1Cj4+PgAAHr37g0ej4dNmzZh7dq1GDduHExNTavdZ2RkJGJjYxEZGYnHjx/D0NAQn3/+OebPnw89PT0AwOTJk1FYWIiVK1fi5cuXsLW1xe7du7nBLpYvX45ly5Zh2LBhsLS0xIIFC7ietDUxNTVF37598c033yAiIgKrVq1CcHAwJk+eDLFYjE8++aTSa6u2FixYgMLCQsydOxevXr2CjY0NtmzZAnV19QqxDB48GEKhEJGRkRAKhTA3N8eOHTvQvXt3AMCSJUuwcuVKTJkyBS1btsTEiROxcePGKq/defPmISAgAOPHj0fLli3Rr18/TJgwgbvHTxo3NSbjjatevXph//79MDExgZ2dHQ4dOoSPP/4YWVlZGDlyJPh8vrJjJU3Y33//jY8//hgffvghgLf3DT/55BNER0fDyclJxdERUrXjx4/j008/5X583LhxA9988w34fL5CfxSSxkHmmup7770HoVBYoUfmnTt30Lp1a4UHRpqX48ePg8/nIygoCHp6eti1axdatmwJW1tbVYdGSLU2b96MkydPYubMmXj16hXWrVsHV1dXSqjNlMz3VMePH48VK1bg+PHjAN52M9+3bx9WrFiBMWPGKC1A0jx4e3vDxMQEU6ZMwciRI3H//n3ExsZW2euUkIZi/fr1+Pfff+Hh4YEpU6bgo48+4u6rkuZH5uZfANi9ezd++ukn5ObmAgDef/99TJ48GdOmTaMu34QQQpo9uZIq8Pbxg9evX6O0tBSMsXpp+hWLxfDz88OTJ0+gq6uLdevWwdDQUOnHJYQQQuQhc1IVCoXw9/eHpaUl18vQ2dkZlpaW4PF4Sk1yBw8exJ07d7BkyRIcOHAAd+7ckemdmdeuXZOr+VAkEjX75kYqAyoDgMoAoDIAqAzKn79IJJKpj4fMHZVWrlwJAFL3T+Pj4xESEoLQ0FBs3LhR3nhlNmrUKG44s9zcXG6A75poa2vD3Nxc5uOkp6fLtX5TRGVAZQBQGQBUBgCVQfnzT09Pl2kbmZPqxYsXkZSUJDUmZefOnbF06VKMHz9ezlDlp6GhgRkzZuCff/7B9u3blX688t4Ul0JHU73KaUIIIQSQI6nq6ekhJyenwiM1eXl59dZ1fNu2bcjMzMSMGTPq9X2COprq6Oz/KzedGeZeb8cmhBDSeMicVMeMGYPAwEAsWLCAGy7s1q1biIqKwqhRo5QWIADuTSYTJkzAe++916h7Gpev5VKNlxBCmhaZk+q8efMgkUiwYcMG5OfnA3j7SqlJkybh22+/leugYrEYo0ePxtKlS7lh3sRiMUJCQpCamgotLS1MnjyZ2++wYcPg5+eH3377DRKJBKGhoXIdryEpX+ulGi8hhDQtMifVFi1aYOHChVi4cCHy8/OhpaVV4X2QshCJRPD19cXdu3el5oeHh4PP52PHjh3Izc2Fn58fOnToAHd3d+jr62Pr1q1yH4sQQgipT3K9pFwgECAtLQ0lJSUVXpcly6hK9+7dg6+vb4Vti4qKsG/fPmzZsgWWlpawtLTE9OnTERcXB3f32tfmRCKRzD22AODNmzeVrl9Z7zd59lvdvmTdT8fOXaCn+39d21+9FiEr836tYqhOVWXQnFAZUBkAVAYAlUFtzl/mpLpt2zZs3LgR+vr63MDRZdTU1GRKqpcvX4azszPmz58v9bxPRkYGxGIxHBwcuHkODg6IiYlBSUkJ9yJgeSnzkRpFdTOXZz/vdpaqatu69FZu7l3oASoDgMoAoDIAqAyU+khNQkICfHx8MHPmzNpFB1T56I1QKIS+vr7UQ8Zt27ZFcXEx8vPzYWRkVOtjNkfUW5kQQlRD5m60BQUFGDx4sFKCeP36NbS0tKTmlU3Ti3sV701xabXThBBCakfmpDpy5EgkJCRUuB+qCNra2hWSZ9m0rq6uwo/X3JXVZMs+9FgPIYQohszNv8+ePcOxY8dw+PBhGBsbVxjwoexZ0tpo3749CgoKIBaLuRqqUCiElpYW9PX1a71fUnc0mhQhhMhO5qTapUsXzJo1SylBmJubQ1NTE3w+H05OTgCAK1euwMLCotadlIhi0P1ZQgiRnVyDP5QpKSmBuro61NTUFBKErq4uPDw8EBQUhLCwMAiFQmzfvh0hISEK2T9RDqrFEkKINLmqgfHx8fj555/x+PFj/Pbbb9i2bRvatGmDhQsX1nnowICAAKxatQpeXl7Q09PD3Llz4ebmVqd9EuWqqRZLQzISQpobmTPhjh07EBsbi7lz53JNss7OzkhOTsamTZvkPvDt27e5IQqBt7XVtWvXgs/n49y5c5g6darc+yQNS/kOUe+qrgcy9UYmhDRWMifVhIQEBAcHw8PDg2v2HTJkCMLDw5GSkqK0AEnTUFOP4/LLqUZLCGmsZE6qubm56Ny5c4X5H3zwAQoKChQZE2nmGuJztA0xJkJIwyPzPVVbW1skJydj4cKF3DyJRILY2FhYW1srJTjSPNXlXq2yOk9RL2hCiCxkTqrLli3Dt99+iz/++ANisRgrV65EZmYmxGIxYmNjlRkjIVLefX3eu8mu/HRGyBDu3/XVWaq6xF5fPwIIIaohc1Lt2rUrjh49isOHD0MgEKC0tBQDBw7EiBEjKgywT0hDUT4Bl0+wQNUJzdzcvE7JrbpabWXLqlq3ISTchhADIY2JzEl1xIgRWL9+vUxvoyGkIZIloVWVgN+lrMeFyu/r3Xhr+lGgjHip2ZsQ+cicVF+8eAF1dfqFSpqHmpLJu03Q1altEqvumED1TdvvTle338q2bc6v+yKkLuSqqU6dOhXDhw+HsbGx1GvaANleUk5IU1RT0pQnActDnnvL1R23uhq8PD8Y5L1fTIODkKZI5qT622+/QVNTE6mpqRWWyfqSckKaosbWRFqXBFZTDVjW5vV3p2WpPVMCJo2BzEk1KCgI9vb2DaJT0vHjx3H06FGsW7dO1aEQ0ujU5UeAsn5AVJesy44jb4ezmpYRogwyJ9VFixZh9+7dMDU1VWY8NVq7di1OnToFS0tLlcZBCFEceZK1PD2oFdnZixBZyJxUzczMcPnyZZUnVWtra3z22WdISkpSaRyEkIapukQpT2evjp27KC9I0mTJnFT19PQQEhKCqKioSjsq1eUl5fIYOnQoLl68WC/HIoQ0PvJ0DKvpnjAh8pI5qVpYWMDCwkKZsRBCSIOhqJGxqIm5eanVS8oJIaSpk+dRo7o8lkSaFpmTqp+fX7XLw8PD5T64WCzG6NGjsXTpUu7dqmKxGCEhIUhNTYWWlhYmT56Mb7/9Vu59E0KIstR2NCt5t61uX1QDbphkTqrvjqZUUlKC7OxspKenw8vLS+4Di0Qi+Pr64u7du1Lzw8PDwefzsWPHDuTm5sLPzw8dOnSAu/v//dpzcnKCk5OT3MckhBBFqEtv5ep6INdlZCzSMMicVHk8XqXzd+zYgVu3bsl10Hv37sHX1xeMMan5RUVF2LdvH7Zs2QJLS0tYWlpi+vTpiIuLk0qqshKJREhPT5d5/Tdv3lS6fmVDtsmz3+r2Jet+5ImhpnWrW/5uGVS3bm2OUx/rEtKQ1dRU/O6y6q792v4dklVVfxObi9qcv8xJtSoDBw5EZGSkXNtcvnwZzs7OmD9/Pmxtbbn5GRkZEIvFcHBw4OY5ODggJiYGJSUl0NCQL1xtbW25/gCnp6fLvL6i/rDXZT/ybFvTumXLZSmD6pYrMqbarktIU1LVtf/uGM3KGOhCnr+JTVH585c1ucqcpSQSSYV5hYWF2LlzJ9q0aSPrbgAA48ePr3S+UCiEvr6+1OM6bdu2RXFxMfLz82FkZCTXcQghpDGT55nbhvAuYSJHUu3ZsyfU1NQqzNfW1kZoaKhCgnn9+jW0tLSk5pVNi8VihRyDEEIaC0UNKSnP2Mo1oc5S1ZM5qe7atUtqWk1NDZqamujWrRtatmypkGC0tbUrJM+yaV1dXYUcgxBCmjtlJWsCtJB1RUdHR2hoaKBFixZwdHRE7969cfbsWQgEAoUF0759exQUFEglVqFQCC0tLejr6yvsOIQQ0py8KS5VdQjNhsxJNTk5GZMnT8bt27e5eY8ePcKkSZNw5MgRhQRjbm4OTU1N8Pl8bt6VK1dgYWEhdyclQgghb5XVLss+RHlkTqpbtmwBj8fDhAkTuHk8Hg+rV6+Wu/dvVXR1deHh4YGgoCDcuHEDJ06cwPbt2zFp0iSF7J8QQkj1ytdqzc3NqZYrJ5mrf0KhsNKxfy0tLfH48WOFBRQQEIBVq1bBy8sLenp6mDt3Ltzc3BS2f0IIIVWT59V6pCKZa6pWVlbYuXNnhQEb4uPj0aNHj1oHcPv2bW6IQuBtbXXt2rXg8/k4d+4cpk6dWut9E0IIUZ53a7HV1WprWrep1IhlrqkGBARgypQpOH36NPcwbEZGBoqKirB161alBUgIIaRhUtbL5RszuZ5TTU1NxZEjRyAQCKCpqQlnZ2eMGDFCYY/UEEIIIY2ZXF1qHzx4ADMzM66zUlRUFAQCAWxsbJQSHCGEENKYNKhHagghhNQ/Rd3PVNR9Unnuvza0e7Uy11TLHqkp/7YYHo8HZ2dnREZGUg9dQghppBQ1SpKiXtYuy/3X6t7so8p7tWrs3e68VbC1tUVKSgo6d+4sNT8zMxMjR47E9evXlRFfnVy7dk1qcH5CCCGkNkQikdRb1aoic0217JGaFStWSA2sX9dHapRJlgIghBBCFEXmmuqtW7cwZcoU6OnpVfpIjbW1tVIDJYQQQho6mZMqYwxpaWk4f/48rl69ii5duqBjx470SA0hhBDy/9XY/CsSiRATE4OkpCTk5+dzIyqlpaVhzJgx0NTUVHqQhBBCSGNQbU1VJBJh4sSJyMvLg5eXF3r16oXWrVvjyZMnuHHjBnbu3IkOHTogLi6uwsvFCSGEkOam2qS6efNmHD16FHv27EGrVq0qLH/58iU8PT0xaNAgzJkzR6mBEkIIIQ1dtYM//Prrr/juu+8qTagA0KpVK/j4+ODw4cNKCY4QQghpTKpNqo8ePYKZmVm1OzA1NVXoq99USSwWY9iwYfjzzz9VHUq9ysrKwqxZs9C7d2/0798fYWFhEIlEqg6rXgkEAkyePBl2dnZwcXFBbGysqkNSqcDAQHh6eqo6jHp3+PBhmJmZSX2aWytccXExeDwenJyc4OTkhJUrV0IsFqs6rHpz4MCBCtdA2efRo0c1bl9tRyUDAwM8evQIHTp0qHKdnJwcvP/++/JH3sCIRCL4+vri7t27qg6lXonFYsyaNQvdunVDQkICnj59iqVLlwIA/P39VRxd/SguLsa3334LJycnBAUF4f79+/D19YWRkRFGjBih6vDq3V9//YWkpCQ4OjqqOpR6d+/ePQwcOBArV67k5jW3AWTCw8Nx4sQJxMTEQE1NDYsWLUJ0dDR8fHxUHVq9cHNzQ79+/bhpiUSC2bNn46OPPqo2F5aptqbq4uKCqKgoSCSSSpdLJBJER0dj0KBBcobdsNy7dw/jxo1DVlaWqkOpdzdu3EBWVhZ4PB66du0KR0dHLFiwoFk16efl5cHa2horV65Ep06d4OLigj59+uDSpUuqDq3eFRUVYfny5bC3t1d1KCohEAhgZmaGdu3acZ/WrVurOqx6U1BQgL179yIkJAQODg6wt7fHvHnzcPPmTVWHVm90dHSkvv/ff/8djx49QkhIiEzbV5tUvb29kZ2djUmTJuHMmTN49uwZJBIJ8vLycOLECYwZMwaPHz/GzJkzFXIyqgzAWlkAACAASURBVHL58mU4OzsjMTFR1aHUuy5dumDbtm3Q09Pj5qmpqTWr5p6PPvoImzZtgo6ODhhjuHLlCi5duoRPP/1U1aHVu4iICDg6OjbLWirw9ge2iYmJqsNQmStXrkBHRwd9+vTh5o0ePbrZ3g4pLCzE5s2b4e3tDX19fZm2qbb519DQEHv37kVwcDBmzZqF8h2F1dXVMXjwYAQEBMDAwKBukavY+PHjVR2CyhgaGkr9DySRSBAXFwcHBwcVRqU6/fv3x5MnT+Di4oLBgwerOpx6xefzkZqail9++QXbt29XdTj1TiwWIzs7G6dOnUJkZCQkEgmGDBkCb2/vZvPIYFZWFoyNjfHLL79gy5YtKCoqwpAhQ+Dj49NsyqC8xMREaGlpYezYsTJvU+PgD+3bt0d0dDTy8/ORlpaGFy9eQF9fH1ZWVmjTpk2dAiYND4/HQ3p6OpKSklQdikrExMTgyZMnWLVqFXg8HpYtW6bqkOqFWCxGYGAgli5dKvMv8qbm4cOHKCkpwXvvvYfIyEhkZWVh9erVePXqldQ91qbs1atXyMnJQVxcHIKCgvDq1SsEBQWhpKQEgYGBqg6vXjHGkJiYiIkTJ8o1yJHMA+obGhqif//+tQqONHyMMaxevRp79+7F999/j+7du6s6JJWwsrICALx58wZLliyBn59fs/iFHh0djU6dOmHo0KGqDkVlunfvjgsXLnCVhR49eoAxBl9fXwQGBkJDQ+Y/l42WhoYGCgsLsW7dOnTs2BEA4OfnBz8/PwQEBKBFC5lfwd3o3bx5E1lZWRg5cqRc2zX9q4TUSCKRIDAwEIcPH0ZERAS++OILVYdUr/Ly8pCWloYBAwZw87p27Yri4mIUFhbC0NBQhdHVj8OHD0MoFMLOzg7A2x7RpaWlsLOzA5/PV3F09efd1rey6yA/Px9GRkYqiqr+GBkZQUNDg0uoAGBiYgKRSIT8/Hy0bdtWhdHVrzNnzsDGxgbt27eXa7vm87ODVCksLAyHDx9GVFRUo+/JXRsCgQDz58/H06dPuXk3b96EoaFhs0ioALB792788ssvSElJQUpKCsaOHQtLS0ukpKSoOrR6c+zYMfTp00eqk96tW7fQunVrtGvXToWR1R9bW1uUlJTg9u3b3DyBQAA9Pb1G33dGXtevX0fv3r3l3o6SajN37do17Ny5E97e3rC0tIRQKOQ+zUXv3r3RtWtX+Pv7QyAQ4NSpU9iwYQNmzZql6tDqjbGxMTp16sR9WrduDR0dHXTq1EnVodWb3r17gzGGFStW4MGDB/jjjz8QHh6OadOmSb1Duinr3LkzBgwYgICAAKSlpeHy5ctYv349xo0b1yyav8u7e/cuunXrJvd2zauUSAVHjx4FAGzYsAEbNmyQWnbz5s1m8T+SpqYmtm7diuDgYIwdOxZ6enrw8vLCpEmTVB0aqUdt2rTBTz/9BB6Ph9GjR6Nly5YYP358o39kUF7h4eFYvXo1vLy8oKGhAQ8PD/j6+qo6rHr333//1ap2LvP7VAkhhBBSPWr+JYQQQhSEkiohhBCiIJRUCSGEEAWhpEoIIYQoCCVVQgghREEoqRJCCCEKQkmVEEIIURBKqoQQQoiCUFIlhBBCFISSKiGEEKIglFQJIYQQBaGkSgghhCgIJVVCCCFEQSipEkIIIQpCSZUQQghREEqqhBBCiIJQUiWEEEIUhJIqIYQQoiCUVAkhhBAFoaRKCCGEKAglVUIIIURBKKkSQgghCkJJlRBCCFEQSqqEEEKIglBSJVLMzMykPk5OTli6dCkKCwuVety8vDysWLECn332GWxsbDB8+HAkJiYq5VjvnuO7n/pWUlKCefPmwcrq/7V353E15f8fwF+kkqLCyDdfOzdpu5UKYWTsa5qMNTIYUYYKFREV0YwsIUuWRpElY5nJPnYxlooklFIholTEvXXv5/dH3+6v67bclltd3s/Ho4fOOZ97zvt8Os77fj7nnM8xwKJFi2p9+xVZv3497Ozsyi0TExMDBwcHWFhYwNTUFHZ2drh582YtRQg8evQId+7cqfTn0tPToaOjg+fPn0ssK7nft27dgo6ODgoLC2UWC/k6UFIlEjZs2IBr167hypUr2L59O+Li4rBmzRqZbS81NRU2NjZ4+/YtAgIC8Ndff8He3h5r167F+vXra3x7165dE/0MGTIEw4YNE5tX2y5duoRLly4hPDwcHh4etb796jp37hzs7OzQpUsXhISE4NChQzAxMcGMGTNw5cqVWonB0dERycnJMlu/sbExrl27hkaNGtV5LKR+q/gIId8cdXV1fPfddwAALS0tTJ06FatXr4avr69Mtufl5QUOh4PNmzejYcOi73lt27ZFw4YN4enpiYkTJ6J169Y1tr3ifQMAJSUlNGrUSGxebcvLy4Ompib09PTqLIaq+vDhAzw9PeHg4ABHR0fRfGdnZ7x58wZr1qxB37590aBBgzqMsvqUlJTq9Bgh8oNaqqRCzZs3F5sWCoUIDg7GwIEDYWhoiClTpiAhIQEAEBUVBR0dHURFRQEAcnNz0adPH2zevLnUdWdkZCAqKgrTp08XJdRiI0aMwJ49e0Tbz8jIwPz582Fubg4LCwt4e3uDx+MBABYtWoTBgweDz+cDACIjI2FoaIhnz55VaZ8HDBgAf39/9OnTB8OHD0dhYSEuXryIsWPHwsDAAKampliwYIGoWzwwMBDOzs7w9vaGqakprKyssH37dtH6Hj9+jMmTJ4PL5cLS0hJr1qxBYWEhAgMD4e7ujjdv3kBHRwe3bt0qt36Bou7rDRs2oGfPnrC3t8fRo0cxceJEbNu2DWZmZrC0tMTJkycRGRmJ/v37w8zMDAEBAaLP8/l8rFq1Cj179oSFhQXmz5+Pt2/fipYnJiZi4sSJMDIywvTp0/H+/fsy6+mff/7Bhw8fMG3aNIll8+fPR0BAgCihRkdHY+LEieByuRgwYADCwsJEZd3d3bFw4UKxz+vo6ODGjRuiv0doaCgmTJgAIyMj2Nra4v79+wAAOzs7vHjxAp6ennB3dwcAbNy4EX379oWBgQHGjx+P6OjoCv7i5fuy+zcsLAw//PADDAwMMGrUKFy8eLHMWJKSkjBjxgyYmJigT58+CAwMhFAoFK37xIkTGDhwIIyMjODq6goXFxcEBgaK6sXNzQ3W1tawsLDA48ePkZSUhJkzZ8LY2BgGBgaYOHEinj59KoqzX79+iIiIgKWlJczMzLB7927cunULQ4cOhbGxMTw8PMS2T2oYI6QEDofDrl+/Lpp+9+4ds7e3Z15eXqJ5mzZtYr169WLnz59niYmJzM3NjVlaWrK8vDzGGGPu7u5s+PDhrKCggC1ZsoSNHj2a8fn8Urd36dIlxuFwWFZWVrlx8Xg8NnjwYDZz5kz26NEjFhUVxX744Qe2YsUKUZwWFhYsKCiIZWdns169erGdO3dWuL+urq7Mzc1NYr6VlRWztLRkjx49YvHx8Sw1NZXp6emx8PBwlpaWxq5evcosLCzYjh07RHWip6fHfH19WVJSEgsKCmIcDoc9ffqUMcbYqFGjmKenJ0tNTWX//vsv69mzJztw4AD78OED27t3L7O0tGRv3rxhPB6vwvrlcDhs5MiRLCkpiT158oRFREQwPT095ubmxlJSUpiPjw/jcrls0qRJLCEhge3fv59xOByWkJDAGGPMz8+P2draspiYGPb48WM2b948ZmNjw4RCIePxeMzKyootXLiQJSYmstDQUKarq8umTJlSav2tXbuWjRw5ssJ6TkxMZAYGBmzdunXs2bNn7OjRo8zIyIhFRkYyxhhzc3Njrq6uYp8peSxaWVkxCwsLdu7cOfbo0SM2adIkZmtryxhjLDs7m/Xr14/t3r2b5ebmsrNnzzIzMzN28+ZNlpqaylasWMH69OnDBAKBRFxpaWmMw+GwlJQUiWUBAQGi/b558ybjcDisoKCAPXz4kOnp6bFz586x9PR0tnXrVmZoaMhycnIkYnn37h0zNzdn7u7uLDExkZ07d45ZWFiIjs3bt28zPT09FhYWxhITE9nSpUuZjo4O27Rpk6heunXrxs6ePctiY2NZYWEhGzx4MFu2bBl7/vw5i4uLYz/99BObOXOmKM7u3buzWbNmscTERLZ9+3amq6vLxo4dy2JiYtjZs2dZ9+7d2YULFyr8m5GqoaRKxHA4HGZgYMC4XC4zMjJiHA6HmZubs8TERMYYY0KhkJmbm7OwsDDRZ/h8Pvv+++9ZaGgoY4yJkpqLiwvT09Nj8fHxZW7vxIkTopNVec6fP88MDQ1Zdna2aN7ly5eZrq4uy83NZYwxduzYMcblcpmDgwMbN24cKywsrHB/y0uqa9asEU0nJyez/fv3i5VxdnZmixcvZowVJdWePXuKbdPc3Jz9+eefjDHGTExM2Lp160TLHzx4wNLS0hhjjEVERLC+ffsyxqSrXw6Hw/bt2ydaHhERwXR1dUVJNyEhgXE4HBYVFSUqY2pqyiIjI1l+fj7T09NjDx8+FC379OkTMzQ0ZLdv32YXL15kXC6XffjwQbR83rx5ZSZVT09PNmHChFKXlbR69WpREiz222+/MRsbG8aYdEnVz89PtOz8+fOsW7duomkrKyt26NAhxhhje/bsYb169WKpqamMMcby8vLYjRs3Sj3GipOqkZER43K5Yj96enqlJtWzZ8+KHdcCgYBdvXqV5efnS8QSEhLC+vbtK/alcv/+/czCwoIxxpiLiwtzcXERLSsoKGDff/+9WFIdO3asaPnHjx/Zjh07xP4+Bw4cYP379xeLs/jLXF5eHuNwOOzIkSOi8qNGjZLqCyepGrqmSiR4e3vD2NgYAJCTk4OTJ09i/PjxOHz4MJo2bYr379/DyMhIVF5RURH6+vpISkoCAGhoaMDNzQ2LFy/GjBkzoKurC6Com8vLy0v0uZUrV4q6dnNzcyW6mUtKSkpCu3btoKGhIZpnYmICgUCAlJQUGBgYYMyYMfjzzz/xzz//4K+//oKCgkK16qFNmzai3zt06AAlJSUEBQXh6dOnePr0KRITEzFixAix8iW3qaqqioKCAgCAi4sLfH19cfDgQfTr1w8jRoyAvr6+xDbfvXtXYf1+GRsAaGpqQk1NDQDQuHFjiTLKysrg8/lIS0tDQUEBJk+eLPZ5Ho+H5ORk5OTkoG3btlBVVRUt09fXx9WrV0utI01NTeTm5pa6rKSkpCSxfQKKbv4p2QVckbZt24p+V1NTg1AohEAgkPg7jxo1CkePHsWgQYNgYGCAAQMGwNbWttybjIKCgqCtrS02b+/evUhMTJQo26dPH5iamsLa2hocDke0fhUVFYmySUlJ6N69OxQVFcX2Ozs7G1lZWXj8+DFsbW1Fyxo1aiRxXPz3v/8V/d6kSRNMmjQJx48fR1xcHJ49e4b4+Hix/xcl66r4WCi5b40bNxZdJiE1j5IqkdCqVSu0b99eNG1oaIgrV67g0KFDmDt3bqmfEQgEEAgEoumEhAQoKCjg9u3bEAqFaNiwIQYMGCB2Ym3RogUKCgrQsGFD3L9/H/379xdbZ0FBARwcHDB37lwoKyuXuk0AoutD+fn5SE1NhYKCAv7991907dq1ynUAQGybCQkJmDhxIqysrGBqagp7e3uEhISIlS954vzS5MmTYWVlhQsXLuDSpUuYO3cu5syZg3nz5pW5zZK+rN8vy5X2BaK0m4OK17Fv3z40bdpUbFnz5s1x8OBBMMbE5peXjAwMDBAcHIy8vDyJ9cXHx2PTpk1YvXp1qftVnBRLi7W0R1eUlJQk5n0ZK1B0XB09ehRRUVG4fPkyDh48iLCwMEREREBLS6vU/dDW1hY75gGgWbNmpZZVUVHB3r17cffuXVy8eBGnT59GaGgowsLC0K1bN7GyZe138b8KCgoS+/DldMn9/vjxI2xtbaGuro6BAwdi5MiRePbsGXbs2CH2mS+Phy/vVyCyU6ma5vF4OHHiBDZt2oT379/j5s2byMzMlFVspJ4RCARo2rQpvvvuO8TGxormFxQU4OHDh+jYsSOAopPpvn37sHnzZqSmpmLfvn0AiloX7du3F/2oqalBU1MT/fr1w969eyVOJidOnMCNGzegra2Nzp07IzU1VeymmZiYGCgoKKBdu3YAim5OUVFRgbe3N9atW4eMjIwa2/fjx4/DxMQEAQEBmDx5MgwNDfH8+fNST+pf4vF48PX1RYMGDWBnZ4ddu3bByckJkZGREmWlqd/qaNu2LRQUFJCdnS36OzRv3hx+fn548eIFunbtitTUVOTk5Ig+Ex8fX+b6LC0toaGhIfEFAwBCQkKQnJyM5s2bo3PnzmL7BBTduFS8T4qKimLPQqelpVV5Hy9duoSDBw+ib9++8PT0xOnTp/Hx40fcvXu3yussKTo6Glu3bkWPHj2waNEinDp1Ci1btiz18aHOnTsjPj5e1GNR/HkNDQ00b94cXbp0QVxcnGiZQCDAo0ePytz2v//+i4yMDOzbtw8zZ85E79698fLlS6mOQ1I7pG6pPn/+XHSHZkZGBsaOHYvw8HBERUVh165dpXZlEfmUk5Mj+rL0+fNnRERE4Pnz5xg6dCgA4Oeff8bmzZuhpaWFDh06IDg4GDweDyNHjoRAIICnpydGjRqFAQMGYOHChVi9ejUGDRok0b1WzM3NDRMnToSTkxNmzZoFDQ0NXLlyBQEBAXB0dMR//vMf0bYWL14MFxcX5OTkwNfXF8OHD4empibi4uIQGhqK3bt3w9zcHEePHsWKFSuwbdu2GqkTDQ0NPHnyBLGxsVBXV0d4eDgePHhQ5j6VpKysjHv37uHly5dwdXVFYWEhrly5UuYjNOXVb3Wpqalh3Lhx8PHxwcqVK9GqVSusW7cOT548QYcOHdC5c2doa2tjyZIlcHZ2RkxMDM6cOQMul1vq+po0aQJPT08sWrQIfD4fo0ePRmFhIQ4dOoS//voLwcHBAIBJkyYhJCQEAQEBGDt2LGJjY7F//34sXboUQFGLd+XKlbh27Rq0tLSwZs2aUlumZVFVVcWzZ8/w/v17CIVC+Pv7o0WLFtDX10dUVBT4fL5EK7KqGjdujK1bt6JFixbo06cPEhIS8OrVK9E5sGQsI0eORGBgIJYvX46ZM2ciJSUFgYGBmDBhAho2bIgpU6bAzs4OFhYWMDMzQ1hYGF68eFHmI0gaGhr49OkTzp07B0NDQ0RFRSEsLEzUzUvqntRJ1dfXFwMGDMDSpUthYmICAAgICMCKFSuwevVq7N+/X2ZBktq1YMEC0e/Kysro1q0bAgMDRX93e3t7fPjwAV5eXsjLywOXy8W+ffvQsmVL7N69G2lpaaKTqa2tLY4cOYIVK1ZIdFEV69SpEw4cOIDNmzfDyckJeXl56NChA5YtW4Yff/wRQFH31ZYtW+Dj44Px48ejSZMmGDVqFFxdXSEQCLBs2TIMHToUFhYWAIqefbWxsUFkZCSGDx9e7Tqxs7NDfHw8pk+fDiUlJZiZmcHJyQknTpyQ6vPr16+Ht7c3fvrpJwCAlZUVli1bVmrZ8uq3Jnh4eMDf3x/Ozs7g8XgwMTHBrl27RCfmHTt2wNPTEzY2NujWrRsmTZpUbmt1+PDhaNasGbZv347w8HAIhULo6ekhJCQEPXr0AAC0bt0a27dvh7+/P3bv3g1tbW24ublh3LhxAIAxY8bg3r17mDdvHtTU1PDrr78iNTVV6n2aPHky1q5di/T0dAQGBmLBggXw9/fHmzdv0K5dO6xbtw6dOnWqRq39P11dXfj5+SEoKAirVq1Cq1at4Obmht69e5caS3BwMHx9fWFtbY3mzZtj6tSpcHBwAFB0fdXLywtbtmxBdnY2hgwZAhMTkzIvJRgbG8PJyQk+Pj7g8XjgcDjw8vKCh4cHXr58WSP7R6qnAZOy36BHjx44fPgwOnbsCGNjY5w4cQJt27ZFamoqxowZU+3nwAgh5Ftz//59qKmpiSX8ESNGYMaMGbCxsanDyEhVSX1NtUmTJqVeP33y5EmZF/QJIYSULTo6Gr/88gvu3buHtLQ0bNu2Da9evULfvn3rOjRSRVJ3/06YMAHLly8XjXqSlJSEqKgobNiwARMnTpRZgIQQ8rWaPHky0tPTMW/ePOTl5UFXVxc7d+6kIRHlmNTdv0DRbfi7du0S3VXZokUL2NvbY8aMGXTLNiGEkG9epZIqUPQM1adPnyAQCMAYo65fQggh5H+k7v7NzMyEu7s79PX14ezsDKDoGTV9fX34+fmVOxpOXYmJiSnzYfov8Xg8qcsSSVR/1UP1Vz1Uf9VD9VcxHo9X5qNlJUndUp07dy54PB5WrFghGgIrJSUFPj4+UFdXF3sLRn3x6NEj0RB5NVmWSKL6qx6qv+qh+qseqr+KSVtHUrdUb926hSNHjoiNv9mhQwcsWbIEEyZMqFqUcuJzgQCNFRXKnCaEEEKASiRVVVVVpKenSwyV9vr163LHPP0aNFZUQAf3v0XTKWtGlFOaEELIt0rqpGpra4ulS5di/vz5ouHV4uPjERgYiLFjx8osQEIIIUReSJ1UnZycIBQKsW7dOmRlZQGAaMitWbNmySxAInslu7Opa5sQQqpO6qTasGFDLFiwAAsWLEBWVhaUlJRE728k8q1k9zZ1bRNCSNVV6n2qSUlJiIuLQ2FhocSrhkq+aJcQQgj5FkmdVHfs2IGAgACoq6tDVVVVbFmDBg0oqRJCCPnmSZ1Uw8PD4ezsjNmzZ8syHkIk0CNNhBB5IXVSzc3NxZAhQ2QZCyGlqq1HmuiGLUJIdUk9Cv6YMWMQHh4ucS2VkK9FcfLu4P43JVRCSJVI3VLNzs7G2bNncfLkSbRp00ZiwIewsLAaD44QQgiRJ1In1U6dOsHBwUGWsRDyVaJuZUK+HZUa/KFYYWEhFBQU0KBBA5kERcjXhJ4DJuTbUak3i4eFhWHQoEHgcrlIT0/HsmXLEBAQAKFQKKv4CCH/87lAUO40IaTuSZ1U9+zZg+DgYDg6OqJRo6IGrqWlJSIiIrBhwwaZBUgIKVLyRiq6mYqQ+knqpBoeHg5vb29YW1uLun2HDh0Kf39/HDt2TGYBEkKqr2Srllq4hMiO1NdUMzIy0KFDB4n5rVu3Rm5ubk3GJOHz589YvHgx3r17h8LCQri7u8PY2Fim2yTka0LXdQmpHVK3VLlcLiIiIsTmCYVCBAcHw9DQsMYDK+nQoUPo2rUrwsLC4Ofnh1WrVsl0e4R8y6hVS0jVSd1S9fT0xKxZs3Dp0iXw+Xx4eXkhJSUFfD4fwcHBsowRNjY2aNiwKP8LBIKv/qXohNSlyrRqy3tciIaXJN8iqZNq586dcebMGZw8eRJJSUkQCAQYNGgQRo8eLTHAfk0rfsXcu3fvsHjxYnh4eMh0e4QQ6ZSXgGtreElC6hOpk+ro0aPx+++/19nbaJKSkrBgwQK4urrC3Ny8TmIghNQcGhSDfI2kTqo5OTlQUKibg/7FixdwdHTEb7/9BgMDgzqJgRBSs6p681Rp3cq1jbq2SVkq1VL9+eefMWrUKLRp0wbKyspiyyvTguXz+bCxscGSJUvQu3dv0TwfHx+cPn0aSkpKsLe3x6xZswAAmzdvxqdPn+Dv7w8A0NTUxKZNm6TeHiFEvpSXtL7sVk7wGQpdXd0yPysLlenark4CllXy/nI97Tp0qvY6SRGpk+qpU6egqKiI06dPSyyrzEvKeTweXF1d8fTpU7H5/v7+iI6Oxp49e5CRkYHFixdDW1sbI0aMgJ+fn7RhEkK+ApVJWuWVrQ8tytK+BJRUXje4rJJ3bX0p+BZJnVRXrlwJExOTat2UlJiYCFdXV4nXx+Xn5+PQoUPYtm0b9PX1oa+vj5kzZyI0NBQjRlT95gYej4dHjx5JVfbz589lli35LbiYtOuVB1/uX1X2rbz6q67aqv+aqIeqrlea+qtOPVRm32qqbEXxVvWzpS0rr2x5Ce0TvxAqSkWnwY+feEhNeVbhuiuKr6KypSW0kt3g0tZDuw6doKry/z2G5SXvkvtZlppYb2Xq8GsldVJduHAh9u3bBw6HU+WN3blzB5aWlpg3bx64XK5ofkJCAvh8PkxNTUXzTE1NsXXrVhQWFoqGRawsZWVlqf4DAkUHlLRlAen+Y8urquxbZeuvumpjW7LaRlknyqpsr6oxyupYr6hsecur81lpy5aX0KrbjVwTx8vnAkG56/lyeXmtzS+vWVfUMq2J9ZZXh/LewpX2C6zU2UpHRwd37typVlKdMGFCqfMzMzOhrq4udp22ZcuWKCgoQFZWFlq1alXlbRJCiDQq001bWzFUlNBqSk3tW0VfWmSxzfpG6qSqqqoKHx8fBAYGlnqjUnVeUv7p0ycoKSmJzSue5vP5VV4vIYRUVUXdtCXJ+3XH2hjG8lt5blnqpKqnpwc9PT2ZBKGsrCyRPIunVVRUZLJNQgipKRW1csm3o0ovKa9pWlpayM3NBZ/PF7VQMzMzoaSkBHV1dZltlxBCZIFeYFCx8lr38tbSL0nqpLp48eJylxc/Q1oVurq6UFRURHR0NCwsLAAAd+/ehZ6eXpVvUiKEEFJ/VaZ7XZ5I/ZYaBQUFsR/GGFJTU3HmzBm0bt26WkGoqKjA2toaK1euxP3793HhwgXs3r0bU6dOrdZ6CSGEyJ8vR8mSp7clSd0MLGsAhj179iA+Pr7agXh4eGDFihWYNm0aVFVV4ejoiOHDh1d7vYQQQuRLfbgTu6qq3bc6aNCgKg0Z+PjxY7FpFRUVrF27FmvXrq1uSIQQQr4i8nTnsNRJVSgUSsz78OEDQkJCoKmpWaNBEUIIIfJI6qTavXt3NGjQQGK+srIyfH19azQoQgghRB5JnVT/+OMPsekGDRpAUVERXbp0Eb1EnBBCCPmWSX33r7m5ORo1aoSGDRvC3NwcZmZmuHr1KpKSkmQZHyGEECI3pE6qERERsLe3F7vB6OXLl5g6dSoiIyNlEhwhhBDytYlFPQAACbtJREFUpZKP2NS3x2+k7v7dtm0b/Pz8xF7F5ufnB0tLS2zatIkefyGEEFIrKvsGntokdUs1MzOz1LF/9fX18erVqxoNihBCCJFHUidVAwMDhISESLxgPCwsDN26davxwAghhBB5I3X3r4eHB6ZPn47Lly+LXkKbkJCA/Px8bN++XWYBEkIIIfKiUs+pnj59GpGRkUhKSoKioiIsLS0xevRoeqSGEEIIQSWHKUxOToaOjg4mT54MAAgMDERSUhKMjIxkEhwhhBAiT+iRGkIIIaSGSJ1Uix+pKW6lAkWP1KxatapKA+oTQgghNa2un1uVuvuXHqkhhBBS39X1G20asC+fkSmDnZ0dunTpguXLl4sNrL9q1Srcv38fBw8elFmQVRUTEwNlZeW6DoMQQoic4/F44HK5FZaTOqnGx8dj+vTpUFVVLfWRGkNDw+pFTAghhMg5qZMqYwxxcXG4fv067t27h06dOqFdu3b0SA0hhBDyPxVeU+XxeNi6dSuOHDmCrKws0YhKcXFxsLW1haKiosyDJIQQQuRBuS1VHo+HKVOm4PXr15g2bRp69OiBZs2a4c2bN7h//z5CQkKgra2N0NBQKCkp1WbchBBCSL1TblLdvHkzzpw5g/3796Np06YSy/Py8mBnZ4fBgwdj7ty5Mg2UEEIIqe/KfU7177//houLS6kJFQCaNm0KZ2dnnDx5UibBEUIIIfKk3KT68uVL6OjolLsCDodDz6kSQgghqCCpamho4OXLl+WuID09HS1atKjRoGSBz+dj2bJlMDMzg6WlJXbu3Flm2Tt37sDGxgZcLhdjxozBtWvXajHS+o3P52PkyJG4ceNGmWVevHiBn3/+GVwuF8OGDcPly5drMcL6TZr6i4qKwo8//ghjY2MMGTIEhw8frsUI6zdp6q9k2REjRiAwMLAWIpMP0tTf69evMXfuXHC5XPTv3x9hYWG1GKH8KzepWllZITAwEEKhsNTlQqEQW7ZsweDBg2USXE3y9/dHdHQ09uzZg5UrVyIoKAh///23RLl3797BwcEBQ4cOxYkTJzBs2DA4OjrixYsXdRB1/cLj8eDi4oKnT5+WWYYxhrlz50JDQwNHjhzB2LFj8euvvyItLa0WI62fpKm/lJQUzJ49G4MGDcKxY8fg6OgIb29v/PPPP7UYaf0kTf2VFBQUhMTERBlHJT+kqT+hUIg5c+aAx+MhIiICCxcuhJ+fH65fv16Lkcq3cpNq8clw6tSpuHLlCrKzsyEUCvH69WtcuHABtra2ePXqFWbPnl1b8VZJfn4+Dh06hCVLlkBfXx8DBw7EzJkzERoaKlH23r17AIBffvkF7dq1g4ODAxo3bozY2NjaDrteSUxMxE8//YTU1NRyy928eRPJycnw9vZGly5d8Msvv8DY2BhHjhyppUjrJ2nrLzIyErq6unBwcED79u0xevRoWFtbf/P3LUhbf8USEhJw+PBhdOrUScaRyQdp6+/q1atISUnBunXr0LlzZ4wcORI2NjaIjo6upUjlX7lJtXnz5jhw4ADU1dXh4OCA3r17Q09PD/3798f8+fPRsWNHhIWFQUNDo7birZKEhATw+XyYmpqK5pmamuLBgwcoLCwUK6uhoYG8vDycOnUKjDGcP38eHz9+rPDa8tfuzp07sLS0rHA4ytjYWHTv3l1sQBBTU1PExMTIOsR6Tdr6GzZsGJYtWyY2r0GDBuDxeLIMr96Ttv4AQCAQYMmSJVi4cGG9PzfVFmnr7+bNm7CwsBCrN29vbzg5Ock6xK9GhYM/aGlpYcuWLcjKykJcXBxycnKgrq4OAwMDaGpq1kaM1ZaZmQl1dXWxcYBbtmyJgoICZGVloVWrVqL5PXr0wJQpU+Ds7AxXV1cIBAL4+vqic+fOdRF6vTFhwgSpymVmZorVJwC0aNECGRkZsghLbkhbfx07dhSbfvv2Lf7+++9v/qQmbf0BwK5du6CpqQlra+t6OSZ5XZC2/lJTU6GtrY3169fj2LFjUFNTg729PcaNGyfjCL8eUr+lpnnz5ujXr58sY5GZT58+SQxOUTzN5/PF5ufn5yM9PR1z5szBoEGDcP36daxevRpdu3aVajDlb92nT58kRtlSUlJCQUFBHUUkv/Lz8+Hk5IRWrVpVKql8y5KTk7Fr1y5ERETUdShy6ePHjzh+/DgGDx6MLVu2ID4+Ht7e3tDU1MTAgQPrOjy5IHVSlWfKysoSybN4WkVFRWz+rl27wOfzMX/+fABA9+7dkZiYiKCgIGzfvr12ApZjysrK+PDhg9g8Pp+Pxo0b11FE8ikvLw+zZ89Geno69u/fL3GcEkmMMSxduhRz5szBf//737oORy4pKCigWbNm8PHxgYKCAvT19ZGQkIADBw5QUpXSN5FUtbS0kJubCz6fL2qhZmZmQklJCerq6mJlHzx4gK5du4rN09PTQ3h4eK3FK8+0tLSQkJAgNu/t27f47rvv6igi+ZOVlYUZM2bg7du3+OOPP9CuXbu6DkkuvHz5Enfv3kV8fDw2btwIAPj8+TMePHiA2NhYBAcH13GE9V+rVq0gFAqhoKAgmtexY0dERUXVYVTy5ZtIqrq6ulBUVER0dDQsLCwAAHfv3oWenh4aNRKvglatWuHx48di85KSkujEJiUjIyNs374d+fn5aNKkCYCiuqauc+nw+Xw4ODggOzsbYWFhdNxVgpaWFs6ePSs2z9nZGSYmJpg1a1YdRSVfjI2NsXHjRhQUFIgu4yQmJqJNmzZ1HJn8KPfu36+FiooKrK2tsXLlSty/fx8XLlzA7t27MXXqVABFrdbPnz8DAMaPH4/bt29j586dSEtLw+HDh3H06FFMmzatLnehXsvKysLHjx8BAObm5tDW1oa7uzuePn2KHTt2IDY2lm50KEfJ+tu7dy8ePnwIPz8/qKioIDMzE5mZmXj//n0dR1l/Fddfo0aN0L59e7EfZWVlqKurQ0tLq67DrLdKHn/Dhw9Ho0aN4OnpieTkZBw/fhxHjx7FpEmT6jhK+fFNJFUA8PDwgIGBAaZNmwYvLy84Ojpi+PDhAIA+ffogMjISAGBoaIigoCCcOnUKo0ePxh9//IHff/8dvXr1qsvw6zVbW1vs3r0bQNE1ma1btyIrKws2NjY4fvw4Nm/eTNe4ylGy/k6fPo3CwkLY29ujT58+op85c+bUcZT1V8n6I5VXsv7U1NSwZ88evH79GqNHj8bGjRuxfPlyDBgwoI6jlB9Sv6ScEEIIIeX7ZlqqhBBCiKxRUiWEEEJqCCVVQgghpIZQUiWEEEJqCCVVQgghpIZQUiWEEEJqCCVVQgghpIZQUiWEEEJqyP8BiG6mJxR5hJQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e84c4b748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 例2-13。可视化评论数的原始、对数转换和 Box-Cox 转换的直方图。\n",
    "\n",
    "fig, (ax1, ax2, ax3) = plt.subplots(3, 1)\n",
    "fig.tight_layout(pad=0, w_pad=4.0, h_pad=4.0)\n",
    "# original review count histogram\n",
    "biz_df['review_count'].hist(ax=ax1, bins=100)\n",
    "ax1.set_yscale('log')\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_title('Review Counts Histogram', fontsize=14)\n",
    "ax1.set_xlabel('')\n",
    "ax1.set_ylabel('Occurrence', fontsize=14)\n",
    "\n",
    "# review count after log transform\n",
    "biz_df['rc_log'].hist(ax=ax2, bins=100)\n",
    "ax2.set_yscale('log')\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_title('Log Transformed Counts Histogram', fontsize=14)\n",
    "ax2.set_xlabel('')\n",
    "ax2.set_ylabel('Occurrence', fontsize=14)\n",
    "\n",
    "# review count after optimal Box-Cox transform\n",
    "biz_df['rc_bc'].hist(ax=ax3, bins=100)\n",
    "ax3.set_yscale('log')\n",
    "ax3.tick_params(labelsize=14)\n",
    "ax3.set_title('Box-Cox Transformed Counts Histogram', fontsize=14)\n",
    "ax3.set_xlabel('')\n",
    "ax3.set_ylabel('Occurrence', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-13. Box-Cox transformation of Yelp business review counts.**\n",
    "\n",
    "概率图是一种直观地比较数据分布与理论分布的简单方法。这本质上是观察到散点图的与理论分位数。图2-14显示YELP评论数的原始数据和转换后数据相对正态分布的概率图。由于观测数据是严格正的，高斯可以是负的，所以分位数在负端上永远不会匹配。所以我们关注的是正数这的一边。在这方面，原始评论数明显比正常分布更重尾。（有序值上升到4000，而理论位数仅延伸到4）。简单的对数变换和最优的 Box-Cox 变换都使正尾部接近正态分布。最优的 Box-Cox 变换比对数变换更缩小尾部，由于尾部在红色对角线等值线下平展可以明显看出。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例 2-14:原始和变换后的数据相对正态分布的概率图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Probplot after Box-Cox transform')"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14e8403ff60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "fig2, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(8, 6))\n",
    "# fig.tight_layout(pad=4, w_pad=5.0, h_pad=0.0)\n",
    "prob1 = stats.probplot(biz_df['review_count'], dist=stats.norm, plot=ax1)\n",
    "ax1.set_xlabel('')\n",
    "ax1.set_title('Probplot against normal distribution')\n",
    "prob2 = stats.probplot(biz_df['rc_log'], dist=stats.norm, plot=ax2)\n",
    "ax2.set_xlabel('')\n",
    "ax2.set_title('Probplot after log transform')\n",
    "prob3 = stats.probplot(biz_df['rc_bc'], dist=stats.norm, plot=ax3)\n",
    "ax3.set_xlabel('Theoretical quantiles')\n",
    "ax3.set_title('Probplot after Box-Cox transform')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-14. Comparing the distribution of raw and transformed review counts against the Normal distribution.**\n",
    "\n",
    "## 特征缩放或归一化\n",
    "\n",
    "某些特征的值有界的，如纬度或经度。其他数值特征 (如数量) 可能会在无界的情况下增加。那些关于输入是平滑函数的模型, 如线性回归、逻辑回归或任何涉及矩阵的东西, 都受输入的数值范围影响。另一方面, 基于树的模型不太在意这个。如果你的模型对输入特征的数值范围敏感, 则特征缩放可能会有所帮助。顾名思义, 特征缩放会更改特征值的数值范围。有时人们也称它为特征规范化。功能缩放通常分别针对单个特征进行。有几种常见的缩放操作, 每个类型都产生不同的特征值分布。\n",
    "\n",
    "### Min-max缩放\n",
    "\n",
    "设$X$是一个单独的特征值（即，在某些数据点中的一个特征值），以及 $min(x)$ 和 $max(x)$ ，分别是整个数据集上该特征的最小值和最大值。Min-max缩放压缩（或拉伸）所有特征值到$[0, 1 ]$的范围内。图2-15演示了这个概念。最小最大尺度的公式是\n",
    "\n",
    "$$\n",
    "\\widetilde{x}=\\frac{x-\\min (x)}{\\max (x)-\\min (x)}\n",
    "$$\n",
    "\n",
    "![](../images/chapter2/2-15.png)\n",
    "\n",
    "**Figure 2-15. Min-max scaling**\n",
    "\n",
    "### 标准化（方差缩放）\n",
    "\n",
    "特征标准化的定义为：\n",
    "\n",
    "$$\n",
    "\\widetilde{x}=\\frac{x-\\operatorname{mean}(x)}{\\operatorname{var}(x)}\n",
    "$$\n",
    "\n",
    "减去特征 (所有数据点) 的平均值并除以方差。因此, 它也可以称为方差缩放。缩放后的特征的平均值为0, 方差为1。如果原始特征具有高斯分布, 则缩放特征为标准高斯。图2-16 包含了标准化的说明。\n",
    "\n",
    "![](images/chapter2/2-16.png)\n",
    "\n",
    "**Figure 2-16. Illustration of feature standardization**\n",
    "\n",
    "## 不要中心化稀疏数据\n",
    "\n",
    "最小最大缩放和标准化都从原始特征值中减去一个数量。对于最小最大缩放, 移动量是当前特征的所有值中最小的。对于标准化, 移动的量是平均值。如果移动量不是零, 则这两种转换可以将稀疏特征（大部分值为零）的向量转换为一个稠密的向量。这反过来会给分类器带来巨大的计算负担, 取决于它是如何实现的。词袋是一种稀疏表示, 大多数分类库都对稀疏输入进行优化。如果现在的表示形式包含了文档中没有出现的每个单词, 那就太可怕了。请谨慎对稀疏特征执行最小最大缩放和标准化操作。\n",
    "\n",
    "### L2 normalization\n",
    "\n",
    "这项技术通过所谓的 L2 范数 (也称为欧几里德范数) 正常化 (划分) 原始特征值。\n",
    "\n",
    "$$\n",
    "\\widetilde{x}=\\frac{x}{\\|x\\|_{2}}\n",
    "$$\n",
    "\n",
    "L2范数度量向量在坐标空间中的长度。这个定义可以从众所周知的勾股定理中得到，给出三角形两边的长度，可以得到斜边长度。\n",
    "\n",
    "$$\n",
    "\\|x\\|_{2}=\\sqrt{x_{1}^{2}+x_{2}^{2}+\\ldots+x_{m}^{2}}\n",
    "$$\n",
    "\n",
    "L2 范数将求特征的各数据点的平方和, 然后取平方根。L2 规范化后, 该特征列具有范数1。它也可以称为 L2 缩放。(不严谨的说, 缩放意味着和常量相乘, 而规范化可能涉及许多操作。）图2-17说明了 L2 规范化。\n",
    "\n",
    "![](images/chapter2/2-17.png)\n",
    "\n",
    "**Figure 2-17. Illustration of L2 feature normalization**\n",
    "\n",
    "## 数据空间与特征空间\n",
    "\n",
    "请注意，图2-17中的说明是在数据空间中，而不是特征空间。还可以对数据点进行L2归一化，而不是特征，这将导致具有单位范数（范数为1）的数据向量。（参见[词袋](https://www.safaribooksonline.com/library/view/feature-engineering-for/9781491953235/ch03.html#sec-bag-of-words)中关于数据向量和特征向量的互补性质的讨论）不管缩放方法如何，特征缩放总是将特征除以常数（也称为归一化常数）。因此，它不会改变单特征分布的形状。我们将用在线新闻文章标记计数来说明这一点。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例子 2-15。特征缩放示例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:7: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.\n",
      "  import sys\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([219., 255., 211., ..., 442., 682., 157.])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import sklearn.preprocessing as preproc\n",
    "\n",
    "# Load the online news popularity dataset\n",
    "df = pd.read_csv('data/OnlineNewsPopularity.csv', delimiter=', ')\n",
    "\n",
    "# Look at the original data - the number of words in an article\n",
    "df['n_tokens_content'].as_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.02584376, 0.03009205, 0.02489969, ..., 0.05215955, 0.08048147,\n",
       "       0.01852726])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Min-max scaling\n",
    "df['minmax'] = preproc.minmax_scale(df[['n_tokens_content']])\n",
    "df['minmax'].as_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.69521045, -0.61879381, -0.71219192, ..., -0.2218518 ,\n",
       "        0.28759248, -0.82681689])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Standardization - note that by definition, some outputs will be negative\n",
    "df['standardized'] = preproc.StandardScaler().fit_transform(df[['n_tokens_content']])\n",
    "df['standardized'].as_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.00152439, 0.00177498, 0.00146871, ..., 0.00307663, 0.0047472 ,\n",
       "       0.00109283])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# L2-normalization\n",
    "df['l2_normalized'] = preproc.normalize(df[['n_tokens_content']], axis=0)\n",
    "df['l2_normalized'].as_matrix()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们也可以可视化用不同的特征缩放方法后的数据的分布。如图2-18所示，与对数变换不同，特征缩放不会改变分布的形状；只有数据的规模发生变化。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例2-16。绘制原始数据和缩放数据的直方图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(29.125,0.5,'Number of articles')"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f210dbce10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2, ax3, ax4) = plt.subplots(4,1)\n",
    "fig.tight_layout(pad=0, w_pad=1.0, h_pad=2.0)\n",
    "# fig.tight_layout()\n",
    "\n",
    "df['n_tokens_content'].hist(ax=ax1, bins=100)\n",
    "ax1.tick_params(labelsize=14)\n",
    "ax1.set_xlabel('Article word count', fontsize=14)\n",
    "# ax1.set_ylabel('Number of articles', fontsize=14)\n",
    "\n",
    "df['minmax'].hist(ax=ax2, bins=100)\n",
    "ax2.tick_params(labelsize=14)\n",
    "ax2.set_xlabel('Min-max scaled word count', fontsize=14)\n",
    "ax2.set_ylabel('Number of articles', fontsize=14)\n",
    "\n",
    "df['standardized'].hist(ax=ax3, bins=100)\n",
    "ax3.tick_params(labelsize=14)\n",
    "ax3.set_xlabel('Standardized word count', fontsize=14)\n",
    "# ax3.set_ylabel('Number of articles', fontsize=14)\n",
    "\n",
    "df['l2_normalized'].hist(ax=ax4, bins=100)\n",
    "ax4.tick_params(labelsize=14)\n",
    "ax4.set_xlabel('L2-normalized word count', fontsize=14)\n",
    "ax4.set_ylabel('Number of articles', fontsize=14)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 2-18. Original and scaled news article word counts. Note that only the scale of the x-axis changes; the shape of the distribution stays the same with feature scaling.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在一组输入特征在比例上差异很大的情况下，特征缩放非常有用。例如，一个流行的电子商务网站的每日访问者数量可能是十万，而实际销售额可能是几千。如果这两种功能都投入到模型中，那么该模型需要在确定要做什么的同时平衡它们的规模。输入特征的极大变化会导致模型训练算法的数值稳定性问题。在这些情况下，标准化功能是个好主意。第4章将详细介绍处理自然文本时的特征缩放，包括使用示例。\n",
    "\n",
    "## 交互特征\n",
    "\n",
    "简单的成对交互特征是两个特征的积。类似逻辑与。它以成对条件表示结果：“购买来自邮政编码98121”和“用户的年龄在18到35之间”。这一点对基于决策树的模型没有影响，但发交互特征对广义线性模型通常很有帮助。\n",
    "\n",
    "一个简单的线性模型使用单个输入特征线性组合$x_1$，$x_2$，... $x_n$来预测结果$y$\n",
    "\n",
    "$$\n",
    "y=w_{i} x_{l}+w_{2} x_{2}+\\ldots+w_{n} x_{n}\n",
    "$$\n",
    "\n",
    "一个简单的扩展线性模型的方法是包含输入特征对的组合，如下所示：\n",
    "\n",
    "$$\n",
    "y=w_{1} x_{1}+w_{2} x_{2}+\\ldots+w_{n} x_{n}+w_{1,1} x_{1} x_{1}+w_{1,2} x_{1} x_{2}+w_{1,3} x_{1} x_{3}+\\ldots\n",
    "$$\n",
    "\n",
    "这使我们能够捕获特征之间的相互影响，因此它们被称为交互特征。如果$x_1$和$x_2$是二元的，那么它们的积 $x_1x_2$ 是逻辑函数 $x_1\\ AND\\ x_2$ 假设问题是根据他或她的个人资料信息预测客户的偏好。在这种情况下，交互特征不是仅基于用户的年龄或位置进行预测，而交互特征允许模型基于具有特定年龄和特定位置的用户进行预测。\n",
    "\n",
    "在例2-17中，我们使用 UCI 在线新闻数据集中的成对交互特征来预测每篇新闻文章的分享数量。交互特征导致精度超过单身特征。两者都比例2-9表现得更好，它使用文章正文中单词数的单个预测器（有或没有经过对数变换）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例 2--17:用于预测的交互特征示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['url', 'timedelta', 'n_tokens_title', 'n_tokens_content',\n",
       "       'n_unique_tokens', 'n_non_stop_words', 'n_non_stop_unique_tokens',\n",
       "       'num_hrefs', 'num_self_hrefs', 'num_imgs', 'num_videos',\n",
       "       'average_token_length', 'num_keywords', 'data_channel_is_lifestyle',\n",
       "       'data_channel_is_entertainment', 'data_channel_is_bus',\n",
       "       'data_channel_is_socmed', 'data_channel_is_tech',\n",
       "       'data_channel_is_world', 'kw_min_min', 'kw_max_min', 'kw_avg_min',\n",
       "       'kw_min_max', 'kw_max_max', 'kw_avg_max', 'kw_min_avg', 'kw_max_avg',\n",
       "       'kw_avg_avg', 'self_reference_min_shares', 'self_reference_max_shares',\n",
       "       'self_reference_avg_sharess', 'weekday_is_monday', 'weekday_is_tuesday',\n",
       "       'weekday_is_wednesday', 'weekday_is_thursday', 'weekday_is_friday',\n",
       "       'weekday_is_saturday', 'weekday_is_sunday', 'is_weekend', 'LDA_00',\n",
       "       'LDA_01', 'LDA_02', 'LDA_03', 'LDA_04', 'global_subjectivity',\n",
       "       'global_sentiment_polarity', 'global_rate_positive_words',\n",
       "       'global_rate_negative_words', 'rate_positive_words',\n",
       "       'rate_negative_words', 'avg_positive_polarity', 'min_positive_polarity',\n",
       "       'max_positive_polarity', 'avg_negative_polarity',\n",
       "       'min_negative_polarity', 'max_negative_polarity', 'title_subjectivity',\n",
       "       'title_sentiment_polarity', 'abs_title_subjectivity',\n",
       "       'abs_title_sentiment_polarity', 'shares', 'minmax', 'standardized',\n",
       "       'l2_normalized'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import linear_model\n",
    "from sklearn.model_selection import train_test_split\n",
    "import sklearn.preprocessing as preproc\n",
    "\n",
    "### Assume df is a Pandas dataframe containing the UCI online news dataset\n",
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Select the content-based features as singleton features in the model,\n",
    "### skipping over the derived features\n",
    "features = ['n_tokens_title', 'n_tokens_content',\n",
    "            'n_unique_tokens', 'n_non_stop_words', 'n_non_stop_unique_tokens',\n",
    "            'num_hrefs', 'num_self_hrefs', 'num_imgs', 'num_videos',\n",
    "            'average_token_length', 'num_keywords', 'data_channel_is_lifestyle',\n",
    "            'data_channel_is_entertainment', 'data_channel_is_bus',\n",
    "            'data_channel_is_socmed', 'data_channel_is_tech',\n",
    "            'data_channel_is_world']\n",
    "\n",
    "X = df[features]\n",
    "y = df[['shares']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(39644, 170)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### Create pairwise interaction features, skipping the constant bias term\n",
    "X2 = preproc.PolynomialFeatures(include_bias=False).fit_transform(X)\n",
    "X2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Create train/test sets for both feature sets\n",
    "X1_train, X1_test, X2_train, X2_test, y_train, y_test = train_test_split(X, X2, y, test_size=0.3, random_state=123)\n",
    "\n",
    "def evaluate_feature(X_train, X_test, y_train, y_test):\n",
    "#   Fit a linear regression model on the training set and score on the test set\n",
    "    model = linear_model.LinearRegression().fit(X_train, y_train)\n",
    "    r_score = model.score(X_test, y_test)\n",
    "    return (model, r_score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R-squared score with singleton features: 0.00924\n",
      "R-squared score with pairwise features: 0.0113280910\n"
     ]
    }
   ],
   "source": [
    "### Train models and compare score on the two feature sets\n",
    "(m1, r1) = evaluate_feature(X1_train, X1_test, y_train, y_test)\n",
    "(m2, r2) = evaluate_feature(X2_train, X2_test, y_train, y_test)\n",
    "print(\"R-squared score with singleton features: %0.5f\" % r1)\n",
    "print(\"R-squared score with pairwise features: %0.10f\" % r2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "构造交互特征非常简单，但它们使用起来很昂贵。使用成对交互特征的线性模型的训练和得分时间将从$O(n)$到$O(n^2)$，其中$n$是单身特征的数量。\n",
    "\n",
    "围绕高阶交互特征的计算成本有几种方法。可以在所有交互特征之上执行特征选择，选择前几个。或者，可以更仔细地制作更少数量的复杂特征。两种策略都有其优点和缺点。特征选择采用计算手段来选择问题的最佳特征。（这种技术不限于交互特征。）一些特征选择技术仍然需要训练多个具有大量特征的模型。\n",
    "\n",
    "\n",
    "手工制作的复杂特征可以具有足够的表现力，所以只需要少量这些特征，这可以缩短模型的训练时间。但是特征本身的计算可能很昂贵，这增加了模型评分阶段的计算成本。手工制作（或机器学习）的复杂特征的好例子可以在第8章有关图像特征中找到。现在让我们看看一些特征选择技巧。\n",
    "\n",
    "## 特征选择\n",
    "\n",
    "特征选择技术会删除非有用的特征，以降低最终模型的复杂性。最终目标是快速计算的简约模型，预测准确性降低很小或不会降低。为了得到这样的模型，一些特征选择技术需要训练多个候选模型。换句话说，特征选择并不是减少训练时间，实际上有些技巧增加了整体训练时间，但是减少了模型评分时间。\n",
    "\n",
    "粗略地说，特征选择技术分为三类。\n",
    "\n",
    "- Filtering（过滤）: 预处理可以删除那些不太可能对模型有用的特征。例如，可以计算每个特征与响应变量之间的相关或相互信息，并筛除相关信息或相互信息低于阈值的特征。第3章讨论了文本特征的过滤技术的例子。过滤比下面的包装（wrapper）技术便宜得多，但是他们没有考虑到正在使用的模型。因此他们可能无法为模型选择正确的特征。最好先保守地进行预过滤，以免在进行模型训练步骤之前无意中消除有用的特征。\n",
    "\n",
    "- Wrapper methods（包装方法）：这些技术是昂贵的，但它们允许您尝试特征子集，这意味着你不会意外删除自身无法提供信息但在组合使用时非常有用的特征。包装方法将模型视为提供特征子集质量分数的黑盒子。shi一个独立的方法迭代地改进子集。\n",
    "\n",
    "- Embedded methods（嵌入式方法）：嵌入式方法执行特征选择作为模型训练过程的一部分。 例如，决策树固有地执行特征选择，因为它在每个训练步骤选择一个要在其上进行树分裂的特征。另一个例子是$L1$正则，它可以添加到任何线性模型的训练目标中。$L1$鼓励模型使用一些特征而不是许多特征。因此它也被称为模型的稀疏约束。嵌入式方法将特征选择作为模型训练过程的一部分。它们不如包装方法那么强大，但也远不如包装方法那么昂贵。与过滤相比，嵌入式方法会选择特定于模型的特征。从这个意义上讲，嵌入式方法在计算费用和结果质量之间取得平衡。\n",
    "\n",
    "特征选择的全面处理超出了本书的范围。有兴趣的读者可以参考 Isabelle Guyon 和 André Elisseeff 撰写的调查报告“变量和特征选择介绍”（“An Introduction to Variable and Feature Selection”）。\n",
    "\n",
    "## 总结\n",
    "\n",
    "本章讨论了许多常见的数字特征工程技术：量化，缩放（又称规范化），对数变换（一种功率变换），交互特征以及处理大量交互特征所需的特征选择技术的简要总结。在统计机器学习中，所有数据最终归结为数字特征。因此，所有道路最终都会指向某种数字特征工程技术。为了结束特征工程这个游戏，保证这些工具方便使用！\n",
    "\n",
    "\n",
    "## 参考书目\n",
    "\n",
    "Guyon, Isabell, and André Elisseeff. 2003. Journal of Machine Learning Research Special Issue on Variable and Feature Selection. 3(Mar):1157--1182.\n",
    "\n",
    "Johnston, Jack, and John DiNardo. 1997. Econometric Methods (Fourth Edition). New York: McGraw Hill."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
