{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\ndef stack_it(drawing):\n    # unwrap the list\n    in_strokes = [(xi,yi,i) for i,(x,y) in enumerate(drawing) for xi,yi in zip(x,y)]\n    c_strokes = np.stack(in_strokes)\n    # replace stroke id with 1 for continue, 2 for new\n    c_strokes[:,2] = [1]+np.diff(c_strokes[:,2]).tolist()\n    c_strokes[:,2] += 1 # since 0 is no stroke\n    return c_strokes\n\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"37be0def9a03dbf84c053f7f4e8aec7368df6933"},"cell_type":"markdown","source":"# Example:\n\n**WORD** j trn_UJI_W01-01\n\n  **NUMSTROKES ** 2\n  \n  **POINTS** 20 # 447 974 457 971 471 969 484 980 492 1000 513 1025 521 1073 533 1122 536 1195 538 1271 529 1357 516 1438 495 1522 469 1592 445 1650 413 1698 384 1713 362 1715 343 1697 330 1661\n  \n  **POINTS** 10 # 400 752 413 676 427 616 442 570 457 539 476 527 496 525 515 535 536 547 552 569"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"df = pd.DataFrame(columns=(\"subset\", \"site\", \"writer\", \"character\", \"repetitions\", \"numstrokes\", \"numpoints\", \"drawing\"))\ndf = df.set_index([\"subset\", \"site\", \"writer\", \"character\", \"repetitions\"])\nwith open(\"../input/ujipenchars2.txt\", \"r\") as file:\n    for line in file:\n        words = line.strip().split()\n        if words[0] == \"//\":\n            continue\n        elif words[0] == \"WORD\":\n            info = words[2].split(\"_\")\n            session = info[2].split(\"-\")\n            index = (info[0], info[1], session[0], words[1], int(session[1]))\n            df.loc[index] = 0\n        elif words[0] == \"NUMSTROKES\":\n            df.loc[index][\"numstrokes\"] = int(words[1])\n            df.loc[index][\"numpoints\"] = 0\n            df.loc[index][\"drawing\"] = []\n        elif words[0] == \"POINTS\":\n            numpoints = int(words[1])\n            points = words[3:]\n            x = [int(x) for x in points[0::2]]\n            y = [int(y) for y in points[1::2]]\n            assert len(x) == numpoints, (len(x), numpoints)\n            assert len(y) == numpoints, (len(y), numpoints)\n            df.loc[index][\"numpoints\"] += numpoints\n            df.loc[index][\"drawing\"].append([x, y])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7bd5857676f6d42e15707d9855f7d003ff6a04e8"},"cell_type":"code","source":"df1 = df[df.index.get_level_values(\"character\").isin([\"a\", \"r\", \"m\"])]\nprint(len(df), len(df1))\nprint(df1[\"drawing\"].head())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9497f8fa5376c70d741e3c31069acd3d768c467d"},"cell_type":"code","source":"fig, m_axs = plt.subplots(3,3, figsize = (16, 16))\nrand_idxs = np.random.choice(range(len(df1)), size = 9)\nfor c_id, c_ax in zip(rand_idxs, m_axs.flatten()):\n    image = stack_it(df1.iloc[c_id][\"drawing\"])\n    lab_idx = np.cumsum(image[:,2]-1)\n    for i in np.unique(lab_idx):\n        c_ax.plot(image[lab_idx==i,0], np.max(image[:,1])-image[lab_idx==i,1], '.-')\n    c_ax.axis('off')\n    c_ax.set_title(df1.index.values[c_id])","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}