Skip to content

Instantly share code, notes, and snippets.

@audhiaprilliant
Created July 13, 2021 02:23
Show Gist options
  • Select an option

  • Save audhiaprilliant/544c19b360f0f0e3d4cf85f8cafa40d6 to your computer and use it in GitHub Desktop.

Select an option

Save audhiaprilliant/544c19b360f0f0e3d4cf85f8cafa40d6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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