{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "juvenile-ability", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8f09d8d199d445fbb9e4ed86e3bb148e", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1149471184 [00:00(node2), c: (rLabel)-[:P2308]->(parent), d: (node1)-[]->(par), c: (eLabel)-[:P2303]->(eNode)\" \\\n", " --where 'nodeProp.label = rLabel and (par = parent or (rLabel = eLabel and node1 = eNode))' \\\n", " --return 'nodeProp.id, node1, nodeProp.label, node2, max(parent) as `node1;ancestor`' \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n", " kgtk --debug ifnotexists -i ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.all.tsv \\\n", " --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 4, "id": "abstract-retreat", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-03-12 22:33:26 query]: SQL Translation:\r\n", "---------------------------------------------\r\n", " SELECT graph_11_c1.\"id\", graph_11_c1.\"node1\", graph_11_c1.\"label\", graph_11_c1.\"node2\"\r\n", " FROM graph_11 AS graph_11_c1, graph_14 AS graph_14_c2\r\n", " WHERE graph_11_c1.\"node1\"=graph_14_c2.\"node1\"\r\n", " AND (graph_14_c2.\"node2\" IN (?, ?, ?))\r\n", " PARAS: ['Q1238720', 'Q3331189', 'Q47461344']\r\n", "---------------------------------------------\r\n" ] } ], "source": [ "!kgtk --debug query -i ../../propertiesSplit/claims.P996.tsv \\\n", " ../../wikidata-20210215/derived.isastar.tsv.gz \\\n", " --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n", " --where 'par in [\"Q1238720\",\"Q3331189\",\"Q47461344\"]' \\\n", " --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.P996.tsv \\\n", " --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 7, "id": "strange-truck", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "81289 ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv\r\n" ] } ], "source": [ "!wc -l ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv" ] }, { "cell_type": "code", "execution_count": 8, "id": "finnish-hampton", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-03-12 22:49:54 sqlstore]: IMPORT graph directly into table graph_15 from /data/wd-correctness/propertiesSplit/claims.P991.tsv ...\n", "[2021-03-12 22:49:54 query]: SQL Translation:\n", "---------------------------------------------\n", " SELECT graph_15_c1.\"id\", graph_15_c1.\"node1\", graph_15_c1.\"label\", graph_15_c1.\"node2\"\n", " FROM graph_15 AS graph_15_c1, graph_5 AS graph_5_c2\n", " WHERE graph_15_c1.\"node1\"=graph_5_c2.\"node1\"\n", " AND (graph_5_c2.\"node2\" IN (?))\n", " PARAS: ['Q40231']\n", "---------------------------------------------\n", "[2021-03-12 22:49:55 sqlstore]: CREATE INDEX on table graph_15 column node1 ...\n", "[2021-03-12 22:49:55 sqlstore]: ANALYZE INDEX on table graph_15 column node1 ...\n" ] } ], "source": [ "!kgtk --debug query -i ../../propertiesSplit/claims.P991.tsv \\\n", " ../../wikidata-20210215/derived.P31P279star.tsv.gz \\\n", " --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n", " --where 'par in [\"Q40231\"]' \\\n", " --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.P991.tsv \\\n", " --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 9, "id": "elegant-reverse", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-03-12 23:54:56 sqlstore]: IMPORT graph directly into table graph_16 from /data/wd-correctness/propertiesSplit/claims.P965.tsv ...\n", "[2021-03-12 23:54:56 query]: SQL Translation:\n", "---------------------------------------------\n", " SELECT graph_16_c1.\"id\", graph_5_c2.\"node1\", graph_16_c1.\"label\", graph_16_c1.\"node2\"\n", " FROM graph_16 AS graph_16_c1, graph_5 AS graph_5_c2\n", " WHERE graph_16_c1.\"node1\"=graph_5_c2.\"node1\"\n", " AND (graph_5_c2.\"node2\" IN (?))\n", " PARAS: ['Q6023295']\n", "---------------------------------------------\n", "[2021-03-12 23:54:56 sqlstore]: CREATE INDEX on table graph_16 column node1 ...\n", "[2021-03-12 23:54:56 sqlstore]: ANALYZE INDEX on table graph_16 column node1 ...\n" ] } ], "source": [ "!kgtk --debug query -i ../../propertiesSplit/claims.P965.tsv \\\n", " ../../wikidata-20210215/derived.P31P279star.tsv.gz \\\n", " --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n", " --where 'par in [\"Q6023295\"]' \\\n", " --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.P965.tsv \\\n", " --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.incorrect.tsv" ] }, { "cell_type": "markdown", "id": "matched-strength", "metadata": {}, "source": [ "# Generate Queries" ] }, { "cell_type": "markdown", "id": "black-insured", "metadata": {}, "source": [ "## Type Constraint" ] }, { "cell_type": "markdown", "id": "interior-humor", "metadata": {}, "source": [ "### Understand Constraints File" ] }, { "cell_type": "code", "execution_count": 1, "id": "clinical-brunei", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "df = pd.read_csv('../../constraintsOP/typeConstraint/claims.type-constraints_all.tsv',sep='\\t')" ] }, { "cell_type": "code", "execution_count": 2, "id": "assured-cleaners", "metadata": {}, "outputs": [], "source": [ "df1 = df.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 3, "id": "sharing-evolution", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
0P1001P2308[Q102496, Q105985, Q1140371, Q1151067, Q119768...
1P1001P2309[Q30208840]
2P1002P2308[Q630010]
3P1002P2309[Q21514624]
4P1004P2308[Q2221906, Q23413, Q3947, Q41176, Q88291]
\n", "
" ], "text/plain": [ " node1 label node2\n", "0 P1001 P2308 [Q102496, Q105985, Q1140371, Q1151067, Q119768...\n", "1 P1001 P2309 [Q30208840]\n", "2 P1002 P2308 [Q630010]\n", "3 P1002 P2309 [Q21514624]\n", "4 P1004 P2308 [Q2221906, Q23413, Q3947, Q41176, Q88291]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1.head()" ] }, { "cell_type": "code", "execution_count": 4, "id": "still-trail", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
9318P8138P2308[Q27096213]
9319P8138P2309[Q21514624]
\n", "
" ], "text/plain": [ " node1 label node2\n", "9318 P8138 P2308 [Q27096213]\n", "9319 P8138 P2309 [Q21514624]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1[df1['node1'] == 'P8138']" ] }, { "cell_type": "markdown", "id": "solid-browser", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 8, "id": "bright-impossible", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "95b7843f9024492698ef1b367b6db289", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/4810 [00:00\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Something failed for prop:\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mprop\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 68\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mfOP\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 69\u001b[0m \u001b[0mfOP\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'fOP' is not defined" ] } ], "source": [ "from tqdm.notebook import tqdm\n", "import os.path\n", "import os\n", "\n", "cnt = 0\n", "fCnt = 1\n", "for prop in tqdm(df1.node1.unique()):\n", " try:\n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", " continue\n", " relation = df1[(df1['node1'] == prop) & (df1['label'] == 'P2309')].node2.values[0][0]\n", " type1 = df1[(df1['node1'] == prop) & (df1['label'] == 'P2316')].node2.values\n", "# print(type1)\n", "\n", " parents = df1[(df1['node1'] == prop) & (df1['label'] == 'P2308')].node2.values[0]\n", " exceptions = df1[(df1['node1'] == prop) & (df1['label'] == 'P2303')].node2.values\n", " \n", " if relation == \"Q21503252\":\n", " parentFile = \"P31\"\n", " parentTitle = 'instanceOf'\n", " elif relation == \"Q21514624\":\n", " parentFile = \"P279\"\n", " parentTitle = 'subclass'\n", " else:\n", " parentFile = \"isa\"\n", " parentTitle = 'instanceOfOrSubclass'\n", "\n", " if len(type1) != 0 and type1[0][0] == \"Q21502408\":\n", " typeVal = \"mandatory\"\n", " elif len(type1) != 0 and type1[0][0] == \"Q62026391\":\n", " typeVal = \"suggestion\"\n", " else:\n", " typeVal = \"normal\"\n", "\n", " if len(exceptions):\n", " exceptionPart = \"or node1 in \" + str(exceptions[0]).replace(\"'\",'\"')\n", " else:\n", " exceptionPart = \"\"\n", " \n", " folderName = 'typeConstraint_Final'\n", " shellFileSuffix = 'typeConstraintValidator'\n", " \n", " if cnt % 120 == 0:\n", " if fOP:\n", " fOP.close()\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " fCnt += 1\n", " \n", " fOP.write(\"{ time (kgtk --debug query -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n", " ../../wikidata-20210215/derived.P279star.tsv.gz \\\n", " --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node1)-[]->(nodex), P279star: (nodex)-[]->(par)' \\\n", " --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n", " --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/const110_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\")\n", "\n", " cnt += 1\n", " except:\n", " print(\"Something failed for prop:\",prop)\n", "\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 9, "id": "electrical-agreement", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1456" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 72, "id": "outside-stupid", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,14):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/typeConstraintValidator\"+str(i)+\".sh\")\n", " " ] }, { "cell_type": "markdown", "id": "competitive-canvas", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 33, "id": "casual-perth", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f14fb41a11474c79a4e03c391151de92", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1c8272e68ff941bb8d9453f8de872e8a", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/330 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P7424890389[../../allConstraintsAnalysis/typeConstraint_F...0.001817
P26635547[../../allConstraintsAnalysis/typeConstraint_F...0.012478
P5105191995[../../allConstraintsAnalysis/typeConstraint_F...0.047170
P693832[../../allConstraintsAnalysis/typeConstraint_F...0.400000
P3179505213[../../allConstraintsAnalysis/typeConstraint_F...0.002567
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P742 48903 89 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P2663 554 7 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P5105 1919 95 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P6938 3 2 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P3179 5052 13 [../../allConstraintsAnalysis/typeConstraint_F... \n", "\n", " violation_ratio \n", "P742 0.001817 \n", "P2663 0.012478 \n", "P5105 0.047170 \n", "P6938 0.400000 \n", "P3179 0.002567 " ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF.head()" ] }, { "cell_type": "code", "execution_count": 39, "id": "competitive-peeing", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P81380461[../../allConstraintsAnalysis/typeConstraint_F...1.0
P5051064[../../allConstraintsAnalysis/typeConstraint_F...1.0
P2303039[../../allConstraintsAnalysis/typeConstraint_F...1.0
P1227019[../../allConstraintsAnalysis/typeConstraint_F...1.0
P2308017[../../allConstraintsAnalysis/typeConstraint_F...1.0
P6001016[../../allConstraintsAnalysis/typeConstraint_F...1.0
P8738014[../../allConstraintsAnalysis/typeConstraint_F...1.0
P538010[../../allConstraintsAnalysis/typeConstraint_F...1.0
P800406[../../allConstraintsAnalysis/typeConstraint_F...1.0
P558904[../../allConstraintsAnalysis/typeConstraint_F...1.0
P651004[../../allConstraintsAnalysis/typeConstraint_F...1.0
P717403[../../allConstraintsAnalysis/typeConstraint_F...1.0
P601403[../../allConstraintsAnalysis/typeConstraint_F...1.0
P81703[../../allConstraintsAnalysis/typeConstraint_F...1.0
P488203[../../allConstraintsAnalysis/typeConstraint_F...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P8138 0 461 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P5051 0 64 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P2303 0 39 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P1227 0 19 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P2308 0 17 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P6001 0 16 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P8738 0 14 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P538 0 10 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P8004 0 6 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P5589 0 4 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P6510 0 4 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P7174 0 3 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P6014 0 3 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P817 0 3 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P4882 0 3 [../../allConstraintsAnalysis/typeConstraint_F... \n", "\n", " violation_ratio \n", "P8138 1.0 \n", "P5051 1.0 \n", "P2303 1.0 \n", "P1227 1.0 \n", "P2308 1.0 \n", "P6001 1.0 \n", "P8738 1.0 \n", "P538 1.0 \n", "P8004 1.0 \n", "P5589 1.0 \n", "P6510 1.0 \n", "P7174 1.0 \n", "P6014 1.0 \n", "P817 1.0 \n", "P4882 1.0 " ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 40, "id": "backed-corruption", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['../../allConstraintsAnalysis/typeConstraint_Final/normal/claims.type-constraints.instanceOf.P4945.correct.tsv',\n", " '../../allConstraintsAnalysis/typeConstraint_Final/normal/claims.type-constraints.instanceOf.P4945.incorrect.tsv']" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(typeConstDF.loc['P4945'].paths)" ] }, { "cell_type": "code", "execution_count": 1, "id": "interracial-fraud", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "Q10369487-P5051-Q4845565-75168cbb-0\tQ10369487\tP5051\tQ4845565\tnormal\twikibase-item\r\n", "Q12264664-P5051-Q1110918-cb778987-0\tQ12264664\tP5051\tQ1110918\tnormal\twikibase-item\r\n", "Q12264664-P5051-Q3394058-ac8798ff-0\tQ12264664\tP5051\tQ3394058\tnormal\twikibase-item\r\n", "Q12264664-P5051-Q801660-71c68e08-0\tQ12264664\tP5051\tQ801660\tnormal\twikibase-item\r\n", "Q1457751-P5051-Q6029401-3c0f721e-0\tQ1457751\tP5051\tQ6029401\tnormal\twikibase-item\r\n", "Q1457751-P5051-Q7643664-20983ead-0\tQ1457751\tP5051\tQ7643664\tnormal\twikibase-item\r\n", "Q1631914-P5051-Q3555260-04b1b724-0\tQ1631914\tP5051\tQ3555260\tnormal\twikibase-item\r\n", "Q2512768-P5051-Q493430-91955413-0\tQ2512768\tP5051\tQ493430\tnormal\twikibase-item\r\n", "Q2865993-P5051-Q9606-9312fd91-0\tQ2865993\tP5051\tQ9606\tnormal\twikibase-item\r\n" ] } ], "source": [ "!head ../../allConstraintsAnalysis/typeConstraint_Final/normal/claims.type-constraints.instanceOf.P5051.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 43, "id": "clinical-lawsuit", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 1456.000000\n", "mean 0.095964\n", "std 0.221602\n", "min 0.000000\n", "25% 0.000594\n", "50% 0.008160\n", "75% 0.054471\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 44, "id": "wanted-domestic", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Type Constraint Violation Ratios')" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "typeConstDF['violation_ratio'].plot.hist(bins=100).set_title(\"Type Constraint Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 45, "id": "sufficient-hollywood", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Type Constraint Violation Ratios (<=0.05)')" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "typeConstDF[typeConstDF['violation_ratio'] <= 0.05].violation_ratio.plot.hist(bins=100).set_title(\"Type Constraint Violation Ratios (<=0.05)\")" ] }, { "cell_type": "code", "execution_count": 46, "id": "minor-marshall", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of constraints whose violation ratio is greater than mean :0/1456\n" ] } ], "source": [ "print(f\"No. of constraints whose violation ratio is greater than mean :{sum(typeConstDF['violation_ratio'] >= 5.286054)}/{len(typeConstDF)}\")" ] }, { "cell_type": "code", "execution_count": 47, "id": "special-consensus", "metadata": {}, "outputs": [], "source": [ "# typeConstDF.sort_values(by=['incorrect'],ascending=False).head(5).paths.values" ] }, { "cell_type": "code", "execution_count": 48, "id": "excited-person", "metadata": {}, "outputs": [], "source": [ "# !cat ../../allConstraintsAnalysis/typeConstraint/normal/claims.type-constraints.instanceOf.P953.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 49, "id": "revolutionary-violence", "metadata": {}, "outputs": [], "source": [ "for key1 in typeConstViolations.keys():\n", " typeConstViolations[key1]['correct'] = typeConstViolations[key1]['instanceOf']['correct'] + typeConstViolations[key1]['subclass']['correct'] + typeConstViolations[key1]['instanceOfOrSubclass']['correct']\n", " typeConstViolations[key1]['incorrect'] = typeConstViolations[key1]['instanceOf']['incorrect'] + typeConstViolations[key1]['subclass']['incorrect'] + typeConstViolations[key1]['instanceOfOrSubclass']['incorrect']\n", " typeConstViolations[key1]['VR'] = typeConstViolations[key1]['incorrect'] / (typeConstViolations[key1]['correct'] + typeConstViolations[key1]['incorrect'])\n", " " ] }, { "cell_type": "code", "execution_count": 50, "id": "emotional-favorite", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "{'mandatory': {'instanceOf': {'correct': 44768778, 'incorrect': 35027},\n", " 'subclass': {'correct': 1966, 'incorrect': 30},\n", " 'instanceOfOrSubclass': {'correct': 221394, 'incorrect': 204},\n", " 'propCount': 165,\n", " 'correct': 44992138,\n", " 'incorrect': 35261,\n", " 'VR': 0.0007831009736982587},\n", " 'suggestion': {'instanceOf': {'correct': 61486, 'incorrect': 18368},\n", " 'subclass': {'correct': 0, 'incorrect': 0},\n", " 'instanceOfOrSubclass': {'correct': 23314, 'incorrect': 2939},\n", " 'propCount': 11,\n", " 'correct': 84800,\n", " 'incorrect': 21307,\n", " 'VR': 0.200806732826298},\n", " 'normal': {'instanceOf': {'correct': 398100301, 'incorrect': 797888},\n", " 'subclass': {'correct': 96605, 'incorrect': 9442},\n", " 'instanceOfOrSubclass': {'correct': 66358710, 'incorrect': 265583},\n", " 'propCount': 1280,\n", " 'correct': 464555616,\n", " 'incorrect': 1072913,\n", " 'VR': 0.0023042252207016293}}" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstViolations" ] }, { "cell_type": "code", "execution_count": 51, "id": "aggregate-impact", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratiototal
P20931348051576527[../../allConstraintsAnalysis/typeConstraint_F...0.000048134811684
P14763985687647204[../../allConstraintsAnalysis/typeConstraint_F...0.00118339904080
P5773885531433977[../../allConstraintsAnalysis/typeConstraint_F...0.00087438889291
P14333672328312050[../../allConstraintsAnalysis/typeConstraint_F...0.00032836735333
P12153309919524104[../../allConstraintsAnalysis/typeConstraint_F...0.00072833123299
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2093 134805157 6527 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P1476 39856876 47204 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P577 38855314 33977 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P1433 36723283 12050 [../../allConstraintsAnalysis/typeConstraint_F... \n", "P1215 33099195 24104 [../../allConstraintsAnalysis/typeConstraint_F... \n", "\n", " violation_ratio total \n", "P2093 0.000048 134811684 \n", "P1476 0.001183 39904080 \n", "P577 0.000874 38889291 \n", "P1433 0.000328 36735333 \n", "P1215 0.000728 33123299 " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF['total'] = typeConstDF['correct'] + typeConstDF['incorrect']\n", "typeConstDF.sort_values(by=['total'],ascending=False).head()" ] }, { "cell_type": "code", "execution_count": 52, "id": "baking-garden", "metadata": {}, "outputs": [], "source": [ "typeConstDF.to_csv('../../allConstraintsAnalysis/typeConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "bearing-kruger", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 18, "id": "assumed-toner", "metadata": {}, "outputs": [], "source": [ "# from tqdm.notebook import tqdm\n", "# import os.path\n", "\n", "# cnt = 0\n", "# fCnt = 1\n", "# for prop in tqdm(df1.node1.unique()):\n", "# try:\n", "# if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", "# continue\n", "# relation = df1[(df1['node1'] == prop) & (df1['label'] == 'P2309')].node2.values[0][0]\n", "# type1 = df1[(df1['node1'] == prop) & (df1['label'] == 'P2316')].node2.values\n", "\n", "# parents = df1[(df1['node1'] == prop) & (df1['label'] == 'P2308')].node2.values[0]\n", "# exceptions = df1[(df1['node1'] == prop) & (df1['label'] == 'P2303')].node2.values\n", "\n", "# # print(prop, relation, type1, parents, exceptions)\n", "\n", "# if relation == \"Q21503252\":\n", "# parentFile = \"P31P279star\"\n", "# parentTitle = 'instanceOf'\n", "# elif relation == \"Q21514624\":\n", "# parentFile = \"P279star\"\n", "# parentTitle = 'subclass'\n", "# else:\n", "# parentFile = \"isastar\"\n", "# parentTitle = 'instanceOfOrSubclass'\n", "\n", "# if len(type1) != 0 and type1[0][0] == \"Q21502408\":\n", "# typeVal = \"mandatory\"\n", "# elif len(type1) != 0 and type1[0][0] == \"Q62026391\":\n", "# typeVal = \"suggestion\"\n", "# else:\n", "# typeVal = \"normal\"\n", "\n", "# if len(exceptions):\n", "# exceptionPart = \"or node1 in \" + str(exceptions[0]).replace(\"'\",'\"')\n", "# else:\n", "# exceptionPart = \"\"\n", " \n", "# if cnt % 100 == 0:\n", "# fOP = open(\"../../propertiesSplit/checkViolations/TimedTypeConstraintValidator\" + str(fCnt) + \".sh\",\"w\")\n", "# fCnt += 1\n", " \n", "# fOP.write(\"{ time kgtk --debug query -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", "# ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n", "# --match 'm: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)' \\\n", "# --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n", "# --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n", "# -o ../../allConstraintsAnalysis/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", "# --graph-cache ~/sqlite3_caches/const2123_\" + str(fCnt) + \".sqlite3.db; } 2>> ../../propertiesSplit/checkViolations/exec_logs/TimedTypeConstraint_TimedTypeConstraintValidator\" + str(fCnt) + \".txt ; \\\n", "# kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", "# --filter-on ../../allConstraintsAnalysis/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", "# --filter-mode NONE \\\n", "# --input-keys node1 label \\\n", "# --filter-keys node1 label \\\n", "# -o ../../allConstraintsAnalysis/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv\\n\")\n", "\n", "# cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", " " ] }, { "cell_type": "code", "execution_count": 93, "id": "veterinary-fault", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "52944ea021934d23b3d4ab3fb1f091f7", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/122 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for type constraint checks\")" ] }, { "cell_type": "markdown", "id": "intense-computer", "metadata": {}, "source": [ "## Value Type Constraint" ] }, { "cell_type": "markdown", "id": "animated-companion", "metadata": {}, "source": [ "### Understand Constraints File" ] }, { "cell_type": "code", "execution_count": 36, "id": "static-profit", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "dfValueType = pd.read_csv('../../constraintsOP/valuetypeConstraint/claims.type-constraints_all1.tsv',sep='\\t')" ] }, { "cell_type": "code", "execution_count": 37, "id": "worthy-malawi", "metadata": {}, "outputs": [], "source": [ "dfValueType = dfValueType.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 38, "id": "eleven-tiffany", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
0P1000P2308[Q1241356]
1P1000P2309[Q30208840]
2P1001P2308[Q20926517, Q2881272, Q2882257, Q3624078, Q389...
3P1001P2309[Q30208840]
4P1002P2308[Q2576663]
\n", "
" ], "text/plain": [ " node1 label node2\n", "0 P1000 P2308 [Q1241356]\n", "1 P1000 P2309 [Q30208840]\n", "2 P1001 P2308 [Q20926517, Q2881272, Q2882257, Q3624078, Q389...\n", "3 P1001 P2309 [Q30208840]\n", "4 P1002 P2308 [Q2576663]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType.head()" ] }, { "cell_type": "code", "execution_count": 39, "id": "expired-stuff", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2308', 'P2309', 'P2303', 'P2316', 'P6607', 'P2304'], dtype=object)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType['label'].unique()" ] }, { "cell_type": "code", "execution_count": 40, "id": "imposed-newsletter", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [node1, label, node2]\n", "Index: []" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType[dfValueType['label'] == '2316']" ] }, { "cell_type": "code", "execution_count": 41, "id": "answering-alabama", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
330P1659P2308[Q18616576]
331P1659P2309[Q21503252]
332P1659P2316[Q21502408]
\n", "
" ], "text/plain": [ " node1 label node2\n", "330 P1659 P2308 [Q18616576]\n", "331 P1659 P2309 [Q21503252]\n", "332 P1659 P2316 [Q21502408]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType[dfValueType['node1'] == 'P1659']" ] }, { "cell_type": "code", "execution_count": 42, "id": "danish-blackberry", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node1labelnode2
2031P991P2308[Q5, Q7210356]
2032P991P2309[Q21503252]
\n", "
" ], "text/plain": [ " node1 label node2\n", "2031 P991 P2308 [Q5, Q7210356]\n", "2032 P991 P2309 [Q21503252]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType[dfValueType.node1 == 'P991']" ] }, { "cell_type": "markdown", "id": "digital-harvard", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 43, "id": "white-badge", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bb623e1d72164970a40f3bc2d9ab6346", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/932 [00:00(node2), \" + parentFile + \": (node2)-[]->(nodex), P279star: (nodex)-[]->(par)' \\\n", " --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n", " --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/const111_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\n", " \n", " cnt += 1\n", " except:\n", " print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 3, "id": "naughty-brown", "metadata": {}, "outputs": [], "source": [ "!zgrep -P \"Q98970042\\t\" ../../wikidata-20210215/derived.P279star.tsv.gz" ] }, { "cell_type": "code", "execution_count": 44, "id": "qualified-cursor", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "897" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 45, "id": "simplified-cameroon", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,9):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/valueTypeConstraintValidator_xverify3\"+str(i)+\".sh\")\n", " " ] }, { "cell_type": "markdown", "id": "spectacular-warner", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 21, "id": "valid-defense", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c2c49c85190949669392e7e39bec677f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "285e1c2ed86c4e27be672d341374c5a8", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/212 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P2302422110[../../allConstraintsAnalysis/valuetypeConstra...0.000000
P309246201[../../allConstraintsAnalysis/valuetypeConstra...0.000216
P3096111502[../../allConstraintsAnalysis/valuetypeConstra...0.000179
P31563480[../../allConstraintsAnalysis/valuetypeConstra...0.000000
P8747663[../../allConstraintsAnalysis/valuetypeConstra...0.000629
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2302 42211 0 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P3092 4620 1 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P3096 11150 2 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P3156 348 0 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P87 4766 3 [../../allConstraintsAnalysis/valuetypeConstra... \n", "\n", " violation_ratio \n", "P2302 0.000000 \n", "P3092 0.000216 \n", "P3096 0.000179 \n", "P3156 0.000000 \n", "P87 0.000629 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF.head()" ] }, { "cell_type": "code", "execution_count": 27, "id": "neural-trail", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P50080331026[../../allConstraintsAnalysis/valuetypeConstra...1.0
P610409764[../../allConstraintsAnalysis/valuetypeConstra...1.0
P254501369[../../allConstraintsAnalysis/valuetypeConstra...1.0
P26680168[../../allConstraintsAnalysis/valuetypeConstra...1.0
P7374032[../../allConstraintsAnalysis/valuetypeConstra...1.0
P2839014[../../allConstraintsAnalysis/valuetypeConstra...1.0
P3028013[../../allConstraintsAnalysis/valuetypeConstra...1.0
P3027012[../../allConstraintsAnalysis/valuetypeConstra...1.0
P2127011[../../allConstraintsAnalysis/valuetypeConstra...1.0
P538010[../../allConstraintsAnalysis/valuetypeConstra...1.0
P14307[../../allConstraintsAnalysis/valuetypeConstra...1.0
P442506[../../allConstraintsAnalysis/valuetypeConstra...1.0
P619105[../../allConstraintsAnalysis/valuetypeConstra...1.0
P653305[../../allConstraintsAnalysis/valuetypeConstra...1.0
P653405[../../allConstraintsAnalysis/valuetypeConstra...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5008 0 331026 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P6104 0 9764 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P2545 0 1369 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P2668 0 168 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P7374 0 32 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P2839 0 14 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P3028 0 13 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P3027 0 12 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P2127 0 11 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P538 0 10 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P143 0 7 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P4425 0 6 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P6191 0 5 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P6533 0 5 [../../allConstraintsAnalysis/valuetypeConstra... \n", "P6534 0 5 [../../allConstraintsAnalysis/valuetypeConstra... \n", "\n", " violation_ratio \n", "P5008 1.0 \n", "P6104 1.0 \n", "P2545 1.0 \n", "P2668 1.0 \n", "P7374 1.0 \n", "P2839 1.0 \n", "P3028 1.0 \n", "P3027 1.0 \n", "P2127 1.0 \n", "P538 1.0 \n", "P143 1.0 \n", "P4425 1.0 \n", "P6191 1.0 \n", "P6533 1.0 \n", "P6534 1.0 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": null, "id": "sized-melissa", "metadata": {}, "outputs": [], "source": [ "!cat ../../allConstraintsAnalysis/valuetypeConstraint_Final4/normal/claims.type-constraints.instanceOf.P5008.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 28, "id": "cutting-polyester", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 897.000000\n", "mean 0.083622\n", "std 0.205759\n", "min 0.000000\n", "25% 0.000451\n", "50% 0.006186\n", "75% 0.042042\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 29, "id": "alert-receiver", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Value Type Constraint Violation Ratios')" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "valTypeConstDF['violation_ratio'].plot.hist(bins=100).set_title(\"Value Type Constraint Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 30, "id": "italian-motel", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Value Type Constraint Violation Ratios (<=0.04)')" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "valTypeConstDF[valTypeConstDF['violation_ratio'] <= 0.04].violation_ratio.plot.hist(bins=100).set_title(\"Value Type Constraint Violation Ratios (<=0.04)\")" ] }, { "cell_type": "code", "execution_count": 31, "id": "prescription-ceramic", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of constraints whose violation ratio is greater than mean :0/897\n" ] } ], "source": [ "print(f\"No. of constraints whose violation ratio is greater than mean :{sum(valTypeConstDF['violation_ratio'] >= 3.950680)}/{len(valTypeConstDF)}\")" ] }, { "cell_type": "code", "execution_count": 32, "id": "quiet-gardening", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# valTypeConstDF.sort_values(by=['violation_ratio'],ascending=False).head().paths.values" ] }, { "cell_type": "code", "execution_count": 33, "id": "documentary-pipeline", "metadata": {}, "outputs": [], "source": [ "# !head ../../allConstraintsAnalysis/typeConstraint/normal/claims.type-constraints.instanceOf.P7535.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 34, "id": "tutorial-mineral", "metadata": {}, "outputs": [], "source": [ "for key1 in valueTypeConstViolations.keys():\n", " valueTypeConstViolations[key1]['correct'] = valueTypeConstViolations[key1]['instanceOf']['correct'] + valueTypeConstViolations[key1]['subclass']['correct'] + valueTypeConstViolations[key1]['instanceOfOrSubclass']['correct']\n", " valueTypeConstViolations[key1]['incorrect'] = valueTypeConstViolations[key1]['instanceOf']['incorrect'] + valueTypeConstViolations[key1]['subclass']['incorrect'] + valueTypeConstViolations[key1]['instanceOfOrSubclass']['incorrect']\n", " valueTypeConstViolations[key1]['VR'] = valueTypeConstViolations[key1]['incorrect'] / (valueTypeConstViolations[key1]['correct'] + valueTypeConstViolations[key1]['incorrect'])\n", " " ] }, { "cell_type": "code", "execution_count": 35, "id": "satellite-concern", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "{'mandatory': {'instanceOf': {'correct': 11391695, 'incorrect': 3339},\n", " 'subclass': {'correct': 44764, 'incorrect': 1},\n", " 'instanceOfOrSubclass': {'correct': 11638, 'incorrect': 35},\n", " 'propCount': 106,\n", " 'correct': 11448097,\n", " 'incorrect': 3375,\n", " 'VR': 0.00029472193618427394},\n", " 'suggestion': {'instanceOf': {'correct': 46036, 'incorrect': 474},\n", " 'subclass': {'correct': 118, 'incorrect': 18},\n", " 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0},\n", " 'propCount': 5,\n", " 'correct': 46154,\n", " 'incorrect': 492,\n", " 'VR': 0.01054752819105604},\n", " 'normal': {'instanceOf': {'correct': 88858176, 'incorrect': 689971},\n", " 'subclass': {'correct': 4373665, 'incorrect': 6190},\n", " 'instanceOfOrSubclass': {'correct': 76234047, 'incorrect': 163783},\n", " 'propCount': 786,\n", " 'correct': 169465888,\n", " 'incorrect': 859944,\n", " 'VR': 0.00504881725750208}}" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valueTypeConstViolations" ] }, { "cell_type": "code", "execution_count": 36, "id": "purple-grill", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF.to_csv('../../allConstraintsAnalysis/valueTypeConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "traditional-shakespeare", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 35, "id": "spoken-symphony", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c60118b9694f4447b22fbe6ab5e113ff", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/313 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for value type constraint checks\")" ] }, { "cell_type": "markdown", "id": "motivated-sympathy", "metadata": {}, "source": [ "## Item Requires Statement Constraint" ] }, { "cell_type": "markdown", "id": "chubby-glass", "metadata": {}, "source": [ "### Understand Constraints File" ] }, { "cell_type": "code", "execution_count": 37, "id": "funny-batch", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import math\n", "dfItemRequires = pd.read_csv('../../constraintsOP/itemRequiresConstraint/claims.type-constraints_all.tsv',sep='\\t')" ] }, { "cell_type": "code", "execution_count": 38, "id": "original-expression", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 39, "id": "adequate-symphony", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2306', 'P2305', 'P2316', 'P2304', 'P2303', 'P6607', 'P4155',\n", " 'P31', 'P2916', 'P4680', 'P2308'], dtype=object)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].unique()" ] }, { "cell_type": "code", "execution_count": 40, "id": "infrared-canal", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "P2306 7182\n", "P2305 2540\n", "P2316 2523\n", "P2303 422\n", "P2304 14\n", "P6607 14\n", "P2916 5\n", "P4680 2\n", "P2308 1\n", "P4155 1\n", "P31 1\n", "Name: label, dtype: int64" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].value_counts()" ] }, { "cell_type": "code", "execution_count": 41, "id": "focused-karen", "metadata": {}, "outputs": [], "source": [ "#Reference: https://stackoverflow.com/a/17298454\n", "# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n", "dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')" ] }, { "cell_type": "code", "execution_count": 42, "id": "private-boundary", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2304P2305P2306P2308P2316P2916P31P4155P4680P6607
node1id
P1006P1006-P2302-Q21503247-0451ef47-0NaNNaNNaN[P214]NaNNaNNaNNaNNaNNaNNaN
P1010P1010-P2302-Q21503247-56183614-0NaNNaNNaN[P31]NaNNaNNaNNaNNaNNaNNaN
P1010-P2302-Q21503247-fd256eaf-0NaNNaN[Q794][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P1015P1015-P2302-Q21503247-20e3bfc5-0NaNNaNNaN[P31]NaNNaNNaNNaNNaNNaNNaN
P1017P1017-P2302-Q21503247-bbac2ce3-0NaNNaNNaN[P214]NaNNaNNaNNaNNaNNaNNaN
\n", "
" ], "text/plain": [ "label P2303 P2304 P2305 P2306 P2308 \\\n", "node1 id \n", "P1006 P1006-P2302-Q21503247-0451ef47-0 NaN NaN NaN [P214] NaN \n", "P1010 P1010-P2302-Q21503247-56183614-0 NaN NaN NaN [P31] NaN \n", " P1010-P2302-Q21503247-fd256eaf-0 NaN NaN [Q794] [P17] NaN \n", "P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN NaN NaN [P31] NaN \n", "P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN NaN NaN [P214] NaN \n", "\n", "label P2316 P2916 P31 P4155 P4680 \\\n", "node1 id \n", "P1006 P1006-P2302-Q21503247-0451ef47-0 NaN NaN NaN NaN NaN \n", "P1010 P1010-P2302-Q21503247-56183614-0 NaN NaN NaN NaN NaN \n", " P1010-P2302-Q21503247-fd256eaf-0 [Q21502408] NaN NaN NaN NaN \n", "P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN NaN NaN NaN NaN \n", "P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN NaN NaN NaN NaN \n", "\n", "label P6607 \n", "node1 id \n", "P1006 P1006-P2302-Q21503247-0451ef47-0 NaN \n", "P1010 P1010-P2302-Q21503247-56183614-0 NaN \n", " P1010-P2302-Q21503247-fd256eaf-0 NaN \n", "P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN \n", "P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN " ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "code", "execution_count": 43, "id": "conceptual-schedule", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.droplevel(1)" ] }, { "cell_type": "code", "execution_count": 44, "id": "third-hayes", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2304P2305P2306P2308P2316P2916P31P4155P4680P6607
node1
P1006NaNNaNNaN[P214]NaNNaNNaNNaNNaNNaNNaN
P1010NaNNaNNaN[P31]NaNNaNNaNNaNNaNNaNNaN
P1010NaNNaN[Q794][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P1015NaNNaNNaN[P31]NaNNaNNaNNaNNaNNaNNaN
P1017NaNNaNNaN[P214]NaNNaNNaNNaNNaNNaNNaN
\n", "
" ], "text/plain": [ "label P2303 P2304 P2305 P2306 P2308 P2316 P2916 P31 P4155 P4680 \\\n", "node1 \n", "P1006 NaN NaN NaN [P214] NaN NaN NaN NaN NaN NaN \n", "P1010 NaN NaN NaN [P31] NaN NaN NaN NaN NaN NaN \n", "P1010 NaN NaN [Q794] [P17] NaN [Q21502408] NaN NaN NaN NaN \n", "P1015 NaN NaN NaN [P31] NaN NaN NaN NaN NaN NaN \n", "P1017 NaN NaN NaN [P214] NaN NaN NaN NaN NaN NaN \n", "\n", "label P6607 \n", "node1 \n", "P1006 NaN \n", "P1010 NaN \n", "P1010 NaN \n", "P1015 NaN \n", "P1017 NaN " ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "markdown", "id": "shaped-companion", "metadata": {}, "source": [ "However, there is one anomaly where the property does not have a co-dependency constraint associated with it, but still has a link to this constraint." ] }, { "cell_type": "code", "execution_count": 45, "id": "indian-journal", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2304P2305P2306P2308P2316P2916P31P4155P4680P6607
node1
P5447NaNNaN[Q55426051][P5446]NaNNaNNaNNaNNaN[Q46466783]NaN
P5448NaNNaN[Q55426051][P5446]NaNNaNNaNNaNNaN[Q46466783]NaN
\n", "
" ], "text/plain": [ "label P2303 P2304 P2305 P2306 P2308 P2316 P2916 P31 P4155 \\\n", "node1 \n", "P5447 NaN NaN [Q55426051] [P5446] NaN NaN NaN NaN NaN \n", "P5448 NaN NaN [Q55426051] [P5446] NaN NaN NaN NaN NaN \n", "\n", "label P4680 P6607 \n", "node1 \n", "P5447 [Q46466783] NaN \n", "P5448 [Q46466783] NaN " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires[dfItemRequires['P4680'].apply(lambda p: type(p) == list)]" ] }, { "cell_type": "code", "execution_count": 46, "id": "discrete-template", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2304P2305P2306P2308P2316P2916P31P4155P4680P6607
node1
P1010NaNNaN[Q794][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P1045NaNNaN[Q20808382, Q28218485, Q3044918][P39]NaNNaNNaNNaNNaNNaNNaN
P1045NaNNaN[Q82955][P106]NaNNaNNaNNaNNaNNaNNaN
P1045NaNNaN[Q5][P31]NaN[Q21502408]NaNNaNNaNNaNNaN
P1045NaNNaN[Q142, Q71084][P27]NaNNaNNaNNaNNaNNaNNaN
....................................
P980NaNNaN[Q34][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P981NaNNaN[Q55][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P981NaNNaN[Q1852859][P31]NaNNaNNaNNaNNaNNaNNaN
P988NaNNaN[Q928][P17]NaN[Q21502408]NaNNaNNaNNaNNaN
P990[Q49678, Q853715]NaN[Q5][P31]NaNNaNNaNNaNNaNNaNNaN
\n", "

2540 rows × 11 columns

\n", "
" ], "text/plain": [ "label P2303 P2304 P2305 P2306 \\\n", "node1 \n", "P1010 NaN NaN [Q794] [P17] \n", "P1045 NaN NaN [Q20808382, Q28218485, Q3044918] [P39] \n", "P1045 NaN NaN [Q82955] [P106] \n", "P1045 NaN NaN [Q5] [P31] \n", "P1045 NaN NaN [Q142, Q71084] [P27] \n", "... ... ... ... ... \n", "P980 NaN NaN [Q34] [P17] \n", "P981 NaN NaN [Q55] [P17] \n", "P981 NaN NaN [Q1852859] [P31] \n", "P988 NaN NaN [Q928] [P17] \n", "P990 [Q49678, Q853715] NaN [Q5] [P31] \n", "\n", "label P2308 P2316 P2916 P31 P4155 P4680 P6607 \n", "node1 \n", "P1010 NaN [Q21502408] NaN NaN NaN NaN NaN \n", "P1045 NaN NaN NaN NaN NaN NaN NaN \n", "P1045 NaN NaN NaN NaN NaN NaN NaN \n", "P1045 NaN [Q21502408] NaN NaN NaN NaN NaN \n", "P1045 NaN NaN NaN NaN NaN NaN NaN \n", "... ... ... ... ... ... ... ... \n", "P980 NaN [Q21502408] NaN NaN NaN NaN NaN \n", "P981 NaN [Q21502408] NaN NaN NaN NaN NaN \n", "P981 NaN NaN NaN NaN NaN NaN NaN \n", "P988 NaN [Q21502408] NaN NaN NaN NaN NaN \n", "P990 NaN NaN NaN NaN NaN NaN NaN \n", "\n", "[2540 rows x 11 columns]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires[dfItemRequires['P2305'].apply(lambda p: type(p) == list)]" ] }, { "cell_type": "markdown", "id": "forced-christmas", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "markdown", "id": "acquired-floor", "metadata": {}, "source": [ "#### Version 1 - Mandatory + Suggestion + Normal" ] }, { "cell_type": "code", "execution_count": 86, "id": "turkish-establishment", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "37c6488e55b04219bea1391f9dfa247e", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3147 [00:00(node2)\"]\n", " commandWhere = \" --where '\"\n", " commandWhere = []\n", " \n", " # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", " constSet = mandatory + suggestion + normal\n", " \n", " if len(constSet) == 0:\n", " continue\n", " excptns = set()\n", " for (rowNo, constraint) in enumerate(constSet):\n", " prop2 = constraint['P2306']\n", " \n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit/claims.\"+ prop2 +\".tsv \"\n", " if type(constraint['P2303']) == list: # Exceptions present\n", " if len(excptns) == 0:\n", " excptns = set(constraint['P2303'])\n", " else:\n", " excptns = excptns.intersection(set(constraint['P2303']))\n", " if type(constraint['P2305']) == list:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n", " commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n", " else:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n", "# print(commandMatchMoreFiles)\n", " if len(commandWhere) == 0:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n", " else:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " if len(excptns) == 0:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", " fOP.write(command)\n", " else:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 11, "id": "peripheral-herald", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'cnt' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcnt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'cnt' is not defined" ] } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 88, "id": "incorporated-logistics", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "27" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fCnt" ] }, { "cell_type": "code", "execution_count": 123, "id": "welcome-welding", "metadata": {}, "outputs": [], "source": [ "# from tqdm.notebook import tqdm\n", "# import os.path\n", "# import os\n", "# folderName = 'codependencyConstraint'\n", "# for prop in tqdm(dfItemRequires.index.unique()):\n", "# for subFolderName in ['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal']:\n", "# if os.path.isfile(\"../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv\") and \\\n", "# os.path.isfile(\"../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv\"):\n", "# os.system(\"kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", "# ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", "# -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_w_exceptions.tsv\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "optimum-blowing", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,28):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/codepConst_MSN_Validator_new2_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "indoor-verse", "metadata": {}, "source": [ "#### Version 2 - Mandatory + Normal" ] }, { "cell_type": "code", "execution_count": 89, "id": "furnished-paradise", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "edc18c3904494784866a2d8be0d744f4", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3147 [00:00(node2)\"]\n", " commandWhere = \" --where '\"\n", " commandWhere = []\n", " \n", " # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", " constSet = mandatory + normal\n", " \n", " if len(constSet) == 0:\n", " continue\n", " excptns = set()\n", " for (rowNo, constraint) in enumerate(constSet):\n", " prop2 = constraint['P2306']\n", " \n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit/claims.\"+ prop2 +\".tsv \"\n", " if type(constraint['P2303']) == list: # Exceptions present\n", " if len(excptns) == 0:\n", " excptns = set(constraint['P2303'])\n", " else:\n", " excptns = excptns.intersection(set(constraint['P2303']))\n", " if type(constraint['P2305']) == list:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n", " commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n", " else:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n", "# print(commandMatchMoreFiles)\n", " if len(commandWhere) == 0:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n", " else:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " if len(excptns) == 0:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", " fOP.write(command)\n", " else:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 14, "id": "searching-individual", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "468" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 18, "id": "silver-clarity", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,25):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/codepConst_MN_Validator_new2_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "prescription-access", "metadata": {}, "source": [ "#### Version 3 - Mandatory" ] }, { "cell_type": "code", "execution_count": 90, "id": "married-porter", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2bff77e903334ba7aac27fa465eb5541", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3147 [00:00(node2)\"]\n", " commandWhere = \" --where '\"\n", " commandWhere = []\n", " \n", " # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", " constSet = mandatory\n", " \n", " if len(constSet) == 0:\n", " continue\n", " excptns = set()\n", " for (rowNo, constraint) in enumerate(constSet):\n", " prop2 = constraint['P2306']\n", " \n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit/claims.\"+ prop2 +\".tsv \"\n", " if type(constraint['P2303']) == list: # Exceptions present\n", " if len(excptns) == 0:\n", " excptns = set(constraint['P2303'])\n", " else:\n", " excptns = excptns.intersection(set(constraint['P2303']))\n", " if type(constraint['P2305']) == list:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n", " commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n", " else:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n", "# print(commandMatchMoreFiles)\n", " if len(commandWhere) == 0:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n", " else:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " if len(excptns) == 0:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", " fOP.write(command)\n", " else:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 91, "id": "according-blackberry", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "78" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 17, "id": "extraordinary-drawing", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,5):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/codepConst_M_Validator_new2_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "subsequent-brown", "metadata": {}, "source": [ "#### Version 4 - Normal" ] }, { "cell_type": "code", "execution_count": 92, "id": "operational-migration", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "23671bc603f64352967ca76b3f0a1aba", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3147 [00:00(node2)\"]\n", " commandWhere = \" --where '\"\n", " commandWhere = []\n", " \n", " # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", " constSet = normal\n", " \n", " if len(constSet) == 0:\n", " continue\n", " excptns = set()\n", " for (rowNo, constraint) in enumerate(constSet):\n", " prop2 = constraint['P2306']\n", " \n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit/claims.\"+ prop2 +\".tsv \"\n", " if type(constraint['P2303']) == list: # Exceptions present\n", " if len(excptns) == 0:\n", " excptns = set(constraint['P2303'])\n", " else:\n", " excptns = excptns.intersection(set(constraint['P2303']))\n", " if type(constraint['P2305']) == list:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n", " commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n", " else:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n", "# print(commandMatchMoreFiles)\n", " if len(commandWhere) == 0:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n", " else:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " if len(excptns) == 0:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", " fOP.write(command)\n", " else:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 93, "id": "harmful-binary", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "418" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 19, "id": "advance-married", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,23):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/codepConst_N_Validator_new2_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "ranging-journal", "metadata": {}, "source": [ "#### Version 5 - Suggestion" ] }, { "cell_type": "code", "execution_count": 16, "id": "missing-jordan", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bdc942cb17d9460fa2421475c3489d1a", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/3147 [00:00(node2)\"]\n", " commandWhere = \" --where '\"\n", " commandWhere = []\n", " \n", " # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", " constSet = suggestion\n", " \n", " if len(constSet) == 0:\n", " continue\n", " excptns = set()\n", " for (rowNo, constraint) in enumerate(constSet):\n", " prop2 = constraint['P2306']\n", " \n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit/claims.\"+ prop2 +\".tsv \"\n", " if type(constraint['P2303']) == list: # Exceptions present\n", " if len(excptns) == 0:\n", " excptns = set(constraint['P2303'])\n", " else:\n", " excptns = excptns.intersection(set(constraint['P2303']))\n", " if type(constraint['P2305']) == list:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n", " commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n", " else:\n", " commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n", "# print(commandMatchMoreFiles)\n", " if len(commandWhere) == 0:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n", " else:\n", " command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " if len(excptns) == 0:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", " fOP.write(command)\n", " else:\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 17, "id": "soviet-forth", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "97" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 18, "id": "racial-stationery", "metadata": {}, "outputs": [], "source": [ "import os\n", "for i in range(1,6):\n", " os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/codepConst_S_Validator_new_3_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "structural-envelope", "metadata": {}, "source": [ "### Merge all correct/incorrect outputs" ] }, { "cell_type": "code", "execution_count": 17, "id": "joined-invention", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "57dcbdd4c8014c9288dbb92b331a05a6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# import os\n", "# from tqdm.notebook import tqdm\n", "\n", "# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n", "# folderPath = \"../../allConstraintsAnalysis/codependencyConstraint/\" + folder + \"/\"\n", "# correct_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".correct.\" in f, os.listdir(folderPath))])\n", "# incorrect_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".incorrect.\" in f, os.listdir(folderPath))])\n", "# # print(files_list)\n", "# os.system(\"{ kgtk cat -i \"+ correct_files_list + \" -o \"+folderPath+\"claims.all.correctSuperSet.tsv -v True; } 2> \"+folderPath+\"claims.all.correctSuperSet.log\")\n", "# os.system(\"{ kgtk cat -i \"+ incorrect_files_list + \" -o \"+folderPath+\"claims.all.incorrectSuperSet.tsv -v True; } 2> \"+folderPath+\"claims.all.incorrectSuperSet.log\")" ] }, { "cell_type": "code", "execution_count": 15, "id": "stopped-bolivia", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "68395f72036a469fad8908d916303bcd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# import os\n", "# from tqdm.notebook import tqdm\n", "\n", "# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n", "# folderPath = \"../../allConstraintsAnalysis/codependencyConstraint_Final/\" + folder + \"/\"\n", "# correct_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".correct.\" in f, os.listdir(folderPath))])\n", "# incorrect_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".incorrect.\" in f, os.listdir(folderPath))])\n", "# # print(files_list)\n", "# os.system(\"{ kgtk cat -i \"+ correct_files_list + \" -o \"+folderPath+\"claims.all.correctSuperSet.tsv; } 2> \"+folderPath+\"claims.all.correctSuperSet.log\")\n", "# os.system(\"{ kgtk cat -i \"+ incorrect_files_list + \" -o \"+folderPath+\"claims.all.incorrectSuperSet.tsv; } 2> \"+folderPath+\"claims.all.incorrectSuperSet.log\")" ] }, { "cell_type": "code", "execution_count": null, "id": "criminal-central", "metadata": {}, "outputs": [], "source": [ "# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n", "# folderPath = \"../../allConstraintsAnalysis/codependencyConstraint/\" + folder + \"/\"\n", "# folderPathNew = \"../../allConstraintsAnalysis/codependencyConstraint_Final/\" + folder + \"/\"\n", "# os.system(f\"screen -dm kgtk ifnotexists -i {folderPathNew}claims.all.correctSuperSet.tsv --filter-on {folderPath}claims.all.correctSuperSet.tsv -o {folderPathNew}claims.all.correctSuperSet.diff.tsv\")\n", "# os.system(f\"screen -dm kgtk ifnotexists -i {folderPathNew}claims.all.incorrectSuperSet.tsv --filter-on {folderPath}claims.all.incorrectSuperSet.tsv -o {folderPathNew}claims.all.incorrectSuperSet.diff.tsv\")\n", " " ] }, { "cell_type": "markdown", "id": "homeless-pleasure", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 1, "id": "welcome-dependence", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4bb32dc855d74908a5712f7386539c70", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5093ebb08fb3417f8437078912c62872", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1192 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpaths
P101815628[../../allConstraintsAnalysis/codependencyCons...
P1191760182477[../../allConstraintsAnalysis/codependencyCons...
P1629753188[../../allConstraintsAnalysis/codependencyCons...
P146435000831[../../allConstraintsAnalysis/codependencyCons...
P134511348[../../allConstraintsAnalysis/codependencyCons...
............
P19263711424855[../../allConstraintsAnalysis/codependencyCons...
P28736428[../../allConstraintsAnalysis/codependencyCons...
P2875354716[../../allConstraintsAnalysis/codependencyCons...
P28765114[../../allConstraintsAnalysis/codependencyCons...
P290021844813[../../allConstraintsAnalysis/codependencyCons...
\n", "

527 rows × 3 columns

\n", "" ], "text/plain": [ " correct incorrect paths\n", "P1018 156 28 [../../allConstraintsAnalysis/codependencyCons...\n", "P119 176018 2477 [../../allConstraintsAnalysis/codependencyCons...\n", "P1629 7531 88 [../../allConstraintsAnalysis/codependencyCons...\n", "P1464 35000 831 [../../allConstraintsAnalysis/codependencyCons...\n", "P1345 113 48 [../../allConstraintsAnalysis/codependencyCons...\n", "... ... ... ...\n", "P19 2637114 24855 [../../allConstraintsAnalysis/codependencyCons...\n", "P2873 642 8 [../../allConstraintsAnalysis/codependencyCons...\n", "P2875 3547 16 [../../allConstraintsAnalysis/codependencyCons...\n", "P2876 51 14 [../../allConstraintsAnalysis/codependencyCons...\n", "P2900 21844 813 [../../allConstraintsAnalysis/codependencyCons...\n", "\n", "[527 rows x 3 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1" ] }, { "cell_type": "code", "execution_count": 7, "id": "powered-residence", "metadata": {}, "outputs": [], "source": [ "codepConstDF1['violation_ratio'] = codepConstDF1.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)" ] }, { "cell_type": "code", "execution_count": 8, "id": "chinese-pressing", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P1111046327[../../allConstraintsAnalysis/codependencyCons...1.0
P2302042211[../../allConstraintsAnalysis/codependencyCons...1.0
P30630549[../../allConstraintsAnalysis/codependencyCons...1.0
P2303039[../../allConstraintsAnalysis/codependencyCons...1.0
P5447023[../../allConstraintsAnalysis/codependencyCons...1.0
P5448023[../../allConstraintsAnalysis/codependencyCons...1.0
P2308017[../../allConstraintsAnalysis/codependencyCons...1.0
P756908[../../allConstraintsAnalysis/codependencyCons...1.0
P790307[../../allConstraintsAnalysis/codependencyCons...1.0
P57404[../../allConstraintsAnalysis/codependencyCons...1.0
P230603[../../allConstraintsAnalysis/codependencyCons...1.0
P291601[../../allConstraintsAnalysis/codependencyCons...1.0
P243301[../../allConstraintsAnalysis/codependencyCons...1.0
P826401[../../allConstraintsAnalysis/codependencyCons...1.0
P230701[../../allConstraintsAnalysis/codependencyCons...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1111 0 46327 [../../allConstraintsAnalysis/codependencyCons... \n", "P2302 0 42211 [../../allConstraintsAnalysis/codependencyCons... \n", "P3063 0 549 [../../allConstraintsAnalysis/codependencyCons... \n", "P2303 0 39 [../../allConstraintsAnalysis/codependencyCons... \n", "P5447 0 23 [../../allConstraintsAnalysis/codependencyCons... \n", "P5448 0 23 [../../allConstraintsAnalysis/codependencyCons... \n", "P2308 0 17 [../../allConstraintsAnalysis/codependencyCons... \n", "P7569 0 8 [../../allConstraintsAnalysis/codependencyCons... \n", "P7903 0 7 [../../allConstraintsAnalysis/codependencyCons... \n", "P574 0 4 [../../allConstraintsAnalysis/codependencyCons... \n", "P2306 0 3 [../../allConstraintsAnalysis/codependencyCons... \n", "P2916 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2433 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P8264 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2307 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P1111 1.0 \n", "P2302 1.0 \n", "P3063 1.0 \n", "P2303 1.0 \n", "P5447 1.0 \n", "P5448 1.0 \n", "P2308 1.0 \n", "P7569 1.0 \n", "P7903 1.0 \n", "P574 1.0 \n", "P2306 1.0 \n", "P2916 1.0 \n", "P2433 1.0 \n", "P8264 1.0 \n", "P2307 1.0 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1.sort_values(by=['violation_ratio', 'incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 9, "id": "armed-constitution", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['../../allConstraintsAnalysis/codependencyConstraint_Final/Mand_Sugg_Normal/claims.P2302.correct.tsv',\n", " '../../allConstraintsAnalysis/codependencyConstraint_Final/Mand_Sugg_Normal/claims.P2302.incorrect.tsv']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(codepConstDF1.loc['P2302']['paths'])" ] }, { "cell_type": "code", "execution_count": 10, "id": "continued-desire", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "P10-P2302-Q21502404-d012aef4-0\tP10\tP2302\tQ21502404\tnormal\twikibase-item\r\n", "P10-P2302-Q21510851-5224fe0b-0\tP10\tP2302\tQ21510851\tnormal\twikibase-item\r\n", "P10-P2302-Q21510852-dde2f0ce-0\tP10\tP2302\tQ21510852\tnormal\twikibase-item\r\n", "P10-P2302-Q52004125-d0288d06-0\tP10\tP2302\tQ52004125\tnormal\twikibase-item\r\n", "P10-P2302-Q53869507-974ce3b1-0\tP10\tP2302\tQ53869507\tnormal\twikibase-item\r\n", "P1000-P2302-Q21510856-b2772a67-0\tP1000\tP2302\tQ21510856\tnormal\twikibase-item\r\n", "P1000-P2302-Q21510865-1f5093e9-0\tP1000\tP2302\tQ21510865\tnormal\twikibase-item\r\n", "P1000-P2302-Q53869507-36dbee67-0\tP1000\tP2302\tQ53869507\tnormal\twikibase-item\r\n", "P1001-P2302-Q21502838-3cc7ade2-0\tP1001\tP2302\tQ21502838\tnormal\twikibase-item\r\n" ] } ], "source": [ "!head ../../allConstraintsAnalysis/codependencyConstraint_Final/Mand_Sugg_Normal/claims.P2302.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 11, "id": "demonstrated-debut", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P22142962988711699[../../allConstraintsAnalysis/codependencyCons...0.193676
P7342001246704728[../../allConstraintsAnalysis/codependencyCons...0.260434
P43331028893435483[../../allConstraintsAnalysis/codependencyCons...0.013841
P1951132062384602[../../allConstraintsAnalysis/codependencyCons...0.253584
P5694646728241105[../../allConstraintsAnalysis/codependencyCons...0.049328
P13110056935198870[../../allConstraintsAnalysis/codependencyCons...0.019391
P2755955123578[../../allConstraintsAnalysis/codependencyCons...0.954027
P2860174402886114713[../../allConstraintsAnalysis/codependencyCons...0.000657
P570233261194455[../../allConstraintsAnalysis/codependencyCons...0.038917
P20178479290131[../../allConstraintsAnalysis/codependencyCons...0.515261
P1435189387479479[../../allConstraintsAnalysis/codependencyCons...0.040276
P19223045163440[../../allConstraintsAnalysis/codependencyCons...0.675677
P7084525354258[../../allConstraintsAnalysis/codependencyCons...0.545246
P19711752249904[../../allConstraintsAnalysis/codependencyCons...0.298066
P15983654446915[../../allConstraintsAnalysis/codependencyCons...0.562132
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis/codependencyCons... \n", "P734 2001246 704728 [../../allConstraintsAnalysis/codependencyCons... \n", "P433 31028893 435483 [../../allConstraintsAnalysis/codependencyCons... \n", "P195 1132062 384602 [../../allConstraintsAnalysis/codependencyCons... \n", "P569 4646728 241105 [../../allConstraintsAnalysis/codependencyCons... \n", "P131 10056935 198870 [../../allConstraintsAnalysis/codependencyCons... \n", "P275 5955 123578 [../../allConstraintsAnalysis/codependencyCons... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis/codependencyCons... \n", "P570 2332611 94455 [../../allConstraintsAnalysis/codependencyCons... \n", "P2017 84792 90131 [../../allConstraintsAnalysis/codependencyCons... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis/codependencyCons... \n", "P1922 30451 63440 [../../allConstraintsAnalysis/codependencyCons... \n", "P708 45253 54258 [../../allConstraintsAnalysis/codependencyCons... \n", "P197 117522 49904 [../../allConstraintsAnalysis/codependencyCons... \n", "P1598 36544 46915 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P2214 0.193676 \n", "P734 0.260434 \n", "P433 0.013841 \n", "P195 0.253584 \n", "P569 0.049328 \n", "P131 0.019391 \n", "P275 0.954027 \n", "P2860 0.000657 \n", "P570 0.038917 \n", "P2017 0.515261 \n", "P1435 0.040276 \n", "P1922 0.675677 \n", "P708 0.545246 \n", "P197 0.298066 \n", "P1598 0.562132 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 12, "id": "developed-zimbabwe", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 527.000000\n", "mean 0.206083\n", "std 0.305674\n", "min 0.000000\n", "25% 0.000929\n", "50% 0.032847\n", "75% 0.298101\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 13, "id": "unknown-johnston", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 1 - Violation Ratios')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF1['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 1 - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "exceptional-dakota", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 1 - Violation Ratios <= 0.5')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF1[codepConstDF1['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 1 - Violation Ratios <= 0.5\")" ] }, { "cell_type": "code", "execution_count": 15, "id": "interior-joseph", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of properties whose violation ratio is greater than mean: 0/527\n" ] } ], "source": [ "print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF1['violation_ratio'] >= 3.539484)}/{len(codepConstDF1)}\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "variable-desert", "metadata": {}, "outputs": [], "source": [ "codepConstDF1.to_csv('../../allConstraintsAnalysis/codepConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "greater-genetics", "metadata": {}, "source": [ "#### Version 2 - Mand Normal" ] }, { "cell_type": "code", "execution_count": 179, "id": "constant-chance", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF2 = pd.DataFrame(codepConstViolations['Mand_Normal']).T" ] }, { "cell_type": "code", "execution_count": 180, "id": "included-adjustment", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpaths
P1196850373039[../../allConstraintsAnalysis/codependencyCons...
P13833172641[../../allConstraintsAnalysis/codependencyCons...
P101815628[../../allConstraintsAnalysis/codependencyCons...
P1538194334152[../../allConstraintsAnalysis/codependencyCons...
P168543210[../../allConstraintsAnalysis/codependencyCons...
............
P2962268032[../../allConstraintsAnalysis/codependencyCons...
P18319026140[../../allConstraintsAnalysis/codependencyCons...
P199924030[../../allConstraintsAnalysis/codependencyCons...
P2009101915[../../allConstraintsAnalysis/codependencyCons...
P137679449106[../../allConstraintsAnalysis/codependencyCons...
\n", "

468 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P1196 85037 3039 [../../allConstraintsAnalysis/codependencyCons...\n", "P1383 31726 41 [../../allConstraintsAnalysis/codependencyCons...\n", "P1018 156 28 [../../allConstraintsAnalysis/codependencyCons...\n", "P1538 194334 152 [../../allConstraintsAnalysis/codependencyCons...\n", "P1685 4321 0 [../../allConstraintsAnalysis/codependencyCons...\n", "... ... ... ...\n", "P2962 26803 2 [../../allConstraintsAnalysis/codependencyCons...\n", "P183 19026 140 [../../allConstraintsAnalysis/codependencyCons...\n", "P1999 2403 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P2009 1019 15 [../../allConstraintsAnalysis/codependencyCons...\n", "P1376 79449 106 [../../allConstraintsAnalysis/codependencyCons...\n", "\n", "[468 rows x 3 columns]" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2" ] }, { "cell_type": "code", "execution_count": 181, "id": "fundamental-knowing", "metadata": {}, "outputs": [], "source": [ "codepConstDF2['violation_ratio'] = codepConstDF2.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)" ] }, { "cell_type": "code", "execution_count": 182, "id": "harmful-discipline", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P230701[../../allConstraintsAnalysis/codependencyCons...1.0
P1111046327[../../allConstraintsAnalysis/codependencyCons...1.0
P756908[../../allConstraintsAnalysis/codependencyCons...1.0
P291601[../../allConstraintsAnalysis/codependencyCons...1.0
P230901[../../allConstraintsAnalysis/codependencyCons...1.0
P790307[../../allConstraintsAnalysis/codependencyCons...1.0
P5447023[../../allConstraintsAnalysis/codependencyCons...1.0
P231101[../../allConstraintsAnalysis/codependencyCons...1.0
P243301[../../allConstraintsAnalysis/codependencyCons...1.0
P231301[../../allConstraintsAnalysis/codependencyCons...1.0
P5448023[../../allConstraintsAnalysis/codependencyCons...1.0
P2308017[../../allConstraintsAnalysis/codependencyCons...1.0
P2303039[../../allConstraintsAnalysis/codependencyCons...1.0
P230603[../../allConstraintsAnalysis/codependencyCons...1.0
P231201[../../allConstraintsAnalysis/codependencyCons...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2307 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P1111 0 46327 [../../allConstraintsAnalysis/codependencyCons... \n", "P7569 0 8 [../../allConstraintsAnalysis/codependencyCons... \n", "P2916 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2309 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P7903 0 7 [../../allConstraintsAnalysis/codependencyCons... \n", "P5447 0 23 [../../allConstraintsAnalysis/codependencyCons... \n", "P2311 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2433 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2313 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P5448 0 23 [../../allConstraintsAnalysis/codependencyCons... \n", "P2308 0 17 [../../allConstraintsAnalysis/codependencyCons... \n", "P2303 0 39 [../../allConstraintsAnalysis/codependencyCons... \n", "P2306 0 3 [../../allConstraintsAnalysis/codependencyCons... \n", "P2312 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P2307 1.0 \n", "P1111 1.0 \n", "P7569 1.0 \n", "P2916 1.0 \n", "P2309 1.0 \n", "P7903 1.0 \n", "P5447 1.0 \n", "P2311 1.0 \n", "P2433 1.0 \n", "P2313 1.0 \n", "P5448 1.0 \n", "P2308 1.0 \n", "P2303 1.0 \n", "P2306 1.0 \n", "P2312 1.0 " ] }, "execution_count": 182, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 183, "id": "unlikely-chamber", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P22142962988711699[../../allConstraintsAnalysis/codependencyCons...0.193676
P43331028893435483[../../allConstraintsAnalysis/codependencyCons...0.013841
P2755955123578[../../allConstraintsAnalysis/codependencyCons...0.954027
P2860174402886114713[../../allConstraintsAnalysis/codependencyCons...0.000657
P1435189387479479[../../allConstraintsAnalysis/codependencyCons...0.040276
P7084525354258[../../allConstraintsAnalysis/codependencyCons...0.545246
P19711752249904[../../allConstraintsAnalysis/codependencyCons...0.298066
P15983697846481[../../allConstraintsAnalysis/codependencyCons...0.556932
P1111046327[../../allConstraintsAnalysis/codependencyCons...1.000000
P2248402041566[../../allConstraintsAnalysis/codependencyCons...0.911815
P2325407140611[../../allConstraintsAnalysis/codependencyCons...0.908889
P856123929238026[../../allConstraintsAnalysis/codependencyCons...0.029770
P2243402536540[../../allConstraintsAnalysis/codependencyCons...0.900777
P2244402736527[../../allConstraintsAnalysis/codependencyCons...0.900700
P41335779333607[../../allConstraintsAnalysis/codependencyCons...0.085864
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis/codependencyCons... \n", "P433 31028893 435483 [../../allConstraintsAnalysis/codependencyCons... \n", "P275 5955 123578 [../../allConstraintsAnalysis/codependencyCons... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis/codependencyCons... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis/codependencyCons... \n", "P708 45253 54258 [../../allConstraintsAnalysis/codependencyCons... \n", "P197 117522 49904 [../../allConstraintsAnalysis/codependencyCons... \n", "P1598 36978 46481 [../../allConstraintsAnalysis/codependencyCons... \n", "P1111 0 46327 [../../allConstraintsAnalysis/codependencyCons... \n", "P2248 4020 41566 [../../allConstraintsAnalysis/codependencyCons... \n", "P2325 4071 40611 [../../allConstraintsAnalysis/codependencyCons... \n", "P856 1239292 38026 [../../allConstraintsAnalysis/codependencyCons... \n", "P2243 4025 36540 [../../allConstraintsAnalysis/codependencyCons... \n", "P2244 4027 36527 [../../allConstraintsAnalysis/codependencyCons... \n", "P413 357793 33607 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P2214 0.193676 \n", "P433 0.013841 \n", "P275 0.954027 \n", "P2860 0.000657 \n", "P1435 0.040276 \n", "P708 0.545246 \n", "P197 0.298066 \n", "P1598 0.556932 \n", "P1111 1.000000 \n", "P2248 0.911815 \n", "P2325 0.908889 \n", "P856 0.029770 \n", "P2243 0.900777 \n", "P2244 0.900700 \n", "P413 0.085864 " ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 184, "id": "violent-match", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 468.000000\n", "mean 0.169189\n", "std 0.285155\n", "min 0.000000\n", "25% 0.000663\n", "50% 0.016656\n", "75% 0.193986\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 185, "id": "educational-thickness", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 2 - Violation Ratios')" ] }, "execution_count": 185, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF2['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 2 - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 186, "id": "latin-mitchell", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 2 - Violation Ratios <= 0.5')" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF2[codepConstDF2['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 2 - Violation Ratios <= 0.5\")" ] }, { "cell_type": "code", "execution_count": 187, "id": "asian-forwarding", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of properties whose violation ratio is greater than mean: 0/468\n" ] } ], "source": [ "print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF2['violation_ratio'] >= 2.290915)}/{len(codepConstDF2)}\")" ] }, { "cell_type": "markdown", "id": "destroyed-flash", "metadata": {}, "source": [ "#### Version 3 - Mand" ] }, { "cell_type": "code", "execution_count": 188, "id": "consecutive-plenty", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF3 = pd.DataFrame(codepConstViolations['Mand']).T" ] }, { "cell_type": "code", "execution_count": 189, "id": "digital-mileage", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpaths
P1081123000[../../allConstraintsAnalysis/codependencyCons...
P202123031[../../allConstraintsAnalysis/codependencyCons...
P37443110[../../allConstraintsAnalysis/codependencyCons...
P598213260[../../allConstraintsAnalysis/codependencyCons...
P38155800[../../allConstraintsAnalysis/codependencyCons...
............
P187916950[../../allConstraintsAnalysis/codependencyCons...
P364870[../../allConstraintsAnalysis/codependencyCons...
P19716739234[../../allConstraintsAnalysis/codependencyCons...
P199076191[../../allConstraintsAnalysis/codependencyCons...
P2009101915[../../allConstraintsAnalysis/codependencyCons...
\n", "

78 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P1081 12300 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P2021 2303 1 [../../allConstraintsAnalysis/codependencyCons...\n", "P3744 311 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P5982 1326 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P3815 580 0 [../../allConstraintsAnalysis/codependencyCons...\n", "... ... ... ...\n", "P1879 1695 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P3648 7 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P197 167392 34 [../../allConstraintsAnalysis/codependencyCons...\n", "P1990 7619 1 [../../allConstraintsAnalysis/codependencyCons...\n", "P2009 1019 15 [../../allConstraintsAnalysis/codependencyCons...\n", "\n", "[78 rows x 3 columns]" ] }, "execution_count": 189, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3" ] }, { "cell_type": "code", "execution_count": 190, "id": "formed-battle", "metadata": {}, "outputs": [], "source": [ "codepConstDF3['violation_ratio'] = codepConstDF3.apply(lambda p: p.incorrect / p.correct if p.correct != 0 else p.incorrect/100, axis=1)" ] }, { "cell_type": "code", "execution_count": 191, "id": "numerous-construction", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P5051163[../../allConstraintsAnalysis/codependencyCons...63.000000
P434171[../../allConstraintsAnalysis/codependencyCons...0.142857
P2095383[../../allConstraintsAnalysis/codependencyCons...0.078947
P3931225064[../../allConstraintsAnalysis/codependencyCons...0.028444
P17313639[../../allConstraintsAnalysis/codependencyCons...0.024793
P2009101915[../../allConstraintsAnalysis/codependencyCons...0.014720
P2461692[../../allConstraintsAnalysis/codependencyCons...0.011834
P826401[../../allConstraintsAnalysis/codependencyCons...0.010000
P9445774[../../allConstraintsAnalysis/codependencyCons...0.006932
P1560323520[../../allConstraintsAnalysis/codependencyCons...0.006182
P26798875[../../allConstraintsAnalysis/codependencyCons...0.005637
P4511050236[../../allConstraintsAnalysis/codependencyCons...0.003428
P236516505[../../allConstraintsAnalysis/codependencyCons...0.003030
P9152836445[../../allConstraintsAnalysis/codependencyCons...0.001587
P16358901[../../allConstraintsAnalysis/codependencyCons...0.001124
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5051 1 63 [../../allConstraintsAnalysis/codependencyCons... \n", "P4341 7 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P2095 38 3 [../../allConstraintsAnalysis/codependencyCons... \n", "P3931 2250 64 [../../allConstraintsAnalysis/codependencyCons... \n", "P1731 363 9 [../../allConstraintsAnalysis/codependencyCons... \n", "P2009 1019 15 [../../allConstraintsAnalysis/codependencyCons... \n", "P246 169 2 [../../allConstraintsAnalysis/codependencyCons... \n", "P8264 0 1 [../../allConstraintsAnalysis/codependencyCons... \n", "P944 577 4 [../../allConstraintsAnalysis/codependencyCons... \n", "P1560 3235 20 [../../allConstraintsAnalysis/codependencyCons... \n", "P2679 887 5 [../../allConstraintsAnalysis/codependencyCons... \n", "P451 10502 36 [../../allConstraintsAnalysis/codependencyCons... \n", "P2365 1650 5 [../../allConstraintsAnalysis/codependencyCons... \n", "P915 28364 45 [../../allConstraintsAnalysis/codependencyCons... \n", "P1635 890 1 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P5051 63.000000 \n", "P4341 0.142857 \n", "P2095 0.078947 \n", "P3931 0.028444 \n", "P1731 0.024793 \n", "P2009 0.014720 \n", "P246 0.011834 \n", "P8264 0.010000 \n", "P944 0.006932 \n", "P1560 0.006182 \n", "P2679 0.005637 \n", "P451 0.003428 \n", "P2365 0.003030 \n", "P915 0.001587 \n", "P1635 0.001124 " ] }, "execution_count": 191, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 192, "id": "identified-marble", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "correct 1980\n", "incorrect 1\n", "paths [../../allConstraintsAnalysis/codependencyCons...\n", "violation_ratio 0.000505\n", "Name: P1713, dtype: object" ] }, "execution_count": 192, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3.loc['P1713']" ] }, { "cell_type": "code", "execution_count": 193, "id": "established-mounting", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "Q4681882-P1713-d878eb-9fff460e-0\tQ4681882\tP1713\t\"https://heightnetworth.com/adele-givens-net-worth-2020/\"\tnormal\turl\r\n" ] } ], "source": [ "!head ../../allConstraintsAnalysis/codependencyConstraint_Final/Mand/claims.P1713.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 77, "id": "naval-functionality", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "Q1000195-P1713-e792ce-9b50511b-0\tQ1000195\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb13/bio/T/thiesdi0.html\"\tnormal\turl\r\n", "Q100218-P1713-3e741f-4bb9633d-0\tQ100218\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/B/bunge_martina.html\"\tnormal\turl\r\n", "Q100250-P1713-33d6e4-326e7a64-0\tQ100250\tP1713\t\"http://webarchiv.bundestag.de/archive/2010/0427/bundestag/abgeordnete/bio/B/bauerwo0.html\"\tnormal\turl\r\n", "Q100357-P1713-f75a30-72e42938-0\tQ100357\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb14/bio/J/juengsa0.html\"\tnormal\turl\r\n", "Q100615-P1713-cd17a0-c89f234d-0\tQ100615\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/P/ploetz_yvonne.html\"\tnormal\turl\r\n", "Q100617-P1713-2396a5-62789180-0\tQ100617\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/S/schwanitz_rolf.html\"\tnormal\turl\r\n", "Q100717883-P1713-bd827f-36a0ade3-0\tQ100717883\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/W/524570-524570\"\tnormal\turl\r\n", "Q100797-P1713-c9a2d4-f898748f-0\tQ100797\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/P/pronold_florian/522720\"\tnormal\turl\r\n", "Q100960-P1713-7a9695-4d24386e-0\tQ100960\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb14/bio/G/geigemi0.html\"\tnormal\turl\r\n", "Q100986-P1713-09ed67-8a983157-0\tQ100986\tP1713\t\"http://www.bundestag.de/bundestag/abgeordnete18/biografien/B/becker_dirk/258158\"\tnormal\turl\r\n", "Q100986-P1713-0c450a-871bc22b-0\tQ100986\tP1713\t\"http://www.bundestag.de/bundestag/abgeordnete18/biografien/B/becker_dirk.html\"\tnormal\turl\r\n", "Q101192-P1713-712026-5576cf80-0\tQ101192\tP1713\t\"http://www.bundestag.de/bundestag/abgeordnete18/biografien/B/bartels_hans_peter.html\"\tnormal\turl\r\n", "Q101192-P1713-c1d1cb-90bf9b39-0\tQ101192\tP1713\t\"http://www.bundestag.de/bundestag/abgeordnete18/biografien/B/bartels_hans_peter/258234\"\tnormal\turl\r\n", "Q101206-P1713-f2dc25-f3b5f511-0\tQ101206\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/S/schreiner_ottmar.html\"\tnormal\turl\r\n", "Q101296-P1713-5850b9-d4983cc9-0\tQ101296\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/M/merkel_petra.html\"\tnormal\turl\r\n", "Q101481413-P1713-e36b80-6e010c1d-0\tQ101481413\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/D/518958-518958\"\tnormal\turl\r\n", "Q101504-P1713-2b19ec-bab3dc39-0\tQ101504\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/W/willsch_klaus_peter/524612\"\tnormal\turl\r\n", "Q101533533-P1713-bf5149-3cb91260-0\tQ101533533\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/N/522272-522272\"\tnormal\turl\r\n", "Q101617-P1713-d046b6-7e1394d5-0\tQ101617\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/B/bluhm_heidrun/518490\"\tnormal\turl\r\n", "Q101632-P1713-0a7355-6fa52c85-0\tQ101632\tP1713\t\"http://webarchiv.bundestag.de/archive/2010/0427/bundestag/abgeordnete/bio/A/albacpe0.html\"\tnormal\turl\r\n", "Q1016467-P1713-ff16af-475eaf2e-0\tQ1016467\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/L/lischka_burkhard/521668\"\tnormal\turl\r\n", "Q1016541-P1713-c620a6-bf28fbf5-0\tQ1016541\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/M/mueller_soenksen_burkhardt.html\"\tnormal\turl\r\n", "Q101662-P1713-9e254f-1d37dd01-0\tQ101662\tP1713\t\"http://webarchiv.bundestag.de/archive/2013/1212/bundestag/abgeordnete17/biografien/H/hagemann_klaus.html\"\tnormal\turl\r\n", "Q101701-P1713-d2d742-b14a2f67-0\tQ101701\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb15/bio/G/goennta0.html\"\tnormal\turl\r\n", "Q101703-P1713-86bfef-179d0c06-0\tQ101703\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/G/grotelueschen_astrid/519912\"\tnormal\turl\r\n", "Q1019016-P1713-707a97-4f43e3ab-0\tQ1019016\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/B/bas_baerbel/518186\"\tnormal\turl\r\n", "Q1019023-P1713-4b05d8-54e704ae-0\tQ1019023\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb14/bio/G/grygiba0.html\"\tnormal\turl\r\n", "Q1019029-P1713-6f6eed-942d192f-0\tQ1019029\tP1713\t\"https://www.bundestag.de/abgeordnete/biografien/K/kofler_baerbel/521198\"\tnormal\turl\r\n", "Q1019050-P1713-3d5c18-83064a52-0\tQ1019050\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb14/bio/S/sothmba0.html\"\tnormal\turl\r\n", "Q101967-P1713-b19158-a5b76799-0\tQ101967\tP1713\t\"http://webarchiv.bundestag.de/archive/2010/0427/bundestag/abgeordnete/bio/B/bruenmo0.html\"\tnormal\turl\r\n", "Q101987-P1713-e8184f-e2226a1f-0\tQ101987\tP1713\t\"http://webarchiv.bundestag.de/archive/2007/0206/mdb/mdb15/bio/L/lucygch0.html\"\tnormal\turl\r\n", "Q4681882-P1713-d878eb-9fff460e-0\tQ4681882\tP1713\t\"https://heightnetworth.com/adele-givens-net-worth-2020/\"\tnormal\turl\r\n" ] } ], "source": [ "!cat ../../allConstraintsAnalysis/codependencyConstraint/Mand/claims.P1713.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 78, "id": "imposed-bibliography", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P7959655743376[../../allConstraintsAnalysis/codependencyCons...0.000573
P3931225064[../../allConstraintsAnalysis/codependencyCons...0.028444
P5051163[../../allConstraintsAnalysis/codependencyCons...63.000000
P9152836445[../../allConstraintsAnalysis/codependencyCons...0.001587
P4511050236[../../allConstraintsAnalysis/codependencyCons...0.003428
P19716739234[../../allConstraintsAnalysis/codependencyCons...0.000203
P1560323520[../../allConstraintsAnalysis/codependencyCons...0.006182
P2009101915[../../allConstraintsAnalysis/codependencyCons...0.014720
P17313639[../../allConstraintsAnalysis/codependencyCons...0.024793
P1196880706[../../allConstraintsAnalysis/codependencyCons...0.000068
P236516505[../../allConstraintsAnalysis/codependencyCons...0.003030
P26798875[../../allConstraintsAnalysis/codependencyCons...0.005637
P9445774[../../allConstraintsAnalysis/codependencyCons...0.006932
P1411217094[../../allConstraintsAnalysis/codependencyCons...0.000033
P180940063[../../allConstraintsAnalysis/codependencyCons...0.000749
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P7959 655743 376 [../../allConstraintsAnalysis/codependencyCons... \n", "P3931 2250 64 [../../allConstraintsAnalysis/codependencyCons... \n", "P5051 1 63 [../../allConstraintsAnalysis/codependencyCons... \n", "P915 28364 45 [../../allConstraintsAnalysis/codependencyCons... \n", "P451 10502 36 [../../allConstraintsAnalysis/codependencyCons... \n", "P197 167392 34 [../../allConstraintsAnalysis/codependencyCons... \n", "P1560 3235 20 [../../allConstraintsAnalysis/codependencyCons... \n", "P2009 1019 15 [../../allConstraintsAnalysis/codependencyCons... \n", "P1731 363 9 [../../allConstraintsAnalysis/codependencyCons... \n", "P1196 88070 6 [../../allConstraintsAnalysis/codependencyCons... \n", "P2365 1650 5 [../../allConstraintsAnalysis/codependencyCons... \n", "P2679 887 5 [../../allConstraintsAnalysis/codependencyCons... \n", "P944 577 4 [../../allConstraintsAnalysis/codependencyCons... \n", "P141 121709 4 [../../allConstraintsAnalysis/codependencyCons... \n", "P1809 4006 3 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P7959 0.000573 \n", "P3931 0.028444 \n", "P5051 63.000000 \n", "P915 0.001587 \n", "P451 0.003428 \n", "P197 0.000203 \n", "P1560 0.006182 \n", "P2009 0.014720 \n", "P1731 0.024793 \n", "P1196 0.000068 \n", "P2365 0.003030 \n", "P2679 0.005637 \n", "P944 0.006932 \n", "P141 0.000033 \n", "P1809 0.000749 " ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 79, "id": "emotional-crown", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 78.000000\n", "mean 0.812130\n", "std 7.132861\n", "min 0.000000\n", "25% 0.000000\n", "50% 0.000000\n", "75% 0.000558\n", "max 63.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 80, "id": "certain-freeze", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 3 - Violation Ratios')" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF3['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 3 - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 81, "id": "cooperative-ownership", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 3 - Violation Ratios <= 0.0005')" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF3[codepConstDF3['violation_ratio'] <= 0.0005].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 3 - Violation Ratios <= 0.0005\")" ] }, { "cell_type": "code", "execution_count": 82, "id": "studied-inclusion", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of properties whose violation ratio is greater than mean: 1/78\n" ] } ], "source": [ "print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF3['violation_ratio'] >= 0.922928)}/{len(codepConstDF3)}\")" ] }, { "cell_type": "markdown", "id": "protective-brazil", "metadata": {}, "source": [ "#### Version 4 - Normal" ] }, { "cell_type": "code", "execution_count": 83, "id": "laughing-pressing", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF4 = pd.DataFrame(codepConstViolations['Normal']).T" ] }, { "cell_type": "code", "execution_count": 84, "id": "loving-swift", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpaths
P101815628[../../allConstraintsAnalysis/codependencyCons...
P1540236379456[../../allConstraintsAnalysis/codependencyCons...
P128313830[../../allConstraintsAnalysis/codependencyCons...
P18964779322[../../allConstraintsAnalysis/codependencyCons...
P17128567942307[../../allConstraintsAnalysis/codependencyCons...
............
P291601[../../allConstraintsAnalysis/codependencyCons...
P187339461[../../allConstraintsAnalysis/codependencyCons...
P292326872738[../../allConstraintsAnalysis/codependencyCons...
P187916950[../../allConstraintsAnalysis/codependencyCons...
P2929551181[../../allConstraintsAnalysis/codependencyCons...
\n", "

418 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P1018 156 28 [../../allConstraintsAnalysis/codependencyCons...\n", "P1540 236379 456 [../../allConstraintsAnalysis/codependencyCons...\n", "P1283 1383 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P1896 4779 322 [../../allConstraintsAnalysis/codependencyCons...\n", "P171 2856794 2307 [../../allConstraintsAnalysis/codependencyCons...\n", "... ... ... ...\n", "P2916 0 1 [../../allConstraintsAnalysis/codependencyCons...\n", "P1873 394 61 [../../allConstraintsAnalysis/codependencyCons...\n", "P2923 2687 2738 [../../allConstraintsAnalysis/codependencyCons...\n", "P1879 1695 0 [../../allConstraintsAnalysis/codependencyCons...\n", "P2929 5511 81 [../../allConstraintsAnalysis/codependencyCons...\n", "\n", "[418 rows x 3 columns]" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4" ] }, { "cell_type": "code", "execution_count": 85, "id": "north-christian", "metadata": {}, "outputs": [], "source": [ "codepConstDF4['violation_ratio'] = codepConstDF4.apply(lambda p: p.incorrect / p.correct if p.correct != 0 else p.incorrect/100, axis=1)" ] }, { "cell_type": "code", "execution_count": 86, "id": "closing-causing", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P1111046327[../../allConstraintsAnalysis/codependencyCons...463.270000
P1995809985[../../allConstraintsAnalysis/codependencyCons...124.812500
P76813315143[../../allConstraintsAnalysis/codependencyCons...113.857143
P450141922682[../../allConstraintsAnalysis/codependencyCons...54.133652
P27154158[../../allConstraintsAnalysis/codependencyCons...39.500000
P2755955123578[../../allConstraintsAnalysis/codependencyCons...20.751973
P2376119[../../allConstraintsAnalysis/codependencyCons...19.000000
P39122973705[../../allConstraintsAnalysis/codependencyCons...12.474747
P272012134[../../allConstraintsAnalysis/codependencyCons...11.166667
P2248402041566[../../allConstraintsAnalysis/codependencyCons...10.339801
P2325407140611[../../allConstraintsAnalysis/codependencyCons...9.975682
P2243402536540[../../allConstraintsAnalysis/codependencyCons...9.078261
P2244402736527[../../allConstraintsAnalysis/codependencyCons...9.070524
P34485474302[../../allConstraintsAnalysis/codependencyCons...7.864717
P770765445[../../allConstraintsAnalysis/codependencyCons...6.846154
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1111 0 46327 [../../allConstraintsAnalysis/codependencyCons... \n", "P1995 80 9985 [../../allConstraintsAnalysis/codependencyCons... \n", "P768 133 15143 [../../allConstraintsAnalysis/codependencyCons... \n", "P4501 419 22682 [../../allConstraintsAnalysis/codependencyCons... \n", "P2715 4 158 [../../allConstraintsAnalysis/codependencyCons... \n", "P275 5955 123578 [../../allConstraintsAnalysis/codependencyCons... \n", "P2376 1 19 [../../allConstraintsAnalysis/codependencyCons... \n", "P3912 297 3705 [../../allConstraintsAnalysis/codependencyCons... \n", "P2720 12 134 [../../allConstraintsAnalysis/codependencyCons... \n", "P2248 4020 41566 [../../allConstraintsAnalysis/codependencyCons... \n", "P2325 4071 40611 [../../allConstraintsAnalysis/codependencyCons... \n", "P2243 4025 36540 [../../allConstraintsAnalysis/codependencyCons... \n", "P2244 4027 36527 [../../allConstraintsAnalysis/codependencyCons... \n", "P3448 547 4302 [../../allConstraintsAnalysis/codependencyCons... \n", "P7707 65 445 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P1111 463.270000 \n", "P1995 124.812500 \n", "P768 113.857143 \n", "P4501 54.133652 \n", "P2715 39.500000 \n", "P275 20.751973 \n", "P2376 19.000000 \n", "P3912 12.474747 \n", "P2720 11.166667 \n", "P2248 10.339801 \n", "P2325 9.975682 \n", "P2243 9.078261 \n", "P2244 9.070524 \n", "P3448 7.864717 \n", "P7707 6.846154 " ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 87, "id": "weighted-input", "metadata": {}, "outputs": [], "source": [ "# list(codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(5).paths)" ] }, { "cell_type": "code", "execution_count": 88, "id": "brief-effect", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P22142962988711699[../../allConstraintsAnalysis/codependencyCons...0.240196
P43331028893435483[../../allConstraintsAnalysis/codependencyCons...0.014035
P2755955123578[../../allConstraintsAnalysis/codependencyCons...20.751973
P2860174402886114713[../../allConstraintsAnalysis/codependencyCons...0.000658
P1435189387479479[../../allConstraintsAnalysis/codependencyCons...0.041966
P7084525354258[../../allConstraintsAnalysis/codependencyCons...1.198992
P19711752349903[../../allConstraintsAnalysis/codependencyCons...0.424623
P15983697846481[../../allConstraintsAnalysis/codependencyCons...1.256991
P1111046327[../../allConstraintsAnalysis/codependencyCons...463.270000
P2248402041566[../../allConstraintsAnalysis/codependencyCons...10.339801
P2325407140611[../../allConstraintsAnalysis/codependencyCons...9.975682
P856123929238026[../../allConstraintsAnalysis/codependencyCons...0.030684
P2243402536540[../../allConstraintsAnalysis/codependencyCons...9.078261
P2244402736527[../../allConstraintsAnalysis/codependencyCons...9.070524
P41335779333607[../../allConstraintsAnalysis/codependencyCons...0.093929
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis/codependencyCons... \n", "P433 31028893 435483 [../../allConstraintsAnalysis/codependencyCons... \n", "P275 5955 123578 [../../allConstraintsAnalysis/codependencyCons... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis/codependencyCons... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis/codependencyCons... \n", "P708 45253 54258 [../../allConstraintsAnalysis/codependencyCons... \n", "P197 117523 49903 [../../allConstraintsAnalysis/codependencyCons... \n", "P1598 36978 46481 [../../allConstraintsAnalysis/codependencyCons... \n", "P1111 0 46327 [../../allConstraintsAnalysis/codependencyCons... \n", "P2248 4020 41566 [../../allConstraintsAnalysis/codependencyCons... \n", "P2325 4071 40611 [../../allConstraintsAnalysis/codependencyCons... \n", "P856 1239292 38026 [../../allConstraintsAnalysis/codependencyCons... \n", "P2243 4025 36540 [../../allConstraintsAnalysis/codependencyCons... \n", "P2244 4027 36527 [../../allConstraintsAnalysis/codependencyCons... \n", "P413 357793 33607 [../../allConstraintsAnalysis/codependencyCons... \n", "\n", " violation_ratio \n", "P2214 0.240196 \n", "P433 0.014035 \n", "P275 20.751973 \n", "P2860 0.000658 \n", "P1435 0.041966 \n", "P708 1.198992 \n", "P197 0.424623 \n", "P1598 1.256991 \n", "P1111 463.270000 \n", "P2248 10.339801 \n", "P2325 9.975682 \n", "P856 0.030684 \n", "P2243 9.078261 \n", "P2244 9.070524 \n", "P413 0.093929 " ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 89, "id": "wireless-passenger", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 418.000000\n", "mean 2.448558\n", "std 24.334208\n", "min 0.000000\n", "25% 0.001391\n", "50% 0.022781\n", "75% 0.220654\n", "max 463.270000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 90, "id": "civilian-arnold", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 4 - Violation Ratios')" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF4['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 4 - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 91, "id": "threaded-cooler", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 4 - Violation Ratios <= 0.5')" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZwAAAEICAYAAABrtkJsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgHUlEQVR4nO3deZgdVZ3/8fcHwr4FSGQgITQigoCoGBbFBUUkgCTMD1AQhSAQURhx9JFNBtxwUEdZRlQiMCQuLKIsCqgIRERZDIrsDgEDSSAmhLAJkgl8f3+c01C59O2u7r5Vt/vm83qe+3Qt51Z9a/3WqTpdVxGBmZlZ1VZodwBmZrZ8cMIxM7NaOOGYmVktnHDMzKwWTjhmZlYLJxwzM6uFE06FJHVJCkkj2h3LcCfpIEm/bnccrdYpyyXpe5L+o2TZkPS6Ac5n2KwvSc9Kem274xhKakk4kj4saWbeAI9JukbSOwY4rQskLZH0TP7cLek/Ja3T6rg7kaS1JZ0h6ZG8PR7M/aMqnOcFkr4ymGlExI8i4v0l5zdZ0k0DnZekAyTNlqSG4SMkLZD0gYFOu1F/lmugJJ2cT/LvG+D3j5d0Yw/DR+VjcZuIODIivjz4aJeZ/qsu2KpaX5J2kfRSPiaekfRXSYf24/szJB1eHBYRa0bEQ62OtUqSdpV0v6TnJN0gaZNeys6W9HxeZ8+WuRCoPOFI+gxwBvBVYANgHPAdYNIgJvv1iFgLGA0cCuwE/F7SGoOLtrNJWhm4DtgamACsDbwNWATs0Ma4hloN8HJgJPDuhuETgAB+WXZCStp2J0HSZsD+wGODmMwPgbdL2rRh+AHAXRFx9yCmPZQ8GhFrko6Lfwe+L2mLNsdUSt7PRg9yGqOAnwH/AawHzAQu7uNre+fEumapC4GIqOwDrAM8C+zfS5lVSAnp0fw5A1ill/IXAF9pGLYW6YA6ujDsY8B9wGLgV8AmhXEBfAp4CHgc+AawQj++eyTwAPAkcDagPG5F4L/yNB8CjsrlRxTWx3k51nnAV4AV87jJwE35+4uBvwF7FOa7HvA/eR0tBi7Pw+/OG7273Ep5/m/pYd0dDvwdWLOX9fsGYEZetnuAiQ3r/mzgKuAZ4FZgszxOwOnAAuBp4C5gG2AK8H/Akrwv/DyXnw0cB9wJvACMAI4HHszTvhf418K8JwM39bUdcvz/BF7M83tygPvuVOD8hmGXAKfn7p2AP+R5/wXYpVBuBnAq8HvgeeB1Of6H8rL9DTioyXK9Hfgj8FT++/aG6X45T/cZ4NfAqD6W45fAnnl9v28Qx/KvgZMbht0GHNPTcQkcAcwCngCuBDZq2Havy917AX/O+8wc4AuFco/kss/mz9uqWl/ALsDchmELyOcuYF3gF8BC0vH3C2BsHndq3t/+meP8dg/LuQ4wPX//YeAk8jkn7x+/zcvwOHBxP7bLa4Ev5u173EC3b57WFOAPhf418v67ZZPy/d6nBhxcyQWYACwln3CblPkScAvwGlKN5Q/Al3spv8yOXRg+vXtDkWpPs0gnnxF54xZXZAA3kE7i44D/BQ7vx3d/QboCHpd3oAl53JHA/cDGedo3sGzCuQw4J2/I15AO2I/ncZNJJ+YjSInrE6Tk0p3MriJdbaxLSirvzsOPLe6gOf67mqy7i4BpvazblfKynwisDLyXdKBuUVj33bWhEcCPgIvyuN2B2/N66T7xb9hsm+Wd9Y68rlbLw/YHNiLVvD8E/KMwjcm8OuE02w7LlB3gvrsz6STYHds6pIPvzcCYvB72zLHulvtH57IzSCfLrfN6WidPq3s9bghs3Rhr3mcWAx/N3zsw969fmO6DwOuB1XL/ab0sw/7AFQM9OTRM6yDggUL/FqSLiO5lfnkb5/3mcWA70gXlfwM3Nmy77hPxLsAb83rclnRBtE8e10Xh+KlyfVFIODmWicBL5As3YH1gX2B10gXuT8gXfYV5Hd4wzeJyTgeuyN/tIp1zDsvjLgQ+n+e7KvCOPrbF6sDBpPPLIuC7wI4NZZ7s5XN8k+meCXy3YdjdwL5Nys/O22shKZm/qc/9aDAHZcmddH4fZR4E9iz07w7M7qX8BfSccE4Drs3d13RvzMIO9By5ppJ3hAmF8Z8EruvHd99RGH9J9wYErgeOLIx7fy4/gnQ78QXyCSyPPxC4oXAgzWrYqQL4F9IJ6iVg3R6WeyNSUlg7918KHNtk3V1L7yeodwLzWba2dyH5qjOv+3ML4/YE7s/d7yUdRDsVv99sm+Wd9WN97Bt3AJMK66cx4TTbDsuUHcT++wDw4dx9BPCX3H0c8IOGsr8CDsndM4AvFcatQTrQ9y1u/8ZYSSfO2xrG3wxMLkz3pIb99pdNYl8rx99VWN+DSTirk5Lm23P/qeRk1riNSbX4rxfGrUm6mOqO5eUTcQ/zOYNXapFd9J5wWrm+diEdY0+SjtMXgU/3sj7eDCwu9M+gScIhXUAuAbYqjPs4MCN3TyfVqMeW2A7nkmqNVwMfpJe7QQPYxufRcH4g1Q4nNym/MymRrw6cQDp3jOxtHlXfW14EjOrjHv1GpCpmt4fzMCSdWHgg9b0+5jWGtCEANgHOlPSkpCfzcOUy3eb0NM+S351f6H6OdEB1L0vjdLttQqpBPFaY9jmkms6rphsRz+XONUm1gCciYnHjQkfEo6SdYl9JI4E9SDWPniwiJa9mNgLmRMRLDcvQ57JHxPXAt0m3thZImipp7V7mBcuuKyQdLOmOwvrZBuitMUOz7dArSe8s7Ff39FJ0OulKEtLJbXru3gTYvzvOHOs7WHbdvrxsEfEPUo3tSNL2v0rSlj3Mr/FYgJLrvwdfICXF2U3Gvyy3/OpeH9f0VCbvjz8BDs6NKQ7ilfXRaJnliIhnSfvemMaCknbMD6cXSnqKtI7KNmBp5fqC9AxnJOkZzlmki6juOFeXdI6khyU9DdwIjJS0Yok4R5GO/cbzXHecx5LOMbdJukfSx3qZ1jak5HUHcGdEvFBi/mU9S1r2orVJF7SvEhG/j4jnI+K5iPhPUrJ+Z28zqDrh3Ey6WtinlzKPkg7gbuPyMCLiq/HKA6kjm01A0prA+4Df5UFzSLeqRhY+q0XEHwpf27ineZb8bjOP9TDdbnNI62JUYbprR8TWJaY7B1gvJ5SeTAM+QrqFcnNEzGtS7jfA7r00rngU2LjhIfc40vOmPkXEWRHxVmAr0m2Mz3WPavaV7o7cGub7wNGkWyIjSdV59fzV3kPpI87fFfar3tb/D4BdJb2NVHPrTuRzSCfz4j6yRkSc1iyGiPhVROxGSkr3k5a1UeOxAP1Y/w12BT4lab6k+aT98hJJxzUWjNTyq3t97NHLNKeRrqp3I9Wgft6k3DLLkfe39Zssx49Jz3g2joh1gO/xyjbvdTs2zicb6Pp6WT6JHwe8UdI+efBnSbcRd4yItYF35eFlYn2cVMNrPM/Ny/ObHxFHRMRGpJrPd9Sk2XhE7AS8h3TX5HpJt0k6WtL6xXKFC4iePic2ifMe4E2FaawBbJaHlxH0cbxWmnAi4ingZOBsSfvkq4SVJO0h6eu52IXASZJG51YSJ5NaxfRJ0iqS3kpqVbSY9FAd0k57gqStc7l1JO3f8PXPSVpX0sbAMbzSGqPMd5u5hHSQj5W0LukhePe6eIx0n/ObSk2TV5C0maR39zXR/N1rSDviunkdvqtQ5HLS/fJjaH7VCekEOgf4qaQtcwzr55rknqRGAM8Bx+Z57ALsTXr20ytJ2+er1ZVIz17+SbpFAek+b1//j7AGaYddmKd3KOlqbiD+DozNrfIGLNcObiLto9dGRPfV8g+BvSXtLmlFSasqNasd29N0JG0gaVI+gF8gXUm+1EPRq4HXK/0bwQhJHyIl718MIPxdSevvzfnzKOlkdvYAptXtd6Sr2KmkZ3dLmpS7EDhU0pslrUJqoXprk9rWWqTa+z8l7QB8uDBuIWk9Ndt3Wrm+lpGX7Zuk81F3nM8DT0paDzil4StN9/GIeJF0bjhV0lr54uoz5POcpP0L+85i0nHQ0/7RPb37IuJY0kXEF0mtKWdLOqxQZs1ePl9tMunLgG0k7Stp1bzsd0bE/Y0FJY2TtLOklfP+/zlSTe73zeKGGppFR8Q3SSv3JNIONId0FXt5LvIVUvO7O0ktm/6Uh/XmWEnPkKrp00kPq9+eb10QEZcBXwMuytXfu0m3moquyN+7g/RA/rx+fLeZ75Pu5f8lL8fPGsYfTHoYfy9px7qU3m9xFX2UdJV0P6n1zKe7R0TE88BPgU17mCeFci+QaoL3k57nPE1quDCKdEJYQkowe5Cuyr4DHNzTDteDtUnLv5h0u2ARqfUfpHW7Vb79dHmT2O4lHeA3kw7eN9LHztuL60lXZfMlPT7AaXSbRroyfTmRR8QcUuOME3lln/4czY+nFUjHwKOkW7TvJjUKWUZELAI+QLqaXkS61fKBiOj3MkTEonzlPD8nyhdJzxye7e+0CtMM0npYZn30UO43pKa1PyXV+jcjNaHuySeBL+Xj+WTSibl7Os+RW/vlfWenxmWkReurifOBcZL2Jj1bWo10XNzCq5vGnwnsJ2mxpLN6mNa/kS7EHiJdxPw4Tx9ge+BWSc+SanvHRIn/34mIFyPiqojYn7RNbu7n8jVObyHpOeOppON4RwrbTemfe7sfbaxFaqywmFRTm0BqVbuot3l0t4BarkgKYPOImNXuWFpF0snA6yPiI+2OxcysJ0PtH+5sAHIV/zBSLcjMbEjyu9SGOUlHkG7pXBMRr3r9iJnZULFc3lIzM7P6uYZjZma1GNbPcEaNGhVdXV3tDsPMbFi5/fbbH4+IQb3scyCGdcLp6upi5syZ7Q7DzGxYkdT4hoZa+JaamZnVwgnHzMxq4YRjZma1cMIxM7NaOOGYmVktnHDMzKwWlSUcSedLWiDp7h7GfVZS5J8jQMlZkmZJulPSdlXFZWZm7VFlDecC0iurl5F/f+b9pN9877YHsHn+TCG99trMzDpIZQknv0jyiR5GnU763YriS9wmAdMjuYX0061lfyfGzMyGgVrfNCBpEjAvIv4iLfNLpGNY9vft5+Zhj/UwjSmkWhDjxo1rHF1a1/FXvdw9+7S9BjwdMzMrp7ZGA5JWJ/1C4sl9le1NREyNiPERMX706NpfBWRmZgNUZw1nM9JPIHfXbsYCf8q/Yz6P9Pvc3cbmYWZm1iFqq+FExF0R8ZqI6IqILtJts+3y761fCRycW6vtBDwVEa+6nWZmZsNXlc2iLwRuBraQNFfSYb0Uvxp4CJgFfB/4ZFVxmZlZe1R2Sy0iDuxjfFehO4CjqorFzMzaz28aMDOzWjjhmJlZLZxwzMysFk44ZmZWCyccMzOrhROOmZnVwgnHzMxq4YRjZma1cMIxM7NaOOGYmVktnHDMzKwWTjhmZlYLJxwzM6uFE46ZmdXCCcfMzGrhhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVovKEo6k8yUtkHR3Ydg3JN0v6U5Jl0kaWRh3gqRZkv4qafeq4jIzs/aosoZzATChYdi1wDYRsS3wv8AJAJK2Ag4Ats7f+Y6kFSuMzczMalZZwomIG4EnGob9OiKW5t5bgLG5exJwUUS8EBF/A2YBO1QVm5mZ1a+dz3A+BlyTu8cAcwrj5uZhryJpiqSZkmYuXLiw4hDNzKxV2pJwJH0eWAr8qL/fjYipETE+IsaPHj269cGZmVklRtQ9Q0mTgQ8Au0ZE5MHzgI0LxcbmYWZm1iFqreFImgAcC0yMiOcKo64EDpC0iqRNgc2B2+qMzczMqlVZDUfShcAuwChJc4FTSK3SVgGulQRwS0QcGRH3SLoEuJd0q+2oiHixqtjMzKx+lSWciDiwh8Hn9VL+VODUquIxM7P28psGzMysFk44ZmZWCyccMzOrhROOmZnVwgnHzMxq4YRjZma1cMIxM7NaOOGYmVktnHDMzKwWTjhmZlYLJxwzM6uFE46ZmdXCCcfMzGrhhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVgsnHDMzq4UTjpmZ1cIJx8zMalFZwpF0vqQFku4uDFtP0rWSHsh/183DJeksSbMk3Slpu6riMjOz9qiyhnMBMKFh2PHAdRGxOXBd7gfYA9g8f6YA360wLjMza4PKEk5E3Ag80TB4EjAtd08D9ikMnx7JLcBISRtWFZuZmdWv7mc4G0TEY7l7PrBB7h4DzCmUm5uHvYqkKZJmSpq5cOHC6iI1M7OWalujgYgIIAbwvakRMT4ixo8ePbqCyMzMrAp1J5y/d98qy38X5OHzgI0L5cbmYWZm1iHqTjhXAofk7kOAKwrDD86t1XYCnircejMzsw4woqoJS7oQ2AUYJWkucApwGnCJpMOAh4EP5uJXA3sCs4DngEOrisvMzNqjsoQTEQc2GbVrD2UDOKqqWMzMrP38pgEzM6uFE46ZmdXCCcfMzGrhhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVgsnHDMzq4UTjpmZ1aJUwpH0xqoDMTOzzla2hvMdSbdJ+qSkdSqNyMzMOlKphBMR7wQOIv1mze2Sfixpt0ojMzOzjlL6GU5EPACcBBwHvBs4S9L9kv5fVcGZmVnnKPsMZ1tJpwP3Ae8F9o6IN+Tu0yuMz8zMOkTZ38P5b+Bc4MSIeL57YEQ8KumkSiIzM7OOUjbh7AU8HxEvAkhaAVg1Ip6LiB9UFp2ZmXWMss9wfgOsVuhfPQ8zMzMrpWzCWTUinu3uyd2rVxOSmZl1orIJ5x+StuvukfRW4PleypuZmS2j7DOcTwM/kfQoIOBfgA8NdKaS/h04HAjgLuBQYEPgImB94HbgoxGxZKDzMDOzoaXsP37+EdgS+ARwJPCGiLh9IDOUNAb4FDA+IrYBVgQOAL4GnB4RrwMWA4cNZPpmZjY09eflndsD2wLbAQdKOngQ8x0BrCZpBOlZ0GOk/+m5NI+fBuwziOmbmdkQU+qWmqQfAJsBdwAv5sEBTO/vDCNinqT/Ah4hPQf6NekW2pMRsTQXmwuMaRLLFGAKwLhx4/o7ezMza5Oyz3DGA1tFRAx2hpLWBSYBmwJPAj8BJpT9fkRMBaYCjB8/ftDxmJlZPcreUrub1FCgFd4H/C0iFkbE/wE/A3YGRuZbbABjgXktmp+ZmQ0BZWs4o4B7Jd0GvNA9MCImDmCejwA7SVqddEttV2AmcAOwH6ml2iHAFQOYtpmZDVFlE84XWjXDiLhV0qXAn4ClwJ9Jt8iuAi6S9JU87LxWzdPMzNqvVMKJiN9K2gTYPCJ+k2snKw50phFxCnBKw+CHgB0GOk0zMxvayv48wRGkJsvn5EFjgMsrisnMzDpQ2UYDR5Ee7D8NL/8Y22uqCsrMzDpP2YTzQvE1M7k1mZskm5lZaWUTzm8lnUh6O8BupP+d+Xl1YZmZWacpm3COBxaSXrT5ceBqwL/0aWZmpZVtpfYS8P38MTMz67ey71L7Gz08s4mI17Y8IjMz60j9eZdat1WB/YH1Wh+OmZl1qrK/h7Oo8JkXEWcAe1UbmpmZdZKyt9S2K/SuQKrxlK0dmZmZlU4a3yx0LwVmAx9seTRmZtaxyrZSe0/VgZiZWWcre0vtM72Nj4hvtSYcMzPrVP1ppbY9cGXu3xu4DXigiqDMzKzzlE04Y4HtIuIZAElfAK6KiI9UFZiZmXWWsq+22QBYUuhfkoeZmZmVUraGMx24TdJluX8fYFolEZmZWUcq20rtVEnXAO/Mgw6NiD9XF5aZmXWasrfUAFYHno6IM4G5kjatKCYzM+tAZX9i+hTgOOCEPGgl4IdVBWVmZp2nbA3nX4GJwD8AIuJRYK2qgjIzs85TNuEsiYgg/0SBpDUGM1NJIyVdKul+SfdJepuk9SRdK+mB/HfdwczDzMyGlrIJ5xJJ5wAjJR0B/IbB/RjbmcAvI2JL4E3AfaRfFb0uIjYHrsv9ZmbWIfpspSZJwMXAlsDTwBbAyRFx7UBmKGkd4F3AZICIWAIskTQJ2CUXmwbMID03MjOzDtBnwomIkHR1RLwRGFCSabApsBD4H0lvAm4HjgE2iIjHcpn5NPnHUklTgCkA48aNa0E4ZmZWh7K31P4kafsWzXMEsB3w3Yh4C6khwjK3z4rPixpFxNSIGB8R40ePHt2ikMzMrGplE86OwC2SHpR0p6S7JN05wHnOBeZGxK25/1JSAvq7pA0B8t8FA5y+mZkNQb3eUpM0LiIeAXZv1QwjYr6kOZK2iIi/ArsC9+bPIcBp+e8VrZqnmZm1X1/PcC4nvSX6YUk/jYh9WzTffwN+JGll4CHgUFJt6xJJhwEP418UNTPrKH0lHBW6X9uqmUbEHaTf2Gm0a6vmYWZmQ0tfz3CiSbeZmVm/9FXDeZOkp0k1ndVyN7k/ImLtSqMzM7OO0WvCiYgV6wrEzMw6W39+nsDMzGzAnHDMzKwWTjhmZlYLJxwzM6uFE46ZmdXCCcfMzGrhhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVgsnHDMzq4UTjpmZ1cIJx8zMauGEY2ZmtXDCMTOzWjjhmJlZLdqWcCStKOnPkn6R+zeVdKukWZIulrRyu2IzM7PWa2cN5xjgvkL/14DTI+J1wGLgsLZEZWZmlWhLwpE0FtgLODf3C3gvcGkuMg3Ypx2xmZlZNdpVwzkDOBZ4KfevDzwZEUtz/1xgTBviMjOzitSecCR9AFgQEbcP8PtTJM2UNHPhwoUtjs7MzKrSjhrOzsBESbOBi0i30s4ERkoakcuMBeb19OWImBoR4yNi/OjRo+uI18zMWqD2hBMRJ0TE2IjoAg4Aro+Ig4AbgP1ysUOAK+qOzczMqjOU/g/nOOAzkmaRnumc1+Z4zMyshUb0XaQ6ETEDmJG7HwJ2aGc8ZmZWnaFUwzEzsw7mhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVgsnHDMzq4UTjpmZ1cIJx8zMauGEY2ZmtXDCMTOzWjjhmJlZLdr68s6houv4q5bpn33aXm2KxMysc7mGY2ZmtXDCMTOzWjjhmJlZLZxwzMysFk44ZmZWCyccMzOrhROOmZnVwgnHzMxqUXvCkbSxpBsk3SvpHknH5OHrSbpW0gP577p1x2ZmZtVpRw1nKfDZiNgK2Ak4StJWwPHAdRGxOXBd7jczsw5R+6ttIuIx4LHc/Yyk+4AxwCRgl1xsGjADOK7u+GDZV934NTdmZq3R1mc4krqAtwC3AhvkZAQwH9igyXemSJopaebChQvrCdTMzAatbQlH0prAT4FPR8TTxXEREUD09L2ImBoR4yNi/OjRo2uI1MzMWqEtCUfSSqRk86OI+Fke/HdJG+bxGwIL2hGbmZlVox2t1AScB9wXEd8qjLoSOCR3HwJcUXdsZmZWnXb8Hs7OwEeBuyTdkYedCJwGXCLpMOBh4INtiM3MzCrSjlZqNwFqMnrXOmMxM7P6+Bc/++Am0mZmreFX25iZWS2ccMzMrBZOOGZmVgsnHDMzq4UbDVTIDQ7MzF7hGo6ZmdXCCcfMzGrhhGNmZrVwwjEzs1o44ZiZWS2ccMzMrBZOOGZmVgv/H04/NPu/Gv+/jZlZ31zDMTOzWriGM0DFWk2Z4WZmyzvXcMzMrBZOOGZmVgvfUutwzW7xNWvc0FsDiDobR7ghhlnnccKpyWBauPX35FvmOVJ/51uH5f35l5OsdTrfUjMzs1oMuRqOpAnAmcCKwLkRcVqbQ2q5/tZAypQZrlfEg1nOwSy/bzVWr12xltm2rdp3qlqu4bSd+2NIJRxJKwJnA7sBc4E/SroyIu5tb2T1GEwiGsztqIF8dzAn7MEYzPL393ZkHSeTVk1nMLdam52Im5Xp7/TLKnNh0SymoXA71omob0PtltoOwKyIeCgilgAXAZPaHJOZmbWAIqLdMbxM0n7AhIg4PPd/FNgxIo4ulJkCTMm9WwB/HeDsRgGPDyLc4cjLvHzwMi8fBrPMm0TE6FYGU8aQuqVWRkRMBaYOdjqSZkbE+BaENGx4mZcPXublw3Bc5qF2S20esHGhf2weZmZmw9xQSzh/BDaXtKmklYEDgCvbHJOZmbXAkLqlFhFLJR0N/IrULPr8iLinotkN+rbcMORlXj54mZcPw26Zh1SjATMz61xD7ZaamZl1KCccMzOrRccnHEkTJP1V0ixJx/cwfhVJF+fxt0rqakOYLVVimd8l6U+Slub/fRr2SizzZyTdK+lOSddJ2qQdcbZSiWU+UtJdku6QdJOkrdoRZyv1tcyFcvtKCknDqtlwoxLbeLKkhXkb3yHp8HbEWVpEdOyH1PDgQeC1wMrAX4CtGsp8Evhe7j4AuLjdcdewzF3AtsB0YL92x1zTMr8HWD13f2I52c5rF7onAr9sd9xVL3MutxZwI3ALML7dcVe8jScD3253rGU/nV7DKfOqnEnAtNx9KbCrJNUYY6v1ucwRMTsi7gReakeAFSizzDdExHO59xbS/3gNZ2WW+elC7xrAcG8hVPbVV18Gvgb8s87gKtBxr/rq9IQzBphT6J+bh/VYJiKWAk8B69cSXTXKLHOn6e8yHwZcU2lE1Su1zJKOkvQg8HXgUzXFVpU+l1nSdsDGEdH+t3kOXtn9et98q/hSSRv3MH7I6PSEY7YMSR8BxgPfaHcsdYiIsyNiM+A44KR2x1MlSSsA3wI+2+5YavRzoCsitgWu5ZW7NUNSpyecMq/KebmMpBHAOsCiWqKrxvL4eqBSyyzpfcDngYkR8UJNsVWlv9v5ImCfKgOqQV/LvBawDTBD0mxgJ+DKYdxwoM9tHBGLCvvyucBba4ptQDo94ZR5Vc6VwCG5ez/g+shP44ap5fH1QH0us6S3AOeQks2CNsTYamWWefNC717AAzXGV4VelzkinoqIURHRFRFdpGd1EyNiZnvCHbQy23jDQu9E4L4a4+u3IfVqm1aLJq/KkfQlYGZEXAmcB/xA0izgCdJGHbbKLLOk7YHLgHWBvSV9MSK2bmPYg1JyO38DWBP4SW4T8khETGxb0INUcpmPzrW6/wMW88qF1bBUcpk7Rsnl/ZSkicBS0vlrctsCLsGvtjEzs1p0+i01MzMbIpxwzMysFk44ZmZWCyccMzOrhROOmZnVwgnHzMxq4YRjZma1+P+EyHU0f8Km7wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "codepConstDF4[codepConstDF4['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 4 - Violation Ratios <= 0.5\")" ] }, { "cell_type": "code", "execution_count": 92, "id": "olympic-charlotte", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No. of properties whose violation ratio is greater than mean: 25/418\n" ] } ], "source": [ "print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF4['violation_ratio'] >= 2.414703)}/{len(codepConstDF4)}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "needed-multimedia", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "published-affiliate", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": null, "id": "aggregate-conservative", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "from tqdm.notebook import tqdm\n", "\n", "codepConstViolations = {}\n", "\n", "codepConstViolations = {}\n", "codepConstPropList = set()\n", "\n", "def extractTimes(filename):\n", " times = []\n", " with open(filename) as f:\n", " for line in f:\n", " if \"real\" in line:\n", " line = line.strip()\n", " time1 = line.split(\"\\t\")[1]\n", " mins, sec = time1.split(\"m\")\n", " mins = int(mins)\n", " sec = float(sec[:-1])\n", " times.append(60 * mins + sec)\n", " return times\n", "\n", "# codepConstViolationsSummary = {}\n", "times = []\n", "timesVersion = {\"MSN\": [], \"MN\": [], \"M\": [], \"N\": [], \"S\": []}\n", "filePath = '/data/wd-correctness/propertiesSplit/checkViolations/exec_logs/'\n", "for filename in tqdm(os.listdir(filePath)):\n", " if filename.startswith(\"timeLog_codepConst_\"):\n", " ver = filename.split('_')[2]\n", " tempTimes = extractTimes(filePath + filename)\n", " times += tempTimes\n", " timesVersion[ver] += tempTimes\n", "print(pd.Series(times).describe())" ] }, { "cell_type": "code", "execution_count": null, "id": "hearing-treasury", "metadata": {}, "outputs": [], "source": [ "print(pd.Series(timesVersion['MSN']).describe())" ] }, { "cell_type": "code", "execution_count": null, "id": "animal-vocabulary", "metadata": {}, "outputs": [], "source": [ "print(pd.Series(timesVersion['MN']).describe())" ] }, { "cell_type": "code", "execution_count": null, "id": "gentle-accessory", "metadata": {}, "outputs": [], "source": [ "print(pd.Series(timesVersion['M']).describe())" ] }, { "cell_type": "code", "execution_count": null, "id": "fresh-namibia", "metadata": {}, "outputs": [], "source": [ "print(pd.Series(timesVersion['N']).describe())" ] }, { "cell_type": "markdown", "id": "industrial-parcel", "metadata": {}, "source": [ "## Symmetric Constraint (Q21510862)\n", "\n", "This constraint says, if node1 has a property with this constraint, then both `(node1)-[prop]->(node2)` and `(node2)-[prop]->(node1)` must be present with few exceptions" ] }, { "cell_type": "markdown", "id": "silent-fundamentals", "metadata": {}, "source": [ "### Constraints File" ] }, { "cell_type": "code", "execution_count": 1, "id": "known-wednesday", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-04-01 11:07:06 query]: SQL Translation:\r\n", "---------------------------------------------\r\n", " SELECT *\r\n", " FROM graph_1 AS graph_1_c1\r\n", " WHERE graph_1_c1.\"label\"=?\r\n", " AND graph_1_c1.\"node2\"=?\r\n", " PARAS: ['P2302', 'Q21510862']\r\n", "---------------------------------------------\r\n" ] } ], "source": [ "!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n", " ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n", " --match \"p: (nodeProp1)-[nodePropEdge:P2302]->(:Q21510862)\" \\\n", " -o ../../constraintsOP/symmetricConstraint/claims.constraints_list.tsv \\\n", " --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db" ] }, { "cell_type": "code", "execution_count": 2, "id": "legal-diamond", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "qualiDF = pd.read_csv(\"../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz\",sep='\\t')\n", "constDF = pd.read_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_list.tsv\",sep='\\t')" ] }, { "cell_type": "code", "execution_count": 3, "id": "exceptional-morris", "metadata": {}, "outputs": [], "source": [ "constDF2 = constDF.set_index('id').join(qualiDF.set_index('node1'),rsuffix='_qualifier').drop(columns=['id', 'node2;wikidatatype_qualifier', 'rank', 'node2', 'label', 'node2;wikidatatype']).rename(columns={'label_qualifier':'label', 'node2_qualifier': 'node2'})\n", "constDF2 = constDF2.reset_index()\n", "constDF2 = constDF2.rename(columns={'index':'id'})\n", "constDF2['label'] = constDF2.label.fillna(\"P2316\")\n", "constDF2['node2'] = constDF2.node2.fillna(\"Normal\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "burning-involvement", "metadata": {}, "outputs": [], "source": [ "constDF2.to_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)" ] }, { "cell_type": "code", "execution_count": 5, "id": "naval-identification", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import math\n", "dfItemRequires = pd.read_csv('../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv',sep='\\t')" ] }, { "cell_type": "code", "execution_count": 6, "id": "considered-madison", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 7, "id": "alone-cattle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2316', 'P2303'], dtype=object)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].unique()" ] }, { "cell_type": "code", "execution_count": 8, "id": "mighty-ordinary", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "P2316 42\n", "P2303 3\n", "Name: label, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].value_counts()" ] }, { "cell_type": "code", "execution_count": 9, "id": "sensitive-alliance", "metadata": {}, "outputs": [], "source": [ "#Reference: https://stackoverflow.com/a/17298454\n", "# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n", "dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')" ] }, { "cell_type": "code", "execution_count": 10, "id": "tender-valley", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2316
node1id
P1322P1322-P2302-Q21510862-85dea891-0NaN[Normal]
P1327P1327-P2302-Q21510862-a3c3a094-0NaN[Normal]
P1382P1382-P2302-Q21510862-f6bcfecf-0NaN[Normal]
P1560P1560-P2302-Q21510862-fabecaeb-0NaN[Q21502408]
P1639P1639-P2302-Q21510862-384edcd4-0NaN[Q21502408]
\n", "
" ], "text/plain": [ "label P2303 P2316\n", "node1 id \n", "P1322 P1322-P2302-Q21510862-85dea891-0 NaN [Normal]\n", "P1327 P1327-P2302-Q21510862-a3c3a094-0 NaN [Normal]\n", "P1382 P1382-P2302-Q21510862-f6bcfecf-0 NaN [Normal]\n", "P1560 P1560-P2302-Q21510862-fabecaeb-0 NaN [Q21502408]\n", "P1639 P1639-P2302-Q21510862-384edcd4-0 NaN [Q21502408]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "code", "execution_count": 11, "id": "cellular-canal", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.droplevel(1)" ] }, { "cell_type": "code", "execution_count": 12, "id": "desperate-poster", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2316
node1
P1322NaN[Normal]
P1327NaN[Normal]
P1382NaN[Normal]
P1560NaN[Q21502408]
P1639NaN[Q21502408]
\n", "
" ], "text/plain": [ "label P2303 P2316\n", "node1 \n", "P1322 NaN [Normal]\n", "P1327 NaN [Normal]\n", "P1382 NaN [Normal]\n", "P1560 NaN [Q21502408]\n", "P1639 NaN [Q21502408]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "markdown", "id": "primary-netherlands", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 14, "id": "pointed-haven", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "354610f2497449c79eb9bec3e2c76294", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from tqdm.notebook import tqdm\n", "import os.path\n", "import os\n", "\n", "cnt = 0\n", "fCnt = 0\n", "\n", "folderName = 'symmetricConstraint'\n", "shellFileSuffix = 'symmConst_Validator_'\n", "graph_cache_prefix = 'symm_03'\n", "\n", "for row in tqdm(dfItemRequires.iterrows()):\n", "# try:\n", " prop = row[0]\n", " constraint = row[1]\n", " mandatory = []\n", " suggestion = []\n", " normal = []\n", " prop = str(prop)\n", " \n", " if type(constraint['P2316']) == list:\n", " if constraint['P2316'][0] == 'Q21502408':\n", " sfname = 'mandatory'\n", " elif constraint['P2316'][0] == 'Q62026391':\n", " sfname = 'suggestion'\n", " elif constraint['P2316'][0] == 'Normal':\n", " sfname = 'normal'\n", " else:\n", " sfname = 'normal'\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", " continue\n", " \n", " command = \"{ time ( kgtk --debug query -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " ../../propertiesSplit/claims.\"+ prop +\".copy2.tsv \\\n", " --match 'tsv: (node1)-[nodeProp]->(node2), copy2: (node2)-[]->(node1)' \"\n", " \n", " os.system(\"cp ../../propertiesSplit/claims.\"+ prop +\".tsv ../../propertiesSplit/claims.\"+ prop +\".copy2.tsv\")\n", " \n", " if cnt % 20 == 0:\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " command\n", " if type(constraint['P2303']) != list: # Exceptions not present\n", " commandRest = \" --return 'nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", "# print(command)\n", " fOP.write(command)\n", " else:\n", " excptns = constraint['P2303']\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)" ] }, { "cell_type": "code", "execution_count": 15, "id": "polar-canada", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "38" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 16, "id": "virtual-disney", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,3):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/symmConst_Validator_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "coral-cheese", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 2, "id": "governmental-backup", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d19bfcb280e649a996395694bd18bb6c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7f12ce1ceba5485d96a83c3fe719d485", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/13 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P2152751[../../allConstraintsAnalysis/symmetricConstra...0.013158
P1639205920[../../allConstraintsAnalysis/symmetricConstra...0.009620
P1560323913[../../allConstraintsAnalysis/symmetricConstra...0.003998
P61852800[../../allConstraintsAnalysis/symmetricConstra...0.000000
P336417860[../../allConstraintsAnalysis/symmetricConstra...0.000000
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2152 75 1 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1639 2059 20 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1560 3239 13 [../../allConstraintsAnalysis/symmetricConstra... \n", "P6185 280 0 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3364 1786 0 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P2152 0.013158 \n", "P1639 0.009620 \n", "P1560 0.003998 \n", "P6185 0.000000 \n", "P3364 0.000000 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P2152751[../../allConstraintsAnalysis/symmetricConstra...0.013158
P1639205920[../../allConstraintsAnalysis/symmetricConstra...0.009620
P1560323913[../../allConstraintsAnalysis/symmetricConstra...0.003998
P61852800[../../allConstraintsAnalysis/symmetricConstra...0.000000
P336417860[../../allConstraintsAnalysis/symmetricConstra...0.000000
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2152 75 1 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1639 2059 20 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1560 3239 13 [../../allConstraintsAnalysis/symmetricConstra... \n", "P6185 280 0 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3364 1786 0 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P2152 0.013158 \n", "P1639 0.009620 \n", "P1560 0.003998 \n", "P6185 0.000000 \n", "P3364 0.000000 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "symmConstDF1 = pd.DataFrame(symmConstViolations['mandatory']).T\n", "symmConstDF1['violation_ratio'] = symmConstDF1.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n", "symmConstDF1.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 8, "id": "gross-extraction", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P27891038926058[../../allConstraintsAnalysis/symmetricConstra...0.055098
P188950595423764[../../allConstraintsAnalysis/symmetricConstra...0.044862
P1971730231773[../../allConstraintsAnalysis/symmetricConstra...0.010143
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2789 103892 6058 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1889 505954 23764 [../../allConstraintsAnalysis/symmetricConstra... \n", "P197 173023 1773 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P2789 0.055098 \n", "P1889 0.044862 \n", "P197 0.010143 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P27891038926058[../../allConstraintsAnalysis/symmetricConstra...0.055098
P188950595423764[../../allConstraintsAnalysis/symmetricConstra...0.044862
P1971730231773[../../allConstraintsAnalysis/symmetricConstra...0.010143
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2789 103892 6058 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1889 505954 23764 [../../allConstraintsAnalysis/symmetricConstra... \n", "P197 173023 1773 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P2789 0.055098 \n", "P1889 0.044862 \n", "P197 0.010143 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "symmConstDF2 = pd.DataFrame(symmConstViolations['suggestion']).T\n", "symmConstDF2['violation_ratio'] = symmConstDF2.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n", "symmConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 9, "id": "heavy-scout", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P518802[../../allConstraintsAnalysis/symmetricConstra...1.000000
P1706449[../../allConstraintsAnalysis/symmetricConstra...0.924528
P2652460777[../../allConstraintsAnalysis/symmetricConstra...0.628133
P521418144[../../allConstraintsAnalysis/symmetricConstra...0.256228
P229399841919[../../allConstraintsAnalysis/symmetricConstra...0.161220
P30321674320[../../allConstraintsAnalysis/symmetricConstra...0.160481
P1382108071587[../../allConstraintsAnalysis/symmetricConstra...0.128046
P13277754638[../../allConstraintsAnalysis/symmetricConstra...0.076025
P4519549749[../../allConstraintsAnalysis/symmetricConstra...0.072733
P34032130110[../../allConstraintsAnalysis/symmetricConstra...0.049107
P4602389808022[../../allConstraintsAnalysis/symmetricConstra...0.032477
P514301[../../allConstraintsAnalysis/symmetricConstra...0.032258
P5306595213[../../allConstraintsAnalysis/symmetricConstra...0.031287
P46115535474[../../allConstraintsAnalysis/symmetricConstra...0.029608
P4754825113705[../../allConstraintsAnalysis/symmetricConstra...0.024388
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5188 0 2 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1706 4 49 [../../allConstraintsAnalysis/symmetricConstra... \n", "P2652 460 777 [../../allConstraintsAnalysis/symmetricConstra... \n", "P521 418 144 [../../allConstraintsAnalysis/symmetricConstra... \n", "P2293 9984 1919 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3032 1674 320 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1382 10807 1587 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1327 7754 638 [../../allConstraintsAnalysis/symmetricConstra... \n", "P451 9549 749 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3403 2130 110 [../../allConstraintsAnalysis/symmetricConstra... \n", "P460 238980 8022 [../../allConstraintsAnalysis/symmetricConstra... \n", "P514 30 1 [../../allConstraintsAnalysis/symmetricConstra... \n", "P530 6595 213 [../../allConstraintsAnalysis/symmetricConstra... \n", "P461 15535 474 [../../allConstraintsAnalysis/symmetricConstra... \n", "P47 548251 13705 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P5188 1.000000 \n", "P1706 0.924528 \n", "P2652 0.628133 \n", "P521 0.256228 \n", "P2293 0.161220 \n", "P3032 0.160481 \n", "P1382 0.128046 \n", "P1327 0.076025 \n", "P451 0.072733 \n", "P3403 0.049107 \n", "P460 0.032477 \n", "P514 0.032258 \n", "P530 0.031287 \n", "P461 0.029608 \n", "P47 0.024388 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P518802[../../allConstraintsAnalysis/symmetricConstra...1.000000
P1706449[../../allConstraintsAnalysis/symmetricConstra...0.924528
P2652460777[../../allConstraintsAnalysis/symmetricConstra...0.628133
P521418144[../../allConstraintsAnalysis/symmetricConstra...0.256228
P229399841919[../../allConstraintsAnalysis/symmetricConstra...0.161220
P30321674320[../../allConstraintsAnalysis/symmetricConstra...0.160481
P1382108071587[../../allConstraintsAnalysis/symmetricConstra...0.128046
P13277754638[../../allConstraintsAnalysis/symmetricConstra...0.076025
P4519549749[../../allConstraintsAnalysis/symmetricConstra...0.072733
P34032130110[../../allConstraintsAnalysis/symmetricConstra...0.049107
P4602389808022[../../allConstraintsAnalysis/symmetricConstra...0.032477
P514301[../../allConstraintsAnalysis/symmetricConstra...0.032258
P5306595213[../../allConstraintsAnalysis/symmetricConstra...0.031287
P46115535474[../../allConstraintsAnalysis/symmetricConstra...0.029608
P4754825113705[../../allConstraintsAnalysis/symmetricConstra...0.024388
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5188 0 2 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1706 4 49 [../../allConstraintsAnalysis/symmetricConstra... \n", "P2652 460 777 [../../allConstraintsAnalysis/symmetricConstra... \n", "P521 418 144 [../../allConstraintsAnalysis/symmetricConstra... \n", "P2293 9984 1919 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3032 1674 320 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1382 10807 1587 [../../allConstraintsAnalysis/symmetricConstra... \n", "P1327 7754 638 [../../allConstraintsAnalysis/symmetricConstra... \n", "P451 9549 749 [../../allConstraintsAnalysis/symmetricConstra... \n", "P3403 2130 110 [../../allConstraintsAnalysis/symmetricConstra... \n", "P460 238980 8022 [../../allConstraintsAnalysis/symmetricConstra... \n", "P514 30 1 [../../allConstraintsAnalysis/symmetricConstra... \n", "P530 6595 213 [../../allConstraintsAnalysis/symmetricConstra... \n", "P461 15535 474 [../../allConstraintsAnalysis/symmetricConstra... \n", "P47 548251 13705 [../../allConstraintsAnalysis/symmetricConstra... \n", "\n", " violation_ratio \n", "P5188 1.000000 \n", "P1706 0.924528 \n", "P2652 0.628133 \n", "P521 0.256228 \n", "P2293 0.161220 \n", "P3032 0.160481 \n", "P1382 0.128046 \n", "P1327 0.076025 \n", "P451 0.072733 \n", "P3403 0.049107 \n", "P460 0.032477 \n", "P514 0.032258 \n", "P530 0.031287 \n", "P461 0.029608 \n", "P47 0.024388 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "symmConstDF3 = pd.DataFrame(symmConstViolations['normal']).T\n", "symmConstDF3['violation_ratio'] = symmConstDF3.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n", "symmConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 10, "id": "sexual-blowing", "metadata": {}, "outputs": [], "source": [ "# !head ../../allConstraintsAnalysis/symmetricConstraint/normal/claims.P3032.incorrect.tsv\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "legitimate-aspect", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "symmConstDF3.sort_values(by=['violation_ratio'],ascending=False)['violation_ratio'].plot.hist(bins=100).set_title(\"Symmetric Normal Constraint - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "premium-yahoo", "metadata": {}, "outputs": [], "source": [ "pd.concat([symmConstDF1, symmConstDF2, symmConstDF3]).to_csv('../../allConstraintsAnalysis/symmConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "unlikely-sewing", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 11, "id": "southern-reasoning", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "01675fcd83284c8ab2aa683f43fef458", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/108 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for symmetric constraint checks\")" ] }, { "cell_type": "markdown", "id": "informed-animal", "metadata": {}, "source": [ "## Inverse Constraint (Q21510855)\n", "\n", "This constraint says, if node1 has a property with this constraint, then both `(node1)-[prop]->(node2)` and `(node2)-[prop]->(node1)` must be present with few exceptions" ] }, { "cell_type": "markdown", "id": "dramatic-manchester", "metadata": {}, "source": [ "### Constraints File" ] }, { "cell_type": "code", "execution_count": 1, "id": "leading-server", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-04-11 11:02:04 query]: SQL Translation:\r\n", "---------------------------------------------\r\n", " SELECT *\r\n", " FROM graph_1 AS graph_1_c1\r\n", " WHERE graph_1_c1.\"label\"=?\r\n", " AND graph_1_c1.\"node2\"=?\r\n", " PARAS: ['P2302', 'Q21510855']\r\n", "---------------------------------------------\r\n" ] } ], "source": [ "!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n", " ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n", " --match \"p: (nodeProp1)-[nodePropEdge:P2302]->(:Q21510855)\" \\\n", " -o ../../constraintsOP/inverseConstraint/claims.constraints_list.tsv \\\n", " --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db" ] }, { "cell_type": "code", "execution_count": 2, "id": "offshore-sudan", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "P1026-P2302-Q21510855-adc83b86-0\tP1026\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1029-P2302-Q21510855-6b55e057-0\tP1029\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P115-P2302-Q21510855-f7aa0b78-0\tP115\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1151-P2302-Q21510855-0d9aa9c6-0\tP1151\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1204-P2302-Q21510855-e3d53bb6-0\tP1204\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1283-P2302-Q21510855-0e7699bb-0\tP1283\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1308-P2302-Q21510855-2aba96b7-0\tP1308\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1365-P2302-Q21510855-c809b758-0\tP1365\tP2302\tQ21510855\tnormal\twikibase-item\r\n", "P1366-P2302-Q21510855-eee12ef8-0\tP1366\tP2302\tQ21510855\tnormal\twikibase-item\r\n" ] } ], "source": [ "!head ../../constraintsOP/inverseConstraint/claims.constraints_list.tsv" ] }, { "cell_type": "code", "execution_count": 3, "id": "received-colonial", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "qualiDF = pd.read_csv(\"../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz\",sep='\\t')\n", "constDF = pd.read_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_list.tsv\",sep='\\t')" ] }, { "cell_type": "code", "execution_count": 4, "id": "overall-expense", "metadata": {}, "outputs": [], "source": [ "constDF2 = constDF.set_index('id').join(qualiDF.set_index('node1'),rsuffix='_qualifier').drop(columns=['id', 'node2;wikidatatype_qualifier', 'rank', 'node2', 'label', 'node2;wikidatatype']).rename(columns={'label_qualifier':'label', 'node2_qualifier': 'node2'})\n", "constDF2 = constDF2.reset_index()\n", "constDF2 = constDF2.rename(columns={'index':'id'})\n", "constDF2['label'] = constDF2.label.fillna(\"P2316\")\n", "constDF2['node2'] = constDF2.node2.fillna(\"Normal\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "valid-throat", "metadata": {}, "outputs": [], "source": [ "constDF2.to_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)" ] }, { "cell_type": "code", "execution_count": 6, "id": "focused-pennsylvania", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import math\n", "dfItemRequires = pd.read_csv('../../constraintsOP/inverseConstraint/claims.constraints_all.tsv',sep='\\t')" ] }, { "cell_type": "code", "execution_count": 7, "id": "moved-rental", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 8, "id": "attached-rings", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2306', 'P2316', 'P4155', 'P2303'], dtype=object)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].unique()" ] }, { "cell_type": "code", "execution_count": 9, "id": "loving-mileage", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "P2306 110\n", "P2316 10\n", "P2303 2\n", "P4155 1\n", "Name: label, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].value_counts()" ] }, { "cell_type": "code", "execution_count": 10, "id": "local-forty", "metadata": {}, "outputs": [], "source": [ "#Reference: https://stackoverflow.com/a/17298454\n", "# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n", "dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')" ] }, { "cell_type": "code", "execution_count": 11, "id": "pressed-upset", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2306P2316P4155
node1id
P1026P1026-P2302-Q21510855-adc83b86-0NaN[P50]NaNNaN
P1029P1029-P2302-Q21510855-6b55e057-0NaN[P5096]NaNNaN
P115P115-P2302-Q21510855-f7aa0b78-0NaN[P466]NaNNaN
P1151P1151-P2302-Q21510855-0d9aa9c6-0NaN[P1204][Q21502408]NaN
P1204P1204-P2302-Q21510855-e3d53bb6-0NaN[P1151]NaNNaN
\n", "
" ], "text/plain": [ "label P2303 P2306 P2316 P4155\n", "node1 id \n", "P1026 P1026-P2302-Q21510855-adc83b86-0 NaN [P50] NaN NaN\n", "P1029 P1029-P2302-Q21510855-6b55e057-0 NaN [P5096] NaN NaN\n", "P115 P115-P2302-Q21510855-f7aa0b78-0 NaN [P466] NaN NaN\n", "P1151 P1151-P2302-Q21510855-0d9aa9c6-0 NaN [P1204] [Q21502408] NaN\n", "P1204 P1204-P2302-Q21510855-e3d53bb6-0 NaN [P1151] NaN NaN" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "code", "execution_count": 12, "id": "extra-stomach", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.droplevel(1)" ] }, { "cell_type": "code", "execution_count": 13, "id": "seeing-marine", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelP2303P2306P2316P4155
node1
P1026NaN[P50]NaNNaN
P1029NaN[P5096]NaNNaN
P115NaN[P466]NaNNaN
P1151NaN[P1204][Q21502408]NaN
P1204NaN[P1151]NaNNaN
\n", "
" ], "text/plain": [ "label P2303 P2306 P2316 P4155\n", "node1 \n", "P1026 NaN [P50] NaN NaN\n", "P1029 NaN [P5096] NaN NaN\n", "P115 NaN [P466] NaN NaN\n", "P1151 NaN [P1204] [Q21502408] NaN\n", "P1204 NaN [P1151] NaN NaN" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "markdown", "id": "composite-cutting", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 48, "id": "acoustic-belarus", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0d0055aba376447a853b9ca80241247a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from tqdm.notebook import tqdm\n", "import os.path\n", "import os\n", "\n", "cnt = 0\n", "fCnt = 0\n", "fOP = None\n", "\n", "folderName = 'inverseConstraint_Final'\n", "shellFileSuffix = 'invConst_Validator_new3_'\n", "graph_cache_file_prefix = \"inv_2_\"\n", "\n", "for prop, constraint in tqdm(dfItemRequires.iterrows()):\n", "# try:\n", " \n", " if type(constraint['P2316']) == list:\n", " if constraint['P2316'][0] == 'Q21502408':\n", " subFolderName = \"mandatory\"\n", " elif constraint['P2316'][0] == 'Q62026391':\n", " subFolderName = \"suggestion\"\n", " else:\n", " subFolderName = \"normal\"\n", " \n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", " continue\n", " \n", " prop2 = constraint['P2306']\n", "\n", " if type(prop2) != list:\n", " continue\n", " prop2 = prop2[0]\n", "\n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " if cnt % 20 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " \n", " command = \"{ time ( kgtk --debug query -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " ../../propertiesSplit/claims.\"+ prop2 +\".tsv \\\n", " --match '\"+ \\\n", " f\"{prop}: (node1)-[nodeProp]->(node2), {prop2}: (node2)-[]->(node1)' \"\n", "\n", " if type(constraint['P2303']) != list: # Exceptions not present\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n", "# print(command)\n", " fOP.write(command)\n", " else:\n", " excptns = set(constraint['P2303'])\n", " commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug query -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n", "# print(command) \n", " fOP.write(command)\n", " \n", " command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " --filter-mode NONE \\\n", " --input-keys node1 label \\\n", " --filter-keys node1 label \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " \n", " cnt += 1\n", "# except:\n", "# print(\"Something failed for prop:\",prop)\n", "if fOP:\n", " fOP.close()" ] }, { "cell_type": "code", "execution_count": 49, "id": "large-climb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "110" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 50, "id": "involved-vietnamese", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,7):\n", "# os.system(\"screen -dm sh ../../propertiesSplit/checkViolations/invConst_Validator_new3_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "retired-audio", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 1, "id": "specified-evanescence", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a91df974ff5549c186e5dbb8175b77f0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0it [00:00, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5ad67f2455284261bcb87f9ffdc2914c", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/12 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P267381968[../../allConstraintsAnalysis/inverseConstrain...0.076663
P41472719[../../allConstraintsAnalysis/inverseConstrain...0.032143
P41492724[../../allConstraintsAnalysis/inverseConstrain...0.014493
P2033183626[../../allConstraintsAnalysis/inverseConstrain...0.013963
P450175416[../../allConstraintsAnalysis/inverseConstrain...0.009040
P115116124[../../allConstraintsAnalysis/inverseConstrain...0.002475
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2673 819 68 [../../allConstraintsAnalysis/inverseConstrain... \n", "P4147 271 9 [../../allConstraintsAnalysis/inverseConstrain... \n", "P4149 272 4 [../../allConstraintsAnalysis/inverseConstrain... \n", "P2033 1836 26 [../../allConstraintsAnalysis/inverseConstrain... \n", "P450 1754 16 [../../allConstraintsAnalysis/inverseConstrain... \n", "P1151 1612 4 [../../allConstraintsAnalysis/inverseConstrain... \n", "\n", " violation_ratio \n", "P2673 0.076663 \n", "P4147 0.032143 \n", "P4149 0.014493 \n", "P2033 0.013963 \n", "P450 0.009040 \n", "P1151 0.002475 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF1 = pd.DataFrame(invConstViolations['mandatory']).T\n", "invConstDF1['violation_ratio'] = invConstDF1.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n", "invConstDF1.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 7, "id": "valid-symposium", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P143435124723[../../allConstraintsAnalysis/inverseConstrain...0.573528
P15596320548956[../../allConstraintsAnalysis/inverseConstrain...0.048368
P15696318339925[../../allConstraintsAnalysis/inverseConstrain...0.039801
P62972202131[../../allConstraintsAnalysis/inverseConstrain...0.001811
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1434 3512 4723 [../../allConstraintsAnalysis/inverseConstrain... \n", "P155 963205 48956 [../../allConstraintsAnalysis/inverseConstrain... \n", "P156 963183 39925 [../../allConstraintsAnalysis/inverseConstrain... \n", "P629 72202 131 [../../allConstraintsAnalysis/inverseConstrain... \n", "\n", " violation_ratio \n", "P1434 0.573528 \n", "P155 0.048368 \n", "P156 0.039801 \n", "P629 0.001811 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF2 = pd.DataFrame(invConstViolations['suggestion']).T\n", "invConstDF2['violation_ratio'] = invConstDF2.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n", "invConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 8, "id": "resident-mustang", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
correctincorrectpathsviolation_ratio
P160512188[../../allConstraintsAnalysis/inverseConstrain...0.940000
P34485834249[../../allConstraintsAnalysis/inverseConstrain...0.879346
P92615[../../allConstraintsAnalysis/inverseConstrain...0.833333
P92515[../../allConstraintsAnalysis/inverseConstrain...0.833333
P10294752037[../../allConstraintsAnalysis/inverseConstrain...0.810908
P115671224290[../../allConstraintsAnalysis/inverseConstrain...0.783498
P8625717[../../allConstraintsAnalysis/inverseConstrain...0.708333
P51328189[../../allConstraintsAnalysis/inverseConstrain...0.523529
P42525121956[../../allConstraintsAnalysis/inverseConstrain...0.437780
P38161410[../../allConstraintsAnalysis/inverseConstrain...0.416667
P167764[../../allConstraintsAnalysis/inverseConstrain...0.400000
P2512210140[../../allConstraintsAnalysis/inverseConstrain...0.400000
P2578989527[../../allConstraintsAnalysis/inverseConstrain...0.347625
P3261232122[../../allConstraintsAnalysis/inverseConstrain...0.344633
P5681049445[../../allConstraintsAnalysis/inverseConstrain...0.297858
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1605 12 188 [../../allConstraintsAnalysis/inverseConstrain... \n", "P3448 583 4249 [../../allConstraintsAnalysis/inverseConstrain... \n", "P926 1 5 [../../allConstraintsAnalysis/inverseConstrain... \n", "P925 1 5 [../../allConstraintsAnalysis/inverseConstrain... \n", "P1029 475 2037 [../../allConstraintsAnalysis/inverseConstrain... \n", "P115 6712 24290 [../../allConstraintsAnalysis/inverseConstrain... \n", "P8625 7 17 [../../allConstraintsAnalysis/inverseConstrain... \n", "P5132 81 89 [../../allConstraintsAnalysis/inverseConstrain... \n", "P425 2512 1956 [../../allConstraintsAnalysis/inverseConstrain... \n", "P3816 14 10 [../../allConstraintsAnalysis/inverseConstrain... \n", "P1677 6 4 [../../allConstraintsAnalysis/inverseConstrain... \n", "P2512 210 140 [../../allConstraintsAnalysis/inverseConstrain... \n", "P2578 989 527 [../../allConstraintsAnalysis/inverseConstrain... \n", "P3261 232 122 [../../allConstraintsAnalysis/inverseConstrain... \n", "P568 1049 445 [../../allConstraintsAnalysis/inverseConstrain... \n", "\n", " violation_ratio \n", "P1605 0.940000 \n", "P3448 0.879346 \n", "P926 0.833333 \n", "P925 0.833333 \n", "P1029 0.810908 \n", "P115 0.783498 \n", "P8625 0.708333 \n", "P5132 0.523529 \n", "P425 0.437780 \n", "P3816 0.416667 \n", "P1677 0.400000 \n", "P2512 0.400000 \n", "P2578 0.347625 \n", "P3261 0.344633 \n", "P568 0.297858 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF3 = pd.DataFrame(invConstViolations['normal']).T\n", "invConstDF3['violation_ratio'] = invConstDF3.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n", "invConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 9, "id": "dietary-venue", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n", "Q1133903-P925-Q18707-eae3a579-0\tQ1133903\tP925\tQ18707\tnormal\twikibase-item\r\n", "Q1570272-P925-Q7135001-5dbdce8c-0\tQ1570272\tP925\tQ7135001\tnormal\twikibase-item\r\n", "Q301613-P925-Q7135001-528c29b2-0\tQ301613\tP925\tQ7135001\tnormal\twikibase-item\r\n", "Q452595-P925-Q864951-c5b34e11-0\tQ452595\tP925\tQ864951\tnormal\twikibase-item\r\n", "Q5064084-P925-Q4117017-76545a06-0\tQ5064084\tP925\tQ4117017\tnormal\twikibase-item\r\n" ] } ], "source": [ "!head ../../allConstraintsAnalysis/inverseConstraint/normal/claims.P925.incorrect.tsv" ] }, { "cell_type": "code", "execution_count": 10, "id": "entire-gauge", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "invConstDF3.sort_values(by=['violation_ratio'],ascending=False)['violation_ratio'].plot.hist(bins=100).set_title(\"Symmetric Normal Constraint - Violation Ratios\")" ] }, { "cell_type": "code", "execution_count": 11, "id": "located-water", "metadata": {}, "outputs": [], "source": [ "pd.concat([invConstDF1, invConstDF2, invConstDF3]).to_csv('../../allConstraintsAnalysis/invConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "working-stable", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 55, "id": "saved-twelve", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2e8a241c831b4968ae22d06c22c6e85e", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/122 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for symmetric constraint checks\")" ] }, { "cell_type": "markdown", "id": "ongoing-merit", "metadata": {}, "source": [ "# Combine Plots for constraints" ] }, { "cell_type": "code", "execution_count": 1, "id": "fundamental-contrary", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "typeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": 14, "id": "bigger-standing", "metadata": {}, "outputs": [], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")['violation_ratio_type_const'].rename().sort_values()" ] }, { "cell_type": "code", "execution_count": 15, "id": "human-artist", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")['violation_ratio_valuetype_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": 16, "id": "gothic-decision", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")['violation_ratio_codep_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": 17, "id": "alleged-immunology", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")['violation_ratio_symm_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": 18, "id": "vulnerable-estonia", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")['violation_ratio_inv_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": 7, "id": "individual-pocket", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Unnamed: 0\n", "P1605 0.940000\n", "P3448 0.879346\n", "P925 0.833333\n", "P926 0.833333\n", "P1029 0.810908\n", "Name: violation_ratio_inv_const, dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF1_1.head()" ] }, { "cell_type": "code", "execution_count": 19, "id": "facial-announcement", "metadata": {}, "outputs": [], "source": [ "typeConstDF1.index.names = ['property']\n", "typeConstDF1 = typeConstDF1.reset_index().reset_index()\n", "typeConstDF1['index'] = typeConstDF1['index'].apply(lambda p: (p+1) * 100/len(typeConstDF1))\n", "typeConstDF1 = typeConstDF1.set_index('index')[0]" ] }, { "cell_type": "code", "execution_count": 21, "id": "impressive-fantasy", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1.index.names = ['property']\n", "valTypeConstDF1 = valTypeConstDF1.reset_index().reset_index()\n", "valTypeConstDF1['index'] = valTypeConstDF1['index'].apply(lambda p: (p+1) * 100/len(valTypeConstDF1))\n", "valTypeConstDF1 = valTypeConstDF1.set_index('index')['violation_ratio_valuetype_const']" ] }, { "cell_type": "code", "execution_count": 22, "id": "preceding-yahoo", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1.index.names = ['property']\n", "codepConstDF1_1 = codepConstDF1_1.reset_index().reset_index()\n", "codepConstDF1_1['index'] = codepConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(codepConstDF1_1))\n", "codepConstDF1_1 = codepConstDF1_1.set_index('index')['violation_ratio_codep_const']" ] }, { "cell_type": "code", "execution_count": 23, "id": "attached-civilization", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1.index.names = ['property']\n", "symmConstDF1_1 = symmConstDF1_1.reset_index().reset_index()\n", "symmConstDF1_1['index'] = symmConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(symmConstDF1_1))\n", "symmConstDF1_1 = symmConstDF1_1.set_index('index')['violation_ratio_symm_const']" ] }, { "cell_type": "code", "execution_count": 24, "id": "supposed-fitting", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1.index.names = ['property']\n", "invConstDF1_1 = invConstDF1_1.reset_index().reset_index()\n", "invConstDF1_1['index'] = invConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(invConstDF1_1))\n", "invConstDF1_1 = invConstDF1_1.set_index('index')['violation_ratio_inv_const']" ] }, { "cell_type": "code", "execution_count": 29, "id": "lonely-emphasis", "metadata": {}, "outputs": [], "source": [ "typeConstDF2 = [np.percentile(typeConstDF1,i)*100 for i in range(1, 101)]\n", "valTypeConstDF2 = [np.percentile(valTypeConstDF1,i)*100 for i in range(1, 101)]\n", "codepConstDF1_2 = [np.percentile(codepConstDF1_1,i)*100 for i in range(1, 101)]\n", "symmConstDF1_2 = [np.percentile(symmConstDF1_1,i)*100 for i in range(1, 101)]\n", "invConstDF1_2 = [np.percentile(invConstDF1_1,i)*100 for i in range(1, 101)]" ] }, { "cell_type": "code", "execution_count": 30, "id": "stopped-guarantee", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = pd.DataFrame({'index':list(range(1, 101)), 'type': typeConstDF2, 'value type': valTypeConstDF2, 'irs': codepConstDF1_2, 'symmetric': symmConstDF1_2, 'inverse': invConstDF1_2})" ] }, { "cell_type": "code", "execution_count": 31, "id": "synthetic-modification", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": 32, "id": "collective-adolescent", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexconstraintVR
01type0.0
12type0.0
23type0.0
34type0.0
45type0.0
\n", "
" ], "text/plain": [ " index constraint VR\n", "0 1 type 0.0\n", "1 2 type 0.0\n", "2 3 type 0.0\n", "3 4 type 0.0\n", "4 5 type 0.0" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 16, "id": "angry-saying", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Text(0.5, 0, 'Proportion of properties (in %)'),\n", " Text(0, 0.5, 'Violation Ratio (in %)')]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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0y9+SmJ4In878W/Eh8cf8bUKqlvoFxeOJW8t7joHsbOPOeg5Po+fsryGbtFdCZKQ9SqSkAkhhOgJipqKuGHhDTgsDp476TlSI49u3uaCmhYGJkXRuPALAGJPPfiDAWU7GvD7jG7RXQmSkHW6u+66i6eeeqr9/f3338+jjz5Kc3Mz8+bNY9KkSYwdO5YPPvhgn3MXLVrEGWec0f7+5z//OS+//DIAq1atYvbs2UyePJmTTz55nwr+y5cv58MPP2TBggVMmDCBHTt2MGnSpPb927dvb38/cOBA7rjjDsaOHcu0adPIy8sDoKqqivPOO4+pU6cydepUvv766077uQghhBAATZ4mfrLwJ3gMD8+d+BzZMdlHfc2CGicDk6No+not4Yke7MMnHvSc4i21WKyKfkO6R53Q3l2H7NO7oHxD514zfSyc+uB+d1900UXccsst3HTTTQD861//4r///S/h4eG89957xMbGUl1dzfTp0znrrLMO6TFbr9fLL37xCz744ANSUlJ46623uPvuu3nxxRfbjzn22GM566yzOOOMMzj//PMBiIuLY+3atUyYMIGXXnppr+mb4uLi2LBhA6+++iq33HILH330ETfffDO33norxx13HIWFhZx88sls3rz5SH9SQgghxF601ty3/D5Kmkt48eQXj6gA7A81tHqpbfEwQjfi2lVN6hQFjoOPRSvaXEf6oDgc4d0jFeoeUfQiEydOpLKyktLSUqqqqkhISCA7Oxuv18uvf/1rlixZgsVioaSkhIqKCtIPUiMFYOvWrWzcuJETTzwRAL/fT79+/Q563nXXXcdLL73En//8Z9566y2+//779n1tUzldcskl3HrrrYA5s8CeXZ6NjY00Nzd32hg3IYQQfdtbW99i4a6F3DLpFialTTr4CYegoLoFgKFbVgAQM/bg3Z+tzR6qipqYdkZOp8TQGXp3QnaAlqxguuCCC3jnnXcoLy9vn5fy9ddfp6qqilWrVmG32xk4cCAul2uv82w2G4ZhtL9v26+1ZvTo0XzzzTeHFcd5553Hb3/7W+bOncvkyZNJSkpq37dny1zbumEYfPvtt4SHhx/eBxZCCCEOYnPNZh5e8TDHZR7H1WOuPvgJh6igxkzIElYsJTzViqP/wIOeU7K1HnT3KHfRRsaQBcFFF13Em2++yTvvvMMFF1wAQENDA6mpqdjtdr76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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "ax = sns.lineplot(x='index', y='VR', hue='constraint', data=constAnalysisDF)\n", "ax.set(xlabel=\"Proportion of properties (in %)\", ylabel = \"Violation Ratio (in %)\")" ] }, { "cell_type": "markdown", "id": "controversial-invitation", "metadata": {}, "source": [ "## Option 2" ] }, { "cell_type": "code", "execution_count": 113, "id": "alternate-ceremony", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "typeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": 114, "id": "complimentary-prague", "metadata": {}, "outputs": [], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")[['violation_ratio_type_const']].sort_values(by=['violation_ratio_type_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 115, "id": "executed-suffering", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")[['violation_ratio_valuetype_const']].sort_values(by=['violation_ratio_valuetype_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 116, "id": "green-still", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")[['violation_ratio_codep_const']].sort_values(by=['violation_ratio_codep_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 117, "id": "adopted-andrew", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")[['violation_ratio_symm_const']].sort_values(by=['violation_ratio_symm_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 118, "id": "attended-unknown", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")[['violation_ratio_inv_const']].sort_values(by=['violation_ratio_inv_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 119, "id": "conventional-blues", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
violation_ratio_inv_const
Unnamed: 0
P16050.940000
P34480.879346
P9250.833333
P9260.833333
P10290.810908
\n", "
" ], "text/plain": [ " violation_ratio_inv_const\n", "Unnamed: 0 \n", "P1605 0.940000\n", "P3448 0.879346\n", "P925 0.833333\n", "P926 0.833333\n", "P1029 0.810908" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF1_1.head()" ] }, { "cell_type": "code", "execution_count": 147, "id": "viral-restoration", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1456, 897, 527, 38, 110)" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(typeConstDF1), len(valTypeConstDF1), len(codepConstDF1_1), len(symmConstDF), len(invConstDF1_1)" ] }, { "cell_type": "code", "execution_count": 120, "id": "gross-measurement", "metadata": {}, "outputs": [], "source": [ "typeConstDF1.index.names = ['property']\n", "typeConstDF1 = typeConstDF1.reset_index()[['violation_ratio_type_const']]" ] }, { "cell_type": "code", "execution_count": 121, "id": "fatty-revolution", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1.index.names = ['property']\n", "valTypeConstDF1 = valTypeConstDF1.reset_index()[['violation_ratio_valuetype_const']]" ] }, { "cell_type": "code", "execution_count": 122, "id": "short-dallas", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1.index.names = ['property']\n", "codepConstDF1_1 = codepConstDF1_1.reset_index()[['violation_ratio_codep_const']]" ] }, { "cell_type": "code", "execution_count": 123, "id": "sublime-helen", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1.index.names = ['property']\n", "symmConstDF1_1 = symmConstDF1_1.reset_index()[['violation_ratio_symm_const']]" ] }, { "cell_type": "code", "execution_count": 124, "id": "dying-interview", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1.index.names = ['property']\n", "invConstDF1_1 = invConstDF1_1.reset_index()[['violation_ratio_inv_const']]" ] }, { "cell_type": "code", "execution_count": 125, "id": "warming-glucose", "metadata": {}, "outputs": [], "source": [ "typeConstDF2 = [np.percentile(typeConstDF1,i)*100 for i in range(1, 101)]\n", "valTypeConstDF2 = [np.percentile(valTypeConstDF1,i)*100 for i in range(1, 101)]\n", "codepConstDF1_2 = [np.percentile(codepConstDF1_1,i)*100 for i in range(1, 101)]\n", "symmConstDF1_2 = [np.percentile(symmConstDF1_1,i)*100 for i in range(1, 101)]\n", "invConstDF1_2 = [np.percentile(invConstDF1_1,i)*100 for i in range(1, 101)]" ] }, { "cell_type": "code", "execution_count": 149, "id": "intended-bulgarian", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = pd.DataFrame({'index':list(range(100, 0, -1)), 'type': typeConstDF2, 'value type': valTypeConstDF2, 'irs': codepConstDF1_2, 'symmetric': symmConstDF1_2, 'inverse': invConstDF1_2})" ] }, { "cell_type": "code", "execution_count": 150, "id": "alive-guitar", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indextypevalue typeirssymmetricinverse
01000.00.00.00.00.000000
1990.00.00.00.00.000000
2980.00.00.00.00.000000
3970.00.00.00.00.001924
4960.00.00.00.00.010648
\n", "
" ], "text/plain": [ " index type value type irs symmetric inverse\n", "0 100 0.0 0.0 0.0 0.0 0.000000\n", "1 99 0.0 0.0 0.0 0.0 0.000000\n", "2 98 0.0 0.0 0.0 0.0 0.000000\n", "3 97 0.0 0.0 0.0 0.0 0.001924\n", "4 96 0.0 0.0 0.0 0.0 0.010648" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 151, "id": "tired-breed", "metadata": {}, "outputs": [], "source": [ "# constAnalysisDF = typeConstDF1.join(valTypeConstDF1).join(codepConstDF1_1).join(symmConstDF1_1).join(invConstDF1_1).rename(columns={'violation_ratio_type_const':'type', 'violation_ratio_valuetype_const': 'value type', 'violation_ratio_codep_const': 'irs', 'violation_ratio_symm_const': 'symmetric', 'violation_ratio_inv_const': 'inverse'}).reset_index()" ] }, { "cell_type": "code", "execution_count": 152, "id": "fuzzy-oakland", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": 153, "id": "common-april", "metadata": {}, "outputs": [], "source": [ "def getSizes(row):\n", " map1 = {'type': 1456, 'value type': 897, 'irs': 527, 'symmetric': 38, 'inverse':110}\n", " return map1[row['constraint']]\n", "constAnalysisDF['len'] = constAnalysisDF.apply(getSizes, axis=1)" ] }, { "cell_type": "code", "execution_count": 154, "id": "interstate-sunday", "metadata": {}, "outputs": [], "source": [ "# constAnalysisDF['VR'] *= 100" ] }, { "cell_type": "code", "execution_count": 155, "id": "continent-representation", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexconstraintVRlen
0100type0.01456
199type0.01456
298type0.01456
397type0.01456
496type0.01456
\n", "
" ], "text/plain": [ " index constraint VR len\n", "0 100 type 0.0 1456\n", "1 99 type 0.0 1456\n", "2 98 type 0.0 1456\n", "3 97 type 0.0 1456\n", "4 96 type 0.0 1456" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 162, "id": "economic-henry", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[Text(0.5, 0, 'Properties'),\n", " Text(0, 0.5, 'Violation Ratio (in %)'),\n", " [Text(-20.0, 0, ''),\n", " Text(0.0, 0, ''),\n", " Text(20.0, 0, ''),\n", " Text(40.0, 0, ''),\n", " Text(60.0, 0, ''),\n", " Text(80.0, 0, ''),\n", " Text(100.0, 0, ''),\n", " Text(120.0, 0, '')]]" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "ax = sns.scatterplot(x='index',y='VR',hue='constraint',data=constAnalysisDF)\n", "ax.set(xlabel=\"Properties\", ylabel = \"Violation Ratio (in %)\",xticklabels=[])\n", "# h,l = ax.get_legend_handles_labels()\n", "# plt.legend(h[0:3],l[0:3],bbox_to_anchor=(1.05, 1), loc=0, borderaxespad=0., fontsize=13)\n", "# plt.show(ax)" ] }, { "cell_type": "markdown", "id": "compliant-anger", "metadata": {}, "source": [ "## Option 3" ] }, { "cell_type": "code", "execution_count": 3, "id": "sought-charger", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "typeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": 4, "id": "thick-inflation", "metadata": {}, "outputs": [], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")[['violation_ratio_type_const']].sort_values(by=['violation_ratio_type_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 5, "id": "smart-activation", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")[['violation_ratio_valuetype_const']].sort_values(by=['violation_ratio_valuetype_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 6, "id": "whole-missile", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")[['violation_ratio_codep_const']].sort_values(by=['violation_ratio_codep_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 7, "id": "funky-calibration", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")[['violation_ratio_symm_const']].sort_values(by=['violation_ratio_symm_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 8, "id": "removable-transmission", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")[['violation_ratio_inv_const']].sort_values(by=['violation_ratio_inv_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 9, "id": "european-sentence", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
violation_ratio_inv_const
Unnamed: 0
P16050.940000
P34480.879346
P9250.833333
P9260.833333
P10290.810908
\n", "
" ], "text/plain": [ " violation_ratio_inv_const\n", "Unnamed: 0 \n", "P1605 0.940000\n", "P3448 0.879346\n", "P925 0.833333\n", "P926 0.833333\n", "P1029 0.810908" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF1_1.head()" ] }, { "cell_type": "code", "execution_count": 10, "id": "lined-discrimination", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1456, 897, 527, 38, 110)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(typeConstDF1), len(valTypeConstDF1), len(codepConstDF1_1), len(symmConstDF), len(invConstDF1_1)" ] }, { "cell_type": "code", "execution_count": 11, "id": "imported-cooling", "metadata": {}, "outputs": [], "source": [ "typeConstDF1.index.names = ['property']\n", "typeConstDF1 = typeConstDF1.reset_index()[['violation_ratio_type_const']]" ] }, { "cell_type": "code", "execution_count": 12, "id": "hydraulic-coating", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1.index.names = ['property']\n", "valTypeConstDF1 = valTypeConstDF1.reset_index()[['violation_ratio_valuetype_const']]" ] }, { "cell_type": "code", "execution_count": 13, "id": "brief-amsterdam", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1.index.names = ['property']\n", "codepConstDF1_1 = codepConstDF1_1.reset_index()[['violation_ratio_codep_const']]" ] }, { "cell_type": "code", "execution_count": 14, "id": "massive-championship", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1.index.names = ['property']\n", "symmConstDF1_1 = symmConstDF1_1.reset_index()[['violation_ratio_symm_const']]" ] }, { "cell_type": "code", "execution_count": 15, "id": "psychological-homeless", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1.index.names = ['property']\n", "invConstDF1_1 = invConstDF1_1.reset_index()[['violation_ratio_inv_const']]" ] }, { "cell_type": "code", "execution_count": 47, "id": "alpine-sampling", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "typeConstDF2 = pd.DataFrame({'index': list(np.arange(100, 1, -0.05)), 'type': [np.percentile(typeConstDF1,i)*100 for i in np.arange(1, 100,0.05)]}).set_index('index')\n", "valTypeConstDF2 = pd.DataFrame({'index': list(np.arange(100, 1, -0.1)), 'value type': [np.percentile(valTypeConstDF1,i)*100 for i in np.arange(1, 100, 0.1)]}).set_index('index')\n", "codepConstDF1_2 = pd.DataFrame({'index': list(np.arange(100, 1, -0.5)), 'irs': [np.percentile(codepConstDF1_1,i)*100 for i in np.arange(1, 100, 0.5)]}).set_index('index')\n", "symmConstDF1_2 = pd.DataFrame({'index': list(np.arange(100, 1, -5)), 'symmetric': [np.percentile(symmConstDF1_1,i)*100 for i in np.arange(1, 100,5)]}).set_index('index')\n", "invConstDF1_2 = pd.DataFrame({'index': list(np.arange(100, 1, -1)), 'inverse': [np.percentile(invConstDF1_1,i)*100 for i in np.arange(1, 100,1)]}).set_index('index')" ] }, { "cell_type": "code", "execution_count": 48, "id": "elementary-attack", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = typeConstDF2.join(valTypeConstDF2, how='outer').join(codepConstDF1_2, how='outer').join(symmConstDF1_2, how='outer').join(invConstDF1_2, how='outer')\n", "constAnalysisDF = constAnalysisDF.reset_index()" ] }, { "cell_type": "code", "execution_count": 49, "id": "focused-georgia", "metadata": {}, "outputs": [], "source": [ "# constAnalysisDF = typeConstDF1.join(valTypeConstDF1).join(codepConstDF1_1).join(symmConstDF1_1).join(invConstDF1_1).rename(columns={'violation_ratio_type_const':'type', 'violation_ratio_valuetype_const': 'value type', 'violation_ratio_codep_const': 'irs', 'violation_ratio_symm_const': 'symmetric', 'violation_ratio_inv_const': 'inverse'}).reset_index()" ] }, { "cell_type": "code", "execution_count": 50, "id": "military-democrat", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": 51, "id": "fuzzy-somalia", "metadata": {}, "outputs": [], "source": [ "# def getSizes(row):\n", "# map1 = {'type': 1456, 'value type': 897, 'irs': 527, 'symmetric': 38, 'inverse':110}\n", "# return map1[row['constraint']]\n", "# constAnalysisDF['len'] = constAnalysisDF.apply(getSizes, axis=1)" ] }, { "cell_type": "code", "execution_count": 52, "id": "alleged-portugal", "metadata": {}, "outputs": [], "source": [ "# constAnalysisDF['VR'] *= 100" ] }, { "cell_type": "code", "execution_count": 53, "id": "australian-offering", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexconstraintVR
01.05type100.0
11.10type100.0
21.15type100.0
31.20type100.0
41.25type100.0
\n", "
" ], "text/plain": [ " index constraint VR\n", "0 1.05 type 100.0\n", "1 1.10 type 100.0\n", "2 1.15 type 100.0\n", "3 1.20 type 100.0\n", "4 1.25 type 100.0" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 54, "id": "placed-speech", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[Text(0.5, 0, 'Properties'),\n", " Text(0, 0.5, 'Violation Ratio (in %)'),\n", " [Text(-20.0, 0, ''),\n", " Text(0.0, 0, ''),\n", " Text(20.0, 0, ''),\n", " Text(40.0, 0, ''),\n", " Text(60.0, 0, ''),\n", " Text(80.0, 0, ''),\n", " Text(100.0, 0, ''),\n", " Text(120.0, 0, '')]]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAFpCAYAAAAyZzT/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACwxklEQVR4nOzdd3yV1f3A8c+5e+TejJu9yAJCgBAgIkMcgDjALXXgXrWOamutttrWttrxU9tabWvr3ltxVquCC3CEJXsHErL3Tu44vz8uBGIQAiS5IXzfr1deyT3P85zn+wT7yrfnnOd7lNYaIYQQQggROoZQByCEEEIIcaSThEwIIYQQIsQkIRNCCCGECDFJyIQQQgghQkwSMiGEEEKIEJOETAghhBAixEyhDuBQREdH67S0tFCHIYQQQgixX0uWLKnSWsfs7dhhnZClpaVRUFAQ6jCEEEIIIfZLKbXt+47JlKUQQgghRIhJQiaEEEIIEWKSkAkhhBBChNhhvYZMCCGEEAfO6/VSXFxMW1tbqEMZlGw2G8nJyZjN5h5fIwmZEEIIcYQpLi7G5XKRlpaGUirU4QwqWmuqq6spLi4mPT29x9fJlKUQQghxhGlra8Pj8Ugy1geUUng8ngMefZSETAghhDgCSTLWdw7mdysJmRBCCCEGrD/84Q8Hdd1VV13FmjVr9nnOvHnz9ntOf5GETAghhBAD1vclZFprAoHA91736KOPkpOTs8++j4iETCn1uFKqQim1ao+2KKXUh0qpjTu/R+5sV0qpvyulNimlvlVKjeuruHqqwxegqXQD/uKl7ChdxpdbP2RtSQGrdnzJV1s/YlP5t3y97WNW7/iSNaXfsHjL+2wsWULB1o9YUVbAuup1LC5ZzMbajXj93lA/jhBCCNGnnn76aXJzcxkzZgwXX3wxhYWFTJs2jdzcXKZPn8727dsBuOyyy/jxj3/M5MmTycjI4NVXXwWgtLSUY489lry8PEaNGsXnn3/O7bffTmtrK3l5ecydO5fCwkKGDx/OJZdcwqhRoygqKuJHP/oR+fn5jBw5kt/85jed8Rx//PGdu/mEhYVxxx13MGbMGCZOnEh5eTmLFi3irbfe4tZbbyUvL4/Nmzf3/y9tD0pr3TcdK3Us0AQ8rbUetbPt/4AarfWflFK3A5Fa69uUUqcCNwKnAkcDD2itj97fPfLz83VfbJ3U4fOjiwqwdtSx0uHg+oV3MDRyKEPcQ3h1w6vcPO5mXtnwClaTlemp03ls5WNcNvIyFpUsoqKlgktGXsI/l/8Th8nB5aMup7ylnGZvM6ekn8K42HHYTLZej1kIIYToqbVr1zJixIhe62/16tWcddZZLFq0iOjoaGpqarj00ks599xzufTSS3n88cd56623mDdvHpdddhnNzc289NJLrFu3jtNPP51NmzZx//3309bWxh133IHf76elpQWXy0VYWBhNTU0AFBYWkpGRwaJFi5g4cSIANTU1REVF4ff7mT59On//+9/Jzc3l+OOP57777iM/Px+lFG+99RannXYaP//5z3G73dx5551cdtllzJ49m3PPPbfXfhe77O13rJRaorXO39v5fTZCprX+DKj5TvMZwFM7f34KOHOP9qd10JdAhFIqoa9i25/66nIszTtoNFv507f/ora9lqMTjuaVDa8wPGo4q6pXUdxUzElDTuLRlY8Sbg2n1dfK2pq1nJZ5Go9++yjt/vbOxOy5tc8xb9M8fvjhD1lStiRUjyWEEEL0ifnz5zNnzhyio6MBiIqKYvHixVx44YUAXHzxxXzxxRed55955pkYDAZycnIoLy8H4KijjuKJJ57grrvuYuXKlbhcrr3ea8iQIZ3JGMDLL7/MuHHjGDt2LKtXr97rFKTFYmH27NkAjB8/nsLCwl557t7U32vI4rTWpTt/LgPidv6cBBTtcV7xzrZulFLXKKUKlFIFlZWVfRKksb0WBTSYLKysCs64tvvbAcgMz2RNdfAf26d9BHSAVFcqG+s2AmA2mGn0NuIyu6hurabNH3ztdWLCRG4adxMLihbw+sbXKWoo6n5jIYQQ4ghgtVo7f941U3fsscfy2WefkZSUxGWXXcbTTz+912udTmfnz1u3buW+++7j448/5ttvv2XWrFl7LTdhNps733w0Go34fL7efJxeEbJF/Tr4L3DA86Va6/9orfO11vkxMTF9EBn4bB40EOFr56jY4HI2qzH4H8+62nWMiRkDgFEZMSkTW+q3MCIqOCzZ7m8nwhqBwWAgoIOLDeOd8eR4cnhg6QO8tOElfrPoN9y04CbKmsv6JH4hhBCiP02bNo1XXnmF6upqIDiNOHnyZF588UUAnnvuOaZOnbrPPrZt20ZcXBxXX301V111FUuXLgWCyZTXu/e12A0NDTidTsLD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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "ax = sns.scatterplot(x='index',y='VR',hue='constraint',data=constAnalysisDF)\n", "ax.set(xlabel=\"Properties\", ylabel = \"Violation Ratio (in %)\",xticklabels=[])\n", "# h,l = ax.get_legend_handles_labels()\n", "# plt.legend(h[0:3],l[0:3],bbox_to_anchor=(1.05, 1), loc=0, borderaxespad=0., fontsize=13)\n", "# plt.show(ax)" ] }, { "cell_type": "markdown", "id": "adjustable-geneva", "metadata": {}, "source": [ "## Option 4" ] }, { "cell_type": "code", "execution_count": 73, "id": "furnished-northwest", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "typeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": 77, "id": "proof-screen", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0correctincorrectpathsviolation_ratiototal
Unnamed: 0
P742P7424890389['../../allConstraintsAnalysis/typeConstraint_...0.00181748992
P2663P26635547['../../allConstraintsAnalysis/typeConstraint_...0.012478561
P5105P5105191995['../../allConstraintsAnalysis/typeConstraint_...0.0471702014
P6938P693832['../../allConstraintsAnalysis/typeConstraint_...0.4000005
P3179P3179505213['../../allConstraintsAnalysis/typeConstraint_...0.0025675065
.....................
P1072P10725263123['../../allConstraintsAnalysis/typeConstraint_...0.0228375386
P1073P1073226322['../../allConstraintsAnalysis/typeConstraint_...0.0096282285
P16P1649781238['../../allConstraintsAnalysis/typeConstraint_...0.00475850019
P1465P14651507110['../../allConstraintsAnalysis/typeConstraint_...0.00066315081
P1470P1470240['../../allConstraintsAnalysis/typeConstraint_...0.00000024
\n", "

1456 rows × 6 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 correct incorrect \\\n", "Unnamed: 0 \n", "P742 P742 48903 89 \n", "P2663 P2663 554 7 \n", "P5105 P5105 1919 95 \n", "P6938 P6938 3 2 \n", "P3179 P3179 5052 13 \n", "... ... ... ... \n", "P1072 P1072 5263 123 \n", "P1073 P1073 2263 22 \n", "P16 P16 49781 238 \n", "P1465 P1465 15071 10 \n", "P1470 P1470 24 0 \n", "\n", " paths \\\n", "Unnamed: 0 \n", "P742 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P2663 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P5105 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P6938 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P3179 ['../../allConstraintsAnalysis/typeConstraint_... \n", "... ... \n", "P1072 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P1073 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P16 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P1465 ['../../allConstraintsAnalysis/typeConstraint_... \n", "P1470 ['../../allConstraintsAnalysis/typeConstraint_... \n", "\n", " violation_ratio total \n", "Unnamed: 0 \n", "P742 0.001817 48992 \n", "P2663 0.012478 561 \n", "P5105 0.047170 2014 \n", "P6938 0.400000 5 \n", "P3179 0.002567 5065 \n", "... ... ... \n", "P1072 0.022837 5386 \n", "P1073 0.009628 2285 \n", "P16 0.004758 50019 \n", "P1465 0.000663 15081 \n", "P1470 0.000000 24 \n", "\n", "[1456 rows x 6 columns]" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF" ] }, { "cell_type": "code", "execution_count": 78, "id": "naked-depth", "metadata": {}, "outputs": [], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")[['violation_ratio_type_const','incorrect_type_const']].sort_values(by=['violation_ratio_type_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 80, "id": "thousand-embassy", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")[['violation_ratio_valuetype_const','incorrect_valuetype_const']].sort_values(by=['violation_ratio_valuetype_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 81, "id": "anticipated-calgary", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")[['violation_ratio_codep_const','incorrect_codep_const']].sort_values(by=['violation_ratio_codep_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 83, "id": "vanilla-trouble", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")[['violation_ratio_symm_const','incorrect_symm_const']].sort_values(by=['violation_ratio_symm_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 84, "id": "inappropriate-permit", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")[['violation_ratio_inv_const','incorrect_inv_const']].sort_values(by=['violation_ratio_inv_const'],ascending=False)" ] }, { "cell_type": "code", "execution_count": 85, "id": "technical-colors", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
violation_ratio_inv_constincorrect_inv_const
Unnamed: 0
P16050.940000188
P34480.8793464249
P9250.8333335
P9260.8333335
P10290.8109082037
\n", "
" ], "text/plain": [ " violation_ratio_inv_const incorrect_inv_const\n", "Unnamed: 0 \n", "P1605 0.940000 188\n", "P3448 0.879346 4249\n", "P925 0.833333 5\n", "P926 0.833333 5\n", "P1029 0.810908 2037" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "invConstDF1_1.head()" ] }, { "cell_type": "code", "execution_count": 86, "id": "utility-criticism", "metadata": {}, "outputs": [], "source": [ "typeConstDF1.index.names = ['property']\n", "typeConstDF1 = typeConstDF1.reset_index()[['violation_ratio_type_const','incorrect_type_const']]" ] }, { "cell_type": "code", "execution_count": 87, "id": "according-protection", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1.index.names = ['property']\n", "valTypeConstDF1 = valTypeConstDF1.reset_index()[['violation_ratio_valuetype_const','incorrect_valuetype_const']]" ] }, { "cell_type": "code", "execution_count": 88, "id": "choice-relationship", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1.index.names = ['property']\n", "codepConstDF1_1 = codepConstDF1_1.reset_index()[['violation_ratio_codep_const','incorrect_codep_const']]" ] }, { "cell_type": "code", "execution_count": 89, "id": "atomic-foster", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1.index.names = ['property']\n", "symmConstDF1_1 = symmConstDF1_1.reset_index()[['violation_ratio_symm_const','incorrect_symm_const']]" ] }, { "cell_type": "code", "execution_count": 90, "id": "compatible-silly", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1.index.names = ['property']\n", "invConstDF1_1 = invConstDF1_1.reset_index()[['violation_ratio_inv_const','incorrect_inv_const']]" ] }, { "cell_type": "code", "execution_count": 102, "id": "portuguese-concentrate", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = typeConstDF1.join(valTypeConstDF1).join(codepConstDF1_1).join(symmConstDF1_1).join(invConstDF1_1).rename(columns={'violation_ratio_type_const':'type', 'violation_ratio_valuetype_const': 'value type', 'violation_ratio_codep_const': 'irs', 'violation_ratio_symm_const': 'symmetric', 'violation_ratio_inv_const': 'inverse'}).reset_index()" ] }, { "cell_type": "code", "execution_count": 103, "id": "twenty-gross", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indextypeincorrect_type_constvalue typeincorrect_valuetype_constirsincorrect_codep_constsymmetricincorrect_symm_constinverseincorrect_inv_const
001.041.01369.01.01.01.0000002.00.940000188.0
111.041.05.01.08.00.92452849.00.8793464249.0
221.011.013.01.01.00.628133777.00.8333335.0
331.031.03.01.01.00.256228144.00.8333335.0
441.0641.012.01.042211.00.1612201919.00.8109082037.0
\n", "
" ], "text/plain": [ " index type incorrect_type_const value type incorrect_valuetype_const \\\n", "0 0 1.0 4 1.0 1369.0 \n", "1 1 1.0 4 1.0 5.0 \n", "2 2 1.0 1 1.0 13.0 \n", "3 3 1.0 3 1.0 3.0 \n", "4 4 1.0 64 1.0 12.0 \n", "\n", " irs incorrect_codep_const symmetric incorrect_symm_const inverse \\\n", "0 1.0 1.0 1.000000 2.0 0.940000 \n", "1 1.0 8.0 0.924528 49.0 0.879346 \n", "2 1.0 1.0 0.628133 777.0 0.833333 \n", "3 1.0 1.0 0.256228 144.0 0.833333 \n", "4 1.0 42211.0 0.161220 1919.0 0.810908 \n", "\n", " incorrect_inv_const \n", "0 188.0 \n", "1 4249.0 \n", "2 5.0 \n", "3 5.0 \n", "4 2037.0 " ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF" ] }, { "cell_type": "code", "execution_count": 105, "id": "nervous-herald", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": 98, "id": "standard-conditioning", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF['VR'] *= 100" ] }, { "cell_type": "code", "execution_count": 106, "id": "advisory-nutrition", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexconstraintVR
00type1.0
11type1.0
22type1.0
33type1.0
44type1.0
............
145551451incorrect_inv_constNaN
145561452incorrect_inv_constNaN
145571453incorrect_inv_constNaN
145581454incorrect_inv_constNaN
145591455incorrect_inv_constNaN
\n", "

14560 rows × 3 columns

\n", "
" ], "text/plain": [ " index constraint VR\n", "0 0 type 1.0\n", "1 1 type 1.0\n", "2 2 type 1.0\n", "3 3 type 1.0\n", "4 4 type 1.0\n", "... ... ... ...\n", "14555 1451 incorrect_inv_const NaN\n", "14556 1452 incorrect_inv_const NaN\n", "14557 1453 incorrect_inv_const NaN\n", "14558 1454 incorrect_inv_const NaN\n", "14559 1455 incorrect_inv_const NaN\n", "\n", "[14560 rows x 3 columns]" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF" ] }, { "cell_type": "code", "execution_count": 72, "id": "organic-female", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[Text(0.5, 0, 'Properties'),\n", " Text(0, 0.5, 'Violation Ratio (in %)'),\n", " [Text(-200.0, 0, ''),\n", " Text(0.0, 0, ''),\n", " Text(200.0, 0, ''),\n", " Text(400.0, 0, ''),\n", " Text(600.0, 0, ''),\n", " Text(800.0, 0, ''),\n", " Text(1000.0, 0, ''),\n", " Text(1200.0, 0, ''),\n", " Text(1400.0, 0, ''),\n", " Text(1600.0, 0, '')]]" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "ax = sns.scatterplot(x='index',y='VR',hue='constraint',data=constAnalysisDF)\n", "ax.set(xlabel=\"Properties\", ylabel = \"Violation Ratio (in %)\",xticklabels=[])" ] }, { "cell_type": "code", "execution_count": null, "id": "interior-formula", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "baking-pierce", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "subsequent-reverse", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "unknown-racing", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "lyric-section", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "stuck-criticism", "metadata": {}, "source": [ "# Analysis on properties with constraints" ] }, { "cell_type": "code", "execution_count": 26, "id": "driven-reference", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-04-03 09:14:12 query]: SQL Translation:\r\n", "---------------------------------------------\r\n", " SELECT *\r\n", " FROM graph_1 AS graph_1_c1\r\n", " WHERE graph_1_c1.\"label\"=?\r\n", " PARAS: ['P2302']\r\n", "---------------------------------------------\r\n" ] } ], "source": [ "!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n", " ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n", " --match \"p: (nodeProp1)-[nodePropEdge:P2302]->()\" \\\n", " -o ../../constraintsOP/claims.constraints_list.tsv \\\n", " --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db" ] }, { "cell_type": "code", "execution_count": 39, "id": "exciting-focus", "metadata": {}, "outputs": [], "source": [ "!kgtk unique -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz --column node1 -o ../../constraintsOP/claims.propList.tsv" ] }, { "cell_type": "code", "execution_count": 42, "id": "flush-romania", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "node1\tlabel\tnode2\r\n", "P10\tcount\t17\r\n", "P1000\tcount\t10\r\n", "P1001\tcount\t26\r\n", "P1002\tcount\t9\r\n", "P1003\tcount\t20\r\n", "P1004\tcount\t33\r\n", "P1005\tcount\t21\r\n", "P1006\tcount\t26\r\n", "P1007\tcount\t19\r\n" ] } ], "source": [ "!head ../../constraintsOP/claims.propList.tsv" ] }, { "cell_type": "code", "execution_count": 43, "id": "chemical-harris", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "props = pd.read_csv(\"../../constraintsOP/claims.constraints_list.tsv\", sep='\\t')" ] }, { "cell_type": "code", "execution_count": 44, "id": "higher-underground", "metadata": {}, "outputs": [], "source": [ "props2 = props.groupby(['node1']).node2.apply(list)" ] }, { "cell_type": "code", "execution_count": 45, "id": "light-appreciation", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8100" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(props2)" ] }, { "cell_type": "code", "execution_count": 48, "id": "yellow-helmet", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2336, 8100)" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt = 0\n", "totalCnt = 0\n", "for prop in props2.index:\n", " totalCnt += 1\n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", " continue\n", " else:\n", " cnt += 1\n", "cnt, totalCnt" ] }, { "cell_type": "code", "execution_count": 50, "id": "detected-skiing", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "node1\n", "P10 [Q21502404, Q21510851, Q21510852, Q52004125, Q...\n", "P1000 [Q21510856, Q21510865, Q53869507]\n", "P1001 [Q21502838, Q21503250, Q21510865, Q25796498]\n", "P1002 [Q21503250, Q21510865]\n", "P1003 [Q19474404, Q21502404, Q21502410, Q21510851, Q...\n", " ... \n", "P1563 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1564 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1565 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1566 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n", "P1567 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n", "Name: node2, Length: 500, dtype: object" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "props2.head(500)" ] }, { "cell_type": "code", "execution_count": 32, "id": "processed-perfume", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "props2 = pd.read_csv(\"../../constraintsOP/claims.propList.tsv\", sep='\\t')" ] }, { "cell_type": "code", "execution_count": 33, "id": "increasing-graphics", "metadata": {}, "outputs": [], "source": [ "props2 = props2.groupby(['node1']).node2.apply(list)" ] }, { "cell_type": "code", "execution_count": 34, "id": "posted-ukraine", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8193" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(props2)" ] }, { "cell_type": "code", "execution_count": 35, "id": "fifth-provision", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2415, 8193)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt = 0\n", "totalCnt = 0\n", "for prop in props2.index:\n", " totalCnt += 1\n", " if not(os.path.isfile(\"../../propertiesSplit/claims.\"+ prop +\".tsv\")):\n", " continue\n", " else:\n", " cnt += 1\n", "cnt, totalCnt" ] }, { "cell_type": "code", "execution_count": 50, "id": "married-heating", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "node1\n", "P10 [Q21502404, Q21510851, Q21510852, Q52004125, Q...\n", "P1000 [Q21510856, Q21510865, Q53869507]\n", "P1001 [Q21502838, Q21503250, Q21510865, Q25796498]\n", "P1002 [Q21503250, Q21510865]\n", "P1003 [Q19474404, Q21502404, Q21502410, Q21510851, Q...\n", " ... \n", "P1563 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1564 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1565 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n", "P1566 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n", "P1567 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n", "Name: node2, Length: 500, dtype: object" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "props2.head(500)" ] }, { "cell_type": "code", "execution_count": null, "id": "magnetic-conditions", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "kgtkEnv", "language": "python", "name": "kgtkenv" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "318px" }, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "oldHeight": 122, "position": { "height": "40px", "left": "1170px", "right": "20px", "top": "120px", "width": "250px" }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "varInspector_section_display": "none", "window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }