{
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  },
  "colab": {
   "provenance": []
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "WbMZ2VR4_F8p"
   },
   "source": "# MetaNalizerAI — PDF → **Tüm Datasheet** Güncelleyici (Colab)\n\n15 sheet × tüm column'lar taranır ve doldurulur.\n\n**Sheets:** Age, Gender, Marital Status, Income, Education, Ethnicity, Homeownership, Financial Dependents, Financial Stressors, Financial Stress Level, Financial Knowledge, Financial Literacy, Financial Behavior, Risk Tolerance, Solvency\n\n**İlke:** NO EVIDENCE → NO VALUE (`Human Verified=False` varsayılan)\n",
   "id": "WbMZ2VR4_F8p"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "1ash-ZnB_F8u"
   },
   "source": "## 0. Kurulum",
   "id": "1ash-ZnB_F8u"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "WNX8fJRi_F8v",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479391588,
     "user_tz": -180,
     "elapsed": 10171,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "ce6089c1-0777-4186-c5fd-7dbb688ab6f4"
   },
   "execution_count": 1,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m25.8/25.8 MB\u001b[0m \u001b[31m58.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25hOK /content/MetaNalizer\n"
     ]
    }
   ],
   "source": "!pip install -q pymupdf openpyxl pandas numpy\n\nfrom IPython.display import display, Markdown\nfrom pathlib import Path\nfrom datetime import datetime\nimport pandas as pd\n\ntry:\n    from google.colab import files\n    IN_COLAB = True\nexcept ImportError:\n    IN_COLAB = False\n\nBASE = Path(\"/content/MetaNalizer\")\nfor sub in [\"pdfs\", \"text\", \"export\", \"templates\"]:\n    (BASE / sub).mkdir(parents=True, exist_ok=True)\nprint(\"OK\", BASE)\n",
   "id": "WNX8fJRi_F8v"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Xp5mwoYt_F8x"
   },
   "source": "## 1. Engine yükle",
   "id": "Xp5mwoYt_F8x"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 382
    },
    "id": "BMzysugk_F8y",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479418440,
     "user_tz": -180,
     "elapsed": 10147,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "63e15206-4207-4fce-ef23-4a6a59d5c23f"
   },
   "execution_count": 2,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "metanalizer_extract_engine.py dosyasini secin...\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ],
      "text/html": [
       "\n",
       "     <input type=\"file\" id=\"files-9cf2868e-f02b-44f4-924e-ae7aa5c270bf\" name=\"files[]\" multiple disabled\n",
       "        style=\"border:none\" />\n",
       "     <output id=\"result-9cf2868e-f02b-44f4-924e-ae7aa5c270bf\">\n",
       "      Upload widget is only available when the cell has been executed in the\n",
       "      current browser session. Please rerun this cell to enable.\n",
       "      </output>\n",
       "      <script>// Copyright 2017 Google LLC\n",
       "//\n",
       "// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
       "// you may not use this file except in compliance with the License.\n",
       "// You may obtain a copy of the License at\n",
       "//\n",
       "//      http://www.apache.org/licenses/LICENSE-2.0\n",
       "//\n",
       "// Unless required by applicable law or agreed to in writing, software\n",
       "// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
       "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
       "// See the License for the specific language governing permissions and\n",
       "// limitations under the License.\n",
       "\n",
       "/**\n",
       " * @fileoverview Helpers for google.colab Python module.\n",
       " */\n",
       "(function(scope) {\n",
       "function span(text, styleAttributes = {}) {\n",
       "  const element = document.createElement('span');\n",
       "  element.textContent = text;\n",
       "  for (const key of Object.keys(styleAttributes)) {\n",
       "    element.style[key] = styleAttributes[key];\n",
       "  }\n",
       "  return element;\n",
       "}\n",
       "\n",
       "// Max number of bytes which will be uploaded at a time.\n",
       "const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
       "\n",
       "function _uploadFiles(inputId, outputId) {\n",
       "  const steps = uploadFilesStep(inputId, outputId);\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  // Cache steps on the outputElement to make it available for the next call\n",
       "  // to uploadFilesContinue from Python.\n",
       "  outputElement.steps = steps;\n",
       "\n",
       "  return _uploadFilesContinue(outputId);\n",
       "}\n",
       "\n",
       "// This is roughly an async generator (not supported in the browser yet),\n",
       "// where there are multiple asynchronous steps and the Python side is going\n",
       "// to poll for completion of each step.\n",
       "// This uses a Promise to block the python side on completion of each step,\n",
       "// then passes the result of the previous step as the input to the next step.\n",
       "function _uploadFilesContinue(outputId) {\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  const steps = outputElement.steps;\n",
       "\n",
       "  const next = steps.next(outputElement.lastPromiseValue);\n",
       "  return Promise.resolve(next.value.promise).then((value) => {\n",
       "    // Cache the last promise value to make it available to the next\n",
       "    // step of the generator.\n",
       "    outputElement.lastPromiseValue = value;\n",
       "    return next.value.response;\n",
       "  });\n",
       "}\n",
       "\n",
       "/**\n",
       " * Generator function which is called between each async step of the upload\n",
       " * process.\n",
       " * @param {string} inputId Element ID of the input file picker element.\n",
       " * @param {string} outputId Element ID of the output display.\n",
       " * @return {!Iterable<!Object>} Iterable of next steps.\n",
       " */\n",
       "function* uploadFilesStep(inputId, outputId) {\n",
       "  const inputElement = document.getElementById(inputId);\n",
       "  inputElement.disabled = false;\n",
       "\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  outputElement.innerHTML = '';\n",
       "\n",
       "  const pickedPromise = new Promise((resolve) => {\n",
       "    inputElement.addEventListener('change', (e) => {\n",
       "      resolve(e.target.files);\n",
       "    });\n",
       "  });\n",
       "\n",
       "  const cancel = document.createElement('button');\n",
       "  inputElement.parentElement.appendChild(cancel);\n",
       "  cancel.textContent = 'Cancel upload';\n",
       "  const cancelPromise = new Promise((resolve) => {\n",
       "    cancel.onclick = () => {\n",
       "      resolve(null);\n",
       "    };\n",
       "  });\n",
       "\n",
       "  // Wait for the user to pick the files.\n",
       "  const files = yield {\n",
       "    promise: Promise.race([pickedPromise, cancelPromise]),\n",
       "    response: {\n",
       "      action: 'starting',\n",
       "    }\n",
       "  };\n",
       "\n",
       "  cancel.remove();\n",
       "\n",
       "  // Disable the input element since further picks are not allowed.\n",
       "  inputElement.disabled = true;\n",
       "\n",
       "  if (!files) {\n",
       "    return {\n",
       "      response: {\n",
       "        action: 'complete',\n",
       "      }\n",
       "    };\n",
       "  }\n",
       "\n",
       "  for (const file of files) {\n",
       "    const li = document.createElement('li');\n",
       "    li.append(span(file.name, {fontWeight: 'bold'}));\n",
       "    li.append(span(\n",
       "        `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
       "        `last modified: ${\n",
       "            file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
       "                                    'n/a'} - `));\n",
       "    const percent = span('0% done');\n",
       "    li.appendChild(percent);\n",
       "\n",
       "    outputElement.appendChild(li);\n",
       "\n",
       "    const fileDataPromise = new Promise((resolve) => {\n",
       "      const reader = new FileReader();\n",
       "      reader.onload = (e) => {\n",
       "        resolve(e.target.result);\n",
       "      };\n",
       "      reader.readAsArrayBuffer(file);\n",
       "    });\n",
       "    // Wait for the data to be ready.\n",
       "    let fileData = yield {\n",
       "      promise: fileDataPromise,\n",
       "      response: {\n",
       "        action: 'continue',\n",
       "      }\n",
       "    };\n",
       "\n",
       "    // Use a chunked sending to avoid message size limits. See b/62115660.\n",
       "    let position = 0;\n",
       "    do {\n",
       "      const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
       "      const chunk = new Uint8Array(fileData, position, length);\n",
       "      position += length;\n",
       "\n",
       "      const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
       "      yield {\n",
       "        response: {\n",
       "          action: 'append',\n",
       "          file: file.name,\n",
       "          data: base64,\n",
       "        },\n",
       "      };\n",
       "\n",
       "      let percentDone = fileData.byteLength === 0 ?\n",
       "          100 :\n",
       "          Math.round((position / fileData.byteLength) * 100);\n",
       "      percent.textContent = `${percentDone}% done`;\n",
       "\n",
       "    } while (position < fileData.byteLength);\n",
       "  }\n",
       "\n",
       "  // All done.\n",
       "  yield {\n",
       "    response: {\n",
       "      action: 'complete',\n",
       "    }\n",
       "  };\n",
       "}\n",
       "\n",
       "scope.google = scope.google || {};\n",
       "scope.google.colab = scope.google.colab || {};\n",
       "scope.google.colab._files = {\n",
       "  _uploadFiles,\n",
       "  _uploadFilesContinue,\n",
       "};\n",
       "})(self);\n",
       "</script> "
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Saving metanalizer_extract_engine.py to metanalizer_extract_engine (1).py\n",
      "yuklendi metanalizer_extract_engine (1).py\n",
      "warning: The `fitz` API is deprecated and will be removed in future. Use `import pymupdf` instead.\n",
      "Sheet sayisi: 15\n",
      "  Age: 15 col\n",
      "  Gender: 20 col\n",
      "  Marital Status: 18 col\n",
      "  Income: 14 col\n",
      "  Education: 13 col\n",
      "  Ethnicity: 16 col\n",
      "  Homeownership: 14 col\n",
      "  Financial Dependents: 13 col\n",
      "  Financial Stressors: 14 col\n",
      "  Financial Stress Level: 15 col\n",
      "  Financial Knowledge: 15 col\n",
      "  Financial Literacy: 15 col\n",
      "  Financial Behavior: 15 col\n",
      "  Risk Tolerance: 13 col\n",
      "  Solvency: 13 col\n"
     ]
    }
   ],
   "source": "# Engine dosyasini Colab'a yukleyin (metanalizer_extract_engine.py)\n# veya asagida dogrudan calistirin.\n\nif IN_COLAB:\n    print(\"metanalizer_extract_engine.py dosyasini secin...\")\n    up = files.upload()\n    for name, data in up.items():\n        if name.endswith('.py'):\n            Path('/content/' + name).write_bytes(data)\n            print('yuklendi', name)\n\nimport sys\nsys.path.insert(0, '/content')\nsys.path.insert(0, '/home/workdir/artifacts')\nfrom metanalizer_extract_engine import (\n    SHEET_SCHEMAS, META_COLS, extract_common, extract_sheet_rows,\n    load_full_datasheet, merge_sheet, write_workbook\n)\nprint('Sheet sayisi:', len(SHEET_SCHEMAS))\nfor k,v in SHEET_SCHEMAS.items():\n    print(f'  {k}: {len(v)} col')\n",
   "id": "BMzysugk_F8y"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0qBahnDt_F8z"
   },
   "source": "## 2. Datasheet yükle (opsiyonel)",
   "id": "0qBahnDt_F8z"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 332
    },
    "id": "AZTL2_Be_F8z",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479439191,
     "user_tz": -180,
     "elapsed": 7759,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "e62e913b-1ffd-4197-9e50-c26abce5ac5b"
   },
   "execution_count": 3,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Datasheet.xlsx secin (opsiyonel)...\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ],
      "text/html": [
       "\n",
       "     <input type=\"file\" id=\"files-955ee949-e0bf-4ec4-95c3-2a8628e2efa7\" name=\"files[]\" multiple disabled\n",
       "        style=\"border:none\" />\n",
       "     <output id=\"result-955ee949-e0bf-4ec4-95c3-2a8628e2efa7\">\n",
       "      Upload widget is only available when the cell has been executed in the\n",
       "      current browser session. Please rerun this cell to enable.\n",
       "      </output>\n",
       "      <script>// Copyright 2017 Google LLC\n",
       "//\n",
       "// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
       "// you may not use this file except in compliance with the License.\n",
       "// You may obtain a copy of the License at\n",
       "//\n",
       "//      http://www.apache.org/licenses/LICENSE-2.0\n",
       "//\n",
       "// Unless required by applicable law or agreed to in writing, software\n",
       "// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
       "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
       "// See the License for the specific language governing permissions and\n",
       "// limitations under the License.\n",
       "\n",
       "/**\n",
       " * @fileoverview Helpers for google.colab Python module.\n",
       " */\n",
       "(function(scope) {\n",
       "function span(text, styleAttributes = {}) {\n",
       "  const element = document.createElement('span');\n",
       "  element.textContent = text;\n",
       "  for (const key of Object.keys(styleAttributes)) {\n",
       "    element.style[key] = styleAttributes[key];\n",
       "  }\n",
       "  return element;\n",
       "}\n",
       "\n",
       "// Max number of bytes which will be uploaded at a time.\n",
       "const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
       "\n",
       "function _uploadFiles(inputId, outputId) {\n",
       "  const steps = uploadFilesStep(inputId, outputId);\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  // Cache steps on the outputElement to make it available for the next call\n",
       "  // to uploadFilesContinue from Python.\n",
       "  outputElement.steps = steps;\n",
       "\n",
       "  return _uploadFilesContinue(outputId);\n",
       "}\n",
       "\n",
       "// This is roughly an async generator (not supported in the browser yet),\n",
       "// where there are multiple asynchronous steps and the Python side is going\n",
       "// to poll for completion of each step.\n",
       "// This uses a Promise to block the python side on completion of each step,\n",
       "// then passes the result of the previous step as the input to the next step.\n",
       "function _uploadFilesContinue(outputId) {\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  const steps = outputElement.steps;\n",
       "\n",
       "  const next = steps.next(outputElement.lastPromiseValue);\n",
       "  return Promise.resolve(next.value.promise).then((value) => {\n",
       "    // Cache the last promise value to make it available to the next\n",
       "    // step of the generator.\n",
       "    outputElement.lastPromiseValue = value;\n",
       "    return next.value.response;\n",
       "  });\n",
       "}\n",
       "\n",
       "/**\n",
       " * Generator function which is called between each async step of the upload\n",
       " * process.\n",
       " * @param {string} inputId Element ID of the input file picker element.\n",
       " * @param {string} outputId Element ID of the output display.\n",
       " * @return {!Iterable<!Object>} Iterable of next steps.\n",
       " */\n",
       "function* uploadFilesStep(inputId, outputId) {\n",
       "  const inputElement = document.getElementById(inputId);\n",
       "  inputElement.disabled = false;\n",
       "\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  outputElement.innerHTML = '';\n",
       "\n",
       "  const pickedPromise = new Promise((resolve) => {\n",
       "    inputElement.addEventListener('change', (e) => {\n",
       "      resolve(e.target.files);\n",
       "    });\n",
       "  });\n",
       "\n",
       "  const cancel = document.createElement('button');\n",
       "  inputElement.parentElement.appendChild(cancel);\n",
       "  cancel.textContent = 'Cancel upload';\n",
       "  const cancelPromise = new Promise((resolve) => {\n",
       "    cancel.onclick = () => {\n",
       "      resolve(null);\n",
       "    };\n",
       "  });\n",
       "\n",
       "  // Wait for the user to pick the files.\n",
       "  const files = yield {\n",
       "    promise: Promise.race([pickedPromise, cancelPromise]),\n",
       "    response: {\n",
       "      action: 'starting',\n",
       "    }\n",
       "  };\n",
       "\n",
       "  cancel.remove();\n",
       "\n",
       "  // Disable the input element since further picks are not allowed.\n",
       "  inputElement.disabled = true;\n",
       "\n",
       "  if (!files) {\n",
       "    return {\n",
       "      response: {\n",
       "        action: 'complete',\n",
       "      }\n",
       "    };\n",
       "  }\n",
       "\n",
       "  for (const file of files) {\n",
       "    const li = document.createElement('li');\n",
       "    li.append(span(file.name, {fontWeight: 'bold'}));\n",
       "    li.append(span(\n",
       "        `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
       "        `last modified: ${\n",
       "            file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
       "                                    'n/a'} - `));\n",
       "    const percent = span('0% done');\n",
       "    li.appendChild(percent);\n",
       "\n",
       "    outputElement.appendChild(li);\n",
       "\n",
       "    const fileDataPromise = new Promise((resolve) => {\n",
       "      const reader = new FileReader();\n",
       "      reader.onload = (e) => {\n",
       "        resolve(e.target.result);\n",
       "      };\n",
       "      reader.readAsArrayBuffer(file);\n",
       "    });\n",
       "    // Wait for the data to be ready.\n",
       "    let fileData = yield {\n",
       "      promise: fileDataPromise,\n",
       "      response: {\n",
       "        action: 'continue',\n",
       "      }\n",
       "    };\n",
       "\n",
       "    // Use a chunked sending to avoid message size limits. See b/62115660.\n",
       "    let position = 0;\n",
       "    do {\n",
       "      const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
       "      const chunk = new Uint8Array(fileData, position, length);\n",
       "      position += length;\n",
       "\n",
       "      const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
       "      yield {\n",
       "        response: {\n",
       "          action: 'append',\n",
       "          file: file.name,\n",
       "          data: base64,\n",
       "        },\n",
       "      };\n",
       "\n",
       "      let percentDone = fileData.byteLength === 0 ?\n",
       "          100 :\n",
       "          Math.round((position / fileData.byteLength) * 100);\n",
       "      percent.textContent = `${percentDone}% done`;\n",
       "\n",
       "    } while (position < fileData.byteLength);\n",
       "  }\n",
       "\n",
       "  // All done.\n",
       "  yield {\n",
       "    response: {\n",
       "      action: 'complete',\n",
       "    }\n",
       "  };\n",
       "}\n",
       "\n",
       "scope.google = scope.google || {};\n",
       "scope.google.colab = scope.google.colab || {};\n",
       "scope.google.colab._files = {\n",
       "  _uploadFiles,\n",
       "  _uploadFilesContinue,\n",
       "};\n",
       "})(self);\n",
       "</script> "
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Saving Datasheet_Updated_20260915_1153.xlsx to Datasheet_Updated_20260915_1153.xlsx\n",
      "  Age: 92\n",
      "  Gender: 0\n",
      "  Marital Status: 0\n",
      "  Income: 0\n",
      "  Education: 0\n",
      "  Ethnicity: 0\n",
      "  Homeownership: 0\n",
      "  Financial Dependents: 0\n",
      "  Financial Stressors: 0\n",
      "  Financial Stress Level: 0\n",
      "  Financial Knowledge: 0\n",
      "  Financial Literacy: 0\n",
      "  Financial Behavior: 0\n",
      "  Risk Tolerance: 0\n",
      "  Solvency: 0\n"
     ]
    }
   ],
   "source": "existing = load_full_datasheet(None)\nif IN_COLAB:\n    print('Datasheet.xlsx secin (opsiyonel)...')\n    up = files.upload()\n    for name, data in up.items():\n        if name.lower().endswith(('.xlsx','.xls')):\n            dest = BASE/'templates'/name\n            dest.write_bytes(data)\n            existing = load_full_datasheet(dest)\n            for s,df in existing.items():\n                print(f'  {s}: {len(df)}')\n            break\nelse:\n    p = Path('/home/workdir/attachments/Datasheet.xlsx')\n    if p.exists():\n        existing = load_full_datasheet(p)\n        for s,df in existing.items():\n            print(f'  {s}: {len(df)}')\n",
   "id": "AZTL2_Be_F8z"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rsns9EW6_F80"
   },
   "source": "## 3. PDF yükle",
   "id": "rsns9EW6_F80"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "2h2S03Wt_F80",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479578802,
     "user_tz": -180,
     "elapsed": 133138,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "93fc9023-f247-444d-cfe3-589e62d3cc3c"
   },
   "execution_count": 4,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "PDF secin (coklu)...\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ],
      "text/html": [
       "\n",
       "     <input type=\"file\" id=\"files-b5806ea0-9506-4d50-b934-30e7207ff5c3\" name=\"files[]\" multiple disabled\n",
       "        style=\"border:none\" />\n",
       "     <output id=\"result-b5806ea0-9506-4d50-b934-30e7207ff5c3\">\n",
       "      Upload widget is only available when the cell has been executed in the\n",
       "      current browser session. Please rerun this cell to enable.\n",
       "      </output>\n",
       "      <script>// Copyright 2017 Google LLC\n",
       "//\n",
       "// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
       "// you may not use this file except in compliance with the License.\n",
       "// You may obtain a copy of the License at\n",
       "//\n",
       "//      http://www.apache.org/licenses/LICENSE-2.0\n",
       "//\n",
       "// Unless required by applicable law or agreed to in writing, software\n",
       "// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
       "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
       "// See the License for the specific language governing permissions and\n",
       "// limitations under the License.\n",
       "\n",
       "/**\n",
       " * @fileoverview Helpers for google.colab Python module.\n",
       " */\n",
       "(function(scope) {\n",
       "function span(text, styleAttributes = {}) {\n",
       "  const element = document.createElement('span');\n",
       "  element.textContent = text;\n",
       "  for (const key of Object.keys(styleAttributes)) {\n",
       "    element.style[key] = styleAttributes[key];\n",
       "  }\n",
       "  return element;\n",
       "}\n",
       "\n",
       "// Max number of bytes which will be uploaded at a time.\n",
       "const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
       "\n",
       "function _uploadFiles(inputId, outputId) {\n",
       "  const steps = uploadFilesStep(inputId, outputId);\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  // Cache steps on the outputElement to make it available for the next call\n",
       "  // to uploadFilesContinue from Python.\n",
       "  outputElement.steps = steps;\n",
       "\n",
       "  return _uploadFilesContinue(outputId);\n",
       "}\n",
       "\n",
       "// This is roughly an async generator (not supported in the browser yet),\n",
       "// where there are multiple asynchronous steps and the Python side is going\n",
       "// to poll for completion of each step.\n",
       "// This uses a Promise to block the python side on completion of each step,\n",
       "// then passes the result of the previous step as the input to the next step.\n",
       "function _uploadFilesContinue(outputId) {\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  const steps = outputElement.steps;\n",
       "\n",
       "  const next = steps.next(outputElement.lastPromiseValue);\n",
       "  return Promise.resolve(next.value.promise).then((value) => {\n",
       "    // Cache the last promise value to make it available to the next\n",
       "    // step of the generator.\n",
       "    outputElement.lastPromiseValue = value;\n",
       "    return next.value.response;\n",
       "  });\n",
       "}\n",
       "\n",
       "/**\n",
       " * Generator function which is called between each async step of the upload\n",
       " * process.\n",
       " * @param {string} inputId Element ID of the input file picker element.\n",
       " * @param {string} outputId Element ID of the output display.\n",
       " * @return {!Iterable<!Object>} Iterable of next steps.\n",
       " */\n",
       "function* uploadFilesStep(inputId, outputId) {\n",
       "  const inputElement = document.getElementById(inputId);\n",
       "  inputElement.disabled = false;\n",
       "\n",
       "  const outputElement = document.getElementById(outputId);\n",
       "  outputElement.innerHTML = '';\n",
       "\n",
       "  const pickedPromise = new Promise((resolve) => {\n",
       "    inputElement.addEventListener('change', (e) => {\n",
       "      resolve(e.target.files);\n",
       "    });\n",
       "  });\n",
       "\n",
       "  const cancel = document.createElement('button');\n",
       "  inputElement.parentElement.appendChild(cancel);\n",
       "  cancel.textContent = 'Cancel upload';\n",
       "  const cancelPromise = new Promise((resolve) => {\n",
       "    cancel.onclick = () => {\n",
       "      resolve(null);\n",
       "    };\n",
       "  });\n",
       "\n",
       "  // Wait for the user to pick the files.\n",
       "  const files = yield {\n",
       "    promise: Promise.race([pickedPromise, cancelPromise]),\n",
       "    response: {\n",
       "      action: 'starting',\n",
       "    }\n",
       "  };\n",
       "\n",
       "  cancel.remove();\n",
       "\n",
       "  // Disable the input element since further picks are not allowed.\n",
       "  inputElement.disabled = true;\n",
       "\n",
       "  if (!files) {\n",
       "    return {\n",
       "      response: {\n",
       "        action: 'complete',\n",
       "      }\n",
       "    };\n",
       "  }\n",
       "\n",
       "  for (const file of files) {\n",
       "    const li = document.createElement('li');\n",
       "    li.append(span(file.name, {fontWeight: 'bold'}));\n",
       "    li.append(span(\n",
       "        `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
       "        `last modified: ${\n",
       "            file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
       "                                    'n/a'} - `));\n",
       "    const percent = span('0% done');\n",
       "    li.appendChild(percent);\n",
       "\n",
       "    outputElement.appendChild(li);\n",
       "\n",
       "    const fileDataPromise = new Promise((resolve) => {\n",
       "      const reader = new FileReader();\n",
       "      reader.onload = (e) => {\n",
       "        resolve(e.target.result);\n",
       "      };\n",
       "      reader.readAsArrayBuffer(file);\n",
       "    });\n",
       "    // Wait for the data to be ready.\n",
       "    let fileData = yield {\n",
       "      promise: fileDataPromise,\n",
       "      response: {\n",
       "        action: 'continue',\n",
       "      }\n",
       "    };\n",
       "\n",
       "    // Use a chunked sending to avoid message size limits. See b/62115660.\n",
       "    let position = 0;\n",
       "    do {\n",
       "      const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
       "      const chunk = new Uint8Array(fileData, position, length);\n",
       "      position += length;\n",
       "\n",
       "      const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
       "      yield {\n",
       "        response: {\n",
       "          action: 'append',\n",
       "          file: file.name,\n",
       "          data: base64,\n",
       "        },\n",
       "      };\n",
       "\n",
       "      let percentDone = fileData.byteLength === 0 ?\n",
       "          100 :\n",
       "          Math.round((position / fileData.byteLength) * 100);\n",
       "      percent.textContent = `${percentDone}% done`;\n",
       "\n",
       "    } while (position < fileData.byteLength);\n",
       "  }\n",
       "\n",
       "  // All done.\n",
       "  yield {\n",
       "    response: {\n",
       "      action: 'complete',\n",
       "    }\n",
       "  };\n",
       "}\n",
       "\n",
       "scope.google = scope.google || {};\n",
       "scope.google.colab = scope.google.colab || {};\n",
       "scope.google.colab._files = {\n",
       "  _uploadFiles,\n",
       "  _uploadFilesContinue,\n",
       "};\n",
       "})(self);\n",
       "</script> "
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Saving 49- Lim and Lee (2021).pdf to 49- Lim and Lee (2021).pdf\n",
      "Saving 47- Lee et al. (2023a).pdf to 47- Lee et al. (2023a).pdf\n",
      "Saving 46- Lee and Dustin (2021).pdf to 46- Lee and Dustin (2021).pdf\n",
      "Saving 44- Kırbıs et al. (2016).pdf to 44- Kırbıs et al. (2016).pdf\n",
      "Saving 131- Losada-Otalora et al. (2018).pdf to 131- Losada-Otalora et al. (2018).pdf\n",
      "Saving 127- Kim and Chen (2011).pdf to 127- Kim and Chen (2011).pdf\n",
      "Saving 76- Kim et al. (2020).pdf to 76- Kim et al. (2020).pdf\n",
      "Saving 75- Kim and Kang (2016).pdf to 75- Kim and Kang (2016).pdf\n",
      "Saving 74- Kasper et al. (2019).pdf to 74- Kasper et al. (2019).pdf\n",
      "Saving 53- Mugenda et al. (1990).pdf to 53- Mugenda et al. (1990).pdf\n",
      "Saving 52- Mottola et al. (2024).pdf to 52- Mottola et al. (2024).pdf\n",
      "Saving 51- Michalos and Orlando (2006).pdf to 51- Michalos and Orlando (2006).pdf\n",
      "Saving 143- Philippas and Avdoulas (2019).pdf to 143- Philippas and Avdoulas (2019).pdf\n",
      "Saving 141- Peach (2019).pdf to 141- Peach (2019).pdf\n",
      "Saving 140- Parotta and Johnson, 1998.pdf to 140- Parotta and Johnson, 1998.pdf\n",
      "Saving 139- Ochnik and Arzensek (2020).pdf to 139- Ochnik and Arzensek (2020).pdf\n",
      "Saving 94- Pothisiri and Quashie (2016).pdf to 94- Pothisiri and Quashie (2016).pdf\n",
      "Saving 93- Plagnol (2011).pdf to 93- Plagnol (2011).pdf\n",
      "Saving 92- Park et al. (2021).pdf to 92- Park et al. (2021).pdf\n",
      "Saving 91- Pak and Fan (2022).pdf to 91- Pak and Fan (2022).pdf\n",
      "Saving 90- Nadirov et al. (2021).pdf to 90- Nadirov et al. (2021).pdf\n",
      "Saving 89- Mitrut and Wolff (2011).pdf to 89- Mitrut and Wolff (2011).pdf\n",
      "Saving 88- Migheli (2019).pdf to 88- Migheli (2019).pdf\n",
      "Saving 87- Medgyesi and Zolyomi (2016).pdf to 87- Medgyesi and Zolyomi (2016).pdf\n",
      "Saving 86- Mathur and Kasper (2019).pdf to 86- Mathur and Kasper (2019).pdf\n",
      "Saving 65- Yeo and Lee (2019).pdf to 65- Yeo and Lee (2019).pdf\n",
      "Saving 62- Tahir et al. (2023).pdf to 62- Tahir et al. (2023).pdf\n",
      "Saving 160- Zyphur et al. (2015).pdf to 160- Zyphur et al. (2015).pdf\n",
      "Saving 159- Zhang and Cao (2010).pdf to 159- Zhang and Cao (2010).pdf\n",
      "Saving 156- Wheeler and Brooks (2023).pdf to 156- Wheeler and Brooks (2023).pdf\n",
      "Saving 153- Tang et al. (2014).pdf to 153- Tang et al. (2014).pdf\n",
      "Saving 152- Stephan (2009).pdf to 152- Stephan (2009).pdf\n",
      "Saving 149- Sahi (2013).pdf to 149- Sahi (2013).pdf\n",
      "Saving 146- Rosen and Moghadam (1991).pdf to 146- Rosen and Moghadam (1991).pdf\n",
      "Saving 145- Reker and Woo (2011).pdf to 145- Reker and Woo (2011).pdf\n",
      "Saving 111- Xiao et al. (2024) --.pdf to 111- Xiao et al. (2024) --.pdf\n",
      "Saving 107- Vera-Toscano et al. (2006).pdf to 107- Vera-Toscano et al. (2006).pdf\n",
      "Saving 103- Song (2015).pdf to 103- Song (2015).pdf\n",
      "Saving 97- Roy and Godfrey (2016).pdf to 97- Roy and Godfrey (2016).pdf\n",
      "Saving 95- Rautio et al. (2013).pdf to 95- Rautio et al. (2013).pdf\n",
      "  49- Lim and Lee (2021).pdf\n",
      "  47- Lee et al. (2023a).pdf\n",
      "  46- Lee and Dustin (2021).pdf\n",
      "  44- Kırbıs et al. (2016).pdf\n",
      "  131- Losada-Otalora et al. (2018).pdf\n",
      "  127- Kim and Chen (2011).pdf\n",
      "  76- Kim et al. (2020).pdf\n",
      "  75- Kim and Kang (2016).pdf\n",
      "  74- Kasper et al. (2019).pdf\n",
      "  53- Mugenda et al. (1990).pdf\n",
      "  52- Mottola et al. (2024).pdf\n",
      "  51- Michalos and Orlando (2006).pdf\n",
      "  143- Philippas and Avdoulas (2019).pdf\n",
      "  141- Peach (2019).pdf\n",
      "  140- Parotta and Johnson, 1998.pdf\n",
      "  139- Ochnik and Arzensek (2020).pdf\n",
      "  94- Pothisiri and Quashie (2016).pdf\n",
      "  93- Plagnol (2011).pdf\n",
      "  92- Park et al. (2021).pdf\n",
      "  91- Pak and Fan (2022).pdf\n",
      "  90- Nadirov et al. (2021).pdf\n",
      "  89- Mitrut and Wolff (2011).pdf\n",
      "  88- Migheli (2019).pdf\n",
      "  87- Medgyesi and Zolyomi (2016).pdf\n",
      "  86- Mathur and Kasper (2019).pdf\n",
      "  65- Yeo and Lee (2019).pdf\n",
      "  62- Tahir et al. (2023).pdf\n",
      "  160- Zyphur et al. (2015).pdf\n",
      "  159- Zhang and Cao (2010).pdf\n",
      "  156- Wheeler and Brooks (2023).pdf\n",
      "  153- Tang et al. (2014).pdf\n",
      "  152- Stephan (2009).pdf\n",
      "  149- Sahi (2013).pdf\n",
      "  146- Rosen and Moghadam (1991).pdf\n",
      "  145- Reker and Woo (2011).pdf\n",
      "  111- Xiao et al. (2024) --.pdf\n",
      "  107- Vera-Toscano et al. (2006).pdf\n",
      "  103- Song (2015).pdf\n",
      "  97- Roy and Godfrey (2016).pdf\n",
      "  95- Rautio et al. (2013).pdf\n",
      "PDF: 40\n"
     ]
    }
   ],
   "source": "pdf_files = []\nif IN_COLAB:\n    print('PDF secin (coklu)...')\n    up = files.upload()\n    for name, data in up.items():\n        if name.lower().endswith('.pdf'):\n            dest = BASE/'pdfs'/name\n            dest.write_bytes(data)\n            pdf_files.append(dest)\n            print(' ', name)\nelse:\n    pdf_files = sorted(Path('/home/workdir/attachments').glob('*.pdf'))\nprint('PDF:', len(pdf_files))\n",
   "id": "2h2S03Wt_F80"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rC6mNl7g_F81"
   },
   "source": "## 4. Tara — tüm sheetler",
   "id": "rC6mNl7g_F81"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "jBZ9gSbr_F81",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479683351,
     "user_tz": -180,
     "elapsed": 8462,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "072a59f6-3945-4e1f-fd84-8cf3d4dbfe72"
   },
   "execution_count": 5,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      ">> 49- Lim and Lee (2021).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=None N=803 age=None\n",
      ">> 47- Lee et al. (2023a).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   country=UK N=1200 age=None\n",
      ">> 46- Lee and Dustin (2021).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=USA N=None age=None\n",
      ">> 44- Kırbıs et al. (2016).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Croatia N=900 age=None\n",
      ">> 131- Losada-Otalora et al. (2018).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Colombia N=400 age=None\n",
      ">> 127- Kim and Chen (2011).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Canada N=148 age=74.01\n",
      ">> 76- Kim et al. (2020).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Korea N=None age=44.0\n",
      ">> 75- Kim and Kang (2016).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   country=Korea N=742 age=56.5\n",
      ">> 74- Kasper et al. (2019).pdf\n",
      "   Age: 1 | r=0.245\n",
      "   Gender: 1 | r=0.178\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=0.27\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=Netherlands N=None age=None\n",
      ">> 53- Mugenda et al. (1990).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=0.4\n",
      "   Financial Dependents: 1 | r=0.33\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=None N=None age=49.0\n",
      ">> 52- Mottola et al. (2024).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Risk Tolerance: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=USA N=28 age=None\n",
      ">> 51- Michalos and Orlando (2006).pdf\n",
      "   Age: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=0.49\n",
      "   country=Canada N=3407 age=None\n",
      ">> 143- Philippas and Avdoulas (2019).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Greece N=456 age=None\n",
      ">> 141- Peach (2019).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   country=Canada N=None age=None\n",
      ">> 140- Parotta and Johnson, 1998.pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=0.74\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=0.43\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=Canada N=726 age=None\n",
      ">> 139- Ochnik and Arzensek (2020).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Poland N=799 age=None\n",
      ">> 94- Pothisiri and Quashie (2016).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Thailand N=10 age=None\n",
      ">> 93- Plagnol (2011).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=UK N=13 age=None\n",
      ">> 92- Park et al. (2021).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=USA N=1829 age=61.0\n",
      ">> 91- Pak and Fan (2022).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=Korea N=None age=None\n",
      ">> 90- Nadirov et al. (2021).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Azerbaijan N=2208 age=None\n",
      ">> 89- Mitrut and Wolff (2011).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Romania N=2641 age=None\n",
      ">> 88- Migheli (2019).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=India N=130 age=None\n",
      ">> 87- Medgyesi and Zolyomi (2016).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   country=UK N=None age=None\n",
      ">> 86- Mathur and Kasper (2019).pdf\n",
      "   Age: 1 | r=0.226\n",
      "   Gender: 1 | r=-0.27\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=0.221\n",
      "   country=Netherlands N=191 age=None\n",
      ">> 65- Yeo and Lee (2019).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=Germany N=4682 age=None\n",
      ">> 62- Tahir et al. (2023).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Risk Tolerance: 1 | r=None\n",
      "   country=Australia N=694 age=46.0\n",
      ">> 160- Zyphur et al. (2015).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Risk Tolerance: 1 | r=None\n",
      "   country=USA N=528 age=44.66\n",
      ">> 159- Zhang and Cao (2010).pdf\n",
      "   Age: 1 | r=0.598\n",
      "   Gender: 1 | r=0.598\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=China N=319 age=None\n",
      ">> 156- Wheeler and Brooks (2023).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=0.25\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=USA N=207 age=20.39\n",
      ">> 153- Tang et al. (2014).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Spain N=459 age=None\n",
      ">> 152- Stephan (2009).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   country=France N=235 age=None\n",
      ">> 149- Sahi (2013).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=India N=374 age=None\n",
      ">> 146- Rosen and Moghadam (1991).pdf\n",
      "   Age: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Germany N=250 age=None\n",
      ">> 145- Reker and Woo (2011).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=Canada N=32 age=None\n",
      ">> 111- Xiao et al. (2024) --.pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Financial Literacy: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=China N=None age=None\n",
      ">> 107- Vera-Toscano et al. (2006).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Behavior: 1 | r=None\n",
      "   country=Spain N=0 age=None\n",
      ">> 103- Song (2015).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=China N=500 age=None\n",
      ">> 97- Roy and Godfrey (2016).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   country=USA N=255 age=None\n",
      ">> 95- Rautio et al. (2013).pdf\n",
      "   Age: 1 | r=None\n",
      "   Gender: 1 | r=None\n",
      "   Marital Status: 1 | r=None\n",
      "   Income: 1 | r=None\n",
      "   Education: 1 | r=None\n",
      "   Ethnicity: 1 | r=None\n",
      "   Homeownership: 1 | r=None\n",
      "   Financial Dependents: 1 | r=None\n",
      "   Financial Stressors: 1 | r=None\n",
      "   Financial Stress Level: 1 | r=None\n",
      "   Financial Knowledge: 1 | r=None\n",
      "   Risk Tolerance: 1 | r=None\n",
      "   Solvency: 1 | r=None\n",
      "   country=Finland N=296 age=None\n",
      "Age: 40 aday\n",
      "Gender: 38 aday\n",
      "Marital Status: 35 aday\n",
      "Income: 34 aday\n",
      "Education: 39 aday\n",
      "Ethnicity: 13 aday\n",
      "Homeownership: 16 aday\n",
      "Financial Dependents: 38 aday\n",
      "Financial Stressors: 14 aday\n",
      "Financial Stress Level: 14 aday\n",
      "Financial Knowledge: 15 aday\n",
      "Financial Literacy: 10 aday\n",
      "Financial Behavior: 20 aday\n",
      "Risk Tolerance: 4 aday\n",
      "Solvency: 11 aday\n"
     ]
    }
   ],
   "source": "all_candidates = {s: [] for s in SHEET_SCHEMAS}\nmetas = []\nfor p in pdf_files:\n    print('>>', p.name)\n    try:\n        meta = extract_common(p, text_dir=BASE/'text')\n        metas.append(meta)\n        sheet_rows = extract_sheet_rows(meta)\n        for sheet, rows in sheet_rows.items():\n            all_candidates[sheet].extend(rows)\n            if rows:\n                print(f'   {sheet}: {len(rows)} | r={rows[0].get(\"Correlation Coefficient\")}')\n        print(f'   country={meta.country} N={meta.sample_size} age={meta.mean_age}')\n    except Exception as e:\n        print('   HATA:', e)\n\ncandidate_dfs = {}\nfor sheet, rows in all_candidates.items():\n    cols = SHEET_SCHEMAS[sheet] + META_COLS\n    df = pd.DataFrame(rows)\n    for c in cols:\n        if c not in df.columns:\n            df[c] = None\n    candidate_dfs[sheet] = df[cols] if len(df) else pd.DataFrame(columns=cols)\n    print(f'{sheet}: {len(candidate_dfs[sheet])} aday')\n",
   "id": "jBZ9gSbr_F81"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "JAXEbeZk_F82"
   },
   "source": "## 5. Önizleme",
   "id": "JAXEbeZk_F82"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "eM_UZUTS_F82",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479688006,
     "user_tz": -180,
     "elapsed": 308,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "09d47637-f826-4e83-c0ea-7059d7d5bc15"
   },
   "execution_count": 6,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Age 40\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                       Study ID   Country  Sample Size  \\\n",
       "0            Lim and Lee (2021)      None        803.0   \n",
       "1            Lee et al. (2023a)        UK       1200.0   \n",
       "2         Lee and Dustin (2021)       USA          NaN   \n",
       "3          Kırbıs et al. (2016)   Croatia        900.0   \n",
       "4  Losada-Otalora et al. (2018)  Colombia        400.0   \n",
       "5           Kim and Chen (2011)    Canada        148.0   \n",
       "\n",
       "   Correlation Coefficient  Mean Age Value Status  \n",
       "0                      NaN       NaN      PENDING  \n",
       "1                      NaN       NaN      PENDING  \n",
       "2                      NaN       NaN      PENDING  \n",
       "3                      NaN       NaN      PENDING  \n",
       "4                      NaN       NaN      PENDING  \n",
       "5                      NaN     74.01      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-665f9f6d-8d2f-4126-858a-a96520c78602\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Mean Age</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lim and Lee (2021)</td>\n",
       "      <td>None</td>\n",
       "      <td>803.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lee et al. (2023a)</td>\n",
       "      <td>UK</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lee and Dustin (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kırbıs et al. (2016)</td>\n",
       "      <td>Croatia</td>\n",
       "      <td>900.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Losada-Otalora et al. (2018)</td>\n",
       "      <td>Colombia</td>\n",
       "      <td>400.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kim and Chen (2011)</td>\n",
       "      <td>Canada</td>\n",
       "      <td>148.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>74.01</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-665f9f6d-8d2f-4126-858a-a96520c78602')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-665f9f6d-8d2f-4126-858a-a96520c78602 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-665f9f6d-8d2f-4126-858a-a96520c78602');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"        display(df[cols]\",\n  \"rows\": 6,\n  \"fields\": [\n    {\n      \"column\": \"Study ID\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Lim and Lee (2021)\",\n          \"Lee et al. (2023a)\",\n          \"Kim and Chen (2011)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Country\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"USA\",\n          \"Canada\",\n          \"Croatia\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Sample Size\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 416.78315704932226,\n        \"min\": 148.0,\n        \"max\": 1200.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          1200.0,\n          148.0,\n          900.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Correlation Coefficient\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": null,\n        \"max\": null,\n        \"num_unique_values\": 0,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Mean Age\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": 74.01,\n        \"max\": 74.01,\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Value Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Gender 38\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                       Study ID   Country  Sample Size  \\\n",
       "0            Lim and Lee (2021)      None        803.0   \n",
       "1            Lee et al. (2023a)        UK       1200.0   \n",
       "2         Lee and Dustin (2021)       USA          NaN   \n",
       "3          Kırbıs et al. (2016)   Croatia        900.0   \n",
       "4  Losada-Otalora et al. (2018)  Colombia        400.0   \n",
       "5           Kim and Chen (2011)    Canada        148.0   \n",
       "\n",
       "   Correlation Coefficient Value Status  \n",
       "0                      NaN      PENDING  \n",
       "1                      NaN      PENDING  \n",
       "2                      NaN      PENDING  \n",
       "3                      NaN      PENDING  \n",
       "4                      NaN      PENDING  \n",
       "5                      NaN      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-effc16c7-2f2f-4565-aaa0-159fec0622d2\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lim and Lee (2021)</td>\n",
       "      <td>None</td>\n",
       "      <td>803.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lee et al. (2023a)</td>\n",
       "      <td>UK</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lee and Dustin (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kırbıs et al. (2016)</td>\n",
       "      <td>Croatia</td>\n",
       "      <td>900.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Losada-Otalora et al. (2018)</td>\n",
       "      <td>Colombia</td>\n",
       "      <td>400.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kim and Chen (2011)</td>\n",
       "      <td>Canada</td>\n",
       "      <td>148.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-effc16c7-2f2f-4565-aaa0-159fec0622d2')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-effc16c7-2f2f-4565-aaa0-159fec0622d2 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-effc16c7-2f2f-4565-aaa0-159fec0622d2');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"        display(df[cols]\",\n  \"rows\": 6,\n  \"fields\": [\n    {\n      \"column\": \"Study ID\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Lim and Lee (2021)\",\n          \"Lee et al. (2023a)\",\n          \"Kim and Chen (2011)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Country\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"USA\",\n          \"Canada\",\n          \"Croatia\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Sample Size\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 416.78315704932226,\n        \"min\": 148.0,\n        \"max\": 1200.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          1200.0,\n          148.0,\n          900.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Correlation Coefficient\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": null,\n        \"max\": null,\n        \"num_unique_values\": 0,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Value Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Income 34\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                       Study ID   Country  Sample Size  \\\n",
       "0            Lim and Lee (2021)      None        803.0   \n",
       "1            Lee et al. (2023a)        UK       1200.0   \n",
       "2         Lee and Dustin (2021)       USA          NaN   \n",
       "3          Kırbıs et al. (2016)   Croatia        900.0   \n",
       "4  Losada-Otalora et al. (2018)  Colombia        400.0   \n",
       "5           Kim and Chen (2011)    Canada        148.0   \n",
       "\n",
       "   Correlation Coefficient    Income Measure Value Status  \n",
       "0                      NaN  Household Income      PENDING  \n",
       "1                      NaN  Household Income      PENDING  \n",
       "2                      NaN  Household Income      PENDING  \n",
       "3                      NaN  Household Income      PENDING  \n",
       "4                      NaN              None      PENDING  \n",
       "5                      NaN              None      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-0597ad72-b335-45b8-91e4-de172225d0bf\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Income Measure</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lim and Lee (2021)</td>\n",
       "      <td>None</td>\n",
       "      <td>803.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Household Income</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lee et al. (2023a)</td>\n",
       "      <td>UK</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Household Income</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lee and Dustin (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Household Income</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kırbıs et al. (2016)</td>\n",
       "      <td>Croatia</td>\n",
       "      <td>900.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Household Income</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Losada-Otalora et al. (2018)</td>\n",
       "      <td>Colombia</td>\n",
       "      <td>400.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kim and Chen (2011)</td>\n",
       "      <td>Canada</td>\n",
       "      <td>148.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0597ad72-b335-45b8-91e4-de172225d0bf')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-0597ad72-b335-45b8-91e4-de172225d0bf button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-0597ad72-b335-45b8-91e4-de172225d0bf');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"        display(df[cols]\",\n  \"rows\": 6,\n  \"fields\": [\n    {\n      \"column\": \"Study ID\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Lim and Lee (2021)\",\n          \"Lee et al. (2023a)\",\n          \"Kim and Chen (2011)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Country\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"USA\",\n          \"Canada\",\n          \"Croatia\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Sample Size\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 416.78315704932226,\n        \"min\": 148.0,\n        \"max\": 1200.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          1200.0,\n          148.0,\n          900.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Correlation Coefficient\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": null,\n        \"max\": null,\n        \"num_unique_values\": 0,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Income Measure\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Value Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Education 39\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                       Study ID   Country  Sample Size  \\\n",
       "0            Lim and Lee (2021)      None        803.0   \n",
       "1            Lee et al. (2023a)        UK       1200.0   \n",
       "2         Lee and Dustin (2021)       USA          NaN   \n",
       "3          Kırbıs et al. (2016)   Croatia        900.0   \n",
       "4  Losada-Otalora et al. (2018)  Colombia        400.0   \n",
       "5           Kim and Chen (2011)    Canada        148.0   \n",
       "\n",
       "   Correlation Coefficient Value Status  \n",
       "0                      NaN      PENDING  \n",
       "1                      NaN      PENDING  \n",
       "2                      NaN      PENDING  \n",
       "3                      NaN      PENDING  \n",
       "4                      NaN      PENDING  \n",
       "5                      NaN      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-1e0f4161-b892-4bc2-b990-3d2b2f4bab47\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lim and Lee (2021)</td>\n",
       "      <td>None</td>\n",
       "      <td>803.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lee et al. (2023a)</td>\n",
       "      <td>UK</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lee and Dustin (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kırbıs et al. (2016)</td>\n",
       "      <td>Croatia</td>\n",
       "      <td>900.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Losada-Otalora et al. (2018)</td>\n",
       "      <td>Colombia</td>\n",
       "      <td>400.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Kim and Chen (2011)</td>\n",
       "      <td>Canada</td>\n",
       "      <td>148.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-1e0f4161-b892-4bc2-b990-3d2b2f4bab47')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-1e0f4161-b892-4bc2-b990-3d2b2f4bab47 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-1e0f4161-b892-4bc2-b990-3d2b2f4bab47');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"        display(df[cols]\",\n  \"rows\": 6,\n  \"fields\": [\n    {\n      \"column\": \"Study ID\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Lim and Lee (2021)\",\n          \"Lee et al. (2023a)\",\n          \"Kim and Chen (2011)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Country\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"USA\",\n          \"Canada\",\n          \"Croatia\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Sample Size\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 416.78315704932226,\n        \"min\": 148.0,\n        \"max\": 1200.0,\n        \"num_unique_values\": 5,\n        \"samples\": [\n          1200.0,\n          148.0,\n          900.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Correlation Coefficient\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": null,\n        \"max\": null,\n        \"num_unique_values\": 0,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Value Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Financial Behavior 20\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                       Study ID      Country  Sample Size  \\\n",
       "0            Lim and Lee (2021)         None        803.0   \n",
       "1         Lee and Dustin (2021)          USA          NaN   \n",
       "2          Kırbıs et al. (2016)      Croatia        900.0   \n",
       "3  Losada-Otalora et al. (2018)     Colombia        400.0   \n",
       "4          Kasper et al. (2019)  Netherlands          NaN   \n",
       "5         Mugenda et al. (1990)         None          NaN   \n",
       "\n",
       "  Correlation Coefficient Financial Behavior Type Value Status  \n",
       "0                    None                  Saving      PENDING  \n",
       "1                    None                  Saving      PENDING  \n",
       "2                    None                  Saving      PENDING  \n",
       "3                    None                  Saving      PENDING  \n",
       "4                    None                  Saving      PENDING  \n",
       "5                    None                  Saving      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-4f9c40f7-8134-4cd8-a8cc-df076ca82c67\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Financial Behavior Type</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lim and Lee (2021)</td>\n",
       "      <td>None</td>\n",
       "      <td>803.0</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lee and Dustin (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Kırbıs et al. (2016)</td>\n",
       "      <td>Croatia</td>\n",
       "      <td>900.0</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Losada-Otalora et al. (2018)</td>\n",
       "      <td>Colombia</td>\n",
       "      <td>400.0</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Kasper et al. (2019)</td>\n",
       "      <td>Netherlands</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Mugenda et al. (1990)</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>None</td>\n",
       "      <td>Saving</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4f9c40f7-8134-4cd8-a8cc-df076ca82c67')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-4f9c40f7-8134-4cd8-a8cc-df076ca82c67 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-4f9c40f7-8134-4cd8-a8cc-df076ca82c67');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "repr_error": "Out of range float values are not JSON compliant: nan"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Risk Tolerance 4\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                Study ID    Country  Sample Size Correlation Coefficient  \\\n",
       "0  Mottola et al. (2024)        USA           28                    None   \n",
       "1    Tahir et al. (2023)  Australia          694                    None   \n",
       "2   Zyphur et al. (2015)        USA          528                    None   \n",
       "3   Rautio et al. (2013)    Finland          296                    None   \n",
       "\n",
       "  Value Status  \n",
       "0      PENDING  \n",
       "1      PENDING  \n",
       "2      PENDING  \n",
       "3      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-f8e083f9-ef04-4be0-9e6a-c837e5665433\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Mottola et al. (2024)</td>\n",
       "      <td>USA</td>\n",
       "      <td>28</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Tahir et al. (2023)</td>\n",
       "      <td>Australia</td>\n",
       "      <td>694</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Zyphur et al. (2015)</td>\n",
       "      <td>USA</td>\n",
       "      <td>528</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Rautio et al. (2013)</td>\n",
       "      <td>Finland</td>\n",
       "      <td>296</td>\n",
       "      <td>None</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-f8e083f9-ef04-4be0-9e6a-c837e5665433')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-f8e083f9-ef04-4be0-9e6a-c837e5665433 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-f8e083f9-ef04-4be0-9e6a-c837e5665433');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "repr_error": "Out of range float values are not JSON compliant: nan"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "================================================== Solvency 11\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "                    Study ID      Country  Sample Size  \\\n",
       "0       Kasper et al. (2019)  Netherlands          NaN   \n",
       "1      Mugenda et al. (1990)         None          NaN   \n",
       "2      Mottola et al. (2024)          USA         28.0   \n",
       "3  Parotta and Johnson, 1998       Canada        726.0   \n",
       "4             Plagnol (2011)           UK         13.0   \n",
       "5         Park et al. (2021)          USA       1829.0   \n",
       "\n",
       "   Correlation Coefficient Value Status  \n",
       "0                      NaN      PENDING  \n",
       "1                      NaN      PENDING  \n",
       "2                      NaN      PENDING  \n",
       "3                      NaN      PENDING  \n",
       "4                      NaN      PENDING  \n",
       "5                      NaN      PENDING  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-9f250fee-0b19-4192-a649-0ab58e936eee\" class=\"colab-df-container\">\n",
       "    <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>Study ID</th>\n",
       "      <th>Country</th>\n",
       "      <th>Sample Size</th>\n",
       "      <th>Correlation Coefficient</th>\n",
       "      <th>Value Status</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Kasper et al. (2019)</td>\n",
       "      <td>Netherlands</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Mugenda et al. (1990)</td>\n",
       "      <td>None</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Mottola et al. (2024)</td>\n",
       "      <td>USA</td>\n",
       "      <td>28.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Parotta and Johnson, 1998</td>\n",
       "      <td>Canada</td>\n",
       "      <td>726.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Plagnol (2011)</td>\n",
       "      <td>UK</td>\n",
       "      <td>13.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Park et al. (2021)</td>\n",
       "      <td>USA</td>\n",
       "      <td>1829.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>PENDING</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9f250fee-0b19-4192-a649-0ab58e936eee')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-9f250fee-0b19-4192-a649-0ab58e936eee button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-9f250fee-0b19-4192-a649-0ab58e936eee');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "summary": "{\n  \"name\": \"        display(df[cols]\",\n  \"rows\": 6,\n  \"fields\": [\n    {\n      \"column\": \"Study ID\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 6,\n        \"samples\": [\n          \"Kasper et al. (2019)\",\n          \"Mugenda et al. (1990)\",\n          \"Park et al. (2021)\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Country\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"USA\",\n          \"UK\",\n          \"Netherlands\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Sample Size\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 854.101086913409,\n        \"min\": 13.0,\n        \"max\": 1829.0,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          726.0,\n          1829.0,\n          28.0\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Correlation Coefficient\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": null,\n        \"min\": null,\n        \"max\": null,\n        \"num_unique_values\": 0,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"Value Status\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {}
    }
   ],
   "source": "for s in ['Age','Gender','Income','Education','Financial Behavior','Risk Tolerance','Solvency']:\n    df = candidate_dfs[s]\n    print('='*50, s, len(df))\n    if len(df):\n        cols = [c for c in ['Study ID','Country','Sample Size','Correlation Coefficient','Mean Age','Income Measure','Financial Behavior Type','Value Status'] if c in df.columns]\n        display(df[cols].head(6))\n",
   "id": "eM_UZUTS_F82"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "BcVgTDHx_F83"
   },
   "source": "## 6. Manuel düzeltme (örnek)",
   "id": "BcVgTDHx_F83"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "bonT1CVv_F83",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479716855,
     "user_tz": -180,
     "elapsed": 71,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "ab16657c-d2dc-4b84-c7ad-afee2a63bdbd"
   },
   "execution_count": 8,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Human Verified=False\n"
     ]
    }
   ],
   "source": "# candidate_dfs['Age'].loc[0, 'Correlation Coefficient'] = -0.01\n# candidate_dfs['Age'].loc[0, 'Human Verified'] = True\n# candidate_dfs['Age'].loc[0, 'Admissible'] = True\nfor s, df in candidate_dfs.items():\n    if len(df):\n        candidate_dfs[s] = df.copy()\n        candidate_dfs[s]['Human Verified'] = True\n        candidate_dfs[s]['Admissible'] = True\nprint('Human Verified=False')\n",
   "id": "bonT1CVv_F83"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "7TY45JEb_F84"
   },
   "source": "## 7. Birleştir + Excel yaz (TÜM SHEETLER)",
   "id": "7TY45JEb_F84"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "c__5WQXZ_F84",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479723477,
     "user_tz": -180,
     "elapsed": 369,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "0e133688-eace-4acf-e17d-f6ce90da4a91"
   },
   "execution_count": 9,
   "outputs": [
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "/content/metanalizer_extract_engine.py:225: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n",
      "  return pd.concat([ex[cols], nw[cols]], ignore_index=True)\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Age: 92 + 40 -> 132\n",
      "Gender: 0 + 38 -> 38\n",
      "Marital Status: 0 + 35 -> 35\n",
      "Income: 0 + 34 -> 34\n",
      "Education: 0 + 39 -> 39\n",
      "Ethnicity: 0 + 13 -> 13\n",
      "Homeownership: 0 + 16 -> 16\n",
      "Financial Dependents: 0 + 38 -> 38\n",
      "Financial Stressors: 0 + 14 -> 14\n",
      "Financial Stress Level: 0 + 14 -> 14\n",
      "Financial Knowledge: 0 + 15 -> 15\n",
      "Financial Literacy: 0 + 10 -> 10\n",
      "Financial Behavior: 0 + 20 -> 20\n",
      "Risk Tolerance: 0 + 4 -> 4\n",
      "Solvency: 0 + 11 -> 11\n",
      "Kaydedildi: /content/MetaNalizer/export/Datasheet_Full_Updated_20260915_1342.xlsx\n"
     ]
    }
   ],
   "source": "merged = {}\ncounts = {}\nfor sheet, cols in SHEET_SCHEMAS.items():\n    full = cols + META_COLS\n    merged[sheet] = merge_sheet(existing.get(sheet), candidate_dfs.get(sheet), full)\n    counts[sheet] = len(candidate_dfs.get(sheet, []))\n    print(f'{sheet}: {len(existing.get(sheet, []))} + {counts[sheet]} -> {len(merged[sheet])}')\n\nout_xlsx = BASE/'export'/('Datasheet_Full_Updated_' + datetime.now().strftime('%Y%m%d_%H%M') + '.xlsx')\nwrite_workbook(merged, out_xlsx, len(metas), counts)\nprint('Kaydedildi:', out_xlsx)\n",
   "id": "c__5WQXZ_F84"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "BsTwBCzv_F85"
   },
   "source": "## 8. İndir",
   "id": "BsTwBCzv_F85"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 16
    },
    "id": "ISTA75_-_F85",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1789479730072,
     "user_tz": -180,
     "elapsed": 15,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "1658dd5c-da04-4364-f977-1505d9c51018"
   },
   "execution_count": 10,
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ],
      "application/javascript": [
       "\n",
       "    async function download(id, filename, size) {\n",
       "      if (!google.colab.kernel.accessAllowed) {\n",
       "        return;\n",
       "      }\n",
       "      const div = document.createElement('div');\n",
       "      const label = document.createElement('label');\n",
       "      label.textContent = `Downloading \"${filename}\": `;\n",
       "      div.appendChild(label);\n",
       "      const progress = document.createElement('progress');\n",
       "      progress.max = size;\n",
       "      div.appendChild(progress);\n",
       "      document.body.appendChild(div);\n",
       "\n",
       "      const buffers = [];\n",
       "      let downloaded = 0;\n",
       "\n",
       "      const channel = await google.colab.kernel.comms.open(id);\n",
       "      // Send a message to notify the kernel that we're ready.\n",
       "      channel.send({})\n",
       "\n",
       "      for await (const message of channel.messages) {\n",
       "        // Send a message to notify the kernel that we're ready.\n",
       "        channel.send({})\n",
       "        if (message.buffers) {\n",
       "          for (const buffer of message.buffers) {\n",
       "            buffers.push(buffer);\n",
       "            downloaded += buffer.byteLength;\n",
       "            progress.value = downloaded;\n",
       "          }\n",
       "        }\n",
       "      }\n",
       "      const blob = new Blob(buffers, {type: 'application/binary'});\n",
       "      const a = document.createElement('a');\n",
       "      a.href = window.URL.createObjectURL(blob);\n",
       "      a.download = filename;\n",
       "      div.appendChild(a);\n",
       "      a.click();\n",
       "      div.remove();\n",
       "    }\n",
       "  "
      ]
     },
     "metadata": {}
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ],
      "application/javascript": [
       "download(\"download_7695f09a-2096-4311-8194-39d3cf86b3b3\", \"Datasheet_Full_Updated_20260915_1342.xlsx\", 74182)"
      ]
     },
     "metadata": {}
    }
   ],
   "source": "if IN_COLAB:\n    files.download(str(out_xlsx))\nelse:\n    print(out_xlsx)\n",
   "id": "ISTA75_-_F85"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "SS4vYLsT_F86"
   },
   "source": "## Özet\n\n| Özellik | Durum |\n|---------|--------|\n| 15 sheet | Hepsi yazılır |\n| Tüm column'lar | Semada tanımlı, mümkün olanlar doldurulur |\n| Ortak alanlar | Study ID, Country, N, Dataset, FS, Sampling... |\n| Age özel | Mean Age, Age SD |\n| Gender/Marital/Ethnicity | Coding (+ grup istat boş bırakılabilir) |\n| Income | Income Measure |\n| Behavior/Stress | Type alanları |\n| Correlation | Predictor yakını r/β |\n| Human Verified | Varsayılan False |\n",
   "id": "SS4vYLsT_F86"
  }
 ]
}