{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"markdown","source":"## Notebook Summary:\n 1. **Load** the data, labeling with underscores.\n 2. **Converting** Raw to Simplified drawing\n 3. **Submit** result.","execution_count":null},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"markdown","source":"**Import** & **Listing** files  in \"input\" folder.","execution_count":null},{"metadata":{"trusted":true,"_uuid":"e3c917618b84dad71c1d9e564bf63f8e3729e551","_kg_hide-output":true},"cell_type":"code","source":"import numpy as np # Linear Algebra\nimport pandas as pd # Reading csv file\nimport os           # List directory files\n\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"697625bcc2ec455902001ac9348ea4338bd1bbbc"},"cell_type":"markdown","source":"**Suppress** **warnings** due to deprecation of methods used.\n\n**Import** some more ** packages (matplotlib)**.","execution_count":null},{"metadata":{"trusted":true,"_uuid":"cdcbe940d2d5ed18a5d34389cb39457a5900f3b9","_kg_hide-output":false},"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore') # to suppress some matplotlib deprecation warnings\n\nimport ast\nimport math\n\n# Install your own package in Kernels. \n#from simplification.cutil import simplify_coords\n\nimport matplotlib.pyplot as plt\nimport matplotlib.style as style\n\n%matplotlib inline\n%config InlineBackend.figure_format = 'retina'","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"47861a3c0daca22ffafd70f1f7d3deeaf5f4a141"},"cell_type":"markdown","source":"**Read Train **csv file.","execution_count":null},{"metadata":{"trusted":true,"_uuid":"43b2427ced2476a5e0a76860a59cd8bbcfbbd578"},"cell_type":"code","source":"train = pd.read_csv('../input/train_simplified/roller coaster.csv',\n                   index_col='key_id',\n                   nrows=100)\ntrain.info() # 100 rows with 5 columns\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5a5f98453f9628d7a5360fadd1d5d37ff1287b07"},"cell_type":"markdown","source":"**Replace** **space** with **underscore**.","execution_count":null},{"metadata":{"trusted":true,"_uuid":"f3af2bfc928e814b44a5e4c1b4739bc21d417ecb"},"cell_type":"code","source":"train['word'] = train['word'].replace(' ', '_', regex=True) # See word column updated.\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"572332d5e2dfd647097a59da150bfa95cfb074a0"},"cell_type":"markdown","source":"**Read** **test** data.  Display first few rows.\n\nNow word reading as **String**, so **convert** into **list**.","execution_count":null},{"metadata":{"_uuid":"9be6b30cac2caabbe46c962b542301d2751dda18"},"cell_type":"markdown","source":"","execution_count":null},{"metadata":{"trusted":true,"_uuid":"67de5a885f97c5f29e5cb0bb88031637522c8546","_kg_hide-output":false,"_kg_hide-input":true},"cell_type":"code","source":"test_raw = pd.read_csv('../input/test_raw.csv', index_col='key_id')\ntest_raw.head() # 112199 rows, 2 columns\ntest_raw.info()\n\nfirst_ten_ids = test_raw.iloc[:10].index\nprint(first_ten_ids)\nraw_images = [ast.literal_eval(lst) for lst in test_raw.loc[first_ten_ids, 'drawing'].values]\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"697ba9c85e3ba66e0adbdbc07a23071fc128a0af"},"cell_type":"markdown","source":"Covert Raw to Simplified data.\n(Code by Jonas Jongejan)","execution_count":null},{"metadata":{"trusted":true,"_uuid":"0c8c8ff71140fcabdc038df6674f05f36e6d1ae2"},"cell_type":"code","source":"def resample(x, y, spacing=1.0):\n    output = []\n    n = len(x)\n    px = x[0]\n    py = y[0]\n    cumlen = 0\n    pcumlen = 0\n    offset = 0\n    for i in range(1, n):\n        cx = x[i]\n        cy = y[i]\n        dx = cx - px\n        dy = cy - py\n        curlen = math.sqrt(dx*dx + dy*dy)\n        cumlen += curlen\n        while offset < cumlen:\n            t = (offset - pcumlen) / curlen\n            invt = 1 - t\n            tx = px * invt + cx * t\n            ty = py * invt + cy * t\n            output.append((tx, ty))\n            offset += spacing\n            pcumlen = cumlen\n        px = cx\n        py = cy\n    output.append((x[-1], y[-1]))\n    return output\n  \ndef normalize_resample_simplify(strokes, epsilon=1.0, resample_spacing=1.0):\n    if len(strokes) == 0:\n        raise ValueError('empty image')\n\n    # find min and max\n    amin = None\n    amax = None\n    for x, y, _ in strokes:\n        cur_min = [np.min(x), np.min(y)]\n        cur_max = [np.max(x), np.max(y)]\n        amin = cur_min if amin is None else np.min([amin, cur_min], axis=0)\n        amax = cur_max if amax is None else np.max([amax, cur_max], axis=0)\n\n    # drop any drawings that are linear along one axis\n    arange = np.array(amax) - np.array(amin)\n    if np.min(arange) == 0:\n        raise ValueError('bad range of values')\n\n    arange = np.max(arange)\n    output = []\n    for x, y, _ in strokes:\n        xy = np.array([x, y], dtype=float).T\n        xy -= amin\n        xy *= 255.\n        xy /= arange\n        resampled = resample(xy[:, 0], xy[:, 1], resample_spacing)\n        simplified = simplify_coords(resampled, epsilon)\n        xy = np.around(simplified).astype(np.uint8)\n        output.append(xy.T.tolist())\n\n    return output","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1aee1a684c1ae2c53e2916cb91554bd1b07584a1"},"cell_type":"code","source":"# Below package need to add with your login and un comment below lines \n# by removing # at start of each below line.\n\n#simplified_drawings = []\n#for drawing in raw_images:\n    #simplified_drawing = normalize_resample_simplify(drawing)\n    #simplified_drawings.append(simplified_drawing)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0bc5af8414391a44e2105a97c53f3b914645bb66"},"cell_type":"markdown","source":"Drawing some plots","execution_count":null},{"metadata":{"trusted":true,"_uuid":"4baa55c312075c01860bb2df22be6e2212e5bb9d"},"cell_type":"code","source":"for index, raw_drawing in enumerate(raw_images, 0):\n    \n    plt.figure(figsize=(6,3))\n    \n    for x,y,t in raw_drawing:\n        plt.subplot(1,2,1)\n        plt.plot(x, y, marker='.')\n        plt.axis('off')\n\n    plt.gca().invert_yaxis()\n    plt.axis('equal')\n\n    #for x,y in simplified_drawings[index]:\n        #plt.subplot(1,2,2)\n        #plt.plot(x, y, marker='.')\n        #plt.axis('off')\n\n    plt.gca().invert_yaxis()\n    plt.axis('equal')\n    plt.show()  ","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f41ffd69852a583a9fb8d3418eb73609cfa1ba2c"},"cell_type":"markdown","source":"**Submit**","execution_count":null},{"metadata":{"trusted":true,"_uuid":"38d3b909bca648bd3414768a802e13fafbd252bc"},"cell_type":"code","source":"submission = pd.read_csv('../input/sample_submission.csv', index_col='key_id')\n# Don't forget, your multi-word labels need underscores instead of spaces!\nmy_favorite_words = ['donut', 'roller_coaster', 'smiley_face']  \nsubmission['word'] = \" \".join(my_favorite_words)\nsubmission.to_csv('my_favorite_words.csv')\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2a3c8412bf33aca6209ac4f5bfa961530f4b626d"},"cell_type":"code","source":"submission.head()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}