Created
July 13, 2021 02:23
-
-
Save audhiaprilliant/544c19b360f0f0e3d4cf85f8cafa40d6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "substantial-maker", | |
| "metadata": {}, | |
| "source": [ | |
| "# ID Card Identification" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "finished-choir", | |
| "metadata": {}, | |
| "source": [ | |
| "---" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "useful-senate", | |
| "metadata": {}, | |
| "source": [ | |
| "## Import modules" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "wired-muslim", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Module for data manipulation\n", | |
| "import pandas as pd\n", | |
| "# Module for linear algebra calculation\n", | |
| "import numpy as np\n", | |
| "# Module for timing\n", | |
| "from datetime import datetime\n", | |
| "# Module for binary search\n", | |
| "from bisect import bisect_left" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "regulation-final", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def binary_search(a, x):\n", | |
| " elem = bisect_left(a, x)\n", | |
| " # check the data\n", | |
| " status = False\n", | |
| " if elem != len(a) and a[elem] == x:\n", | |
| " status = True\n", | |
| " return status" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "phantom-difference", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1234567891234567" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "ID = int('1234567891234567')\n", | |
| "ID" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "monetary-bridal", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Check length of ID\n", | |
| "def checkLength(ID):\n", | |
| " length = len(str(ID))\n", | |
| " # check length\n", | |
| " status = False\n", | |
| " if length == 16:\n", | |
| " status = True\n", | |
| " return (status, length)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 32, | |
| "id": "satisfied-disclaimer", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, 16)" | |
| ] | |
| }, | |
| "execution_count": 32, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "checkLength(ID)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 30, | |
| "id": "crazy-board", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Check DOB\n", | |
| "def checkDOB(ID):\n", | |
| " dob = str(ID)[6:12]\n", | |
| " dob_person = int(dob)\n", | |
| " # Check the woman's dob\n", | |
| " if dob_person > 400000:\n", | |
| " dob_person = dob_person - 400000\n", | |
| " # Convert into datetime\n", | |
| " try:\n", | |
| " dob_date = datetime.strptime(str(dob_person), '%d%m%y')\n", | |
| " if dob_date > datetime.now():\n", | |
| " dob_date = dob_date.replace(year = dob_date.year - 100)\n", | |
| " except:\n", | |
| " dob_date = None\n", | |
| " # Check age\n", | |
| " status = False\n", | |
| " age_int = None\n", | |
| " if dob_date != None:\n", | |
| " age = (datetime.now() - dob_date).days / 365.2425\n", | |
| " dob_date = dob_date.strftime('%d-%m-%Y')\n", | |
| " if age >= 17:\n", | |
| " age_int = int(age)\n", | |
| " status = True\n", | |
| " return (status, dob_date, age_int)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 31, | |
| "id": "orange-dover", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(False, None, None)" | |
| ] | |
| }, | |
| "execution_count": 31, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "checkDOB(ID)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 33, | |
| "id": "bearing-physics", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Check gender\n", | |
| "def checkGender(ID):\n", | |
| " gender = str(ID)[6:7]\n", | |
| " # Check status\n", | |
| " status = False\n", | |
| " sex = None\n", | |
| " if int(gender) in range(8):\n", | |
| " if int(gender) in range(4):\n", | |
| " sex = 'Man'\n", | |
| " else:\n", | |
| " sex = 'Woman'\n", | |
| " status = True\n", | |
| " return (status, sex)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "id": "driving-louisville", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, 'Woman')" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "checkGender(ID)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "id": "criminal-providence", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Check computerized last number\n", | |
| "def checkComputerizedLastNumber(ID):\n", | |
| " last_num = str(ID)[12:]\n", | |
| " # Check last number\n", | |
| " status = False\n", | |
| " if status != '0000':\n", | |
| " status = True\n", | |
| " return (status, last_num)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "id": "engaging-joshua", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, '4567')" | |
| ] | |
| }, | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "checkComputerizedLastNumber(ID)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "id": "genetic-identification", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Load the data\n", | |
| "df = pd.read_csv('../data/csv/Admin Area Code - ID.csv', sep = ',', dtype = {'code': object})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "id": "nervous-month", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>code</th>\n", | |
| " <th>province</th>\n", | |
| " <th>district</th>\n", | |
| " <th>subdistrict</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>110101</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Bakongan</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>110102</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Kluet Utara</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>110103</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Kluet Selatan</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>110104</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Labuhan Haji</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>110105</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Meukek</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " code province district subdistrict\n", | |
| "0 110101 Aceh Kab. Aceh Selatan Bakongan\n", | |
| "1 110102 Aceh Kab. Aceh Selatan Kluet Utara\n", | |
| "2 110103 Aceh Kab. Aceh Selatan Kluet Selatan\n", | |
| "3 110104 Aceh Kab. Aceh Selatan Labuhan Haji\n", | |
| "4 110105 Aceh Kab. Aceh Selatan Meukek" | |
| ] | |
| }, | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 40, | |
| "id": "assisted-award", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'123456'" | |
| ] | |
| }, | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "str(ID)[:6]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "id": "willing-impossible", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def checkAdminArea(ID, data):\n", | |
| " admin_code = str(ID)[:6]\n", | |
| " # Check the admin area\n", | |
| " status = False\n", | |
| " prov, district, subdistrict = None, None, None\n", | |
| " bin_status = binary_search(a = data['code'], x = admin_code)\n", | |
| " if bin_status:\n", | |
| " status = True\n", | |
| " # Get the values\n", | |
| " prov, district, subdistrict = df[df['code'] == admin_code].values.tolist()[0][1:]\n", | |
| " return (status, prov, district, subdistrict)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 42, | |
| "id": "southwest-moment", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(False, None, None, None)" | |
| ] | |
| }, | |
| "execution_count": 42, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "checkLength(ID, df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "sporting-aaron", | |
| "metadata": {}, | |
| "source": [ | |
| "---" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 43, | |
| "id": "useful-schedule", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "class identificationID:\n", | |
| " def __init__(self, ID):\n", | |
| " self.ID = ID\n", | |
| " # Get value\n", | |
| " def get_value(self):\n", | |
| " return str(self.ID)\n", | |
| " # Check length of ID\n", | |
| " def checkLength(self):\n", | |
| " length = len(str(self.ID))\n", | |
| " # check length\n", | |
| " status = False\n", | |
| " if length == 16:\n", | |
| " status = True\n", | |
| " return (status, length)\n", | |
| " # Check administrative area\n", | |
| " def checkAdminArea(self, data):\n", | |
| " admin_code = str(self.ID)[:6]\n", | |
| " # Check the admin area\n", | |
| " status = False\n", | |
| " prov, district, subdistrict = None, None, None\n", | |
| " bin_status = binary_search(a = data['code'], x = admin_code)\n", | |
| " if bin_status:\n", | |
| " status = True\n", | |
| " # Get the values\n", | |
| " prov, district, subdistrict = df[df['code'] == admin_code].values.tolist()[0][1:]\n", | |
| " return (status, prov, district, subdistrict)\n", | |
| " # Check DOB\n", | |
| " def checkDOB(self):\n", | |
| " dob = str(self.ID)[6:12]\n", | |
| " dob_person = int(dob)\n", | |
| " # Check the woman's dob\n", | |
| " if dob_person > 400000:\n", | |
| " dob_person = dob_person - 400000\n", | |
| " # Convert into datetime\n", | |
| " try:\n", | |
| " dob_date = datetime.strptime(str(dob_person), '%d%m%y')\n", | |
| " if dob_date > datetime.now():\n", | |
| " dob_date = dob_date.replace(year = dob_date.year - 100)\n", | |
| " except:\n", | |
| " dob_date = None\n", | |
| " # Check age\n", | |
| " status = False\n", | |
| " age_int = None\n", | |
| " if dob_date != None:\n", | |
| " age = (datetime.now() - dob_date).days / 365.2425\n", | |
| " dob_date = dob_date.strftime('%d-%m-%Y')\n", | |
| " if age >= 17:\n", | |
| " age_int = int(age)\n", | |
| " status = True\n", | |
| " return (status, dob_date, age_int)\n", | |
| " # Check Gender\n", | |
| " def checkGender(self):\n", | |
| " gender = str(self.ID)[6:7]\n", | |
| " # Check status\n", | |
| " status = False\n", | |
| " sex = None\n", | |
| " if int(gender) in range(8):\n", | |
| " if int(gender) in range(4):\n", | |
| " sex = 'Man'\n", | |
| " else:\n", | |
| " sex = 'Woman'\n", | |
| " status = True\n", | |
| " return (status, sex)\n", | |
| " # Check computerized number\n", | |
| " def checkComputerizedNumber(self):\n", | |
| " last_num = str(self.ID)[12:]\n", | |
| " # Check last number\n", | |
| " status = False\n", | |
| " if status != '0000':\n", | |
| " status = True\n", | |
| " return (status, last_num)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "id": "photographic-acrylic", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "NIK = identificationID('1234567891234567')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "id": "exterior-boost", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, 16)" | |
| ] | |
| }, | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "NIK.checkLength()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "id": "protecting-elevation", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(False, None, None, None)" | |
| ] | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "NIK.checkAdminArea(data = df)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "id": "amber-average", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(False, None, None)" | |
| ] | |
| }, | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "NIK.checkDOB()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "id": "numerical-burke", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, 'Woman')" | |
| ] | |
| }, | |
| "execution_count": 48, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "NIK.checkGender()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "id": "smaller-trash", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(True, '4567')" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "NIK.checkComputerizedNumber()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "planned-ethics", | |
| "metadata": {}, | |
| "source": [ | |
| "---" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "id": "informational-flight", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "NIKs = ['1234567891234567', '1234567891234567', '1234567891234567', '1234567891234567']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "id": "improving-german", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Load the data\n", | |
| "df = pd.read_csv('../data/csv/Admin Area Code - ID.csv', sep = ',', dtype = {'code': object})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "id": "respected-hepatitis", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>code</th>\n", | |
| " <th>province</th>\n", | |
| " <th>district</th>\n", | |
| " <th>subdistrict</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>110101</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Bakongan</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>110102</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Kluet Utara</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>110103</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Kluet Selatan</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>110104</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Labuhan Haji</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>110105</td>\n", | |
| " <td>Aceh</td>\n", | |
| " <td>Kab. Aceh Selatan</td>\n", | |
| " <td>Meukek</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " code province district subdistrict\n", | |
| "0 110101 Aceh Kab. Aceh Selatan Bakongan\n", | |
| "1 110102 Aceh Kab. Aceh Selatan Kluet Utara\n", | |
| "2 110103 Aceh Kab. Aceh Selatan Kluet Selatan\n", | |
| "3 110104 Aceh Kab. Aceh Selatan Labuhan Haji\n", | |
| "4 110105 Aceh Kab. Aceh Selatan Meukek" | |
| ] | |
| }, | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "df.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 54, | |
| "id": "invalid-score", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Variables for summaries\n", | |
| "sum_number = 0\n", | |
| "sum_valid_number = 0\n", | |
| "sum_length = 0\n", | |
| "sum_area = 0\n", | |
| "sum_dob = 0\n", | |
| "sum_gender = 0\n", | |
| "sum_computerized = 0\n", | |
| "\n", | |
| "# json objects\n", | |
| "data_full = {}\n", | |
| "data_limited = {}\n", | |
| "\n", | |
| "# Looping\n", | |
| "for i in range(len(NIKs)):\n", | |
| " # Assign NIK into object\n", | |
| " NIK = identificationID(NIKs[i])\n", | |
| " NIK_value = NIK.get_value()\n", | |
| " \n", | |
| " # NIK's length\n", | |
| " stat_length, nik_length = NIK.checkLength()\n", | |
| " # NIK's admin area\n", | |
| " stat_area, nik_prov, nik_district, nik_subdistrict = NIK.checkAdminArea(data = df)\n", | |
| " # NIK's DOB\n", | |
| " stat_dob, nik_dob, nik_age = NIK.checkDOB()\n", | |
| " # NIK's gender\n", | |
| " stat_gender, nik_gender = NIK.checkGender()\n", | |
| " # NIK's last computerized number\n", | |
| " stat_comp, nik_comp = NIK.checkComputerizedNumber()\n", | |
| " \n", | |
| " # Summary\n", | |
| " valid_all = stat_length & stat_area & stat_dob & stat_gender & stat_comp\n", | |
| " sum_number += 1\n", | |
| " sum_valid_number += valid_all\n", | |
| " sum_length += stat_length\n", | |
| " sum_area += stat_area\n", | |
| " sum_dob += stat_dob\n", | |
| " sum_gender += stat_gender\n", | |
| " sum_computerized += stat_comp\n", | |
| " \n", | |
| " # Convert into json - data full\n", | |
| " dic_data_full = {\n", | |
| " NIK_value: {\n", | |
| " 'data': {\n", | |
| " 'length': {\n", | |
| " 'value': NIK_value,\n", | |
| " 'valid': stat_length\n", | |
| " },\n", | |
| " 'area': {\n", | |
| " 'value': {\n", | |
| " 'province': nik_prov,\n", | |
| " 'district': nik_district,\n", | |
| " 'subdistrict': nik_subdistrict\n", | |
| " },\n", | |
| " 'valid': stat_area\n", | |
| " },\n", | |
| " 'dob': {\n", | |
| " 'value': {\n", | |
| " 'dob': nik_dob,\n", | |
| " 'age': nik_age\n", | |
| " },\n", | |
| " 'valid': stat_dob\n", | |
| " },\n", | |
| " 'gender': {\n", | |
| " 'value': nik_gender,\n", | |
| " 'valid': stat_gender\n", | |
| " },\n", | |
| " 'computerized': {\n", | |
| " 'value': nik_comp,\n", | |
| " 'valid': stat_comp\n", | |
| " }\n", | |
| " },\n", | |
| " 'valid': valid_all\n", | |
| " }\n", | |
| " }\n", | |
| " # Convert into json - data limited\n", | |
| " dic_data_limited = {\n", | |
| " NIK_value: valid_all\n", | |
| " }\n", | |
| " \n", | |
| " # Append into json\n", | |
| " data_full = {**data_full, **dic_data_full}\n", | |
| " data_limited = {**data_limited, **dic_data_limited}\n", | |
| "\n", | |
| "# Convert into json - summary\n", | |
| "summary = {\n", | |
| " 'number': sum_number,\n", | |
| " 'valid_number': sum_valid_number,\n", | |
| " 'valid': {\n", | |
| " 'length': sum_length,\n", | |
| " 'area': sum_area,\n", | |
| " 'dob': sum_dob,\n", | |
| " 'gender': sum_gender,\n", | |
| " 'computerized': sum_computerized\n", | |
| " }\n", | |
| "}\n", | |
| "# Convert into json - master\n", | |
| "json_data_full = {'message': 'success','data': data_full, 'summary': summary}\n", | |
| "json_data_limited = {'message': 'success','data': data_limited, 'summary': summary}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 55, | |
| "id": "interracial-chicago", | |
| "metadata": { | |
| "scrolled": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'number': 4,\n", | |
| " 'valid_number': 0,\n", | |
| " 'valid': {'length': 4, 'area': 0, 'dob': 0, 'gender': 4, 'computerized': 4}}" | |
| ] | |
| }, | |
| "execution_count": 55, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "summary" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 56, | |
| "id": "material-mattress", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'1234567891234567': {'data': {'length': {'value': '1234567891234567',\n", | |
| " 'valid': True},\n", | |
| " 'area': {'value': {'province': None, 'district': None, 'subdistrict': None},\n", | |
| " 'valid': False},\n", | |
| " 'dob': {'value': {'dob': None, 'age': None}, 'valid': False},\n", | |
| " 'gender': {'value': 'Woman', 'valid': True},\n", | |
| " 'computerized': {'value': '4567', 'valid': True}},\n", | |
| " 'valid': False}}" | |
| ] | |
| }, | |
| "execution_count": 56, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data_full" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "id": "advanced-bryan", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1" | |
| ] | |
| }, | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(data_full)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 58, | |
| "id": "macro-czech", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'message': 'success',\n", | |
| " 'data': {'1234567891234567': {'data': {'length': {'value': '1234567891234567',\n", | |
| " 'valid': True},\n", | |
| " 'area': {'value': {'province': None,\n", | |
| " 'district': None,\n", | |
| " 'subdistrict': None},\n", | |
| " 'valid': False},\n", | |
| " 'dob': {'value': {'dob': None, 'age': None}, 'valid': False},\n", | |
| " 'gender': {'value': 'Woman', 'valid': True},\n", | |
| " 'computerized': {'value': '4567', 'valid': True}},\n", | |
| " 'valid': False}},\n", | |
| " 'summary': {'number': 4,\n", | |
| " 'valid_number': 0,\n", | |
| " 'valid': {'length': 4, 'area': 0, 'dob': 0, 'gender': 4, 'computerized': 4}}}" | |
| ] | |
| }, | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "json_data_full" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "id": "received-cornwall", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'1234567891234567': False}" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data_limited" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "id": "sufficient-spoke", | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "len(data_limited)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 61, | |
| "id": "suitable-feeding", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'message': 'success',\n", | |
| " 'data': {'1234567891234567': False},\n", | |
| " 'summary': {'number': 4,\n", | |
| " 'valid_number': 0,\n", | |
| " 'valid': {'length': 4, 'area': 0, 'dob': 0, 'gender': 4, 'computerized': 4}}}" | |
| ] | |
| }, | |
| "execution_count": 61, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "json_data_limited" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.8.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment