├── 06_01.txt ├── README.md ├── a.wav ├── annKR.ipynb ├── boston_housing.ipynb ├── cnnKR.ipynb ├── crawling.csv ├── crawling.ipynb ├── doc.txt ├── extractINFO.ipynb ├── fashion_mnist.ipynb ├── imdb.ipynb ├── mnist.ipynb ├── nlp.ipynb ├── normalization.ipynb ├── numpy.ipynb ├── regexp.ipynb ├── regression.csv ├── regression2.csv ├── regressionKR.ipynb ├── regressionKR_blank.ipynb ├── regressionTF.ipynb ├── regression_saved.csv ├── sound.ipynb ├── string.ipynb ├── syntax.ipynb ├── test.npz └── variables.ipynb /README.md: -------------------------------------------------------------------------------- 1 | ## 고려대학교 영어영문학과 "영어음성학 응용" 수업 저장소 (2019년 봄학기) 2 | #### 강사: 남호성 교수 3 | -------------------------------------------------------------------------------- /a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsnam95/class2019Spring/e52063676010dcb2860f1408cda5e0cb5f9b5b3c/a.wav -------------------------------------------------------------------------------- /annKR.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 14, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# TensorFlow and tf.keras\n", 10 | "import tensorflow as tf\n", 11 | "\n", 12 | "# Helper libraries\n", 13 | "import numpy as np\n", 14 | "import matplotlib.pyplot as plt\n", 15 | "\n", 16 | "mnist = tf.keras.datasets.mnist\n", 17 | "\n", 18 | "(x_train, y_train),(x_test, y_test) = mnist.load_data()\n", 19 | "x_train, x_test = x_train / 255.0, x_test / 255.0" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 15, 25 | "metadata": {}, 26 | "outputs": [ 27 | { 28 | "data": { 29 | "image/png": "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smQB4OjRozz55JMA1K9fH4BvvvkmbONSPNm3bx/gek5Mnz4dsO4x//nPf8IyJk2NKYqiKIoSsWhEKAR8/PHHfPzxxx7vyQz422+/5dtvv/X4bMiQISat1L59+9AMMp1MmDABgBMnTvDaa68BkD179nAOSckgEqaWc1RW2r62iYuLo1GjRgA88MADIRph6Dh48CAffPABAL/88gsAa9eu5b777vN4zw7s3bsXgJYtWyZrVdGqVStuvPHGUA4rKJw6dYqOHTsCsGrVqmS3S4uXjBIa5Dkxb9488162bNkAePzxx8MyJo0IKYqiKIoSsQQ0InT27FkAzp8/D7gEe5s3b07Xd7366qsAlChRIjCDCyOzZ8/2eq9ChQoA/N///Z/XZz/99BNffvklYN+IkIgwp02bBkCzZs1CLnALB1u3bgVgzZo1AHTo0MFrm0cffRSALl268Nhjj2LyUPcAACAASURBVIVucBlg//79gGvsR48e9fv3PvzwQ0qXLg04PyL01VdfsXbtWsAz+uOLm2++OWTj8pfRo0cDGA2QO7Vq1QKgb9++XHut8xMBW7ZsYd26dYClu/QVuRS9YtmyZWnQoEHoBuiGPA/j4uLMe6KFSUxMBGD37t0pfkfWrFkBV0QPoEiRIj73187s2rULgN9++83rMxFJv/zyyyEdk5DhK+KLL74A4OeffzYPhy1btmT0a1m0aBEAq1evzhShXOHWW28FrEoH9307duwY4ArnygRy6tSpgKsiwk6VDzIhuHz5MuB7QpdZkIns119/zYIFCwDr5uZLSLxkyRLAdcFLirNt27ahGGq6uXTpEoDxe8rMHDx4EMCkvL7++muP95MiabBu3boB0LRp02APMU28/vrrAMyaNSvZbX788cdQDScknDx5knPnzvm9ffv27bnmGlcCRATUoaJNmzZAysfHX3r37g24imw++eQTAG644YYMf2+wOXbsmFkUiljanXCnMDU1piiKoihKxJLhiFDLli0B18pYQnXFixc3n0u4PDo6GoA77rjD5/ds27YNsMK7EiqcMWOGWYllBq677jrAMxJ08uRJACZPngzA4cOHzWfPP/88AI0bN+arr74K1TBTRSJ2hQsXBqxxZiaktFPEfXFxcTz77LOAlf66ePEiAG+++SZ///23x+8fO3aMQ4cOhWq4GcIfy4PJkyeb5osTJ04M9pCC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0XWK0KpVqwB46623AFi2bFmC+544cYJz584BMGXKFABy5crFpEmTgjvIABMbG8vff/8NwKxZswD46quvAPjzzz+N6iUqg5vYvn07AL179zbn1tdKZufOnQBGNfruu+9COUyf7NixA/AoAUOGDAGs2HtUVJTXz/Ke/CznKleuXIDn+ymql9sQxblJkyZ8//33QPxV6C233GJW4ELHjh0pXLhwaAaZAk6ePGnUDFGgt27dypw5cwDImDEj4PnugscluFatWgA8+uijgPX9djuiAiWl/vhC/k/keggVK1euBODff/81OVubNm0CYNiwYTz55JMAbN68GcAx38XDhw8DnntDhgwZEtxvyZIlgCfXNe4z3l/kuQIwaNAgAHLmzAkEThFyxETouuuuI126dF7b+vXrB7gvoe/bb7+lRYsWgGcSJ7zwwguAdaFJaGXx4sUMGzYMsB5aN998s+OPWxLY5IY7c+ZMM0mIS9asWcmSJUvIxhYopk2bBsBrr70GeB6mFSpUADwPSPA8WAE2bNhg5GsnTRbWr18PwPjx481ETW6+SSET9I0bNwIeOVp+dgMXL14011nz5s0BzzmUEFK+fPkAq4Dh6NGjZrIo7N69m88//zxUQ06Sq1evAtYia+zYsZw6dSrB/SUk1qhRI8DznZbEW1ls7t6929XhMVloJncCVLNmTWrUqBGEEaUMuafIZCdv3rwmjDRjxgwAevbsGZ7BxeGbb74BoGHDhuTNmzfB/UqWLAlA9+7dzURVngWnT58mR44cgGeCDlYof968eT4FhNtvvx2ARx55JNXHYEdDY4qiKIqiRCyOUIT2798fL2F4//79AInKbk7kkUceMZJ7+fLlAVi0aJFJOJVZrkjWXbp0MduuXbsGQP369UM4Yv+Rss4hQ4YQHR0NWMnfRYoUoUuXLoB1HGPHjgWgbt26JrziJkQJknM3btw4k3B87NgxAGbPng14Qk9NmzYFMImqTuK5555L9u+I+nPPPfcAUKZMmYCOKViIWvnmm28yc+ZMr/dy5szJyJEjASvh8syZM4AntCJFGoLTlFkpsRaV6o477jAlyKJ6nT171oSlReG6cuUK4AnBiEok1iRuVoPACmsJvpSemjVrhjwROi0j6lVSFCxYEID27duTJ08ewFJ1Nm3aRPXq1QEYPXo0YN1zfVGkSBEWLFgAQPHixVM28ARQ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WXgOHDjgNCKKHgBOhDpu3Li4jKsokDg9OFKu98hLL73kIhCKiCla8Oeff7pzHKwfufzyy6M/6DyQvk62CMFcc801zila0axp06bl6shfqVIlF51u27YtEPg7SHerf6Ny5cpFeAThkVlpx44dQz6TDU737t2duFs8+uijIe/9YFTo8NBDD7lt06dPB7x3ZVE9X2M2EVJ4uWrVqk44+9xzzwGBl6JelHKdlneGwn7BKK3kJxTWnDp1KqtXr872WenSpV0Vh27kZOKYY45xIUxVMa1cudI9rGIZxo2U4ElQXhViSp+Fq4IL3qaHYKKj6zhRJkJacCiFu3jxYrp37w54zxa5noNXtaWHdt26dcNWcvmF0aNHZ5sACaXYVEmkdEtBqnTihRa+r7/+eshn9evXB7zUIMDRRx8NeFWTHTt2DEk9Aa46N1788MMPgLeYANxEJ1hi0L59+2w/c0Piav2d2rdv7wocJJKX8DqahJsAScitey09Pd15WinVmTPdl5PJkycD8MEHHwDQsmVLN8FLS0s7/IEHYakxwzAMwzCSlpiLpT/99FMngtPM/+2333azPs34tOKsVKmScyVWKaREYn5CM++c0SCAdu3a5Srq2rJli/MPKs506tQJ8MKcfk8D5ieQzisSpP2DP9P+idyT7LvvvnP3pX76uXQevNJzlaKPHj3aPX/C7avnT1GU5MaC3bt3u55TEoKvXbuWn3/+GQhEqMHzMuvduzeDBw8G/JmShsDzEjz35dNOO81FguSe/fLLLzsPK4mlr776asDzcQNPhPvCCy84B3E/UbNmTeDwRO36O9SvX99FOffs2QME0mWxPs9//PGHEzOvX78eCDicq7T//vvvz/d3LFmyJERmMm/ePHr06AEUvX+bRYQMwzAMw0haYh4RGjZsGM8//3y2bfPnz2fTpk2Al+9VeW7JkiVd/lR570mTJmUrMfQrcqCVmDEc69atCzGbPPLII51wrriglblWJ37VzARHbBTZCV595BYJatq0aViTxUR00M6N+++/3523YcOGAV6/QL8jHYM0TsHI5uGZZ55JmEiQeOyxx5zZnlbh8+fPZ+HChYCns5BFwN133+0sBV577TXAM3H0A6tWrXJWJNLIPPbYY05fIr1Wamqqex9IjxIcCRIycPVr5LIoxqVna5MmTVxESJHN9evXc8YZZxz2vxEJ6ojQ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\n", 30 | "text/plain": [ 31 | "
" 32 | ] 33 | }, 34 | "metadata": {}, 35 | "output_type": "display_data" 36 | } 37 | ], 38 | "source": [ 39 | "plt.figure(figsize=(10,10))\n", 40 | "for i in range(100):\n", 41 | " plt.subplot(10,10,i+1)\n", 42 | " plt.xticks([])\n", 43 | " plt.yticks([])\n", 44 | " plt.imshow(x_train[i], cmap=plt.cm.binary)\n", 45 | "plt.show()" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 16, 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "img_rows = 28\n", 55 | "img_cols = 28\n", 56 | "\n", 57 | "model = tf.keras.models.Sequential([\n", 58 | " tf.keras.layers.Flatten(input_shape=(img_rows, img_cols)),\n", 59 | " tf.keras.layers.Dense(512, activation=tf.nn.relu),\n", 60 | " tf.keras.layers.Dropout(0.2),\n", 61 | " tf.keras.layers.Dense(10, activation=tf.nn.softmax)\n", 62 | "])" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 17, 68 | "metadata": {}, 69 | "outputs": [ 70 | { 71 | "name": "stdout", 72 | "output_type": "stream", 73 | "text": [ 74 | "_________________________________________________________________\n", 75 | "Layer (type) Output Shape Param # \n", 76 | "=================================================================\n", 77 | "flatten_1 (Flatten) (None, 784) 0 \n", 78 | "_________________________________________________________________\n", 79 | "dense_2 (Dense) (None, 512) 401920 \n", 80 | "_________________________________________________________________\n", 81 | "dropout_1 (Dropout) (None, 512) 0 \n", 82 | "_________________________________________________________________\n", 83 | "dense_3 (Dense) (None, 10) 5130 \n", 84 | "=================================================================\n", 85 | "Total params: 407,050\n", 86 | "Trainable params: 407,050\n", 87 | "Non-trainable params: 0\n", 88 | "_________________________________________________________________\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "# Take a look at the model summary\n", 94 | "model.summary()" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 18, 100 | "metadata": {}, 101 | "outputs": [], 102 | "source": [ 103 | "model.compile(optimizer='adam',\n", 104 | " loss='sparse_categorical_crossentropy',\n", 105 | " metrics=['accuracy'])" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 7, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "name": "stdout", 115 | "output_type": "stream", 116 | "text": [ 117 | "60000/60000 [==============================] - 14s 238us/sample - loss: 0.2211 - acc: 0.9347\n", 118 | "10000/10000 [==============================] - 1s 72us/sample - loss: 0.1057 - acc: 0.9673\n" 119 | ] 120 | }, 121 | { 122 | "data": { 123 | "text/plain": [ 124 | "[0.10567356178797782, 0.9673]" 125 | ] 126 | }, 127 | "execution_count": 7, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "model.fit(x_train, y_train, epochs=1)\n", 134 | "model.evaluate(x_test, y_test)" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 8, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [ 143 | "from IPython.display import HTML" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 9, 149 | "metadata": {}, 150 | "outputs": [], 151 | "source": [ 152 | "input_form = \"\"\"\n", 153 | "\n", 154 | "\n", 155 | "\n", 156 | "\n", 163 | "\n", 164 | "\n", 169 | "\n", 170 | "
\n", 157 | "\n", 158 | "
\n", 159 | "\n", 160 | "\n", 161 | "\n", 162 | "
\n", 165 | "\n", 166 | "\n", 167 | "\n", 168 | "
\n", 171 | "\n", 172 | "\"\"\"\n", 173 | "\n", 174 | "\n", 175 | "\n", 176 | "javascript = \"\"\"\n", 177 | "\n", 178 | "\n", 255 | "\n", 256 | "\"\"\"" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 12, 262 | "metadata": {}, 263 | "outputs": [ 264 | { 265 | "data": { 266 | "text/html": [ 267 | "\n", 268 | "\n", 269 | "\n", 270 | "\n", 271 | "\n", 278 | "\n", 279 | "\n", 284 | "\n", 285 | "
\n", 272 | "\n", 273 | "
\n", 274 | "\n", 275 | "\n", 276 | "\n", 277 | "
\n", 280 | "\n", 281 | "\n", 282 | "\n", 283 | "
\n", 286 | "\n", 287 | "\n", 288 | "\n", 289 | "\n", 366 | "\n" 367 | ], 368 | "text/plain": [ 369 | "" 370 | ] 371 | }, 372 | "execution_count": 12, 373 | "metadata": {}, 374 | "output_type": "execute_result" 375 | } 376 | ], 377 | "source": [ 378 | "HTML(input_form + javascript)" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": 13, 384 | "metadata": { 385 | "scrolled": true 386 | }, 387 | "outputs": [ 388 | { 389 | "data": { 390 | "text/plain": [ 391 | "" 392 | ] 393 | }, 394 | "execution_count": 13, 395 | "metadata": {}, 396 | "output_type": "execute_result" 397 | }, 398 | { 399 | "data": { 400 | "image/png": "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\n", 401 | "text/plain": [ 402 | "
" 403 | ] 404 | }, 405 | "metadata": { 406 | "needs_background": "light" 407 | }, 408 | "output_type": "display_data" 409 | } 410 | ], 411 | "source": [ 412 | "image_3darray = np.array(image).reshape([1,img_rows,img_cols])\n", 413 | "result = model.predict(image_3darray)\n", 414 | "plt.bar(list(range(10)), list(result.reshape([10])))" 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "execution_count": null, 420 | "metadata": {}, 421 | "outputs": [], 422 | "source": [] 423 | } 424 | ], 425 | "metadata": { 426 | "kernelspec": { 427 | "display_name": "Python 3", 428 | "language": "python", 429 | "name": "python3" 430 | }, 431 | "language_info": { 432 | "codemirror_mode": { 433 | "name": "ipython", 434 | "version": 3 435 | }, 436 | "file_extension": ".py", 437 | "mimetype": "text/x-python", 438 | "name": "python", 439 | "nbconvert_exporter": "python", 440 | "pygments_lexer": "ipython3", 441 | "version": "3.7.1" 442 | } 443 | }, 444 | "nbformat": 4, 445 | "nbformat_minor": 1 446 | } 447 | -------------------------------------------------------------------------------- /crawling.csv: -------------------------------------------------------------------------------- 1 | rank,title,author,publisher 2 | 1,설민석의 한국사 대모험 9, 설민석,아이휴먼 3 | 2,공부머리 독서법, 최승필,책구루 4 | 3,철학은 어떻게 삶의 무기가 되는가, 야마구치 슈,다산초당 5 | 4,고요할수록 밝아지는 것들, 혜민,수오서재 6 | 5,에어프라이어 만능 레시피북, 강지현,엔트리 7 | 6,선재국어 나침판 실전 모의고사 vol. 1, 이선재,에스티유니타스 8 | 7,아주 작은 습관의 힘, 제임스 클리어,비즈니스북스 9 | 8,해커스 토익 기출 보카, David Cho,해커스어학연구소 10 | 9,말센스, 셀레스트 헤들리,스몰빅라이프 11 | 10,우린 너무 몰랐다, 김용옥,통나무 12 | 11,나는 나로 살기로 했다, 김수현,마음의숲 13 | 12,인어가 잠든 집, 히가시노 게이고,재인 14 | 13,댄 애리얼리 부의 감각, 댄 애리얼리,청림출판 15 | 14,ETS 토익 정기시험 기출문제집 1000 READING, ETS,YBM 16 | 15,이동기 영어 실전동형 모의고사 1, 이동기,에스티유니타스 17 | 16,ETS 토익 정기시험 기출문제집 1000 LISTENING, ETS,YBM 18 | 17,꽃을 보듯 너를 본다, 나태주,지혜 19 | 18,스즈키 바이올린 교본 1, 세광음악 편집부,세광음악출판사 20 | 19,아이를 위한 하루 한 줄 인문학, 김종원,청림라이프 21 | 20,시나공 정보처리기사 실기, 한기준,길벗 22 | 21,수미네 반찬, 김수미,성안당 23 | 22,이동기 영어 기적의 특강, 이동기,에스티유니타스 24 | 23,던전에서 만남을 추구하면 안 되는 걸까 14, 오모리 후지노,소미미디어 25 | 24,해커스 토익 스타트 리딩(RC) (신토익 Edition), David Cho,해커스어학연구소 26 | 25,만복이네 떡집, 김리리,비룡소 27 | -------------------------------------------------------------------------------- /doc.txt: -------------------------------------------------------------------------------- 1 | It's time to examine a fundamental data type that we've been studiously avoiding so far. 2 | In earlier chapters we focused on a text as a list of words. 3 | We didn't look too closely at words and how they are handled in the programming language. 4 | By using NLTK's corpus interface we were able to ignore the files that these texts had come from. 5 | The contents of a word, and of a file, are represented by programming languages as a fundamental data type known as a string. 6 | In this section we explore strings in detail, and show the connection between strings, words, texts and files. -------------------------------------------------------------------------------- /extractINFO.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "['I', 'am', 'Jhon', 'from', 'America', 'and', 'would', 'like', 'to', 'go', 'to', 'Starbuck']\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "import nltk\n", 18 | "sent = \"I am Jhon from America and would like to go to Starbuck\"\n", 19 | "token = nltk.word_tokenize(sent)\n", 20 | "print(token)" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 5, 26 | "metadata": {}, 27 | "outputs": [ 28 | { 29 | "data": { 30 | "text/plain": [ 31 | "'\\nPOS tag list:\\n\\nCC\\tcoordinating conjunction\\nCD\\tcardinal digit\\nDT\\tdeterminer\\nEX\\texistential there (like: \"there is\" ... think of it like \"there exists\")\\nFW\\tforeign word\\nIN\\tpreposition/subordinating conjunction\\nJJ\\tadjective\\t\\'big\\'\\nJJR\\tadjective, comparative\\t\\'bigger\\'\\nJJS\\tadjective, superlative\\t\\'biggest\\'\\nLS\\tlist marker\\t1)\\nMD\\tmodal\\tcould, will\\nNN\\tnoun, singular \\'desk\\'\\nNNS\\tnoun plural\\t\\'desks\\'\\nNNP\\tproper noun, singular\\t\\'Harrison\\'\\nNNPS\\tproper noun, plural\\t\\'Americans\\'\\nPDT\\tpredeterminer\\t\\'all the kids\\'\\nPOS\\tpossessive ending\\tparent\\'s\\nPRP\\tpersonal pronoun\\tI, he, she\\nPRP$\\tpossessive pronoun\\tmy, his, hers\\nRB\\tadverb\\tvery, silently,\\nRBR\\tadverb, comparative\\tbetter\\nRBS\\tadverb, superlative\\tbest\\nRP\\tparticle\\tgive up\\nTO\\tto\\tgo \\'to\\' the store.\\nUH\\tinterjection\\terrrrrrrrm\\nVB\\tverb, base form\\ttake\\nVBD\\tverb, past tense\\ttook\\nVBG\\tverb, gerund/present participle\\ttaking\\nVBN\\tverb, past participle\\ttaken\\nVBP\\tverb, sing. present, non-3d\\ttake\\nVBZ\\tverb, 3rd person sing. present\\ttakes\\nWDT\\twh-determiner\\twhich\\nWP\\twh-pronoun\\twho, what\\nWP$\\tpossessive wh-pronoun\\twhose\\nWRB\\twh-abverb\\twhere, when\\n'" 32 | ] 33 | }, 34 | "execution_count": 5, 35 | "metadata": {}, 36 | "output_type": "execute_result" 37 | } 38 | ], 39 | "source": [ 40 | "'''\n", 41 | "POS tag list:\n", 42 | "\n", 43 | "CC\tcoordinating conjunction\n", 44 | "CD\tcardinal digit\n", 45 | "DT\tdeterminer\n", 46 | "EX\texistential there (like: \"there is\" ... think of it like \"there exists\")\n", 47 | "FW\tforeign word\n", 48 | "IN\tpreposition/subordinating conjunction\n", 49 | "JJ\tadjective\t'big'\n", 50 | "JJR\tadjective, comparative\t'bigger'\n", 51 | "JJS\tadjective, superlative\t'biggest'\n", 52 | "LS\tlist marker\t1)\n", 53 | "MD\tmodal\tcould, will\n", 54 | "NN\tnoun, singular 'desk'\n", 55 | "NNS\tnoun plural\t'desks'\n", 56 | "NNP\tproper noun, singular\t'Harrison'\n", 57 | "NNPS\tproper noun, plural\t'Americans'\n", 58 | "PDT\tpredeterminer\t'all the kids'\n", 59 | "POS\tpossessive ending\tparent's\n", 60 | "PRP\tpersonal pronoun\tI, he, she\n", 61 | "PRP$\tpossessive pronoun\tmy, his, hers\n", 62 | "RB\tadverb\tvery, silently,\n", 63 | "RBR\tadverb, comparative\tbetter\n", 64 | "RBS\tadverb, superlative\tbest\n", 65 | "RP\tparticle\tgive up\n", 66 | "TO\tto\tgo 'to' the store.\n", 67 | "UH\tinterjection\terrrrrrrrm\n", 68 | "VB\tverb, base form\ttake\n", 69 | "VBD\tverb, past tense\ttook\n", 70 | "VBG\tverb, gerund/present participle\ttaking\n", 71 | "VBN\tverb, past participle\ttaken\n", 72 | "VBP\tverb, sing. present, non-3d\ttake\n", 73 | "VBZ\tverb, 3rd person sing. present\ttakes\n", 74 | "WDT\twh-determiner\twhich\n", 75 | "WP\twh-pronoun\twho, what\n", 76 | "WP$\tpossessive wh-pronoun\twhose\n", 77 | "WRB\twh-abverb\twhere, when\n", 78 | "'''" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 6, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "name": "stdout", 88 | "output_type": "stream", 89 | "text": [ 90 | "[('I', 'PRP'), ('am', 'VBP'), ('Jhon', 'RB'), ('from', 'IN'), ('America', 'NNP'), ('and', 'CC'), ('would', 'MD'), ('like', 'VB'), ('to', 'TO'), ('go', 'VB'), ('to', 'TO'), ('Starbuck', 'NNP')]\n" 91 | ] 92 | } 93 | ], 94 | "source": [ 95 | "pos = nltk.pos_tag(token)\n", 96 | "print(pos)" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 7, 102 | "metadata": {}, 103 | "outputs": [ 104 | { 105 | "name": "stdout", 106 | "output_type": "stream", 107 | "text": [ 108 | "(S\n", 109 | " I/PRP\n", 110 | " am/VBP\n", 111 | " Jhon/RB\n", 112 | " from/IN\n", 113 | " (GPE America/NNP)\n", 114 | " and/CC\n", 115 | " would/MD\n", 116 | " like/VB\n", 117 | " to/TO\n", 118 | " go/VB\n", 119 | " to/TO\n", 120 | " (PERSON Starbuck/NNP))\n" 121 | ] 122 | } 123 | ], 124 | "source": [ 125 | "NE = nltk.ne_chunk(pos)\n", 126 | "print(NE)\n", 127 | "# common Entity types: ORGANIZATION, PERSON, LOCATION, DATE, TIME, MONEY, and GPE (geo-political entity)" 128 | ] 129 | } 130 | ], 131 | "metadata": { 132 | "kernelspec": { 133 | "display_name": "Python 3", 134 | "language": "python", 135 | "name": "python3" 136 | }, 137 | "language_info": { 138 | "codemirror_mode": { 139 | "name": "ipython", 140 | "version": 3 141 | }, 142 | "file_extension": ".py", 143 | "mimetype": "text/x-python", 144 | "name": "python", 145 | "nbconvert_exporter": "python", 146 | "pygments_lexer": "ipython3", 147 | "version": "3.7.1" 148 | } 149 | }, 150 | "nbformat": 4, 151 | "nbformat_minor": 2 152 | } 153 | -------------------------------------------------------------------------------- /imdb.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Import modules" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 25, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "# TensorFlow and tf.keras\n", 17 | "import tensorflow\n", 18 | "from tensorflow.keras.models import Sequential\n", 19 | "from tensorflow.keras.layers import Dense, Embedding, GlobalAveragePooling1D\n", 20 | "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", 21 | "\n", 22 | "# Helper libraries\n", 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "### load data \n", 32 | "- #### dataset (x: imdb article -> y: text type)\n", 33 | "- #### word2idx dict (key: word; value: index)" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 27, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "vocab_size = 10000\n", 43 | "(x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.imdb.load_data(num_words=vocab_size)\n", 44 | "word2idx = tensorflow.keras.datasets.imdb.get_word_index()" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "### modifiy word2idx dict (to reflect x_train, x_text)" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 28, 57 | "metadata": {}, 58 | "outputs": [], 59 | "source": [ 60 | "word2idx = {k:v+3 for k, v in word2idx.items()}\n", 61 | "word2idx[''] = 0\n", 62 | "word2idx[''] = 1\n", 63 | "word2idx[''] = 2\n", 64 | "word2idx[''] = 3" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "### create idx2word: inverse of word2idx" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 29, 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "idx2word = {v:k for k, v in word2idx.items()}" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "### padding x_train, x_test" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": 30, 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | "x_train = pad_sequences(x_train, value=word2idx[''], padding='post', maxlen=256)\n", 97 | "x_test = pad_sequences(x_test, value=word2idx[''], padding='post', maxlen=256)" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "### create model" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": 7, 110 | "metadata": {}, 111 | "outputs": [ 112 | { 113 | "name": "stdout", 114 | "output_type": "stream", 115 | "text": [ 116 | "WARNING:tensorflow:From /Users/jookai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", 117 | "Instructions for updating:\n", 118 | "Colocations handled automatically by placer.\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "model = Sequential()\n", 124 | "model.add(Embedding(vocab_size, 128))\n", 125 | "model.add(GlobalAveragePooling1D())\n", 126 | "model.add(Dense(1, activation='sigmoid'))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 8, 132 | "metadata": {}, 133 | "outputs": [ 134 | { 135 | "name": "stdout", 136 | "output_type": "stream", 137 | "text": [ 138 | "_________________________________________________________________\n", 139 | "Layer (type) Output Shape Param # \n", 140 | "=================================================================\n", 141 | "embedding (Embedding) (None, None, 128) 1280000 \n", 142 | "_________________________________________________________________\n", 143 | "global_average_pooling1d (Gl (None, 128) 0 \n", 144 | "_________________________________________________________________\n", 145 | "dense (Dense) (None, 1) 129 \n", 146 | "=================================================================\n", 147 | "Total params: 1,280,129\n", 148 | "Trainable params: 1,280,129\n", 149 | "Non-trainable params: 0\n", 150 | "_________________________________________________________________\n" 151 | ] 152 | } 153 | ], 154 | "source": [ 155 | "model.summary()" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 9, 161 | "metadata": { 162 | "scrolled": true 163 | }, 164 | "outputs": [], 165 | "source": [ 166 | "Adam = tensorflow.keras.optimizers.Adam\n", 167 | "model.compile(optimizer = Adam(lr=0.0005), loss='binary_crossentropy', metrics=['accuracy'])" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": 10, 173 | "metadata": {}, 174 | "outputs": [ 175 | { 176 | "name": "stdout", 177 | "output_type": "stream", 178 | "text": [ 179 | "(None, None)\n", 180 | "(None, 1)\n" 181 | ] 182 | } 183 | ], 184 | "source": [ 185 | "print(model.input_shape)\n", 186 | "print(model.output_shape)" 187 | ] 188 | }, 189 | { 190 | "cell_type": "markdown", 191 | "metadata": {}, 192 | "source": [ 193 | "### train model" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 11, 199 | "metadata": { 200 | "scrolled": false 201 | }, 202 | "outputs": [ 203 | { 204 | "name": "stdout", 205 | "output_type": "stream", 206 | "text": [ 207 | "Train on 16750 samples, validate on 8250 samples\n", 208 | "WARNING:tensorflow:From /Users/jookai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", 209 | "Instructions for updating:\n", 210 | "Use tf.cast instead.\n", 211 | "Epoch 1/10\n", 212 | "16750/16750 [==============================] - 15s 898us/sample - loss: 0.6549 - acc: 0.7109 - val_loss: 0.5854 - val_acc: 0.7869\n", 213 | "Epoch 2/10\n", 214 | "16750/16750 [==============================] - 14s 846us/sample - loss: 0.5036 - acc: 0.8279 - val_loss: 0.4434 - val_acc: 0.8398\n", 215 | "Epoch 3/10\n", 216 | "16750/16750 [==============================] - 15s 871us/sample - loss: 0.3854 - acc: 0.8692 - val_loss: 0.3679 - val_acc: 0.8628\n", 217 | "Epoch 4/10\n", 218 | "16750/16750 [==============================] - 15s 889us/sample - loss: 0.3204 - acc: 0.8867 - val_loss: 0.3291 - val_acc: 0.8739\n", 219 | "Epoch 5/10\n", 220 | "16750/16750 [==============================] - 15s 869us/sample - loss: 0.2799 - acc: 0.9016 - val_loss: 0.3064 - val_acc: 0.8805\n", 221 | "Epoch 6/10\n", 222 | "16750/16750 [==============================] - 15s 877us/sample - loss: 0.2506 - acc: 0.9116 - val_loss: 0.2929 - val_acc: 0.8847\n", 223 | "Epoch 7/10\n", 224 | "16750/16750 [==============================] - 15s 869us/sample - loss: 0.2277 - acc: 0.9198 - val_loss: 0.2841 - val_acc: 0.8867\n", 225 | "Epoch 8/10\n", 226 | "16750/16750 [==============================] - 14s 865us/sample - loss: 0.2082 - acc: 0.9269 - val_loss: 0.2788 - val_acc: 0.8882\n", 227 | "Epoch 9/10\n", 228 | "16750/16750 [==============================] - 14s 864us/sample - loss: 0.1914 - acc: 0.9332 - val_loss: 0.2761 - val_acc: 0.8898\n", 229 | "Epoch 10/10\n", 230 | "16750/16750 [==============================] - 15s 911us/sample - loss: 0.1764 - acc: 0.9395 - val_loss: 0.2787 - val_acc: 0.8876\n" 231 | ] 232 | } 233 | ], 234 | "source": [ 235 | "history = model.fit(x_train, y_train, epochs=10, validation_split=0.33)" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 12, 241 | "metadata": {}, 242 | "outputs": [ 243 | { 244 | "data": { 245 | "image/png": "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\n", 246 | "text/plain": [ 247 | "
" 248 | ] 249 | }, 250 | "metadata": { 251 | "needs_background": "light" 252 | }, 253 | "output_type": "display_data" 254 | }, 255 | { 256 | "data": { 257 | "image/png": "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\n", 258 | "text/plain": [ 259 | "
" 260 | ] 261 | }, 262 | "metadata": { 263 | "needs_background": "light" 264 | }, 265 | "output_type": "display_data" 266 | } 267 | ], 268 | "source": [ 269 | "# summarize history for accuracy\n", 270 | "plt.plot(history.history['acc'])\n", 271 | "plt.plot(history.history['val_acc'])\n", 272 | "plt.title('model accuracy')\n", 273 | "plt.ylabel('accuracy')\n", 274 | "plt.xlabel('epoch')\n", 275 | "plt.legend(['train', 'test'], loc='upper left')\n", 276 | "plt.show()\n", 277 | "# summarize history for loss\n", 278 | "plt.plot(history.history['loss'])\n", 279 | "plt.plot(history.history['val_loss'])\n", 280 | "plt.title('model loss')\n", 281 | "plt.ylabel('loss')\n", 282 | "plt.xlabel('epoch')\n", 283 | "plt.legend(['train', 'test'], loc='upper left')\n", 284 | "plt.show()" 285 | ] 286 | }, 287 | { 288 | "cell_type": "markdown", 289 | "metadata": {}, 290 | "source": [ 291 | "### test model" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 14, 297 | "metadata": { 298 | "scrolled": true 299 | }, 300 | "outputs": [ 301 | { 302 | "name": "stdout", 303 | "output_type": "stream", 304 | "text": [ 305 | "25000/25000 [==============================] - 3s 117us/sample - loss: 0.2913 - acc: 0.8798\n" 306 | ] 307 | }, 308 | { 309 | "data": { 310 | "text/plain": [ 311 | "[0.2913140876865387, 0.8798]" 312 | ] 313 | }, 314 | "execution_count": 14, 315 | "metadata": {}, 316 | "output_type": "execute_result" 317 | } 318 | ], 319 | "source": [ 320 | "model.evaluate(x_test, y_test)" 321 | ] 322 | }, 323 | { 324 | "cell_type": "markdown", 325 | "metadata": {}, 326 | "source": [ 327 | "### inference" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 23, 333 | "metadata": {}, 334 | "outputs": [ 335 | { 336 | "name": "stdout", 337 | "output_type": "stream", 338 | "text": [ 339 | " a quick glance at the premise of this film would seem to indicate just another dumb slash fest the type where sex equals death and the actors are all annoying stereotypes you actually want to die however delivers considerably more br br rather than focus on bare flesh and gore though there is a little of each no sex however the flick focuses on delivering impending dread tension amidst a lovely backdrop these feelings are further by a cast of realistically likable characters and that are more amoral than cardboard of evil oh yeah george kennedy is here too and when is that not a good thing br br if you liked wrong turn then watch this to see where much of its' came from \n", 340 | "1\n", 341 | "[[0.16107702]]\n" 342 | ] 343 | } 344 | ], 345 | "source": [ 346 | "testID = 100\n", 347 | "print(' '.join([idx2word[idx] for idx in x_test[testID]]))\n", 348 | "\n", 349 | "out = model.predict(x_test[testID].reshape(1,256))\n", 350 | "print(y_test[testID])\n", 351 | "print(out)" 352 | ] 353 | } 354 | ], 355 | "metadata": { 356 | "kernelspec": { 357 | "display_name": "Python 3", 358 | "language": "python", 359 | "name": "python3" 360 | }, 361 | "language_info": { 362 | "codemirror_mode": { 363 | "name": "ipython", 364 | "version": 3 365 | }, 366 | "file_extension": ".py", 367 | "mimetype": "text/x-python", 368 | "name": "python", 369 | "nbconvert_exporter": "python", 370 | "pygments_lexer": "ipython3", 371 | "version": "3.7.1" 372 | } 373 | }, 374 | "nbformat": 4, 375 | "nbformat_minor": 2 376 | } 377 | -------------------------------------------------------------------------------- /nlp.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import nltk, os" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 11, 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "data": { 19 | "text/plain": [ 20 | "['a', 'man', 'in', 'the', 'house']" 21 | ] 22 | }, 23 | "execution_count": 11, 24 | "metadata": {}, 25 | "output_type": "execute_result" 26 | } 27 | ], 28 | "source": [ 29 | "s = 'a man in the house' # untokenized string\n", 30 | "t = ['a', 'man', 'in', 'the', 'house'] # tokenized seqeuence of words as a list" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 15, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/plain": [ 41 | "" 42 | ] 43 | }, 44 | "execution_count": 15, 45 | "metadata": {}, 46 | "output_type": "execute_result" 47 | } 48 | ], 49 | "source": [ 50 | "a = nltk.Text(t)\n", 51 | "a" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 16, 57 | "metadata": {}, 58 | "outputs": [ 59 | { 60 | "data": { 61 | "text/plain": [ 62 | "" 63 | ] 64 | }, 65 | "execution_count": 16, 66 | "metadata": {}, 67 | "output_type": "execute_result" 68 | } 69 | ], 70 | "source": [ 71 | "nltk.Text(s.split())" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 17, 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "raw = open(os.getcwd()+r'/06_01.txt', encoding = 'utf8').read()" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 18, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "\n", 93 | "1154507\n", 94 | "The Project Gutenberg EBook of Crime and Punishment, by Fyodor Dostoevsky\n", 95 | "\n", 96 | "\n" 97 | ] 98 | } 99 | ], 100 | "source": [ 101 | "print(type(raw))\n", 102 | "print(len(raw))\n", 103 | "print(raw[:75])" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 19, 109 | "metadata": {}, 110 | "outputs": [ 111 | { 112 | "name": "stdout", 113 | "output_type": "stream", 114 | "text": [ 115 | "\n", 116 | "257726\n", 117 | "['The', 'Project', 'Gutenberg', 'EBook', 'of', 'Crime', 'and', 'Punishment', ',', 'by']\n" 118 | ] 119 | } 120 | ], 121 | "source": [ 122 | "tokens = nltk.word_tokenize(raw)\n", 123 | "print(type(tokens))\n", 124 | "print(len(tokens))\n", 125 | "print(tokens[:10])" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 20, 131 | "metadata": {}, 132 | "outputs": [ 133 | { 134 | "name": "stdout", 135 | "output_type": "stream", 136 | "text": [ 137 | "\n", 138 | "['The', 'Project', 'Gutenberg', 'EBook', 'of', 'Crime', 'and', 'Punishment', ',', 'by']\n", 139 | "Katerina Ivanovna; Pyotr Petrovitch; Pulcheria Alexandrovna; Avdotya\n", 140 | "Romanovna; Rodion Romanovitch; Marfa Petrovna; Sofya Semyonovna; old\n", 141 | "woman; Project Gutenberg-tm; Porfiry Petrovitch; Amalia Ivanovna;\n", 142 | "great deal; young man; Nikodim Fomitch; Ilya Petrovitch; Project\n", 143 | "Gutenberg; Andrey Semyonovitch; Hay Market; Dmitri Prokofitch; Good\n", 144 | "heavens\n" 145 | ] 146 | } 147 | ], 148 | "source": [ 149 | "text = nltk.Text(tokens)\n", 150 | "print(type(text))\n", 151 | "print(text[:10])\n", 152 | "text.collocations()\n" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 21, 158 | "metadata": {}, 159 | "outputs": [ 160 | { 161 | "name": "stdout", 162 | "output_type": "stream", 163 | "text": [ 164 | "Displaying 25 of 162 matches:\n", 165 | "and were more frequent in periods of great strain . In 1859 he was allowed to r\n", 166 | "ndency and of late she had read with great interest a book she got through Mr. \n", 167 | " the bosom of her family ... . And a great deal more ... . Quite excusable , si\n", 168 | "that you had heard that Dounia had a great deal to put up with in the Svidrigra\n", 169 | "g will she has . Dounia can endure a great deal and even in the most difficult \n", 170 | " that letter she reproached him with great heat and indignation for the basenes\n", 171 | "putation ; they had seen and known a great deal more than Mr. Svidrigailov had \n", 172 | "n other people ’ s . In my opinion a great deal , a very great deal of all this\n", 173 | " In my opinion a great deal , a very great deal of all this was unnecessary ; b\n", 174 | " . He is a very busy man and is in a great hurry to get to Petersburg , so that\n", 175 | " me that , though he is not a man of great education , he is clever and seems t\n", 176 | " very well . Of course , there is no great love either on his side , or on hers\n", 177 | "tted the matter has been arranged in great haste . Besides he is a man of great\n", 178 | "great haste . Besides he is a man of great prudence and he will see , to be sur\n", 179 | "d that she is ready to put up with a great deal , if only their future relation\n", 180 | " off for Petersburg , where he has a great deal of business , and he wants to o\n", 181 | "a or I breathed a word to him of the great hopes we have of his helping us to p\n", 182 | "ites that ‘ Dounia can put up with a great deal. ’ I know that very well . I kn\n", 183 | "at , that ‘ Dounia can put up with a great deal. ’ If she could put up with Mr.\n", 184 | "it , she certainly can put up with a great deal . And now mother and she have t\n", 185 | "e young , and she was walking in the great heat bareheaded and with no parasol \n", 186 | "f the skirt , close to the waist : a great piece was rent and hanging loose . A\n", 187 | "ts or conversations . He worked with great intensity without sparing himself , \n", 188 | " uproarious and was reputed to be of great physical strength . One night , when\n", 189 | ". His legs felt suddenly heavy and a great drowsiness came upon him . He turned\n" 190 | ] 191 | } 192 | ], 193 | "source": [ 194 | "text.concordance('great', 79, 25)\n" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 22, 200 | "metadata": {}, 201 | "outputs": [ 202 | { 203 | "name": "stdout", 204 | "output_type": "stream", 205 | "text": [ 206 | "[(' ', 198098), ('e', 115855), ('t', 85539), ('a', 75266), ('o', 68338)]\n", 207 | "[('e', 117092), ('t', 87996), ('a', 77916), ('o', 69326), ('n', 65617)]\n" 208 | ] 209 | }, 210 | { 211 | "data": { 212 | "text/plain": [ 213 | "['e', 't', 'a', 'o', 'n']" 214 | ] 215 | }, 216 | "execution_count": 22, 217 | "metadata": {}, 218 | "output_type": "execute_result" 219 | } 220 | ], 221 | "source": [ 222 | "raw = nltk.corpus.gutenberg.raw('melville-moby_dick.txt')\n", 223 | "fdist = nltk.FreqDist(raw)\n", 224 | "print(fdist.most_common(5))\n", 225 | "\n", 226 | "fdist = nltk.FreqDist(ch.lower() for ch in raw if ch.isalpha())\n", 227 | "print(fdist.most_common(5))\n", 228 | "[char for (char, count) in fdist.most_common(5)]" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 23, 234 | "metadata": {}, 235 | "outputs": [ 236 | { 237 | "data": { 238 | "text/plain": [ 239 | "['zymosis',\n", 240 | " 'zymosterol',\n", 241 | " 'zymosthenic',\n", 242 | " 'zymotechnic',\n", 243 | " 'zymotechnical',\n", 244 | " 'zymotechnics',\n", 245 | " 'zymotechny',\n", 246 | " 'zymotic',\n", 247 | " 'zymotically',\n", 248 | " 'zymotize',\n", 249 | " 'zymotoxic',\n", 250 | " 'zymurgy',\n", 251 | " 'Zyrenian',\n", 252 | " 'Zyrian',\n", 253 | " 'Zyryan',\n", 254 | " 'zythem',\n", 255 | " 'Zythia',\n", 256 | " 'zythum',\n", 257 | " 'Zyzomys']" 258 | ] 259 | }, 260 | "execution_count": 23, 261 | "metadata": {}, 262 | "output_type": "execute_result" 263 | } 264 | ], 265 | "source": [ 266 | "nltk.corpus.words.words('en')[-20:-1]\n" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": 24, 272 | "metadata": {}, 273 | "outputs": [ 274 | { 275 | "data": { 276 | "text/plain": [ 277 | "235886" 278 | ] 279 | }, 280 | "execution_count": 24, 281 | "metadata": {}, 282 | "output_type": "execute_result" 283 | } 284 | ], 285 | "source": [ 286 | "len(nltk.corpus.words.words('en'))" 287 | ] 288 | } 289 | ], 290 | "metadata": { 291 | "kernelspec": { 292 | "display_name": "Python 3", 293 | "language": "python", 294 | "name": "python3" 295 | }, 296 | "language_info": { 297 | "codemirror_mode": { 298 | "name": "ipython", 299 | "version": 3 300 | }, 301 | "file_extension": ".py", 302 | "mimetype": "text/x-python", 303 | "name": "python", 304 | "nbconvert_exporter": "python", 305 | "pygments_lexer": "ipython3", 306 | "version": "3.7.1" 307 | } 308 | }, 309 | "nbformat": 4, 310 | "nbformat_minor": 1 311 | } 312 | -------------------------------------------------------------------------------- /normalization.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 10, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import nltk" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 14, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "raw = \"\"\"DENNIS: Listen, strange women lying in ponds distributing swords\n", 19 | "... is no basis for a system of government. Supreme executive power derives from\n", 20 | "... a mandate from the masses, not from some farcical aquatic ceremony.\"\"\"" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": null, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "# tokenize\n", 30 | "tokens = nltk.word_tokenize(raw)" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 17, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "name": "stdout", 40 | "output_type": "stream", 41 | "text": [ 42 | "['denni', ':', 'listen', ',', 'strang', 'women', 'lie', 'in', 'pond', 'distribut', 'sword', 'is', 'no', 'basi', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem', 'execut', 'power', 'deriv', 'from', 'a', 'mandat', 'from', 'the', 'mass', ',', 'not', 'from', 'some', 'farcic', 'aquat', 'ceremoni', '.']\n" 43 | ] 44 | } 45 | ], 46 | "source": [ 47 | "# stemming\n", 48 | "porter = nltk.PorterStemmer()\n", 49 | "print([porter.stem(t) for t in tokens])" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 18, 55 | "metadata": {}, 56 | "outputs": [ 57 | { 58 | "name": "stdout", 59 | "output_type": "stream", 60 | "text": [ 61 | "['den', ':', 'list', ',', 'strange', 'wom', 'lying', 'in', 'pond', 'distribut', 'sword', 'is', 'no', 'bas', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem', 'execut', 'pow', 'der', 'from', 'a', 'mand', 'from', 'the', 'mass', ',', 'not', 'from', 'som', 'farc', 'aqu', 'ceremony', '.']\n" 62 | ] 63 | } 64 | ], 65 | "source": [ 66 | "# stemming\n", 67 | "lancaster = nltk.LancasterStemmer()\n", 68 | "print([lancaster.stem(t) for t in tokens])" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "# lemmatize" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 20, 83 | "metadata": {}, 84 | "outputs": [ 85 | { 86 | "name": "stdout", 87 | "output_type": "stream", 88 | "text": [ 89 | "['DENNIS', ':', 'Listen', ',', 'strange', 'woman', 'lying', 'in', 'pond', 'distributing', 'sword', 'is', 'no', 'basis', 'for', 'a', 'system', 'of', 'government', '.', 'Supreme', 'executive', 'power', 'derives', 'from', 'a', 'mandate', 'from', 'the', 'mass', ',', 'not', 'from', 'some', 'farcical', 'aquatic', 'ceremony', '.']\n" 90 | ] 91 | } 92 | ], 93 | "source": [ 94 | "wnl = nltk.WordNetLemmatizer()\n", 95 | "print([wnl.lemmatize(t) for t in tokens])" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [] 104 | } 105 | ], 106 | "metadata": { 107 | "kernelspec": { 108 | "display_name": "Python 3", 109 | "language": "python", 110 | "name": "python3" 111 | }, 112 | "language_info": { 113 | "codemirror_mode": { 114 | "name": "ipython", 115 | "version": 3 116 | }, 117 | "file_extension": ".py", 118 | "mimetype": "text/x-python", 119 | "name": "python", 120 | "nbconvert_exporter": "python", 121 | "pygments_lexer": "ipython3", 122 | "version": "3.7.1" 123 | } 124 | }, 125 | "nbformat": 4, 126 | "nbformat_minor": 2 127 | } 128 | -------------------------------------------------------------------------------- /numpy.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# NumPy basics" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## 1. Creation" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 2, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import numpy as np\n", 24 | "import matplotlib.pyplot as plt" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 3, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "data": { 34 | "text/plain": [ 35 | "array([[8, 0, 0],\n", 36 | " [0, 0, 0]])" 37 | ] 38 | }, 39 | "execution_count": 3, 40 | "metadata": {}, 41 | "output_type": "execute_result" 42 | } 43 | ], 44 | "source": [ 45 | "np.empty([2,3], dtype='int')" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 4, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "array([[0., 0., 0.],\n", 57 | " [0., 0., 0.]])" 58 | ] 59 | }, 60 | "execution_count": 4, 61 | "metadata": {}, 62 | "output_type": "execute_result" 63 | } 64 | ], 65 | "source": [ 66 | "np.zeros([2,3])" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "data": { 76 | "text/plain": [ 77 | "array([0., 2., 4., 6., 8.])" 78 | ] 79 | }, 80 | "execution_count": 5, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "np.arange(0,10,2, dtype='float64')" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 6, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "data": { 96 | "text/plain": [ 97 | "array([ 0., 2., 4., 6., 8., 10.])" 98 | ] 99 | }, 100 | "execution_count": 6, 101 | "metadata": {}, 102 | "output_type": "execute_result" 103 | } 104 | ], 105 | "source": [ 106 | "np.linspace(0,10,6, dtype=float)" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 7, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/plain": [ 117 | "array([[1, 2, 3],\n", 118 | " [4, 5, 6]])" 119 | ] 120 | }, 121 | "execution_count": 7, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "X = np.array([[1,2,3],[4,5,6]])\n", 128 | "X" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 8, 134 | "metadata": {}, 135 | "outputs": [ 136 | { 137 | "data": { 138 | "text/plain": [ 139 | "array([[1., 2., 3.],\n", 140 | " [4., 5., 6.]])" 141 | ] 142 | }, 143 | "execution_count": 8, 144 | "metadata": {}, 145 | "output_type": "execute_result" 146 | } 147 | ], 148 | "source": [ 149 | "X.astype(np.float64)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 9, 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "array([[0, 0, 0],\n", 161 | " [0, 0, 0]])" 162 | ] 163 | }, 164 | "execution_count": 9, 165 | "metadata": {}, 166 | "output_type": "execute_result" 167 | } 168 | ], 169 | "source": [ 170 | "np.zeros_like(X)" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 10, 176 | "metadata": {}, 177 | "outputs": [ 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | "[-0.8398779 -0.66062864 1.30115222 0.50450206 0.95667305 0.60700552\n", 183 | " -1.01855037 0.95351948 0.08821886 0.99512932 0.41601486 0.60358232\n", 184 | " -1.38789209 0.29844135 0.57459243 0.22407801 0.88837517 1.17633349\n", 185 | " 0.56068165 2.05564786 1.08076566 0.31183736 -0.64344222 0.9709739\n", 186 | " -0.47544633 -1.70769647 1.00774162 -1.34928956 -1.6282407 -0.19706846\n", 187 | " -0.02835946 -1.5466965 0.26731914 -0.00338448 -0.54668531 -0.64565518\n", 188 | " -2.41783182 -1.09289534 -1.13593424 -1.35908579 -0.04977131 0.07063047\n", 189 | " 0.13563216 -0.57646697 -0.01080657 -0.16509508 -1.4860257 0.32366803\n", 190 | " 0.17495132 0.54037639 -0.45249398 -0.94513949 0.09107664 -0.09690239\n", 191 | " 0.04488749 -1.06009831 -0.3998957 1.33848238 0.66665498 -0.98073074\n", 192 | " 1.11223601 -0.1388641 0.38457044 0.59639466 -0.11875297 0.10574101\n", 193 | " 1.61805566 1.25025494 -0.87618395 0.83266569 1.59814316 -1.71705042\n", 194 | " -0.54227006 -1.11169427 -0.55534861 0.83079971 -1.13066581 0.39353686\n", 195 | " 1.48271714 -2.92470339 1.19285915 -0.03397218 1.7172698 1.67298858\n", 196 | " -2.23940405 -1.17391172 -0.97346826 -0.70007253 0.8866518 0.51946561\n", 197 | " -0.02202387 -0.37008492 0.66716361 0.87427593 0.18242455 -2.01162127\n", 198 | " 1.07647129 0.00683464 1.10721925 0.10419802]\n" 199 | ] 200 | }, 201 | { 202 | "data": { 203 | "image/png": "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\n", 204 | "text/plain": [ 205 | "
" 206 | ] 207 | }, 208 | "metadata": { 209 | "needs_background": "light" 210 | }, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "data = np.random.normal(0,1, 100)\n", 216 | "print(data)\n", 217 | "plt.hist(data, bins=10)\n", 218 | "plt.show()" 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "metadata": {}, 224 | "source": [ 225 | "## 2. Manipulation" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 11, 231 | "metadata": {}, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "array([[[1., 1., 1., 1.],\n", 237 | " [1., 1., 1., 1.],\n", 238 | " [1., 1., 1., 1.]],\n", 239 | "\n", 240 | " [[1., 1., 1., 1.],\n", 241 | " [1., 1., 1., 1.],\n", 242 | " [1., 1., 1., 1.]]])" 243 | ] 244 | }, 245 | "execution_count": 11, 246 | "metadata": {}, 247 | "output_type": "execute_result" 248 | } 249 | ], 250 | "source": [ 251 | "X = np.ones([2, 3, 4])\n", 252 | "X" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 22, 258 | "metadata": {}, 259 | "outputs": [ 260 | { 261 | "data": { 262 | "text/plain": [ 263 | "array([[[1., 1.],\n", 264 | " [1., 1.],\n", 265 | " [1., 1.]],\n", 266 | "\n", 267 | " [[1., 1.],\n", 268 | " [1., 1.],\n", 269 | " [1., 1.]],\n", 270 | "\n", 271 | " [[1., 1.],\n", 272 | " [1., 1.],\n", 273 | " [1., 1.]],\n", 274 | "\n", 275 | " [[1., 1.],\n", 276 | " [1., 1.],\n", 277 | " [1., 1.]]])" 278 | ] 279 | }, 280 | "execution_count": 22, 281 | "metadata": {}, 282 | "output_type": "execute_result" 283 | } 284 | ], 285 | "source": [ 286 | "Y = X.reshape(-1, 3, 2)\n", 287 | "Y" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": 23, 293 | "metadata": {}, 294 | "outputs": [ 295 | { 296 | "data": { 297 | "text/plain": [ 298 | "True" 299 | ] 300 | }, 301 | "execution_count": 23, 302 | "metadata": {}, 303 | "output_type": "execute_result" 304 | } 305 | ], 306 | "source": [ 307 | "np.allclose(X.reshape(-1, 3, 2), Y)" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": 24, 313 | "metadata": {}, 314 | "outputs": [], 315 | "source": [ 316 | "assert np.allclose(X.reshape(-1, 3, 2), Y)" 317 | ] 318 | }, 319 | { 320 | "cell_type": "markdown", 321 | "metadata": {}, 322 | "source": [ 323 | "## 3. NumPy I/O" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 40, 329 | "metadata": {}, 330 | "outputs": [], 331 | "source": [ 332 | "a = np.random.randint(0, 10, [2, 3])\n", 333 | "b = np.random.random([2, 3])\n", 334 | "np.savez(\"test\", a, b)" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": 41, 340 | "metadata": {}, 341 | "outputs": [ 342 | { 343 | "name": "stdout", 344 | "output_type": "stream", 345 | "text": [ 346 | "-rw-r--r-- 1 jookai staff 562 Apr 2 00:35 test.npz\n", 347 | "-rw-r--r-- 1 jookai staff 123438 Mar 14 23:19 test.wav\n" 348 | ] 349 | } 350 | ], 351 | "source": [ 352 | "!ls -al test*" 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "execution_count": 42, 358 | "metadata": {}, 359 | "outputs": [ 360 | { 361 | "name": "stdout", 362 | "output_type": "stream", 363 | "text": [ 364 | "No variables match your requested type.\n" 365 | ] 366 | } 367 | ], 368 | "source": [ 369 | "del a, b\n", 370 | "%who # Print all interactive variables" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": 46, 376 | "metadata": {}, 377 | "outputs": [ 378 | { 379 | "data": { 380 | "text/plain": [ 381 | "['arr_0', 'arr_1']" 382 | ] 383 | }, 384 | "execution_count": 46, 385 | "metadata": {}, 386 | "output_type": "execute_result" 387 | } 388 | ], 389 | "source": [ 390 | "npzfiles = np.load(\"test.npz\")\n", 391 | "npzfiles.files" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": 48, 397 | "metadata": {}, 398 | "outputs": [ 399 | { 400 | "data": { 401 | "text/plain": [ 402 | "array([[1, 5, 2],\n", 403 | " [1, 7, 0]])" 404 | ] 405 | }, 406 | "execution_count": 48, 407 | "metadata": {}, 408 | "output_type": "execute_result" 409 | } 410 | ], 411 | "source": [ 412 | "npzfiles['arr_0']" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": 49, 418 | "metadata": {}, 419 | "outputs": [ 420 | { 421 | "data": { 422 | "text/plain": [ 423 | "array([( 3.3 , 1.7 ), ( 4.4 , 2.76 ), ( 5.5 , 2.09 ), ( 6.71 , 3.19 ),\n", 424 | " ( 6.93 , 1.694), ( 4.168, 1.573), ( 9.779, 3.366), ( 6.182, 2.596),\n", 425 | " ( 7.59 , 2.53 ), ( 2.167, 1.221), ( 7.042, 2.827), (10.791, 3.465),\n", 426 | " ( 5.313, 1.65 ), ( 7.997, 2.904), ( 5.654, 2.42 ), ( 9.27 , 2.94 ),\n", 427 | " ( 3.1 , 1.3 )], dtype=[('X', '\n", 484 | "5\n", 485 | "(5, 2, 3)\n", 486 | "3\n", 487 | "30\n", 488 | "float64\n" 489 | ] 490 | } 491 | ], 492 | "source": [ 493 | "print(type(arr))\n", 494 | "print(len(arr))\n", 495 | "print(arr.shape)\n", 496 | "print(arr.ndim)\n", 497 | "print(arr.size)\n", 498 | "print(arr.dtype)" 499 | ] 500 | }, 501 | { 502 | "cell_type": "markdown", 503 | "metadata": {}, 504 | "source": [ 505 | "## 5. Operations" 506 | ] 507 | }, 508 | { 509 | "cell_type": "markdown", 510 | "metadata": {}, 511 | "source": [ 512 | "### 5.1 Arithmetic" 513 | ] 514 | }, 515 | { 516 | "cell_type": "code", 517 | "execution_count": 55, 518 | "metadata": {}, 519 | "outputs": [], 520 | "source": [ 521 | "a = np.arange(1, 5)\n", 522 | "b = np.arange(9, 5, -1)" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 56, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "name": "stdout", 532 | "output_type": "stream", 533 | "text": [ 534 | "[-8 -6 -4 -2]\n", 535 | "[ 9 16 21 24]\n" 536 | ] 537 | } 538 | ], 539 | "source": [ 540 | "print(a - b)\n", 541 | "print(a * b)\n" 542 | ] 543 | }, 544 | { 545 | "cell_type": "code", 546 | "execution_count": 57, 547 | "metadata": {}, 548 | "outputs": [], 549 | "source": [ 550 | "a = np.matrix(a)\n", 551 | "b = np.matrix(b)" 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 58, 557 | "metadata": {}, 558 | "outputs": [ 559 | { 560 | "data": { 561 | "text/plain": [ 562 | "matrix([[70]])" 563 | ] 564 | }, 565 | "execution_count": 58, 566 | "metadata": {}, 567 | "output_type": "execute_result" 568 | } 569 | ], 570 | "source": [ 571 | "a * b.T" 572 | ] 573 | }, 574 | { 575 | "cell_type": "code", 576 | "execution_count": 59, 577 | "metadata": {}, 578 | "outputs": [ 579 | { 580 | "data": { 581 | "text/plain": [ 582 | "matrix([[ 9, 8, 7, 6],\n", 583 | " [18, 16, 14, 12],\n", 584 | " [27, 24, 21, 18],\n", 585 | " [36, 32, 28, 24]])" 586 | ] 587 | }, 588 | "execution_count": 59, 589 | "metadata": {}, 590 | "output_type": "execute_result" 591 | } 592 | ], 593 | "source": [ 594 | "a.T * b" 595 | ] 596 | }, 597 | { 598 | "cell_type": "markdown", 599 | "metadata": {}, 600 | "source": [ 601 | "### 5.2 Comparison" 602 | ] 603 | }, 604 | { 605 | "cell_type": "code", 606 | "execution_count": 64, 607 | "metadata": {}, 608 | "outputs": [ 609 | { 610 | "name": "stdout", 611 | "output_type": "stream", 612 | "text": [ 613 | "[[1 2 3]\n", 614 | " [4 5 6]\n", 615 | " [7 8 9]]\n", 616 | "[[9 8 7]\n", 617 | " [6 5 4]\n", 618 | " [3 2 1]]\n" 619 | ] 620 | } 621 | ], 622 | "source": [ 623 | "a = np.arange(1, 10).reshape(3,3)\n", 624 | "b = np.arange(9, 0, -1).reshape(3,3)\n", 625 | "print(a)\n", 626 | "print(b)" 627 | ] 628 | }, 629 | { 630 | "cell_type": "code", 631 | "execution_count": 65, 632 | "metadata": {}, 633 | "outputs": [ 634 | { 635 | "data": { 636 | "text/plain": [ 637 | "array([[False, False, False],\n", 638 | " [False, True, False],\n", 639 | " [False, False, False]])" 640 | ] 641 | }, 642 | "execution_count": 65, 643 | "metadata": {}, 644 | "output_type": "execute_result" 645 | } 646 | ], 647 | "source": [ 648 | "a == b" 649 | ] 650 | }, 651 | { 652 | "cell_type": "code", 653 | "execution_count": 66, 654 | "metadata": {}, 655 | "outputs": [ 656 | { 657 | "data": { 658 | "text/plain": [ 659 | "array([[False, False, False],\n", 660 | " [False, False, True],\n", 661 | " [ True, True, True]])" 662 | ] 663 | }, 664 | "execution_count": 66, 665 | "metadata": {}, 666 | "output_type": "execute_result" 667 | } 668 | ], 669 | "source": [ 670 | "a > b" 671 | ] 672 | }, 673 | { 674 | "cell_type": "markdown", 675 | "metadata": {}, 676 | "source": [ 677 | "### 5.3 Aggregate (sum, min, max, mean, median, std)" 678 | ] 679 | }, 680 | { 681 | "cell_type": "code", 682 | "execution_count": 67, 683 | "metadata": {}, 684 | "outputs": [ 685 | { 686 | "data": { 687 | "text/plain": [ 688 | "(45, 45)" 689 | ] 690 | }, 691 | "execution_count": 67, 692 | "metadata": {}, 693 | "output_type": "execute_result" 694 | } 695 | ], 696 | "source": [ 697 | "a.sum(), np.sum(a)" 698 | ] 699 | }, 700 | { 701 | "cell_type": "code", 702 | "execution_count": 68, 703 | "metadata": {}, 704 | "outputs": [ 705 | { 706 | "data": { 707 | "text/plain": [ 708 | "(array([12, 15, 18]), array([12, 15, 18]))" 709 | ] 710 | }, 711 | "execution_count": 68, 712 | "metadata": {}, 713 | "output_type": "execute_result" 714 | } 715 | ], 716 | "source": [ 717 | "a.sum(axis=0), np.sum(a, axis=0)" 718 | ] 719 | }, 720 | { 721 | "cell_type": "code", 722 | "execution_count": 69, 723 | "metadata": {}, 724 | "outputs": [ 725 | { 726 | "data": { 727 | "text/plain": [ 728 | "(array([ 6, 15, 24]), array([ 6, 15, 24]))" 729 | ] 730 | }, 731 | "execution_count": 69, 732 | "metadata": {}, 733 | "output_type": "execute_result" 734 | } 735 | ], 736 | "source": [ 737 | "a.sum(axis=1), np.sum(a, axis=1)" 738 | ] 739 | }, 740 | { 741 | "cell_type": "markdown", 742 | "metadata": {}, 743 | "source": [ 744 | "## Broadcasting" 745 | ] 746 | }, 747 | { 748 | "cell_type": "code", 749 | "execution_count": 70, 750 | "metadata": {}, 751 | "outputs": [ 752 | { 753 | "data": { 754 | "text/plain": [ 755 | "array([[ 1, 2, 3, 4, 5, 6],\n", 756 | " [ 7, 8, 9, 10, 11, 12],\n", 757 | " [13, 14, 15, 16, 17, 18],\n", 758 | " [19, 20, 21, 22, 23, 24]])" 759 | ] 760 | }, 761 | "execution_count": 70, 762 | "metadata": {}, 763 | "output_type": "execute_result" 764 | } 765 | ], 766 | "source": [ 767 | "a = np.arange(1, 25).reshape(4, 6)\n", 768 | "a" 769 | ] 770 | }, 771 | { 772 | "cell_type": "code", 773 | "execution_count": 71, 774 | "metadata": {}, 775 | "outputs": [ 776 | { 777 | "data": { 778 | "text/plain": [ 779 | "array([[101, 102, 103, 104, 105, 106],\n", 780 | " [107, 108, 109, 110, 111, 112],\n", 781 | " [113, 114, 115, 116, 117, 118],\n", 782 | " [119, 120, 121, 122, 123, 124]])" 783 | ] 784 | }, 785 | "execution_count": 71, 786 | "metadata": {}, 787 | "output_type": "execute_result" 788 | } 789 | ], 790 | "source": [ 791 | "a + 100" 792 | ] 793 | }, 794 | { 795 | "cell_type": "code", 796 | "execution_count": 72, 797 | "metadata": {}, 798 | "outputs": [ 799 | { 800 | "data": { 801 | "text/plain": [ 802 | "array([0, 1, 2, 3, 4, 5])" 803 | ] 804 | }, 805 | "execution_count": 72, 806 | "metadata": {}, 807 | "output_type": "execute_result" 808 | } 809 | ], 810 | "source": [ 811 | "b = np.arange(6)\n", 812 | "b" 813 | ] 814 | }, 815 | { 816 | "cell_type": "code", 817 | "execution_count": 73, 818 | "metadata": {}, 819 | "outputs": [ 820 | { 821 | "data": { 822 | "text/plain": [ 823 | "array([[ 1, 3, 5, 7, 9, 11],\n", 824 | " [ 7, 9, 11, 13, 15, 17],\n", 825 | " [13, 15, 17, 19, 21, 23],\n", 826 | " [19, 21, 23, 25, 27, 29]])" 827 | ] 828 | }, 829 | "execution_count": 73, 830 | "metadata": {}, 831 | "output_type": "execute_result" 832 | } 833 | ], 834 | "source": [ 835 | "a + b" 836 | ] 837 | }, 838 | { 839 | "cell_type": "code", 840 | "execution_count": 74, 841 | "metadata": {}, 842 | "outputs": [ 843 | { 844 | "data": { 845 | "text/plain": [ 846 | "array([[0],\n", 847 | " [1],\n", 848 | " [2],\n", 849 | " [3]])" 850 | ] 851 | }, 852 | "execution_count": 74, 853 | "metadata": {}, 854 | "output_type": "execute_result" 855 | } 856 | ], 857 | "source": [ 858 | "c = np.arange(4).reshape([4,1])\n", 859 | "c" 860 | ] 861 | }, 862 | { 863 | "cell_type": "code", 864 | "execution_count": 75, 865 | "metadata": {}, 866 | "outputs": [ 867 | { 868 | "data": { 869 | "text/plain": [ 870 | "array([[ 1, 2, 3, 4, 5, 6],\n", 871 | " [ 8, 9, 10, 11, 12, 13],\n", 872 | " [15, 16, 17, 18, 19, 20],\n", 873 | " [22, 23, 24, 25, 26, 27]])" 874 | ] 875 | }, 876 | "execution_count": 75, 877 | "metadata": {}, 878 | "output_type": "execute_result" 879 | } 880 | ], 881 | "source": [ 882 | "a + c" 883 | ] 884 | } 885 | ], 886 | "metadata": { 887 | "kernelspec": { 888 | "display_name": "Python 3", 889 | "language": "python", 890 | "name": "python3" 891 | }, 892 | "language_info": { 893 | "codemirror_mode": { 894 | "name": "ipython", 895 | "version": 3 896 | }, 897 | "file_extension": ".py", 898 | "mimetype": "text/x-python", 899 | "name": "python", 900 | "nbconvert_exporter": "python", 901 | "pygments_lexer": "ipython3", 902 | "version": "3.7.1" 903 | } 904 | }, 905 | "nbformat": 4, 906 | "nbformat_minor": 2 907 | } 908 | -------------------------------------------------------------------------------- /regression.csv: -------------------------------------------------------------------------------- 1 | X,Y 2 | 3.3,1.7 3 | 4.4,2.76 4 | 5.5,2.09 5 | 6.71,3.19 6 | 6.93,1.694 7 | 4.168,1.573 8 | 9.779,3.366 9 | 6.182,2.596 10 | 7.59,2.53 11 | 2.167,1.221 12 | 7.042,2.827 13 | 10.791,3.465 14 | 5.313,1.65 15 | 7.997,2.904 16 | 5.654,2.42 17 | 9.27,2.94 18 | 3.1,1.3 -------------------------------------------------------------------------------- /regression2.csv: -------------------------------------------------------------------------------- 1 | calories,weight 2 | 3100,93 3 | 2400,73 4 | 2200,62 5 | 2900,102 6 | 1500,45 7 | 1800,56 8 | 2200,68 9 | 2500,74 10 | 2700,85 11 | 2700,63 12 | 2500,97 13 | 3200,105 14 | 1700,62 15 | 1300,44 16 | 1800,51 17 | 1900,67 18 | 2800,78 -------------------------------------------------------------------------------- /regressionKR_blank.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# import modules" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import pandas as pd\n", 17 | "import numpy as np\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "\n", 20 | "from tensorflow.keras.models import Sequential\n", 21 | "from tensorflow.keras.layers import Dense" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "# data preparation and visualization" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "# create model" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": { 49 | "scrolled": false 50 | }, 51 | "outputs": [], 52 | "source": [] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "# train model" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "# model prediction" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": null, 78 | "metadata": {}, 79 | "outputs": [], 80 | "source": [] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "# what are a and b in y = ax + b?" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [] 95 | } 96 | ], 97 | "metadata": { 98 | "kernelspec": { 99 | "display_name": "Python 3", 100 | "language": "python", 101 | "name": "python3" 102 | }, 103 | "language_info": { 104 | "codemirror_mode": { 105 | "name": "ipython", 106 | "version": 3 107 | }, 108 | "file_extension": ".py", 109 | "mimetype": "text/x-python", 110 | "name": "python", 111 | "nbconvert_exporter": "python", 112 | "pygments_lexer": "ipython3", 113 | "version": "3.7.1" 114 | } 115 | }, 116 | "nbformat": 4, 117 | "nbformat_minor": 1 118 | } 119 | -------------------------------------------------------------------------------- /regressionTF.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import tensorflow as tf\n", 10 | "import pandas as pd\n", 11 | "import numpy as np\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "\n", 14 | "# Parameters\n", 15 | "learning_rate = .1\n", 16 | "training_epochs = 1000\n", 17 | "display_step = 50" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 4, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "# Training Data\n", 27 | "data = pd.read_csv('regression.csv', delimiter = ',')\n", 28 | "X = data['X'].tolist()\n", 29 | "Y = data['Y'].tolist()\n", 30 | "train_X = np.asarray(X)\n", 31 | "train_Y = np.asarray(Y)\n", 32 | "\n", 33 | "# train_X = numpy.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,\n", 34 | "# 7.042,10.791,5.313,7.997,5.654,9.27,3.1])\n", 35 | "# train_Y = numpy.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,\n", 36 | "# 2.827,3.465,1.65,2.904,2.42,2.94,1.3])\n", 37 | "n_samples = train_X.shape[0]" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 6, 43 | "metadata": {}, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "WARNING:tensorflow:From /Users/jookai/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", 50 | "Instructions for updating:\n", 51 | "Colocations handled automatically by placer.\n", 52 | "WARNING:tensorflow:From /Users/jookai/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", 53 | "Instructions for updating:\n", 54 | "Use tf.cast instead.\n" 55 | ] 56 | } 57 | ], 58 | "source": [ 59 | "# Graphs\n", 60 | "\n", 61 | "# tf Graph Input\n", 62 | "X = tf.placeholder(\"float\")\n", 63 | "Y = tf.placeholder(\"float\")\n", 64 | "\n", 65 | "# Set model weights\n", 66 | "rng = np.random\n", 67 | "W = tf.Variable(rng.randn(), name=\"weight\")\n", 68 | "b = tf.Variable(rng.randn(), name=\"bias\")\n", 69 | "\n", 70 | "# Construct a linear model\n", 71 | "pred = tf.add(tf.multiply(X, W), b)\n", 72 | "\n", 73 | "# Mean squared error\n", 74 | "cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)\n", 75 | "\n", 76 | "# Gradient descent\n", 77 | "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n", 78 | "\n", 79 | "# Initialize the variables (i.e. assign their default value)\n", 80 | "init = tf.global_variables_initializer()" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 7, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "Epoch: 0050 cost= 0.092413917 W= 0.28728512 b= 0.42180666\n", 93 | "Epoch: 0100 cost= 0.084668316 W= 0.26242045 b= 0.60979354\n", 94 | "Epoch: 0150 cost= 0.082400993 W= 0.24939564 b= 0.7082662\n", 95 | "Epoch: 0200 cost= 0.081704468 W= 0.24257265 b= 0.75985074\n", 96 | "Epoch: 0250 cost= 0.081474394 W= 0.23899874 b= 0.7868711\n", 97 | "Epoch: 0300 cost= 0.081390858 W= 0.23712657 b= 0.8010253\n", 98 | "Epoch: 0350 cost= 0.081357241 W= 0.23614581 b= 0.8084403\n", 99 | "Epoch: 0400 cost= 0.081342414 W= 0.23563214 b= 0.81232387\n", 100 | "Epoch: 0450 cost= 0.081335410 W= 0.23536298 b= 0.8143589\n", 101 | "Epoch: 0500 cost= 0.081331976 W= 0.2352221 b= 0.8154238\n", 102 | "Epoch: 0550 cost= 0.081330203 W= 0.2351482 b= 0.8159827\n", 103 | "Epoch: 0600 cost= 0.081329294 W= 0.23510972 b= 0.8162737\n", 104 | "Epoch: 0650 cost= 0.081328854 W= 0.23508921 b= 0.81642854\n", 105 | "Epoch: 0700 cost= 0.081328586 W= 0.23507847 b= 0.8165099\n", 106 | "Epoch: 0750 cost= 0.081328459 W= 0.23507333 b= 0.8165487\n", 107 | "Epoch: 0800 cost= 0.081328407 W= 0.23507033 b= 0.8165714\n", 108 | "Epoch: 0850 cost= 0.081328347 W= 0.23506883 b= 0.81658274\n", 109 | "Epoch: 0900 cost= 0.081328347 W= 0.23506817 b= 0.8165876\n", 110 | "Epoch: 0950 cost= 0.081328355 W= 0.23506787 b= 0.8165899\n", 111 | "Epoch: 1000 cost= 0.081328355 W= 0.23506787 b= 0.8165899\n", 112 | "Optimization Finished!\n", 113 | "Training cost= 0.081328355 W= 0.23506787 b= 0.8165899 \n", 114 | "\n" 115 | ] 116 | }, 117 | { 118 | "data": { 119 | "image/png": "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\n", 120 | "text/plain": [ 121 | "
" 122 | ] 123 | }, 124 | "metadata": { 125 | "needs_background": "light" 126 | }, 127 | "output_type": "display_data" 128 | } 129 | ], 130 | "source": [ 131 | "# Start training\n", 132 | "with tf.Session() as sess:\n", 133 | " sess.run(init)\n", 134 | "\n", 135 | " # Fit all training data\n", 136 | " for epoch in range(training_epochs):\n", 137 | " for (x, y) in zip(train_X, train_Y):\n", 138 | " sess.run(optimizer, feed_dict={X: x, Y: y})\n", 139 | "\n", 140 | " #Display logs per epoch step\n", 141 | " if (epoch+1) % display_step == 0:\n", 142 | " c = sess.run(cost, feed_dict={X: train_X, Y:train_Y})\n", 143 | " print(\"Epoch:\", '%04d' % (epoch+1), \"cost=\", \"{:.9f}\".format(c), \\\n", 144 | " \"W=\", sess.run(W), \"b=\", sess.run(b))\n", 145 | "\n", 146 | " #Graphic display\n", 147 | " plt.plot(train_X, train_Y, 'ro', label='Original data')\n", 148 | " plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')\n", 149 | "\n", 150 | " print (\"Optimization Finished!\")\n", 151 | " training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y})\n", 152 | " print (\"Training cost=\", training_cost, \"W=\", sess.run(W), \"b=\", sess.run(b), '\\n')" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": null, 158 | "metadata": {}, 159 | "outputs": [], 160 | "source": [] 161 | } 162 | ], 163 | "metadata": { 164 | "kernelspec": { 165 | "display_name": "Python 3", 166 | "language": "python", 167 | "name": "python3" 168 | }, 169 | "language_info": { 170 | "codemirror_mode": { 171 | "name": "ipython", 172 | "version": 3 173 | }, 174 | "file_extension": ".py", 175 | "mimetype": "text/x-python", 176 | "name": "python", 177 | "nbconvert_exporter": "python", 178 | "pygments_lexer": "ipython3", 179 | "version": "3.7.1" 180 | } 181 | }, 182 | "nbformat": 4, 183 | "nbformat_minor": 1 184 | } 185 | -------------------------------------------------------------------------------- /regression_saved.csv: -------------------------------------------------------------------------------- 1 | 3.299999952316284180e+00,1.700000047683715820e+00 2 | 4.400000095367431641e+00,2.759999990463256836e+00 3 | 5.500000000000000000e+00,2.089999914169311523e+00 4 | 6.710000038146972656e+00,3.190000057220458984e+00 5 | 6.929999828338623047e+00,1.694000005722045898e+00 6 | 4.168000221252441406e+00,1.572999954223632812e+00 7 | 9.779000282287597656e+00,3.365999937057495117e+00 8 | 6.182000160217285156e+00,2.595999956130981445e+00 9 | 7.590000152587890625e+00,2.529999971389770508e+00 10 | 2.167000055313110352e+00,1.220999956130981445e+00 11 | 7.041999816894531250e+00,2.826999902725219727e+00 12 | 1.079100036621093750e+01,3.464999914169311523e+00 13 | 5.313000202178955078e+00,1.649999976158142090e+00 14 | 7.997000217437744141e+00,2.904000043869018555e+00 15 | 5.653999805450439453e+00,2.420000076293945312e+00 16 | 9.270000457763671875e+00,2.940000057220458984e+00 17 | 3.099999904632568359e+00,1.299999952316284180e+00 18 | -------------------------------------------------------------------------------- /string.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 6, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "\n", 13 | "a f f a\n", 14 | "bc bcdef abc abcdef\n" 15 | ] 16 | } 17 | ], 18 | "source": [ 19 | "s = 'abcdef'\n", 20 | "print(s[0], s[5], s[-1], s[-6])\n", 21 | "print(s[1:3], s[1:], s[:3], s[:])" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": {}, 28 | "outputs": [ 29 | { 30 | "name": "stdout", 31 | "output_type": "stream", 32 | "text": [ 33 | "100 300 300 100\n", 34 | "[200] [200, 300] [100, 200] [100, 200, 300]\n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "n = [100, 200, 300]\n", 40 | "print(n[0], n[2], n[-1], n[-3])\n", 41 | "print(n[1:2], n[1:], n[:2], n[:])" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 4, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "text/plain": [ 52 | "6" 53 | ] 54 | }, 55 | "execution_count": 4, 56 | "metadata": {}, 57 | "output_type": "execute_result" 58 | } 59 | ], 60 | "source": [ 61 | "len(s)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 5, 67 | "metadata": {}, 68 | "outputs": [ 69 | { 70 | "data": { 71 | "text/plain": [ 72 | "'bdefefefefefefefefefef'" 73 | ] 74 | }, 75 | "execution_count": 5, 76 | "metadata": {}, 77 | "output_type": "execute_result" 78 | } 79 | ], 80 | "source": [ 81 | "s[1]+s[3]+s[4:]*10" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 7, 87 | "metadata": {}, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "text/plain": [ 92 | "'ABCDEF'" 93 | ] 94 | }, 95 | "execution_count": 7, 96 | "metadata": {}, 97 | "output_type": "execute_result" 98 | } 99 | ], 100 | "source": [ 101 | "s.upper()" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 10, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "data": { 111 | "text/plain": [ 112 | "' this is a house built this year.\\n'" 113 | ] 114 | }, 115 | "execution_count": 10, 116 | "metadata": {}, 117 | "output_type": "execute_result" 118 | } 119 | ], 120 | "source": [ 121 | "s = ' this is a house built this year.\\n' \t\n", 122 | "s" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 11, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "data": { 132 | "text/plain": [ 133 | "11" 134 | ] 135 | }, 136 | "execution_count": 11, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "result = s.find('house') \t # index of first instance of string t inside s (-1 if not found)\n", 143 | "result" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 12, 149 | "metadata": {}, 150 | "outputs": [ 151 | { 152 | "data": { 153 | "text/plain": [ 154 | "1" 155 | ] 156 | }, 157 | "execution_count": 12, 158 | "metadata": {}, 159 | "output_type": "execute_result" 160 | } 161 | ], 162 | "source": [ 163 | "result = s.find('this')\t # index of last instance of string t inside s (-1 if not found)\n", 164 | "result" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 13, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "text/plain": [ 175 | "23" 176 | ] 177 | }, 178 | "execution_count": 13, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "result = s.rindex('this') # like s.find(t) except it raises ValueError if not found\n", 185 | "result" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 14, 191 | "metadata": {}, 192 | "outputs": [ 193 | { 194 | "data": { 195 | "text/plain": [ 196 | "'this is a house built this year.'" 197 | ] 198 | }, 199 | "execution_count": 14, 200 | "metadata": {}, 201 | "output_type": "execute_result" 202 | } 203 | ], 204 | "source": [ 205 | "s = s.strip() \t # a copy of s without leading or trailing whitespace\n", 206 | "s" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 15, 212 | "metadata": {}, 213 | "outputs": [ 214 | { 215 | "data": { 216 | "text/plain": [ 217 | "['this', 'is', 'a', 'house', 'built', 'this', 'year.']" 218 | ] 219 | }, 220 | "execution_count": 15, 221 | "metadata": {}, 222 | "output_type": "execute_result" 223 | } 224 | ], 225 | "source": [ 226 | "tokens = s.split(' ')\t # split s into a list wherever a t is found (whitespace by default)\n", 227 | "tokens" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": 16, 233 | "metadata": {}, 234 | "outputs": [ 235 | { 236 | "data": { 237 | "text/plain": [ 238 | "'this is a house built this year.'" 239 | ] 240 | }, 241 | "execution_count": 16, 242 | "metadata": {}, 243 | "output_type": "execute_result" 244 | } 245 | ], 246 | "source": [ 247 | "s = ' '.join(tokens)\t # combine the words of the text into a string using s as the glue\n", 248 | "s" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 17, 254 | "metadata": {}, 255 | "outputs": [ 256 | { 257 | "data": { 258 | "text/plain": [ 259 | "'that is a house built that year.'" 260 | ] 261 | }, 262 | "execution_count": 17, 263 | "metadata": {}, 264 | "output_type": "execute_result" 265 | } 266 | ], 267 | "source": [ 268 | "s = s.replace('this', 'that') # replace instances of t with u inside s\n", 269 | "s" 270 | ] 271 | } 272 | ], 273 | "metadata": { 274 | "kernelspec": { 275 | "display_name": "Python 3", 276 | "language": "python", 277 | "name": "python3" 278 | }, 279 | "language_info": { 280 | "codemirror_mode": { 281 | "name": "ipython", 282 | "version": 3 283 | }, 284 | "file_extension": ".py", 285 | "mimetype": "text/x-python", 286 | "name": "python", 287 | "nbconvert_exporter": "python", 288 | "pygments_lexer": "ipython3", 289 | "version": "3.7.1" 290 | } 291 | }, 292 | "nbformat": 4, 293 | "nbformat_minor": 1 294 | } 295 | -------------------------------------------------------------------------------- /syntax.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "1\n", 13 | "2\n", 14 | "3\n", 15 | "4\n" 16 | ] 17 | } 18 | ], 19 | "source": [ 20 | "a = [1, 2, 3, 4]\n", 21 | "for i in a:\n", 22 | " print(i)" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 3, 28 | "metadata": {}, 29 | "outputs": [ 30 | { 31 | "name": "stdout", 32 | "output_type": "stream", 33 | "text": [ 34 | "1\n", 35 | "2\n", 36 | "3\n", 37 | "4\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "a = [1, 2, 3, 4]\n", 43 | "for i in range(len(a)):\n", 44 | " print(a[i])" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 4, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "red\n", 57 | "green\n", 58 | "blue\n", 59 | "purple\n" 60 | ] 61 | } 62 | ], 63 | "source": [ 64 | "a = ['red', 'green', 'blue', 'purple']\n", 65 | "for i in a:\n", 66 | " print(i)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "name": "stdout", 76 | "output_type": "stream", 77 | "text": [ 78 | "red\n", 79 | "green\n", 80 | "blue\n", 81 | "purple\n" 82 | ] 83 | } 84 | ], 85 | "source": [ 86 | "a = ['red', 'green', 'blue', 'purple']\n", 87 | "for i in range(len(a)):\n", 88 | " print(a[i])" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 6, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "red: 20.0%\n", 101 | "green: 30.0%\n", 102 | "blue: 10.0%\n", 103 | "purple: 40.0%\n" 104 | ] 105 | } 106 | ], 107 | "source": [ 108 | "a = [\"red\", \"green\", \"blue\", \"purple\"]\n", 109 | "b = [0.2, 0.3, 0.1, 0.4]\n", 110 | "for i, a_ in enumerate(a):\n", 111 | " print(\"{}: {}%\".format(a_, b[i]*100))" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 7, 117 | "metadata": {}, 118 | "outputs": [ 119 | { 120 | "name": "stdout", 121 | "output_type": "stream", 122 | "text": [ 123 | "red: 20.0%\n", 124 | "green: 30.0%\n", 125 | "blue: 10.0%\n", 126 | "purple: 40.0%\n" 127 | ] 128 | } 129 | ], 130 | "source": [ 131 | "a = [\"red\", \"green\", \"blue\", \"purple\"]\n", 132 | "b = [0.2, 0.3, 0.1, 0.4]\n", 133 | "for a_, b_ in zip(a, b):\n", 134 | " print(\"{}: {}%\".format(a_, b_*100))\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 8, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "name": "stdout", 144 | "output_type": "stream", 145 | "text": [ 146 | "0\n" 147 | ] 148 | } 149 | ], 150 | "source": [ 151 | "a = 0\n", 152 | "if a == 0:\n", 153 | " print(a)\n", 154 | "else:\n", 155 | " print(a+1)" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 8, 161 | "metadata": {}, 162 | "outputs": [ 163 | { 164 | "name": "stdout", 165 | "output_type": "stream", 166 | "text": [ 167 | "3\n", 168 | "4\n", 169 | "6\n", 170 | "8\n" 171 | ] 172 | } 173 | ], 174 | "source": [ 175 | "for i in range(1, 3):\n", 176 | " for j in range(3, 5):\n", 177 | " print(i*j)" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 11, 183 | "metadata": {}, 184 | "outputs": [ 185 | { 186 | "name": "stdout", 187 | "output_type": "stream", 188 | "text": [ 189 | "4\n", 190 | "8\n" 191 | ] 192 | } 193 | ], 194 | "source": [ 195 | "for i in range(1, 3):\n", 196 | " for j in range(3, 5):\n", 197 | " if j >=4:\n", 198 | " print(i*j)" 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": 12, 204 | "metadata": {}, 205 | "outputs": [ 206 | { 207 | "data": { 208 | "text/plain": [ 209 | "[2, 3, 4]" 210 | ] 211 | }, 212 | "execution_count": 12, 213 | "metadata": {}, 214 | "output_type": "execute_result" 215 | } 216 | ], 217 | "source": [ 218 | "a = [1, 2, 3, 4]\n", 219 | "b = [i for i in a if i >=2]\n", 220 | "b" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 13, 226 | "metadata": {}, 227 | "outputs": [ 228 | { 229 | "data": { 230 | "text/plain": [ 231 | "['green', 'blue', 'purple']" 232 | ] 233 | }, 234 | "execution_count": 13, 235 | "metadata": {}, 236 | "output_type": "execute_result" 237 | } 238 | ], 239 | "source": [ 240 | "a = ['red', 'green', 'blue', 'purple']\n", 241 | "b = [i for i in a if len(i) >=4]\n", 242 | "b" 243 | ] 244 | } 245 | ], 246 | "metadata": { 247 | "kernelspec": { 248 | "display_name": "Python 3", 249 | "language": "python", 250 | "name": "python3" 251 | }, 252 | "language_info": { 253 | "codemirror_mode": { 254 | "name": "ipython", 255 | "version": 3 256 | }, 257 | "file_extension": ".py", 258 | "mimetype": "text/x-python", 259 | "name": "python", 260 | "nbconvert_exporter": "python", 261 | "pygments_lexer": "ipython3", 262 | "version": "3.7.1" 263 | } 264 | }, 265 | "nbformat": 4, 266 | "nbformat_minor": 2 267 | } 268 | -------------------------------------------------------------------------------- /test.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsnam95/class2019Spring/e52063676010dcb2860f1408cda5e0cb5f9b5b3c/test.npz -------------------------------------------------------------------------------- /variables.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 17, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "a = 1; print(type(a))" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "a = 1; a = float(a); print(type(a))" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 19, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "\n" 47 | ] 48 | } 49 | ], 50 | "source": [ 51 | "a = 1.2; a = int(a); print(type(a))" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 20, 57 | "metadata": {}, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "\n", 64 | "2\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "a = '123'; print(type(a)); print(a[1])" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 21, 75 | "metadata": {}, 76 | "outputs": [ 77 | { 78 | "name": "stdout", 79 | "output_type": "stream", 80 | "text": [ 81 | "\n", 82 | "['1', '2', '3']\n", 83 | "3\n" 84 | ] 85 | } 86 | ], 87 | "source": [ 88 | "a = '123'; a = list(a); print(type(a)); print(a); print(a[2])" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 22, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | "\n", 101 | "1\n", 102 | "2\n", 103 | "[3, '4']\n" 104 | ] 105 | } 106 | ], 107 | "source": [ 108 | "a = [1,'2', [3, '4']]; print(type(a)); print(a[0]); print(a[1]); print(a[2])" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 23, 114 | "metadata": {}, 115 | "outputs": [ 116 | { 117 | "name": "stdout", 118 | "output_type": "stream", 119 | "text": [ 120 | "\n", 121 | "1\n", 122 | "2\n", 123 | "[3, '4']\n" 124 | ] 125 | } 126 | ], 127 | "source": [ 128 | "a = (1,'2', [3, '4']); print(type(a)); print(a[0]); print(a[1]); print(a[2])" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 24, 134 | "metadata": {}, 135 | "outputs": [ 136 | { 137 | "name": "stdout", 138 | "output_type": "stream", 139 | "text": [ 140 | "\n", 141 | "apple\n" 142 | ] 143 | } 144 | ], 145 | "source": [ 146 | "a =\t{\"a\": \"apple\", \"b\": \"orange\", \"c\": 2014}\n", 147 | "print(type(a))\n", 148 | "print(a[\"a\"])" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 27, 154 | "metadata": {}, 155 | "outputs": [ 156 | { 157 | "name": "stdout", 158 | "output_type": "stream", 159 | "text": [ 160 | "\n" 161 | ] 162 | }, 163 | { 164 | "data": { 165 | "text/plain": [ 166 | "[(1, 2, 3), (3, 8, 0)]" 167 | ] 168 | }, 169 | "execution_count": 27, 170 | "metadata": {}, 171 | "output_type": "execute_result" 172 | } 173 | ], 174 | "source": [ 175 | "a=[(1,2,3), (3,8,0)]\n", 176 | "print(type(a))\n", 177 | "a" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 28, 183 | "metadata": {}, 184 | "outputs": [ 185 | { 186 | "name": "stdout", 187 | "output_type": "stream", 188 | "text": [ 189 | "[[1 2 3]\n", 190 | " [3 8 0]]\n", 191 | "\n" 192 | ] 193 | } 194 | ], 195 | "source": [ 196 | "import numpy as np\n", 197 | "b = np.array(a)\n", 198 | "print(b)\n", 199 | "print(type(b))" 200 | ] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "execution_count": 29, 205 | "metadata": {}, 206 | "outputs": [ 207 | { 208 | "name": "stdout", 209 | "output_type": "stream", 210 | "text": [ 211 | "[[ 1 4 9]\n", 212 | " [ 9 64 0]]\n" 213 | ] 214 | } 215 | ], 216 | "source": [ 217 | "print(b*b)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 30, 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "name": "stdout", 227 | "output_type": "stream", 228 | "text": [ 229 | "[[1 2 3]\n", 230 | " [3 8 0]]\n", 231 | "\n" 232 | ] 233 | } 234 | ], 235 | "source": [ 236 | "c = np.matrix(b)\n", 237 | "print(c)\n", 238 | "print(type(c))" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 31, 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "ename": "ValueError", 248 | "evalue": "shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)", 249 | "output_type": "error", 250 | "traceback": [ 251 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 252 | "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", 253 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mc\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 254 | "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/numpy/matrixlib/defmatrix.py\u001b[0m in \u001b[0;36m__mul__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\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\u001b[0m\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[0;31m# This promotes 1-D vectors to row vectors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 215\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0masmatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\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[1;32m 216\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misscalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'__rmul__'\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[1;32m 217\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 255 | "\u001b[0;31mValueError\u001b[0m: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)" 256 | ] 257 | } 258 | ], 259 | "source": [ 260 | "c*c" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 32, 266 | "metadata": {}, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "matrix([[14, 19],\n", 272 | " [19, 73]])" 273 | ] 274 | }, 275 | "execution_count": 32, 276 | "metadata": {}, 277 | "output_type": "execute_result" 278 | } 279 | ], 280 | "source": [ 281 | "c*c.T" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": null, 287 | "metadata": {}, 288 | "outputs": [], 289 | "source": [] 290 | } 291 | ], 292 | "metadata": { 293 | "kernelspec": { 294 | "display_name": "Python 3", 295 | "language": "python", 296 | "name": "python3" 297 | }, 298 | "language_info": { 299 | "codemirror_mode": { 300 | "name": "ipython", 301 | "version": 3 302 | }, 303 | "file_extension": ".py", 304 | "mimetype": "text/x-python", 305 | "name": "python", 306 | "nbconvert_exporter": "python", 307 | "pygments_lexer": "ipython3", 308 | "version": "3.7.1" 309 | } 310 | }, 311 | "nbformat": 4, 312 | "nbformat_minor": 1 313 | } 314 | --------------------------------------------------------------------------------