diff --git a/2017-autumn/Dynamic_Programming_Part_2_knapsack_and_panlidorm.ipynb b/2017-autumn/Dynamic_Programming_Part_2_knapsack_and_panlidorm.ipynb deleted file mode 100644 index 86070e7..0000000 --- a/2017-autumn/Dynamic_Programming_Part_2_knapsack_and_panlidorm.ipynb +++ /dev/null @@ -1,1300 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"\\nProblem Defination: Given a sequence of chars, get the longest panlindorm it contains.\\n\\ne.g \\nInput: 'ABA'\\nOutput: 'ABA'\\nInput: 'ABAAAAB'\\nOutput: 'BAAAAB'\\nInput: 'I Live on the time, emit no evil at all.'\\nOutput: 'Live on the time, emit no evil'\\n\"" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\"\"\"\n", - "Problem Defination: Given a sequence of chars, get the longest panlindorm it contains.\n", - "\n", - "e.g \n", - "Input: 'ABA'\n", - "Output: 'ABA'\n", - "Input: 'ABAAAAB'\n", - "Output: 'BAAAAB'\n", - "Input: 'I Live on the time, emit no evil at all.'\n", - "Output: 'Live on the time, emit no evil'\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "import string" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "letters_digits = string.ascii_letters + string.digits" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "string.ascii_letters" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], - "source": [ - "from icecream import ic" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import lru_cache" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [], - "source": [ - "def is_panlindorm(string):\n", - " string = ''.join([c for c in string if c in letters_digits]).upper()\n", - " return string == string[::-1]\n", - "\n", - "def get_prefix_panlindorm(string):\n", - " candidates = [string[:i] for i in range(len(string)+1) if is_panlindorm(string[:i])]\n", - " return max(candidates, key=len)\n", - "\n", - "@lru_cache(maxsize=2*10)\n", - "def get_panlindorm(string):\n", - " if len(string) == 1: return string\n", - " return max([get_prefix_panlindorm(string), get_panlindorm(string[1:])], key=len).strip()\n", - "\n", - "assert is_panlindorm('ABA')\n", - "assert is_panlindorm('ABBBA')\n", - "assert is_panlindorm('BBBB')\n", - "assert not is_panlindorm('ABAA')\n", - "assert is_panlindorm('Live on time, emit no evil')\n", - "\n", - "assert get_prefix_panlindorm('ABA') == 'ABA'\n", - "assert get_prefix_panlindorm('ABABBBB') == 'ABA'\n", - "assert get_prefix_panlindorm('ABCDEEEEEE') == 'A'\n", - "\n", - "assert get_panlindorm('ABA') == 'ABA'\n", - "assert get_panlindorm('ABAAAAAA') == 'AAAAAA'\n", - "assert get_panlindorm('I live on time, emit no evil at all') == 'live on time, emit no evil'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Knapsack" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import lru_cache" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "items_random = [(random.randint(1, 10), random.randint(1, 20)) for _ in range(20)]\n", - "weights = [i[0] for i in items_random]\n", - "values = [i[1] for i in items_random]" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "metadata": {}, - "outputs": [], - "source": [ - "K = 50" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], - "source": [ - "from icecream import ic" - ] - }, - { - "cell_type": "code", - "execution_count": 334, - "metadata": {}, - "outputs": [], - "source": [ - "#solution = [0] * len(items_random)\n", - "solution = [[0] * len(items_random) for _ in range(K)]\n", - "@lru_cache(maxsize=2*10)\n", - "def knapsack(n, k):\n", - " # n is the index of the last one candidates\n", - " if n < 0: return 0\n", - " if weights[n] > k: return knapsack(n-1, k)\n", - " \n", - " exclude = knapsack(n-1, k)\n", - " include = values[n] + knapsack(n - 1, k - weights[n])\n", - "\n", - " if include > exclude:\n", - " solution[k][n] = 1\n", - " return include\n", - " else:\n", - " solution[k][n] = 0\n", - " return exclude" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 4\n" - ] - }, - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 247, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "knapsack(len(items_random)-1, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": 335, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "91" - ] - }, - "execution_count": 335, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "knapsack(len(items_random)-1, 20)" - ] - }, - { - "cell_type": "code", - "execution_count": 206, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(3, 10),\n", - " (9, 20),\n", - " (5, 7),\n", - " (3, 9),\n", - " (1, 20),\n", - " (7, 10),\n", - " (9, 8),\n", - " (3, 4),\n", - " (5, 15),\n", - " (7, 8),\n", - " (10, 14),\n", - " (7, 5),\n", - " (10, 13),\n", - " (3, 10),\n", - " (6, 8),\n", - " (1, 19),\n", - " (10, 1),\n", - " (6, 17),\n", - " (7, 8),\n", - " (7, 7)]" - ] - }, - "execution_count": 206, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "items_random" - ] - }, - { - "cell_type": "code", - "execution_count": 210, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]" - ] - }, - "execution_count": 210, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solution[:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 117, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solution[5][15]" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 119, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "weights[15]" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 125, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solution[5 - 1][10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "对于任意的solution单元,例如 solution[i][j], 其表示的是,当constraint时i的时候,最大的候选集是j的时候,j 选不选。 那么,如果j是1,就是 $item_j$被选择了,反之,没有被选择。 那么该如何判断选择了哪一个呢? \n", - "\n", - "因为我们的递归过程是\n", - "```\n", - "exclude = knapsack(n-1, k)\n", - "include = values[n] + knapsack(n - 1, k - weights[n])\n", - "\n", - "return max(exclude, include)\n", - "```\n", - "即,一直思考的是最后一个元素需不需要加进来,如果需要,就加上,如果加不进来,就不加。 所以,如果当前的solution[i][j]是0, 表示没有被选择,那么被选择的元素就是 soluion[i][j], j 一直减小,遇到的第一个是 1 的元素。 " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "例如,对于 solution[4][19]是0,一路往前“推进”,第一个不是0的是15, 就是说,第15个item,是被选入的。 " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "当我们获得了一个解,那么我们的问题是,怎么获得接下来的解呢? \n", - "我们观察一下递归调用的过程: \n", - "```\n", - "values[n] + knapsack(n - 1, k - weights[n])\n", - "```\n", - "\n", - "就是说 **n** 有没有被选中,程序是依靠 **n-1**和 constraint 是 k - weights[n]确定的。 所以,当我们知道 constraint 是 **k**, **n**有没有被选择的时候,我们可以继续通过 **n-1**和 **k-weights[n]** 得知在 **n**和 **k**的时候,系统算出来的第2个答案。 然后以此类推。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "所以,我们先定义一个函数,这个函数可以输入一个候选的item的最大序号n, 目前的constraint, 输出是这个情况下,系统选择的第1个item. " - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n", - " [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n", - " [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]]" - ] - }, - "execution_count": 133, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solution[:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "metadata": {}, - "outputs": [], - "source": [ - "# it's a utility function\n", - "def first(iterables, predicate):\n", - " iterables = iter(iterables)\n", - " for i in iterables:\n", - " if predicate(i): return i\n", - " return None\n", - "\n", - "def get_chosen_item(constraint, candidate_size, solve):\n", - " index = first(enumerate(solve[constraint][:candidate_size][::-1]), predicate=lambda x: x[1] == 1)\n", - " if index:\n", - " return (candidate_size - 1) - index[0] \n", - " else:\n", - " return None\n", - " # when candidate_size set to 20, and the index is 0, means the last one is chosen, which index is 19\n", - " # when candidate_size is 1, and the index is 0, means the item index 0, is selected." - ] - }, - { - "cell_type": "code", - "execution_count": 328, - "metadata": {}, - "outputs": [], - "source": [ - "get_chosen_item(constraint=4, candidate_size=20, solve=solution)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "例如, 这个函数告诉我们,当 constraint是4,candidate_size是19的时候,16是必须要选择的。 " - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "weights[15]" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "19" - ] - }, - "execution_count": 148, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "values[15]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "我们在这个基础(constraint == 4, candidate_size=19)之上,继续获得 `knapsack(n - 1, k - weights[n])` 的解, 此时, 为了方便起见,因为我们已经知道了第一个被选择的是index == 15的item, 所以我们可以把candiadte_size 设置为 15, constraint == 4 - 1 (1是weights[15]的值), 那么我们能够继续获得下一个被选择的item" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4" - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_chosen_item(constraint=3, candidate_size=15, solve=solution)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "基于此,我们递归获得完整的解决方案:" - ] - }, - { - "cell_type": "code", - "execution_count": 366, - "metadata": {}, - "outputs": [], - "source": [ - "def get_complete_solution(solver, constraint, candidate_size=None):\n", - " candidate_size = candidate_size or len(solver[0])\n", - " index = get_chosen_item(constraint, candidate_size, solver)\n", - " if index: \n", - " print('Get Item[{}], weight == {}, value == {}'.format(index, weights[index], values[index]))\n", - " get_complete_solution(solver, constraint - weights[index], index)" - ] - }, - { - "cell_type": "code", - "execution_count": 223, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]" - ] - }, - "execution_count": 223, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solution" - ] - }, - { - "cell_type": "code", - "execution_count": 224, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Get Item[4], weight == 1, value == 20\n" - ] - } - ], - "source": [ - "get_complete_solution(solution, constraint=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 367, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Get Item[15], weight == 1, value == 19\n", - "Get Item[4], weight == 1, value == 20\n" - ] - } - ], - "source": [ - "get_complete_solution(solution, constraint=4)" - ] - }, - { - "cell_type": "code", - "execution_count": 389, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Get Item[17], weight == 6, value == 17\n", - "Get Item[15], weight == 1, value == 19\n", - "Get Item[13], weight == 3, value == 10\n", - "Get Item[8], weight == 5, value == 15\n", - "Get Item[4], weight == 1, value == 20\n" - ] - } - ], - "source": [ - "get_complete_solution(solution, constraint=19)" - ] - }, - { - "cell_type": "code", - "execution_count": 390, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "91" - ] - }, - "execution_count": 390, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "knapsack(k=19, n=len(items_random)-1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## We Could Merge these together!" - ] - }, - { - "cell_type": "code", - "execution_count": 253, - "metadata": {}, - "outputs": [], - "source": [ - "#solution = [0] * len(items_random)\n", - "# refactor it to with soltion in argument\n", - "\n", - "@lru_cache(maxsize=2*10)\n", - "def knapsack(n, k, solution):\n", - " # n is the index of the last one candidates\n", - " if n < 0: return 0\n", - " if weights[n] > k: return knapsack(n-1, k, solution)\n", - " \n", - " exclude = knapsack(n-1, k, solution)\n", - " include = values[n] + knapsack(n - 1, k - weights[n], solution)\n", - "\n", - " if include > exclude:\n", - " solution[k][n] = 1\n", - " print(k, n)\n", - " return include\n", - " else:\n", - " solution[k][n] = 0\n", - " return exclude" - ] - }, - { - "cell_type": "code", - "execution_count": 249, - "metadata": {}, - "outputs": [], - "source": [ - "def knapsack_with_solution(items, constraint):\n", - " weights = [w for w, v in items]\n", - " values = [v for w, v in items]\n", - " \n", - " solution = [[0] * len(items) for _ in range(constraint+1)]\n", - " \n", - " optimal_result = knapsack(k=constraint, n=len(items)-1, solution=solution)\n", - " print('Optimal Value Sum is : {}'.format(optimal_result))\n", - " print(solution)\n", - " get_complete_solution(solution, constraint=constraint)" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "unhashable type: 'list'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mknapsack_with_solution\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitems_random\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mknapsack_with_solution\u001b[0;34m(items, constraint)\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0msolution\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconstraint\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0moptimal_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mknapsack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconstraint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msolution\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Optimal Value Sum is : {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moptimal_result\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msolution\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'" - ] - } - ], - "source": [ - "knapsack_with_solution(items_random, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": 254, - "metadata": {}, - "outputs": [], - "source": [ - "# in order to let 'solution', the list type saved to cache, we need add an utility function" - ] - }, - { - "cell_type": "code", - "execution_count": 279, - "metadata": {}, - "outputs": [], - "source": [ - "def to_list(tuple_data):\n", - " return [to_list(t) if isinstance(t, tuple) else t for t in tuple_data]\n", - "\n", - "def to_tuple(list_data):\n", - " return tuple(to_tuple(t) if isinstance(t, list) else t for t in list_data)" - ] - }, - { - "cell_type": "code", - "execution_count": 288, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import wraps" - ] - }, - { - "cell_type": "code", - "execution_count": 310, - "metadata": {}, - "outputs": [], - "source": [ - "def memo(func):\n", - " cache = {}\n", - " @wraps(func)\n", - " def _wrap(*args, **kwargs):\n", - " args = list(args)\n", - " \n", - " for ii, a in enumerate(args): \n", - " if isinstance(a, list): args[ii] = to_tuple(a)\n", - " \n", - " for k, v in kwargs.items():\n", - " if isinstance(v, list): kwargs[k] = to_tuple(v)\n", - " \n", - " union_key = str(args) + str(kwargs)\n", - " \n", - " if union_key in cache: return cache[union_key]\n", - " else:\n", - " result = func(*args, **kwargs)\n", - " cache[union_key] = result\n", - " return result \n", - " return _wrap" - ] - }, - { - "cell_type": "code", - "execution_count": 311, - "metadata": {}, - "outputs": [], - "source": [ - "def some_func_with_list(argument):\n", - " print('called')\n", - " return sum(argument)" - ] - }, - { - "cell_type": "code", - "execution_count": 312, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n", - "called\n", - "6\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " v = some_func_with_list([1, 2, 3])\n", - " print(v)" - ] - }, - { - "cell_type": "code", - "execution_count": 313, - "metadata": {}, - "outputs": [], - "source": [ - "# called 6 times!" - ] - }, - { - "cell_type": "code", - "execution_count": 314, - "metadata": {}, - "outputs": [], - "source": [ - "@memo\n", - "def some_func_with_list(argument):\n", - " print('called')\n", - " return sum(argument)" - ] - }, - { - "cell_type": "code", - "execution_count": 315, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "called\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n", - "6\n" - ] - } - ], - "source": [ - "for i in range(10):\n", - " v = some_func_with_list([1, 2, 3])\n", - " print(v)" - ] - }, - { - "cell_type": "code", - "execution_count": 319, - "metadata": {}, - "outputs": [], - "source": [ - "# called 1 time, but print value 10 times." - ] - }, - { - "cell_type": "code", - "execution_count": 307, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[1, 2, 3]" - ] - }, - "execution_count": 307, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# e.g \n", - "to_list((1, 2, 3))" - ] - }, - { - "cell_type": "code", - "execution_count": 276, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[1, 2, 3, [1, 2, 3, [1, 2, 3]]]" - ] - }, - "execution_count": 276, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# e.g \n", - "to_list((1, 2, 3, (1, 2, 3, (1, 2, 3))))" - ] - }, - { - "cell_type": "code", - "execution_count": 280, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, 2, 3)" - ] - }, - "execution_count": 280, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# e.g \n", - "to_tuple([1, 2, 3])" - ] - }, - { - "cell_type": "code", - "execution_count": 281, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((1, 2, 3), (4, 5, 5))" - ] - }, - "execution_count": 281, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# e.g\n", - "to_tuple([[1, 2, 3], [4, 5, 5]])" - ] - }, - { - "cell_type": "code", - "execution_count": 320, - "metadata": {}, - "outputs": [], - "source": [ - "#solution = [0] * len(items_random)\n", - "# refactor it to with soltion in argument\n", - "\n", - "@memo\n", - "def knapsack(n, k, solution):\n", - " # n is the index of the last one candidates\n", - " if n < 0: return 0\n", - " if weights[n] > k: return knapsack(n-1, k, solution)\n", - " \n", - " exclude = knapsack(n-1, k, solution)\n", - " include = values[n] + knapsack(n - 1, k - weights[n], solution)\n", - "\n", - " if include > exclude:\n", - " solution[k][n] = 1\n", - " print(k, n)\n", - " return include\n", - " else:\n", - " solution[k][n] = 0\n", - " return exclude" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Optimizatoin" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dynamic Programming Optimization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Linear Optimization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Constraint Optimization Programming" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Max Intergral Optimization" - ] - }, - { - "cell_type": "code", - "execution_count": 217, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(7, 16),\n", - " (2, 14),\n", - " (2, 6),\n", - " (2, 5),\n", - " (3, 16),\n", - " (2, 17),\n", - " (4, 6),\n", - " (7, 5),\n", - " (10, 8),\n", - " (1, 13),\n", - " (3, 10),\n", - " (10, 12),\n", - " (3, 19),\n", - " (7, 12),\n", - " (5, 4),\n", - " (8, 14),\n", - " (10, 12),\n", - " (4, 10),\n", - " (2, 20),\n", - " (3, 15)]" - ] - }, - "execution_count": 217, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "items_random" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "kk" - ] - }, - { - "cell_type": "code", - "execution_count": 221, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "33" - ] - }, - "execution_count": 221, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(7, 16),\n", - " (2, 14),\n", - " (2, 6),\n", - " (2, 5),\n", - " (3, 16),\n", - " (2, 17),\n", - " (4, 6),\n", - " (7, 5),\n", - " (10, 8),\n", - " (1, 13),\n", - " (3, 10),\n", - " (10, 12),\n", - " (3, 19),\n", - " (7, 12),\n", - " (5, 4),\n", - " (8, 14),\n", - " (10, 12),\n", - " (4, 10),\n", - " (2, 20),\n", - " (3, 15)]" - ] - }, - "execution_count": 116, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "items_random" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[7, 2, 2, 2, 3, 2, 4, 7, 10, 1, 3, 10, 3, 7, 5, 8, 10, 4, 2, 3]" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "weights" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[16, 14, 6, 5, 16, 17, 6, 5, 8, 13, 10, 12, 19, 12, 4, 14, 12, 10, 20, 15]" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "values" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "20" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(weights)" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "13" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "knapsack(19, 1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## CV \n", - "+ 可以参考 Stanford NLP, CV Group \n", - "+ 素雅 \n", - "+ 突出重点" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 面试 \n", - "+ 突出自己的优点, e.g 学习能力 我的抗压能力\n", - "+ 引导面试官\n", - "+ 优秀的面试官发你的潜力 发现的你长处 看看你这个长处到底有多长\n", - "+ 糟糕的面试官是,只关注你会不会他想让你知道的那个东西,关注你的“经历”" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 快速入行 技能驱动 \n", - "## 不管你在哪个公司 只要面对的问题大体类似 " - ] - } - ], - "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.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Lecture-01.ipynb b/2017-autumn/Lecture-01.ipynb deleted file mode 100644 index 56b0878..0000000 --- a/2017-autumn/Lecture-01.ipynb +++ /dev/null @@ -1,864 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Edit Distance" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import editdistance" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import jieba" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def cut(string): return list(jieba.cut(string))" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "string1 = '今天真是个好日子'\n", - "string2 = '今天是个好日子'" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Building prefix dict from the default dictionary ...\n", - "Loading model from cache /var/folders/4l/c_tcf0j90c1d07h0xr4c4ql40000gn/T/jieba.cache\n", - "Loading model cost 1.400 seconds.\n", - "Prefix dict has been built succesfully.\n" - ] - }, - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "editdistance.eval(cut(string1), cut(string2))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "string3 = '我早上去吃饭了'\n", - "string4 = '我去吃早饭了'\n", - "string5 = '我晚上去吃饭了'" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def get_edit_distance(str1, str2): return editdistance.eval(cut(str1), cut(str2))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_edit_distance(string3, string4)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_edit_distance(string3, string5)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## 语义层面的\n", - "## 句子 句法 语法 " - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n", - "2\n" - ] - } - ], - "source": [ - "print(get_edit_distance('这个人很好看漂亮', '这个人很美丽动人'))\n", - "print(get_edit_distance('这个人很好看漂亮', '这个人很不好看'))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## advantage " - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## 算法工程师, 科学家" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tfidf" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Keywords" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. 出现多的词汇 ==》 更重要;\n", - "2. 越少出现的单词 越重要; " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "tf = term frequency\n", - "\n", - "$tf = \\frac{Term_{num}} {Word_{num}}$\n", - "\n", - "idf = inverse document frequency\n", - "\n", - "$ idf = \\log(\\frac{D_{all}}{D_{w}})$" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## github.com/deep-.../Dataset_source" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "content = pd.read_csv('dataset/sqlResult_1558435.csv', encoding='gb18030')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "89611" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(content)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['id', 'author', 'source', 'content', 'feature', 'title', 'url'], dtype='object')" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "content.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/体验版内测,稳定版暂不受影响),以确保工程师可以集中全部精力进行系统优化工作。有人猜测这也是将精力主要用到MIUI 9的研发之中。\\r\\nMIUI 8去年5月发布,距今已有一年有余,也是时候更新换代了。\\r\\n当然,关于MIUI 9的确切信息,我们还是等待官方消息。\\r\\n'" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "content.iloc[0].content" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from collections import Counter" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def term_frequency(word, i):\n", - " words = cut(content.iloc[i].content)\n", - " words_counts = Counter(words)\n", - " return words_counts[word] / sum(words_counts.values())" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.009615384615384616" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "term_frequency('小米', 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mini_test_num = 1000" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "documents_words_counter = [\n", - " Counter(cut(str(content.iloc[i].content))) for i in range(mini_test_num)\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def inverse_document_frequency(word): \n", - " return np.log(len(documents_words_counter) / sum(1 for counter in documents_words_counter if word in counter))" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4.605170185988092" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inverse_document_frequency('小米')" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def tfidf(word, i): return term_frequency(word, i) * inverse_document_frequency(word)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.044280482557577806" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tfidf('小米', 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(',', 9),\n", - " ('。', 4),\n", - " ('MIUI', 3),\n", - " (' ', 3),\n", - " ('\\r\\n', 3),\n", - " ('(', 2),\n", - " ('6', 2),\n", - " ('月', 2),\n", - " (')', 2),\n", - " ('机型', 2),\n", - " ('发布', 2),\n", - " ('精力', 2),\n", - " ('也', 2),\n", - " ('是', 2),\n", - " ('9', 2)]" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "documents_words_counter[0].most_common(15)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "tfidf_of_text_0 = {\n", - " word : tfidf(word, 0) for word in documents_words_counter[0]\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('MIUI', 0.1992621715091001),\n", - " ('机型', 0.09058712887780611),\n", - " ('精力', 0.08505478133065648),\n", - " ('体验版', 0.0664207238363667),\n", - " ('稳定版', 0.0664207238363667),\n", - " ('暂不受', 0.0664207238363667),\n", - " ('系统优化', 0.0664207238363667),\n", - " ('距今已有', 0.0664207238363667),\n", - " ('有余', 0.0664207238363667),\n", - " ('更新换代', 0.0664207238363667),\n", - " ('内测', 0.05975584710021338),\n", - " ('确切', 0.05975584710021338),\n", - " ('用到', 0.05585714413763489),\n", - " ('官方消息', 0.05309097036406006),\n", - " ('小米', 0.044280482557577806)]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sorted(tfidf_of_text_0.items(), key=lambda x: x[1], reverse=True)[:15]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Based on the tfidf to buid the vector to represent each document" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "documents = [word0, word1, word2, ................ , word3]\n", - "docuemnt0 = [0, 1, 1, 3, 0.121, ]\n", - "docuemnt1 = [0, 1.2, 0, 0, 0.121, ]\n", - "\n", - "$\\forall d_i, d_j, d_k, if dis(\\vec{d_i}, \\vec{d_j}) < dis(\\vec{d_i}, \\vec{d_k})$\n", - "==> \n", - "\n", - "\n", - "words ==> vector ==> 意思相近程度" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## get all the words " - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Counter({1: 3, 2: 2})" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Counter([1, 1, 2]) + Counter([2, 1])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from functools import reduce" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import operator as op" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "all_words_counter = reduce(op.add, documents_words_counter)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "47008" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(all_words_counter)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "document_0 = [tfidf(w, 0) for w in all_words_counter]" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## tfidf ==> sci-kit learning; " - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## Project; " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Wordcloud" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import wordcloud" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "wc = wordcloud.WordCloud(font_path='/Users/kouminquan/Downloads/simkai.ttf')" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "word_cloud = wc.generate_from_text(' '.join(cut(content.iloc[0].content)))" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(word_cloud)" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(word_cloud_by_tfidf)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from gensim.models.keyedvectors import KeyedVectors" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "model = KeyedVectors.load_word2vec_format('/Users/kouminquan/Downloads/model.vec')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "model.most_similar('你我')b" - ] - } - ], - "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.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Lecture-02.ipynb b/2017-autumn/Lecture-02.ipynb deleted file mode 100644 index c3da7bb..0000000 --- a/2017-autumn/Lecture-02.ipynb +++ /dev/null @@ -1,720 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Requests and BeautifulSoup" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Decision Tree" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "content = pd.read_csv('/Users/kouminquan/Downloads/train.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", - "
" - ], - "text/plain": [ - " PassengerId Survived Pclass \\\n", - "0 1 0 3 \n", - "1 2 1 1 \n", - "2 3 1 3 \n", - "3 4 1 1 \n", - "4 5 0 3 \n", - "\n", - " Name Sex Age SibSp \\\n", - "0 Braund, Mr. Owen Harris male 22.0 1 \n", - "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", - "2 Heikkinen, Miss. Laina female 26.0 0 \n", - "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", - "4 Allen, Mr. William Henry male 35.0 0 \n", - "\n", - " Parch Ticket Fare Cabin Embarked \n", - "0 0 A/5 21171 7.2500 NaN S \n", - "1 0 PC 17599 71.2833 C85 C \n", - "2 0 STON/O2. 3101282 7.9250 NaN S \n", - "3 0 113803 53.1000 C123 S \n", - "4 0 373450 8.0500 NaN S " - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "content.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## give you a new person's information\n", - "## device ? " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### how to get a good spliting? \n", - "\n", - "#### Shannon Entropy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$ H(T) = -\\sum_{i}^{y}P_i\\log(P_i)$$" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "L = [1, 2, 2, 3, 3, 3]" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from collections import Counter" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [], - "source": [ - "def pr_i(i, iterables):\n", - " return Counter(iterables)[i] / sum(Counter(iterables).values())" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from functools import lru_cache" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [], - "source": [ - "def entropy(iterables):\n", - " result = 0\n", - " def pr(i): return pr_i(i, iterables)\n", - " return -sum(pr(i) * np.log2(pr(i)) for i in set(iterables))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.4591479170272448" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "entropy(L)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# 1, 2, 3" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def split_by(L, i): \n", - " return [e for e in L if e == i], [e for e in L if e != i]" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "L_1, L_2 = split_by(L, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9709505944546686" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "entropy(L_1) + entropy(L_2)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "L3, L4 = split_by(L, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.8112781244591328" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "entropy(L3) + entropy(L4)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([2, 2], [1, 3, 3, 3])" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L3, L4" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "L5, L6 = split_by(L, 3)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([3, 3, 3], [1, 2, 2])" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "L5, L6" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9182958340544896" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "entropy(L5) + entropy(L6)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## deicsion split ??" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## BSF and DFS" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# Python网络爬虫\n", - "# Requests\n", - "# BeautifulSoup\n", - "# 广度优先和深度优先\n", - "# Task: 爬取豆瓣的电影评论\n", - "# <豆瓣电影id, 电影名,评论, 5颗星>" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import requests" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "url = 'https://movie.douban.com/subject/26430636/?from=showing'" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## cilent ==> get" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "requests.get(url)" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## response 2.. OK 4.. 5.. " - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "res = requests.get(url)" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import bs4 as bs" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/kouminquan/anaconda/envs/ai-lab/lib/python3.6/site-packages/bs4/__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", - "\n", - "The code that caused this warning is on line 193 of the file /Users/kouminquan/anaconda/envs/ai-lab/lib/python3.6/runpy.py. To get rid of this warning, change code that looks like this:\n", - "\n", - " BeautifulSoup(YOUR_MARKUP})\n", - "\n", - "to this:\n", - "\n", - " BeautifulSoup(YOUR_MARKUP, \"lxml\")\n", - "\n", - " markup_type=markup_type))\n" - ] - } - ], - "source": [ - "soup = bs.BeautifulSoup(res.text)" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [], - "source": [ - "content = soup.find('span', {'property': 'v:summary'})" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "## input url ==> elements ==> return ### string.find()" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "G = {\n", - " 'a': ['b', 'c', 'd'], \n", - " 'c': ['e', 'f', 'a'],\n", - " 'b': ['c', 'a', 'g'],\n", - " 'd': ['e', 'f']\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "visited = set()" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "unvisited = ['a']" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "set()\n", - "{'a'}\n", - "{'a', 'b'}\n", - "{'c', 'a', 'b'}\n", - "{'d', 'c', 'a', 'b'}\n", - "{'d', 'c', 'a', 'b'}\n", - "{'d', 'c', 'a', 'b'}\n", - "{'a', 'g', 'c', 'b', 'd'}\n", - "{'a', 'g', 'c', 'b', 'd', 'e'}\n", - "{'a', 'g', 'c', 'b', 'd', 'e', 'f'}\n", - "{'a', 'g', 'c', 'b', 'd', 'e', 'f'}\n", - "{'a', 'g', 'c', 'b', 'd', 'e', 'f'}\n" - ] - } - ], - "source": [ - "while len(unvisited) > 0: \n", - " span = unvisited.pop(0)\n", - " print(visited)\n", - " if span in visited: continue \n", - " \n", - " for element in G.get(span, []):\n", - " unvisited.append(element)\n", - " \n", - " visited.add(span)" - ] - } - ], - "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.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Lecture-02.pdf b/2017-autumn/Lecture-02.pdf deleted file mode 100644 index f046388..0000000 Binary files a/2017-autumn/Lecture-02.pdf and /dev/null differ diff --git a/2017-autumn/Lecture-04-NerualNetworks-DeepLearning.ipynb b/2017-autumn/Lecture-04-NerualNetworks-DeepLearning.ipynb deleted file mode 100644 index ef657a7..0000000 --- a/2017-autumn/Lecture-04-NerualNetworks-DeepLearning.ipynb +++ /dev/null @@ -1,535 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Gradient Descient" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "EPOCH0: Cost=95922441.000, x = 19588.000\n", - "EPOCH1: Cost=15347594.760, x = 7835.200\n", - "EPOCH2: Cost=2455619.362, x = 3134.080\n", - "EPOCH3: Cost=392903.298, x = 1253.632\n", - "EPOCH4: Cost=62868.728, x = 501.453\n", - "EPOCH5: Cost=10063.196, x = 200.581\n", - "EPOCH6: Cost=1614.311, x = 80.232\n", - "EPOCH7: Cost=262.490, x = 32.093\n", - "EPOCH8: Cost=46.198, x = 12.837\n", - "EPOCH9: Cost=11.592, x = 5.135\n", - "EPOCH10: Cost=6.055, x = 2.054\n", - "EPOCH11: Cost=5.169, x = 0.822\n", - "EPOCH12: Cost=5.027, x = 0.329\n", - "EPOCH13: Cost=5.004, x = 0.131\n", - "EPOCH14: Cost=5.001, x = 0.053\n", - "EPOCH15: Cost=5.000, x = 0.021\n", - "EPOCH16: Cost=5.000, x = 0.008\n", - "EPOCH17: Cost=5.000, x = 0.003\n", - "EPOCH18: Cost=5.000, x = 0.001\n", - "EPOCH19: Cost=5.000, x = 0.001\n", - "EPOCH20: Cost=5.000, x = 0.000\n", - "EPOCH21: Cost=5.000, x = 0.000\n", - "EPOCH22: Cost=5.000, x = 0.000\n", - "EPOCH23: Cost=5.000, x = 0.000\n", - "EPOCH24: Cost=5.000, x = 0.000\n", - "EPOCH25: Cost=5.000, x = 0.000\n", - "EPOCH26: Cost=5.000, x = 0.000\n", - "EPOCH27: Cost=5.000, x = 0.000\n", - "EPOCH28: Cost=5.000, x = 0.000\n" - ] - } - ], - "source": [ - "import random\n", - "\n", - "def f(w): ## loss function\n", - " return w**2 + 5\n", - "\n", - "\n", - "def df(w):\n", - " return 2*w\n", - "\n", - "\n", - "old_w = float('inf')\n", - "w = random.randint(0, 10000)\n", - "learning_rate = 0.3\n", - "epochs = 0\n", - "\n", - "\n", - "while abs(w - old_w) > 1.0e-7:\n", - " cost = f(w)\n", - " grad_w = df(w)\n", - " ## grad takes into account the effect each parameter has on the cost, so \n", - " ## that's hwo to find the direction of steepest ascent.\n", - "\n", - " old_w = w\n", - " w -= learning_rate * grad_w\n", - "\n", - " print('EPOCH{}: Cost={:.3f}, x = {:.3f}'.format(epochs, cost, grad_w))\n", - " epochs += 1\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Mini Tensorflow For Neural Networks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initial Graph Node" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "\n", - "class Node(object):\n", - " def __init__(self, inbound_nodes=[]):\n", - " self.inbound_nodes = inbound_nodes\n", - " self.outbound_nodes = []\n", - "\n", - " for n in self.inbound_nodes:\n", - " n.outbound_nodes.append(self)\n", - " # set 'self' node as inbound_nodes's outbound_nodes\n", - "\n", - " self.value = None\n", - "\n", - " self.gradients = {}\n", - " # keys are the inputs to this node, and their\n", - " # values are the partials of this node with \n", - " # respect to that input.\n", - " # \\partial{node}{input_i}\n", - " \n", - "\n", - " def forward(self):\n", - " '''\n", - " Forward propagation. \n", - " Compute the output value vased on 'inbound_nodes' and store the \n", - " result in self.value\n", - " '''\n", - "\n", - " raise NotImplemented\n", - " \n", - "\n", - " def backward(self):\n", - "\n", - " raise NotImplemented" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "class Input(Node):\n", - " def __init__(self):\n", - " '''\n", - " An Input node has no inbound nodes.\n", - " So no need to pass anything to the Node instantiator.\n", - " '''\n", - " Node.__init__(self)\n", - "\n", - " def forward(self, value=None):\n", - " '''\n", - " Only input node is the node where the value may be passed\n", - " as an argument to forward().\n", - " All other node implementations should get the value of the \n", - " previous node from self.inbound_nodes\n", - " \n", - " Example: \n", - " val0: self.inbound_nodes[0].value\n", - " '''\n", - " if value is not None:\n", - " self.value = value\n", - " ## It's is input node, when need to forward, this node initiate self's value.\n", - "\n", - " # Input subclass just holds a value, such as a data feature or a model parameter(weight/bias)\n", - " \n", - " def backward(self):\n", - " self.gradients = {self:0}\n", - " for n in self.outbound_nodes:\n", - " grad_cost = n.gradients[self]\n", - " self.gradients[self] = grad_cost * 1\n", - " \n", - " \n", - " # input N --> N1, N2\n", - " # \\partial L / \\partial N \n", - " # ==> \\partial L / \\partial N1 * \\ partial N1 / \\partial N\n", - "\n", - "\n", - "class CaculatNode(Node):\n", - " def __init__(self, f, *nodes):\n", - " Node.__init__(self, nodes)\n", - " self.func = f\n", - "\n", - " def forward(self):\n", - " self.value = self.func(map(lambda n: n.value, self.inbound_nodes))\n", - "\n", - "\n", - "class Add(Node):\n", - " def __init__(self, *nodes):\n", - " Node.__init__(self, nodes)\n", - "\n", - "\n", - " def forward(self):\n", - " self.value = sum(map(lambda n: n.value, self.inbound_nodes))\n", - " ## when execute forward, this node caculate value as defined.\n", - "\n", - "class Linear(Node):\n", - " def __init__(self, nodes, weights, bias):\n", - " Node.__init__(self, [nodes, weights, bias])\n", - "\n", - " def forward(self):\n", - " inbound_nodes = self.inbound_nodes[0].value\n", - " weights = self.inbound_nodes[1].value\n", - " bias = self.inbound_nodes[2].value\n", - "\n", - " self.value = np.dot(inbound_nodes, weights) + bias\n", - " \n", - " def backward(self):\n", - "\n", - " # initial a partial for each of the inbound_nodes.\n", - " self.gradients = {n: np.zeros_like(n.value) for n in self.inbound_nodes}\n", - "\n", - " for n in self.outbound_nodes:\n", - " # Get the partial of the cost w.r.t this node.\n", - " grad_cost = n.gradients[self]\n", - "\n", - " self.gradients[self.inbound_nodes[0]] = np.dot(grad_cost, self.inbound_nodes[1].value.T)\n", - " self.gradients[self.inbound_nodes[1]] = np.dot(self.inbound_nodes[0].value.T, grad_cost)\n", - " self.gradients[self.inbound_nodes[2]] = np.sum(grad_cost, axis=0, keepdims=False)\n", - "\n", - " # WX + B / W ==> X\n", - " # WX + B / X ==> W\n", - "\n", - "class Sigmoid(Node):\n", - " def __init__(self, node):\n", - " Node.__init__(self, [node])\n", - "\n", - "\n", - " def _sigmoid(self, x):\n", - " return 1./(1 + np.exp(-1 * x))\n", - "\n", - " def forward(self):\n", - " self.x = self.inbound_nodes[0].value\n", - " self.value = self._sigmoid(self.x)\n", - "\n", - " def backward(self):\n", - " self.partial = self._sigmoid(self.x) * (1 - self._sigmoid(self.x))\n", - " \n", - " # y = 1 / (1 + e^-x)\n", - " # y' = 1 / (1 + e^-x) (1 - 1 / (1 + e^-x))\n", - " \n", - " self.gradients = {n: np.zeros_like(n.value) for n in self.inbound_nodes}\n", - "\n", - " for n in self.outbound_nodes:\n", - " grad_cost = n.gradients[self] # Get the partial of the cost with respect to this node.\n", - "\n", - " self.gradients[self.inbound_nodes[0]] = grad_cost * self.partial\n", - " # use * to keep all the dimension same!.\n", - "\n", - "\n", - "\n", - "class MSE(Node):\n", - " def __init__(self, y, a):\n", - " Node.__init__(self, [y, a])\n", - "\n", - "\n", - " def forward(self):\n", - " y = self.inbound_nodes[0].value.reshape(-1, 1)\n", - " a = self.inbound_nodes[1].value.reshape(-1, 1)\n", - " assert(y.shape == a.shape)\n", - "\n", - " self.m = self.inbound_nodes[0].value.shape[0]\n", - " self.diff = y - a\n", - "\n", - " self.value = np.mean(self.diff**2)\n", - "\n", - "\n", - " def backward(self):\n", - " self.gradients[self.inbound_nodes[0]] = (2 / self.m) * self.diff\n", - " self.gradients[self.inbound_nodes[1]] = (-2 / self.m) * self.diff\n", - "\n", - "\n", - "def forward_and_backward(outputnode, graph):\n", - " # execute all the forward method of sorted_nodes.\n", - "\n", - " ## In practice, it's common to feed in mutiple data example in each forward pass rather than just 1. Because the examples can be processed in parallel. The number of examples is called batch size.\n", - " for n in graph:\n", - " n.forward()\n", - " ## each node execute forward, get self.value based on the topological sort result.\n", - "\n", - " for n in graph[::-1]:\n", - " n.backward()\n", - "\n", - " #return outputnode.value\n", - "\n", - "### v --> a --> C\n", - "## b --> C\n", - "## b --> v -- a --> C\n", - "## v --> v ---> a -- > C\n", - "\n", - "def topological_sort(feed_dict):\n", - " \"\"\"\n", - " Sort generic nodes in topological order using Kahn's Algorithm.\n", - " `feed_dict`: A dictionary where the key is a `Input` node and the value is the respective value feed to that node.\n", - " Returns a list of sorted nodes.\n", - " \"\"\"\n", - "\n", - " input_nodes = [n for n in feed_dict.keys()]\n", - "\n", - " G = {}\n", - " nodes = [n for n in input_nodes]\n", - " while len(nodes) > 0:\n", - " n = nodes.pop(0)\n", - " if n not in G:\n", - " G[n] = {'in': set(), 'out': set()}\n", - " for m in n.outbound_nodes:\n", - " if m not in G:\n", - " G[m] = {'in': set(), 'out': set()}\n", - " G[n]['out'].add(m)\n", - " G[m]['in'].add(n)\n", - " nodes.append(m)\n", - "\n", - " L = []\n", - " S = set(input_nodes)\n", - " while len(S) > 0:\n", - " n = S.pop()\n", - "\n", - " if isinstance(n, Input):\n", - " n.value = feed_dict[n]\n", - " ## if n is Input Node, set n'value as \n", - " ## feed_dict[n]\n", - " ## else, n's value is caculate as its\n", - " ## inbounds\n", - "\n", - " L.append(n)\n", - " for m in n.outbound_nodes:\n", - " G[n]['out'].remove(m)\n", - " G[m]['in'].remove(n)\n", - " # if no other incoming edges add to S\n", - " if len(G[m]['in']) == 0:\n", - " S.add(m)\n", - " return L\n", - "\n", - "\n", - "def sgd_update(trainables, learning_rate=1e-2):\n", - " # there are so many other update / optimization methods\n", - " # such as Adam, Mom, \n", - " for t in trainables:\n", - " t.value -= learning_rate * t.gradients[t]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.datasets import load_boston" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "data = load_boston()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total number of examples = 506\n", - "Epoch: 1, Loss: 132.010\n", - "Epoch: 101, Loss: 8.355\n", - "Epoch: 201, Loss: 6.157\n", - "Epoch: 301, Loss: 5.707\n", - "Epoch: 401, Loss: 6.437\n", - "Epoch: 501, Loss: 4.818\n", - "Epoch: 601, Loss: 5.351\n", - "Epoch: 701, Loss: 4.621\n", - "Epoch: 801, Loss: 4.701\n", - "Epoch: 901, Loss: 4.346\n", - "Epoch: 1001, Loss: 4.122\n", - "Epoch: 1101, Loss: 3.872\n", - "Epoch: 1201, Loss: 3.513\n", - "Epoch: 1301, Loss: 4.013\n", - "Epoch: 1401, Loss: 3.456\n", - "Epoch: 1501, Loss: 4.228\n", - "Epoch: 1601, Loss: 3.637\n", - "Epoch: 1701, Loss: 3.418\n", - "Epoch: 1801, Loss: 4.491\n", - "Epoch: 1901, Loss: 4.001\n", - "Epoch: 2001, Loss: 3.115\n", - "Epoch: 2101, Loss: 3.879\n", - "Epoch: 2201, Loss: 3.413\n", - "Epoch: 2301, Loss: 3.651\n", - "Epoch: 2401, Loss: 3.555\n", - "Epoch: 2501, Loss: 3.349\n", - "Epoch: 2601, Loss: 3.825\n", - "Epoch: 2701, Loss: 3.454\n", - "Epoch: 2801, Loss: 3.170\n", - "Epoch: 2901, Loss: 3.267\n", - "Epoch: 3001, Loss: 2.845\n", - "Epoch: 3101, Loss: 3.721\n", - "Epoch: 3201, Loss: 3.479\n", - "Epoch: 3301, Loss: 3.449\n", - "Epoch: 3401, Loss: 3.640\n", - "Epoch: 3501, Loss: 3.635\n", - "Epoch: 3601, Loss: 3.602\n", - "Epoch: 3701, Loss: 3.478\n", - "Epoch: 3801, Loss: 3.412\n", - "Epoch: 3901, Loss: 3.120\n", - "Epoch: 4001, Loss: 3.970\n", - "Epoch: 4101, Loss: 3.309\n", - "Epoch: 4201, Loss: 3.434\n", - "Epoch: 4301, Loss: 3.863\n", - "Epoch: 4401, Loss: 3.370\n", - "Epoch: 4501, Loss: 3.366\n", - "Epoch: 4601, Loss: 2.956\n", - "Epoch: 4701, Loss: 3.073\n", - "Epoch: 4801, Loss: 3.337\n", - "Epoch: 4901, Loss: 3.309\n" - ] - } - ], - "source": [ - "\"\"\"\n", - "Check out the new network architecture and dataset!\n", - "Notice that the weights and biases are\n", - "generated randomly.\n", - "No need to change anything, but feel free to tweak\n", - "to test your network, play around with the epochs, batch size, etc!\n", - "\"\"\"\n", - "\n", - "import numpy as np\n", - "from sklearn.datasets import load_boston\n", - "from sklearn.utils import shuffle, resample\n", - "#from miniflow import *\n", - "\n", - "# Load data\n", - "data = load_boston()\n", - "X_ = data['data']\n", - "y_ = data['target']\n", - "\n", - "# Normalize data\n", - "X_ = (X_ - np.mean(X_, axis=0)) / np.std(X_, axis=0)\n", - "\n", - "n_features = X_.shape[1]\n", - "n_hidden = 10\n", - "W1_ = np.random.randn(n_features, n_hidden)\n", - "b1_ = np.zeros(n_hidden)\n", - "W2_ = np.random.randn(n_hidden, 1)\n", - "b2_ = np.zeros(1)\n", - "\n", - "# Neural network\n", - "X, y = Input(), Input()\n", - "W1, b1 = Input(), Input()\n", - "W2, b2 = Input(), Input()\n", - "\n", - "l1 = Linear(X, W1, b1)\n", - "s1 = Sigmoid(l1)\n", - "l2 = Linear(s1, W2, b2)\n", - "cost = MSE(y, l2)\n", - "\n", - "feed_dict = {\n", - " X: X_,\n", - " y: y_,\n", - " W1: W1_,\n", - " b1: b1_,\n", - " W2: W2_,\n", - " b2: b2_\n", - "}\n", - "\n", - "epochs = 5000\n", - "# Total number of examples\n", - "m = X_.shape[0]\n", - "batch_size = 16\n", - "steps_per_epoch = m // batch_size\n", - "\n", - "graph = topological_sort(feed_dict)\n", - "trainables = [W1, b1, W2, b2]\n", - "\n", - "print(\"Total number of examples = {}\".format(m))\n", - "\n", - "# Step 4\n", - "for i in range(epochs):\n", - " loss = 0\n", - " for j in range(steps_per_epoch):\n", - " # Step 1\n", - " # Randomly sample a batch of examples\n", - " X_batch, y_batch = resample(X_, y_, n_samples=batch_size)\n", - "\n", - " # Reset value of X and y Inputs\n", - " X.value = X_batch\n", - " y.value = y_batch\n", - "\n", - " # Step 2\n", - " _ = None\n", - " forward_and_backward(_, graph) # set output node not important.\n", - "\n", - " # Step 3\n", - " rate = 1e-2\n", - " \n", - " sgd_update(trainables, rate)\n", - "\n", - " loss += graph[-1].value\n", - " \n", - " if i % 100 == 0: \n", - " print(\"Epoch: {}, Loss: {:.3f}\".format(i+1, loss/steps_per_epoch))\n" - ] - } - ], - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Lecture-04.pdf b/2017-autumn/Lecture-04.pdf deleted file mode 100644 index c8e8e56..0000000 Binary files a/2017-autumn/Lecture-04.pdf and /dev/null differ diff --git a/2017-autumn/Lecture-18-AutoSummarization-Example.ipynb b/2017-autumn/Lecture-18-AutoSummarization-Example.ipynb deleted file mode 100644 index f0d3df5..0000000 --- a/2017-autumn/Lecture-18-AutoSummarization-Example.ipynb +++ /dev/null @@ -1,3344 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Auto Summarization\n", - "Main Reference: \n", - "1. TextRank: https://web.eecs.umich.edu/~mihalcea/papers/mihalcea.emnlp04.pdf\n", - "2. SentenceEmbedding: \n", - "3. InformationRetrievalAndTextMining: " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", - " return f(*args, **kwds)\n", - "/anaconda3/envs/ibm/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", - " return f(*args, **kwds)\n" - ] - } - ], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import jieba" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def cut(string): return ' '.join(jieba.cut(string))" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "news_file = 'sqlResult_1558435.csv'" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "news_content = pd.read_csv(news_file, encoding='gb18030')" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idauthorsourcecontentfeaturetitleurl
089617NaN快科技@http://www.kkj.cn/此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/...{\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"37\"...小米MIUI 9首批机型曝光:共计15款http://www.cnbeta.com/articles/tech/623597.htm
189616NaN快科技@http://www.kkj.cn/骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考...{\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"15\"...骁龙835在Windows 10上的性能表现有望改善http://www.cnbeta.com/articles/tech/623599.htm
289615NaN快科技@http://www.kkj.cn/此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n...{\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"18\"...一加手机5细节曝光:3300mAh、充半小时用1天http://www.cnbeta.com/articles/tech/623601.htm
389614NaN新华社这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n{\"type\":\"国际新闻\",\"site\":\"环球\",\"commentNum\":\"0\",\"j...葡森林火灾造成至少62人死亡 政府宣布进入紧急状态(组图)http://world.huanqiu.com/hot/2017-06/10866126....
489613胡淑丽_MN7479深圳大件事(原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清...{\"type\":\"新闻\",\"site\":\"网易热门\",\"commentNum\":\"978\",...44岁女子约网友被拒暴雨中裸奔 交警为其披衣相随http://news.163.com/17/0618/00/CN617P3Q0001875...
\n", - "
" - ], - "text/plain": [ - " id author source \\\n", - "0 89617 NaN 快科技@http://www.kkj.cn/ \n", - "1 89616 NaN 快科技@http://www.kkj.cn/ \n", - "2 89615 NaN 快科技@http://www.kkj.cn/ \n", - "3 89614 NaN 新华社 \n", - "4 89613 胡淑丽_MN7479 深圳大件事 \n", - "\n", - " content \\\n", - "0 此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/... \n", - "1 骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考... \n", - "2 此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n... \n", - "3 这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n \n", - "4 (原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清... \n", - "\n", - " feature \\\n", - "0 {\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"37\"... \n", - "1 {\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"15\"... \n", - "2 {\"type\":\"科技\",\"site\":\"cnbeta\",\"commentNum\":\"18\"... \n", - "3 {\"type\":\"国际新闻\",\"site\":\"环球\",\"commentNum\":\"0\",\"j... \n", - "4 {\"type\":\"新闻\",\"site\":\"网易热门\",\"commentNum\":\"978\",... \n", - "\n", - " title \\\n", - "0 小米MIUI 9首批机型曝光:共计15款 \n", - "1 骁龙835在Windows 10上的性能表现有望改善 \n", - "2 一加手机5细节曝光:3300mAh、充半小时用1天 \n", - "3 葡森林火灾造成至少62人死亡 政府宣布进入紧急状态(组图) \n", - "4 44岁女子约网友被拒暴雨中裸奔 交警为其披衣相随 \n", - "\n", - " url \n", - "0 http://www.cnbeta.com/articles/tech/623597.htm \n", - "1 http://www.cnbeta.com/articles/tech/623599.htm \n", - "2 http://www.cnbeta.com/articles/tech/623601.htm \n", - "3 http://world.huanqiu.com/hot/2017-06/10866126.... \n", - "4 http://news.163.com/17/0618/00/CN617P3Q0001875... " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "news_content.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "pure_content = pd.DataFrame()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "pure_content['content'] = news_content['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "pure_content = pure_content.fillna('')" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "pure_content['tokenized_content'] = pure_content['content'].apply(cut)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
contenttokenized_content
0此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/...此外 , 自 本周 ( 6 月 12 日 ) 起 , 除 小米 手机 6 等 15 款 机型...
1骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考...骁龙 835 作为 唯一 通过 Windows 10 桌面 平台 认证 的 ARM 处理...
2此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n...此前 的 一加 3T 搭载 的 是 3400mAh 电池 , DashCharge 快充 规...
3这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n这是 6 月 18 日 在 葡萄牙 中部 大 佩德罗 冈 地区 拍摄 的 被 森林 大火 烧...
4(原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清...( 原 标题 : 44 岁 女子 跑 深圳 约会 网友 被 拒 , 暴雨 中 裸身 奔走 …...
\n", - "
" - ], - "text/plain": [ - " content \\\n", - "0 此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/... \n", - "1 骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考... \n", - "2 此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n... \n", - "3 这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n \n", - "4 (原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清... \n", - "\n", - " tokenized_content \n", - "0 此外 , 自 本周 ( 6 月 12 日 ) 起 , 除 小米 手机 6 等 15 款 机型... \n", - "1 骁龙 835 作为 唯一 通过 Windows 10 桌面 平台 认证 的 ARM 处理... \n", - "2 此前 的 一加 3T 搭载 的 是 3400mAh 电池 , DashCharge 快充 规... \n", - "3 这是 6 月 18 日 在 葡萄牙 中部 大 佩德罗 冈 地区 拍摄 的 被 森林 大火 烧... \n", - "4 ( 原 标题 : 44 岁 女子 跑 深圳 约会 网友 被 拒 , 暴雨 中 裸身 奔走 …... " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pure_content.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train the word vector" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "from gensim.models import FastText" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [], - "source": [ - "with open('all_corpus.txt', 'w', encoding='utf-8') as f:\n", - " f.write(' '.join(pure_content['tokenized_content'].tolist()))" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "from gensim.models.word2vec import LineSentence" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [], - "source": [ - "model = FastText(LineSentence('all_corpus.txt'), window=5, size=35, iter=10, min_count=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import reduce" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pure_content['tok,,'].tolist() \n", - "[[''], [''], [''], [''], [''], [''], [''], ['']]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "reduce(lambda a, b: a + b, pure_content['tokenized_content'].tolist()).split()" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "metadata": {}, - "outputs": [], - "source": [ - "tokeners = [t for l in pure_content['tokenized_content'].tolist() for t in l.split()]" - ] - }, - { - "cell_type": "code", - "execution_count": 199, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['此外', ',', '自', '本周', '(', '6', '月', '12', '日', ')']" - ] - }, - "execution_count": 199, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tokeners[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Counts the words occurence " - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "metadata": {}, - "outputs": [], - "source": [ - "from collections import Counter" - ] - }, - { - "cell_type": "code", - "execution_count": 201, - "metadata": {}, - "outputs": [], - "source": [ - "tokener_counter = Counter(tokeners)" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "metadata": {}, - "outputs": [], - "source": [ - "frequence = {w: count/len(tokeners) for w, count in tokener_counter.items()}" - ] - }, - { - "cell_type": "code", - "execution_count": 209, - "metadata": {}, - "outputs": [], - "source": [ - "occurences_frequences = sorted(list(frequence.values()), reverse=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 210, - "metadata": {}, - "outputs": [], - "source": [ - "X = range(len(occurences_frequences))" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 215, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'] not found. Falling back to DejaVu Sans\n", - " (prop.get_family(), self.defaultFamily[fontext]))\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(X[:50], occurences_frequences[:50])" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Counter({'此': 33626,\n", - " '外': 131119,\n", - " ' ': 22994303,\n", - " ',': 1360799,\n", - " '自': 63122,\n", - " '本': 53481,\n", - " '周': 25145,\n", - " '(': 212529,\n", - " '6': 97092,\n", - " '月': 205888,\n", - " '1': 318823,\n", - " '2': 275952,\n", - " '日': 278379,\n", - " ')': 212782,\n", - " '起': 33322,\n", - " '除': 9959,\n", - " '小': 51778,\n", - " '米': 21697,\n", - " '手': 52263,\n", - " '机': 65294,\n", - " '等': 65840,\n", - " '5': 139557,\n", - " '款': 10820,\n", - " '型': 18257,\n", - " '其': 43675,\n", - " '余': 11292,\n", - " '已': 39217,\n", - " '暂': 2975,\n", - " '停': 7879,\n", - " '更': 32969,\n", - " '新': 272577,\n", - " '发': 144500,\n", - " '布': 38003,\n", - " '含': 3394,\n", - " '开': 88713,\n", - " '版': 6059,\n", - " '/': 33916,\n", - " '体': 89027,\n", - " '验': 16007,\n", - " '内': 55577,\n", - " '测': 10007,\n", - " '稳': 9068,\n", - " '定': 46305,\n", - " '不': 125980,\n", - " '受': 30189,\n", - " '影': 32483,\n", - " '响': 12528,\n", - " '以': 102150,\n", - " '确': 15469,\n", - " '保': 44264,\n", - " '工': 77783,\n", - " '程': 28967,\n", - " '师': 18739,\n", - " '可': 49642,\n", - " '集': 24404,\n", - " '中': 280076,\n", - " '全': 88651,\n", - " '部': 78994,\n", - " '精': 14930,\n", - " '力': 60323,\n", - " '进': 88523,\n", - " '行': 137683,\n", - " '系': 36449,\n", - " '统': 38829,\n", - " '优': 16057,\n", - " '化': 64405,\n", - " '作': 102091,\n", - " '。': 636522,\n", - " '有': 144978,\n", - " '人': 198466,\n", - " '猜': 439,\n", - " '这': 92182,\n", - " '也': 49389,\n", - " '是': 158493,\n", - " '将': 71078,\n", - " '主': 67385,\n", - " '要': 80169,\n", - " '用': 63684,\n", - " '到': 82450,\n", - " 'M': 5581,\n", - " 'I': 9653,\n", - " 'U': 2126,\n", - " '9': 54909,\n", - " '的': 713561,\n", - " '研': 28687,\n", - " '之': 48620,\n", - " '\\r': 94098,\n", - " '\\n': 94388,\n", - " '8': 55320,\n", - " '去': 25533,\n", - " '年': 221905,\n", - " '距': 3737,\n", - " '今': 29716,\n", - " '一': 287295,\n", - " '时': 103642,\n", - " '候': 9617,\n", - " '换': 5861,\n", - " '代': 112166,\n", - " '了': 139942,\n", - " '当': 71881,\n", - " '然': 23643,\n", - " '关': 58426,\n", - " '于': 72657,\n", - " '切': 11383,\n", - " '信': 32998,\n", - " '息': 20369,\n", - " '我': 55082,\n", - " '们': 54185,\n", - " '还': 35973,\n", - " '待': 7233,\n", - " '官': 10953,\n", - " '方': 79436,\n", - " '消': 16841,\n", - " '骁': 249,\n", - " '龙': 19712,\n", - " '3': 102841,\n", - " '为': 141563,\n", - " '唯': 1900,\n", - " '通': 55915,\n", - " '过': 61809,\n", - " 'W': 1567,\n", - " 'i': 8929,\n", - " 'n': 678457,\n", - " 'd': 3382,\n", - " 'o': 9806,\n", - " 'w': 1825,\n", - " 's': 5809,\n", - " '0': 268186,\n", - " '桌': 1098,\n", - " '面': 51623,\n", - " '平': 53294,\n", - " '台': 38334,\n", - " '认': 22808,\n", - " '证': 19798,\n", - " 'A': 17402,\n", - " 'R': 2629,\n", - " '处': 25483,\n", - " '理': 55145,\n", - " '器': 13649,\n", - " '高': 71760,\n", - " '强': 39032,\n", - " '调': 28635,\n", - " '会': 123619,\n", - " '因': 26708,\n", - " '只': 18060,\n", - " '考': 19017,\n", - " '虑': 3188,\n", - " '性': 33447,\n", - " '能': 73153,\n", - " '而': 34498,\n", - " '屏': 1408,\n", - " '蔽': 220,\n", - " '掉': 1888,\n", - " '核': 11624,\n", - " '心': 43569,\n", - " '相': 37663,\n", - " '反': 15270,\n", - " '他': 60014,\n", - " '正': 34420,\n", - " '联': 65344,\n", - " '微': 8886,\n", - " '软': 3347,\n", - " '找': 5501,\n", - " '种': 28906,\n", - " '适': 5706,\n", - " '合': 80592,\n", - " '、': 296644,\n", - " '兼': 2257,\n", - " '顾': 4303,\n", - " '和': 147115,\n", - " '功': 12763,\n", - " '耗': 1281,\n", - " '完': 36684,\n", - " '美': 71913,\n", - " '案': 20720,\n", - " '报': 41379,\n", - " '道': 39527,\n", - " '称': 16972,\n", - " '经': 75984,\n", - " '拿': 7588,\n", - " '些': 24295,\n", - " '源': 20833,\n", - " '码': 4305,\n", - " '便': 9169,\n", - " '好': 37765,\n", - " '地': 107688,\n", - " '解': 26095,\n", - " 'b': 1699,\n", - " 'g': 2715,\n", - " '.': 39820,\n", - " 'l': 4806,\n", - " 't': 7208,\n", - " 'e': 11837,\n", - " '架': 5994,\n", - " '构': 19167,\n", - " '资': 55685,\n", - " '料': 9616,\n", - " '显': 18265,\n", - " '示': 44524,\n", - " '成': 100335,\n", - " 'C': 11190,\n", - " 'P': 9435,\n", - " 'G': 3435,\n", - " '基': 42267,\n", - " '带': 39666,\n", - " '蓝': 3472,\n", - " '牙': 8642,\n", - " '-': 18797,\n", - " 'F': 3338,\n", - " 'S': 6143,\n", - " '比': 90066,\n", - " '传': 25120,\n", - " '节': 30470,\n", - " '省': 36146,\n", - " '至': 31956,\n", - " '少': 20769,\n", - " '%': 21051,\n", - " 'B': 10060,\n", - " '空': 23692,\n", - " '间': 40981,\n", - " '按': 8322,\n", - " '计': 37729,\n", - " '划': 16983,\n", - " 'Q': 701,\n", - " '4': 125823,\n", - " '华': 175322,\n", - " '硕': 976,\n", - " '惠': 5548,\n", - " '普': 22879,\n", - " '想': 15162,\n", - " '首': 39531,\n", - " '电': 64150,\n", - " '脑': 3520,\n", - " '预': 18297,\n", - " '均': 10540,\n", - " '二': 88158,\n", - " '形': 15730,\n", - " '态': 16535,\n", - " '产': 65820,\n", - " '品': 47132,\n", - " '个': 93876,\n", - " '始': 15083,\n", - " '未': 20018,\n", - " '来': 95755,\n", - " '许': 10467,\n", - " '见': 14711,\n", - " '三': 39604,\n", - " '星': 13585,\n", - " 'E': 3324,\n", - " 'x': 1267,\n", - " 'y': 1818,\n", - " '科': 47828,\n", - " '麒': 153,\n", - " '麟': 448,\n", - " '澎': 317,\n", - " '湃': 278,\n", - " '入': 46225,\n", - " '前': 72681,\n", - " '加': 67983,\n", - " 'T': 4617,\n", - " '搭': 3068,\n", - " '载': 7023,\n", - " 'm': 3972,\n", - " 'h': 4615,\n", - " '池': 2268,\n", - " 'D': 3631,\n", - " 'a': 11039,\n", - " 'r': 7160,\n", - " '快': 17466,\n", - " '充': 7062,\n", - " '规': 30956,\n", - " '格': 29668,\n", - " 'V': 1701,\n", - " '缩': 2911,\n", - " '水': 39902,\n", - " '与': 70298,\n", - " '刘': 10969,\n", - " '虎': 2394,\n", - " '所': 32206,\n", - " '说': 56933,\n", - " '做': 17816,\n", - " '市': 96112,\n", - " '最': 45276,\n", - " '轻': 7406,\n", - " '薄': 1054,\n", - " '大': 182608,\n", - " '旗': 3267,\n", - " '舰': 2979,\n", - " '设': 48738,\n", - " '照': 62543,\n", - " '目': 51833,\n", - " '掌': 2646,\n", - " '握': 3006,\n", - " '拥': 4364,\n", - " '寸': 514,\n", - " 'O': 5336,\n", - " 'L': 2120,\n", - " '双': 17298,\n", - " '万': 37176,\n", - " '摄': 47867,\n", - " '像': 7745,\n", - " '头': 20210,\n", - " '备': 18182,\n", - " '货': 11282,\n", - " '量': 33847,\n", - " '“': 239982,\n", - " '惊': 2364,\n", - " '喜': 5031,\n", - " '”': 239981,\n", - " '根': 13853,\n", - " '据': 38890,\n", - " '京': 43424,\n", - " '东': 40533,\n", - " '泄': 1001,\n", - " '露': 5243,\n", - " '售': 9799,\n", - " '价': 26942,\n", - " '元': 44634,\n", - " '应': 29665,\n", - " '该': 18218,\n", - " '在': 306813,\n", - " '7': 135735,\n", - " '某': 8047,\n", - " '葡': 2956,\n", - " '萄': 2444,\n", - " '佩': 3218,\n", - " '德': 46290,\n", - " '罗': 34120,\n", - " '冈': 1040,\n", - " '区': 72543,\n", - " '拍': 10087,\n", - " '被': 29863,\n", - " '森': 9157,\n", - " '林': 22160,\n", - " '火': 12989,\n", - " '烧': 1719,\n", - " '毁': 1326,\n", - " '汽': 8246,\n", - " '车': 45020,\n", - " '社': 179122,\n", - " '记': 78283,\n", - " '者': 102702,\n", - " '张': 22768,\n", - " '立': 30649,\n", - " '云': 9415,\n", - " '原': 22157,\n", - " '标': 31950,\n", - " '题': 37097,\n", - " ':': 102478,\n", - " '岁': 10161,\n", - " '女': 24376,\n", - " '子': 50908,\n", - " '跑': 6544,\n", - " '深': 23523,\n", - " '圳': 3463,\n", - " '约': 27179,\n", - " '网': 49881,\n", - " '友': 13160,\n", - " '拒': 1556,\n", - " '暴': 3898,\n", - " '雨': 7829,\n", - " '裸': 320,\n", - " '身': 20746,\n", - " '奔': 1744,\n", - " '走': 18045,\n", - " '…': 12053,\n", - " '@': 405,\n", - " '交': 44445,\n", - " '警': 16206,\n", - " '博': 16408,\n", - " '昨': 1373,\n", - " '清': 16048,\n", - " '晨': 3678,\n", - " '现': 67811,\n", - " '赤': 880,\n", - " '上': 132654,\n", - " '南': 41830,\n", - " '坪': 912,\n", - " '速': 15401,\n", - " '期': 43884,\n", - " '生': 95604,\n", - " '辅': 2013,\n", - " '后': 68324,\n", - " '赶': 2278,\n", - " '紧': 8117,\n", - " '披': 1487,\n", - " '黄': 13860,\n", - " '衣': 2503,\n", - " '并': 34519,\n", - " '路': 60794,\n", - " '劝': 652,\n", - " '她': 13918,\n", - " '那': 13133,\n", - " '么': 11218,\n", - " '事': 50913,\n", - " '底': 10393,\n", - " '都': 41015,\n", - " '什': 9308,\n", - " '呢': 1525,\n", - " '?': 13642,\n", - " '您': 737,\n", - " '场': 79516,\n", - " '岗': 3023,\n", - " '队': 82589,\n", - " '坂': 46,\n", - " '田': 7622,\n", - " '青': 17573,\n", - " '位': 36148,\n", - " '表': 55027,\n", - " '帅': 2564,\n", - " '气': 18438,\n", - " '话': 14014,\n", - " '略': 8925,\n", - " '腼': 55,\n", - " '腆': 55,\n", - " '介': 12541,\n", - " '绍': 9726,\n", - " '早': 8263,\n", - " '分': 74980,\n", - " '环': 24412,\n", - " '城': 37600,\n", - " '附': 5400,\n", - " '近': 36735,\n", - " '值': 12681,\n", - " '勤': 1410,\n", - " '接': 28908,\n", - " '动': 89921,\n", - " '危': 4637,\n", - " '险': 12987,\n", - " '情': 26915,\n", - " '随': 12714,\n", - " '骑': 4173,\n", - " '着': 32919,\n", - " '铁': 16116,\n", - " '沿': 6238,\n", - " '寻': 3972,\n", - " '概': 2056,\n", - " '花': 19968,\n", - " '十': 20506,\n", - " '多': 84668,\n", - " '钟': 6146,\n", - " '出': 95566,\n", - " '口': 22757,\n", - " '往': 11338,\n", - " '向': 31220,\n", - " '逆': 1746,\n", - " '丝': 7765,\n", - " '挂': 3222,\n", - " '流': 24685,\n", - " '坐': 3332,\n", - " '躺': 327,\n", - " '象': 10962,\n", - " '另': 6744,\n", - " '名': 50547,\n", - " '巡': 5117,\n", - " '防': 15805,\n", - " '员': 69303,\n", - " '追': 5563,\n", - " '绪': 1287,\n", - " '很': 20253,\n", - " '低': 13091,\n", - " '落': 15637,\n", - " '尝': 1509,\n", - " '试': 15115,\n", - " '离': 10021,\n", - " '愿': 8929,\n", - " '意': 35619,\n", - " '继': 10650,\n", - " '续': 23373,\n", - " '缓': 3289,\n", - " '慢': 2445,\n", - " '干': 13444,\n", - " '边': 13644,\n", - " '聚': 5587,\n", - " '民': 72357,\n", - " '围': 10977,\n", - " '观': 20073,\n", - " '刺': 4208,\n", - " '激': 5772,\n", - " '盯': 361,\n", - " '驱': 2175,\n", - " '群': 14310,\n", - " '众': 21034,\n", - " '从': 41533,\n", - " '提': 45973,\n", - " '供': 21958,\n", - " '份': 13916,\n", - " '视': 19607,\n", - " '频': 5997,\n", - " '雪': 6236,\n", - " '监': 16679,\n", - " '控': 12000,\n", - " '穿': 3924,\n", - " '白': 14392,\n", - " '色': 18257,\n", - " '裤': 431,\n", - " '班': 14009,\n", - " '峰': 9702,\n", - " '字': 12050,\n", - " '排': 12593,\n", - " '长': 64494,\n", - " '纷': 4310,\n", - " '驻': 6178,\n", - " '足': 36127,\n", - " '望': 14077,\n", - " '辆': 5474,\n", - " '放': 23405,\n", - " '度': 47087,\n", - " '但': 28400,\n", - " '下': 62764,\n", - " '脚': 3075,\n", - " '步': 22722,\n", - " '依': 10737,\n", - " '挡': 674,\n", - " '住': 12468,\n", - " '镜': 2113,\n", - " '再': 14231,\n", - " '次': 46994,\n", - " '没': 20273,\n", - " '朝': 7907,\n", - " '尾': 1655,\n", - " '或': 14946,\n", - " '止': 6418,\n", - " '看': 25393,\n", - " '样': 19590,\n", - " '况': 13199,\n", - " '恐': 6070,\n", - " '怕': 1533,\n", - " '家': 100513,\n", - " '办': 27192,\n", - " '法': 81209,\n", - " '淡': 1127,\n", - " '对': 97773,\n", - " '敢': 1558,\n", - " '里': 55821,\n", - " '挺': 993,\n", - " '别': 18903,\n", - " '扭': 581,\n", - " '感': 14856,\n", - " '觉': 5668,\n", - " '尴': 286,\n", - " '尬': 293,\n", - " '跟': 4464,\n", - " '让': 21393,\n", - " '举': 44650,\n", - " '突': 10460,\n", - " '靠': 4377,\n", - " '护': 18128,\n", - " '栏': 1559,\n", - " '跳': 2922,\n", - " '忙': 2601,\n", - " '冲': 6377,\n", - " '拉': 41852,\n", - " '制': 47572,\n", - " '远': 10716,\n", - " '碍': 1936,\n", - " '服': 29957,\n", - " '递': 2865,\n", - " '把': 13983,\n", - " '扔': 316,\n", - " '沟': 4070,\n", - " '耐': 1102,\n", - " '导': 26560,\n", - " '安': 51131,\n", - " '慰': 1250,\n", - " '听': 5063,\n", - " '断': 12399,\n", - " '重': 57943,\n", - " '复': 13392,\n", - " '句': 1395,\n", - " '你': 8315,\n", - " '遭': 5049,\n", - " '遇': 8377,\n", - " '图': 24493,\n", - " '挣': 461,\n", - " '脱': 7865,\n", - " '就': 44830,\n", - " '牵': 1346,\n", - " '天': 52990,\n", - " '连': 14034,\n", - " '眼': 6846,\n", - " '睛': 592,\n", - " '睁': 133,\n", - " '瞬': 667,\n", - " '透': 11006,\n", - " '帮': 7627,\n", - " '助': 18523,\n", - " '冒': 1083,\n", - " '四': 23415,\n", - " '吧': 1567,\n", - " '回': 26887,\n", - " '片': 68028,\n", - " '翼': 1692,\n", - " '旁': 1548,\n", - " '景': 14103,\n", - " '派': 6158,\n", - " '姑': 789,\n", - " '娘': 1398,\n", - " '才': 13934,\n", - " '姓': 2413,\n", - " '陈': 11621,\n", - " '湖': 13151,\n", - " '北': 59972,\n", - " '属': 7552,\n", - " '映': 6195,\n", - " '神': 10667,\n", - " '病': 10887,\n", - " '史': 11627,\n", - " '老': 21406,\n", - " '挫': 388,\n", - " '致': 13527,\n", - " '异': 3810,\n", - " '常': 23842,\n", - " '遂': 348,\n", - " '念': 9022,\n", - " '送': 7364,\n", - " '医': 22824,\n", - " '院': 35408,\n", - " '治': 24805,\n", - " '疗': 8880,\n", - " '君': 1446,\n", - " '希': 14126,\n", - " '点': 41022,\n", - " '康': 9734,\n", - " '实': 62440,\n", - " '真': 10783,\n", - " '爱': 12029,\n", - " '存': 12146,\n", - " '龄': 2464,\n", - " '限': 14147,\n", - " '善': 9933,\n", - " '良': 6544,\n", - " '暖': 2504,\n", - " '男': 15160,\n", - " 'Z': 437,\n", - " 'N': 7543,\n", - " '弓': 234,\n", - " '桦': 92,\n", - " '问': 28093,\n", - " '哥': 10507,\n", - " '票': 10301,\n", - " '吗': 1854,\n", - " '谅': 292,\n", - " '辈': 1127,\n", - " '浪': 3207,\n", - " '荡': 1537,\n", - " '羁': 78,\n", - " '萨': 9870,\n", - " '摩': 7774,\n", - " '耶': 2812,\n", - " '嘛': 123,\n", - " '己': 14467,\n", - " '同': 57783,\n", - " '谢': 4604,\n", - " '蜀': 165,\n", - " '黍': 25,\n", - " '聆': 211,\n", - " '灵': 2678,\n", - " '赞': 3082,\n", - " '華': 2,\n", - " '盾': 1532,\n", - " '察': 11245,\n", - " '需': 19398,\n", - " '申': 7065,\n", - " '援': 5191,\n", - " 'c': 4252,\n", - " '!': 6638,\n", - " 'J': 719,\n", - " '李': 18497,\n", - " '赫': 4405,\n", - " '海': 60612,\n", - " '木': 6777,\n", - " '迷': 3786,\n", - " '奸': 167,\n", - " '号': 17374,\n", - " '午': 8758,\n", - " '淮': 600,\n", - " '涟': 46,\n", - " '县': 18750,\n", - " '公': 91295,\n", - " '局': 31205,\n", - " '刑': 3098,\n", - " '奇': 11048,\n", - " '怪': 588,\n", - " '言': 10646,\n", - " '语': 7143,\n", - " '声': 10305,\n", - " '侵': 2671,\n", - " '害': 6076,\n", - " '几': 11853,\n", - " '键': 5129,\n", - " '词': 2897,\n", - " '令': 6312,\n", - " '\\u3000': 408918,\n", - " '股': 20842,\n", - " '纳': 26371,\n", - " '指': 25538,\n", - " '数': 39689,\n", - " '利': 67605,\n", - " '演': 20301,\n", - " '马': 46514,\n", - " '金': 52262,\n", - " '融': 19419,\n", - " '盘': 7021,\n", - " '仅': 12138,\n", - " '板': 8192,\n", - " '块': 4511,\n", - " '仍': 7844,\n", - " '维': 21709,\n", - " '红': 11648,\n", - " '状': 6105,\n", - " '析': 5592,\n", - " '士': 24428,\n", - " '益': 13385,\n", - " '估': 3453,\n", - " '获': 22628,\n", - " '睐': 433,\n", - " '弈': 353,\n", - " '风': 22232,\n", - " '替': 1730,\n", - " '震': 3630,\n", - " '延': 5744,\n", - " '改': 28927,\n", - " '济': 30650,\n", - " '悲': 661,\n", - " '修': 8831,\n", - " '支': 24542,\n", - " '撑': 2356,\n", - " '逐': 7042,\n", - " '九': 4824,\n", - " '势': 17100,\n", - " '两': 39190,\n", - " '幅': 9399,\n", - " '级': 43380,\n", - " '业': 125430,\n", - " '收': 29716,\n", - " '银': 15166,\n", - " '非': 19685,\n", - " '涨': 10346,\n", - " '商': 29875,\n", - " '达': 32570,\n", - " '国': 340445,\n", - " '托': 9436,\n", - " '及': 38224,\n", - " '券': 6173,\n", - " '共': 37321,\n", - " '招': 5944,\n", - " '贵': 7066,\n", - " '阳': 13240,\n", - " '夏': 7182,\n", - " '浦': 2484,\n", - " '兴': 10442,\n", - " '超': 26806,\n", - " '太': 11334,\n", - " '居': 10928,\n", - " '西': 58840,\n", - " '寿': 1046,\n", - " '跌': 7360,\n", - " '宣': 11246,\n", - " '占': 8236,\n", - " '团': 24553,\n", - " '包': 17117,\n", - " '剔': 188,\n", - " '互': 16853,\n", - " '易': 21229,\n", - " '牌': 12992,\n", - " '由': 25579,\n", - " 'H': 2684,\n", - " '权': 18302,\n", - " '升': 19491,\n", - " '泛': 2659,\n", - " '费': 19542,\n", - " '涵': 1789,\n", - " '盖': 5278,\n", - " '司': 35598,\n", - " '增': 32342,\n", - " '半': 13558,\n", - " '稀': 917,\n", - " '释': 3444,\n", - " '尽': 6517,\n", - " '管': 33312,\n", - " '件': 27489,\n", - " '短': 6646,\n", - " '振': 3690,\n", - " '温': 7706,\n", - " '尚': 5108,\n", - " '效': 15839,\n", - " '独': 7189,\n", - " '乐': 16832,\n", - " '难': 15897,\n", - " '持': 35501,\n", - " '变': 18387,\n", - " '光': 16183,\n", - " '引': 19597,\n", - " '热': 14295,\n", - " '较': 14654,\n", - " '材': 5410,\n", - " '明': 39044,\n", - " '腾': 2092,\n", - " '挪': 1128,\n", - " '跷': 78,\n", - " '使': 20248,\n", - " '得': 50021,\n", - " '破': 10307,\n", - " '旧': 2958,\n", - " '偏': 2289,\n", - " '虽': 5074,\n", - " '智': 12696,\n", - " '无': 27182,\n", - " '退': 6264,\n", - " '归': 4604,\n", - " '登': 8113,\n", - " '第': 59215,\n", - " '陆': 9140,\n", - " '又': 9219,\n", - " '怎': 2746,\n", - " '秘': 4124,\n", - " '悄': 541,\n", - " 'k': 1440,\n", - " '库': 9480,\n", - " '配': 9038,\n", - " '瞩': 419,\n", - " '芯': 899,\n", - " '采': 14648,\n", - " '艺': 14141,\n", - " '八': 7377,\n", - " 'K': 1420,\n", - " 'X': 1197,\n", - " '销': 10342,\n", - " '单': 27329,\n", - " '端': 9596,\n", - " '签': 7699,\n", - " '署': 6321,\n", - " '协': 19973,\n", - " '议': 29240,\n", - " '既': 3301,\n", - " '曝': 1041,\n", - " '渲': 69,\n", - " '染': 4893,\n", - " '竞': 10173,\n", - " '争': 12143,\n", - " '推': 31526,\n", - " '球': 103917,\n", - " '媒': 16780,\n", - " '忠': 2247,\n", - " '打': 26321,\n", - " '赌': 626,\n", - " '座': 6924,\n", - " '各': 28699,\n", - " '怀': 3556,\n", - " '揣': 140,\n", - " '沙': 12061,\n", - " '漠': 1462,\n", - " '雄': 5034,\n", - " '鹰': 1280,\n", - " '套': 5907,\n", - " '牢': 1282,\n", - " '筹': 3362,\n", - " ',': 12542,\n", - " '沪': 1762,\n", - " '站': 18434,\n", - " '线': 89402,\n", - " '黑': 8939,\n", - " '鹅': 695,\n", - " '拖': 1253,\n", - " '累': 4427,\n", - " '绝': 4695,\n", - " '扬': 3658,\n", - " '镳': 33,\n", - " '绿': 7227,\n", - " '久': 4488,\n", - " '策': 15051,\n", - " '域': 18458,\n", - " '整': 17738,\n", - " '压': 6789,\n", - " '夯': 294,\n", - " '承': 11847,\n", - " '告': 19880,\n", - " '段': 14224,\n", - " '财': 11151,\n", - " '闻': 15616,\n", - " '央': 10887,\n", - " '总': 45664,\n", - " '债': 7374,\n", - " '境': 20389,\n", - " '投': 30226,\n", - " '准': 19007,\n", - " '务': 52645,\n", - " '究': 19277,\n", - " '房': 22851,\n", - " '《': 36055,\n", - " '贷': 5997,\n", - " '率': 16433,\n", - " '楼': 5508,\n", - " '》': 36054,\n", - " '污': 5031,\n", - " '草': 5744,\n", - " '审': 9301,\n", - " '五': 15130,\n", - " '结': 23579,\n", - " '算': 8321,\n", - " '展': 80620,\n", - " '户': 20792,\n", - " '休': 4545,\n", - " '眠': 671,\n", - " '知': 14914,\n", - " '启': 8546,\n", - " '账': 3190,\n", - " '文': 58174,\n", - " '求': 21232,\n", - " '六': 6812,\n", - " '军': 36948,\n", - " '末': 2920,\n", - " '额': 8743,\n", - " '亿': 19546,\n", - " '七': 4837,\n", - " '宏': 3146,\n", - " '素': 7236,\n", - " '鼓': 4001,\n", - " '舞': 7389,\n", - " '富': 10844,\n", - " '际': 49594,\n", - " '磊': 1125,\n", - " '转': 18095,\n", - " '创': 35030,\n", - " ';': 25891,\n", - " '弱': 2816,\n", - " '抛': 723,\n", - " '药': 10427,\n", - " '造': 29895,\n", - " '技': 36699,\n", - " '术': 32358,\n", - " '临': 8361,\n", - " '吐': 1163,\n", - " '失': 9380,\n", - " '守': 6496,\n", - " '留': 8884,\n", - " '鸡': 1969,\n", - " '毛': 6162,\n", - " '每': 19367,\n", - " '置': 9541,\n", - " '抬': 670,\n", - " '即': 9882,\n", - " '乏': 1865,\n", - " '封': 2730,\n", - " '攻': 7113,\n", - " '克': 37903,\n", - " '却': 5626,\n", - " '则': 12008,\n", - " '触': 2371,\n", - " '疑': 5611,\n", - " '负': 13096,\n", - " '背': 4881,\n", - " '雏': 184,\n", - " '旦': 2111,\n", - " '味': 4921,\n", - " '如': 28248,\n", - " '综': 6835,\n", - " '脆': 417,\n", - " '碎': 739,\n", - " '模': 17784,\n", - " '糊': 395,\n", - " '凌': 2335,\n", - " '乱': 2714,\n", - " '赚': 741,\n", - " '钱': 5117,\n", - " '掣': 102,\n", - " '肘': 141,\n", - " '先': 18898,\n", - " '础': 8519,\n", - " '弹': 6310,\n", - " '积': 16057,\n", - " '轮': 20849,\n", - " '繁': 3585,\n", - " '吃': 4948,\n", - " '击': 18136,\n", - " '极': 16985,\n", - " '似': 3809,\n", - " '乎': 3237,\n", - " '买': 7573,\n", - " '直': 17278,\n", - " '吸': 7043,\n", - " '莫': 6939,\n", - " '齐': 5580,\n", - " '闪': 1215,\n", - " '崩': 334,\n", - " '踩': 286,\n", - " '踏': 1411,\n", - " '建': 63001,\n", - " '终': 11041,\n", - " '缺': 4720,\n", - " '若': 2524,\n", - " '活': 35438,\n", - " '跃': 2293,\n", - " '战': 43546,\n", - " '降': 12594,\n", - " '纠': 1471,\n", - " '缠': 320,\n", - " '促': 8697,\n", - " '摸': 1127,\n", - " ...})" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tokener_counter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## TextRank" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [], - "source": [ - "import networkx" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [], - "source": [ - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [], - "source": [ - "def genrate_name(length=3): return ''.join(chr(random.randint(65, 73)) for _ in range(length))" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'AFB'" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "genrate_name()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "graph = {\n", - " 'Yao': ['Guo', 'Wang', 'Tian', 'Tim'] + [genrate_name() for _ in range(6)], \n", - " 'Guo': ['Li'] + [genrate_name() for _ in range(5)], \n", - " 'Wang': ['Li_2'] + [genrate_name() for _ in range(5)], \n", - " 'Li': [genrate_name() for _ in range(3)], \n", - " 'Li_2': [genrate_name() for _ in range(1)]\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Yao': ['Guo',\n", - " 'Wang',\n", - " 'Tian',\n", - " 'Tim',\n", - " 'BHD',\n", - " 'DCC',\n", - " 'GII',\n", - " 'EEC',\n", - " 'CIB',\n", - " 'ECB'],\n", - " 'Guo': ['Li', 'EAD', 'DAA', 'EII', 'CID', 'FEA'],\n", - " 'Wang': ['Li_2', 'IAI', 'DGB', 'AEG', 'ECH', 'CGB'],\n", - " 'Li': ['GEH', 'CIF', 'DBD'],\n", - " 'Li_2': ['AEB']}" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "graph" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "social_network = networkx.graph.Graph()" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on method add_edges_from in module networkx.classes.graph:\n", - "\n", - "add_edges_from(ebunch_to_add, **attr) method of networkx.classes.graph.Graph instance\n", - " Add all the edges in ebunch_to_add.\n", - " \n", - " Parameters\n", - " ----------\n", - " ebunch_to_add : container of edges\n", - " Each edge given in the container will be added to the\n", - " graph. The edges must be given as as 2-tuples (u, v) or\n", - " 3-tuples (u, v, d) where d is a dictionary containing edge data.\n", - " attr : keyword arguments, optional\n", - " Edge data (or labels or objects) can be assigned using\n", - " keyword arguments.\n", - " \n", - " See Also\n", - " --------\n", - " add_edge : add a single edge\n", - " add_weighted_edges_from : convenient way to add weighted edges\n", - " \n", - " Notes\n", - " -----\n", - " Adding the same edge twice has no effect but any edge data\n", - " will be updated when each duplicate edge is added.\n", - " \n", - " Edge attributes specified in an ebunch take precedence over\n", - " attributes specified via keyword arguments.\n", - " \n", - " Examples\n", - " --------\n", - " >>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc\n", - " >>> G.add_edges_from([(0, 1), (1, 2)]) # using a list of edge tuples\n", - " >>> e = zip(range(0, 3), range(1, 4))\n", - " >>> G.add_edges_from(e) # Add the path graph 0-1-2-3\n", - " \n", - " Associate data to edges\n", - " \n", - " >>> G.add_edges_from([(1, 2), (2, 3)], weight=3)\n", - " >>> G.add_edges_from([(3, 4), (1, 4)], label='WN2898')\n", - "\n" - ] - } - ], - "source": [ - "help(social_network.add_edges_from)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [], - "source": [ - "for vertex, edge in graph.items():\n", - " for v in edge:\n", - " social_network.add_edges_from([(vertex, v)])" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "networkx.draw_networkx(social_network)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [], - "source": [ - "ranking_result = networkx.pagerank(social_network)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('Yao', 0.1747698412634544),\n", - " ('Wang', 0.12616099221117885),\n", - " ('Guo', 0.12434209154337311),\n", - " ('Li', 0.07600909782512963),\n", - " ('Li_2', 0.04007465697366682),\n", - " ('AEB', 0.022586982681035123),\n", - " ('GEH', 0.021706946858994478),\n", - " ('CIF', 0.021706946858994478),\n", - " ('DBD', 0.021706946858994478),\n", - " ('IAI', 0.020875426652805028),\n", - " ('DGB', 0.020875426652805028),\n", - " ('AEG', 0.020875426652805028),\n", - " ('ECH', 0.020875426652805028),\n", - " ('CGB', 0.020875426652805028),\n", - " ('EAD', 0.020654738077342236),\n", - " ('DAA', 0.020654738077342236),\n", - " ('EII', 0.020654738077342236),\n", - " ('CID', 0.020654738077342236),\n", - " ('FEA', 0.020654738077342236),\n", - " ('Tian', 0.020410584159305276),\n", - " ('Tim', 0.020410584159305276),\n", - " ('BHD', 0.020410584159305276),\n", - " ('DCC', 0.020410584159305276),\n", - " ('GII', 0.020410584159305276),\n", - " ('EEC', 0.020410584159305276),\n", - " ('CIB', 0.020410584159305276),\n", - " ('ECB', 0.020410584159305276)]" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sorted(ranking_result.items(), key=lambda x: x[1], reverse=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Yao': 0.1747698412634544,\n", - " 'Guo': 0.12434209154337311,\n", - " 'Wang': 0.12616099221117885,\n", - " 'Tian': 0.020410584159305276,\n", - " 'Tim': 0.020410584159305276,\n", - " 'BHD': 0.020410584159305276,\n", - " 'DCC': 0.020410584159305276,\n", - " 'GII': 0.020410584159305276,\n", - " 'EEC': 0.020410584159305276,\n", - " 'CIB': 0.020410584159305276,\n", - " 'ECB': 0.020410584159305276,\n", - " 'Li': 0.07600909782512963,\n", - " 'EAD': 0.020654738077342236,\n", - " 'DAA': 0.020654738077342236,\n", - " 'EII': 0.020654738077342236,\n", - " 'CID': 0.020654738077342236,\n", - " 'FEA': 0.020654738077342236,\n", - " 'Li_2': 0.04007465697366682,\n", - " 'IAI': 0.020875426652805028,\n", - " 'DGB': 0.020875426652805028,\n", - " 'AEG': 0.020875426652805028,\n", - " 'ECH': 0.020875426652805028,\n", - " 'CGB': 0.020875426652805028,\n", - " 'GEH': 0.021706946858994478,\n", - " 'CIF': 0.021706946858994478,\n", - " 'DBD': 0.021706946858994478,\n", - " 'AEB': 0.022586982681035123}" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "networkx.pagerank(social_network)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## TextRank Page" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
contenttokenized_content
0此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/...此外 , 自 本周 ( 6 月 12 日 ) 起 , 除 小米 手机 6 等 15 款 机型...
1骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考...骁龙 835 作为 唯一 通过 Windows 10 桌面 平台 认证 的 ARM 处理...
2此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n...此前 的 一加 3T 搭载 的 是 3400mAh 电池 , DashCharge 快充 规...
3这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n这是 6 月 18 日 在 葡萄牙 中部 大 佩德罗 冈 地区 拍摄 的 被 森林 大火 烧...
4(原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清...( 原 标题 : 44 岁 女子 跑 深圳 约会 网友 被 拒 , 暴雨 中 裸身 奔走 …...
\n", - "
" - ], - "text/plain": [ - " content \\\n", - "0 此外,自本周(6月12日)起,除小米手机6等15款机型外,其余机型已暂停更新发布(含开发版/... \n", - "1 骁龙835作为唯一通过Windows 10桌面平台认证的ARM处理器,高通强调,不会因为只考... \n", - "2 此前的一加3T搭载的是3400mAh电池,DashCharge快充规格为5V/4A。\\r\\n... \n", - "3 这是6月18日在葡萄牙中部大佩德罗冈地区拍摄的被森林大火烧毁的汽车。新华社记者张立云摄\\r\\n \n", - "4 (原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清... \n", - "\n", - " tokenized_content \n", - "0 此外 , 自 本周 ( 6 月 12 日 ) 起 , 除 小米 手机 6 等 15 款 机型... \n", - "1 骁龙 835 作为 唯一 通过 Windows 10 桌面 平台 认证 的 ARM 处理... \n", - "2 此前 的 一加 3T 搭载 的 是 3400mAh 电池 , DashCharge 快充 规... \n", - "3 这是 6 月 18 日 在 葡萄牙 中部 大 佩德罗 冈 地区 拍摄 的 被 森林 大火 烧... \n", - "4 ( 原 标题 : 44 岁 女子 跑 深圳 约会 网友 被 拒 , 暴雨 中 裸身 奔走 …... " - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pure_content.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [], - "source": [ - "lengthes_of_text = map(len, pure_content['content'].tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[177,\n", - " 329,\n", - " 216,\n", - " 45,\n", - " 1674,\n", - " 1056,\n", - " 657,\n", - " 4093,\n", - " 3665,\n", - " 755,\n", - " 169,\n", - " 1467,\n", - " 487,\n", - " 774,\n", - " 1137,\n", - " 331,\n", - " 293,\n", - " 495,\n", - " 289,\n", - " 1707]" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "list(lengthes_of_text)[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/anaconda3/envs/ibm/lib/python3.6/site-packages/networkx']" - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "networkx.__path__" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.font_manager as fm\n", - "fp1 = fm.FontProperties(fname=\"/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf\")\n", - "# how to set chinese display: \n", - "# https://knowlab.wordpress.com/2016/05/25/networkx-%E7%B9%AA%E5%9C%96%E9%A1%AF%E7%A4%BA%E4%B8%AD%E6%96%87%E7%9A%84%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95/\n", - "\n", - "def get_connect_graph_by_text_rank(tokenized_text: str, window=3):\n", - " keywords_graph = networkx.Graph()\n", - " tokeners = tokenized_text.split()\n", - " for ii, t in enumerate(tokeners):\n", - " word_tuples = [(tokeners[connect], t) \n", - " for connect in range(ii-window, ii+window+1) \n", - " if connect >= 0 and connect < len(tokeners)]\n", - " keywords_graph.add_edges_from(word_tuples)\n", - "\n", - " return keywords_graph" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": {}, - "outputs": [], - "source": [ - "first_content = pure_content.iloc[1]['tokenized_content']" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "metadata": {}, - "outputs": [], - "source": [ - "first_content_continous = pure_content.iloc[4]['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['骁龙835作为唯一通过Windows',\n", - " '10桌面平台认证的ARM处理器,高通强调,不会因为只考虑性能而去屏蔽掉小核心。相反,他们正联手微软,找到一种适合桌面平台的、兼顾性能和功耗的完美方案。',\n", - " '报道称,微软已经拿到了一些新的源码,以便Windows',\n", - " '10更好地理解big.little架构。',\n", - " '资料显示,骁龙835作为一款集成了CPU、GPU、基带、蓝牙/Wi-Fi的SoC,比传统的Wintel方案可以节省至少30%的PCB空间。',\n", - " '按计划,今年Q4,华硕、惠普、联想将首发骁龙835',\n", - " 'Win10电脑,预计均是二合一形态的产品。',\n", - " '当然,高通骁龙只是个开始,未来也许还能见到三星Exynos、联发科、华为麒麟、小米澎湃等进入Windows',\n", - " '10桌面平台。']" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first_content_continous.replace(',', ' ').split()" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [], - "source": [ - "import re" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "metadata": {}, - "outputs": [], - "source": [ - "pattern = re.compile('[。,,.]')\n", - "token_by_sentence_first = pattern.sub(' ', first_content_continous).split()" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['(原标题:44岁女子跑深圳约会网友被拒',\n", - " '暴雨中裸身奔走……)',\n", - " '@深圳交警微博称:昨日清晨交警发现有一女子赤裸上身',\n", - " '行走在南坪快速上',\n", - " '期间还起了轻生年头',\n", - " '一辅警发现后赶紧为其披上黄衣',\n", - " '并一路劝说她',\n", - " '那么事发时',\n", - " '到底都发生了些什么呢?',\n", - " '南都记者带您一起还原现场']" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "token_by_sentence_first[:10]" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [], - "source": [ - "sentence_graph = get_connect_graph_by_text_rank()" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'] not found. Falling back to DejaVu Sans\n", - " (prop.get_family(), self.defaultFamily[fontext]))\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "networkx.draw(sentence_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "metadata": {}, - "outputs": [], - "source": [ - "ranking_sentence = networkx.pagerank(sentence_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'(原标题:44岁女子跑深圳约会网友被拒,暴雨中裸身奔走……)\\r\\n@深圳交警微博称:昨日清晨交警发现有一女子赤裸上身,行走在南坪快速上,期间还起了轻生年头,一辅警发现后赶紧为其披上黄衣,并一路劝说她。\\r\\n那么事发时\\r\\n到底都发生了些什么呢?\\r\\n南都记者带您一起还原现场\\r\\n南都记者在龙岗大队坂田中队见到了辅警刘青(发现女生的辅警),一位外表高大帅气,说话略带些腼腆的90后青年。\\r\\n刘青介绍,6月16日早上7时36分,他正在环城南路附近值勤,接到中队关于一位女子裸身进入机动车可能有危险的警情,随后骑着小铁骑开始沿路寻找,大概花了十多分钟在南坪大道坂田出口往龙岗方向的逆行辅道上发现该女子。\\r\\n女子身上一丝不挂地逆车流而行,时走时停,时坐时躺,险象环生。刘青停好小铁骑,和另外一名巡防员追了上去,发现女子的情绪很低落,话不多,刘青尝试和女子交流,劝说女子离开,可女子并不愿意接受,继续缓慢地往南坪快速路的主干道上走去。\\r\\n此时路边上已经聚集了很市民围观,为了不刺激女子的情绪,刘青和巡防员一边盯着女子一边驱赶着围观的群众。\\r\\n现场还原\\r\\n从警方提供的一份视频了解到,16日早上7时25分,女子出现在坂雪岗大道与环城南路的监控视频中,此时女子还穿着白色的内裤,正沿着坂雪岗大道往南坪快速的方向缓慢地走着。\\r\\n当时正值上班高峰期,十字路口的车流已经排起了长队。当女子出现时,路上的市民纷纷驻足观望,不少车辆也放慢了速度,但女子并不为市民观望停下脚步,依然缓慢走着。当女子行进到十字路口中间时,一辆大货车挡住了镜头,但是当女子再次出现镜头时,可以发现女子已经没穿内裤了,全身裸露继续朝着南坪快速方向走去。记者发现,视频中女子周围并没有人尾随或者上前劝止的市民。\\r\\n一大清早路上看到这样的情况\\r\\n恐怕大家都没办法淡定\\r\\n面对这一情况\\r\\n刘青表示,“一开始根本不敢看她,心里挺别扭,感觉很尴尬”,但当刘青跟随女子上了南坪快速路主干道时,女子作出了让人意想不到的举动,她突然靠近护栏要从上面跳下去,刘青赶忙冲上去拉住了女子的手,将其控制住并远离护栏。碍于女子没有穿衣服,刘青递上衣服,女子没接受还把衣服扔到排水沟里,继续往前走,没办法刘青只能紧紧拉着她的一只手跟在后面。\\r\\n刘青一路上耐心地开导安慰她,但只听到她不断地重复着一句话“要是你也遭遇我的事,你也会这样的”,期间她还不时试图挣脱刘青的手要冲向护栏往下跳。\\r\\n就这样,我被牵着走了大概十多分钟,天突然下起了大暴雨,雨大的连眼睛都睁不开”刘青继续说着,瞬间他们就被雨透了,但女子依然不愿意接受刘青的帮助,就继续冒着大雨往前走。\\r\\n大概走了有四十分钟吧,女子突然停下来说“我想回家了”,然后女子也接受了刘青递过来的小黄衣,就出现了深圳微博上的照片,女子披着小黄衣,刘青小心翼翼地在旁边走着的场景。从南平快速下来后,刘青和巡防员将女子带到了附近的坂田派出所。\\r\\n那姑娘到底是遭遇了什么样的事情\\r\\n才会说\\r\\n“要是你也遭遇我的事,你也会这样”\\r\\n据警方透露,该女子姓陈,系湖北人,今年44岁,据家属反映其有精神病史。三天前,陈某从老家来深圳约会网友,但约会受挫导致情绪异常,女子遂产生轻生念头。\\r\\n目前\\r\\n陈某已经被送往深圳某精神病医院进行治疗\\r\\n大大君只希望姑娘能早点康复\\r\\n其实真爱的到来并不存在年龄的限制\\r\\n你们说呢?\\r\\n因善良的原因\\r\\n一众网友纷纷为\\r\\n交警暖男点ZAN\\r\\n@弓常yan桦:就想问这个小哥哥有女票吗\\r\\n@原谅我这一辈子浪荡不羁爱萨摩耶:有什么过不去的要轻生嘛? 想想自己的家人。同时也感谢交警蜀黍\\r\\n@火心聆听心灵:点赞交警\\r\\n@中華云盾:警察……警察就是群众最需时申出援手\\r\\n@Tomchlee:蜀黍帅!\\r\\n@SJ-李赫海i:这个交警很暖有木有!\\r\\n男子迷奸网友拍418个视频 女方从20岁到50岁不等\\r\\n去年6月7号上午,淮安市涟水县公安局刑警大队突然接到了一个奇怪的报警电话,一名女子言语不清,声称自己遭到了侵害。女子、被侵害、言语不清,几个关键词令接到电话的民警瞬间紧张起来。\\r\\n'" - ] - }, - "execution_count": 148, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first_content_continous" - ] - }, - { - "cell_type": "code", - "execution_count": 228, - "metadata": {}, - "outputs": [], - "source": [ - "def split_sentence(sentence):\n", - " pattern = re.compile('[。,,.]:')\n", - " split = pattern.sub(' ', sentence).split() # split sentence\n", - " return split" - ] - }, - { - "cell_type": "code", - "execution_count": 288, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2013 3 月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢? 近日,一款型号为 FS8016 的夏普神秘新机悄然出现在 GeekBench 的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙 660 660 是高通今年最受瞩目的芯片之一,采用 14 纳米工艺,八个 Kryo 260 核心设计,集成 Adreno 512 GPU 和 X12 LTE 660 OPPO 660 OPPO 660 2013 年推出全球首款全面屏手机 EDGEST 302SH 至今,夏普手机推出了多达 28 款的全面屏手机。 在 5'" - ] - }, - "execution_count": 288, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(get_summarization_simple_with_text_rank(sharp_news, constraint=250))" - ] - }, - { - "cell_type": "code", - "execution_count": 284, - "metadata": {}, - "outputs": [], - "source": [ - "def get_summarization_simple_with_text_rank(text, constraint=200):\n", - " return get_summarization_simple(text, sentence_ranking_by_text_ranking, constraint)" - ] - }, - { - "cell_type": "code", - "execution_count": 283, - "metadata": {}, - "outputs": [], - "source": [ - "def sentence_ranking_by_text_ranking(split_sentence):\n", - " sentence_graph = get_connect_graph_by_text_rank(' '.join(split_sentence))\n", - " ranking_sentence = networkx.pagerank(sentence_graph)\n", - " ranking_sentence = sorted(ranking_sentence.items(), key=lambda x: x[1], reverse=True)\n", - " return ranking_sentence" - ] - }, - { - "cell_type": "code", - "execution_count": 287, - "metadata": {}, - "outputs": [], - "source": [ - "def get_summarization_simple(text, score_fn, constraint=200):\n", - " sub_sentence = split_sentence(text)\n", - " ranking_sentence = score_fn(sub_sentence)\n", - " selected_text = set()\n", - " current_text = ''\n", - " \n", - " for sen, _ in ranking_sentence:\n", - " if len(current_text) < constraint:\n", - " current_text += sen\n", - " selected_text.add(sen)\n", - " else:\n", - " break\n", - "\n", - " summarized = []\n", - " for sen in sub_sentence: # print the selected sentence by sequent\n", - " if sen in selected_text:\n", - " summarized.append(sen)\n", - " return summarized" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 课间休息 15min \n", - "## 10:37 课程继续" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'虽然至今夏普智能手机在市场上无法排得上号,已经完全没落,并于 2013 年退出中国市场,但是今年 3 月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢?\\r\\n近日,一款型号为 FS8016 的夏普神秘新机悄然出现在 GeekBench 的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙 660 处理器,配备有 4GB 的内存。骁龙 660 是高通今年最受瞩目的芯片之一,采用 14 纳米工艺,八个 Kryo 260 核心设计,集成 Adreno 512 GPU 和 X12 LTE 调制解调器。\\r\\n当前市面上只有一款机子采用了骁龙 660 处理器,那就是已经上市销售的 OPPO R11。骁龙 660 尽管并非旗舰芯片,但在多核新能上比去年骁龙 820 强,单核改进也很明显,所以放在今年仍可以让很多手机变成高端机。不过,由于 OPPO 与高通签署了排他性协议,可以独占两三个月时间。\\r\\n考虑到夏普既然开始测试新机了,说明只要等独占时期一过,夏普就能发布骁龙 660 新品了。按照之前被曝光的渲染图了解,夏普的新机核心竞争优势还是全面屏,因为从 2013 年推出全球首款全面屏手机 EDGEST 302SH 至今,夏普手机推出了多达 28 款的全面屏手机。\\r\\n在 5 月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12 个月之后,在座的各位手机都会换掉。因为全面屏时代的到来,我们怀揣的手机都将成为传统手机。”\\r\\n'" - ] - }, - "execution_count": 162, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pure_content.iloc[6]['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2013 年退出中国市场 但是今年 3 月份官方突然宣布回归中国 预示着很快就有夏普新机在中国登场了 那么 第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢? 近日 一款型号为 FS8016 660 处理器 骁龙 660 260 核心设计 集成 Adreno 512 660 处理器 OPPO 骁龙 660 OPPO 660 2013 EDGEST 302SH 至今 夏普手机推出了多达 28 款的全面屏手机 在 5 月份的媒体沟通会上 惠普罗忠生表示:“我敢打赌 12 个月之后 在座的各位手机都会换掉 因为全面屏时代的到来'" - ] - }, - "execution_count": 161, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(get_summarization_simple(pure_content.iloc[6]['content']))" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'原标题:中国墨子号卫星首次实现1200公里量子纠缠,震惊国外专家\\r\\n雷锋网按:在量子加密通信的研究领域,如何长距离传输纠缠光子一直是个很大的难题。不过最近我国的科学家们,利用去年八月发射的墨子号量子卫星,在这件事上取得了一些突破。研究者们成功从太空中,往相距约 1200 公里的云南丽江和青海德令哈地面站发送了纠缠光子对。本文由雷锋网编译。\\r\\n去年年底的某个晴朗的夜晚,一个绿色的星点出现在中缅边界的地平线附近。正在丽江郊外观测站的物理学家,中国科技大学教授陆朝阳观测到了这一现象,他说:“这很像一个非常明亮的绿色星体。”\\r\\n陆教授和他的同事们必须赶快采取行动。因为那个绿色星体其实是来自于 300 英里上空正在运行的卫星发出的一道激光,它就像一个灯塔预示着太空飞行器的位置。激光点在空中快速移动着,10 分钟后就会消失在地平线中。所以这个由中国的多个科学机构研究者组成的团队,正在用望远镜紧紧盯着这道绿光,努力捕捉着其中最重要的东西:这个卫星上由特殊晶体制造的一种微妙的单一红外光子。最终他们过滤掉绿光,锁定了他们的“猎物”——一个过去从未发出射过的量子信号。\\r\\n这项实验是量子密码这种新技术中的一次关键测试。量子密码就是像光子这样的量子传输安全信息的技术。但是众所周知,脆弱的量子不易进行传递,如果你试图利用光纤来传递它们,超过 150 英里后,信号就会失效,这种性质使得量子密码在全国或者世界范围内传递消息时起不到什么作用。\\r\\n所以科学家们一直在研究如何利用卫星来进行长距离的量子传送。但是在此之前,还没有人做到如此远的距离。在这项实验中,中国科学家在两个相距 750 英里的地面站点和卫星之间传递单一光子,创造了距离最远的新记录(两站分别是青海德令哈站和云南丽江高美古站,两站距离1203公里)。参与这项工作的巴黎量子计算中心副主管 Eleni Diamanti 说:“这个实验对扩展远距离量子沟通网络来讲拥有里程碑式的意义,这毫无疑问。”\\r\\n去年 8 月,在戈壁滩的酒泉卫星发射中心,中国发射了造价一亿美元的量子卫星“墨子号”,专门用来进行空间级别的量子实验。该卫星上搭载了一套复杂的激光系统、反射镜面系统和一中特殊的晶体,当激光反射在晶体上时,它会创造出一对处于纠缠态的光子。晶体一次可以制造 6 百万对光子,但是地面上的两个站点每秒只能探测到大约一对光子。陆教授说:“这项任务非常具有挑战性,类似于你在 300 米外观察一根头发。”\\r\\n陆教授和他的同事们认为,量子密码技术会成为未来一种良好的加密工具,其工作原理是这样的:首先,测量光子的性质,得到一串由 0、1 组成的密钥,接着利用这串密钥加密你的信息并将其发送给特定的接收者。如果黑客想要在传输中窃取这串密钥,根据测不准理论,量子将会在窃取的瞬间改变密钥数字。想象薛定谔的猫,当你没有观察它时,它既生又死,而你一旦观察它,它就会表现出生或者死的一个状态。同样的,偷窃的黑客会瞬间改变构成密钥的光子的状态,所以理论上,在理想状态下,这串密钥绝对不会被窃取(现实中的硬件设备并不完美,探测器在探测连续单一光子时表现不佳,这可能让我们误以为信息被窃取了,黑客也可以通过发射强光来追踪你的探测器)。\\r\\n中国的量子卫星发射和这项实验是科研人员长期努力的结果。负责这个项目的物理学家,中国科技大学教授潘建伟说,卫星实验的开始可以追溯到2003年,他带领的大约 100 人的团队从设计、建造到调整激光和卫星系统付出了多年的努力。他们最初的实验是在地面上进行的,起初只是在几英里内传输密钥,后来慢慢开始加大距离。\\r\\n“但是他们在该领域的研究仍然是很快的。”加拿大滑铁卢大学的物理学 Thomas Jennewein 说道(他最近完成了从地面到飞行中的飞机间的量子传输)。几年前,Jennewein 在国际空间站上试图完成相似的实验。他说:“因为各种实验的复杂性、高昂的成本等等,那些项目没有一个可以实现如此远的距离。但是中国团队现在做到了,他们走在了领域的前沿,这非常棒。”\\r\\n杜克大学的中国科技政策研究专家 Denis Simon 说:“他们之所以行动如此快速,得益于中国政府对该项目的充分重视。因为中国政府领导希望完成这样的实验,所以实验团队无需在通常的官僚制度上浪费时间。”中国政府对量子通信技术抱有极大的兴趣,因为量子安全通信对国家利益大有裨益。他说道:“中国政府想将这种通信技术运用在中国南海的海军战舰上,该技术的应用还有很多。”\\r\\n同时,其他国家的科学家也在进行类似的实验,但是却被很多官僚制度所束缚。比如 Diamanti 的团队还正在等待欧洲空间局对他们在国际空间站和欧洲几个地面站点间传递量子实验申请的回复。伊利诺伊香槟分校的物理学家 Paul Kwiat 也正在领导美国的团队与 NASA 合作进行相似的实验。\\r\\n但是还没有一个国家像中国一样对量子通信有着宏伟的计划。陆教授和他的团队正在计划在一个新的更远的卫星上实施同样的实验,将量子通信的距离从城市间扩展得到更远。他们想要在中国和奥地利(那里有一些合作伙伴)之间交换量子密钥。潘建伟曾说过,中国计划在 2030 年打造一个覆盖全球的量子卫星通信网络。陆教授说:“我们是非常幸运的,我们的成功得益于中国政府的快速决策系统,政治和科学的结合可以事半功倍。”\\r\\n'" - ] - }, - "execution_count": 175, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pure_content.iloc[2496]['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2496----\n", - "如何长距离传输纠缠光子一直是个很大的难题 不过最近我国的科学家们 利用去年八月发射的墨子号量子卫星 在这件事上取得了一些突破 研究者们成功从太空中 往相距约 1200 ” 300 Diamanti ” 300 ” 在理想状态下 这串密钥绝对不会被窃取(现实中的硬件设备并不完美 探测器在探测连续单一光子时表现不佳 这可能让我们误以为信息被窃取了 黑客也可以通过发射强光来追踪你的探测器) 中国的量子卫星发射和这项实验是科研人员长期努力的结果 Jennewein Jennewein ” ” Diamanti 年打造一个覆盖全球的量子卫星通信网络 ”\n" - ] - } - ], - "source": [ - "for index in random.sample(list(range(len(pure_content))), 30):\n", - " content = pure_content.iloc[index]['content']\n", - " if len(content) > 1000:\n", - " print('{}----'.format(index))\n", - " print(' '.join(get_summarization_simple(content)))" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('一名女子言语不清', 0.008761809701694283),\n", - " ('行走在南坪快速上', 0.008761809701694281),\n", - " ('期间还起了轻生年头', 0.00853806788025346),\n", - " ('淮安市涟水县公安局刑警大队突然接到了一个奇怪的报警电话', 0.00853806788025346),\n", - " ('一辅警发现后赶紧为其披上黄衣', 0.008371719895408159),\n", - " ('去年6月7号上午', 0.008371719895408159),\n", - " ('并一路劝说她', 0.008245759268329758),\n", - " ('女方从20岁到50岁不等', 0.008245759268329758),\n", - " ('那么事发时', 0.00815029910456809),\n", - " ('男子迷奸网友拍418个视频', 0.00815029910456809),\n", - " ('@SJ-李赫海i:这个交警很暖有木有!', 0.008078401421739694),\n", - " ('到底都发生了些什么呢?', 0.008078401421739692),\n", - " ('南都记者带您一起还原现场', 0.008024087516959199),\n", - " ('@Tomchlee:蜀黍帅!', 0.008024087516959199),\n", - " ('南都记者在龙岗大队坂田中队见到了辅警刘青(发现女生的辅警)', 0.007983207314774927),\n", - " ('@中華云盾:警察……警察就是群众最需时申出援手', 0.007983207314774927),\n", - " ('一位外表高大帅气', 0.007952624377193676),\n", - " ('@火心聆听心灵:点赞交警', 0.007952624377193674),\n", - " ('说话略带些腼腆的90后青年', 0.007929884597094566),\n", - " ('同时也感谢交警蜀黍', 0.007929884597094566),\n", - " ('刘青介绍', 0.007913142240506744),\n", - " ('想想自己的家人', 0.007913142240506744),\n", - " ('@原谅我这一辈子浪荡不羁爱萨摩耶:有什么过不去的要轻生嘛?', 0.007900964870248895),\n", - " ('6月16日早上7时36分', 0.007900964870248892),\n", - " ('他正在环城南路附近值勤', 0.007892232774304273),\n", - " ('@弓常yan桦:就想问这个小哥哥有女票吗', 0.007892232774304273),\n", - " ('接到中队关于一位女子裸身进入机动车可能有危险的警情', 0.00788607704919873),\n", - " ('交警暖男点ZAN', 0.00788607704919873),\n", - " ('一众网友纷纷为', 0.007881820981426759),\n", - " ('随后骑着小铁骑开始沿路寻找', 0.007881820981426757),\n", - " ('因善良的原因', 0.007878941618434662),\n", - " ('大概花了十多分钟在南坪大道坂田出口往龙岗方向的逆行辅道上发现该女子', 0.00787894161843466),\n", - " ('你们说呢?', 0.007877040414333012),\n", - " ('女子身上一丝不挂地逆车流而行', 0.00787704041433301),\n", - " ('时走时停', 0.007875818243366639),\n", - " ('其实真爱的到来并不存在年龄的限制', 0.007875818243366639),\n", - " ('时坐时躺', 0.007875055326830038),\n", - " ('大大君只希望姑娘能早点康复', 0.007875055326830038),\n", - " ('险象环生', 0.007874594202822473),\n", - " ('陈某已经被送往深圳某精神病医院进行治疗', 0.007874594202822473),\n", - " ('目前', 0.007874325165885149),\n", - " ('刘青停好小铁骑', 0.007874325165885147),\n", - " ('女子遂产生轻生念头', 0.00787417418096783),\n", - " ('和另外一名巡防员追了上去', 0.007874174180967829),\n", - " ('但约会受挫导致情绪异常', 0.007874093011541456),\n", - " ('发现女子的情绪很低落', 0.007874093011541454),\n", - " ('话不多', 0.007874051412730365),\n", - " ('陈某从老家来深圳约会网友', 0.007874051412730365),\n", - " ('刘青尝试和女子交流', 0.007874031209340058),\n", - " ('三天前', 0.007874031209340058),\n", - " ('劝说女子离开', 0.007874021979828482),\n", - " ('据家属反映其有精神病史', 0.007874021979828482),\n", - " ('今年44岁', 0.00787401805200212),\n", - " ('可女子并不愿意接受', 0.007874018052002118),\n", - " ('继续缓慢地往南坪快速路的主干道上走去', 0.007874016514985274),\n", - " ('系湖北人', 0.007874016514985274),\n", - " ('此时路边上已经聚集了很市民围观', 0.007874015971942193),\n", - " ('该女子姓陈', 0.007874015971942193),\n", - " ('为了不刺激女子的情绪', 0.007874015803169621),\n", - " ('据警方透露', 0.007874015803169621),\n", - " ('你也会这样”', 0.007874015758793634),\n", - " ('刘青和巡防员一边盯着女子一边驱赶着围观的群众', 0.007874015758793632),\n", - " ('现场还原', 0.007874015749519759),\n", - " ('“要是你也遭遇我的事', 0.007874015749519759),\n", - " ('从警方提供的一份视频了解到', 0.00787401574814256),\n", - " ('才会说', 0.00787401574814256),\n", - " ('16日早上7时25分', 0.007874015748031496),\n", - " ('女子出现在坂雪岗大道与环城南路的监控视频中', 0.007874015748031496),\n", - " ('此时女子还穿着白色的内裤', 0.007874015748031496),\n", - " ('正沿着坂雪岗大道往南坪快速的方向缓慢地走着', 0.007874015748031496),\n", - " ('当时正值上班高峰期', 0.007874015748031496),\n", - " ('十字路口的车流已经排起了长队', 0.007874015748031496),\n", - " ('当女子出现时', 0.007874015748031496),\n", - " ('路上的市民纷纷驻足观望', 0.007874015748031496),\n", - " ('不少车辆也放慢了速度', 0.007874015748031496),\n", - " ('但女子并不为市民观望停下脚步', 0.007874015748031496),\n", - " ('依然缓慢走着', 0.007874015748031496),\n", - " ('当女子行进到十字路口中间时', 0.007874015748031496),\n", - " ('一辆大货车挡住了镜头', 0.007874015748031496),\n", - " ('但是当女子再次出现镜头时', 0.007874015748031496),\n", - " ('可以发现女子已经没穿内裤了', 0.007874015748031496),\n", - " ('全身裸露继续朝着南坪快速方向走去', 0.007874015748031496),\n", - " ('记者发现', 0.007874015748031496),\n", - " ('视频中女子周围并没有人尾随或者上前劝止的市民', 0.007874015748031496),\n", - " ('一大清早路上看到这样的情况', 0.007874015748031496),\n", - " ('恐怕大家都没办法淡定', 0.007874015748031496),\n", - " ('面对这一情况', 0.007874015748031496),\n", - " ('刘青表示', 0.007874015748031496),\n", - " ('“一开始根本不敢看她', 0.007874015748031496),\n", - " ('心里挺别扭', 0.007874015748031496),\n", - " ('感觉很尴尬”', 0.007874015748031496),\n", - " ('但当刘青跟随女子上了南坪快速路主干道时', 0.007874015748031496),\n", - " ('女子作出了让人意想不到的举动', 0.007874015748031496),\n", - " ('她突然靠近护栏要从上面跳下去', 0.007874015748031496),\n", - " ('刘青赶忙冲上去拉住了女子的手', 0.007874015748031496),\n", - " ('将其控制住并远离护栏', 0.007874015748031496),\n", - " ('碍于女子没有穿衣服', 0.007874015748031496),\n", - " ('刘青递上衣服', 0.007874015748031496),\n", - " ('女子没接受还把衣服扔到排水沟里', 0.007874015748031496),\n", - " ('继续往前走', 0.007874015748031496),\n", - " ('没办法刘青只能紧紧拉着她的一只手跟在后面', 0.007874015748031496),\n", - " ('刘青一路上耐心地开导安慰她', 0.007874015748031496),\n", - " ('但只听到她不断地重复着一句话“要是你也遭遇我的事', 0.007874015748031496),\n", - " ('你也会这样的”', 0.007874015748031496),\n", - " ('期间她还不时试图挣脱刘青的手要冲向护栏往下跳', 0.007874015748031496),\n", - " ('就这样', 0.007874015748031496),\n", - " ('我被牵着走了大概十多分钟', 0.007874015748031496),\n", - " ('天突然下起了大暴雨', 0.007874015748031496),\n", - " ('雨大的连眼睛都睁不开”刘青继续说着', 0.007874015748031496),\n", - " ('瞬间他们就被雨透了', 0.007874015748031496),\n", - " ('但女子依然不愿意接受刘青的帮助', 0.007874015748031496),\n", - " ('就继续冒着大雨往前走', 0.007874015748031496),\n", - " ('大概走了有四十分钟吧', 0.007874015748031496),\n", - " ('女子突然停下来说“我想回家了”', 0.007874015748031496),\n", - " ('然后女子也接受了刘青递过来的小黄衣', 0.007874015748031496),\n", - " ('就出现了深圳微博上的照片', 0.007874015748031496),\n", - " ('女子披着小黄衣', 0.007874015748031496),\n", - " ('刘青小心翼翼地在旁边走着的场景', 0.007874015748031496),\n", - " ('从南平快速下来后', 0.007874015748031496),\n", - " ('刘青和巡防员将女子带到了附近的坂田派出所', 0.007874015748031496),\n", - " ('那姑娘到底是遭遇了什么样的事情', 0.007874015748031496),\n", - " ('声称自己遭到了侵害', 0.007760391420088102),\n", - " ('@深圳交警微博称:昨日清晨交警发现有一女子赤裸上身', 0.007760391420088101),\n", - " ('暴雨中裸身奔走……)', 0.006743520732558356),\n", - " ('女子、被侵害、言语不清', 0.006743520732558355),\n", - " ('(原标题:44岁女子跑深圳约会网友被拒', 0.005706295418150805),\n", - " ('几个关键词令接到电话的民警瞬间紧张起来', 0.005706295418150804)]" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sorted(ranking_sentence.items(), key=lambda x: x[1], reverse=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'str' object has no attribute 'decode'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mkeywords_graph\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_connect_graph_by_text_rank\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfirst_content\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwindow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mget_connect_graph_by_text_rank\u001b[0;34m(tokenized_text, window)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mii\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtokeners\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m word_tuples = [(tokeners[connect].decode('utf-8'), t.decode('utf-8')) \n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mconnect\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mii\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mwindow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mii\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mwindow\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m if connect >= 0 and connect < len(tokeners)]\n\u001b[1;32m 8\u001b[0m \u001b[0mkeywords_graph\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_edges_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mword_tuples\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 5\u001b[0m word_tuples = [(tokeners[connect].decode('utf-8'), t.decode('utf-8')) \n\u001b[1;32m 6\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mconnect\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mii\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mwindow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mii\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mwindow\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m if connect >= 0 and connect < len(tokeners)]\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mkeywords_graph\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_edges_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mword_tuples\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAttributeError\u001b[0m: 'str' object has no attribute 'decode'" - ] - } - ], - "source": [ - "keywords_graph = get_connect_graph_by_text_rank(first_content, window=5)" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [], - "source": [ - "ranking_words = networkx.pagerank(keywords_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [], - "source": [ - "from matplotlib import rcParams\n", - "rcParams['font.family'] = '/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'] not found. Falling back to DejaVu Sans\n", - " (prop.get_family(), self.defaultFamily[fontext]))\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "networkx.draw_networkx(keywords_graph)" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(',', 0.04971796909107254),\n", - " ('的', 0.032169208603727614),\n", - " ('。', 0.02860228225909264),\n", - " ('、', 0.02771502328849811),\n", - " ('骁龙', 0.017759850248184172),\n", - " ('Windows', 0.015115542829056361),\n", - " ('10', 0.014661459543306039),\n", - " ('835', 0.01417195081727616),\n", - " ('桌面', 0.013938442660657342),\n", - " ('平台', 0.012843338290542764)]" - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sorted(ranking_words.items(), key=lambda x: x[1], reverse=True)[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Sentence Embedding Based" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 216, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.06041265049289309" - ] - }, - "execution_count": 216, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "max(frequence.values())" - ] - }, - { - "cell_type": "code", - "execution_count": 219, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 219, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "'测试机' in model.wv" - ] - }, - { - "cell_type": "code", - "execution_count": 221, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead).\n", - " \n" - ] - }, - { - "data": { - "text/plain": [ - "array([ 0.8209102 , 0.06840289, -0.53223395, -0.735713 , -0.24113654,\n", - " -0.95707494, 0.9833474 , -0.74113065, 0.31412685, -2.0497446 ,\n", - " 2.0620635 , -1.0265256 , 1.092847 , -0.853559 , -1.8556648 ,\n", - " -0.93276614, 0.2515715 , -1.020293 , -0.05743051, -1.8814358 ,\n", - " 0.5998357 , -0.06820183, 2.357323 , 0.83137274, -1.2140547 ,\n", - " -3.565163 , 0.9846055 , -0.77957344, -0.2384383 , 1.178894 ,\n", - " -0.96436185, 3.207032 , 0.897161 , -0.5350476 , 0.40027657],\n", - " dtype=float32)" - ] - }, - "execution_count": 221, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sentence_embedding('这是 一台 测试机')" - ] - }, - { - "cell_type": "code", - "execution_count": 347, - "metadata": {}, - "outputs": [], - "source": [ - "def sentence_embedding(sentence, cut):\n", - " # weight = alpah/(alpah + p) \n", - " # alpha is a parameter, 1e-3 ~ 1e-5\n", - " alpha = 1e-4\n", - " \n", - " global frequence\n", - " \n", - " max_fre = max(frequence.values())\n", - " \n", - " words = cut(sentence).split()\n", - " \n", - " sentence_vec = np.zeros_like(model.wv['测试'])\n", - " \n", - " words = [w for w in words if w in model]\n", - " \n", - " for w in words:\n", - " weight = alpha / (alpha + frequence.get(w, max_fre))\n", - " sentence_vec += weight * model.wv[w]\n", - " \n", - " sentence_vec /= len(words)\n", - " # Skip the PCA\n", - " return sentence_vec" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Treat the whole text as a long sentence.\n", - "\n", - "```\n", - "\n", - "# 程序伪代码\n", - "sentence_vector = get_sentence_embedding(text) \n", - "# sentence vector is represeted as semantic similarity\n", - "# therefore, sentence vector is representing the whole text semantic infomation.\n", - "\n", - "correlations = []\n", - "\n", - "for sub_sentence in text:\n", - " sub_sen_vec = get_sentence_embedding(sub_sentence)\n", - " correlation = similarity(sub_sen_vec, sentence_vector)\n", - " correlations.append(correlation)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 225, - "metadata": {}, - "outputs": [], - "source": [ - "sharp_news = pure_content.iloc[6]['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "metadata": {}, - "outputs": [], - "source": [ - "from scipy.spatial.distance import cosine" - ] - }, - { - "cell_type": "code", - "execution_count": 293, - "metadata": {}, - "outputs": [], - "source": [ - "def get_corrlations(text, cut_fn):\n", - " if isinstance(text, list): text = ' '.join(text)\n", - " \n", - " sub_sentences = split_sentence(text)\n", - " sentence_vector = sentence_embedding(text, cut_fn)\n", - " \n", - " correlations = {}\n", - " \n", - " for sub_sentence in sub_sentences:\n", - " sub_sen_vec = sentence_embedding(sub_sentence, cut_fn)\n", - " correlation = cosine(sentence_vector, sub_sen_vec)\n", - " correlations[sub_sentence]= correlation\n", - "\n", - " return sorted(corrlations.items(), key=lambda x: x[1], reverse=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 294, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import partial" - ] - }, - { - "cell_type": "code", - "execution_count": 296, - "metadata": {}, - "outputs": [], - "source": [ - "# f(x, y) \n", - "#f(x, y=1) # is a partial funtion" - ] - }, - { - "cell_type": "code", - "execution_count": 297, - "metadata": {}, - "outputs": [], - "source": [ - "corrlations_with_global_cut = partial(get_corrlations, cut_fn=cut)\n", - "corrlations_with_global_cut = partial(get_corrlations, cut_fn=another_cut)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def new_summarization_algorithm(): pass" - ] - }, - { - "cell_type": "code", - "execution_count": 275, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function get_summarization_simple in module __main__:\n", - "\n", - "get_summarization_simple(text, score_fn, constraint=200)\n", - "\n" - ] - } - ], - "source": [ - "help(get_summarization_simple)" - ] - }, - { - "cell_type": "code", - "execution_count": 298, - "metadata": {}, - "outputs": [], - "source": [ - "def get_summarization_simple_by_sen_embedding(text, constraint=200):\n", - " return get_summarization_simple(text, corrlations_with_global_cut, constraint)" - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead).\n", - " \n" - ] - }, - { - "data": { - "text/plain": [ - "'2013 年退出中国市场,但是今年 3 近日,一款型号为 FS8016 的夏普神秘新机悄然出现在 GeekBench 660 处理器,配备有 4GB 660 14 纳米工艺,八个 Kryo 260 核心设计,集成 Adreno 512 GPU 和 X12 LTE 调制解调器。 660 OPPO R11。骁龙 660 820 OPPO 与高通签署了排他性协议,可以独占两三个月时间。 660 2013 年推出全球首款全面屏手机 EDGEST 302SH 28 在 5 月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12'" - ] - }, - "execution_count": 301, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(get_summarization_simple_by_sen_embedding(sharp_news, constraint=200))" - ] - }, - { - "cell_type": "code", - "execution_count": 308, - "metadata": {}, - "outputs": [], - "source": [ - "danger_news = pure_content.iloc[4]['content']" - ] - }, - { - "cell_type": "code", - "execution_count": 343, - "metadata": {}, - "outputs": [], - "source": [ - "def get_sequent_correlation(text):\n", - " sub_sentence = split_sentence(text)\n", - " corrleations = corrlations_with_global_cut(sub_sentence)\n", - " correlation_with_sequent = [(sen, corrlations[sen]) for sen in sub_sentence]\n", - " return correlation_with_sequent" - ] - }, - { - "cell_type": "code", - "execution_count": 344, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead).\n", - " \n" - ] - }, - { - "data": { - "text/plain": [ - "[('虽然至今夏普智能手机在市场上无法排得上号,已经完全没落,并于', 0.12964648008346558),\n", - " ('2013', 0.799274817109108),\n", - " ('年退出中国市场,但是今年', 0.30392885208129883),\n", - " ('3', 1.0643607676029205),\n", - " ('月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢?',\n", - " 0.12079513072967529),\n", - " ('近日,一款型号为', 0.24997162818908691),\n", - " ('FS8016', 1.0181109383702278),\n", - " ('的夏普神秘新机悄然出现在', 0.19331711530685425),\n", - " ('GeekBench', 1.0206618532538414),\n", - " ('的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙', 0.04037266969680786),\n", - " ('660', 0.8802495077252388),\n", - " ('处理器,配备有', 0.2487751841545105),\n", - " ('4GB', 0.8022160232067108),\n", - " ('的内存。骁龙', 0.1610603928565979),\n", - " ('660', 0.8802495077252388),\n", - " ('是高通今年最受瞩目的芯片之一,采用', 0.1596813201904297),\n", - " ('14', 1.0912874341011047),\n", - " ('纳米工艺,八个', 0.20669978857040405),\n", - " ('Kryo', 1.261707752943039),\n", - " ('260', 0.9195282161235809),\n", - " ('核心设计,集成', 0.2239118218421936),\n", - " ('Adreno', 1.0604844614863396),\n", - " ('512', 0.9973529151175171),\n", - " ('GPU', 0.6360308527946472),\n", - " ('和', 0.5902390778064728),\n", - " ('X12', 1.0669185444712639),\n", - " ('LTE', 0.6847786903381348),\n", - " ('调制解调器。', 0.4060221314430237),\n", - " ('当前市面上只有一款机子采用了骁龙', 0.17805546522140503),\n", - " ('660', 0.8802495077252388),\n", - " ('处理器,那就是已经上市销售的', 0.055647075176239014),\n", - " ('OPPO', 0.7231224775314331),\n", - " ('R11。骁龙', 0.38088226318359375),\n", - " ('660', 0.8802495077252388),\n", - " ('尽管并非旗舰芯片,但在多核新能上比去年骁龙', 0.16877931356430054),\n", - " ('820', 0.9291320592164993),\n", - " ('强,单核改进也很明显,所以放在今年仍可以让很多手机变成高端机。不过,由于', 0.09469187259674072),\n", - " ('OPPO', 0.7231224775314331),\n", - " ('与高通签署了排他性协议,可以独占两三个月时间。', 0.2567896246910095),\n", - " ('考虑到夏普既然开始测试新机了,说明只要等独占时期一过,夏普就能发布骁龙', 0.07963865995407104),\n", - " ('660', 0.8802495077252388),\n", - " ('新品了。按照之前被曝光的渲染图了解,夏普的新机核心竞争优势还是全面屏,因为从', 0.040095508098602295),\n", - " ('2013', 0.799274817109108),\n", - " ('年推出全球首款全面屏手机', 0.5124390721321106),\n", - " ('EDGEST', 1.1215405240654945),\n", - " ('302SH', 0.9462662227451801),\n", - " ('至今,夏普手机推出了多达', 0.13676100969314575),\n", - " ('28', 1.1545579135417938),\n", - " ('款的全面屏手机。', 0.11287486553192139),\n", - " ('在', 0.4273228049278259),\n", - " ('5', 1.174242302775383),\n", - " ('月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12', 0.1848764419555664),\n", - " ('个月之后,在座的各位手机都会换掉。因为全面屏时代的到来,我们怀揣的手机都将成为传统手机。”', 0.045291781425476074)]" - ] - }, - "execution_count": 344, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sub_sentence = get_sequent_correlation(sharp_news)\n", - "sub_sentence" - ] - }, - { - "cell_type": "code", - "execution_count": 345, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 345, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'] not found. Falling back to DejaVu Sans\n", - " (prop.get_family(), self.defaultFamily[fontext]))\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(len(sub_sentence)), [y for _, y in correlation_with_sequent])" - ] - }, - { - "cell_type": "code", - "execution_count": 324, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead).\n", - " \n" - ] - } - ], - "source": [ - "sub_seq_of_danger = get_sequent_correlation(danger_news)" - ] - }, - { - "cell_type": "code", - "execution_count": 325, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 325, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sub_seq_of_danger" - ] - }, - { - "cell_type": "code", - "execution_count": 322, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 322, - "metadata": {}, - "output_type": "execute_result" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['/Users/mqgao/Downloads/SourceHanSerifSC-Regular.otf'] not found. Falling back to DejaVu Sans\n", - " (prop.get_family(), self.defaultFamily[fontext]))\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(len(sub_seq_of_danger)), [y for _, y in sub_seq_of_danger])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Supplementary\n", - "\n", - "这些对TextRank和Sentence Emebdding都是有效用的。 \n", - "\n", - "### 1. KNN make it more fluently\n", - "> 对于一个sub_sentence来说,它的重要性,取决于他本身的重要性和周围的句子(neighbors)的重要性的综合;\n", - "### 2. Title is very important is it exists\n", - "> 如果一个文章有标题,那么,其实这个标题已经包含了很多它的摘要信息, 在考虑语义建模的时候,就应该对标题更加重要的考虑;\n", - "### 3. The keywords count; \n", - "> 关键字是很重要的,如果我们能够比较准确的提取出来关键词/字,然后对关键字/词包含的句子增加其权重; \n", - "### 4. Position counts;\n", - "> 对于一些文本,文章,例如一个故事的这种文章,那么他的textRank, sentence embedding 会发现,并不会出现很明显有些句子是重要的,有些句子不重要的,如果plot他的曲线的话,我们这个时候就要考虑他的位置,开头,结尾,增加一些权重;\n", - "### 5. Topics count; \n", - "> LDA主题模型,得到的主题分布,我们可以用每句话和的出来的这些主题进行相似度对比,我们不仅仅是是考虑他的整个的text, 我们还有考虑主题;\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda3/envs/ibm/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead).\n", - " \n" - ] - } - ], - "source": [ - "corrlations = get_corrlations(sharp_news, cut)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "get_summarization_simple()" - ] - }, - { - "cell_type": "code", - "execution_count": 248, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('Kryo', 1.261707752943039),\n", - " ('5', 1.174242302775383),\n", - " ('28', 1.1545579135417938),\n", - " ('EDGEST', 1.1215405240654945),\n", - " ('14', 1.0912874341011047),\n", - " ('X12', 1.0669185444712639),\n", - " ('3', 1.0643607676029205),\n", - " ('Adreno', 1.0604844614863396),\n", - " ('GeekBench', 1.0206618532538414),\n", - " ('FS8016', 1.0181109383702278),\n", - " ('512', 0.9973529151175171),\n", - " ('302SH', 0.9462662227451801),\n", - " ('820', 0.9291320592164993),\n", - " ('260', 0.9195282161235809),\n", - " ('660', 0.8802495077252388),\n", - " ('4GB', 0.8022160232067108),\n", - " ('2013', 0.799274817109108),\n", - " ('OPPO', 0.7231224775314331),\n", - " ('LTE', 0.6847786903381348),\n", - " ('GPU', 0.6360308527946472),\n", - " ('和', 0.5902390778064728),\n", - " ('年推出全球首款全面屏手机', 0.5124390721321106),\n", - " ('在', 0.4273228049278259),\n", - " ('调制解调器。', 0.4060221314430237),\n", - " ('R11。骁龙', 0.38088226318359375),\n", - " ('年退出中国市场,但是今年', 0.30392885208129883),\n", - " ('与高通签署了排他性协议,可以独占两三个月时间。', 0.2567896246910095),\n", - " ('近日,一款型号为', 0.24997162818908691),\n", - " ('处理器,配备有', 0.2487751841545105),\n", - " ('核心设计,集成', 0.2239118218421936),\n", - " ('纳米工艺,八个', 0.20669978857040405),\n", - " ('的夏普神秘新机悄然出现在', 0.19331711530685425),\n", - " ('月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12', 0.1848764419555664),\n", - " ('当前市面上只有一款机子采用了骁龙', 0.17805546522140503),\n", - " ('尽管并非旗舰芯片,但在多核新能上比去年骁龙', 0.16877931356430054),\n", - " ('的内存。骁龙', 0.1610603928565979),\n", - " ('是高通今年最受瞩目的芯片之一,采用', 0.1596813201904297),\n", - " ('至今,夏普手机推出了多达', 0.13676100969314575),\n", - " ('虽然至今夏普智能手机在市场上无法排得上号,已经完全没落,并于', 0.12964648008346558),\n", - " ('月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢?',\n", - " 0.12079513072967529),\n", - " ('款的全面屏手机。', 0.11287486553192139),\n", - " ('强,单核改进也很明显,所以放在今年仍可以让很多手机变成高端机。不过,由于', 0.09469187259674072),\n", - " ('考虑到夏普既然开始测试新机了,说明只要等独占时期一过,夏普就能发布骁龙', 0.07963865995407104),\n", - " ('处理器,那就是已经上市销售的', 0.055647075176239014),\n", - " ('个月之后,在座的各位手机都会换掉。因为全面屏时代的到来,我们怀揣的手机都将成为传统手机。”', 0.045291781425476074),\n", - " ('的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙', 0.04037266969680786),\n", - " ('新品了。按照之前被曝光的渲染图了解,夏普的新机核心竞争优势还是全面屏,因为从', 0.040095508098602295)]" - ] - }, - "execution_count": 248, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 231, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'虽然至今夏普智能手机在市场上无法排得上号,已经完全没落,并于 2013 年退出中国市场,但是今年 3 月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢?\\r\\n近日,一款型号为 FS8016 的夏普神秘新机悄然出现在 GeekBench 的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙 660 处理器,配备有 4GB 的内存。骁龙 660 是高通今年最受瞩目的芯片之一,采用 14 纳米工艺,八个 Kryo 260 核心设计,集成 Adreno 512 GPU 和 X12 LTE 调制解调器。\\r\\n当前市面上只有一款机子采用了骁龙 660 处理器,那就是已经上市销售的 OPPO R11。骁龙 660 尽管并非旗舰芯片,但在多核新能上比去年骁龙 820 强,单核改进也很明显,所以放在今年仍可以让很多手机变成高端机。不过,由于 OPPO 与高通签署了排他性协议,可以独占两三个月时间。\\r\\n考虑到夏普既然开始测试新机了,说明只要等独占时期一过,夏普就能发布骁龙 660 新品了。按照之前被曝光的渲染图了解,夏普的新机核心竞争优势还是全面屏,因为从 2013 年推出全球首款全面屏手机 EDGEST 302SH 至今,夏普手机推出了多达 28 款的全面屏手机。\\r\\n在 5 月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12 个月之后,在座的各位手机都会换掉。因为全面屏时代的到来,我们怀揣的手机都将成为传统手机。”\\r\\n'" - ] - }, - "execution_count": 231, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sharp_news" - ] - }, - { - "cell_type": "code", - "execution_count": 230, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['虽然至今夏普智能手机在市场上无法排得上号,已经完全没落,并于',\n", - " '2013',\n", - " '年退出中国市场,但是今年',\n", - " '3',\n", - " '月份官方突然宣布回归中国,预示着很快就有夏普新机在中国登场了。那么,第一款夏普手机什么时候登陆中国呢?又会是怎么样的手机呢?',\n", - " '近日,一款型号为',\n", - " 'FS8016',\n", - " '的夏普神秘新机悄然出现在',\n", - " 'GeekBench',\n", - " '的跑分库上。从其中相关信息了解到,这款机子并非旗舰定位,所搭载的是高通骁龙',\n", - " '660',\n", - " '处理器,配备有',\n", - " '4GB',\n", - " '的内存。骁龙',\n", - " '660',\n", - " '是高通今年最受瞩目的芯片之一,采用',\n", - " '14',\n", - " '纳米工艺,八个',\n", - " 'Kryo',\n", - " '260',\n", - " '核心设计,集成',\n", - " 'Adreno',\n", - " '512',\n", - " 'GPU',\n", - " '和',\n", - " 'X12',\n", - " 'LTE',\n", - " '调制解调器。',\n", - " '当前市面上只有一款机子采用了骁龙',\n", - " '660',\n", - " '处理器,那就是已经上市销售的',\n", - " 'OPPO',\n", - " 'R11。骁龙',\n", - " '660',\n", - " '尽管并非旗舰芯片,但在多核新能上比去年骁龙',\n", - " '820',\n", - " '强,单核改进也很明显,所以放在今年仍可以让很多手机变成高端机。不过,由于',\n", - " 'OPPO',\n", - " '与高通签署了排他性协议,可以独占两三个月时间。',\n", - " '考虑到夏普既然开始测试新机了,说明只要等独占时期一过,夏普就能发布骁龙',\n", - " '660',\n", - " '新品了。按照之前被曝光的渲染图了解,夏普的新机核心竞争优势还是全面屏,因为从',\n", - " '2013',\n", - " '年推出全球首款全面屏手机',\n", - " 'EDGEST',\n", - " '302SH',\n", - " '至今,夏普手机推出了多达',\n", - " '28',\n", - " '款的全面屏手机。',\n", - " '在',\n", - " '5',\n", - " '月份的媒体沟通会上,惠普罗忠生表示:“我敢打赌,12',\n", - " '个月之后,在座的各位手机都会换掉。因为全面屏时代的到来,我们怀揣的手机都将成为传统手机。”']" - ] - }, - "execution_count": 230, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Lecture3.pdf b/2017-autumn/Lecture3.pdf deleted file mode 100644 index ca6a3a4..0000000 Binary files a/2017-autumn/Lecture3.pdf and /dev/null differ diff --git a/2017-autumn/Lecture6.pdf b/2017-autumn/Lecture6.pdf deleted file mode 100644 index 65393ac..0000000 Binary files a/2017-autumn/Lecture6.pdf and /dev/null differ diff --git a/2017-autumn/Lecuter-18-AutoSummarizaiton.pdf b/2017-autumn/Lecuter-18-AutoSummarizaiton.pdf deleted file mode 100644 index 371f730..0000000 Binary files a/2017-autumn/Lecuter-18-AutoSummarizaiton.pdf and /dev/null differ diff --git a/2017-autumn/Syntax-Parsing-For-Dialogue.ipynb b/2017-autumn/Syntax-Parsing-For-Dialogue.ipynb deleted file mode 100644 index edcb8a6..0000000 --- a/2017-autumn/Syntax-Parsing-For-Dialogue.ipynb +++ /dev/null @@ -1,852 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Task Oriented Chatbot" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "+ Background\n", - "+ Pipeline\n", - "+ Question Parsing\n", - "+ Question Parsing and Generating\n", - "+ Information Retrieval \n", - "+ Mul-round QA" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "## 1. pattern :> customer's input\n", - "## 2. response :> host's output" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "metadata": {}, - "outputs": [], - "source": [ - "human = \"\"\"\n", - "human = 自己 寻找 活动\n", - "自己 = 我 | 俺 | 我们 \n", - "寻找 = 看看 | 找找 | 想找点\n", - "活动 = 乐子 | 玩的\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 164, - "metadata": {}, - "outputs": [], - "source": [ - "number_response = \"\"\"\n", - "number_response = 你能做什么 几号\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 165, - "metadata": {}, - "outputs": [], - "source": [ - "host = \"\"\"\n", - "host = 寒暄 报数 询问 业务相关 结尾 \n", - "报数 = 我是 数字 号 ,\n", - "数字 = 单个数字 | 数字 单个数字 \n", - "单个数字 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 \n", - "寒暄 = 称谓 打招呼 | 打招呼\n", - "称谓 = 人称 ,\n", - "人称 = 先生 | 女士 | 小朋友\n", - "打招呼 = 你好 | 您好 \n", - "询问 = 请问你要 | 您需要\n", - "业务相关 = 玩玩 具体业务\n", - "玩玩 = 耍一耍 | 玩一玩\n", - "具体业务 = 喝酒 | 打牌 | 打猎 | 赌博\n", - "结尾 = 吗?\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'我是2号'" - ] - }, - "execution_count": 146, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "'我是 2 号'" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'先生你好'" - ] - }, - "execution_count": 148, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "'先生 你好'" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "metadata": {}, - "outputs": [], - "source": [ - "human_pattern = {}\n", - "host_pattern = {}\n", - "\n", - "def generate_grammer(grammer_define, grammer_pattern):\n", - " for line in grammer_define.split('\\n'):\n", - " if not line: continue\n", - " key, rules = line.split('=')\n", - " key = key.strip()\n", - " rules = rules.split('|')\n", - " grammer_pattern[key] = rules\n", - " grammer_pattern[key] = [r.split() for r in rules]\n", - " return grammer_pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'host': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['人称', ',']],\n", - " '人称': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要'], ['您需要']],\n", - " '业务相关': [['玩玩', '具体业务']],\n", - " '玩玩': [['耍一耍'], ['玩一玩']],\n", - " '具体业务': [['喝酒'], ['打牌'], ['打猎'], ['赌博']],\n", - " '结尾': [['吗?']]}" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate_grammer(host, host_pattern)" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'human': [['自己', '寻找', '活动']],\n", - " '自己': [['我'], ['俺'], ['我们']],\n", - " '寻找': [['看看'], ['找找'], ['想找点']],\n", - " '活动': [['乐子'], ['玩的']]}" - ] - }, - "execution_count": 154, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate_grammer(human, human_pattern)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Data Driven\n", - "## Logic Programming" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sentence': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['人称', ',']],\n", - " '人称': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要'], ['您需要']],\n", - " '业务相关': [['具体业务', '业务']],\n", - " '具体业务': [['喝酒'], ['打牌'], ['打猎'], ['赌博']],\n", - " '结尾': [['吗?']]}" - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "host_pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sentence': [['自己', '寻找', '活动']],\n", - " '自己': [['我'], ['俺'], ['我们']],\n", - " '寻找': [['看看'], ['找找'], ['想找点']],\n", - " '活动': [['乐子'], ['玩的']]}" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "human_pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [], - "source": [ - "def generate(p, target):\n", - " if target not in p: return target\n", - " \n", - " sub_target = random.choice(p[target])\n", - " return ' '.join(generate(p, r) for r in sub_target)" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'俺 想找点 乐子'" - ] - }, - "execution_count": 178, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate(human_pattern, 'human')" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'女士 , 你好 我是 4 号 , 请问你要 耍一耍 赌博 吗?'" - ] - }, - "execution_count": 180, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate(host_pattern, 'host')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## response pattern" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_sentence = ''\n", - "output_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Tokenize" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. How to get the root? " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "host_response = \"\"\"\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "metadata": {}, - "outputs": [], - "source": [ - "QA = ('human', 'host')\n", - "QA = ('host', 'host_respon')" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "metadata": {}, - "outputs": [], - "source": [ - "def find_pattern_name(sentence): \n", - " \"\"\"get the fit pattern name given a stence\"\"\"\n", - " pass" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [ - { - "ename": "AssertionError", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mfind_pattern_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'先生,您好我是8号,请问你要耍一耍打牌吗?'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'host'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mfind_pattern_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'俺想找点乐子'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'human'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mfind_pattern_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'我是9号,'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'报数'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAssertionError\u001b[0m: " - ] - } - ], - "source": [ - "assert find_pattern_name('先生,您好我是8号,请问你要耍一耍打牌吗?') == 'host'\n", - "assert find_pattern_name('俺想找点乐子') == 'human'\n", - "assert find_pattern_name('我是9号,') == '报数'" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'你好我是1号,请问你要耍一耍打牌吗?'" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate(host_pattern, 'host')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "'human' ==》 host" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "metadata": {}, - "outputs": [], - "source": [ - "cact = ''.join" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'host': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['人称', ',']],\n", - " '人称': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要'], ['您需要']],\n", - " '业务相关': [['玩玩', '具体业务']],\n", - " '玩玩': [['耍一耍'], ['玩一玩']],\n", - " '具体业务': [['喝酒'], ['打牌'], ['打猎'], ['赌博']],\n", - " '结尾': [['吗?']]}" - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "host_pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 224, - "metadata": {}, - "outputs": [], - "source": [ - "## pattern mapper reverse\n", - "\n", - "token_stmt_mapper = {}\n", - "human_stmt_mapper = {}\n", - "\n", - "def get_stmt_mapper(pattern):\n", - " token_stmt_mapper = {}\n", - " for k, v in pattern.items():\n", - " for candidate in v:\n", - " token_stmt_mapper[cact(candidate).strip()] = k\n", - " return token_stmt_mapper\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 227, - "metadata": {}, - "outputs": [], - "source": [ - "human_stmt_mapper = get_stmt_mapper(human_pattern)\n", - "host_stmt_mapper = get_stmt_mapper(host_pattern)" - ] - }, - { - "cell_type": "code", - "execution_count": 228, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'寒暄报数询问业务相关结尾': 'host',\n", - " '我是数字号,': '报数',\n", - " '1': '数字',\n", - " '2': '数字',\n", - " '3': '数字',\n", - " '4': '数字',\n", - " '5': '数字',\n", - " '6': '数字',\n", - " '7': '数字',\n", - " '8': '数字',\n", - " '9': '数字',\n", - " '称谓打招呼': '寒暄',\n", - " '打招呼': '寒暄',\n", - " '人称,': '称谓',\n", - " '先生': '人称',\n", - " '女士': '人称',\n", - " '小朋友': '人称',\n", - " '你好': '打招呼',\n", - " '您好': '打招呼',\n", - " '请问你要': '询问',\n", - " '您需要': '询问',\n", - " '玩玩具体业务': '业务相关',\n", - " '耍一耍': '玩玩',\n", - " '玩一玩': '玩玩',\n", - " '喝酒': '具体业务',\n", - " '打牌': '具体业务',\n", - " '打猎': '具体业务',\n", - " '赌博': '具体业务',\n", - " '吗?': '结尾'}" - ] - }, - "execution_count": 228, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "host_stmt_mapper" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'寒暄报数询问业务相关结尾': 'host',\n", - " '我是数字号,': '报数',\n", - " '1': '数字',\n", - " '2': '数字',\n", - " '3': '数字',\n", - " '4': '数字',\n", - " '5': '数字',\n", - " '6': '数字',\n", - " '7': '数字',\n", - " '8': '数字',\n", - " '9': '数字',\n", - " '称谓打招呼': '寒暄',\n", - " '打招呼': '寒暄',\n", - " '人称,': '称谓',\n", - " '先生': '人称',\n", - " '女士': '人称',\n", - " '小朋友': '人称',\n", - " '你好': '打招呼',\n", - " '您好': '打招呼',\n", - " '请问你要': '询问',\n", - " '您需要': '询问',\n", - " '玩玩具体业务': '业务相关',\n", - " '耍一耍': '玩玩',\n", - " '玩一玩': '玩玩',\n", - " '喝酒': '具体业务',\n", - " '打牌': '具体业务',\n", - " '打猎': '具体业务',\n", - " '赌博': '具体业务',\n", - " '吗?': '结尾'}" - ] - }, - "execution_count": 175, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "token_stmt_mapper" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'host': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['人称', ',']],\n", - " '人称': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要'], ['您需要']],\n", - " '业务相关': [['玩玩', '具体业务']],\n", - " '玩玩': [['耍一耍'], ['玩一玩']],\n", - " '具体业务': [['喝酒'], ['打牌'], ['打猎'], ['赌博']],\n", - " '结尾': [['吗?']]}" - ] - }, - "execution_count": 237, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "host_pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'host': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['人称', ',']],\n", - " '人称': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要'], ['您需要']],\n", - " '业务相关': [['玩玩', '具体业务']],\n", - " '玩玩': [['耍一耍'], ['玩一玩']],\n", - " '具体业务': [['喝酒'], ['打牌'], ['打猎'], ['赌博']],\n", - " '结尾': [['吗?']]}" - ] - }, - "execution_count": 240, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "token_stmt_mapper" - ] - }, - { - "cell_type": "code", - "execution_count": 238, - "metadata": {}, - "outputs": [], - "source": [ - "def get_parent(token):\n", - " if token in token_stmt_mapper: return get_parent(token_stmt_mapper[token])\n", - " else:\n", - " return token\n", - " \n", - "def parse_tokens(tokens):\n", - " find_parents_tokens = [get_parent(t) for t in tokens]\n", - " return find_parents_tokens\n", - "\n", - "cact = ''.join\n", - "\n", - "def find_longest_match(tokens_with_stmts):\n", - " fit_indices = [i for i in range(len(tokens_with_stmts)+1) if cact(tokens_with_stmts[:i]) in token_stmt_mapper]\n", - " if fit_indices: return max(fit_indices)\n", - " else: return 1\n", - "\n", - "\n", - "def merge_tokens_one_epoch(tokens_with_stmts):\n", - " if len(tokens_with_stmts) == 0: return []\n", - "\n", - " index = find_longest_match(tokens_with_stmts)\n", - " return [cact(tokens_with_stmts[:index])] + merge_tokens_one_epoch(tokens_with_stmts[index:])\n", - "\n", - "def merge_tokens(tokens_with_stmts):\n", - " merged_one_epoch = merge_tokens_one_epoch(tokens_with_stmts)\n", - " merged_one_epoch = parse_tokens(merged_one_epoch)\n", - " \n", - " if len(merged_one_epoch) == 1: return merged_one_epoch[0]\n", - " elif merged_one_epoch != tokens_with_stmts:\n", - " return merge_tokens(merged_one_epoch)\n", - " else:\n", - " raise TypeError('these tokens cannot parsed as a statement', merged_one_epoch)" - ] - }, - { - "cell_type": "code", - "execution_count": 242, - "metadata": {}, - "outputs": [], - "source": [ - "t = ['你好', '我是' ,'8' ,'号' ',', '请问你要', '玩一玩', '赌博', '吗?']" - ] - }, - { - "cell_type": "code", - "execution_count": 243, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 243, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "find_longest_match(t)" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "metadata": {}, - "outputs": [], - "source": [ - "import jieba" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "metadata": {}, - "outputs": [], - "source": [ - "def cut(string): return list(jieba.cut(string))" - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'我 想找点 乐子'" - ] - }, - "execution_count": 234, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate(human_pattern, 'human')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Recap" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. 对话机器人" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. 信息检索式的\n", - "#### 1. 信息如何获取, Dependancy Parsing, NER, ... Web, \n", - "#### 2. 短文本匹配\n", - "#### 3. 根据找到的问题回答\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. 基于模式识别的\n", - "#### 1. Syntax Tree\n", - "#### 2. 自动机的理论去解析\n", - "#### 3. DSF, Bottom-Top(Deducation)\n", - "#### 4. response_mapper = {'pattern-1': 'pattern-2', 'pattern-3': 'pattern-4'}\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. 意图识别" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Classification\n", - "### 2. Sklearning(Bayes, DTree), (CNN, RNN, GRU)\n", - "\n", - "\n", - "+ '飞猪上买的机票怎么退' ==> '机票'('飞猪')\n", - "+ '我想办信用卡' ==> '银行' \n", - "+ '附近有什么吃的' ==> '餐饮'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可以用到的信息: \n", - "+ \"身份信息, 登录历史\" \n", - "\n", - "### Intention" - ] - } - ], - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/Tensorflow-Keras.ipynb b/2017-autumn/Tensorflow-Keras.ipynb deleted file mode 100644 index 855a1b5..0000000 --- a/2017-autumn/Tensorflow-Keras.ipynb +++ /dev/null @@ -1,475 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tensorflow Graph " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## https://developers.google.com/machine-learning/crash-course/" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "a" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Tensorflow Eager Execution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import __future__" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "TensorFlow version: 1.8.0\n", - "Eager execution: True\n" - ] - } - ], - "source": [ - "import os\n", - "import matplotlib.pyplot as plt\n", - "\n", - "import tensorflow as tf\n", - "import tensorflow.contrib.eager as tfe\n", - "\n", - "tf.enable_eager_execution()\n", - "\n", - "print(\"TensorFlow version: {}\".format(tf.VERSION))\n", - "print(\"Eager execution: {}\".format(tf.executing_eagerly()))" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "x = [[1], [2], [3]]\n", - "y = [[2], [3], [4]]" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "m = tf.matmul(y, tf.transpose(x))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "X = [\n", - " [1, 2, 3], \n", - " [4, 5, 6], \n", - " [7, 8, 9], \n", - " [10, 11, 12]\n", - " ]\n", - "# x shape is 4 * 3\n", - "# assuming we need convert X to X' which shape is 4 * 5\n", - "# then we need a weights 3 * 5\n", - "\n", - "weights = [\n", - " [1, 1, 1], \n", - " [2, 2, 2], \n", - " [3, 3, 3]\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "bias = [1, 2, 3]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "new_X = tf.matmul(X, weights) + bias" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_X" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "w = tf.contrib.eager.Variable([1.0])" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "with tf.GradientTape() as tape: \n", - " loss = w * w" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "grad = tape.gradient(loss, [w])" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grad" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "file_src = '../dataset/'" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "example features: tf.Tensor([ 5.80000019 2.5999999 4. 1.20000005], shape=(4,), dtype=float32)\n", - "example label: tf.Tensor(1, shape=(), dtype=int32)\n" - ] - } - ], - "source": [ - "train_dataset_url = '{}iris_training.csv'.format(file_src)\n", - "\n", - "train_dataset = tf.data.TextLineDataset(train_dataset_url)\n", - "train_dataset = train_dataset.skip(1) # skip the first header row\n", - "train_dataset = train_dataset.map(parse_csv) # parse each row\n", - "train_dataset = train_dataset.shuffle(buffer_size=1000) # randomize\n", - "train_dataset = train_dataset.batch(32)\n", - "\n", - "# View a single example entry from a batch\n", - "features, label = iter(train_dataset).next()\n", - "print(\"example features:\", features[0])\n", - "print(\"example label:\", label[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "def parse_csv(line):\n", - " example_defaults = [[0.], [0.], [0.], [0.], [0]] # sets field types\n", - " parsed_line = tf.decode_csv(line, example_defaults)\n", - " # First 4 fields are features, combine into single tensor\n", - " features = tf.reshape(parsed_line[:-1], shape=(4,))\n", - " # Last field is the label\n", - " label = tf.reshape(parsed_line[-1], shape=())\n", - " return features, label" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "model = tf.keras.Sequential([\n", - " tf.keras.layers.Dense(10, activation=\"relu\", input_shape=(4,)), # input shape required\n", - " tf.keras.layers.Dense(10, activation=\"relu\"),\n", - " tf.keras.layers.Dense(3)\n", - "])" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "def loss(model, x, y):\n", - " y_ = model(x)\n", - " return tf.losses.sparse_softmax_cross_entropy(labels=y, logits=y_)\n", - "\n", - "def grad(model, inputs, targets):\n", - " with tf.GradientTape() as tape:\n", - " loss_value = loss(model, inputs, targets)\n", - " return tape.gradient(loss_value, model.variables)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 000: Loss: 1.013, Accuracy: 53.333%\n", - "Epoch 050: Loss: 0.436, Accuracy: 80.000%\n", - "Epoch 100: Loss: 0.298, Accuracy: 95.833%\n", - "Epoch 150: Loss: 0.201, Accuracy: 96.667%\n", - "Epoch 200: Loss: 0.155, Accuracy: 97.500%\n" - ] - } - ], - "source": [ - "# keep results for plotting\n", - "train_loss_results = []\n", - "train_accuracy_results = []\n", - "\n", - "num_epochs = 201\n", - "\n", - "for epoch in range(num_epochs):\n", - " epoch_loss_avg = tfe.metrics.Mean()\n", - " epoch_accuracy = tfe.metrics.Accuracy()\n", - "\n", - " # Training loop - using batches of 32\n", - " for x, y in train_dataset:\n", - " # Optimize the model\n", - " grads = grad(model, x, y)\n", - " optimizer.apply_gradients(zip(grads, model.variables),\n", - " global_step=tf.train.get_or_create_global_step())\n", - "\n", - " # Track progress\n", - " epoch_loss_avg(loss(model, x, y)) # add current batch loss\n", - " # compare predicted label to actual label\n", - " epoch_accuracy(tf.argmax(model(x), axis=1, output_type=tf.int32), y)\n", - "\n", - " # end epoch\n", - " train_loss_results.append(epoch_loss_avg.result())\n", - " train_accuracy_results.append(epoch_accuracy.result())\n", - "\n", - " if epoch % 50 == 0:\n", - " print(\"Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}\".format(epoch,\n", - " epoch_loss_avg.result(),\n", - " epoch_accuracy.result()))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(2, sharex=True, figsize=(12, 8))\n", - "fig.suptitle('Training Metrics')\n", - "\n", - "axes[0].set_ylabel(\"Loss\", fontsize=14)\n", - "axes[0].plot(train_loss_results)\n", - "\n", - "axes[1].set_ylabel(\"Accuracy\", fontsize=14)\n", - "axes[1].set_xlabel(\"Epoch\", fontsize=14)\n", - "axes[1].plot(train_accuracy_results)\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. tensorflow\n", - " : eager\n", - " : graph\n", - " : estimator\n", - " : self defined function\n", - " : serving\n", - " : distributation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 改" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 改" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. 背景、处理什么问题\n", - "## 2. 以前方法缺点, 它怎么牛逼? \n", - "## 3. 理论基础 理论假设\n", - "## 4. 实验如何设计以及如何支持(support ) 作者的假设\n", - "## 5. 他这个东西, 对我有什么帮助, 和我有什么关系\n", - "## 6. 他说的对吗? 有没有什么问题? " - ] - } - ], - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/lecture-1-intro.pdf b/2017-autumn/lecture-1-intro.pdf deleted file mode 100644 index b7d1faa..0000000 Binary files a/2017-autumn/lecture-1-intro.pdf and /dev/null differ diff --git a/2017-autumn/lecture10-12-RNN.pdf b/2017-autumn/lecture10-12-RNN.pdf deleted file mode 100644 index a7f4496..0000000 Binary files a/2017-autumn/lecture10-12-RNN.pdf and /dev/null differ diff --git a/2017-autumn/numpy-pandas-sci-computing/Numpy_Python_Cheat_Sheet.pdf b/2017-autumn/numpy-pandas-sci-computing/Numpy_Python_Cheat_Sheet.pdf deleted file mode 100644 index 40d67a3..0000000 Binary files a/2017-autumn/numpy-pandas-sci-computing/Numpy_Python_Cheat_Sheet.pdf and /dev/null differ diff --git "a/2017-autumn/numpy-pandas-sci-computing/Numpy\344\273\213\347\273\215.ipynb" "b/2017-autumn/numpy-pandas-sci-computing/Numpy\344\273\213\347\273\215.ipynb" deleted file mode 100644 index 549af8c..0000000 --- "a/2017-autumn/numpy-pandas-sci-computing/Numpy\344\273\213\347\273\215.ipynb" +++ /dev/null @@ -1,2085 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Numpy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`Numpy` 提供高效多维数组对象, 是Python科学计算的核心." - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from IPython.display import Image, Video\n", - "np.random.seed(123)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数组创建" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 从列表创建" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "a = np.array([[1,2,3], [4, 5, 6]])\n", - "b = np.array([1, 2, 3])" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2, 3],\n", - " [4, 5, 6]])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2, 3])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a: (2, 3) 6 2\n", - "b: (3,) 3 1\n" - ] - } - ], - "source": [ - "print(\"a:\", a.shape, a.size, type(a), np.rank(a))\n", - "print(\"b:\", b.shape, b.size, type(b), np.rank(b))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 使用`Numpy`函数创建" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0., 0.],\n", - " [ 0., 0.]])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.zeros((2,2)) # Create an array of all zeros" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1., 1.]])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones((1,2)) # Create an array of all ones" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[7, 7],\n", - " [7, 7]])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.full((2,2), 7) # Create a constant array" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1., 0.],\n", - " [ 0., 1.]])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.eye(2) # Create a 2x2 identity matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0.69646919, 0.28613933],\n", - " [ 0.22685145, 0.55131477]])" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.random.random((2,2)) # Create an array filled with random values" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 1, 2],\n", - " [3, 4, 5],\n", - " [6, 7, 8]])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(9).reshape(3,-1)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 0, 0],\n", - " [3, 4, 0],\n", - " [6, 7, 8]])" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.tril(np.arange(9).reshape(3,-1)) # np.triu" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 从文件读取" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# show how to save array dat.\n", - "# a simple example\n", - "5.819602537672219356e-01,5.087776563724527579e-01,2.784142127232769326e-03,5.957311390647657134e-01,8.689860709925093518e-01\n", - "9.264195805336176148e-01,7.800147882622944229e-01,9.676056206751270095e-01,2.205256712547208897e-01,2.061922083494628355e-01\n", - "6.783337181089943435e-01,5.869145106077806595e-01,2.952358654499552815e-01,3.801997771883158794e-01,6.889636599796673533e-01\n", - "4.292230072013289988e-01,4.257627535426546928e-01,7.021841592214385086e-01,8.686417248472499963e-02,3.583006283237899492e-02\n", - "5.263115697205873467e-01,8.799444420949060763e-01,1.194754090830576487e-01,7.479153109619839368e-01,9.440646400270436001e-02\n", - "1.232809121329454527e-01,5.186331522192256793e-01,9.809687646542244455e-01,8.783019711016459841e-02,3.133205853162499555e-01\n", - "7.516376862486182642e-01,8.785274617838342293e-01,8.784804332149217521e-01,8.749962343094666029e-01,4.158675577860713179e-01\n", - "1.320108327988774866e-01,5.535512918624858614e-01,7.234839929208859433e-01,8.580655831714277815e-01,2.624920180979781748e-01\n", - " 1002 1011 125050 test.dat\n" - ] - } - ], - "source": [ - "!head test.dat\n", - "!wc test.dat" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "a = np.genfromtxt(\"test.dat\", delimiter=\",\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([[ 0.58196025, 0.50877766, 0.00278414, 0.59573114, 0.86898607],\n", - " [ 0.92641958, 0.78001479, 0.96760562, 0.22052567, 0.20619221],\n", - " [ 0.67833372, 0.58691451, 0.29523587, 0.38019978, 0.68896366],\n", - " [ 0.42922301, 0.42576275, 0.70218416, 0.08686417, 0.03583006],\n", - " [ 0.52631157, 0.87994444, 0.11947541, 0.74791531, 0.09440646],\n", - " [ 0.12328091, 0.51863315, 0.98096876, 0.0878302 , 0.31332059],\n", - " [ 0.75163769, 0.87852746, 0.87848043, 0.87499623, 0.41586756],\n", - " [ 0.13201083, 0.55355129, 0.72348399, 0.85806558, 0.26249202],\n", - " [ 0.6851118 , 0.09952834, 0.14369892, 0.94161568, 0.25347245],\n", - " [ 0.30776681, 0.38581678, 0.20300198, 0.88743555, 0.44905365]]),\n", - " (1000, 5))" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a[:10], a.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# 保存数组到可读文件\n", - "np.savetxt(\"test.dat\", np.random.random((1000, 5)), delimiter=\",\", header=\"show how to save array dat.\\n a simple example\")\n", - "\n", - "# 保存二进制文件\n", - "np.savetxt(\"test.npy\", np.random.random((1000, 5)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": {}, - "outputs": [], - "source": [ - "# 读取大文件\n", - "def generate_text_file(length=1e6, ncols=20):\n", - " data = np.random.random((int(length), int(ncols)))\n", - " np.savetxt('large_text_file.csv', data, delimiter=',')\n", - "\n", - "def iter_loadtxt(filename, delimiter=',', skiprows=0, dtype=float):\n", - " def iter_func():\n", - " with open(filename, 'r') as infile:\n", - " for _ in range(skiprows):\n", - " next(infile)\n", - " for line in infile:\n", - " line = line.rstrip().split(delimiter)\n", - " for item in line:\n", - " yield dtype(item)\n", - " iter_loadtxt.rowlength = len(line)\n", - "\n", - " data = np.fromiter(iter_func(), dtype=dtype)\n", - " data = data.reshape((-1, iter_loadtxt.rowlength))\n", - " return data" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [], - "source": [ - "# generate_text_file() # 477M" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 25.8 s, sys: 1.4 s, total: 27.2 s\n", - "Wall time: 27.2 s\n" - ] - } - ], - "source": [ - "%time data = np.genfromtxt('large_text_file.csv', delimiter=\",\")" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 11.5 s, sys: 364 ms, total: 11.9 s\n", - "Wall time: 11.9 s\n" - ] - } - ], - "source": [ - "%time data = iter_loadtxt('large_text_file.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 5.52 s, sys: 473 ms, total: 6 s\n", - "Wall time: 5.76 s\n" - ] - } - ], - "source": [ - "%time data = pd.read_csv('large_text_file.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数组索引" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Numpy index](https://docs.scipy.org/doc/numpy/user/basics.indexing.html)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 1, 2],\n", - " [ 3, 4, 5],\n", - " [ 6, 7, 8],\n", - " [ 9, 10, 11]])" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = np.arange(12).reshape(4, -1)\n", - "a" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 直接索引" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 5 8\n" - ] - } - ], - "source": [ - "print(a[0, 0], a[1, 2], a[2, 2])" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "a[0, 2] = 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 切片索引" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([0, 3, 6, 9]), array([3, 4, 5]), array([[3, 4, 5]]))" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a[:, 0], a[1, :], a[[1], :]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "a[:, 0] = 4" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 4, 1, 3],\n", - " [ 4, 4, 5],\n", - " [ 4, 7, 8],\n", - " [ 4, 10, 11]])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 整数数组索引" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 1, 2],\n", - " [ 3, 4, 5],\n", - " [ 6, 7, 8],\n", - " [ 9, 10, 11]])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = np.arange(12).reshape(4, -1)\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 3, 4, 5],\n", - " [ 9, 10, 11]])" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a[[1, 3], :] " - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "a[[1, 3], :] = 5" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 1, 2],\n", - " [5, 5, 5],\n", - " [6, 7, 8],\n", - " [5, 5, 5]])" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 条件索引" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.64881796, -0.77467908, 0.35521797, 0.91105154, 0.928105 ,\n", - " -0.29407944, -0.26682051, 0.09194861, -0.0057042 , -0.63097308])" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = np.random.random(10)*2 + -1 # random with(-1, 1)\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0.35521797, 0.91105154, 0.928105 ])" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a[a>0.3]" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([False, False, True, True, True, False, False, False, False, False], dtype=bool),\n", - " array([-0.64881796, -0.77467908, 0.35521797, 0.91105154, 0.928105 ,\n", - " -0.29407944, -0.26682051, 0.09194861, -0.0057042 , -0.63097308]))" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a>0.3, a" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([2, 3, 4]),)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.where(a>0.3)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([3, 4]),)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.where((a > 0.3) & (np.sin(a) > 0.6 ))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0.91105154, 0.928105 ])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a[np.where((a > 0.3) & (np.sin(a) > 0.6 ))]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数据类型" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[numpy datatypes](http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html)." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "int64 float64 int64\n" - ] - } - ], - "source": [ - "x = np.array([1, 2]) # Let numpy choose the datatype\n", - "y = np.array([1.0, 2.0]) # Let numpy choose the datatype\n", - "z = np.array([1, 2], dtype=np.int64) # Force a particular datatype\n", - "\n", - "print(x.dtype, y.dtype, z.dtype)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1.3 2.3] float64\n" - ] - } - ], - "source": [ - "x1 = x + 0.3\n", - "print(x1, x1.dtype)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([3, 2])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z[0] = 3.5\n", - "z" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数组操作" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Numpy functions](https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 数学操作" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0.90837483 0.04621222 0.149207 ]\n", - " [ 0.09195376 0.1260362 0.47466339]\n", - " [ 0.10981445 0.14371574 0.30696156]] \n", - "\n", - " [[ 0.54390228 0.7349922 0.77652429]\n", - " [ 0.3960191 0.06627944 0.26578009]\n", - " [ 0.12472825 0.75619674 0.82805723]]\n" - ] - } - ], - "source": [ - "x = np.random.random((3,3))\n", - "y = np.random.random((3,3))\n", - "\n", - "print(x,'\\n\\n', y)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([[ 1.45227711, 0.78120442, 0.92573129],\n", - " [ 0.48797286, 0.19231564, 0.74044348],\n", - " [ 0.23454271, 0.89991248, 1.13501879]]),\n", - " array([[ 0.49406714, 0.03396562, 0.11586286],\n", - " [ 0.03641545, 0.00835361, 0.12615608],\n", - " [ 0.01369696, 0.10867737, 0.25418174]]),\n", - " array([[ 1.67010666, 0.06287444, 0.19214724],\n", - " [ 0.23219528, 1.9015881 , 1.78592528],\n", - " [ 0.88042965, 0.19005072, 0.3707009 ]]),\n", - " array([[ 0.36447254, -0.68877998, -0.62731729],\n", - " [-0.30406533, 0.05975675, 0.20888329],\n", - " [-0.0149138 , -0.61248101, -0.52109567]]))" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x+y, x*y, x/y, x-y" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([[ 0.78850525, 0.04619578, 0.14865399],\n", - " [ 0.09182423, 0.12570278, 0.45703907],\n", - " [ 0.10959387, 0.14322153, 0.30216362]]),\n", - " array([[ 0.73749731, 0.85731686, 0.88120616],\n", - " [ 0.62930048, 0.25744794, 0.51553864],\n", - " [ 0.35316887, 0.86959574, 0.9099765 ]]))" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sin(x), np.sqrt(y)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([[ 0.5309784 , 0.78354118, 0.84120934],\n", - " [ 0.15913054, 0.43487781, 0.49795069],\n", - " [ 0.15492929, 0.3223615 , 0.37765211]]),\n", - " array([[ 0.5309784 , 0.78354118, 0.84120934],\n", - " [ 0.15913054, 0.43487781, 0.49795069],\n", - " [ 0.15492929, 0.3223615 , 0.37765211]]))" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x@y, x.dot(y) # 矩阵乘法, x.dot(y) in Py2" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([[ 0.90837483, 0.09195376, 0.10981445],\n", - " [ 0.04621222, 0.1260362 , 0.14371574],\n", - " [ 0.149207 , 0.47466339, 0.30696156]]),\n", - " array([[ 0.90837483, 0.04621222, 0.149207 ],\n", - " [ 0.09195376, 0.1260362 , 0.47466339],\n", - " [ 0.10981445, 0.14371574, 0.30696156]]))" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x.T, x.T.T # 转置" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0.90080705, 0.87439356, 0.29625619],\n", - " [ 0.49912016, 0.5490851 , 0.7243249 ],\n", - " [ 0.76964773, 0.43816602, 0.28422741],\n", - " [ 0.27327404, 0.54952455, 0.75035437],\n", - " [ 0.97611748, 0.57371176, 0.20624832]])" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "z = np.random.random((5,3))\n", - "z" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(0.97611748011151767,\n", - " array([ 0.97611748, 0.87439356, 0.75035437]),\n", - " array([ 0.90080705, 0.7243249 , 0.76964773, 0.75035437, 0.97611748]))" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.max(z), np.max(z, axis=0), np.max(z, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(8.6652586320411835,\n", - " array([ 3.41896646, 2.98488098, 2.26141119]),\n", - " array([ 2.0714568 , 1.77253016, 1.49204116, 1.57315296, 1.75607757]))" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(z), np.sum(z, axis=0), np.sum(z, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 102, - "metadata": { - "image/png": { - "width": 300 - } - }, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename='reductions.png', width=300) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Broadcasting(广播)" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABNYAAAOCCAIAAAA0r8iHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9sIFQsuNity2XQAACAASURBVHja7N15XI3p/z/w66ztuyRElCVrGVJiKiVJRNbsYzCDGTsRY5dkDTP2jxj7mn0rKVKphLShBaW0K+1n+f1xP77n0W8k4XRfqdfzj3kcp5vznutcnXO/7vtaOFKplAAAAAAAAADUPS6aAAAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAAEEEBAAAAAAAAERQAAAAAAAAAERQAAAAAAAAQQQEAAAAAAAAQQQEAAAAAAAARFAAAAAAAABBBAQAAAAAAABBBAQAAAAAAABEUAAAAAAAAABEUAAAAAAAA6gU+muCrvHjx4vHjx3RrePTokbGxsba2NsUanj59qqur27x582p/qqSk5OLiIvvjnTt3cnNz5V5DWlraxIkT9fT00C0BAAAAAH4UHKlUilaopYCAABcXl+LiYsrvGYf+u8bj8cRi8ed+qq+v/+7dO9kfe/fu/ejRo7ooY8qUKYcPH0bPBAAAAAD4UeAuaG1dvXp15MiRDg4Ox48fFwgEVGqws7MLDQ2dNm2aj48Ph8OhUsPIkSNv3LgxdOjQo0eP8vn8z4Xkqn+8f/++RCKRYw2TJk06e/YsIaRDhw7omQAAAAAAiKANzZkzZyZMmODq6vrvv//Syp89e/aMioqaO3fujh07aLVD//797927N378eF9fXx6PV8u/JRQK5VjD8OHD/fz8Fi9efPToUfRM9t29ezcrK4tiARKJJDAw0M7Ojm47BAQE2NjYfPG3YNCgQRoaGug2AFAXMjIygoOD6Q6MiouLU1ZWNjQ0pFhDcnJyeXm5iYnJN/8LXbt27dy5M3oUACJoPeLr6ztt2rRJkyYdPHiQy6WzgFPnzp3j4uKWLl26ceNGWu3AjKf9/fff//nnH1r3YB0cHO7cubNy5co1a9YggrJv2bJlXl5edGvgcrkSieTgwYPUW6M2NTx//hwRlGWVlZXXr18vLS2lWENBQUFCQoKFhQXFGkpLSyMjI/v160exhpKSEhUVlTFjxqBb1oX4+Hh7e/uq016oqHliDkvnsny+SCT6nn9h3bp1iKAAbMJc0C/4+++///zzz1mzZu3atYtW7jIyMkpOTl6zZs3KlStptQOTgRcuXLhlyxZaNfTt2zckJMTLy8vd3Z0Q0qxZs3nz5i1duhS9lAVSqXTu3Lm7d+/euXPntGnTqNRQWFjYpk2bioqKU6dODR48mEoNFRUVrVq1Kiws3Ldv38SJE794vIKCAq3PjcaptLR0xIgRN27coFuGQCCorKz80U/K5VIDj8crKytDz5S76OhoBwcHfX3969evN2nShEoNM2bMOHHihK2t7blz5xQUFKjUsHr16q1bt3bq1OnmzZtaWlrf01c/N7cIAOrkCwJNUINNmzYtXbrU3d2d4p2fli1bpqenb968edGiRbRqaNOmTWpqKnPvkVYNPXv2fPz4sY+Pz5w5c9AzWSaRSKZPn+7r63vo0KFffvmFSg05OTlt2rQRiUSXLl1ycnKiUsPHjx9btGhRWlp67NixcePG0Xo7KioqpFIpEzCEQiEibtU3aMiQIY8ePbp586a1tTWVGgIDA4cNG6ahoeHv79++fXsqNcTFxVlaWvL5/Nu3b1taWlKpITIy0sHBobS0VFlZGT1T7sLCwgYNGtSuXbubN2/SWh5/1KhRFy5cGDJkyJkzZ+Q73ab25s6d+/fff/fs2fPWrVu0xpuIRCKxWMwMkeNwOMixALUlhc9YsWIFIWTt2rUUa2jatCmHw9m9ezfFGpo1a0YI8fb2plWAWCzu3Lkzh8PZv39/1ef19PQ2btyIjlrXKisrx44dKxAITp8+TauGd+/eKSoqKioq+vv706ohJydHSUmJz+dfvHiRVg3v379v0qSJsrJyUFBQaGgoISQ+Ph5dlJGfn29hYaGurn7//n1aNfj5+QkEgubNm798+ZJWDeHh4UKhUF1dPTw8nFYN9+7dU1BQaNu27fz58zU0NNA55SswMFBVVbVfv34fPnygVYODgwOHw3Fzc6usrKRVw5QpU3g8no2NzcePH2nV8Ouvv3I4nGnTponFYmtr68mTJ6N/AtQSImj15s2bRwjZtm0brQIqKiq0tLQ4HM7Bgwdp1SASibS1tTkczt9//02xHdq1a8flco8ePfqfHyGCsqCsrGzo0KEKCgqXL1+mVUNycrKioqKKigrFaJGWlqaoqKigoHDz5k2KNWhqaqqpqYWFhUmlUkTQqrKyskxNTXV0dCIiImjVcOTIEYFAYGho+Pr1a1o1+Pv7C4VCHR2dJ0+e0Krh6tWrQqGwY8eOGRkZ27dvRwSVr+vXrysqKjo4OBQXF9OqoU+fPrLcRauGESNGcLlcJyen0tJSWjWMGjWKEDJv3jzmj4igAIig30UsFk+fPp3L5e7bt49WDSUlJerq6lwu99ixY9Rr8PX1pVVDaWlp69ateTzemTNnPv0pImhdKy4uHjBggLKy8p07d2jVEBcXp6CgoK6u/ujRI1o1vHjxQkFBgbn3SKuGpKQkdXV1TU3Nx48fM88ggsqkp6ebmJg0a9YsJiaGVg0+Pj4CgYDJXbRqYO7BNmvWLCEhgVYNp06dEggE3bt3z8nJkUqliKDydf78eaFQ6OLiUlZWRquG7t27MyNgJRIJrRqYe7AjR45kZiVQ4ejoSAhZvny57BlEUABE0G9XWVk5btw4Ho/377//0qrhw4cPKioqPB7v3LlztGrIz89naqg2+7GjqKioefPmAoHgc/ffEEHruh/269dPXV39wYMHtGqIjIwUCoVaWloUb+k8fvyY+rDG+Ph4VVXVJk2aPH/+XPYkIigjNTXVyMjIwMDgxYsXtGpYv349n8+X5S4qmA3DWrVqlZycTKuGgwcP8vn83r17FxQUMM8ggsr3LebxeHTHvhobG/8nd7GPuQc7efJkkUhEq4a+ffsSQv5zBoIICoAI+o3Ky8uHDRsmFArPnz9Pq4asrCwlJSWhUHj16lVaNWRkZDA1XLlyhVYNubm5TZs2FQqFt27d+twxiKB12v69evWiO6zxwYMHQqFQV1c3NjaWVg3BwcFCoVBbW5tiBo6OjlZRUWnWrFliYmLV5xFBpVJpYmKigYGBsbFxamoqrRoWL178n9zFvt27dwsEgnbt2qWlpdGqYdu2bZ9OzEMElZe9e/dyuVy6Y19btmxJCPH09KTYDsw92NmzZ9O6ByuRSMzMzDgczs6dO//zI0RQAETQb1FSUjJw4EAlJaXr16/TqiE9PZ2Zb0Zx3GNSUpKCggLddV/ev3+vo6OjpKR07969Gg5DBK0jmZmZXbt21dPTozis8datW0KhUF9fn+KyLlevXhUIBHp6ehRjXmhoqJKSUrW3thBBY2Ji9PT0OnXq9O7dO1o1zJgxg/qCKJ6ennw+v0uXLllZWbRqWLNmDY/H+3RiHiKoXGzdupXu2FeRSKSrq8vhcHx8fCi2A3MPdsmSJbQKqKys7NixI4fDOXTo0Kc/RQQFQAT9aoWFhT///LOqqmpgYCDd7KesrBwcHEyrhmfPnikoKKiqqlIce/nmzRtNTU1VVdWHDx/WfCQiaF14+/Zt+/bt6Q5rvHDhAjOkkOKtrRMnTggEAgMDA4rDGgMDAxUUFIyMjN6+fVttOm3METQiIkJbW7tHjx7Z2dm0ahg7diyXyx00aBDFBVHc3d35fH7Pnj3z8vJo1bBo0SIul1vtxDxE0O+3du1aumNfy8vLNTU16S6OKJVKW7RoQXeTgtLSUkNDQx6Pd/LkyWoPQAQFQAT9Onl5eebm5pqamqGhobRqiI2NFQqFsrUuqQgNDRUKhZqampGRkbRqePXqlZqamoaGRlRU1BcPRgSti+sghoaGRkZGFLPfsWPHBAKBkZERxSGFe/fupV7D9evXZcuKfu4XttFG0Pv376urq/fp04fi2FcnJyculztixAiKC6LMnDmTx+P169evqKiIVg2//fYbh8OZNGlStRPzEEG/05IlSz6dc8imoqIiVVXVGnIXC0QiUZMmTehuUlBYWMgsTuHn5/e5YxBBARBBv8L79++7deumq6sbHR1Nq4ZHjx4x2Y9iDcy4R11dXYpjL2NjY1VUVHR0dJ49e1ab4xFB5Ss+Pr558+YmJibp6em0atizZ49AIDAxMcnMzKRVg5eXF5/P79y58/v372nVcP78eYFA0K1btxpu8TXaCHrnzh1lZWU7OzuKY1/79evH4XAmTpxIcUGU8ePHc7lcBweHkpISWjW4ubkRQmbOnPm5AaKIoN9MIpHMnj272jmHrMnJyVFWVq45d9U12T1YipsU5OTkNG3aVEFB4fbt2zUchggKgAhaW2/fvu3QoUPz5s3j4uJo1XDv3j2BQPCftS5Zdu7cOWY7dYpjL6OiopSVlfX09Gq/nQAiqBw9efJEV1fXzMyM4rDGLVu28Pl8U1NTisuKenh48Pn8Hj16UBzWyCxt2rNnz/z8/BoOa5wR9PLlywoKCs7OzhTHvpqZmdWcu1gwdOhQLpc7fPjw8vJyWjU4OzsTQhYtWlTDMYig30YkEk2ZMoXL5VY755Adss2Qa1gUsK7J7sFS3KAuPT1dS0urNpOkEEEBEEFrJSkpqU2bNq1bt3716hWtGq5fv85s40Yx+x06dEggELRp04bi2MuQkBBFRUUDA4OkpKTa/y1EUHkJCwvT0tKysLCoOfPUqTVr1vD5fHNzc4pDK2fNmsXj8aysrAoLC2nVsH//fj6fX5saGmEEZfacHD16NMWxr+3bt/9i7qprtra2HA5n/PjxFO/B2tjYEEJWr15d82GIoN+goqJi9OjRfD7/1KlTtGqQbYZMcXGKnJwcJSUlPp9/4cIFiieK6urqtdyYGhEUABH0y+Lj41u0aNG+ffs3b97QquHMmTPMeicpKSm0ati2bZtAIOjQoQPFJSXv3LmjoKDQtm3br30vEEHl4t69e2pqajY2NhSnkzHbWtCd0jZhwgQej2dvb19cXEyrhh07dvB4vP79+9emhsYWQf/3v/9xudwpU6ZQzF0GBga1yV11qlevXoSQ3377jeLmHEwNmzdv/uKRiKBfq6ysbMiQIQoKCp/bEJsFjx8/VlBQqGXuqiOye7A3b96kVcPz589VVVW1tbWfPn1am+MRQQEQQb+AGXPYtWtXivPNDh8+LBAI2rZtW+1al+xYtWoVn8+veb5ZXbt8+fI3Z2BE0O9348YNJSUlukt6Mvce7e3tKU5pc3Fx4XK5Q4YMKSsro1WDp6cns61FLWtoVBF09+7dHA6H7maATZs2rWXuqjudOnUihCxYsIBWAWKxuHPnzhwO559//qnN8YigX6W4uNje3l5ZWZnixmz3799nNkOuZe6qC4mJicw92KCgIFo1hIeHKysrN2vWrPaTgxBBARBBaxIWFqapqdmzZ8/c3FxaNezcuZPP53fs2JFiBp43bx717dRPnz4tEAi6du36bdvZIYJ+pwsXLgiFQldXV4rTySZPnszj8ZydnSlmv/79+3M4nLFjx1ZWVtKqYcWKFVwu19XVtfZDTBtPBPXy8iKEuLu70ypAtiBKLXNXHTE0NCSErFy5kmI7GBkZcbncI0eO1PKvIILW3ocPH6ysrNTV1SluisYsxP1VuUvuHj9+LBQK1dXVw8PDadUQGBioqKjYqlWrrxqkhggK8FX4pDG5cuXKmDFjFBUV//zzz+DgYCo13Lp16+DBgwoKCosWLWJOItm3f//+27dva2pq/vHHH4GBgVRqePr06fr167t3737nzh0tLS0C7Dp+/PiUKVPGjh3r6+vL4/Go1DB69Ojz58+7uroym3BSqcHc3DwiIuLXX3/dv38/l8ulUsOCBQt8fHzGjh179OhRWu9FvbVy5cp169atW7duxYoVVAr4+PGjvr5+SUmJr6/vpEmTaLWDvr5+Zmamt7f34sWLqRRQXFxsYmLy7t2706dPjxw5Ej1TvnJzcx0dHVNSUu7evfvTTz9RqeHMmTMTJkzQ19cPCgpirnew7/79+/b29swm7d26daNSw7Vr11xdXVu1anXv3j1mM1IAqBONKnDj04RRH05zuVyuiYnJhw8fvvndxF3Qb8bELbrTyZycnDgczoQJEyhO7evcuTMhZM6cORSXNv399985HM7UqVO/9r1oDHdB58+fT3czQGZTCh6Pd/bsWVo1iEQiHR0duvdg8/Ly9PT0hELh1atXv+ov4i5obWRmZnbp0qVZs2YUN0Xbv3+/QCAwNjamuxkys0AjxXuwzJpnXbp0+YbBWbgLCoC7oJ/VokULBweHVatWUayhQ4cOP//884EDB+jWMGPGDHd3d4o19OzZs1u3burq6rgiwLIdO3bMnz9/wYIFW7dupVWDra1tUFDQ9OnT9+7dy+FwqNTArAK9bNkyT09PWu0wceLE48ePz549e+fOnbTaoX6SSCQzZ848ePDg/v37p0+fTqWG9PR0Y2NjiURy6dKlwYMHU6mhtLRUX1+/qKiI4j3Y9+/fd+7cubi4+MaNG/3790fnlK+3b9/a29uXlZUFBwe3a9eOSg1btmxZtmxZx44d7969q6urS6WGU6dOTZo0SV9f/969e23atKFSw8GDB2fOnGlqanr79m0MzgKoa40rgnI4HHV19datW9MtQ1lZmXoN1NuB1qDHRi4zM3P+/PmWlpb9+vXz8/OjUoOHh0d8fLypqemgQYMuXbpEpYZp06bl5uZaW1ubm5vTaof9+/ffuHFj8eLF3t7e6JlVicXiKVOmnDp16ujRo+PHj6dSw4sXL7p27crlcinmrg8fPrRo0aKsrIzi2NfXr1+bmpqKRKKAgIA+ffqgc8pXQkKCtbV1Xl7e1q1bY2NjY2Nj2a/Bz8/v+PHjSkpKCxYsCAkJodIODx8+3LFjB4fDWbJkydOnT58+ffpt/462tvbPP/98+fJliUTyDTVs27atT58+165dU1NTQ+cEQAQFALnJy8sjhISGhg4fPpzu1YcnT55QrIG55RgUFBQUFESxhjlz5iB//odIJLKzswsODp4yZYqKigqVCwTZ2dmzZ8+urKxcvHhxYWEhlRrKysqmTJlSXl4+ffp0Pp9PpYbCwsI//viDx+MFBQX16NEDnVPupk2blpWVRQiZO3cuxQ9kiURSVFQ0depU6g3yxx9/fM9fNzc3Dw8PHzt2bGlp6VefDfP5PXr0uHXrlpKSEnomACIoAMjZkSNHrK2tKRZgaGi4ZcsWiiuaXL9+fdasWadOnbKwsKBVQ2FhYbdu3SwtLdEh/+P48ePMWnG+vr6+vr50i9m8eTP1Bjlw4ADFiRuKioqhoaHMrGmQO2NjY7FYfOrUKYo1dOzYcfDgwRTnZRBCTExMevXqdfTo0e/8d4RCISGEmUr6tX+3e/fuPXr0QP4EQAQFgDrRtGlT6uPAdXR0KNbATHbS09OjWENBQQG6YrU0NDQIIc+ePaM4UdzR0fHNmzdxcXEU22Hy5MlBQUHMBom0ahg7duybN2+QP+uUgoIC9Q9kVVVVujVwOBxFRUV51dCqVatvqwG9EQARFAAAGi8DAwNNTU1ary4QCDgcDt2TckVFReZkmnlAKx2hKwIAQF3AkjAAAAAAAACACAoAAAAAAACIoAAAAAAAAACIoAAAAAAAAIAI2iBIJJIXL17k5ORQrEEkEsXHx3/48IFuOyQmJubm5qJLAAAAAAAAIqj8FRQUjBs3TlNTs0OHDrq6uoaGhocPH2a5hrS0NCcnJ3V19U6dOmlpaXXs2PH69ess15Cbmzt69GgNDY2OHTs2adKkbdu2x48fR/cAAAAAAABEULnJy8szMzM7efJkUVER88zr16+nTp26ePFi1mp48eKFmZnZjRs3SktLCSFSqTQxMdHZ2XnXrl2s1fD+/XszM7OzZ89+/PiReSYlJWXChAl//fUXOgkAAAAAACCCysfu3btTU1MJIc2bN/f29v7999+Z53fs2ME8z4INGzYwA4A7deq0Y8eO0aNHM0F01apVsmBc13x8fN6+fUsIMTAw2Lx586+//so87+3t/e7dO/STxqCsrCw2Npa5DkLR27dvw8LCwsLCysrKqBSQl5f37NmzvLw8dAkAoEUsFicmJubn51MvIzw8PCws7NWrV1QKKCkpiY2NTUtLQ5cAQARtOEpLS2V3Gnfu3Ll48eI9e/Y4ODgQQkQi0ZYtW1ioITU19cSJE4QQDodz7NixuXPnnjhxolOnToSQ/Pz8ffv2sVBDUVHRnj17mMd79uxZtGjRwYMHra2tCSEVFRXbtm1DV2nYnjx5YmFhoaam1qVLF3V1dXNz8ydPnlCp5N27d+bm5paWlpaWlqxdA5J9Gmzbtq1ly5Y6Ojrdu3fX0dFp1qzZxo0bqWdyqCo9PT0lJYVuDVlZWa9evZJKpRRrSEtLe/36NfpDg5SVleXq6spMitHW1jY2Nj579iytYjw8PCwsLCwtLVesWMHyS1+4cOGnn35SUVHp0qWLgYGBmZkZISQzMxM9BAAR9IcXEhLC3H7kcDhDhw5lnnRzc2MeXLp0iYUarl27JhKJCCHNmzdnPmF5PN6oUaPYrCEoKKigoIAQwufznZycmCfHjh3LZg1Ay40bNywsLMLDw5l+KBKJIiIiLC0t79y5w3IlFRUVI0eOpHKGIZFIRo8evXDhwvT0dNmT79+/9/DwsLe3Z1oGKJJIJGvXrtXX12/ZsmXbtm2bNGmyYMGCiooKlsvYtWuXgYGBnp5eu3bttLS0pk2bVlxczGYBYrF4xYoVenp6BgYGhoaGurq67u7u6J8NSVpampmZ2cWLF2VdKykpafTo0evXr2e/mLNnz3p7e1Nph82bN48YMeLx48eyZ0pKSgghdnZ2zIgtAEAE/YHJPsg0NTUFAgHzuGnTpsyDzMxMiURS1zXITnllr0sI0dHR+c9P2WkHXV1dDofzn3rYqQFoWbFiRXl5OSGkX79+O3fu7NevHyGkrKzMw8ODzTJev349atSo0NBQKo2wd+/eq1evEkL4fL6Li8vOnTtdXV35fD4h5OHDh1u3bkU/oWvYsGGrVq2SXZ7Izc3dvn27tbU1m+lrxowZc+bMkQ0I/PDhw6FDh3r16iWbP88CJyenDRs2ZGVlMX/Mycnx9va2s7Nj4asK2LFt2zZm8ouhoeHWrVsnT57MPO/p6Zmdnc1aGRKJ5PDhw7/88guVRnj+/PnSpUuZx717996yZctvv/2mpqZGCCkoKJgxYwb6CQAiaAOJoFXjX5MmTZgHIpFI9k3PcgTV1tZmHrAzD7PmdigtLWXukULDc+fOHeYys6am5sWLF//888/z58+rqqoSQiIjI/39/Vmo4ePHj4sWLerQocPly5dptYPspYcPH+7n58e0g7OzM/PkrVu30FUoCgwMvHLlCiFEKBQuW7Zs7dq16urqhJCwsLBTp06xU0NCQsLBgweZx3/++aeXl5eenh4hJD4+fu/evezUcOPGjdu3bxNClJSUVqxYsWrVKhUVFUJIcHDwhQsX0E8agPz8/AMHDjCPDx48uGDBAl9f3969ezNfxD4+Pqz9xpmZmU2dOpXlm/wyV69eZa6qNGvWLCQkZOHChXv37v3zzz8JIVwuNzAwkP0REACACFrn0UtXV/fTfMhyBJXdBS0vL2dhi8760A5AN3pZWVkxvU5XV9fOzo550s/Pj4Uanj9/vnXrVuZOrGwIOsu6devm6upqaWk5depU2ZO2trbMA6zIRZenpyfzYObMmZ6enn/99ZfsDsmmTZvYmZO5efNm5oVGjhy5c+dOd3f3jRs3Mj/avn07OyfEsnaYM2fOunXrVq9evXDhQuYZLy8v9JMGICAggLmprqKiIvscZn9SzKZNm549e0YIadGiRd++fdlvB11d3bFjx1pbW8+ePZvH4zFPMlGcw+GUl5djuTgARNAfm2zQaVVVuBt57gAAIABJREFURzRxuXXehrKXqFoMyzXIvR2+/6SwsrLyzZs36KJUroDIHrM55cbQ0PDcuXP79++n0g7e3t7nz59/+PCho6Oj7EnmjhMhxNTUFF2FluLiYtndeNl9admM/efPnycnJ7NQhuzs38XF5T81vHv3LiIioq4LyM3NffDgwefaISoqChcKG4BqLwdTmRTD5/OnTJkSExPz008/sd8Ov/7668mTJ+/du1d1DaT79+8zpyt6enrNmjVDbwFABP2B6evrMw+qTrGoOvi2efPmrNVQ9W4ns0gSIURJSUlLS6sxtENVCxcuzMvLo77uZaONoLIx2Oysg9+sWbOLFy8mJSWNGDGi/rRMeHi4LILKzviBYhet2ktl40TYOS8vLS2VfT7LalBUVGQmpxF2x8tQbAegEkFlH8j5+fnsLNA9derUlJSUw4cPs3D6UUvZ2dnHjx9nIuiQIUPQVQDqOT6a4IvnvjVEL4FAUPVroK5rqDaCspP9am4HFRUVDQ0Ndt4RqVQ6a9asffv28Xg8ZlcYYD+CysZgs3MX1NDQ0NDQsF41S2hoqKOjY2VlJSHExsZmwoQJ6Cr1KoKqqakJBALmDWJhmHTVX4T/ZANm62YWaqi2HaomBAwXb6gRtOqkmHfv3hkZGdV1Gczm5PVHVlZW//79md81XV3dTZs2oasA1HO4C/oFsoCXn58vW1lRFr309fWrHaFaRzXIYmfVxy1atGCzHXJycmRjaGXtwE4NhBCJRPLLL7/s27dv5syZsuu+ULefEdUNsZaNwWZhEHg9FBISMnDgwMLCQuZD4NChQ+zXwLwFYrEYXVQWvTgcTtWPBdmabSzc/ftcBJVlAzbvggqFQk1NTeYxn8+XXR/EXdAGoD5MDqpvMjMzbWxsYmNjmZOTrVu3yn73a08uk4MwMgsAEVRu7OzsmO9yiUTy77//Mk+ePn2aeTBy5EgWanBxcWFm27969erhw4eEEJFIdPHiRean7FyMHDhwILMIanl5uWyFyTNnzrDZDiKRyM3N7d9//120aNHff/+NzsmOmsdgt2zZsrE1SERExKBBg5jL7QYGBsHBwW3btmW5hry8vNmzZ/P5/A8fPqCLfu6cm80LJZ+7FslmDXXRDt95Xi6RSLAwKZsfyIT1STHU5ebm2tvbx8fHE0KYnfN+/vln9svYs2dPaGgo1qcAQASVG1VVVdkGU0uWLFm+fLmbm1tAQADzYTd//nwWajA0NJRNgZs4ceKaNWuGDBmSkJBACNHT06u6Pmfd0dTUlL3QvHnzVqxYMWrUKGbpC0VFxTlz5tR1ARUVFa6urufPn//rr79obYTdONU8BtvAwKBRtcbz588dHR2Z/GlsbBwcHGxsbMxyDVlZWf369YuNjRWJRN9wsb8Bn5RLpVLZbAWpVCpbEpPNGfuf+01hs4aKigrZTqQVFRVMd/22Gr5nmM+zZ882bNiAG/VsfiDr6OgoKCg0ntYoLCx0dHSMjY0lhKioqPzvf//75n/qe7r65s2bZ82axeVyMTkIABFUnhYuXNi9e3dCSE5Ojqenp+weoLu7O2u3gNauXcvMhUtOTl69evXNmzcJITwez8vLS0lJiZ0a3N3dO3fuzHzbbdiw4dy5c8zzy5cvZ7a/qzulpaXOzs7Xr1/fuHHj6tWr0SfZJDttrXqhvXFG0KSkpAEDBjDBpmfPniEhIezPUH337p2VlVVSUpJs+w2ouvSl7Lw8Pz9fFn5YmClQbQ2E3dkKVWuQRfGq0zdYmzFBCHn06FHfvn2LiooUFRXRReviA5lWN6s/SktLhwwZEhkZSQhp0qTJ3bt3qSTAlStXLlmyZODAgVQ2pwFABG3ImjZtGhYWNmfOHGa4nVAoNDMzO3v27Lp161iroUOHDo8fP540aRLzBaOsrGxpaRkYGDhlyhQ2v/kePXo0a9Ys5rRbQUHhp59+unTpUtUl0evCx48fBw4cGBgY6OPjs3jxYnRIlsnuwPv7+zNzyTIzM4ODg5knae3Syb6MjAw7O7vMzExCiImJyd27d1lYiuw/3rx506dPn7S0tICAAJzufHpSXvVcnOXopaWlJbsaKKuhqKiorKyMtRqqtoPsf59KBA0KCrK1tRUKhR4eHiwsl9CoODk5Mam+sLCQmY8jlUrPnj3L/JSdSTH1gVgsHjFiBPNNpKysHBAQYG5uzn4ZCxYsWLdu3ahRo5gbAwCACCpnioqKPj4+SUlJBQUFHz9+fPz4Mfsf9FpaWkeOHElLS8vLyysqKnr48GG/fv1YrkFZWfnvv/9OSUlh2iEyMnLo0KF1+oofPnyws7MLDQ09cODA7Nmz0RXZZ29vz4wCKC0tHTp06Lp16wYPHswM87O0tGS/E9Kya9eu169fM4/j4+PV1dU5VbCwB11SUpKlpWVWVlZISIiVlRV6poyGhoadnR3z+MiRI8wD2Uz1nj17tmnThoUyXF1d/1ODbNWAVq1a9erVq64L0NPTk3WMo0eP/qcd+vbtW3W0cN25efOmg4ODurp6UlKSbFUkkBddXd1JkyYxj2fPnr1y5UpXV1dm11kVFZXG8y0ZEBBw48YN5nFJSUn37t1ln8MmJiYcDoeZrFR3JBLJjBkzduzYMXXqVNlvGQDUHjZl+epzHeo11IdtuNhph9zcXDs7u7i4uOPHj9e3JeAblR07dgwfPrygoODx48ePHz9mnlRVVW08Y0GlUumJEycoFhAfH29jY1NcXBwREcGMh4eqFi5cyEzRP3bsmJKSkoqKyt69e5kfeXh4sFYDsy3h7du3J06c2LJly3379sl+xOfz2akhJCSEELJ3716JRMLj8WQ1sNMOFy5cGDNmjL6+fmJiImuTRBqb5cuXBwUFJSYmZmRkyEZjcTic1atXN57J4ceOHav2g5p836zOWhKJRJMmTTp16tScOXN27NiBPgmACAoNx/v3721tbZOSki5cuODs7IwGocjGxiYyMnLOnDlhYWF5eXmamprm5uY+Pj4dO3Zkvxgul9u6dWvmMbP+IQuePHlCCJG97qeq7ssnd8+ePbO1ta2srHzy5An7qx/9EBwdHceNG3fixAmJRCILXYSQAQMGDBs2jJ0azMzM5s2bx5yPVj0/7t69+6+//spODS4uLiNGjDh//nxFRcXu3btlzzs7Ow8aNIiFVDB58mQjI6PY2FjWfjcboVatWkVERCxatOjWrVuvX79WVFTs2rXrmjVrWHiLq6Wtrc18Ntbpx2BVlZWV0dHRn34gMwm8ZcuWJSUlddcDKyoqRo0adfXq1eXLl7M5IQsAERSgzqWnp1tbW6elpV27ds3e3h4NQp2RkdG1a9cIIbm5uTo6OhQrUVdXT01NZflFzczM2H9RRmRkpJ2dHYfDiYuLa4Rb4NQSh8M5fvy4lZXVvn374uLixGKxsbHxhAkTli9fzuZcxO3bt5ubm2/dujUmJqaiosLQ0NDV1dXT05O1RUq5XO65c+d8fHwOHToUFxcnlUqNjY2nTJni7u5e1y+9d+/eWbNmde3aNTo6unFuF8wmNTU15lJLQUGBqqoqO/fYP2flypUrV65k8xUFAkFMTMznfnr79u26e+mSkhIXF5fAwEAvLy8sTgGACAoNSmpqqrW1dVZW1t27d/v06YMGqVfo5s/G5uHDhw4ODgoKCvHx8eyvfvTDmTVr1qxZs8rKykQiEbOPMfvc3Nzc3NwqKytLS0vV1dWp1DB37ty5c+eWlpZKJBIVFRUWXnHr1q2LFi2ysLAIDQ1FP2QTZtuyqbCwcNCgQY8ePdq9e/fvv/+OBgFABIWG4+XLl9bW1gUFBSEhIT169ECDQKMVGBjo5OSkpqaWkJCA/T9rrz7sAiIQCKiPRGVtKubq1avXrFljZ2fn7++P7gcNVV5enr29/fPnz319fcePH48GAUAEhYYjNjbWxsamtLQ0MjKyU6dOaBBotG7evOni4tKkSZPExERaN/QAvmjRokVbt24dNmwYs0EIQIMkW5zizJkzrE0vB0AEBWBDdHR0//79xWLx06dPjYyM0CDQaPn5+Y0aNap58+aJiYn14Z4ewKekUunvv/9+4MCBiRMnyvaAAWh43r59a2Njk56ejsUpAOQIawZAvRAeHm5tbS2VSmNjY5E/oTE7ffr0yJEj27Rp8+rVK+RPqJ/EYvHEiRMPHDgwa9Ys5E9owJgNmd+9e3fv3j3kTwBEUGhQgoOD+/fvLxAIXrx4YWBggAaBRuvIkSPjxo3r0KFDQkICtrWA+qmiomLkyJEnT550d3evuvULQAMTFxdnaWmZn58fFhZmYWGBBgFABIWG486dOw4ODioqKq9evcKan9CY7d2795dffjEzM4uNjcW2FlA/lZaWOjs7X7lyZd26dRs3bkSDQEP1+PFjKyur0tLS6Ojo7t27o0EAEEGh4bhy5crgwYN1dHSSk5O1tLTQINBobd++febMmX369ImMjERrQP1UVFTk4OBw9+7d7du3e3h4oEGgoXr48CEzOSg+Pr59+/ZoEABEUGg4wsPDhw8frq+vn5SUhDU/oTHz9PRcsGDBgAEDHjx4gNaA+ik/P9/GxiYsLOzgwYN//vknGgQaqoCAADs7OwUFhZcvX7Zs2RINAlAXGteKuBkZGSEhIUuXLqVYg0gkiouLo1sDISQoKIhuDSUlJdnZ2e3atYuNjcWcN2jM/vrrr/Xr12NbC6jPsrKybG1tX758efLkyZEjR6JBoKG6cuXKiBEjdHR0EhISNDQ00CAAiKBy8PHjx/fv38fExFCsQSqVvnnzZseOHRRrkEgk0dHR0dHRFGsQi8VNmjRJSEjAnDdozJhtFceNG3f8+HG0BtRPaWlpNjY2b9++vXLlysCBA9Eg0FCdPn16/PjxzIZYSkpKaBAARFD5aNeunYWFBd34p6io6Ojo6OfnR7eGefPmeXl5UaxBT0/P1tYW+RMas3Xr1sXHx0+bNu3AgQNoDaifkpOTra2ts7Oz/f39+/XrhwaRL6lUikaoJ+3g7++/f/9+Y2NjDM4CQAQFADk7fPjwvXv36NZw9uzZhIQEWq+emJhICNm/f//Nmzdp1VBeXk4IiY+PnzNnDt2LYgA1KCoqsrS0LCoqevjwYY8ePdAg8vX69eukpCS6k2IkEklUVBTFGmxtbQMDA319fb+zhi5dulhbWxsYGOzduzc1NfWLx5ubm7u6uj5+/PjMmTOEkIqKiqSkpG7dukVHR+PiOAAiKADI2aVLl+gWIBQKAwICAgIC6NZw4cIFuu3A4/FGjhyJ/PkfHz9+JISsWbNGQUGBVg2ZmZkVFRV0g8GLFy8IIX/99RePx6NVQ3JyclFRERNRTExM0DnlLjs7Oycnh/rEnJcvX1KsYcSIEb169fLw8PjOxdh27drF7Ct+9uzZkJCQLx7PbGl74sQJ5oFYLG7ZsuXTp0/RLQEQQQFA/vz8/BwdHSkWwOFwDh8+PGXKFFoFnDt3btSoUYGBgTY2NrRqKCgo0NLSGjZsGDrkp/FPKBTu2bOHYg1isZjL5VIPBkKhcNeuXXRr4PP5z58/NzQ0RM+sCz179mzSpAndYSlKSkpjxozx9fWlWINUKlVVVS0rK5PLv/ZV1ze3bNmyZcsWQoiWltbgwYPRJwEQQQEAoNExNjauqKjIz8/X1NSkVUO3bt2Sk5OZ+7G0ODo63rp1q7S0VFFRkVYNNjY2L1++RP6Eupabm2tmZka3hj/++MPKygrvBQAiKAAAAAA0cE2aNFm1ahXdGtatW4c3AoBNmHINAAAAAHQcOXJk+fLldGtwdnamu0IBQGODu6AAAAAAQMelS5eKi4vp1hASEtKyZUs7Ozu8HQDswF1QAAAAAKAjOjoajQCACAoAAAAAwIasrCw0AkBjg4G4NXnz5k1eXh4hpHv37hwOp9pjSktLMzIyDA0N62gv4xcvXpSUlAgEgs6dO3/umKKiory8vNatW9dRO6SmphYUFBBCTE1NP3dMSUlJZmZm3bUDAAAAAAA0AEgLn5WQkNClSxczMzMzM7Py8vJPD7h37163bt3U1NSMjIw0NDQGDx785s0b+dZw+/ZtExMTMzOzz81POHnypLGxsYaGhqGhoba29sSJE/Pz8+Vbw7Nnzzp37sy0Q7UH3Llzp0uXLkw7aGpqDh06ND09Hf0HAAAAfhQqKipoBABEUMoKCwuHDRtWVFT0uQOOHj1qb28fExMjFosJIR8/frx+/bqZmVlMTIy8akhJSXFzc5NIJJ87YP369ePGjUtKSpJKpYSQ/Pz8Y8eOmZmZZWRkyKuG/Pz84cOHl5SUfO6AAwcOODo6xsbGMnUWFRVduXLFzMwsISEBvQgAAAB+CK1atUIjACCC0vTixQsXF5fExMTPHVBRUbFs2TImfA4cOHDTpk0mJiaEkLy8PHltLRUeHu7s7MwMA65Wdna2p6cn83j8+PEbNmwwMDAghLx+/Xr79u1yqSE+Pn7o0KHJycmfO6C0tHT58uVM+Bw8eLCXl1f79u3/Uxs0JJWVlUlJSSKRiG4ZmZmZT548efLkSbXDE1hQXFycmJhYWFiILgEAtEil0pSUFOpryUokkqdPnz558uT169e0CiCEfPjwAREUABH0R5Wbmzt79uzOnTvfu3evhsOOHj367t07QoihoeGlS5eWLFly8uRJZrLo+fPnX7169T01vHnzZuzYsRYWFnFxcTUc5uPjU1paSgixsrI6duyYh4fH33//zfxo37593/lZnJ2dPWPGjK5duz548KCGww4dOpSdnU0Iadeu3cWLF93d3f/991/mRydPnpT7sGSg6NmzZ3369FFVVTU2NlZTU/v555/leMP/q7x//75nz57MyPCUlBQ2X7qiouKff/4xNjZWVVXt2LGjhoaGvr6+t7d3RUUFeggtOTk5zPWIGgatiMXipKSkurtgUVhYyNRQw0XDuk4L2dnZTA0fP3783DEikSgpKQndtWF0+xEjRmhoaLRt21ZdXb1Lly5+fn60ilm1apWpqamZmZm7uzvLL3379u2lS5devnyZELJt2zZ1dfXp06d/8+JGiKAAiKDU3Llz559//hGJRBwOx9nZ+XOHXbp0iXng5OSkoKBACOnevXvXrl0JIRKJRPbTb3PixInTp08TQgQCwaBBgz53mOz7xsXFhXkwZMgQDQ0N5nzoO3dYvnbt2oEDB8RiMZfLrU07DBkyRCAQEELMzc2ZG6EikejKlSvoUQ2Dv7+/hYVFaGgoc/JaVlZ2//793r17+/v7s1yJSCQaPXo0lcnGUqnUzc1t9uzZSUlJsiczMzPd3d0dHByYMRHAso8fP1pbWzPXI0JCQj49IDU11d7eXk1Njbl00qtXr5ovq31bn3RxcWFqYE6FPw2Hrq6u6urqbdu21dDQ6NKlS7WHfY+CgoI+ffowNURGRn56wKtXr2xsbGTtYGFhER4ejv7zg8rIyOjRo8eFCxeYyy4SiSQ2Nnb48OEbNmxgv5hLly59/+vevXt39erVX/u3kpKSrKysLC0tb9++zSThBw8eODs7R0ZG5ubmIoICIIL+eNq1a3fz5s0ahtTKzoCbNm0qe1L2+O3bt99fg7m5+aNHj2bMmPG5A2SvUrUGXV3d/1T4PTp27Ojv7798+XKK7QD1wbJly5hb7r179/b29u7duzchpLS01MPDg80y3r175+bmFhwcTKURDhw4cOHCBUIIl8sdOHCgt7e3k5MTj8cjhAQFBe3YsQP9hH3Tpk2rYbRITExMjx49AgICmN5bWVkZGRlpY2Nz9OhROdawZMmSGkbNvHnzxtTU9OLFi8zNSbFYHBsb6+LismXLFjleHJkwYUINo2+ioqJ69uwZFBRUVlZGCKmoqAgPD+/Xrx9zrRN+OFu3bmW+Xg0MDDZs2DBmzBjmeU9Pz5ycHNbKkEqlJ0+enDRpErMaxffo0aOHpaXl1/4tAwOD0NDQPXv2hIWFBQYGZmRktGvXzsXFpX379lOmTPnaf01dXb1JkyboXQCIoNTC59WrVxMTEx0cHGo+Fa4h/qWlpX1n+Hzw4EF4eHgNO6AUFRXJ5qHVRQQ1MTG5efNmXFycra0trXaAesLf35+5r6Kurn758uXFixf7+fkxKwdGREQEBgayUENJScmKFSvatWt37tw5Wu0gG3cwfPjwmzdvLl68+Nq1a05OTsyT169fR1dhU0FBwR9//FFziFqzZg2zQriJicmmTZsGDhzIhEAPDw+5DEYtKSlZuXJlzXPvvb29ZbM2PD09R4wYwTy/du1aZqer75STkzN16tRr167VcMyqVauYqRmmpqbe3t7M+uqVlZWyFQ3gB5Kfn79v3z7m8YEDBzw8PE6ePPnTTz8xHXLXrl3slBESEtK7d+9x48bJZUq8pqYm8+tZe4cOHdLS0howYEB0dHRERIStrW2LFi327NnD4XDatWvn7+9fWVn5Vf9gYWHhzJkz0cEAEEHp+OmnnwYPHvy5LUAZlZWVspkGenp6sudl18++8+5f//79raysaj6m6ktUW4MsHH6b3r17Dxw4sOZ2KC4uls04rYt2gHpCNty6b9++zLWGZs2ayXYJYm4M1rVnz55t2LCBWZl56NChVNqhXbt2Tk5OZmZmVa+v29vbMw+wERFrxGLxtm3bjIyMZLPfq/XixYuLFy8SQng83tmzZ5csWXLx4sUWLVowb9bx48e/s4wDBw4YGxvXvP5cdnb2//73P+bx4cOHly1bdubMGWbKRlFR0Z49e76ngMrKSi8vL2NjY19f3xoOi4mJYa6PCASC8+fPM5eQmF/klJSUM2fOoEf9WAICApg76srKykxs43A448ePZ37K9HkWrFu3LiIighDStGlTCwsL9tuhsrLSwcGhd+/ev/32GzMapeoHcllZ2beNxQUARND663PB7PvHonw/Nmv4znb4/lJFIhHO+1lQf4ZbN2/e/NixY0eOHKHSDj4+PteuXXv8+HHV2dGySdfdunVDV2FHdnb2woULmYV/BgwYoKysXO1hly9fZtbJ7NChQ+fOnQkhSkpKspuQ33+mPmPGDGb7K3Nz82bNmlV7zO3bt5kxwNra2jY2NoQQLpfr5ubG/PQ7L9+kp6cvW7aMuQ7o5OTEzMb/1KVLl5gP265du7Zt25YQoqqqOmzYMJYTC8hLtXNwZI/Z/E7kcrljx459/vw5MzWDZb///vvFixfDwsLWrl376Qeyrq7u534rAQAR9EfF5/NlN/qqzruQ3RplNkepU1U/W6utoXnz5nVdg7KyspqaGq128PDwyM3NrWHjHJCX+jDcumnTpidPnkxNTZVd7K8PHj9+fPPmTeaxbEQusENHR2fXrl23bt36XPRi4UxdVVV11apVISEhzDpw1abEGmqQy+UbXV3dvXv3Xrt2jcvl1vPEAnIh+8it9gM5Ly+PmfFb1yZOnPjy5cuTJ0/KXpq6vLy8vXv3Mo8HDx6MrgJQ3/MUmuAb6OvrM5uRMP/9T/Rq2bJlXRegra0tFAqZ6UzV1sCMN2OhHZgV+Vhuh/nz5+/YsYPD4fTv3x+9sa7JTlIpDrdu27YtcwOn/oiMjHRwcGB+B/v27Tt58mR0FXYoKSnt379/woQJSkpK33ym/v3Ra/v27b/88svnwiej5ss3WVlZFRUVQqHwmwPwoUOHxo8fz6zKTqsdgGWyj9xqP5CZXsfCp2W9uhpICMnNzbW3t3/x4gXTGt7e3ugqAPUc7oJ+Y/T6T9wi7N4F/WINrEVQlttBIpHMmDHDx8fnl19+qXpGBXWn2hHX9WHYOUWPHj0aMGAAs9SNnp7eoUOHap44XReYt6ARLiejoaExffr0mvPnF8/Us7OzRSLR95Qxb968mvMn+dLlG6lU+j0JsEmTJlOnTq05f36xHTIyMhr573LD0MjfxJycnP79+z958oQQIhAI/ve//33DvVm5TA56/fo1eiMAImgdkk2kOX/+PDPVJyYmhhkUyuVyZRt1slPD8ePHmY/OGzduMOu1qKury1aLYaeGs2fPMreDoqKiUlJSCCF8Pn/IkCHyfTmxWDx58uSDBw/Onj1btsgH1DXZqG9aw87rm+joaAcHB2Y505YtWwYFBTF74bLpw4cPc+fO5fP5clmOEmfqdaTeXr6pfQ3fWa1UKpXL4sNQyw9kwso0nHolPz/f3t7+2bNnhBAFBYVz587J/dyjNv73v/89fPgwOTkZXRQAEbQOTZ48mbmKnJ6ePnz4cC8vr5EjRzK3I0aMGGFsbMxCDfPmzWNWgYuKinJzc1u/fv20adOYH/32229fvDwvF9OmTdPU1CSEpKSkuLq6bty4ccyYMcwpi5ubm3x3ea6srBwzZsyJEyeWLFnC2rrzQKrc66Y17LxeiY+Pd3BwYNaAMTIyun//focOHViuITc319raOjo6WiQSaWlpoYt+w5m6rq4un8+nWwOHw2FhuErNNejr69fdDfz4+HgvLy/s+8LmB7K2traiomLjaY2PHz8OGjTo6dOnhBBlZeVLly5985Lp3/OLsGvXrmnTpnG53Jr3sQMARNDvpaSktG3bNmYZjFu3bi1btoyZgaCtrf3XX3+xU4OhoaHstU6fPv3XX38x845at249f/58dmpQVVXdvHkzcyZ37do1Dw+PpKQk5vTOw8NDji9UXl4+bNiwixcvrlq1ysvLCz2QyhkPxWHn9URycrK9vT1zKm9qahoSEmJoaMhyDe/fv+/bt298fPzq1avROb/5TJ3lqQrV1tC0adNvngjKWjt883l5dHR0nz598vPzvzhUGH64jl1PlJaWDhkyJDw8nBCipaXl7+//tZuLyoWnp+ecOXOsra379u2L/gmACCoHQqGw9f/59Gt44sSJ9+7ds7CwYK44qqurOzk5RUdHM3u+yYuysjJTQLUn+qtWrbp48aKpqSkThps0aTJx4sTo6GjZV5RcKCgoyNrh059OmzbN39/f3NycOc/Q0NAYOnRodHR0x44d5VVASUmJk5PTrVtA9sTqAAAgAElEQVS3Nm3atHLlSvRMlg0fPpx5EBAQkJmZyaSg+/fvM0+6uro2knbIyMiws7NjLvS0a9cuMDCw6uQ6dqSnp1tZWaWkpNy4cYOdwfYN9dJJQ50tX0/aITQ09Oeff+ZwOEuWLPncUr3wbQYNGsR823748OHKlSuEEKlUev78+f98XDd4YrF4xIgR9+7dI4QoKireuXPH0tKS/TI8PDyWL1/u7OwcGBiIzgmACCofnTp1Sv0/1V7H7dOnT2hoaFFRUVpaWkFBwbVr1+Q79JQQ4uDgwBTA7AH9qWHDhkVHRxcVFWVkZGRnZx89elTuA/PMzMxk7VDtAdbW1uHh4UVFRenp6QUFBZcuXZLjaU1RUdGAAQOCg4N37dq1aNEidEv2DRw4sEuXLoSQ4uLiYcOGeXt7Dx48mFkJuVevXo1n3NGuXbtkvwLJycnNmjVTrIKF26GpqamWlpbp6emBgYFYC/qLZDPVY2JimHF6ZWVl165dY/NMXZYWsrKy7ty5QwiRSCSy7UDZuXwja4eoqKiEhATmF1m2mVBdtMPdu3f79++vqKj48uXLqiu1glzo6elNmDCBeTx79mxPT89Ro0YxdwKVlZX//PPPRtIOAQEBN27cYB6Xl5dbWVkp/v+YsWl1RyqVzpkzZ+PGjW5ubsy1AABABGUVn89v0aIF++thVqWgoEB9F2aBQCD3VRDy8/NtbW0jIiIOHTo0c+ZMdDZatm3bxuwBGx4e7u7uHhUVRQhRUlLy9PRsJC0glUpPnDgh+6NYLC7//9X1XnwvX760tLTMyckJDQ2lcrH/h2NqasrcKJZKpW5ubps2bRo8eDCzXmWLFi3Y2VKialqYMWPGxo0bhw8fzqzbqaamxs5nmoWFhZWVFdNpR48e7e3t7eTkxNzMb9OmzejRo+X7clevXh00aJC2tnZycrKOjg76YV1Yvnw5s+3K27dvly9fLrsF6uHh0Xgy/7Fjx6p+Ppd/QiKR1N2rSySSX3/9dffu3b/99lvVrwYA+IoAhSaA+ik7O9vW1vbFixfHjx8fNWoUGoSiAQMGPHr0aPbs2Y8ePfr48aOysnLPnj13794t32HntcTlcmVjwpkh6CxgYkO1Y9EZdbo/e2xsrI2NTWlpaVRUlImJCTpkLXl5eTk5OWVnZ8fHxy9dupR5ksfjeXp6sjAJU5YW7t69m5KSkpqaWnWG/MqVK5m13FiwefNmZ2fnvLy8mJgYd3d32e/Oxo0bmTXt5OXMmTPjxo0zMDCIj49vVIvisKxNmzZRUVFz5869devW+/fv+Xy+iYnJ2rVrZXe8Waatrc18Ntbpx2BVlZWV0dHRNXwg1+m3Q2Vl5YQJE86dO7dw4cLNmzejQwIggkLDkZGRYW1t/fr164sXLw4ePLje1ikWiw8cOEAIUVZWnjRpUgN+Rzp27BgQECCRSDIyMvT19SnO71JXV//cmPC6wwxHp/L/Gx0d3b9/f7FY/OzZMxZ2nP/htGrVitmZ5tOdQnv27BkdHT179uzg4GBmXZxu3bpt27ZN7quGtGjRgrkNrqqqWm1a+OOPP+7cuZOdnc2khfXr13/zup2f07p16/LyckLIp9nP0tIyOjp61qxZISEhBQUFioqKpqamO3bs6N27txwL8PX1/fXXX9u1a/f8+XMWVhuujfDw8OjoaEKIra0t+ytX1ylNTc0jR44QQjIzMzU1NekG/pUrV7K8TINAIIiJiaHyP1teXj5ixIibN2+uWrUKi1MAIIJCg/LmzZuff/45MzPzxo0b9XzOW2VlJTOaTk9Pr2FHUAaXy21UKy7Wh3Noe3t7Pp8fHx+Plq8Wsx9gDeHQz8+PEPLu3bumTZvWUTQKCAio4adaWlrHjx8nhGRkZGhra9fRCrHMxtQ1BPWrV68SQtLT0/X09OTeDrt3754zZ46pqWlUVBTdaSlVXbx4cdOmTYSQw4cPN7AIKkN9Dk6jUlxc7OzsfP/+/c2bN7O29QAAIigAG169emVtbZ2Xl8csOIwGgUYrODh40KBBioqK8fHxTZs2pVtMSUnJrFmzaj6md+/e9XbOttxnqn8D+a5V/m3q4kKGl5fXsmXLrKysHjx4gF9baKg+fPgwcODAqKiovXv3yrZhrycePHhw8ODBmo+ZNm0ato0BRFCA6sXHx1tbWxcXFz98+NDMzAwNAo3WnTt3hgwZoqGhkZiYyNqkwRpUVFQwA/9qUFZWhmXDGpsVK1Zs2LBh4MCBslV2ARqenJwcOzu7+Pj4Y8eOjRkzpr6V9+rVqy9+PtvY2CCCAiIoQDWePn1qa2tbUVERFRUlx21F5S4tLe3Vq1ey83LZA2aDMkaXLl2wGwF8sytXrowYMUJXVzcxMfHT6YUA9YFUKp0/f76Pj8+oUaPOnDlTT6p68OCBSCRiHr9584Z5kJCQIPt8VldX79GjB94+qL2MjAwbG5vU1NR6vjgFACIowFd79OjRgAEDpFJp/V9z5dy5c59OAmH2j5H98eLFi7QWJ4Qf3dmzZ93c3OrbsqJqamrMyi41kPumxFBvSSSS6dOnHz58eOrUqYcOHao/hTk7O3/48OE/T27atImZFEoI6d27d1hYGN5BqKXXr19bW1tnZmbeunXLxsamfhY5dOjQL34+y33jegBEUPjh3b9/39HRUSgUPn/+HGuuQGP277//TpkyxcjIKC4urp4sK8rg8XimpqZ4g4AQIhKJJkyYcObMmTlz5uzYsQMNAg3VixcvbGxsCgoKgoODzc3N622d2tra2traeL8AERTgK/j7+w8ZMkRFRSUuLo76miu10alTp8mTJzOPxWIxs0G2oqJi1fkhuNwI32D//v2///57586dnz59SnHbm2oVFRX169ev5mMcHR29vLzwPjZs5eXlI0eOvH79+vLly9etW1ffyhs3blxJSQnzOCoq6vnz54QQKysrY2Nj5kkjIyO8iVAbMTExtra2ZWVlERERnTt3rs+lXr58+Ys7xKxdu1bue0EBIILCj+rq1auurq5aWlr1ZM2V2nBwcHBwcGAel5WVMRFUQ0PD19cXbyh8Mx8fn3nz5vXs2TMiIqIelicWi58+fVrzMfV5CjfIRUlJyZAhQ4KCgjZu3LhkyZJ6WOE///wje7x06VImgk6bNm3KlCl4+6D2IiIi7O3tf4jJQYSQvLy8L34+5+Xl4W2FeoWLJgBawsPDhw0b1rRp06SkpB8lfwLUhY0bN86bN69fv371M38CEEIKCwvt7OyCg4N3795dP/MngFzcv3/fxsaGx+MlJCTU//wJ8INqXHdBMzMzw8LCVq9eTbEGsVickJBAtwZCyIMHD+jWUFJSkp2d3bp164SEhPqz5goA+1auXLlu3bp6vq2FpqZmaWlpzcfweDy8mw1Vbm6unZ1dXFzc4cOHJ0yYgAaBhurWrVsuLi5qamoJCQk6Ojo/RM0TJ04cO3ZszccIBAK8uYAISk1hYWFmZuaTJ08o1iCRSFJSUujOmJJIJBEREZGRkXSjuLa29qtXr+rVmitfi8vl9u7dmxDyo3xRQX2zaNGirVu3Dh8+/MKFC/W8VFwqarQyMzNtbGxSUlLOnDnzA6313apVK+bzWVdXF28i1Iafn9+oUaOaNm2akJCgpqb2o5TN4/FwBRAQQeu19u3bW1hY0F3BT1FR0dHR0c/Pj24N8+bNoxuD9fT0bG1tf+j8SQgRCoVY3x++2bp16+Li4saPH8/MKAaoh968eWNtbf3u3btr167Z29v/QJXPmjVr1qxZ9bxIqVSKPlZP2iEwMPDgwYP1bUMsAERQAGgIjh079mlsNjMzS09Pz8rKqvqMi4uL7I9Hjx5NTk6WVw1+fn6pqam0WiAuLo4Q4uvrK9utnn1lZWWEkPj4+BkzZuzbtw/dEuqnjx8/Wlpa5uXl3bt3z9LSEg0iX2lpaSkpKXQnxUgkkidPntCtobKyMikpiW4NFRUVL1686NixY0xMzI9+cRwAERQA6hcOh3Pu3LnaHMnlcrOzs1VUVJg/btq0KSkpSS41CIXCGzduUJz3KJVKFRQUTp48yeFwKL4XPB5vyJAhyJ//weyo4eXlRfEuxPv37ysqKuieEL969YoQsn79eopnw6mpqYWFhSKRKCwsrHv37uiccvfu3bv3799Tn5gTHx+fkJBAsQaxWJyWlka3HcRisb6+flxcHN3vBQBEUABogKRSqZ+fn6Oj49f+xdjYWDnG4MOHD1PcI+HcuXOjRo0KDAy0sbGhVcP/Y+++A2r8///xP09DSyqpSHoZSSESCaWlyC6r6EXJKHuvyojsEEJatkJ2oiHlJdRLUVKikFWhvffvj+f3d73Px+hF53RO43776+o6V87Do+tc53o8r+fIz8+XkZFhX0sWmJtyERER/g6XqK6uFhQU5PsNcZs2bdzc3Pgbg5CQ0NOnT1VVVXFmNobBgwfLy8vzsTsGIURMTMzS0pK/i4pJSEjo6emFhITwMQYZGZkJEyag/gRACQoAAK2OiopKRUVFXl4eHxdq6tev35s3b4qLi/mYBzMzs5CQkLKyMj4+DTY0NHz9+jXqTwAA4DqsCwoAAAAAAAAoQQEAAAAAAAAlKAAAAAAAAABKUAAAAAAAAEAJCgAAAAAAAK0eZsT9uY8fP7569erbt29du3bt1auXlJTUTw8rKytLSkp6//69urp6r169BAUFuRhDWlpaenp6UVFRjx49VFVVmRUav1NYWJiYmPjt2zcNDY3u3btzd0rxjIyM169f5+Xl0Ty0a9fup4eVlpY+f/7806dP6urqqqqq3M0DAAAAAACgBG2x4uLiHB0dQ0NDmT0iIiIrV650cnL6rgh0d3dft25dZWUl/VFBQeH8+fPGxsacxxAeHu7o6Pjvv/8ye6SkpDZu3Lhs2TL2ZcqrqqocHR337dtXV1dH9/Tq1evSpUsaGhqcxxATE7N+/Xr29crExMTWrFmzfv16MTExZmddXd3evXudnZ2rqqroHkVFxYCAgOHDh+NcAgAAAACA76Aj7v+Rnp5uamrKXn8SQioqKnbu3Pn333+z73R0dFyxYgVTfxJCsrOzR44cGR4ezmEMDx48GDt2LHv9SQgpKChYvXr16tWr2Xfa2Ni4ubkx9SchJDU1VUdHJzk5mcMYXrx4YWpq+t162WVlZVu3bp09ezb7zlWrVq1bt46pPwkhnz9/NjY2/ueff3A6AQAAAAAAStD6LF++PC8vjxCirKzs7u4eHh4+d+5c+tK1a9euX79Ot/Py8g4fPky3V65cee/evVGjRhFCampqXF1dOYxh9uzZtLLt06ePj49PUFDQhAkT6EsHDx589uwZ3X716tWFCxcIISwWa9++faGhoYMGDaKF4p49eziMwcHBoaioiBDSrVu3w4cPh4aG2tjY0JcuXLgQEhJCt79+/erp6Um3169fHxERQR8CV1dXb9++HadTC1NVVZWQkBAYGPjs2TP2xhfee/z48cmTJ0+ePFlQUMD7d8/NzX348OGFCxfu37+flZWFEwMAeK+uri4tLe3q1avR0dH0+5pfSkpKTp06dfLkyaioKN6/e1lZWXx8/OXLl0NCQtLT09kb5QGgKUNH3P+pqKiIiIig25s3b7azsyOEjBgx4sGDBy9fviSEPHjwYOLEiYSQY8eOFRcXE0IGDRrk5ubGYrFUVFR69uxZXl4eFRUVExOjo6PTsBjS0tLS0tLo9qFDh2hFZ2Rk1KlTp8LCQkJIdHS0pqYmIcTNza22tpYQMmXKlJUrVxJCZGRktLW1CSHnz593dXVVUlJqWAz5+fmPHj2i266urjNmzCCEmJiY3L9//+3btzQPtOQ+fPhwWVkZIURPT2/nzp2EEDpktKqqKiQkJCEhoX///jivWgZ/f38HBwd6EhJC2rZt6+3tbWVlxftIkpKSTExMSkpKCCFDhgz51TjtxvD582dnZ+ezZ8+yP/afPn36nj17GvxxA07aAl6+fPnx40cFBQVVVdVOnTr99LCamprU1NSUlBRlZeW+ffuyjyPgXFFRUUpKSkZGhqysrIqKirKycj3VQlJSkoKCQr9+/dq2bcvFGHJycmgeOnXqpKqq2rFjx58eVl1dnZqa+vLly7/++qtv376ioqI4hZqvuLg4S0vL9PR0+qOAgMD69eu3bt3Kl4kY7OzsLl68SAixtLQ0MDDg2ftWVlbu2LHj8OHDubm5zM7BgwcfPHhwyJAhOEkAUII2G+Xl5Xv37s3MzMzKypoyZQqzX0NDg5agzJOf+/fv0w1dXV06/Y+SklKfPn3i4uIIIREREQ0uQdu0aXPo0KHMzMz8/HxDQ0O6U1xcvFevXrRrLhMD00t22LBhdGPQoEGysrI5OTlVVVXR0dGWlpYNi6GqqurgwYOZmZnZ2dnm5uZ0J4vF6tu3Ly1Bf5oHutGtWzdVVdUXL17QPKAEbRm8vLzs7e3Z9xQXF0+fPr2srOy7jtmNLT8/38LCgtafPFZaWjp27FimGwJ7cf7vv//Gx8dLSkriVOGNrKwsZ2fn06dPs7cFTJ06de/evX/99Rf7kaGhoTNnzvzy5Qv9UUREZO/evUuWLOE8hoKCgi1btnh7e7OfjaNGjXJ3d1dTU2M/8t9//7Wysnrz5g1TLTg6Orq4uAgIcNoL6dOnT05OTufOnauurq6/TeTWrVs2NjY5OTn0R1FRUXd39+8+1NBcPH/+XFdXt6KigtlTW1u7Y8eOjx8/njp1isfBuLm50fqT95YsWeLl5fXdztjYWENDw8ePH9PGegBostAR93+kpKQWLly4bds2b29vZurXsrKy27dv020tLS3mi59uyMvLM78uJydHNz5+/NjgGJSVlZcsWbJjx46jR48yNyjv379/8uTJdzEw7/LTGJgIG0BOTm7RokWurq7e3t7i4uJ0Z1FRUVhYGM/yAE1HdXX1jh076PbMmTMjIyOtra3pj66urjU1NTyL5O7du0ZGRkw3AR47cOAArT8lJCQcHR2joqI2btxIPyBpaWnoec4zZWVl48aN8/X1Za8/CSGXLl0yNDTMz89n9ty5c2f06NFM/UkIqaioWLp06ebNmzmMoba21srKyt3d/bvWkJCQED09PfZL35MnT3R1dZn6k/6uq6vrggULOIyhuLh4zJgxp06dYq8/aZuIkZERe8/Ma9eujR8/nqk/CSHl5eUODg606wo0O7t376b1p7a2dmho6K5du+j+s2fPMs9FeSAvL2/t2rXr16/nSxKio6OZ+nPWrFmhoaEeHh7dunWjH3MHBwecJwAoQZu3tWvX0j63MjIyY8aMqaf06tChA9348OEDFwOoqqpavnw5Hd6goqJCu5fk5OTQHrC/ioGTEvRHdXV1q1atKi8vpxXmyJEjeZ8H4JeLFy9mZGQQQpSUlLy8vAwMDI4fP66goEAIefPmTWBgIA9i+PLly8iRI01MTH58CMkzTFPUjBkztm/frq+vv3Xr1mnTptGd383dBY1n//79tL+JmJgYnbWbaQt49+6di4sLc6SrqysdrWBmZnbv3r0VK1bQ/e7u7hyOIvb3979z5w4hREBAYNmyZffu3du5cydtfcvJyVmzZg1z5K5du2ipPGzYsPDw8G3bttH9J06c4PAKuXv37sTERNom4uTkFBkZ6ejoSLvXpqWlMc1GNA/0G8TCwiIyMnLx4sV0v5ubG186FAAnMjIy6DQQhBA/Pz9TU9N169aNGzeOtm64ubnxJgw/P78ePXrs3buXl62QP70g9+zZ89SpU6amposWLWJal548eYJzG6CJQ0fc+uquRYsWHTt2jPm+p3cY5eXldMoiwvbEj7304uLTv8rKyqlTp964cYP+ePToURERke/e4qcxZGZmciuG2traefPm+fn50R/37dsnIyNDCCkoKGDK4MbOA/AR09164MCB9AZXQkJCT0/v8uXLhJCIiIgGd/n+fW/evKEP4UVERDZs2LBlyxbe52Hu3LmjRo3KzMxkpigjhDALIDGfBeDZreeUKVPoczwDA4PPnz/7+voSQh48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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 103, - "metadata": { - "image/png": { - "width": 800 - } - }, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename='numpy_broadcasting.png', width=800) " - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0 0 0]\n", - " [10 10 10]\n", - " [20 20 20]\n", - " [30 30 30]] \n", - "\n", - " [[ 0 1 2]\n", - " [10 11 12]\n", - " [20 21 22]\n", - " [30 31 32]]\n" - ] - } - ], - "source": [ - "a = np.tile(np.arange(0, 40, 10), (3, 1)).T\n", - "b = np.array([0, 1, 2])\n", - "c = np.empty_like(a) \n", - "\n", - "for i in range(a.shape[0]):\n", - " c[i, :] = a[i, :] + b\n", - "\n", - "print(a, \"\\n\\n\", c)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0 0 0]\n", - " [10 10 10]\n", - " [20 20 20]\n", - " [30 30 30]] \n", - "\n", - " [[ 0 1 2]\n", - " [10 11 12]\n", - " [20 21 22]\n", - " [30 31 32]]\n" - ] - } - ], - "source": [ - "b1 = np.tile(b, (a.shape[0], 1))\n", - "c = a + b1\n", - "print(a, \"\\n\\n\", a + b)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 1, 2, 0, 1, 2, 0, 1, 2],\n", - " [0, 1, 2, 0, 1, 2, 0, 1, 2],\n", - " [0, 1, 2, 0, 1, 2, 0, 1, 2],\n", - " [0, 1, 2, 0, 1, 2, 0, 1, 2]])" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.tile(b, (a.shape[0], 3))" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0 0 0]\n", - " [10 10 10]\n", - " [20 20 20]\n", - " [30 30 30]] \n", - "\n", - " [[ 0 1 2]\n", - " [10 11 12]\n", - " [20 21 22]\n", - " [30 31 32]]\n" - ] - } - ], - "source": [ - "c = a+b\n", - "print(a, \"\\n\\n\", c)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0]\n", - " [10]\n", - " [20]\n", - " [30]] \n", - "\n", - " [0 1 2] \n", - "\n", - " [[ 0 1 2]\n", - " [10 11 12]\n", - " [20 21 22]\n", - " [30 31 32]]\n" - ] - } - ], - "source": [ - "a = np.arange(0, 40, 10)\n", - "a = a.reshape(4, 1)\n", - "# a = a[:, np.newaxis] # adds a new axis -> 2D array\n", - "\n", - "b = np.array([0, 1, 2])\n", - "c = a+b\n", - "\n", - "print(a, \"\\n\\n\", b,\"\\n\\n\", c)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 0, 0],\n", - " [ 0, 10, 20],\n", - " [ 0, 20, 40],\n", - " [ 0, 30, 60]])" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a * b # universal function: https://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 数组形状操作" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2, 3],\n", - " [4, 5, 6]])" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = np.array([[1, 2, 3], [4, 5, 6]])\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1 2 3 4 5 6] \n", - "\n", - " [1 2 3 4 5 6]\n" - ] - } - ], - "source": [ - "print(a.ravel(), \"\\n\\n\", a.flatten())" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mDocstring:\u001b[0m\n", - "a.flatten(order='C')\n", - "\n", - "Return a copy of the array collapsed into one dimension.\n", - "\n", - "Parameters\n", - "----------\n", - "order : {'C', 'F', 'A', 'K'}, optional\n", - " 'C' means to flatten in row-major (C-style) order.\n", - " 'F' means to flatten in column-major (Fortran-\n", - " style) order. 'A' means to flatten in column-major\n", - " order if `a` is Fortran *contiguous* in memory,\n", - " row-major order otherwise. 'K' means to flatten\n", - " `a` in the order the elements occur in memory.\n", - " The default is 'C'.\n", - "\n", - "Returns\n", - "-------\n", - "y : ndarray\n", - " A copy of the input array, flattened to one dimension.\n", - "\n", - "See Also\n", - "--------\n", - "ravel : Return a flattened array.\n", - "flat : A 1-D flat iterator over the array.\n", - "\n", - "Examples\n", - "--------\n", - ">>> a = np.array([[1,2], [3,4]])\n", - ">>> a.flatten()\n", - "array([1, 2, 3, 4])\n", - ">>> a.flatten('F')\n", - "array([1, 3, 2, 4])\n", - "\u001b[0;31mType:\u001b[0m builtin_function_or_method\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "a.flatten?" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2, 3, 4, 5, 6])" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a.reshape(-1)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2, 3],\n", - " [4, 5, 6]])" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a.reshape(2, -1)\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2, 3],\n", - " [4, 5, 6]])" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a.reshape(2, 3)\n", - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [], - "source": [ - "a = np.array([[1, 2], [3, 4]])\n", - "b = np.array([[5, 6]])" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2],\n", - " [3, 4],\n", - " [5, 6]])" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.concatenate((a, b), axis=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2, 5],\n", - " [3, 4, 6]])" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.concatenate((a, b.T), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[0;31mSignature:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mSource:\u001b[0m \n", - "\u001b[0;32mdef\u001b[0m \u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"\u001b[0m\n", - "\u001b[0;34m Append values to the end of an array.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Parameters\u001b[0m\n", - "\u001b[0;34m ----------\u001b[0m\n", - "\u001b[0;34m arr : array_like\u001b[0m\n", - "\u001b[0;34m Values are appended to a copy of this array.\u001b[0m\n", - "\u001b[0;34m values : array_like\u001b[0m\n", - "\u001b[0;34m These values are appended to a copy of `arr`. It must be of the\u001b[0m\n", - "\u001b[0;34m correct shape (the same shape as `arr`, excluding `axis`). If\u001b[0m\n", - "\u001b[0;34m `axis` is not specified, `values` can be any shape and will be\u001b[0m\n", - "\u001b[0;34m flattened before use.\u001b[0m\n", - "\u001b[0;34m axis : int, optional\u001b[0m\n", - "\u001b[0;34m The axis along which `values` are appended. If `axis` is not\u001b[0m\n", - "\u001b[0;34m given, both `arr` and `values` are flattened before use.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Returns\u001b[0m\n", - "\u001b[0;34m -------\u001b[0m\n", - "\u001b[0;34m append : ndarray\u001b[0m\n", - "\u001b[0;34m A copy of `arr` with `values` appended to `axis`. Note that\u001b[0m\n", - "\u001b[0;34m `append` does not occur in-place: a new array is allocated and\u001b[0m\n", - "\u001b[0;34m filled. If `axis` is None, `out` is a flattened array.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m See Also\u001b[0m\n", - "\u001b[0;34m --------\u001b[0m\n", - "\u001b[0;34m insert : Insert elements into an array.\u001b[0m\n", - "\u001b[0;34m delete : Delete elements from an array.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m Examples\u001b[0m\n", - "\u001b[0;34m --------\u001b[0m\n", - "\u001b[0;34m >>> np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])\u001b[0m\n", - "\u001b[0;34m array([1, 2, 3, 4, 5, 6, 7, 8, 9])\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m When `axis` is specified, `values` must have the correct shape.\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m >>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)\u001b[0m\n", - "\u001b[0;34m array([[1, 2, 3],\u001b[0m\n", - "\u001b[0;34m [4, 5, 6],\u001b[0m\n", - "\u001b[0;34m [7, 8, 9]])\u001b[0m\n", - "\u001b[0;34m >>> np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0)\u001b[0m\n", - "\u001b[0;34m Traceback (most recent call last):\u001b[0m\n", - "\u001b[0;34m ...\u001b[0m\n", - "\u001b[0;34m ValueError: arrays must have same number of dimensions\u001b[0m\n", - "\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0marr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0masanyarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0marr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mconcatenate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mFile:\u001b[0m ~/root/opt/py3/lib/python3.6/site-packages/numpy/lib/function_base.py\n", - "\u001b[0;31mType:\u001b[0m function\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "np.append??" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 例子" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 分段函数" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 随机行走" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 康威生命游戏\n", - "\n", - "1. 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)\n", - "1. 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。\n", - "1. 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)\n", - "1. 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)\n", - "\n", - "Ref:\n", - "\n", - "康威生命游戏: [中文](https://zh.wikipedia.org/wiki/%E5%BA%B7%E5%A8%81%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F), [英文](https://en.wikipedia.org/wiki/The_Game_of_Life)" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 110, - "metadata": { - "image/png": { - "width": 800 - } - }, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename='glider.png', width=800) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 实现" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [], - "source": [ - "def compute_neighbours(Z):\n", - " shape = len(Z), len(Z[0])\n", - " N = [[0,]*(shape[0]) for i in range(shape[1])]\n", - " for x in range(1,shape[0]-1):\n", - " for y in range(1,shape[1]-1):\n", - " N[x][y] = Z[x-1][y-1]+Z[x][y-1]+Z[x+1][y-1] \\\n", - " + Z[x-1][y] +Z[x+1][y] \\\n", - " + Z[x-1][y+1]+Z[x][y+1]+Z[x+1][y+1]\n", - " return N" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [], - "source": [ - "def iterate(Z):\n", - " N = compute_neighbours(Z)\n", - " shape = len(Z), len(Z[0])\n", - " for x in range(1,shape[0]-1):\n", - " for y in range(1,shape[1]-1):\n", - " if Z[x][y] == 1 and (N[x][y] < 2 or N[x][y] > 3):\n", - " Z[x][y] = 0\n", - " elif Z[x][y] == 0 and N[x][y] == 3:\n", - " Z[x][y] = 1\n", - " return Z" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 0, 0, 0, 0, 0],\n", - " [0, 0, 1, 0, 0, 0],\n", - " [0, 0, 0, 1, 0, 0],\n", - " [0, 1, 1, 1, 0, 0],\n", - " [0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0]])" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Z = [[0, 1, 0, 0],\n", - " [0, 0, 1, 0],\n", - " [1, 1, 1, 0],\n", - " [0, 0, 0, 0]]\n", - "\n", - "Z1 = np.zeros((6, 6), dtype=int)\n", - "Z1[1:-1, 1:-1] = Z\n", - "\n", - "Z = Z1\n", - "Z" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(3, 4, figsize=(6, 8))\n", - "\n", - "axes = axes.flatten()\n", - "\n", - "axes[0].matshow(Z, cmap=\"Greys\")\n", - "axes[0].set_xlabel(\"iteration %s\" % 0)\n", - "\n", - "for i in range(1,12):\n", - " Z = iterate(Z)\n", - " axes[i].matshow(np.array(Z)[1:-1, 1:-1], cmap=\"Greys\")\n", - " axes[i].set_xlabel(\"iteration %s\" % i)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Numpy 实现 1" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [], - "source": [ - "Z = [[0, 1, 0, 0],\n", - " [0, 0, 1, 0],\n", - " [1, 1, 1, 0],\n", - " [0, 0, 0, 0]]\n", - "\n", - "Z1 = np.zeros((6, 6), dtype=int)\n", - "Z1[1:-1, 1:-1] = Z\n", - "\n", - "Z = Z1" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "N = np.zeros(Z.shape, dtype=int)\n", - "N[1:-1,1:-1] += (Z[ :-2, :-2] + Z[ :-2,1:-1] + Z[ :-2,2:] +\n", - " Z[1:-1, :-2] + Z[1:-1,2:] +\n", - " Z[2: , :-2] + Z[2: ,1:-1] + Z[2: ,2:])" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 0, 0, 0, 0, 0],\n", - " [0, 1, 1, 2, 1, 0],\n", - " [0, 3, 5, 3, 2, 0],\n", - " [0, 1, 3, 2, 2, 0],\n", - " [0, 2, 3, 2, 1, 0],\n", - " [0, 0, 0, 0, 0, 0]])" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "N" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [], - "source": [ - "# Flatten arrays\n", - "N_ = N.ravel()\n", - "Z_ = Z.ravel()\n", - "\n", - "# Apply rules\n", - "# 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)\n", - "R1 = np.argwhere( (Z_==1) & (N_ < 2) )\n", - "# 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。\n", - "R2 = np.argwhere( (Z_==1) & (N_ > 3) )\n", - "# 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)\n", - "R3 = np.argwhere( (Z_==1) & ((N_==2) | (N_==3)) )\n", - "# 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)\n", - "R4 = np.argwhere( (Z_==0) & (N_==3) )\n", - "\n", - "# Set new values\n", - "Z_[R1] = 0\n", - "Z_[R2] = 0\n", - "Z_[R3] = Z_[R3]\n", - "Z_[R4] = 1\n", - "\n", - "# Make sure borders stay null\n", - "Z[0,:] = Z[-1,:] = Z[:,0] = Z[:,-1] = 0" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0, 0, 0, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0],\n", - " [0, 1, 0, 1, 0, 0],\n", - " [0, 0, 1, 1, 0, 0],\n", - " [0, 0, 1, 0, 0, 0],\n", - " [0, 0, 0, 0, 0, 0]])" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Z" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Numpy 实现 2" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [], - "source": [ - "Z = [[0, 1, 0, 0],\n", - " [0, 0, 1, 0],\n", - " [1, 1, 1, 0],\n", - " [0, 0, 0, 0]]\n", - "\n", - "Z1 = np.zeros((6, 6), dtype=int)\n", - "Z1[1:-1, 1:-1] = Z\n", - "\n", - "Z = Z1" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [], - "source": [ - "N = np.zeros(Z.shape, dtype=int)\n", - "N[1:-1,1:-1] += (Z[ :-2, :-2] + Z[ :-2,1:-1] + Z[ :-2,2:] +\n", - " Z[1:-1, :-2] + Z[1:-1,2:] +\n", - " Z[2: , :-2] + Z[2: ,1:-1] + Z[2: ,2:])\n", - "\n", - "# 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。\n", - "birth = (N==3)[1:-1,1:-1] & (Z[1:-1,1:-1]==0)\n", - "# 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)\n", - "survive = ((N==2) | (N==3))[1:-1,1:-1] & (Z[1:-1,1:-1]==1)\n", - "Z[...] = 0\n", - "Z[1:-1,1:-1][birth | survive] = 1" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Video(\"game-of-life.mp4\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 参考\n", - "\n", - "1. [Scipy Lecture Notes](http://www.scipy-lectures.org/intro/numpy/)\n", - "1. [From Python to Numpy](http://www.labri.fr/perso/nrougier/from-python-to-numpy)\n", - "1. [CS228 Python Tutorial](https://github.com/kuleshov/cs228-material/blob/master/tutorials/python/cs228-python-tutorial.ipynb)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git "a/2017-autumn/numpy-pandas-sci-computing/Pandas\344\273\213\347\273\215.ipynb" "b/2017-autumn/numpy-pandas-sci-computing/Pandas\344\273\213\347\273\215.ipynb" deleted file mode 100644 index 9c50179..0000000 --- "a/2017-autumn/numpy-pandas-sci-computing/Pandas\344\273\213\347\273\215.ipynb" +++ /dev/null @@ -1,4315 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pandas" - ] - }, - { - "cell_type": "code", - "execution_count": 290, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "metadata": {}, - "outputs": [], - "source": [ - "pd.options.display.max_rows = 10" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dataframe 创建" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 从字典创建" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " category score\n", - "0 悬疑 8.9\n", - "1 动作 8.2\n", - "2 爱情 9.3\n" - ] - } - ], - "source": [ - "temp_dict = {\n", - " 'score': [ 8.9, 8.2, 9.3 ],\n", - " 'category': ['悬疑', '动作', '爱情']\n", - " }\n", - "temp_pd = pd.DataFrame(temp_dict)\n", - "print(temp_pd)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['category', 'score'], dtype='object')" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "temp_pd.columns = [\"目录\", \"评分\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
目录评分
0悬疑8.9
1动作8.2
2爱情9.3
\n", - "
" - ], - "text/plain": [ - " 目录 评分\n", - "0 悬疑 8.9\n", - "1 动作 8.2\n", - "2 爱情 9.3" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "Index does not support mutable operations", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtemp_pd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"电影名\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/root/opt/py3/lib/python3.6/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36m__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m 1722\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1723\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1724\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Index does not support mutable operations\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1725\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1726\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: Index does not support mutable operations" - ] - } - ], - "source": [ - "temp_pd.columns[0] = \"电影名\"" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], - "source": [ - "temp_pd.columns.values[0] = \"电影名\"" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分
0悬疑8.9
1动作8.2
2爱情9.3
\n", - "
" - ], - "text/plain": [ - " 电影名 评分\n", - "0 悬疑 8.9\n", - "1 动作 8.2\n", - "2 爱情 9.3" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(pandas.core.indexes.base.Index, numpy.ndarray)" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(temp_pd.columns), type(temp_pd.columns.values)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pd.core.indexes.base.Index: False\n", - "tuple: False\n", - "list: True\n" - ] - } - ], - "source": [ - "# from collections.abc import MutableSequence\n", - "# print(\"pd.core.indexes.base.Index: \", issubclass(pd.core.indexes.base.Index, MutableSequence))\n", - "# print(\"tuple: \", issubclass(tuple, MutableSequence))\n", - "# print(\"list: \", issubclass(list, MutableSequence))" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 8.9, 8.2, 9.3])" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd[\"评分\"].values" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 8.9, 8.2, 9.3])" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd.评分.values # recommended, support auto complete" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([['悬疑', 8.9],\n", - " ['动作', 8.2],\n", - " ['爱情', 9.3]], dtype=object)" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "temp_pd.values" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 从列表创建" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": {}, - "outputs": [], - "source": [ - "pos_pd = pd.DataFrame(np.random.rand(1000,3), columns=[\"x\", \"y\", \"z\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
xyz
00.3599490.9540260.436269
10.3170750.5219850.221258
20.3727360.7205080.033549
30.2452760.3327780.723315
40.7130390.0496600.532474
\n", - "
" - ], - "text/plain": [ - " x y z\n", - "0 0.359949 0.954026 0.436269\n", - "1 0.317075 0.521985 0.221258\n", - "2 0.372736 0.720508 0.033549\n", - "3 0.245276 0.332778 0.723315\n", - "4 0.713039 0.049660 0.532474" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pos_pd.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 从文件读取" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [], - "source": [ - "movie_pd = pd.read_excel(\"豆瓣电影.xlsx\")" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
0\"ExtremeChampionshipWrestling\"(评价人数不足)NaNhttps://movie.douban.com/subject/1963120/2006-06-13 00:00:00[]
1\"TheXFiles\"SE6.15Monday9.452.0https://movie.douban.com/subject/3158584/1999-02-28 00:00:00['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg...
2\"WWEMondayNightRAW\"Episodedated11Decembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957739/2006-12-11 00:00:00[]
3\"WWEMondayNightRAW\"Episodedated11June200(评价人数不足)NaNhttps://movie.douban.com/subject/2136118/2007-06-11 00:00:00['Kevin Dunn']
4\"WWEMondayNightRAW\"Episodedated13Novembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957743/2006-11-13 00:00:00[]
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足) NaN \n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52.0 \n", - "2 \"WWEMondayNightRAW\"Episodedated11Decembe (评价人数不足) NaN \n", - "3 \"WWEMondayNightRAW\"Episodedated11June200 (评价人数不足) NaN \n", - "4 \"WWEMondayNightRAW\"Episodedated13Novembe (评价人数不足) NaN \n", - "\n", - " 链接 时间 \\\n", - "0 https://movie.douban.com/subject/1963120/ 2006-06-13 00:00:00 \n", - "1 https://movie.douban.com/subject/3158584/ 1999-02-28 00:00:00 \n", - "2 https://movie.douban.com/subject/1957739/ 2006-12-11 00:00:00 \n", - "3 https://movie.douban.com/subject/2136118/ 2007-06-11 00:00:00 \n", - "4 https://movie.douban.com/subject/1957743/ 2006-11-13 00:00:00 \n", - "\n", - " 演员 \n", - "0 [] \n", - "1 ['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg... \n", - "2 [] \n", - "3 ['Kevin Dunn'] \n", - "4 [] " - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
2002B青年的不醉人生6.33969.0https://movie.douban.com/subject/20491427/2012-12-28 00:00:00['黄渤', '中国大陆', '黄渤', '18分钟', '喜剧']
2012PMSHOW8.8137.0https://movie.douban.com/subject/25957143/2011-07-09 00:00:00['玉泽演', '黄灿盛', '张祐荣', 'Jun. K', '尼坤']
2022人三足6.81165.0https://movie.douban.com/subject/1306657/2002-01-17(香港)['车婉婉', '张家辉', '朱茵', '罗兰', '吴浣仪']
2030.036.8139.0https://movie.douban.com/subject/26705642/2016-11-25 00:00:00['Bianca Comparato', '朱奥·米格尔', '巴西', '恺撒·查隆', ...
2043-4X10月7.31749.0https://movie.douban.com/subject/1297290/1990-09-15 00:00:00['石田百合子', '柳忧怜', '北野武', '邓肯', '布施绘里']
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 链接 \\\n", - "200 2B青年的不醉人生 6.3 3969.0 https://movie.douban.com/subject/20491427/ \n", - "201 2PMSHOW 8.8 137.0 https://movie.douban.com/subject/25957143/ \n", - "202 2人三足 6.8 1165.0 https://movie.douban.com/subject/1306657/ \n", - "203 0.03 6.8 139.0 https://movie.douban.com/subject/26705642/ \n", - "204 3-4X10月 7.3 1749.0 https://movie.douban.com/subject/1297290/ \n", - "\n", - " 时间 演员 \n", - "200 2012-12-28 00:00:00 ['黄渤', '中国大陆', '黄渤', '18分钟', '喜剧'] \n", - "201 2011-07-09 00:00:00 ['玉泽演', '黄灿盛', '张祐荣', 'Jun. K', '尼坤'] \n", - "202 2002-01-17(香港) ['车婉婉', '张家辉', '朱茵', '罗兰', '吴浣仪'] \n", - "203 2016-11-25 00:00:00 ['Bianca Comparato', '朱奥·米格尔', '巴西', '恺撒·查隆', ... \n", - "204 1990-09-15 00:00:00 ['石田百合子', '柳忧怜', '北野武', '邓肯', '布施绘里'] " - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd[200:205]" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
count870818707376243.000000870818707587075
unique4081083NaN418152692240803
top少年时代(评价人数不足)NaNhttps://movie.douban.com/subject/1463371/美国['美国', 'Kevin Dunn', '英语']
freq69330NaN61296281
meanNaNNaN15041.198930NaNNaNNaN
stdNaNNaN44238.241727NaNNaNNaN
minNaNNaN20.000000NaNNaNNaN
25%NaNNaN278.000000NaNNaNNaN
50%NaNNaN1442.000000NaNNaNNaN
75%NaNNaN8151.000000NaNNaNNaN
maxNaNNaN762311.000000NaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "count 87081 87073 76243.000000 \n", - "unique 40810 83 NaN \n", - "top 少年时代 (评价人数不足) NaN \n", - "freq 6 9330 NaN \n", - "mean NaN NaN 15041.198930 \n", - "std NaN NaN 44238.241727 \n", - "min NaN NaN 20.000000 \n", - "25% NaN NaN 278.000000 \n", - "50% NaN NaN 1442.000000 \n", - "75% NaN NaN 8151.000000 \n", - "max NaN NaN 762311.000000 \n", - "\n", - " 链接 时间 \\\n", - "count 87081 87075 \n", - "unique 41815 26922 \n", - "top https://movie.douban.com/subject/1463371/ 美国 \n", - "freq 6 1296 \n", - "mean NaN NaN \n", - "std NaN NaN \n", - "min NaN NaN \n", - "25% NaN NaN \n", - "50% NaN NaN \n", - "75% NaN NaN \n", - "max NaN NaN \n", - "\n", - " 演员 \n", - "count 87075 \n", - "unique 40803 \n", - "top ['美国', 'Kevin Dunn', '英语'] \n", - "freq 281 \n", - "mean NaN \n", - "std NaN \n", - "min NaN \n", - "25% NaN \n", - "50% NaN \n", - "75% NaN \n", - "max NaN " - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.describe(include='all')" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
评价人数
count76243.000000
mean15041.198930
std44238.241727
min20.000000
25%278.000000
50%1442.000000
75%8151.000000
max762311.000000
\n", - "
" - ], - "text/plain": [ - " 评价人数\n", - "count 76243.000000\n", - "mean 15041.198930\n", - "std 44238.241727\n", - "min 20.000000\n", - "25% 278.000000\n", - "50% 1442.000000\n", - "75% 8151.000000\n", - "max 762311.000000" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.describe(include=[np.number])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数据筛选" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 按行" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "电影名 \"ExtremeChampionshipWrestling\"\n", - "评分 (评价人数不足)\n", - "评价人数 NaN\n", - "链接 https://movie.douban.com/subject/1963120/\n", - "时间 2006-06-13 00:00:00\n", - "演员 []\n", - "Name: 0, dtype: object" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.loc[0] " - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
0\"ExtremeChampionshipWrestling\"(评价人数不足)NaNhttps://movie.douban.com/subject/1963120/2006-06-13 00:00:00[]
3\"WWEMondayNightRAW\"Episodedated11June200(评价人数不足)NaNhttps://movie.douban.com/subject/2136118/2007-06-11 00:00:00['Kevin Dunn']
6\"WWEMondayNightRAW\"Episodedated18June200(评价人数不足)NaNhttps://movie.douban.com/subject/2136121/2007-06-18 00:00:00['Kevin Dunn']
9\"WWEMondayNightRAW\"Episodedated27Novembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957741/2006-11-27 00:00:00[]
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足) NaN \n", - "3 \"WWEMondayNightRAW\"Episodedated11June200 (评价人数不足) NaN \n", - "6 \"WWEMondayNightRAW\"Episodedated18June200 (评价人数不足) NaN \n", - "9 \"WWEMondayNightRAW\"Episodedated27Novembe (评价人数不足) NaN \n", - "\n", - " 链接 时间 \\\n", - "0 https://movie.douban.com/subject/1963120/ 2006-06-13 00:00:00 \n", - "3 https://movie.douban.com/subject/2136118/ 2007-06-11 00:00:00 \n", - "6 https://movie.douban.com/subject/2136121/ 2007-06-18 00:00:00 \n", - "9 https://movie.douban.com/subject/1957741/ 2006-11-27 00:00:00 \n", - "\n", - " 演员 \n", - "0 [] \n", - "3 ['Kevin Dunn'] \n", - "6 ['Kevin Dunn'] \n", - "9 [] " - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.loc[0:10:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
1\"TheXFiles\"SE6.15Monday9.452.0https://movie.douban.com/subject/3158584/1999-02-28 00:00:00['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg...
10017岁之风景7.290.0https://movie.douban.com/subject/1760143/2006-04-04 00:00:00['Tasuku Emoto', 'Mansaku Fuwa', 'Ichir Hariu'...
1000NearEqual森山大道8.3599.0https://movie.douban.com/subject/3922263/森山大道['荒木経惟', '西井一夫', '日本', '藤井謙二郎', '84分钟']
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52.0 \n", - "100 17岁之风景 7.2 90.0 \n", - "1000 NearEqual森山大道 8.3 599.0 \n", - "\n", - " 链接 时间 \\\n", - "1 https://movie.douban.com/subject/3158584/ 1999-02-28 00:00:00 \n", - "100 https://movie.douban.com/subject/1760143/ 2006-04-04 00:00:00 \n", - "1000 https://movie.douban.com/subject/3922263/ 森山大道 \n", - "\n", - " 演员 \n", - "1 ['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg... \n", - "100 ['Tasuku Emoto', 'Mansaku Fuwa', 'Ichir Hariu'... \n", - "1000 ['荒木経惟', '西井一夫', '日本', '藤井謙二郎', '84分钟'] " - ] - }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.loc[[1, 100, 1000]]" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
0\"ExtremeChampionshipWrestling\"(评价人数不足)NaNhttps://movie.douban.com/subject/1963120/2006-06-13 00:00:00[]
1\"TheXFiles\"SE6.15Monday9.452.0https://movie.douban.com/subject/3158584/1999-02-28 00:00:00['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg...
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足) NaN \n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52.0 \n", - "\n", - " 链接 时间 \\\n", - "0 https://movie.douban.com/subject/1963120/ 2006-06-13 00:00:00 \n", - "1 https://movie.douban.com/subject/3158584/ 1999-02-28 00:00:00 \n", - "\n", - " 演员 \n", - "0 [] \n", - "1 ['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg... " - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd[0:2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 按列" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['电影名', '评分', '评价人数', '链接', '时间', '演员'], dtype='object')" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分
0\"ExtremeChampionshipWrestling\"(评价人数不足)
1\"TheXFiles\"SE6.15Monday9.4
2\"WWEMondayNightRAW\"Episodedated11Decembe(评价人数不足)
3\"WWEMondayNightRAW\"Episodedated11June200(评价人数不足)
4\"WWEMondayNightRAW\"Episodedated13Novembe(评价人数不足)
\n", - "
" - ], - "text/plain": [ - " 电影名 评分\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足)\n", - "1 \"TheXFiles\"SE6.15Monday 9.4\n", - "2 \"WWEMondayNightRAW\"Episodedated11Decembe (评价人数不足)\n", - "3 \"WWEMondayNightRAW\"Episodedated11June200 (评价人数不足)\n", - "4 \"WWEMondayNightRAW\"Episodedated13Novembe (评价人数不足)" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd[[\"电影名\", \"评分\"]].head()" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 (评价人数不足)\n", - "1 9.4\n", - "2 (评价人数不足)\n", - "3 (评价人数不足)\n", - "4 (评价人数不足)\n", - " ... \n", - "87076 5.9\n", - "87077 5.7\n", - "87078 7.5\n", - "87079 8.2\n", - "87080 5.7\n", - "Name: 评分, Length: 87081, dtype: object" - ] - }, - "execution_count": 159, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.评分" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": {}, - "outputs": [], - "source": [ - "# type(movie_pd.评分), type(movie_pd[\"评分\"]),type(movie_pd[[\"评分\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 同时行列" - ] - }, - { - "cell_type": "code", - "execution_count": 160, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
评分电影名
0(评价人数不足)\"ExtremeChampionshipWrestling\"
19.4\"TheXFiles\"SE6.15Monday
2(评价人数不足)\"WWEMondayNightRAW\"Episodedated11Decembe
3(评价人数不足)\"WWEMondayNightRAW\"Episodedated11June200
4(评价人数不足)\"WWEMondayNightRAW\"Episodedated13Novembe
.........
996(评价人数不足)NakedDiva
9979.2NationalParksAdventure
998(评价人数不足)Nazithon:DecadenceandDestruction
9999.6NBA黄金50周年纪念特辑
10008.3NearEqual森山大道
\n", - "

1001 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " 评分 电影名\n", - "0 (评价人数不足) \"ExtremeChampionshipWrestling\"\n", - "1 9.4 \"TheXFiles\"SE6.15Monday\n", - "2 (评价人数不足) \"WWEMondayNightRAW\"Episodedated11Decembe\n", - "3 (评价人数不足) \"WWEMondayNightRAW\"Episodedated11June200\n", - "4 (评价人数不足) \"WWEMondayNightRAW\"Episodedated13Novembe\n", - "... ... ...\n", - "996 (评价人数不足) NakedDiva\n", - "997 9.2 NationalParksAdventure\n", - "998 (评价人数不足) Nazithon:DecadenceandDestruction\n", - "999 9.6 NBA黄金50周年纪念特辑\n", - "1000 8.3 NearEqual森山大道\n", - "\n", - "[1001 rows x 2 columns]" - ] - }, - "execution_count": 160, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd.loc[0:1000, [\"评分\", \"电影名\"]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 条件筛选" - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
0\"ExtremeChampionshipWrestling\"(评价人数不足)NaNhttps://movie.douban.com/subject/1963120/2006-06-13 00:00:00[]
1\"TheXFiles\"SE6.15Monday9.452.0https://movie.douban.com/subject/3158584/1999-02-28 00:00:00['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg...
2\"WWEMondayNightRAW\"Episodedated11Decembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957739/2006-12-11 00:00:00[]
3\"WWEMondayNightRAW\"Episodedated11June200(评价人数不足)NaNhttps://movie.douban.com/subject/2136118/2007-06-11 00:00:00['Kevin Dunn']
4\"WWEMondayNightRAW\"Episodedated13Novembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957743/2006-11-13 00:00:00[]
.....................
87076龙虎砵兰街5.9537.0https://movie.douban.com/subject/2129702/古天乐['黎姿', '谢天华', '麦家琪', '香港', '鄧衍成']
87077龙虎门5.743968.0https://movie.douban.com/subject/1478926/2006-07-28(中国大陆/香港)['甄子丹', '谢霆锋', '余文乐', '董洁', '李小冉']
87078龙虎风云7.56047.0https://movie.douban.com/subject/1299658/1987-02-13 00:00:00['周润发', '李修贤', '孙越', '吴家丽', '张耀扬']
87079龙裔黑帮之老虎8.2401.0https://movie.douban.com/subject/25887315/2015-03-10 00:00:00['阿南达·爱华灵咸', '金伯莉·安妮', '泰国', 'Pongpat Wachirab...
87080龙骑士5.716961.0https://movie.douban.com/subject/1433678/2006-12-15(美国)['2007-04-06(中国大陆)', '爱德华·斯皮伊尔斯', '杰瑞米·艾恩斯', '...
\n", - "

87081 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足) NaN \n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52.0 \n", - "2 \"WWEMondayNightRAW\"Episodedated11Decembe (评价人数不足) NaN \n", - "3 \"WWEMondayNightRAW\"Episodedated11June200 (评价人数不足) NaN \n", - "4 \"WWEMondayNightRAW\"Episodedated13Novembe (评价人数不足) NaN \n", - "... ... ... ... \n", - "87076 龙虎砵兰街 5.9 537.0 \n", - "87077 龙虎门 5.7 43968.0 \n", - "87078 龙虎风云 7.5 6047.0 \n", - "87079 龙裔黑帮之老虎 8.2 401.0 \n", - "87080 龙骑士 5.7 16961.0 \n", - "\n", - " 链接 时间 \\\n", - "0 https://movie.douban.com/subject/1963120/ 2006-06-13 00:00:00 \n", - "1 https://movie.douban.com/subject/3158584/ 1999-02-28 00:00:00 \n", - "2 https://movie.douban.com/subject/1957739/ 2006-12-11 00:00:00 \n", - "3 https://movie.douban.com/subject/2136118/ 2007-06-11 00:00:00 \n", - "4 https://movie.douban.com/subject/1957743/ 2006-11-13 00:00:00 \n", - "... ... ... \n", - "87076 https://movie.douban.com/subject/2129702/ 古天乐 \n", - "87077 https://movie.douban.com/subject/1478926/ 2006-07-28(中国大陆/香港) \n", - "87078 https://movie.douban.com/subject/1299658/ 1987-02-13 00:00:00 \n", - "87079 https://movie.douban.com/subject/25887315/ 2015-03-10 00:00:00 \n", - "87080 https://movie.douban.com/subject/1433678/ 2006-12-15(美国) \n", - "\n", - " 演员 \n", - "0 [] \n", - "1 ['大卫·杜楚尼', '吉莲·安德森', '美国', 'Kim Manners', 'Arg... \n", - "2 [] \n", - "3 ['Kevin Dunn'] \n", - "4 [] \n", - "... ... \n", - "87076 ['黎姿', '谢天华', '麦家琪', '香港', '鄧衍成'] \n", - "87077 ['甄子丹', '谢霆锋', '余文乐', '董洁', '李小冉'] \n", - "87078 ['周润发', '李修贤', '孙越', '吴家丽', '张耀扬'] \n", - "87079 ['阿南达·爱华灵咸', '金伯莉·安妮', '泰国', 'Pongpat Wachirab... \n", - "87080 ['2007-04-06(中国大陆)', '爱德华·斯皮伊尔斯', '杰瑞米·艾恩斯', '... \n", - "\n", - "[87081 rows x 6 columns]" - ] - }, - "execution_count": 161, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
170.5毫米8.29027.0https://movie.douban.com/subject/21767183/2014-11-08(日本)['安藤樱', '织本顺吉', '木内みどり', '土屋希望', '井上竜夫']
180.5的爱情4.32866.0https://movie.douban.com/subject/25746519/2014-09-12(中国大陆)['蒲巴甲', '江语晨', '李悦铭', '龚洁', '中国大陆']
20007之你死我活6.73803.0https://movie.douban.com/subject/1293438/1973-06-27 00:00:00['罗杰·摩尔', '简·西摩', '亚非特·科托', 'Julius Harris', '...
21007之俄罗斯之恋7.25713.0https://movie.douban.com/subject/1293446/1963-10-10 00:00:00['肖恩·康纳利', '丹妮拉·碧安琪', '比德洛·阿门德里兹', '罗蒂·兰雅', '罗...
22007之八爪女6.83885.0https://movie.douban.com/subject/1300324/1983-06-10 00:00:00['罗杰·摩尔', '莫德·亚当斯', '路易斯·乔丹', '克里斯蒂娜·韦伯恩', '卡伯...
.....................
87074龙纹身的女孩8142912.0https://movie.douban.com/subject/4206357/2011-12-20(美国)['丹尼尔·克雷格', '鲁妮·玛拉', '斯特兰·斯卡斯加德', '罗宾·怀特', '克里...
87075龙腾四海6.52645.0https://movie.douban.com/subject/1304124/1992-06-05 00:00:00['邓光荣', '刘德华', '任达华', '黎明', '香港']
87077龙虎门5.743968.0https://movie.douban.com/subject/1478926/2006-07-28(中国大陆/香港)['甄子丹', '谢霆锋', '余文乐', '董洁', '李小冉']
87078龙虎风云7.56047.0https://movie.douban.com/subject/1299658/1987-02-13 00:00:00['周润发', '李修贤', '孙越', '吴家丽', '张耀扬']
87080龙骑士5.716961.0https://movie.douban.com/subject/1433678/2006-12-15(美国)['2007-04-06(中国大陆)', '爱德华·斯皮伊尔斯', '杰瑞米·艾恩斯', '...
\n", - "

42397 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 链接 \\\n", - "17 0.5毫米 8.2 9027.0 https://movie.douban.com/subject/21767183/ \n", - "18 0.5的爱情 4.3 2866.0 https://movie.douban.com/subject/25746519/ \n", - "20 007之你死我活 6.7 3803.0 https://movie.douban.com/subject/1293438/ \n", - "21 007之俄罗斯之恋 7.2 5713.0 https://movie.douban.com/subject/1293446/ \n", - "22 007之八爪女 6.8 3885.0 https://movie.douban.com/subject/1300324/ \n", - "... ... ... ... ... \n", - "87074 龙纹身的女孩 8 142912.0 https://movie.douban.com/subject/4206357/ \n", - "87075 龙腾四海 6.5 2645.0 https://movie.douban.com/subject/1304124/ \n", - "87077 龙虎门 5.7 43968.0 https://movie.douban.com/subject/1478926/ \n", - "87078 龙虎风云 7.5 6047.0 https://movie.douban.com/subject/1299658/ \n", - "87080 龙骑士 5.7 16961.0 https://movie.douban.com/subject/1433678/ \n", - "\n", - " 时间 演员 \n", - "17 2014-11-08(日本) ['安藤樱', '织本顺吉', '木内みどり', '土屋希望', '井上竜夫'] \n", - "18 2014-09-12(中国大陆) ['蒲巴甲', '江语晨', '李悦铭', '龚洁', '中国大陆'] \n", - "20 1973-06-27 00:00:00 ['罗杰·摩尔', '简·西摩', '亚非特·科托', 'Julius Harris', '... \n", - "21 1963-10-10 00:00:00 ['肖恩·康纳利', '丹妮拉·碧安琪', '比德洛·阿门德里兹', '罗蒂·兰雅', '罗... \n", - "22 1983-06-10 00:00:00 ['罗杰·摩尔', '莫德·亚当斯', '路易斯·乔丹', '克里斯蒂娜·韦伯恩', '卡伯... \n", - "... ... ... \n", - "87074 2011-12-20(美国) ['丹尼尔·克雷格', '鲁妮·玛拉', '斯特兰·斯卡斯加德', '罗宾·怀特', '克里... \n", - "87075 1992-06-05 00:00:00 ['邓光荣', '刘德华', '任达华', '黎明', '香港'] \n", - "87077 2006-07-28(中国大陆/香港) ['甄子丹', '谢霆锋', '余文乐', '董洁', '李小冉'] \n", - "87078 1987-02-13 00:00:00 ['周润发', '李修贤', '孙越', '吴家丽', '张耀扬'] \n", - "87080 2006-12-15(美国) ['2007-04-06(中国大陆)', '爱德华·斯皮伊尔斯', '杰瑞米·艾恩斯', '... \n", - "\n", - "[42397 rows x 6 columns]" - ] - }, - "execution_count": 162, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd[movie_pd.评价人数> 1000]" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'>' not supported between instances of 'str' and 'float'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovie_pd\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmovie_pd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m评价人数\u001b[0m\u001b[0;34m>\u001b[0m \u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mmovie_pd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m评分\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0;36m8.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/root/opt/py3/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(self, other, axis)\u001b[0m\n\u001b[1;32m 877\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 878\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'ignore'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 879\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mna_op\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 880\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 881\u001b[0m raise TypeError('Could not compare {typ} type with Series'\n", - "\u001b[0;32m~/root/opt/py3/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36mna_op\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 781\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 782\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_object_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 783\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_comp_method_OBJECT_ARRAY\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 784\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 785\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/root/opt/py3/lib/python3.6/site-packages/pandas/core/ops.py\u001b[0m in \u001b[0;36m_comp_method_OBJECT_ARRAY\u001b[0;34m(op, x, y)\u001b[0m\n\u001b[1;32m 761\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvec_compare\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 762\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 763\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscalar_compare\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 764\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 765\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32mpandas/_libs/lib.pyx\u001b[0m in \u001b[0;36mpandas._libs.lib.scalar_compare\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: '>' not supported between instances of 'str' and 'float'" - ] - } - ], - "source": [ - "movie_pd[(movie_pd.评价人数> 1000) & (movie_pd.评分>8.0)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 163, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
0\"ExtremeChampionshipWrestling\"(评价人数不足)NaNhttps://movie.douban.com/subject/1963120/2006-06-13 00:00:00[]
2\"WWEMondayNightRAW\"Episodedated11Decembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957739/2006-12-11 00:00:00[]
3\"WWEMondayNightRAW\"Episodedated11June200(评价人数不足)NaNhttps://movie.douban.com/subject/2136118/2007-06-11 00:00:00['Kevin Dunn']
4\"WWEMondayNightRAW\"Episodedated13Novembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957743/2006-11-13 00:00:00[]
5\"WWEMondayNightRAW\"Episodedated18Decembe(评价人数不足)NaNhttps://movie.douban.com/subject/1957737/2006-12-18 00:00:00[]
.....................
86976黑丝俏医生(评价人数不足)NaNhttps://movie.douban.com/subject/26654103/2015年11月4日['冯玲玲', '伍畏', '中国大陆', '彭中智', '喜剧']
86995黑暗料理(评价人数不足)NaNhttps://movie.douban.com/subject/26889575/2016-10-13(中国大陆)['冯子翰', '黄雨萱', '曾伟权', '中国大陆', '钟宗保']
87012黑社会3(尚未上映)NaNhttps://movie.douban.com/subject/20427087/香港['杜琪峰', '动作', '犯罪', '粤语']
87023黑车(评价人数不足)NaNhttps://movie.douban.com/subject/26306667/2014-12-30 00:00:00['雷小渝', '陈祺荣', '田竞', '黄杰', '侯子骞']
87053龙号机车(评价人数不足)NaNhttps://movie.douban.com/subject/24839096/2016-02-01(中国大陆)['中国大陆', '英达', '剧情', '喜剧', '满昱 Yu Man']
\n", - "

10838 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "0 \"ExtremeChampionshipWrestling\" (评价人数不足) NaN \n", - "2 \"WWEMondayNightRAW\"Episodedated11Decembe (评价人数不足) NaN \n", - "3 \"WWEMondayNightRAW\"Episodedated11June200 (评价人数不足) NaN \n", - "4 \"WWEMondayNightRAW\"Episodedated13Novembe (评价人数不足) NaN \n", - "5 \"WWEMondayNightRAW\"Episodedated18Decembe (评价人数不足) NaN \n", - "... ... ... ... \n", - "86976 黑丝俏医生 (评价人数不足) NaN \n", - "86995 黑暗料理 (评价人数不足) NaN \n", - "87012 黑社会3 (尚未上映) NaN \n", - "87023 黑车 (评价人数不足) NaN \n", - "87053 龙号机车 (评价人数不足) NaN \n", - "\n", - " 链接 时间 \\\n", - "0 https://movie.douban.com/subject/1963120/ 2006-06-13 00:00:00 \n", - "2 https://movie.douban.com/subject/1957739/ 2006-12-11 00:00:00 \n", - "3 https://movie.douban.com/subject/2136118/ 2007-06-11 00:00:00 \n", - "4 https://movie.douban.com/subject/1957743/ 2006-11-13 00:00:00 \n", - "5 https://movie.douban.com/subject/1957737/ 2006-12-18 00:00:00 \n", - "... ... ... \n", - "86976 https://movie.douban.com/subject/26654103/ 2015年11月4日 \n", - "86995 https://movie.douban.com/subject/26889575/ 2016-10-13(中国大陆) \n", - "87012 https://movie.douban.com/subject/20427087/ 香港 \n", - "87023 https://movie.douban.com/subject/26306667/ 2014-12-30 00:00:00 \n", - "87053 https://movie.douban.com/subject/24839096/ 2016-02-01(中国大陆) \n", - "\n", - " 演员 \n", - "0 [] \n", - "2 [] \n", - "3 ['Kevin Dunn'] \n", - "4 [] \n", - "5 [] \n", - "... ... \n", - "86976 ['冯玲玲', '伍畏', '中国大陆', '彭中智', '喜剧'] \n", - "86995 ['冯子翰', '黄雨萱', '曾伟权', '中国大陆', '钟宗保'] \n", - "87012 ['杜琪峰', '动作', '犯罪', '粤语'] \n", - "87023 ['雷小渝', '陈祺荣', '田竞', '黄杰', '侯子骞'] \n", - "87053 ['中国大陆', '英达', '剧情', '喜剧', '满昱 Yu Man'] \n", - "\n", - "[10838 rows x 6 columns]" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_pd[pd.to_numeric(movie_pd.评分, errors='coerce').isnull()]" - ] - }, - { - "cell_type": "code", - "execution_count": 203, - "metadata": {}, - "outputs": [], - "source": [ - "notnull_movie_pd = movie_pd[pd.to_numeric(movie_pd.评分, errors='coerce').notnull()]" - ] - }, - { - "cell_type": "code", - "execution_count": 204, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
3929人类星球9.88740.0https://movie.douban.com/subject/5950117/2011-01-12(英国)['约翰·赫特', '英国', 'www.bbc.co.uk/programmes/b00l...
9484地球脉动第二季9.912365.0https://movie.douban.com/subject/26733371/2016-11-06(英国)['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0...
18521是,大臣第三季9.85169.0https://movie.douban.com/subject/4933235/1982-11-11(英国)['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '伊莲诺·布罗', '约翰·...
18522是,大臣第二季9.85273.0https://movie.douban.com/subject/4933194/1981-02-23 00:00:00['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '戴安娜·霍迪诺特', '约...
27886老友记第十季9.838254.0https://movie.douban.com/subject/3286552/2003-09-25(美国)['詹妮弗·安妮斯顿', '柯特妮·考克斯', '丽莎·库卓', '马特·勒布朗', '马修...
.....................
55669地球脉动第二季9.912515.0https://movie.douban.com/subject/26733371/2016-11-06(英国)['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0...
59730是,大臣第三季9.85181.0https://movie.douban.com/subject/4933235/1982-11-11(英国)['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '伊莲诺·布罗', '约翰·...
59731是,大臣第二季9.85280.0https://movie.douban.com/subject/4933194/1981-02-23 00:00:00['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '戴安娜·霍迪诺特', '约...
70610地球脉动第二季9.912578.0https://movie.douban.com/subject/26733371/2016-11-06(英国)['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0...
81342地球脉动第二季9.912617.0https://movie.douban.com/subject/26733371/2016-11-06(英国)['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0...
\n", - "

18 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 链接 \\\n", - "3929 人类星球 9.8 8740.0 https://movie.douban.com/subject/5950117/ \n", - "9484 地球脉动第二季 9.9 12365.0 https://movie.douban.com/subject/26733371/ \n", - "18521 是,大臣第三季 9.8 5169.0 https://movie.douban.com/subject/4933235/ \n", - "18522 是,大臣第二季 9.8 5273.0 https://movie.douban.com/subject/4933194/ \n", - "27886 老友记第十季 9.8 38254.0 https://movie.douban.com/subject/3286552/ \n", - "... ... ... ... ... \n", - "55669 地球脉动第二季 9.9 12515.0 https://movie.douban.com/subject/26733371/ \n", - "59730 是,大臣第三季 9.8 5181.0 https://movie.douban.com/subject/4933235/ \n", - "59731 是,大臣第二季 9.8 5280.0 https://movie.douban.com/subject/4933194/ \n", - "70610 地球脉动第二季 9.9 12578.0 https://movie.douban.com/subject/26733371/ \n", - "81342 地球脉动第二季 9.9 12617.0 https://movie.douban.com/subject/26733371/ \n", - "\n", - " 时间 演员 \n", - "3929 2011-01-12(英国) ['约翰·赫特', '英国', 'www.bbc.co.uk/programmes/b00l... \n", - "9484 2016-11-06(英国) ['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0... \n", - "18521 1982-11-11(英国) ['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '伊莲诺·布罗', '约翰·... \n", - "18522 1981-02-23 00:00:00 ['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '戴安娜·霍迪诺特', '约... \n", - "27886 2003-09-25(美国) ['詹妮弗·安妮斯顿', '柯特妮·考克斯', '丽莎·库卓', '马特·勒布朗', '马修... \n", - "... ... ... \n", - "55669 2016-11-06(英国) ['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0... \n", - "59730 1982-11-11(英国) ['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '伊莲诺·布罗', '约翰·... \n", - "59731 1981-02-23 00:00:00 ['保罗·爱丁顿', '奈杰尔·霍桑', '德里克·福德斯', '戴安娜·霍迪诺特', '约... \n", - "70610 2016-11-06(英国) ['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0... \n", - "81342 2016-11-06(英国) ['戴维·阿滕伯勒', '英国', 'www.bbc.co.uk/programmes/p0... \n", - "\n", - "[18 rows x 6 columns]" - ] - }, - "execution_count": 204, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "notnull_movie_pd[(notnull_movie_pd.评价人数> 5000) & (notnull_movie_pd.评分>9.7)]" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
506BBC:非洲9.75506.0https://movie.douban.com/subject/20488575/2013-01-02(英国)['2013-08-19(中国大陆)', '戴维·阿滕伯勒', '英国', 'www.bbc...
1160RunningMan9.618762.0https://movie.douban.com/subject/10509888/2010-07-11(韩国)['刘在石', '河东勋', '李光洙', '金钟国', '池石镇']
3227久石让在武道馆:与宫崎骏动画一同走过的25年9.79035.0https://movie.douban.com/subject/4167113/2008-08-05(日本)['久石让', '日本', '116分钟', '103分钟(NHK版)', '久石让在武道馆...
3929人类星球9.88740.0https://movie.douban.com/subject/5950117/2011-01-12(英国)['约翰·赫特', '英国', 'www.bbc.co.uk/programmes/b00l...
3975人间世9.610503.0https://movie.douban.com/subject/26815163/2016-06-11(中国大陆)['中国大陆', 'www.kankanews.com/z/renjianshi/index...
.....................
84158涅磐纽约不插电演唱会9.76065.0https://movie.douban.com/subject/1449961/1993-12-16 00:00:00['科特·柯本', '大卫·格鲁', 'Cris Kirkwood...Himself、Cu...
84569猫和老鼠9.625921.0https://movie.douban.com/subject/4321270/1965-09-25(美国)['Daws Butler', '里德·科菲', '约瑟夫·巴伯拉', '威廉·汉纳', '...
85480肖申克的救赎9.6762311.0https://movie.douban.com/subject/1292052/1994-09-10(多伦多电影节)['1994-10-14(美国)', '蒂姆·罗宾斯', '摩根·弗里曼', '鲍勃·冈顿'...
86097走向共和9.617386.0https://movie.douban.com/subject/1441794/2003-04-12(中国大陆)['王冰', '吕中', '马少骅', '孙淳', '李光洁']
86563阿黛尔伦敦爱尔伯特音乐厅演唱会9.65638.0https://movie.douban.com/subject/7052699/2011-11-29(美国)['阿黛尔', '英国', 'www.adele.tv/rah', 'Paul Dugdal...
\n", - "

66 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "506 BBC:非洲 9.7 5506.0 \n", - "1160 RunningMan 9.6 18762.0 \n", - "3227 久石让在武道馆:与宫崎骏动画一同走过的25年 9.7 9035.0 \n", - "3929 人类星球 9.8 8740.0 \n", - "3975 人间世 9.6 10503.0 \n", - "... ... ... ... \n", - "84158 涅磐纽约不插电演唱会 9.7 6065.0 \n", - "84569 猫和老鼠 9.6 25921.0 \n", - "85480 肖申克的救赎 9.6 762311.0 \n", - "86097 走向共和 9.6 17386.0 \n", - "86563 阿黛尔伦敦爱尔伯特音乐厅演唱会 9.6 5638.0 \n", - "\n", - " 链接 时间 \\\n", - "506 https://movie.douban.com/subject/20488575/ 2013-01-02(英国) \n", - "1160 https://movie.douban.com/subject/10509888/ 2010-07-11(韩国) \n", - "3227 https://movie.douban.com/subject/4167113/ 2008-08-05(日本) \n", - "3929 https://movie.douban.com/subject/5950117/ 2011-01-12(英国) \n", - "3975 https://movie.douban.com/subject/26815163/ 2016-06-11(中国大陆) \n", - "... ... ... \n", - "84158 https://movie.douban.com/subject/1449961/ 1993-12-16 00:00:00 \n", - "84569 https://movie.douban.com/subject/4321270/ 1965-09-25(美国) \n", - "85480 https://movie.douban.com/subject/1292052/ 1994-09-10(多伦多电影节) \n", - "86097 https://movie.douban.com/subject/1441794/ 2003-04-12(中国大陆) \n", - "86563 https://movie.douban.com/subject/7052699/ 2011-11-29(美国) \n", - "\n", - " 演员 \n", - "506 ['2013-08-19(中国大陆)', '戴维·阿滕伯勒', '英国', 'www.bbc... \n", - "1160 ['刘在石', '河东勋', '李光洙', '金钟国', '池石镇'] \n", - "3227 ['久石让', '日本', '116分钟', '103分钟(NHK版)', '久石让在武道馆... \n", - "3929 ['约翰·赫特', '英国', 'www.bbc.co.uk/programmes/b00l... \n", - "3975 ['中国大陆', 'www.kankanews.com/z/renjianshi/index... \n", - "... ... \n", - "84158 ['科特·柯本', '大卫·格鲁', 'Cris Kirkwood...Himself、Cu... \n", - "84569 ['Daws Butler', '里德·科菲', '约瑟夫·巴伯拉', '威廉·汉纳', '... \n", - "85480 ['1994-10-14(美国)', '蒂姆·罗宾斯', '摩根·弗里曼', '鲍勃·冈顿'... \n", - "86097 ['王冰', '吕中', '马少骅', '孙淳', '李光洁'] \n", - "86563 ['阿黛尔', '英国', 'www.adele.tv/rah', 'Paul Dugdal... \n", - "\n", - "[66 rows x 6 columns]" - ] - }, - "execution_count": 205, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "notnull_movie_pd[(notnull_movie_pd.评价人数> 5000) & (notnull_movie_pd.评分>9.5) & (notnull_movie_pd.电影名.str.contains(\"季\") == False)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 数据准备" - ] - }, - { - "cell_type": "code", - "execution_count": 226, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Int64Index: 76243 entries, 1 to 87080\n", - "Data columns (total 6 columns):\n", - "电影名 76243 non-null object\n", - "评分 76243 non-null object\n", - "评价人数 76243 non-null float64\n", - "链接 76243 non-null object\n", - "时间 76240 non-null object\n", - "演员 76240 non-null object\n", - "dtypes: float64(1), object(5)\n", - "memory usage: 4.1+ MB\n" - ] - } - ], - "source": [ - "notnull_movie_pd.info(null_counts=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 添加/删除 列(特征)" - ] - }, - { - "cell_type": "code", - "execution_count": 227, - "metadata": {}, - "outputs": [], - "source": [ - "new_movie_pd = notnull_movie_pd.drop([\"时间\", \"演员\"], axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 228, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接
1\"TheXFiles\"SE6.15Monday9.452.0https://movie.douban.com/subject/3158584/
14\"海豹\"突击队第234班BUDS选拔训练8.652.0https://movie.douban.com/subject/3117860/
16(无)性恋6.9342.0https://movie.douban.com/subject/6812932/
170.5毫米8.29027.0https://movie.douban.com/subject/21767183/
180.5的爱情4.32866.0https://movie.douban.com/subject/25746519/
...............
87076龙虎砵兰街5.9537.0https://movie.douban.com/subject/2129702/
87077龙虎门5.743968.0https://movie.douban.com/subject/1478926/
87078龙虎风云7.56047.0https://movie.douban.com/subject/1299658/
87079龙裔黑帮之老虎8.2401.0https://movie.douban.com/subject/25887315/
87080龙骑士5.716961.0https://movie.douban.com/subject/1433678/
\n", - "

76243 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52.0 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52.0 \n", - "16 (无)性恋 6.9 342.0 \n", - "17 0.5毫米 8.2 9027.0 \n", - "18 0.5的爱情 4.3 2866.0 \n", - "... ... ... ... \n", - "87076 龙虎砵兰街 5.9 537.0 \n", - "87077 龙虎门 5.7 43968.0 \n", - "87078 龙虎风云 7.5 6047.0 \n", - "87079 龙裔黑帮之老虎 8.2 401.0 \n", - "87080 龙骑士 5.7 16961.0 \n", - "\n", - " 链接 \n", - "1 https://movie.douban.com/subject/3158584/ \n", - "14 https://movie.douban.com/subject/3117860/ \n", - "16 https://movie.douban.com/subject/6812932/ \n", - "17 https://movie.douban.com/subject/21767183/ \n", - "18 https://movie.douban.com/subject/25746519/ \n", - "... ... \n", - "87076 https://movie.douban.com/subject/2129702/ \n", - "87077 https://movie.douban.com/subject/1478926/ \n", - "87078 https://movie.douban.com/subject/1299658/ \n", - "87079 https://movie.douban.com/subject/25887315/ \n", - "87080 https://movie.douban.com/subject/1433678/ \n", - "\n", - "[76243 rows x 4 columns]" - ] - }, - "execution_count": 228, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 283, - "metadata": {}, - "outputs": [], - "source": [ - "new_movie_pd[\"权重评分\"] = new_movie_pd[\"评分\"]**(1/2) * new_movie_pd[\"评价人数\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 284, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接权重评分等级
1\"TheXFiles\"SE6.15Monday9.452https://movie.douban.com/subject/3158584/159.428981A
14\"海豹\"突击队第234班BUDS选拔训练8.652https://movie.douban.com/subject/3117860/152.493934B
16(无)性恋6.9342https://movie.douban.com/subject/6812932/898.360507C
170.5毫米8.29027https://movie.douban.com/subject/21767183/25849.394148B
180.5的爱情4.32866https://movie.douban.com/subject/25746519/5943.064092C
.....................
87021黑街杀手7.031https://movie.douban.com/subject/1295032/82.018291C
87033黑道风云之收数王6.2720https://movie.douban.com/subject/1303256/1792.785542C
87037黛洛维夫人7.5534https://movie.douban.com/subject/1358443/1462.419229B
87051龙二7.392https://movie.douban.com/subject/1959214/248.570312B
87058龙火长城6.4278https://movie.douban.com/subject/3166940/703.290552C
\n", - "

35132 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52 \n", - "16 (无)性恋 6.9 342 \n", - "17 0.5毫米 8.2 9027 \n", - "18 0.5的爱情 4.3 2866 \n", - "... ... ... ... \n", - "87021 黑街杀手 7.0 31 \n", - "87033 黑道风云之收数王 6.2 720 \n", - "87037 黛洛维夫人 7.5 534 \n", - "87051 龙二 7.3 92 \n", - "87058 龙火长城 6.4 278 \n", - "\n", - " 链接 权重评分 等级 \n", - "1 https://movie.douban.com/subject/3158584/ 159.428981 A \n", - "14 https://movie.douban.com/subject/3117860/ 152.493934 B \n", - "16 https://movie.douban.com/subject/6812932/ 898.360507 C \n", - "17 https://movie.douban.com/subject/21767183/ 25849.394148 B \n", - "18 https://movie.douban.com/subject/25746519/ 5943.064092 C \n", - "... ... ... .. \n", - "87021 https://movie.douban.com/subject/1295032/ 82.018291 C \n", - "87033 https://movie.douban.com/subject/1303256/ 1792.785542 C \n", - "87037 https://movie.douban.com/subject/1358443/ 1462.419229 B \n", - "87051 https://movie.douban.com/subject/1959214/ 248.570312 B \n", - "87058 https://movie.douban.com/subject/3166940/ 703.290552 C \n", - "\n", - "[35132 rows x 6 columns]" - ] - }, - "execution_count": 284, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 281, - "metadata": {}, - "outputs": [], - "source": [ - "def get_level(x):\n", - " if x > 9.0:\n", - " return \"A\"\n", - " elif x > 7.0:\n", - " return \"B\"\n", - " else:\n", - " return \"C\"\n", - "new_movie_pd[\"等级\"] = new_movie_pd.评分.map(get_level)" - ] - }, - { - "cell_type": "code", - "execution_count": 282, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接权重评分等级
1\"TheXFiles\"SE6.15Monday9.452https://movie.douban.com/subject/3158584/AA
14\"海豹\"突击队第234班BUDS选拔训练8.652https://movie.douban.com/subject/3117860/BB
16(无)性恋6.9342https://movie.douban.com/subject/6812932/CC
170.5毫米8.29027https://movie.douban.com/subject/21767183/BB
180.5的爱情4.32866https://movie.douban.com/subject/25746519/CC
.....................
87021黑街杀手7.031https://movie.douban.com/subject/1295032/CC
87033黑道风云之收数王6.2720https://movie.douban.com/subject/1303256/CC
87037黛洛维夫人7.5534https://movie.douban.com/subject/1358443/BB
87051龙二7.392https://movie.douban.com/subject/1959214/BB
87058龙火长城6.4278https://movie.douban.com/subject/3166940/CC
\n", - "

35132 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52 \n", - "16 (无)性恋 6.9 342 \n", - "17 0.5毫米 8.2 9027 \n", - "18 0.5的爱情 4.3 2866 \n", - "... ... ... ... \n", - "87021 黑街杀手 7.0 31 \n", - "87033 黑道风云之收数王 6.2 720 \n", - "87037 黛洛维夫人 7.5 534 \n", - "87051 龙二 7.3 92 \n", - "87058 龙火长城 6.4 278 \n", - "\n", - " 链接 权重评分 等级 \n", - "1 https://movie.douban.com/subject/3158584/ A A \n", - "14 https://movie.douban.com/subject/3117860/ B B \n", - "16 https://movie.douban.com/subject/6812932/ C C \n", - "17 https://movie.douban.com/subject/21767183/ B B \n", - "18 https://movie.douban.com/subject/25746519/ C C \n", - "... ... ... .. \n", - "87021 https://movie.douban.com/subject/1295032/ C C \n", - "87033 https://movie.douban.com/subject/1303256/ C C \n", - "87037 https://movie.douban.com/subject/1358443/ B B \n", - "87051 https://movie.douban.com/subject/1959214/ B B \n", - "87058 https://movie.douban.com/subject/3166940/ C C \n", - "\n", - "[35132 rows x 6 columns]" - ] - }, - "execution_count": 282, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 279, - "metadata": {}, - "outputs": [], - "source": [ - "new_movie_pd['等级'] = pd.cut(new_movie_pd['评分'], bins = [0, 7.0, 9.0, float('Inf')], labels = ['C', 'B', 'A'], right = False)" - ] - }, - { - "cell_type": "code", - "execution_count": 280, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接权重评分等级
1\"TheXFiles\"SE6.15Monday9.452https://movie.douban.com/subject/3158584/AA
14\"海豹\"突击队第234班BUDS选拔训练8.652https://movie.douban.com/subject/3117860/BB
16(无)性恋6.9342https://movie.douban.com/subject/6812932/CC
170.5毫米8.29027https://movie.douban.com/subject/21767183/BB
180.5的爱情4.32866https://movie.douban.com/subject/25746519/CC
.....................
87021黑街杀手7.031https://movie.douban.com/subject/1295032/CB
87033黑道风云之收数王6.2720https://movie.douban.com/subject/1303256/CC
87037黛洛维夫人7.5534https://movie.douban.com/subject/1358443/BB
87051龙二7.392https://movie.douban.com/subject/1959214/BB
87058龙火长城6.4278https://movie.douban.com/subject/3166940/CC
\n", - "

35132 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52 \n", - "16 (无)性恋 6.9 342 \n", - "17 0.5毫米 8.2 9027 \n", - "18 0.5的爱情 4.3 2866 \n", - "... ... ... ... \n", - "87021 黑街杀手 7.0 31 \n", - "87033 黑道风云之收数王 6.2 720 \n", - "87037 黛洛维夫人 7.5 534 \n", - "87051 龙二 7.3 92 \n", - "87058 龙火长城 6.4 278 \n", - "\n", - " 链接 权重评分 等级 \n", - "1 https://movie.douban.com/subject/3158584/ A A \n", - "14 https://movie.douban.com/subject/3117860/ B B \n", - "16 https://movie.douban.com/subject/6812932/ C C \n", - "17 https://movie.douban.com/subject/21767183/ B B \n", - "18 https://movie.douban.com/subject/25746519/ C C \n", - "... ... ... .. \n", - "87021 https://movie.douban.com/subject/1295032/ C B \n", - "87033 https://movie.douban.com/subject/1303256/ C C \n", - "87037 https://movie.douban.com/subject/1358443/ B B \n", - "87051 https://movie.douban.com/subject/1959214/ B B \n", - "87058 https://movie.douban.com/subject/3166940/ C C \n", - "\n", - "[35132 rows x 6 columns]" - ] - }, - "execution_count": 280, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 去重" - ] - }, - { - "cell_type": "code", - "execution_count": 270, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接权重评分
1\"TheXFiles\"SE6.15Monday9.452https://movie.douban.com/subject/3158584/A
14\"海豹\"突击队第234班BUDS选拔训练8.652https://movie.douban.com/subject/3117860/B
16(无)性恋6.9342https://movie.douban.com/subject/6812932/C
170.5毫米8.29027https://movie.douban.com/subject/21767183/B
180.5的爱情4.32866https://movie.douban.com/subject/25746519/C
..................
87021黑街杀手7.031https://movie.douban.com/subject/1295032/B
87033黑道风云之收数王6.2720https://movie.douban.com/subject/1303256/C
87037黛洛维夫人7.5534https://movie.douban.com/subject/1358443/B
87051龙二7.392https://movie.douban.com/subject/1959214/B
87058龙火长城6.4278https://movie.douban.com/subject/3166940/C
\n", - "

35132 rows × 5 columns

\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52 \n", - "16 (无)性恋 6.9 342 \n", - "17 0.5毫米 8.2 9027 \n", - "18 0.5的爱情 4.3 2866 \n", - "... ... ... ... \n", - "87021 黑街杀手 7.0 31 \n", - "87033 黑道风云之收数王 6.2 720 \n", - "87037 黛洛维夫人 7.5 534 \n", - "87051 龙二 7.3 92 \n", - "87058 龙火长城 6.4 278 \n", - "\n", - " 链接 权重评分 \n", - "1 https://movie.douban.com/subject/3158584/ A \n", - "14 https://movie.douban.com/subject/3117860/ B \n", - "16 https://movie.douban.com/subject/6812932/ C \n", - "17 https://movie.douban.com/subject/21767183/ B \n", - "18 https://movie.douban.com/subject/25746519/ C \n", - "... ... ... \n", - "87021 https://movie.douban.com/subject/1295032/ B \n", - "87033 https://movie.douban.com/subject/1303256/ C \n", - "87037 https://movie.douban.com/subject/1358443/ B \n", - "87051 https://movie.douban.com/subject/1959214/ B \n", - "87058 https://movie.douban.com/subject/3166940/ C \n", - "\n", - "[35132 rows x 5 columns]" - ] - }, - "execution_count": 270, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd = new_movie_pd.drop_duplicates(subset=[\"链接\"])\n", - "new_movie_pd" - ] - }, - { - "cell_type": "code", - "execution_count": 271, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
链接count
1https://movie.douban.com/subject/10001418/3
2https://movie.douban.com/subject/10001432/2
3https://movie.douban.com/subject/10001437/2
4https://movie.douban.com/subject/10001439/2
5https://movie.douban.com/subject/10001455/3
.........
35121https://movie.douban.com/subject/7564965/4
35125https://movie.douban.com/subject/7564985/3
35127https://movie.douban.com/subject/7564989/2
35129https://movie.douban.com/subject/7916027/3
35130https://movie.douban.com/subject/7916164/2
\n", - "

23753 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " 链接 count\n", - "1 https://movie.douban.com/subject/10001418/ 3\n", - "2 https://movie.douban.com/subject/10001432/ 2\n", - "3 https://movie.douban.com/subject/10001437/ 2\n", - "4 https://movie.douban.com/subject/10001439/ 2\n", - "5 https://movie.douban.com/subject/10001455/ 3\n", - "... ... ...\n", - "35121 https://movie.douban.com/subject/7564965/ 4\n", - "35125 https://movie.douban.com/subject/7564985/ 3\n", - "35127 https://movie.douban.com/subject/7564989/ 2\n", - "35129 https://movie.douban.com/subject/7916027/ 3\n", - "35130 https://movie.douban.com/subject/7916164/ 2\n", - "\n", - "[23753 rows x 2 columns]" - ] - }, - "execution_count": 271, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "movie_url = notnull_movie_pd.groupby('链接').size().reset_index(name='count')\n", - "movie_url[ movie_url['count'] > 1 ]" - ] - }, - { - "cell_type": "code", - "execution_count": 272, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接时间演员
20546死亡监狱7.751.0https://movie.douban.com/subject/7564985/1994-11-24 00:00:00['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融']
45573死亡监狱7.751.0https://movie.douban.com/subject/7564985/1994-11-24 00:00:00['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融']
83880死亡监狱7.751.0https://movie.douban.com/subject/7564985/1994-11-24 00:00:00['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融']
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 链接 \\\n", - "20546 死亡监狱 7.7 51.0 https://movie.douban.com/subject/7564985/ \n", - "45573 死亡监狱 7.7 51.0 https://movie.douban.com/subject/7564985/ \n", - "83880 死亡监狱 7.7 51.0 https://movie.douban.com/subject/7564985/ \n", - "\n", - " 时间 演员 \n", - "20546 1994-11-24 00:00:00 ['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融'] \n", - "45573 1994-11-24 00:00:00 ['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融'] \n", - "83880 1994-11-24 00:00:00 ['黄子扬', '谷峰', '卫乃业', '香港', '吴岱融'] " - ] - }, - "execution_count": 272, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "notnull_movie_pd[notnull_movie_pd.链接 == \"https://movie.douban.com/subject/7564985/\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 273, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "35132" - ] - }, - "execution_count": 273, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(new_movie_pd.链接.unique())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 类型转换" - ] - }, - { - "cell_type": "code", - "execution_count": 274, - "metadata": {}, - "outputs": [], - "source": [ - "new_movie_pd.评分 = new_movie_pd.评分.apply(pd.to_numeric)\n", - "new_movie_pd.评价人数 = new_movie_pd.评价人数.astype(int)" - ] - }, - { - "cell_type": "code", - "execution_count": 275, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
评分评价人数
count35132.00000035132.000000
mean7.1856038397.774878
std1.38136629991.271032
min2.00000020.000000
25%6.500000186.000000
50%7.400000807.000000
75%8.2000003867.000000
max9.900000761604.000000
\n", - "
" - ], - "text/plain": [ - " 评分 评价人数\n", - "count 35132.000000 35132.000000\n", - "mean 7.185603 8397.774878\n", - "std 1.381366 29991.271032\n", - "min 2.000000 20.000000\n", - "25% 6.500000 186.000000\n", - "50% 7.400000 807.000000\n", - "75% 8.200000 3867.000000\n", - "max 9.900000 761604.000000" - ] - }, - "execution_count": 275, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 分组操作" - ] - }, - { - "cell_type": "code", - "execution_count": 288, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
电影名评分评价人数链接权重评分等级
1\"TheXFiles\"SE6.15Monday9.452https://movie.douban.com/subject/3158584/159.428981A
14\"海豹\"突击队第234班BUDS选拔训练8.652https://movie.douban.com/subject/3117860/152.493934B
16(无)性恋6.9342https://movie.douban.com/subject/6812932/898.360507C
170.5毫米8.29027https://movie.douban.com/subject/21767183/25849.394148B
180.5的爱情4.32866https://movie.douban.com/subject/25746519/5943.064092C
\n", - "
" - ], - "text/plain": [ - " 电影名 评分 评价人数 \\\n", - "1 \"TheXFiles\"SE6.15Monday 9.4 52 \n", - "14 \"海豹\"突击队第234班BUDS选拔训练 8.6 52 \n", - "16 (无)性恋 6.9 342 \n", - "17 0.5毫米 8.2 9027 \n", - "18 0.5的爱情 4.3 2866 \n", - "\n", - " 链接 权重评分 等级 \n", - "1 https://movie.douban.com/subject/3158584/ 159.428981 A \n", - "14 https://movie.douban.com/subject/3117860/ 152.493934 B \n", - "16 https://movie.douban.com/subject/6812932/ 898.360507 C \n", - "17 https://movie.douban.com/subject/21767183/ 25849.394148 B \n", - "18 https://movie.douban.com/subject/25746519/ 5943.064092 C " - ] - }, - "execution_count": 288, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 287, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "等级\n", - "A 1870\n", - "B 19517\n", - "C 13745\n", - "dtype: int64" - ] - }, - "execution_count": 287, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd.groupby('等级').size()" - ] - }, - { - "cell_type": "code", - "execution_count": 289, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
等级num
0A1870
1B19517
2C13745
\n", - "
" - ], - "text/plain": [ - " 等级 num\n", - "0 A 1870\n", - "1 B 19517\n", - "2 C 13745" - ] - }, - "execution_count": 289, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_movie_pd.groupby('等级').size().reset_index(name = 'num')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 可视化" - ] - }, - { - "cell_type": "code", - "execution_count": 294, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5,0,'level: B')" - ] - }, - "execution_count": 294, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(16, 3))\n", - "\n", - "new_movie_pd[new_movie_pd.等级 == 'A'].评价人数.plot(ax=axes[0], style=\"ro\", label=\"A\")\n", - "new_movie_pd[new_movie_pd.等级 == 'B'].评价人数.plot(ax=axes[1], style=\"o\", label=\"B\")\n", - "\n", - "axes[0].legend()\n", - "axes[1].legend()\n", - "axes[0].set_xlabel(\"level: %s\" % 'A')\n", - "axes[1].set_xlabel(\"level: %s\" % 'B')" - ] - }, - { - "cell_type": "code", - "execution_count": 296, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5,0,'level: B')" - ] - }, - "execution_count": 296, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(16, 3))\n", - "\n", - "new_movie_pd[new_movie_pd.等级 == 'A'].评价人数.plot(kind=\"hist\", ax=axes[0], color=\"r\", label=\"A\")\n", - "new_movie_pd[new_movie_pd.等级 == 'B'].评价人数.plot(kind=\"hist\", ax=axes[1], color=\"y\", label=\"B\")\n", - "\n", - "axes[0].legend()\n", - "axes[1].legend()\n", - "axes[0].set_xlabel(\"level: %s\" % 'A')\n", - "axes[1].set_xlabel(\"level: %s\" % 'B')" - ] - }, - { - "cell_type": "code", - "execution_count": 300, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0,0.5,'score')" - ] - }, - "execution_count": 300, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ax = new_movie_pd.plot(x=\"评价人数\", y=\"评分\", style=\"ro\")\n", - "ax.set_xlabel(\"number of people\")\n", - "ax.set_ylabel(\"score\")" - ] - }, - { - "cell_type": "code", - "execution_count": 325, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ax = new_movie_pd.plot(x=\"评价人数\", y=\"评分\", style=\"ro\")\n", - "ax.set_xlabel(\"number of people\")\n", - "ax.set_ylabel(\"score\")\n", - "ax.legend([\"movie\"])\n", - "ax.set_xticks(range(0, 1000000, 200000))\n", - "ax.axhline(y=6, lw=4, ls=\"--\", color=\"r\")\n", - "\n", - "ax.lines[0].set_color(\"b\")\n", - "ax.lines[0].set_marker(\"s\")" - ] - }, - { - "cell_type": "code", - "execution_count": 327, - "metadata": {}, - "outputs": [], - "source": [ - "# new_movie_pd[(new_movie_pd.评价人数 > 200000) & (new_movie_pd.评分 < 6.0) ]" - ] - }, - { - "cell_type": "code", - "execution_count": 333, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['三傻大闹宝莱坞', '千与千寻', '少年派的奇幻漂流', '泰坦尼克号', '海上钢琴师', '盗梦空间', '肖申克的救赎',\n", - " '让子弹飞', '这个杀手不太冷', '阿甘正传', '霸王别姬'], dtype=object)" - ] - }, - "execution_count": 333, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# new_movie_pd[(new_movie_pd.评价人数 > 500000)].电影名.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 参考\n", - "\n", - "1. [十分钟学pandas](https://pandas.pydata.org/pandas-docs/stable/10min.html)\n", - "1. [电影数据轻松学习 Pandas](https://zhuanlan.zhihu.com/p/29284691)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/numpy-pandas-sci-computing/appendix_f_numpy-intro.pdf b/2017-autumn/numpy-pandas-sci-computing/appendix_f_numpy-intro.pdf deleted file mode 100644 index bc566d7..0000000 Binary files a/2017-autumn/numpy-pandas-sci-computing/appendix_f_numpy-intro.pdf and /dev/null differ diff --git a/2017-autumn/numpy-pandas-sci-computing/game_of_life_numpy.py b/2017-autumn/numpy-pandas-sci-computing/game_of_life_numpy.py deleted file mode 100644 index a18dbcb..0000000 --- a/2017-autumn/numpy-pandas-sci-computing/game_of_life_numpy.py +++ /dev/null @@ -1,46 +0,0 @@ -# ----------------------------------------------------------------------------- -# From Numpy to Python -# Copyright (2017) Nicolas P. Rougier - BSD license -# More information at https://github.com/rougier/numpy-book -# ----------------------------------------------------------------------------- -import numpy as np -import matplotlib.pyplot as plt -from matplotlib.animation import FuncAnimation - - -def update(*args): - global Z, M - - N = (Z[0:-2, 0:-2] + Z[0:-2, 1:-1] + Z[0:-2, 2:] + - Z[1:-1, 0:-2] + Z[1:-1, 2:] + - Z[2: , 0:-2] + Z[2: , 1:-1] + Z[2: , 2:]) - birth = (N == 3) & (Z[1:-1, 1:-1] == 0) - survive = ((N == 2) | (N == 3)) & (Z[1:-1, 1:-1] == 1) - Z[...] = 0 - Z[1:-1, 1:-1][birth | survive] = 1 - - # Show past activities - M[M>0.25] = 0.25 - M *= 0.995 - M[Z==1] = 1 - # Direct activity - # M[...] = Z - im.set_data(M) - - -Z = np.random.randint(0, 2, (300, 600)) -M = np.zeros(Z.shape) - -size = np.array(Z.shape) -dpi = 80.0 -figsize = size[1]/float(dpi), size[0]/float(dpi) -fig = plt.figure(figsize=figsize, dpi=dpi) -fig.add_axes([0.0, 0.0, 1.0, 1.0], frameon=False) -im = plt.imshow(M, interpolation='nearest', cmap=plt.cm.gray_r, vmin=0, vmax=1) -plt.xticks([]), plt.yticks([]) - -animation = FuncAnimation(fig, update, interval=20, frames=2000) -#animation.save('game-of-life.mp4', fps=40, dpi=80, bitrate=-1, codec="libx264", -# extra_args=['-pix_fmt', 'yuv420p'], -# metadata={'artist':'Nicolas P. Rougier'}) -plt.show() \ No newline at end of file diff --git "a/2017-autumn/numpy-pandas-sci-computing/\350\261\206\347\223\243\347\224\265\345\275\261.xlsx" "b/2017-autumn/numpy-pandas-sci-computing/\350\261\206\347\223\243\347\224\265\345\275\261.xlsx" deleted file mode 100644 index 1d04209..0000000 Binary files "a/2017-autumn/numpy-pandas-sci-computing/\350\261\206\347\223\243\347\224\265\345\275\261.xlsx" and /dev/null differ diff --git a/2017-autumn/python advanced topic.ipynb b/2017-autumn/python advanced topic.ipynb deleted file mode 100644 index d1e6de7..0000000 --- a/2017-autumn/python advanced topic.ipynb +++ /dev/null @@ -1,1310 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Python Advanced Features" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "+ Functional Programming, decorator\n", - "+ Python Profiler;\n", - "+ RE\n", - "+ Multiprocessing Programming\n", - "+ \\__buid\\__in\n", - "+ Syntax Tree" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "+ Unrelated-to-language / Algorithm, Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "+ related-to-lanauge / (Python, Java) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "+ assert \n", - "+ *arg, **kwargs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Functional Programming" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Oriented Functional Programming" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Oriented Object Programming" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "class Student: \n", - " def __init__(): \n", - " # properties\n", - " pass\n", - " \n", - " def say_hello(): \n", - " pass\n", - " \n", - " def take_a_test():\n", - " pass" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def change_a_studnet_info(student): pass" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Student.say_hello()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "say_hello(student)\n", - "# binding" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Oriented XX\n", - " + Focus\n", - " + 1. XX Var; 2. XX Arg 3. XX Return" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "check_number_by_func(9, 3, lambda x, y: x + y)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [], - "source": [ - "def less_than_zero(x): return x < 0" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [], - "source": [ - "def check_is_even_number_by_func(arg1, arg2, operation_f):\n", - " return operation_f(arg1, arg2) % 2 == 0" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [], - "source": [ - "# need to check if the arg1 and arg2 's result is less than zero" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [], - "source": [ - "def check_is_even_number_by_func(arg1, arg2, operation_f):\n", - " return operation_f(arg1, arg2) < 0 " - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def add_two_number(a, b): return a + b\n", - "\n", - "check_number_by_func(9, 3, add_two_number)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def some_func(x, y): return x! + y!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "lambda arg1, arg2, ... : # some operation with args\n", - "+ if / else / while / for \n", - "+ return \n", - "+ assignment\n" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "check_number_by_func(9, 3, lambda x, y: some_func(x, y) + 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "metadata": {}, - "outputs": [], - "source": [ - "def is_primer(n):\n", - " for i in range(2, n):\n", - " if n % i == 0: return False\n", - " return True" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 2.6226043701171875e-06\n", - "used time: 0.00012493133544921875\n", - "used time: 2.1457672119140625e-06\n", - "used time: 3.314018249511719e-05\n", - "used time: 2.1457672119140625e-06\n", - "used time: 2.002716064453125e-05\n", - "used time: 1.9073486328125e-06\n", - "used time: 2.3126602172851562e-05\n", - "used time: 8.106231689453125e-06\n", - "used time: 3.528594970703125e-05\n", - "used time: 2.1457672119140625e-06\n", - "used time: 3.0040740966796875e-05\n" - ] - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [], - "source": [ - "import time" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [], - "source": [ - "from itertools import combinations" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [], - "source": [ - "import math" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": {}, - "outputs": [], - "source": [ - "def get_the_closet_points(points_pair):\n", - " min_distance, closet_pair = float('inf'), None\n", - " for p1, p2 in combinations(points_pair, 2):\n", - " # distance = sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)\n", - " delta = math.sqrt((p1[0]-p2[0])**2 + (p1[1] - p2[1]) ** 2) \n", - " if delta < min_distance:\n", - " min_distance = delta\n", - " closet_pair = (p1, p2)\n", - " return p1, p2, min_distance" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((5, 3), (3, 2), 1.0)" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_the_closet_points([(0, 0), (1, 1), (3, 3), (5, 3), (3, 2)])" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 4.9114227294921875e-05\n" - ] - } - ], - "source": [ - "s = time.time()\n", - "is_primer(33123141235245345331)\n", - "print('used time: {}'.format(time.time() - s))" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": {}, - "outputs": [], - "source": [ - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [], - "source": [ - "def get_running_time_old(func, *args, **kwargs):\n", - " s = time.time()\n", - " result = func(*args, **kwargs)\n", - " print('used time: {}'.format(time.time() - s))\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "metadata": {}, - "outputs": [], - "source": [ - "def get_running_time(func): \n", - " @wraps(func)\n", - " def wrapper(*args, **kwargs):\n", - " s = time.time()\n", - " result = func(*args, **kwargs)\n", - " print('used time: {}'.format(time.time() - s))\n", - " return result\n", - " return wrapper" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "metadata": {}, - "outputs": [], - "source": [ - "is_primer = get_running_time(is_primer)" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 1.0990970134735107\n" - ] - } - ], - "source": [ - "result = is_primer(9038318248193747234825891)" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 1.1440272331237793\n" - ] - } - ], - "source": [ - "result_1 = get_running_time_old(is_primer, 9038318248193747234825891)" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 148, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 149, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result_1" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import wraps" - ] - }, - { - "cell_type": "code", - "execution_count": 193, - "metadata": {}, - "outputs": [], - "source": [ - "def send_mail(func_name): print('send mail to moniter')\n", - "\n", - "\n", - "\n", - "def notify(func):\n", - " @wraps(func)\n", - " def wrapper(*args, **kwargs):\n", - " \"\"\"the notify wrapper\"\"\"\n", - " send_mail(func.__name__)\n", - " result = func(*args, **kwargs)\n", - " return result\n", - " return wrapper" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [], - "source": [ - "# python decorator" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "metadata": {}, - "outputs": [], - "source": [ - "is_primer = notify(is_primer)" - ] - }, - { - "cell_type": "code", - "execution_count": 218, - "metadata": {}, - "outputs": [], - "source": [ - "## 100000 -> 100" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext line_profiler" - ] - }, - { - "cell_type": "code", - "execution_count": 292, - "metadata": {}, - "outputs": [], - "source": [ - "def mod(n, i): return n % i\n", - "\n", - "def is_primer(n):\n", - " \"\"\"check if is a primer\"\"\"\n", - " s = int(math.sqrt(n))\n", - " \n", - " if n > 2 and n % 2 == 0: return False\n", - " if n > 3 and n % 3 == 0: return False\n", - " if n > 5 and n % 5 == 0: return False\n", - "\n", - " for i in range(6, n):\n", - " if mod(n, i) == 0: return False\n", - " return True\n", - "\n", - "assert is_primer(3)\n", - "assert not is_primer(4)\n", - "assert not is_primer(10)\n", - "assert is_primer(13)\n", - "assert is_primer(97)\n", - "assert not is_primer(100)" - ] - }, - { - "cell_type": "code", - "execution_count": 280, - "metadata": {}, - "outputs": [], - "source": [ - "def get_primers(max_n):\n", - " result = []\n", - " for i in range(2, max_n+1):\n", - " if is_primer(i): \n", - " result.append(i)\n", - " return result" - ] - }, - { - "cell_type": "code", - "execution_count": 290, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "|2 2|\n", - "|3 4|" - ] - }, - { - "cell_type": "code", - "execution_count": 291, - "metadata": {}, - "outputs": [], - "source": [ - "def fast_det(A):\n", - " return A[0][0]*A[1][1] - A[0][1]*A[1][0]" - ] - }, - { - "cell_type": "code", - "execution_count": 299, - "metadata": {}, - "outputs": [ - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100000000000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "for _ in range(100000000000): pass" - ] - }, - { - "cell_type": "code", - "execution_count": 293, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "*** KeyboardInterrupt exception caught in code being profiled." - ] - } - ], - "source": [ - "%lprun -f is_primer get_primers(50000)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "11 1061109 379044.0 0.4 35.1 for i in range(2, s+1):\n", - "12 1055976 663132.0 0.6 61.4 if mod(n, i) == 0: return False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "11 1006118 359130.0 0.4 33.3 for i in range(2, s+1):\n", - "12 1000985 638955.0 0.6 59.2 if mod(n, i) == 0: return False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " 7 49999 24586.0 0.5 2.3 if n > 2 and n % 2 == 0: return False\n", - " 8 25000 11297.0 0.5 1.1 if n > 3 and n % 3 == 0: return False\n", - " 9 16668 7498.0 0.4 0.7 if n > 5 and n % 5 == 0: return False\n", - "10 \n", - "11 952795 345700.0 0.4 33.0 for i in range(6, s+1):\n", - "12 947662 618787.0 0.7 59.1 if mod(n, i) == 0: return False\n" - ] - }, - { - "cell_type": "code", - "execution_count": 277, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 151 ms, sys: 3.4 ms, total: 154 ms\n", - "Wall time: 154 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "result = get_primers(50000)" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "send mail to moniter\n", - "used time: 6.198883056640625e-06\n" - ] - }, - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "is_primer(9231823901823877988778)" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function is_primer in module __main__:\n", - "\n", - "is_primer(n)\n", - " check if is a primer\n", - "\n" - ] - } - ], - "source": [ - "help(is_primer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Functional Programming\n", - "2. Decorator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# decrease complexity " - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": {}, - "outputs": [], - "source": [ - "is_primer = get_running_time(is_primer)" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "metadata": {}, - "outputs": [], - "source": [ - "get_the_closet_points = get_running_time(get_the_closet_points)" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 0.4699971675872803\n" - ] - } - ], - "source": [ - "result = get_the_closet_points([(random.randrange(100), random.randrange(100)) for _ in range(1000)])" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "((71, 8), (51, 35), 0.0)" - ] - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 5.0067901611328125e-06\n" - ] - } - ], - "source": [ - "result = is_primer(290038310983192083)" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 133, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "used time: 0.43616724014282227\n" - ] - }, - { - "data": { - "text/plain": [ - "((37, 34), (26, 22), 0.0)" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "get_running_time_old(get_the_closet_points, [(random.randrange(100), random.randrange(100)) for _ in range(1000)])" - ] - }, - { - "cell_type": "code", - "execution_count": 301, - "metadata": {}, - "outputs": [], - "source": [ - "import requests" - ] - }, - { - "cell_type": "code", - "execution_count": 302, - "metadata": {}, - "outputs": [], - "source": [ - "url = 'https://github.com/Deep-Learning-for-NLP-Chinese'" - ] - }, - { - "cell_type": "code", - "execution_count": 303, - "metadata": {}, - "outputs": [], - "source": [ - "r = requests.get(url)" - ] - }, - { - "cell_type": "code", - "execution_count": 335, - "metadata": {}, - "outputs": [], - "source": [ - "example = 'I am a good boy, and I am always drink milk, and I drink 21 kg milk each day'\n", - "example_2 = 'I am a girl, I dont drink milk'" - ] - }, - { - "cell_type": "code", - "execution_count": 527, - "metadata": {}, - "outputs": [], - "source": [ - "pattern = '(.*boy.*milk.*\\s(\\d+).*)'" - ] - }, - { - "cell_type": "code", - "execution_count": 523, - "metadata": {}, - "outputs": [], - "source": [ - "example_3 = 'I am a good boy, and I am always drink milk, and I drink milk each day'" - ] - }, - { - "cell_type": "code", - "execution_count": 525, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('I am a good boy, and I am always drink milk, and I drink 21 kg milk each day',\n", - " '21')]" - ] - }, - "execution_count": 525, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(pattern, example)" - ] - }, - { - "cell_type": "code", - "execution_count": 331, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 331, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(pattern, example_3)" - ] - }, - { - "cell_type": "code", - "execution_count": 316, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['I am a good boy, and I am always drink milk, and I drink 2 kg milk each day']" - ] - }, - "execution_count": 316, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(pattern, example)" - ] - }, - { - "cell_type": "code", - "execution_count": 319, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 319, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(pattern, example_2)" - ] - }, - { - "cell_type": "code", - "execution_count": 310, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 310, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "example.find('milk') > 0 and example.find('boy') > 0" - ] - }, - { - "cell_type": "code", - "execution_count": 370, - "metadata": {}, - "outputs": [], - "source": [ - "url_pattern = '.*href=\"(/Deep-Learning-for-NLP-Chinese/.*)\"\\s.*'" - ] - }, - { - "cell_type": "code", - "execution_count": 371, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/Deep-Learning-for-NLP-Chinese/assignment2-Project2']" - ] - }, - "execution_count": 371, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(url_pattern,\n", - " '')" - ] - }, - { - "cell_type": "code", - "execution_count": 378, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/Deep-Learning-for-NLP-Chinese/assignment2-Project2',\n", - " '/Deep-Learning-for-NLP-Chinese/tensorflow',\n", - " '/Deep-Learning-for-NLP-Chinese/Slides',\n", - " '/Deep-Learning-for-NLP-Chinese/Word2Vec',\n", - " '/Deep-Learning-for-NLP-Chinese/References',\n", - " '/Deep-Learning-for-NLP-Chinese/assignment_get_douban_comment',\n", - " '/Deep-Learning-for-NLP-Chinese/Project-1',\n", - " '/Deep-Learning-for-NLP-Chinese/Data_source',\n", - " '/Deep-Learning-for-NLP-Chinese/Intro',\n", - " '/Deep-Learning-for-NLP-Chinese/DeepNeuralNetworks',\n", - " '/Deep-Learning-for-NLP-Chinese/Sequence2Sequence',\n", - " '/Deep-Learning-for-NLP-Chinese/ReinforcementLearning',\n", - " '/Deep-Learning-for-NLP-Chinese/ReadingComprehension',\n", - " '/Deep-Learning-for-NLP-Chinese/AutoSummarization',\n", - " '/Deep-Learning-for-NLP-Chinese/ChatBots',\n", - " '/Deep-Learning-for-NLP-Chinese/TreeRNN',\n", - " '/Deep-Learning-for-NLP-Chinese/SentenceEmbedding',\n", - " '/Deep-Learning-for-NLP-Chinese/CNN',\n", - " '/Deep-Learning-for-NLP-Chinese/RNN-LSTM-GRU']" - ] - }, - "execution_count": 378, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "re.findall(url_pattern, r.text)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Syntax Tree" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "'你好,请问你要办理什么业务?'\n", - "'先生您好,'" - ] - }, - { - "cell_type": "code", - "execution_count": 381, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'你好,您需要办理开户业务吗?'" - ] - }, - "execution_count": 381, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "'你好,您需要办理开户业务吗?'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pattern = 寒暄,询问,业务相关" - ] - }, - { - "cell_type": "code", - "execution_count": 509, - "metadata": {}, - "outputs": [], - "source": [ - "sentence = \"\"\"\n", - "sentence = 寒暄 报数 询问 业务相关 结尾\n", - "报数 = 我是 数字 号 ,\n", - "数字 = num num | num\n", - "num = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n", - "寒暄 = 称谓 打招呼 | 打招呼\n", - "称谓 = 人称 ,\n", - "人称 = 先生 | 女士 | 小朋友\n", - "打招呼 = 你好 | 您好 \n", - "询问 = 请问你要办理 | 您需要办理\n", - "业务相关 = 具体业务 业务\n", - "具体业务 = 开户 | 理财 | 挂失 | 信用卡\n", - "结尾 = 吗?| 呢?\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 442, - "metadata": {}, - "outputs": [], - "source": [ - "## Complier Principle " - ] - }, - { - "cell_type": "code", - "execution_count": 510, - "metadata": {}, - "outputs": [], - "source": [ - "pattern = {}\n", - "\n", - "for line in sentence.split('\\n'):\n", - " if not line: continue\n", - " key, rules = line.split('=')\n", - " key = key.strip()\n", - " rules = rules.split('|')\n", - " pattern[key] = rules\n", - " pattern[key] = [r.split() for r in rules]" - ] - }, - { - "cell_type": "code", - "execution_count": 468, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sentence': [['寒暄', '报数', '询问', '业务相关', '结尾']],\n", - " '报数': [['我是', '数字', '号', ',']],\n", - " '数字': [['num', 'num'], ['num']],\n", - " 'num': [['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']],\n", - " '寒暄': [['称谓', '打招呼'], ['打招呼']],\n", - " '称谓': [['先生'], ['女士'], ['小朋友']],\n", - " '打招呼': [['你好'], ['您好']],\n", - " '询问': [['请问你要办理'], ['您需要办理']],\n", - " '业务相关': [['具体业务', '业务']],\n", - " '具体业务': [['开户'], ['理财'], ['挂失']],\n", - " '结尾': [['吗?'], ['呢?']]}" - ] - }, - "execution_count": 468, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 501, - "metadata": {}, - "outputs": [], - "source": [ - "def generate(target='sentence'):\n", - " if target not in pattern: return target\n", - " \n", - " rule = random.choice(pattern[target])\n", - " return ''.join(generate(r) for r in rule)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Data Driven" - ] - }, - { - "cell_type": "code", - "execution_count": 520, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'女士,您好我是7号,您需要办理开户业务吗?'" - ] - }, - "execution_count": 520, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generate('sentence')" - ] - } - ], - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/tensorflow_graph_computing_example.py b/2017-autumn/tensorflow_graph_computing_example.py deleted file mode 100644 index 592586a..0000000 --- a/2017-autumn/tensorflow_graph_computing_example.py +++ /dev/null @@ -1,75 +0,0 @@ -import tensorflow as tf -import numpy as np -import random - - -def func(x): - if x <= 0: return -x ** 2 - else: - return x**(3/4) - - -training_data = [random.randrange(-100, 100) for _ in range(100000)] -training_Y = [func(x) for x in training_data] -training_data = [x for x in training_data] - -print(training_data[:10]) -print(training_Y[:10]) - - -x = tf.placeholder(dtype=tf.float32, shape=[None, 1], name='x') -y = tf.placeholder(dtype=tf.float32, shape=[None, 1], name='y') -a = tf.Variable(dtype=tf.float32, initial_value=tf.random_normal(stddev=0.05, shape=[1, 10]), name='a1') -a2 = tf.Variable(dtype=tf.float32, initial_value=tf.random_normal(stddev=0.5, shape=[10, 15]), name='a2') -a3 = tf.Variable(dtype=tf.float32, initial_value=tf.random_normal(stddev=0.5, shape=[15, 1]), name='a3') - - -b = tf.Variable(dtype=tf.float32, initial_value=tf.constant(0.0), name='b1') -b2 = tf.Variable(dtype=tf.float32, initial_value=tf.constant(0.0), name='b2') -b3 = tf.Variable(dtype=tf.float32, initial_value=tf.constant(0.0), name='b3') - -output1 = tf.matmul(x, a) + b -output1 = tf.nn.relu(output1) -output2 = tf.matmul(output1, a2) + b2 -output2 = tf.nn.relu(output2) - -output3 = tf.matmul(output2, a3) + b3 - -y_hat = output3 -loss = tf.losses.mean_squared_error(y_hat, y) -op = tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss) - - -def change_to_vector(L): - return [[e] for e in L] - - -def train_one_batch(sess, train_x, train_y, verbose=False): - batch_x = np.array(change_to_vector(train_x)) - batch_y = np.array(change_to_vector(train_y)) - l, _ = sess.run([loss, op], feed_dict={x: batch_x, y: batch_y}) - if verbose: print(l) - - -def train_one_epoch(sess, batch_size, X, Y): - batch_num = len(X) // batch_size - - np.random.shuffle(X) - np.random.shuffle(Y) - - for i in range(batch_num): - batch_x = X[i * batch_size: (i + 1) * batch_size] - batch_y = Y[i * batch_size: (i + 1) * batch_size] - if i % 100 == 0: verbose = True - else: - verbose = False - train_one_batch(sess, batch_x, batch_y, verbose) - - -with tf.Session() as sess: - sess.run(tf.initialize_all_variables()) - epoch = 500 - for i in range(epoch): - train_one_epoch(sess, 128, training_data, training_Y) - - diff --git a/2017-autumn/tensorflow_session_example.ipynb b/2017-autumn/tensorflow_session_example.ipynb deleted file mode 100644 index 03fa7e2..0000000 --- a/2017-autumn/tensorflow_session_example.ipynb +++ /dev/null @@ -1,188 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "a = tf.Variable(initial_value=tf.random_normal(shape=[2, 2]))" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "b = tf.Variable(initial_value=tf.random_normal(shape=[3, 2]))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "b" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "m = tf.matmul(a, tf.transpose(b))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "with tf.Session() as sess:\n", - " sess.run(tf.initialize_all_variables())\n", - " a_val, b_val = sess.run([a, b])\n", - " m_val = sess.run(m)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0.88622475 0.53196609]\n", - " [-2.00336289 1.43820441]]\n" - ] - } - ], - "source": [ - "print(a_val)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[-0.20688511 1.49315178]\n", - " [-0.89506471 -1.48872709]\n", - " [ 2.45446134 0.62015283]]\n" - ] - } - ], - "source": [ - "print(b_val)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0.61095941 -1.58518076 2.50510454]\n", - " [ 2.56192327 -0.34795451 -4.02526999]]\n" - ] - } - ], - "source": [ - "print(m_val)" - ] - } - ], - "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.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/2017-autumn/test.txt b/2017-autumn/test.txt deleted file mode 100644 index e69de29..0000000