{ "cells": [ { "cell_type": "markdown", "id": "korean-footage", "metadata": {}, "source": [ "# Comprehensive Constraints Analysis - Final\n", "\n", "In this notebook, for the original dataset, the violations are determined in total." ] }, { "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\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1.head()" ] }, { "cell_type": "code", "execution_count": 107, "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": 107, "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": 111, "id": "bright-impossible", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f49fcb6a808d4cdc962dabc196bda584", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/4810 [00:00(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_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " --graph-cache ~/sqlite3_caches/type_new_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv ;\\\n", " kgtk --debug query -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n", " ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n", " --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node1)-[]->(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_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " --graph-cache ~/sqlite3_caches/type_new_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ; \\\n", " kgtk --debug cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv ; \\\n", " ) } 2>> ../../propertiesSplit_Final/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\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": 112, "id": "electrical-agreement", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1456" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 113, "id": "outside-stupid", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,14):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/typeConstraintValidator\"+str(i)+\".sh\")\n", " " ] }, { "cell_type": "markdown", "id": "competitive-canvas", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 151, "id": "casual-perth", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6360937a1b564337844cf1a476654013", "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": "a3ff347183364768928afec922878a66", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/825 [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
P6213545[../../allConstraintsAnalysis_Final/typeConstr...0.013928
P302237430[../../allConstraintsAnalysis_Final/typeConstr...0.000000
P543790[../../allConstraintsAnalysis_Final/typeConstr...0.000000
P7204030[../../allConstraintsAnalysis_Final/typeConstr...0.000000
P131210547[../../allConstraintsAnalysis_Final/typeConstr...0.006598
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P621 354 5 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P3022 3743 0 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P543 79 0 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P720 403 0 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P1312 1054 7 [../../allConstraintsAnalysis_Final/typeConstr... \n", "\n", " violation_ratio \n", "P621 0.013928 \n", "P3022 0.000000 \n", "P543 0.000000 \n", "P720 0.000000 \n", "P1312 0.006598 " ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF.head()" ] }, { "cell_type": "code", "execution_count": 157, "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_Final/typeConstr...1.0
P5051064[../../allConstraintsAnalysis_Final/typeConstr...1.0
P2303039[../../allConstraintsAnalysis_Final/typeConstr...1.0
P1227019[../../allConstraintsAnalysis_Final/typeConstr...1.0
P2308017[../../allConstraintsAnalysis_Final/typeConstr...1.0
P6001016[../../allConstraintsAnalysis_Final/typeConstr...1.0
P8738014[../../allConstraintsAnalysis_Final/typeConstr...1.0
P538010[../../allConstraintsAnalysis_Final/typeConstr...1.0
P800406[../../allConstraintsAnalysis_Final/typeConstr...1.0
P558904[../../allConstraintsAnalysis_Final/typeConstr...1.0
P651004[../../allConstraintsAnalysis_Final/typeConstr...1.0
P717403[../../allConstraintsAnalysis_Final/typeConstr...1.0
P81703[../../allConstraintsAnalysis_Final/typeConstr...1.0
P488203[../../allConstraintsAnalysis_Final/typeConstr...1.0
P601403[../../allConstraintsAnalysis_Final/typeConstr...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P8138 0 461 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P5051 0 64 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P2303 0 39 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P1227 0 19 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P2308 0 17 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P6001 0 16 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P8738 0 14 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P538 0 10 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P8004 0 6 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P5589 0 4 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P6510 0 4 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P7174 0 3 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P817 0 3 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P4882 0 3 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P6014 0 3 [../../allConstraintsAnalysis_Final/typeConstr... \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", "P817 1.0 \n", "P4882 1.0 \n", "P6014 1.0 " ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 160, "id": "clinical-lawsuit", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 1456.000000\n", "mean 0.100094\n", "std 0.222405\n", "min 0.000000\n", "25% 0.000708\n", "50% 0.009036\n", "75% 0.061943\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 161, "id": "wanted-domestic", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Type Constraint Violation Ratios')" ] }, "execution_count": 161, "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": 162, "id": "sufficient-hollywood", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Type Constraint Violation Ratios (<=0.05)')" ] }, "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": [ "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": 163, "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": 166, "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": 167, "id": "emotional-favorite", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "{'mandatory': {'instanceOf': {'correct': 44771087, 'incorrect': 37435},\n", " 'subclass': {'correct': 1966, 'incorrect': 30},\n", " 'instanceOfOrSubclass': {'correct': 221394, 'incorrect': 204},\n", " 'propCount': 165,\n", " 'correct': 44994447,\n", " 'incorrect': 37669,\n", " 'VR': 0.0008364918939185536},\n", " 'suggestion': {'instanceOf': {'correct': 61720, 'incorrect': 18709},\n", " 'subclass': {'correct': 0, 'incorrect': 0},\n", " 'instanceOfOrSubclass': {'correct': 23314, 'incorrect': 2939},\n", " 'propCount': 11,\n", " 'correct': 85034,\n", " 'incorrect': 21648,\n", " 'VR': 0.20292083013066872},\n", " 'normal': {'instanceOf': {'correct': 398242129, 'incorrect': 3281243},\n", " 'subclass': {'correct': 96605, 'incorrect': 9501},\n", " 'instanceOfOrSubclass': {'correct': 66370309, 'incorrect': 285585},\n", " 'propCount': 1280,\n", " 'correct': 464709043,\n", " 'incorrect': 3576329,\n", " 'VR': 0.007637071781093346}}" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstViolations" ] }, { "cell_type": "code", "execution_count": 168, "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
P2093134805165543246[../../allConstraintsAnalysis_Final/typeConstr...0.004014135348411
P1476398981421858292[../../allConstraintsAnalysis_Final/typeConstr...0.04450341756434
P5773885531433977[../../allConstraintsAnalysis_Final/typeConstr...0.00087438889291
P14333672328312050[../../allConstraintsAnalysis_Final/typeConstr...0.00032836735333
P12153309919524104[../../allConstraintsAnalysis_Final/typeConstr...0.00072833123299
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2093 134805165 543246 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P1476 39898142 1858292 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P577 38855314 33977 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P1433 36723283 12050 [../../allConstraintsAnalysis_Final/typeConstr... \n", "P1215 33099195 24104 [../../allConstraintsAnalysis_Final/typeConstr... \n", "\n", " violation_ratio total \n", "P2093 0.004014 135348411 \n", "P1476 0.044503 41756434 \n", "P577 0.000874 38889291 \n", "P1433 0.000328 36735333 \n", "P1215 0.000728 33123299 " ] }, "execution_count": 168, "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": 169, "id": "grateful-telling", "metadata": {}, "outputs": [], "source": [ "typeConstDF.to_csv('../../allConstraintsAnalysis_Final/typeConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "bearing-kruger", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 124, "id": "veterinary-fault", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9b0ae1938e10429e8c42a485d82b5dcf", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/52 [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\n", "\n", "Here, the constraint indicates that node2 must be an instance of or subclass of the specified class" ] }, { "cell_type": "markdown", "id": "animated-companion", "metadata": {}, "source": [ "### Understand Constraints File" ] }, { "cell_type": "code", "execution_count": 145, "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": 146, "id": "worthy-malawi", "metadata": {}, "outputs": [], "source": [ "dfValueType = dfValueType.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()" ] }, { "cell_type": "code", "execution_count": 147, "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": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType.head()" ] }, { "cell_type": "code", "execution_count": 148, "id": "expired-stuff", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2308', 'P2309', 'P2303', 'P2316', 'P6607', 'P2304'], dtype=object)" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfValueType['label'].unique()" ] }, { "cell_type": "markdown", "id": "digital-harvard", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 121, "id": "white-badge", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f527d490f81947a59a13375a7339ac44", "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_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " --graph-cache ~/sqlite3_caches/valueType_new_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv ;\\\n", " kgtk --debug query -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n", " ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n", " --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node2)-[]->(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_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " --graph-cache ~/sqlite3_caches/valueType_new_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ; \\\n", " kgtk --debug cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv ; \\\n", " ) } 2>> ../../propertiesSplit_Final/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\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": 122, "id": "qualified-cursor", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "897" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 123, "id": "simplified-cameroon", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,9):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/valueTypeConstraintValidator\"+str(i)+\".sh\")\n", " " ] }, { "cell_type": "markdown", "id": "spectacular-warner", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 170, "id": "valid-defense", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "85e58dd5e214481892dc9e3326a3a2ee", "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": "7ab643bdd19f4e2da4972159d4bf906e", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/530 [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_Final/valueTypeC...0.000000
P3092462029[../../allConstraintsAnalysis_Final/valueTypeC...0.006238
P3096111502[../../allConstraintsAnalysis_Final/valueTypeC...0.000179
P450175520[../../allConstraintsAnalysis_Final/valueTypeC...0.011268
P31563480[../../allConstraintsAnalysis_Final/valueTypeC...0.000000
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2302 42211 0 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P3092 4620 29 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P3096 11150 2 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P450 1755 20 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P3156 348 0 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "\n", " violation_ratio \n", "P2302 0.000000 \n", "P3092 0.006238 \n", "P3096 0.000179 \n", "P450 0.011268 \n", "P3156 0.000000 " ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF.head()" ] }, { "cell_type": "code", "execution_count": 176, "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_Final/valueTypeC...1.0
P610409764[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P7374032[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P2839014[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P3028013[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P3027012[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P538010[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P14307[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P442506[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P619105[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P653305[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P653405[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P717403[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P92202[../../allConstraintsAnalysis_Final/valueTypeC...1.0
P66002[../../allConstraintsAnalysis_Final/valueTypeC...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5008 0 331026 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P6104 0 9764 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P7374 0 32 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P2839 0 14 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P3028 0 13 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P3027 0 12 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P538 0 10 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P143 0 7 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P4425 0 6 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P6191 0 5 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P6533 0 5 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P6534 0 5 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P7174 0 3 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P922 0 2 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "P660 0 2 [../../allConstraintsAnalysis_Final/valueTypeC... \n", "\n", " violation_ratio \n", "P5008 1.0 \n", "P6104 1.0 \n", "P7374 1.0 \n", "P2839 1.0 \n", "P3028 1.0 \n", "P3027 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 \n", "P7174 1.0 \n", "P922 1.0 \n", "P660 1.0 " ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 179, "id": "cutting-polyester", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 897.000000\n", "mean 0.087631\n", "std 0.201504\n", "min 0.000000\n", "25% 0.000867\n", "50% 0.008197\n", "75% 0.053288\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valTypeConstDF['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 180, "id": "alert-receiver", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Value Type Constraint Violation Ratios')" ] }, "execution_count": 180, "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": 181, "id": "italian-motel", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Value Type Constraint Violation Ratios (<=0.04)')" ] }, "execution_count": 181, "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": 12, "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": 15, "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": 16, "id": "satellite-concern", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "{'mandatory': {'instanceOf': {'correct': 11391695, 'incorrect': 5338},\n", " 'subclass': {'correct': 44764, 'incorrect': 1},\n", " 'instanceOfOrSubclass': {'correct': 11638, 'incorrect': 47},\n", " 'propCount': 106,\n", " 'correct': 11448097,\n", " 'incorrect': 5386,\n", " 'VR': 0.0004702499667568372},\n", " 'suggestion': {'instanceOf': {'correct': 46036, 'incorrect': 486},\n", " 'subclass': {'correct': 118, 'incorrect': 26},\n", " 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0},\n", " 'propCount': 5,\n", " 'correct': 46154,\n", " 'incorrect': 512,\n", " 'VR': 0.010971585308361549},\n", " 'normal': {'instanceOf': {'correct': 88862554, 'incorrect': 847461},\n", " 'subclass': {'correct': 4373665, 'incorrect': 11677},\n", " 'instanceOfOrSubclass': {'correct': 76234049, 'incorrect': 257925},\n", " 'propCount': 786,\n", " 'correct': 169470268,\n", " 'incorrect': 1117063,\n", " 'VR': 0.0065483350577775325}}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valueTypeConstViolations" ] }, { "cell_type": "code", "execution_count": 17, "id": "fabulous-sudan", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF.to_csv('../../allConstraintsAnalysis_Final/valueTypeConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "traditional-shakespeare", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 127, "id": "spoken-symphony", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5275228e86554cfeb4ac2ffbbf029d30", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/52 [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": [ "\n", "## Item Requires Statement Constraint\n", "\n", "Here, the constraint mentions the other properties that node1 must have and the values that this property must have in few cases" ] }, { "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", "P31 1\n", "P4155 1\n", "P2308 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": "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": 138, "id": "turkish-establishment", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dd67832afa3d4306831f16413a32f4c7", "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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit_Final/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 % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 139, "id": "peripheral-herald", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "527" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 140, "id": "incorporated-logistics", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fCnt" ] }, { "cell_type": "code", "execution_count": 141, "id": "optimum-blowing", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,28):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/codepConst_MSN_Validator\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "indoor-verse", "metadata": {}, "source": [ "#### Version 2 - Mandatory + Normal" ] }, { "cell_type": "code", "execution_count": 142, "id": "furnished-paradise", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ca1160d8482c430aa818f75f9db27c87", "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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit_Final/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 % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 143, "id": "searching-individual", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "468" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 144, "id": "silver-clarity", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,25):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/codepConst_MN_Validator\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "prescription-access", "metadata": {}, "source": [ "#### Version 3 - Mandatory" ] }, { "cell_type": "code", "execution_count": 145, "id": "married-porter", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2bd0042741c1429a9faa460854207956", "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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit_Final/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 % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 146, "id": "according-blackberry", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "78" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 147, "id": "extraordinary-drawing", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,5):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/codepConst_M_Validator\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "subsequent-brown", "metadata": {}, "source": [ "#### Version 4 - Normal" ] }, { "cell_type": "code", "execution_count": 148, "id": "operational-migration", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ae6bc474a4b0407e912989ba0886bc0c", "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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit_Final/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 % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv\\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 149, "id": "harmful-binary", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "418" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 150, "id": "advance-married", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,23):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/codepConst_N_Validator\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "ranging-journal", "metadata": {}, "source": [ "#### Version 5 - Suggestion" ] }, { "cell_type": "code", "execution_count": 151, "id": "missing-jordan", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "39febc19cd2e40ca84236ef34194a392", "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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " commandOtherFiles += \"../../propertiesSplit_Final/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 % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 152, "id": "soviet-forth", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "97" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 153, "id": "racial-stationery", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,6):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/codepConst_S_Validator\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "homeless-pleasure", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 47, "id": "welcome-dependence", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "471428b6d5a3416a8dd76292d0b8b075", "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": "b51f16f69bb8487d9afc530bbc281ad5", "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
P2322120765[../../allConstraintsAnalysis_Final/codependen...
P2643170860[../../allConstraintsAnalysis_Final/codependen...
P1191760182477[../../allConstraintsAnalysis_Final/codependen...
P1629753188[../../allConstraintsAnalysis_Final/codependen...
P3610351964[../../allConstraintsAnalysis_Final/codependen...
............
P19263711424855[../../allConstraintsAnalysis_Final/codependen...
P28736428[../../allConstraintsAnalysis_Final/codependen...
P2875354716[../../allConstraintsAnalysis_Final/codependen...
P28765114[../../allConstraintsAnalysis_Final/codependen...
P290021844813[../../allConstraintsAnalysis_Final/codependen...
\n", "

527 rows × 3 columns

\n", "" ], "text/plain": [ " correct incorrect paths\n", "P2322 1207 65 [../../allConstraintsAnalysis_Final/codependen...\n", "P2643 17086 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P119 176018 2477 [../../allConstraintsAnalysis_Final/codependen...\n", "P1629 7531 88 [../../allConstraintsAnalysis_Final/codependen...\n", "P3610 3519 64 [../../allConstraintsAnalysis_Final/codependen...\n", "... ... ... ...\n", "P19 2637114 24855 [../../allConstraintsAnalysis_Final/codependen...\n", "P2873 642 8 [../../allConstraintsAnalysis_Final/codependen...\n", "P2875 3547 16 [../../allConstraintsAnalysis_Final/codependen...\n", "P2876 51 14 [../../allConstraintsAnalysis_Final/codependen...\n", "P2900 21844 813 [../../allConstraintsAnalysis_Final/codependen...\n", "\n", "[527 rows x 3 columns]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1" ] }, { "cell_type": "code", "execution_count": 55, "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": 56, "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_Final/codependen...1.0
P2302042211[../../allConstraintsAnalysis_Final/codependen...1.0
P30630549[../../allConstraintsAnalysis_Final/codependen...1.0
P2303039[../../allConstraintsAnalysis_Final/codependen...1.0
P5447023[../../allConstraintsAnalysis_Final/codependen...1.0
P5448023[../../allConstraintsAnalysis_Final/codependen...1.0
P2308017[../../allConstraintsAnalysis_Final/codependen...1.0
P756908[../../allConstraintsAnalysis_Final/codependen...1.0
P790307[../../allConstraintsAnalysis_Final/codependen...1.0
P57404[../../allConstraintsAnalysis_Final/codependen...1.0
P230603[../../allConstraintsAnalysis_Final/codependen...1.0
P291601[../../allConstraintsAnalysis_Final/codependen...1.0
P826401[../../allConstraintsAnalysis_Final/codependen...1.0
P243301[../../allConstraintsAnalysis_Final/codependen...1.0
P230701[../../allConstraintsAnalysis_Final/codependen...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1111 0 46327 [../../allConstraintsAnalysis_Final/codependen... \n", "P2302 0 42211 [../../allConstraintsAnalysis_Final/codependen... \n", "P3063 0 549 [../../allConstraintsAnalysis_Final/codependen... \n", "P2303 0 39 [../../allConstraintsAnalysis_Final/codependen... \n", "P5447 0 23 [../../allConstraintsAnalysis_Final/codependen... \n", "P5448 0 23 [../../allConstraintsAnalysis_Final/codependen... \n", "P2308 0 17 [../../allConstraintsAnalysis_Final/codependen... \n", "P7569 0 8 [../../allConstraintsAnalysis_Final/codependen... \n", "P7903 0 7 [../../allConstraintsAnalysis_Final/codependen... \n", "P574 0 4 [../../allConstraintsAnalysis_Final/codependen... \n", "P2306 0 3 [../../allConstraintsAnalysis_Final/codependen... \n", "P2916 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P8264 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2433 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2307 0 1 [../../allConstraintsAnalysis_Final/codependen... \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", "P8264 1.0 \n", "P2433 1.0 \n", "P2307 1.0 " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1.sort_values(by=['violation_ratio', 'incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 59, "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_Final/codependen...0.193676
P7342001246704728[../../allConstraintsAnalysis_Final/codependen...0.260434
P43331028893435543[../../allConstraintsAnalysis_Final/codependen...0.013842
P1951132062384602[../../allConstraintsAnalysis_Final/codependen...0.253584
P5694646728241105[../../allConstraintsAnalysis_Final/codependen...0.049328
P13110056935198870[../../allConstraintsAnalysis_Final/codependen...0.019391
P2755955123578[../../allConstraintsAnalysis_Final/codependen...0.954027
P2860174402886114713[../../allConstraintsAnalysis_Final/codependen...0.000657
P201784792101300[../../allConstraintsAnalysis_Final/codependen...0.544354
P570233261194455[../../allConstraintsAnalysis_Final/codependen...0.038917
P1435189387479479[../../allConstraintsAnalysis_Final/codependen...0.040276
P19223045163926[../../allConstraintsAnalysis_Final/codependen...0.677347
P7084525354258[../../allConstraintsAnalysis_Final/codependen...0.545246
P19711752249904[../../allConstraintsAnalysis_Final/codependen...0.298066
P15983654446915[../../allConstraintsAnalysis_Final/codependen...0.562132
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis_Final/codependen... \n", "P734 2001246 704728 [../../allConstraintsAnalysis_Final/codependen... \n", "P433 31028893 435543 [../../allConstraintsAnalysis_Final/codependen... \n", "P195 1132062 384602 [../../allConstraintsAnalysis_Final/codependen... \n", "P569 4646728 241105 [../../allConstraintsAnalysis_Final/codependen... \n", "P131 10056935 198870 [../../allConstraintsAnalysis_Final/codependen... \n", "P275 5955 123578 [../../allConstraintsAnalysis_Final/codependen... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis_Final/codependen... \n", "P2017 84792 101300 [../../allConstraintsAnalysis_Final/codependen... \n", "P570 2332611 94455 [../../allConstraintsAnalysis_Final/codependen... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis_Final/codependen... \n", "P1922 30451 63926 [../../allConstraintsAnalysis_Final/codependen... \n", "P708 45253 54258 [../../allConstraintsAnalysis_Final/codependen... \n", "P197 117522 49904 [../../allConstraintsAnalysis_Final/codependen... \n", "P1598 36544 46915 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P2214 0.193676 \n", "P734 0.260434 \n", "P433 0.013842 \n", "P195 0.253584 \n", "P569 0.049328 \n", "P131 0.019391 \n", "P275 0.954027 \n", "P2860 0.000657 \n", "P2017 0.544354 \n", "P570 0.038917 \n", "P1435 0.040276 \n", "P1922 0.677347 \n", "P708 0.545246 \n", "P197 0.298066 \n", "P1598 0.562132 " ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 60, "id": "developed-zimbabwe", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 527.000000\n", "mean 0.209456\n", "std 0.306132\n", "min 0.000000\n", "25% 0.001024\n", "50% 0.037037\n", "75% 0.300012\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF1['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 61, "id": "unknown-johnston", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 1 - Violation Ratios')" ] }, "execution_count": 61, "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": 62, "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": 62, "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": 63, "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": 64, "id": "english-difference", "metadata": {}, "outputs": [], "source": [ "codepConstDF1.to_csv('../../allConstraintsAnalysis_Final/codepConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "greater-genetics", "metadata": {}, "source": [ "#### Version 2 - Mand Normal" ] }, { "cell_type": "code", "execution_count": 65, "id": "constant-chance", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF2 = pd.DataFrame(codepConstViolations['Mand_Normal']).T" ] }, { "cell_type": "code", "execution_count": 66, "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_Final/codependen...
P24292228236[../../allConstraintsAnalysis_Final/codependen...
P184357570914889[../../allConstraintsAnalysis_Final/codependen...
P26681680[../../allConstraintsAnalysis_Final/codependen...
P13833172641[../../allConstraintsAnalysis_Final/codependen...
............
P3816177[../../allConstraintsAnalysis_Final/codependen...
P382373760[../../allConstraintsAnalysis_Final/codependen...
P383420700[../../allConstraintsAnalysis_Final/codependen...
P38429338338[../../allConstraintsAnalysis_Final/codependen...
P38583336106[../../allConstraintsAnalysis_Final/codependen...
\n", "

468 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P1196 85037 3039 [../../allConstraintsAnalysis_Final/codependen...\n", "P2429 2228 236 [../../allConstraintsAnalysis_Final/codependen...\n", "P1843 575709 14889 [../../allConstraintsAnalysis_Final/codependen...\n", "P2668 168 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P1383 31726 41 [../../allConstraintsAnalysis_Final/codependen...\n", "... ... ... ...\n", "P3816 17 7 [../../allConstraintsAnalysis_Final/codependen...\n", "P3823 7376 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P3834 2070 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P3842 9338 338 [../../allConstraintsAnalysis_Final/codependen...\n", "P3858 3336 106 [../../allConstraintsAnalysis_Final/codependen...\n", "\n", "[468 rows x 3 columns]" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2" ] }, { "cell_type": "code", "execution_count": 67, "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": 68, "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
P790307[../../allConstraintsAnalysis_Final/codependen...1.0
P2308017[../../allConstraintsAnalysis_Final/codependen...1.0
P291601[../../allConstraintsAnalysis_Final/codependen...1.0
P243301[../../allConstraintsAnalysis_Final/codependen...1.0
P826401[../../allConstraintsAnalysis_Final/codependen...1.0
P230901[../../allConstraintsAnalysis_Final/codependen...1.0
P5447023[../../allConstraintsAnalysis_Final/codependen...1.0
P5448023[../../allConstraintsAnalysis_Final/codependen...1.0
P230701[../../allConstraintsAnalysis_Final/codependen...1.0
P1111046327[../../allConstraintsAnalysis_Final/codependen...1.0
P756908[../../allConstraintsAnalysis_Final/codependen...1.0
P57404[../../allConstraintsAnalysis_Final/codependen...1.0
P230603[../../allConstraintsAnalysis_Final/codependen...1.0
P231301[../../allConstraintsAnalysis_Final/codependen...1.0
P2303039[../../allConstraintsAnalysis_Final/codependen...1.0
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P7903 0 7 [../../allConstraintsAnalysis_Final/codependen... \n", "P2308 0 17 [../../allConstraintsAnalysis_Final/codependen... \n", "P2916 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2433 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P8264 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2309 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P5447 0 23 [../../allConstraintsAnalysis_Final/codependen... \n", "P5448 0 23 [../../allConstraintsAnalysis_Final/codependen... \n", "P2307 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P1111 0 46327 [../../allConstraintsAnalysis_Final/codependen... \n", "P7569 0 8 [../../allConstraintsAnalysis_Final/codependen... \n", "P574 0 4 [../../allConstraintsAnalysis_Final/codependen... \n", "P2306 0 3 [../../allConstraintsAnalysis_Final/codependen... \n", "P2313 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2303 0 39 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P7903 1.0 \n", "P2308 1.0 \n", "P2916 1.0 \n", "P2433 1.0 \n", "P8264 1.0 \n", "P2309 1.0 \n", "P5447 1.0 \n", "P5448 1.0 \n", "P2307 1.0 \n", "P1111 1.0 \n", "P7569 1.0 \n", "P574 1.0 \n", "P2306 1.0 \n", "P2313 1.0 \n", "P2303 1.0 " ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 69, "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_Final/codependen...0.193676
P43331028893435543[../../allConstraintsAnalysis_Final/codependen...0.013842
P2755955123578[../../allConstraintsAnalysis_Final/codependen...0.954027
P2860174402886114713[../../allConstraintsAnalysis_Final/codependen...0.000657
P1435189387479479[../../allConstraintsAnalysis_Final/codependen...0.040276
P7084525354258[../../allConstraintsAnalysis_Final/codependen...0.545246
P19711752249904[../../allConstraintsAnalysis_Final/codependen...0.298066
P15983697846481[../../allConstraintsAnalysis_Final/codependen...0.556932
P1111046327[../../allConstraintsAnalysis_Final/codependen...1.000000
P2248402041566[../../allConstraintsAnalysis_Final/codependen...0.911815
P2325407140611[../../allConstraintsAnalysis_Final/codependen...0.908889
P856123929238107[../../allConstraintsAnalysis_Final/codependen...0.029832
P2243402536540[../../allConstraintsAnalysis_Final/codependen...0.900777
P2244402736527[../../allConstraintsAnalysis_Final/codependen...0.900700
P41335779333607[../../allConstraintsAnalysis_Final/codependen...0.085864
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis_Final/codependen... \n", "P433 31028893 435543 [../../allConstraintsAnalysis_Final/codependen... \n", "P275 5955 123578 [../../allConstraintsAnalysis_Final/codependen... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis_Final/codependen... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis_Final/codependen... \n", "P708 45253 54258 [../../allConstraintsAnalysis_Final/codependen... \n", "P197 117522 49904 [../../allConstraintsAnalysis_Final/codependen... \n", "P1598 36978 46481 [../../allConstraintsAnalysis_Final/codependen... \n", "P1111 0 46327 [../../allConstraintsAnalysis_Final/codependen... \n", "P2248 4020 41566 [../../allConstraintsAnalysis_Final/codependen... \n", "P2325 4071 40611 [../../allConstraintsAnalysis_Final/codependen... \n", "P856 1239292 38107 [../../allConstraintsAnalysis_Final/codependen... \n", "P2243 4025 36540 [../../allConstraintsAnalysis_Final/codependen... \n", "P2244 4027 36527 [../../allConstraintsAnalysis_Final/codependen... \n", "P413 357793 33607 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P2214 0.193676 \n", "P433 0.013842 \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.029832 \n", "P2243 0.900777 \n", "P2244 0.900700 \n", "P413 0.085864 " ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 70, "id": "violent-match", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 468.000000\n", "mean 0.171527\n", "std 0.285675\n", "min 0.000000\n", "25% 0.000690\n", "50% 0.017889\n", "75% 0.208292\n", "max 1.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF2['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 71, "id": "educational-thickness", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 2 - Violation Ratios')" ] }, "execution_count": 71, "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": 72, "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": 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": [ "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": 73, "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": 74, "id": "consecutive-plenty", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF3 = pd.DataFrame(codepConstViolations['Mand']).T" ] }, { "cell_type": "code", "execution_count": 75, "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
P202123031[../../allConstraintsAnalysis_Final/codependen...
P37443110[../../allConstraintsAnalysis_Final/codependen...
P598213260[../../allConstraintsAnalysis_Final/codependen...
P1081123000[../../allConstraintsAnalysis_Final/codependen...
P2095383[../../allConstraintsAnalysis_Final/codependen...
............
P5172400[../../allConstraintsAnalysis_Final/codependen...
P52117171[../../allConstraintsAnalysis_Final/codependen...
P55538761[../../allConstraintsAnalysis_Final/codependen...
P562314720[../../allConstraintsAnalysis_Final/codependen...
P56438992[../../allConstraintsAnalysis_Final/codependen...
\n", "

78 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P2021 2303 1 [../../allConstraintsAnalysis_Final/codependen...\n", "P3744 311 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P5982 1326 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P1081 12300 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P2095 38 3 [../../allConstraintsAnalysis_Final/codependen...\n", "... ... ... ...\n", "P517 240 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P521 1717 1 [../../allConstraintsAnalysis_Final/codependen...\n", "P555 3876 1 [../../allConstraintsAnalysis_Final/codependen...\n", "P5623 1472 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P564 3899 2 [../../allConstraintsAnalysis_Final/codependen...\n", "\n", "[78 rows x 3 columns]" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3" ] }, { "cell_type": "code", "execution_count": 76, "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": 77, "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_Final/codependen...63.000000
P434171[../../allConstraintsAnalysis_Final/codependen...0.142857
P2095383[../../allConstraintsAnalysis_Final/codependen...0.078947
P99096641[../../allConstraintsAnalysis_Final/codependen...0.042443
P3931225064[../../allConstraintsAnalysis_Final/codependen...0.028444
P17313639[../../allConstraintsAnalysis_Final/codependen...0.024793
P2009101915[../../allConstraintsAnalysis_Final/codependen...0.014720
P2461692[../../allConstraintsAnalysis_Final/codependen...0.011834
P826401[../../allConstraintsAnalysis_Final/codependen...0.010000
P16358907[../../allConstraintsAnalysis_Final/codependen...0.007865
P9445774[../../allConstraintsAnalysis_Final/codependen...0.006932
P1560323520[../../allConstraintsAnalysis_Final/codependen...0.006182
P26798875[../../allConstraintsAnalysis_Final/codependen...0.005637
P4511050236[../../allConstraintsAnalysis_Final/codependen...0.003428
P236516505[../../allConstraintsAnalysis_Final/codependen...0.003030
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5051 1 63 [../../allConstraintsAnalysis_Final/codependen... \n", "P4341 7 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P2095 38 3 [../../allConstraintsAnalysis_Final/codependen... \n", "P990 966 41 [../../allConstraintsAnalysis_Final/codependen... \n", "P3931 2250 64 [../../allConstraintsAnalysis_Final/codependen... \n", "P1731 363 9 [../../allConstraintsAnalysis_Final/codependen... \n", "P2009 1019 15 [../../allConstraintsAnalysis_Final/codependen... \n", "P246 169 2 [../../allConstraintsAnalysis_Final/codependen... \n", "P8264 0 1 [../../allConstraintsAnalysis_Final/codependen... \n", "P1635 890 7 [../../allConstraintsAnalysis_Final/codependen... \n", "P944 577 4 [../../allConstraintsAnalysis_Final/codependen... \n", "P1560 3235 20 [../../allConstraintsAnalysis_Final/codependen... \n", "P2679 887 5 [../../allConstraintsAnalysis_Final/codependen... \n", "P451 10502 36 [../../allConstraintsAnalysis_Final/codependen... \n", "P2365 1650 5 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P5051 63.000000 \n", "P4341 0.142857 \n", "P2095 0.078947 \n", "P990 0.042443 \n", "P3931 0.028444 \n", "P1731 0.024793 \n", "P2009 0.014720 \n", "P246 0.011834 \n", "P8264 0.010000 \n", "P1635 0.007865 \n", "P944 0.006932 \n", "P1560 0.006182 \n", "P2679 0.005637 \n", "P451 0.003428 \n", "P2365 0.003030 " ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 81, "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_Final/codependen...0.000573
P3931225064[../../allConstraintsAnalysis_Final/codependen...0.028444
P5051163[../../allConstraintsAnalysis_Final/codependen...63.000000
P9152836445[../../allConstraintsAnalysis_Final/codependen...0.001587
P99096641[../../allConstraintsAnalysis_Final/codependen...0.042443
P4511050236[../../allConstraintsAnalysis_Final/codependen...0.003428
P19716739234[../../allConstraintsAnalysis_Final/codependen...0.000203
P1560323520[../../allConstraintsAnalysis_Final/codependen...0.006182
P2009101915[../../allConstraintsAnalysis_Final/codependen...0.014720
P17313639[../../allConstraintsAnalysis_Final/codependen...0.024793
P16358907[../../allConstraintsAnalysis_Final/codependen...0.007865
P1196880706[../../allConstraintsAnalysis_Final/codependen...0.000068
P26798875[../../allConstraintsAnalysis_Final/codependen...0.005637
P236516505[../../allConstraintsAnalysis_Final/codependen...0.003030
P1411217094[../../allConstraintsAnalysis_Final/codependen...0.000033
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P7959 655743 376 [../../allConstraintsAnalysis_Final/codependen... \n", "P3931 2250 64 [../../allConstraintsAnalysis_Final/codependen... \n", "P5051 1 63 [../../allConstraintsAnalysis_Final/codependen... \n", "P915 28364 45 [../../allConstraintsAnalysis_Final/codependen... \n", "P990 966 41 [../../allConstraintsAnalysis_Final/codependen... \n", "P451 10502 36 [../../allConstraintsAnalysis_Final/codependen... \n", "P197 167392 34 [../../allConstraintsAnalysis_Final/codependen... \n", "P1560 3235 20 [../../allConstraintsAnalysis_Final/codependen... \n", "P2009 1019 15 [../../allConstraintsAnalysis_Final/codependen... \n", "P1731 363 9 [../../allConstraintsAnalysis_Final/codependen... \n", "P1635 890 7 [../../allConstraintsAnalysis_Final/codependen... \n", "P1196 88070 6 [../../allConstraintsAnalysis_Final/codependen... \n", "P2679 887 5 [../../allConstraintsAnalysis_Final/codependen... \n", "P2365 1650 5 [../../allConstraintsAnalysis_Final/codependen... \n", "P141 121709 4 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P7959 0.000573 \n", "P3931 0.028444 \n", "P5051 63.000000 \n", "P915 0.001587 \n", "P990 0.042443 \n", "P451 0.003428 \n", "P197 0.000203 \n", "P1560 0.006182 \n", "P2009 0.014720 \n", "P1731 0.024793 \n", "P1635 0.007865 \n", "P1196 0.000068 \n", "P2679 0.005637 \n", "P2365 0.003030 \n", "P141 0.000033 " ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 82, "id": "emotional-crown", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 78.000000\n", "mean 0.812773\n", "std 7.132789\n", "min 0.000000\n", "25% 0.000000\n", "50% 0.000000\n", "75% 0.000641\n", "max 63.000000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF3['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 83, "id": "certain-freeze", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 3 - Violation Ratios')" ] }, "execution_count": 83, "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": 84, "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": 84, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAEICAYAAADyTpvZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfzklEQVR4nO3debgcVbnv8e+PJExhjNliGAOCIPFowIizIohMCngUmeSAghGRq164CnocchA98RwF9FxFowwRkUEUUAYVGUTUCwYMEEA0QJAhwAYSIOAJJ/DeP9baUGm6e3fv7O61d/r3eZ5+dtWqVVXvqqqut6tq7W5FBGZmZiWtUjoAMzMzJyMzMyvOycjMzIpzMjIzs+KcjMzMrDgnIzMzK87JqAlJkyWFpLGlYxntJB0k6del4xhuK0u7JH1O0g9arLtA0juHuJ63SrpjKPN2m6RbJe1YOo5e0VIyknSgpDmSlkhaKOkySW8ZygolnSHpGUlP5tc8Sf8uad2hLK/XSFpH0smS/p73x515fGIH13mGpBNWZBkRcVZEvKvF9R0q6dqhrkvS/vmEqZrysZIelvTuoS67VjvtaoekbfN7blF+/UbStkNc1qDbIyK+GhGHD0/0y60jJG05MB4Rv4uIrTuwnoEPjkvya4Gk49qY/0XHeERMiYirhzvWTpI0VdINkp7Of6c2qTtB0gWSnpJ0j6QDa6YfmMufknShpAmtzCtpR0nPVfbFEkmHDBb7oMlI0tHAycBXgQ2ATYHvAHsPNm8T/xERawN9wIeANwC/lzR+BZa50pO0KnAFMAXYDVgHeCPwKLBDwbhG2pXjhcB6wNtryncDAvhlqwtSUuIOwgPA+4EJwETg58A5Q1zWhQzT9hgF1ouItUjb7guSdikdUKskbbCC868KXAT8CFgfmA1clMvr+TbwDOm8fhBwiqQpeVlTgO8BB+fpT5PO+4POmz0QEWtVXrMHbUBENHwB6wJLgH2b1FmNlKweyK+TgdWa1D8DOKGmbG1gIXBUpezDwO3AIuBXwGaVaQF8ArgLeAT4T2CVNuY9AvgbsDhvVOVpY4Cv52XeBXw81x9b2R6n5ljvB04AxuRphwLX5vkXAXcDu1fWOwE4PW+jRcCFuXwe8J5KvXF5/dvV2XaHAw8BazXZvq8Ers5tuxXYq2bbfxu4BHgSuA54eZ4m4CTgYeAJ4BbgVcB04H9IB94S4Be5/gLgWOBmYCkwFjgOuDMv+zbgvZV1HwpcO9h+yPH/N/BsXt/iZsdok+0wCzitpuw84KQ8/AbgD3ndNwE7VupdDXwF+D3wD2DLHP9duW13Awc1aNebgD8Bj+e/b6pZ7pfzcp8Efg1MbKEtY0nH4tND2RYtbo8ZwI8q0/bKx8/iHPcrK9MWAO/MwzsAf8z1FgL/F1g1T7sm7+en8r7cD9gRuG9Fj9c67ZtM5b2ay64HPl0Z/wnwYN431wBTcnmzY3ygnQ3Pc6QPCxfnNjwG/I7K+WiQ/fIy4NOk98spQ92/eVnvIp2XVCn7O7Bbnbrjc3tfUSk7E5iZh78K/Lgy7eW5/totzLvcPm45/kEatxuwrLqD69Q5Hvh/wEtJVzp/AL7cpP4Z1CSjXP5D4Nw8vDcwPx+oY4HPA3+o1A3gKtIJflPgr8Dhbcx7MemT4qZA/8DOIp0c/wJskpd9FcsnowtInxbG5/ZeD3w0Tzs0H9AfISW1j+WDdiDRXQKcS/rEMg54ey7/zEC7K/Hf0mDbnQPMbrJtx+W2fw5YFdiJ9CbeurLtB66ixgJnAefkabsCN+TtMpAUJjXaZ6Q36ty8rdbIZfsCG5KuuPcjnYQmVbZPbTJqtB+WqzvEN+abSUl1ILZ1SYllKrBR3g575Fh3yeN9ue7VpDfxlLyd1s3LGtiOk3jhRPZ8rPmYWUT6NDkWOCCPv6Sy3DuBVwBr5PGZg7RjMek9+Bzw+U5sjzw+g5yMcnxP5e0yjnSMzueFJLOAF07SryUl9rGkhHA78Kma/bxlZXxH8omKFThe67RvMsu/V99A+jRf/UD0YdLJdCCxzG12XqppZ8PzHPDvwHdze8YBb6WSEBq8T/8Z+AUpMZ4J7MzyH6hvzvu+3us7DZb7v4HLasouBo6pU3c7aj7cAP+HFxLxRcCxNdOX5P092Lw7kpLVQ6QPbicB4wc9Rgc5gA8CHhykzp3AHpXxXYEFTeq/aKfn8pnA5Xn4MuCwyrRV8oG1WeUA360y/UjgijbmfUtl+nnAcXn4SuCIyrR35fpjSZejS8lv5jz9AOCqPHwoML8ybc0878tIJ6/ngPXrtHtD0htwnTx+PvCZBtvucpqcvEhvggdrDuqzgRmVbf+DyrQ9gL/k4Z1ISf0N1Hyqq7fPSG/UDw9ybMwF9q5sn9pk1Gg/LFd3qC/SVdeBefgjwE15+FjgzJq6vwIOycNXA8dXpo0nnQTeV93/tbGSktD1NdP/CBxaWe7nK9OOBH7ZQjvG57p7dmJ75PEZvJCMvgCcV/Meup989UjlJF1nHZ8CLqjZz42S0ZCP1zrrnZzXtZiUZIN0l6JuUiB9CApg3UGO8YFk1PA8R0pUF1Xb2WQffJl09+EacnJc0eO8suwvUJOsSQl8Rp26b6Xm3J6Piavz8BVUzoW57P68/wab92XAtvm42Ty39XuDxT/YvfBHgYmDPBPYELinMn5PLhvooTPwAOu7g6xrI9IlLsBmwDclLZa0OJcr1xlwb711tjjvg5Xhp4G1Km2pXe6AzUifaBZWlv090ielFy03Ip7Og2uRrh4ei4hFtY2OiAdIt23eJ2k9YHfSAVTPo6TE1siGwL0R8VxNGwZte0RcSbrF8m3gYUmzJK3TZF2w/LZC0r9ImlvZPq8i3cJopNF+aCr3yBo4rm5tUvWHwL/k4YPzOKR9ue9AnDnWt7D8tn2+bRHxFOlK7wjS/r9E0jZ11lf7XoAWt38zef3fBX4o6aW104dhe9Rarh35eLq3ph0D636FpIslPSjpCdLtnVY70wz5eG1iYq5zDOnEOS7HOUbSzNzh5wlSohmo32qsdc9zpMcE84FfS7prkI4TW+eY5gI3R8STLa6/FUtIz5Gr1iF92G23brPpTeeNiAcj4raIeC4i7iZdWb9vsOAHS0Z/JF0N7NOkzgOkN/eATXMZkXroDDzAOqLRAiStBbyTdK8V0oH/0YhYr/JaIyL+UJltk3rrbHHeRhbWWe6Ae0nbYmJluetExBQGdy8wISebemYDHyTd5vpjRNzfoN5vgF2bdPR4ANik5oH7pqRPNIOKiG9FxGtJn2peQbqXDekTZN1ZBgYkbQZ8HziKdFtqPdLzMNWftXkog8T5u8px1Wz7nwnsLOmNpCu+gSR/L+nKqHqMjI+ImY1iiIhfRcQupIT1F1Jba9W+F6CN7T+IVUhX2y9KCMOwPWot147cC28T6rfjFNL22Coi1iHdcmt1n6/Q8dpIRDwbESeSnj0emYsPJN0CfyfpFuXkXD4Qa9NjjubnuScj4piI2IL0rO1oSTs3iO0DpFvFjwDnKnUfP1bScvs1ly9p8Gr0wf5W4NU1vSZfnctr/RUYK2mrStlrKnVvzeMD8WxBur351xbmfVGzaaGzXNMKEfE48EXg25L2kbSmpHGSdpf0H7na2cDnJfUpdS/+Iqk3x6AkrSbptaTePotID/ghfQr8bKVnx7qS9q2Z/dOS1pe0CfBJ0vOYVudt5DzgE5I2lrQ+6YH8wLZYSHrg/A2l7tWrSHq5pLcPttA872XAd3LM4yS9rVLlQmD73I5Gn1YhnUzuBX4qaZscw0vyFegepAe8TwOfyevYEXgPLfTCkvQ6Sa+XNI70vOC/SbcWId373WKQRYwnHXT9eXkfIl0ZDcVDwMZNegG1JCIWkDqVnE26BTzwKftHwHsk7Zo/Ma+u1B1143rLkbSBpL3zh4ClpE+Gz9WpeinwCqUusWMl7UdK7Be3G7ukXSRtl+NbBziR9B65vd1lDWiyPWqdB+wpaed8PBxDane9D3Rrk55FLclXix+rmd7s2Bny8dqimXnZq+c4l5LuLqxJuoJrNU5ocp6T9G5JW+Yk8Dip80294wOAiLgnIo4ndYw5EtgGuE3SjEqdKbF8b7Tqq9EH+6vzuj+Rz61H5fIr68TwFPAz4HhJ4yW9mZSsz8xVziK9R96aj/vjgZ/lxNt0XknvkLSZkk1I++Gixpv2haBauRd5EDCHdJJ6kPQw/k152urAt0hXFQvz8OpNlnUG6eHWwOXercDXSF0yq/UOJvXoeoJ0Aj6tMi14oTfdo8A3yL3aWpx3y5p4TsjDY0kP2x4lPXir15vuFOA+0kH3Z2D/PO1Qap5zVNdFerg9m3TQL8o7tlr3B3n7NuwpV4nh5NyuJaR72SfywkPyKcBvc3y1Pdqeb2u8+P79zqSHpktIn9rOGogF2Ip0W2ExL/QCXEDNcwNSD7TH8vwn5jgOr7d9BtkPq5KOsceAR1o5Rptsr0PzuvarKX99ju8xUgK9BNg0T7t6IO48PqmyTRfn6ds2aNdbSB1BHs9/q8/Fapf7omOmMm1f0hXHkkp8r16RbTHI9pjB8r3p3puPn8dz26dUpj2/74G3VeL8HemkVd0eR5DOC4uBD/Di3nRDOl7rtGsyL+5NJ9L55X+Rbt1dRDrv3EO6XVl9fzY9xmlyniN1HFhAev/eB3xhCPtlPLkzyQru3+3ycfcP4EYqvXJJV62XVcYnkD4IP0XqsHNgzbIOzOVP5W03oZV5gaNJV7dPk85T36KFZ2MDPb1GFUlBui0wv3Qsw0XSF0ldJT9YOhYzs24baf+s2JOU/rP5MNIVnZlZz/F30xUm6SOkS9nLIuKa0vGYmZUwKm/TmZnZysVXRmZmVtyoeWY0ceLEmDx5cukwzMxGlRtuuOGRiOgrHcdgRk0ymjx5MnPmzCkdhpnZqCKp9ltBRiTfpjMzs+KcjMzMrDgnIzMzK87JyMzMinMyMjOz4pyMzMysOCcjMzMrzsnIzMyKczIyM7PiRs03MKyoycdd8vzwgpl7FozEzMxq+crIzMyKczIyM7PinIzMzKw4JyMzMyvOycjMzIrrSjKSNEbSnyVdnMc3l3SdpPmSzpW0ajfiMDOzkalbV0afBG6vjH8NOCkitgQWAYd1KQ4zMxuBOp6MJG0M7An8II8L2Ak4P1eZDezT6TjMzGzk6saV0cnAZ4Dn8vhLgMURsSyP3wds1IU4zMxshOpoMpL0buDhiLhhiPNPlzRH0pz+/v5hjs7MzEaKTl8ZvRnYS9IC4BzS7blvAutJGvgqoo2B++vNHBGzImJaREzr6+vrcKhmZlZKR5NRRHw2IjaOiMnA/sCVEXEQcBXw/lztEOCiTsZhZmYjW6n/MzoWOFrSfNIzpFMLxWFmZiNA1761OyKuBq7Ow3cBO3Rr3WZmNrL5GxjMzKw4JyMzMyvOycjMzIpzMjIzs+KcjMzMrDgnIzMzK87JyMzMinMyMjOz4pyMzMysOCcjMzMrzsnIzMyKczIyM7PinIzMzKw4JyMzMyvOycjMzIpzMjIzs+I6mowkrS7pekk3SbpV0r/l8jMk3S1pbn5N7WQcZmY2snX6l16XAjtFxBJJ44BrJV2Wp306Is7v8PrNzGwU6GgyiogAluTRcfkVnVynmZmNPh1/ZiRpjKS5wMPA5RFxXZ70FUk3SzpJ0moN5p0uaY6kOf39/Z0O1czMCul4MoqIZyNiKrAxsIOkVwGfBbYBXgdMAI5tMO+siJgWEdP6+vo6HaqZmRXStd50EbEYuArYLSIWRrIUOB3YoVtxmJnZyNPp3nR9ktbLw2sAuwB/kTQplwnYB5jXyTjMzGxk63RvuknAbEljSInvvIi4WNKVkvoAAXOBIzoch5mZjWCd7k13M7BdnfKdOrleMzMbXfwNDGZmVpyTkZmZFedkZGZmxTkZmZlZcU5GZmZWnJORmZkV52RkZmbFORmZmVlxTkZmZlack5GZmRXnZGRmZsU5GZmZWXFORmZmVpyTkZmZFedkZGZmxTkZmZlZcR1PRpJWl3S9pJsk3Srp33L55pKukzRf0rmSVu10LGZmNjJ148poKbBTRLwGmArsJukNwNeAkyJiS2ARcFgXYjEzsxGo48kokiV5dFx+BbATcH4unw3s0+lYzMxsZOrKMyNJYyTNBR4GLgfuBBZHxLJc5T5gozrzTZc0R9Kc/v7+boRqZmYFdCUZRcSzETEV2BjYAdimxflmRcS0iJjW19fXyRDNzKygrvami4jFwFXAG4H1JI3NkzYG7u9mLGZmNnJ0ozddn6T18vAawC7A7aSk9P5c7RDgok7HYmZmI9PYwaussEnAbEljSMnvvIi4WNJtwDmSTgD+DJzahVjMzGwE6ngyioibge3qlN9Fen5kZmY9zt/AYGZmxTkZmZlZcU5GZmZWnJORmZkV52RkZmbFORmZmVlxTkZmZlack5GZmRXnZGRmZsU5GZmZWXFtJSNJ/9SpQMzMrHe1e2X0HUnXSzpS0rodicjMzHpOW8koIt4KHARsAtwg6ceSdulIZGZm1jPafmYUEX8DPg8cC7wd+Jakv0j65+EOzszMekO7z4xeLekk0o/j7QS8JyJemYdP6kB8ZmbWA9q9Mvov4EbgNRHx8Yi4ESAiHiBdLS1H0iaSrpJ0m6RbJX0yl8+QdL+kufm1x4o2xMzMRq92f1xvT+AfEfEsgKRVgNUj4umIOLNO/WXAMRFxo6S1Sc+ZLs/TToqIrw85cjMzW2m0e2X0G2CNyviauayuiFhYuXp6knR7b6N2gzQzs5Vbu8lo9YhYMjCSh9dsZUZJk0k/P35dLjpK0s2STpO0fptxmJnZSqTdZPSUpO0HRiS9FvjHYDNJWgv4KfCpiHgCOAV4OTAVWAh8o8F80yXNkTSnv7+/zVDNzGy0aPeZ0aeAn0h6ABDwMmC/ZjNIGkdKRGdFxM8AIuKhyvTvAxfXmzciZgGzAKZNmxZtxmpmZqNEW8koIv4kaRtg61x0R0T8T6P6kgScCtweESdWyidFxMI8+l5gXnthm5nZyqTdKyOA1wGT87zbSyIiftig7puBg4FbJM3NZZ8DDpA0FQhgAfDRIcRhZmYribaSkaQzSc965gLP5uIA6iajiLiWdDuv1qXtrNfMzFZu7V4ZTQO2jQg/vzEzs2HTbm+6eaROC2ZmZsOm3SujicBtkq4Hlg4URsRewxqVmZn1lHaT0YxOBGFmZr2t3a7dv5W0GbBVRPxG0prAmM6EZmZmvaLdn5D4CHA+8L1ctBFw4TDHZGZmPabdDgwfJ/3v0BPw/A/tvXS4gzIzs97SbjJaGhHPDIxIGkv6PyMzM7MhazcZ/VbS54A1JO0C/AT4xfCHZWZmvaTdZHQc0A/cQvoKn0up8wuvZmZm7Wi3N91zwPfzy8zMbFi0+910d1PnGVFEbDFsEZmZWc8ZynfTDVgd2BeYMHzhmJlZL2rrmVFEPFp53R8RJwN7diY0MzPrFe3eptu+MroK6UppKL+JZGZm9rx2E8k3KsPLSD+M94Fhi8bMzHpSu73p3tFOfUmbkH54bwNSx4dZEfFNSROAc0m/GLsA+EBELGpn2WZmtvJo9zbd0c2mR8SJNUXLgGMi4kZJawM3SLocOBS4IiJmSjqO9P9Lx7YTi5mZrTza/afXacDHSF+QuhFwBLA9sHZ+LSciFkbEjXn4SeD2PN/ewOxcbTawzxBiNzOzlUS7z4w2BrbPiQVJM4BLIuKDg80oaTKwHXAdsEFELMyTHiTdxqs3z3RgOsCmm27aZqhmZjZatHtltAHwTGX8GRokkipJawE/BT4VEU9Up0VE0ODLViNiVkRMi4hpfX19bYZqZmajRbtXRj8Erpd0QR7fhxdut9UlaRwpEZ0VET/LxQ9JmhQRCyVNAh5uMw4zM1uJtPtPr18BPgQsyq8PRcRXG9WXJOBU4Paazg0/Bw7Jw4cAF7UTh5mZrVyG8g+rawJPRMTpkvokbR4Rdzeo+2bgYOAWSXNz2eeAmcB5kg4D7sH/q2Rm1tPa7dr9JVKPuq2B04FxwI9ISedFIuJaQA0Wt3M76zYzs5VXux0Y3gvsBTwFEBEPUKdLt5mZWTvaTUbPVHu/SRo//CGZmVmvaTcZnSfpe8B6kj4C/Ab/0J6Zma2glp8Z5Z5x5wLbAE+Qnht9MSIu71BsZmbWI1pORhERki6NiH8CnIDMzGzYtHub7kZJr+tIJGZm1rPa/T+j1wMflLSA1KNOpIumVw93YGZm1jtaSkaSNo2IvwO7djgeMzPrQa1eGV1I+rbueyT9NCLe18GYzMysx7T6zKj6LQpbdCIQMzPrXa0mo2gwbGZmtsJavU33GklPkK6Q1sjD8EIHhnU6Ep2ZmfWElpJRRIzpdCBmZta72v0/IzMzs2HnZGRmZsU5GZmZWXEdT0aSTpP0sKR5lbIZku6XNDe/9uh0HGZmNnJ148roDGC3OuUnRcTU/Lq0C3GYmdkI1fFkFBHXAI91ej1mZjZ6lXxmdJSkm/NtvPXrVZA0XdIcSXP6+/u7HZ+ZmXVJqWR0CvByYCqwEPhGvUoRMSsipkXEtL6+vi6GZ2Zm3VQkGUXEQxHxbEQ8R/rZ8h1KxGFmZiNDkWQkaVJl9L3AvEZ1zcxs5dfuj+u1TdLZwI7AREn3AV8CdpQ0lfSlqwuAj3Y6DjMzG7k6nowi4oA6xad2er1mZjZ6+BsYzMysOCcjMzMrzsnIzMyKczIyM7PinIzMzKw4JyMzMyvOycjMzIpzMjIzs+KcjMzMrDgnIzMzK87JyMzMinMyMjOz4pyMzMysOCcjMzMrzsnIzMyK63gyknSapIclzauUTZB0uaS/5b/rdzoOMzMbubpxZXQGsFtN2XHAFRGxFXBFHjczsx7V8WQUEdcAj9UU7w3MzsOzgX06HYeZmY1cpZ4ZbRARC/Pwg8AG9SpJmi5pjqQ5/f393YvOzMy6qngHhogIIBpMmxUR0yJiWl9fX5cjMzOzbimVjB6SNAkg/324UBxmZjYClEpGPwcOycOHABcVisPMzEaAbnTtPhv4I7C1pPskHQbMBHaR9DfgnXnczMx61NhOryAiDmgwaedOr9vMzEaH4h0YzMzMnIzMzKw4JyMzMyvOycjMzIpzMjIzs+KcjMzMrDgnIzMzK87JyMzMinMyMjOz4pyMzMysOCcjMzMrzsnIzMyKczIyM7PinIzMzKw4JyMzMyvOycjMzIrr+I/rNSNpAfAk8CywLCKmlYzHzMzKKJqMsndExCOlgzAzs3J8m87MzIornYwC+LWkGyRNr50oabqkOZLm9Pf3FwjPzMy6oXQyektEbA/sDnxc0tuqEyNiVkRMi4hpfX19ZSI0M7OOK5qMIuL+/Pdh4AJgh5LxmJlZGcWSkaTxktYeGAbeBcwrFY+ZmZVTsjfdBsAFkgbi+HFE/LJgPGZmVkixZBQRdwGvKbV+MzMbOUp3YDAzM3MyMjOz8pyMzMysOCcjMzMrzsnIzMyKczIyM7PinIzMzKw4JyMzMyvOycjMzIpzMjIzs+KcjMzMrDgnIzMzK87JyMzMinMyMjOz4kr+ntGoNPm4S54fXjBzz0HrVDWqP1zzdkMr7R9pRkrMIyWOlUk3t2mzdXUijl47XnxlZGZmxRVNRpJ2k3SHpPmSjisZi5mZlVMsGUkaA3wb2B3YFjhA0ral4jEzs3JKXhntAMyPiLsi4hngHGDvgvGYmVkhiogyK5beD+wWEYfn8YOB10fEUZU604HpeXRr4I4VWOVE4JEVmH80c9t7k9veu6rt3ywi+koG04oR3ZsuImYBs4ZjWZLmRMS04VjWaOO2u+29ppfbDqOz/SVv090PbFIZ3ziXmZlZjymZjP4EbCVpc0mrAvsDPy8Yj5mZFVLsNl1ELJN0FPArYAxwWkTc2sFVDsvtvlHKbe9NbnvvGnXtL9aBwczMbIC/gcHMzIpzMjIzs+JGTTIa7KuDJK0m6dw8/TpJkyvTPpvL75C062DLzJ0qrsvl5+YOFsV0ue1H5bKQNLHjjRtEl9t+Vi6fJ+k0SeM63sBBdLn9p0q6SdLNks6XtFbHG9hEN9temf4tSUs61qgWdXm/nyHpbklz82tqp9tXV0SM+Bepg8OdwBbAqsBNwLY1dY4EvpuH9wfOzcPb5vqrAZvn5YxptkzgPGD/PPxd4GM91PbtgMnAAmBij+33PQDl19kl93uh9q9TWe6JwHG90vY83zTgTGBJj+33M4D3l2xzRIyaK6NWvjpob2B2Hj4f2FmScvk5EbE0Iu4G5ufl1V1mnmenvAzyMvfpXNMG1bW2A0TEnyNiQacb1aJut/3SyIDrSf/7VlK32/8EQJ5/DaBk76autl3puzL/E/hMh9vViq62faQYLcloI+Deyvh9uaxunYhYBjwOvKTJvI3KXwIszstotK5u6mbbR5oibc+35w4GfrnCLVgxXW+/pNOBB4FtgP8ajkYMUbfbfhTw84hYOEzxr4gSx/1X8u3ZkyStNhyNaNdoSUZm3fQd4JqI+F3pQLotIj4EbAjcDuxXOJyukLQhsC9lk29JnyV9+HgdMAE4tkQQoyUZtfLVQc/XkTQWWBd4tMm8jcofBdbLy2i0rm7qZttHmq63XdKXgD7g6GFpwYopsu8j4lnSbZz3rXALhq6bbd8O2BKYL2kBsKak+cPVkCHo6n6PiIX57vRS4HTSLb3uK/3QqpUX6Zsi7iI9kBt4+Dalps7HWf6B3nl5eArLP9C7i/Qwr+EygZ+wfAeGI3ul7ZVlLqB8B4Zu7/fDgT8Aa5Q+5rvdflKnjS3zvAK+Dny9F9peZ92lOzB0+7ifVNnvJwMzi7S75EZvcwftAfyV1CPkX3PZ8cBeeXh1UhKZT3r4vEVl3n/N890B7N5smbl8i7yM+XmZq/VQ2z9Bup+8DHgA+EEPtX1ZLpubX1/sleOedJfk98AtwDzgLCq961bmttdZb9FkVOC4v7Ky338ErFWizf46IDMzK260PDMyM7OVmJORmZkV52RkZmbFORmZmVlxTkZmZlack5GZmRXnZGRmZsX9f7NlbA8Xj2S0AAAAAElFTkSuQmCC\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": 85, "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": 86, "id": "laughing-pressing", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "codepConstDF4 = pd.DataFrame(codepConstViolations['Normal']).T" ] }, { "cell_type": "code", "execution_count": 87, "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
P3880242457460[../../allConstraintsAnalysis_Final/codependen...
P70802120[../../allConstraintsAnalysis_Final/codependen...
P1540236379456[../../allConstraintsAnalysis_Final/codependen...
P434180[../../allConstraintsAnalysis_Final/codependen...
P50128110[../../allConstraintsAnalysis_Final/codependen...
............
P42134254213[../../allConstraintsAnalysis_Final/codependen...
P423825811[../../allConstraintsAnalysis_Final/codependen...
P4272723226[../../allConstraintsAnalysis_Final/codependen...
P431618372[../../allConstraintsAnalysis_Final/codependen...
P43331028893435543[../../allConstraintsAnalysis_Final/codependen...
\n", "

418 rows × 3 columns

\n", "
" ], "text/plain": [ " correct incorrect paths\n", "P3880 242457 460 [../../allConstraintsAnalysis_Final/codependen...\n", "P7080 212 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P1540 236379 456 [../../allConstraintsAnalysis_Final/codependen...\n", "P4341 8 0 [../../allConstraintsAnalysis_Final/codependen...\n", "P5012 81 10 [../../allConstraintsAnalysis_Final/codependen...\n", "... ... ... ...\n", "P4213 42542 13 [../../allConstraintsAnalysis_Final/codependen...\n", "P4238 258 11 [../../allConstraintsAnalysis_Final/codependen...\n", "P427 27232 26 [../../allConstraintsAnalysis_Final/codependen...\n", "P4316 183 72 [../../allConstraintsAnalysis_Final/codependen...\n", "P433 31028893 435543 [../../allConstraintsAnalysis_Final/codependen...\n", "\n", "[418 rows x 3 columns]" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4" ] }, { "cell_type": "code", "execution_count": 88, "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": 89, "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_Final/codependen...463.270000
P1995809985[../../allConstraintsAnalysis_Final/codependen...124.812500
P76813315143[../../allConstraintsAnalysis_Final/codependen...113.857143
P450141922682[../../allConstraintsAnalysis_Final/codependen...54.133652
P27154158[../../allConstraintsAnalysis_Final/codependen...39.500000
P2755955123578[../../allConstraintsAnalysis_Final/codependen...20.751973
P2376119[../../allConstraintsAnalysis_Final/codependen...19.000000
P39122973705[../../allConstraintsAnalysis_Final/codependen...12.474747
P272012134[../../allConstraintsAnalysis_Final/codependen...11.166667
P2248402041566[../../allConstraintsAnalysis_Final/codependen...10.339801
P2325407140611[../../allConstraintsAnalysis_Final/codependen...9.975682
P2243402536540[../../allConstraintsAnalysis_Final/codependen...9.078261
P2244402736527[../../allConstraintsAnalysis_Final/codependen...9.070524
P34485474302[../../allConstraintsAnalysis_Final/codependen...7.864717
P770765445[../../allConstraintsAnalysis_Final/codependen...6.846154
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1111 0 46327 [../../allConstraintsAnalysis_Final/codependen... \n", "P1995 80 9985 [../../allConstraintsAnalysis_Final/codependen... \n", "P768 133 15143 [../../allConstraintsAnalysis_Final/codependen... \n", "P4501 419 22682 [../../allConstraintsAnalysis_Final/codependen... \n", "P2715 4 158 [../../allConstraintsAnalysis_Final/codependen... \n", "P275 5955 123578 [../../allConstraintsAnalysis_Final/codependen... \n", "P2376 1 19 [../../allConstraintsAnalysis_Final/codependen... \n", "P3912 297 3705 [../../allConstraintsAnalysis_Final/codependen... \n", "P2720 12 134 [../../allConstraintsAnalysis_Final/codependen... \n", "P2248 4020 41566 [../../allConstraintsAnalysis_Final/codependen... \n", "P2325 4071 40611 [../../allConstraintsAnalysis_Final/codependen... \n", "P2243 4025 36540 [../../allConstraintsAnalysis_Final/codependen... \n", "P2244 4027 36527 [../../allConstraintsAnalysis_Final/codependen... \n", "P3448 547 4302 [../../allConstraintsAnalysis_Final/codependen... \n", "P7707 65 445 [../../allConstraintsAnalysis_Final/codependen... \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": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 91, "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_Final/codependen...0.240196
P43331028893435543[../../allConstraintsAnalysis_Final/codependen...0.014037
P2755955123578[../../allConstraintsAnalysis_Final/codependen...20.751973
P2860174402886114713[../../allConstraintsAnalysis_Final/codependen...0.000658
P1435189387479479[../../allConstraintsAnalysis_Final/codependen...0.041966
P7084525354258[../../allConstraintsAnalysis_Final/codependen...1.198992
P19711752349903[../../allConstraintsAnalysis_Final/codependen...0.424623
P15983697846481[../../allConstraintsAnalysis_Final/codependen...1.256991
P1111046327[../../allConstraintsAnalysis_Final/codependen...463.270000
P2248402041566[../../allConstraintsAnalysis_Final/codependen...10.339801
P2325407140611[../../allConstraintsAnalysis_Final/codependen...9.975682
P856123929238107[../../allConstraintsAnalysis_Final/codependen...0.030749
P2243402536540[../../allConstraintsAnalysis_Final/codependen...9.078261
P2244402736527[../../allConstraintsAnalysis_Final/codependen...9.070524
P41335779333607[../../allConstraintsAnalysis_Final/codependen...0.093929
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2214 2962988 711699 [../../allConstraintsAnalysis_Final/codependen... \n", "P433 31028893 435543 [../../allConstraintsAnalysis_Final/codependen... \n", "P275 5955 123578 [../../allConstraintsAnalysis_Final/codependen... \n", "P2860 174402886 114713 [../../allConstraintsAnalysis_Final/codependen... \n", "P1435 1893874 79479 [../../allConstraintsAnalysis_Final/codependen... \n", "P708 45253 54258 [../../allConstraintsAnalysis_Final/codependen... \n", "P197 117523 49903 [../../allConstraintsAnalysis_Final/codependen... \n", "P1598 36978 46481 [../../allConstraintsAnalysis_Final/codependen... \n", "P1111 0 46327 [../../allConstraintsAnalysis_Final/codependen... \n", "P2248 4020 41566 [../../allConstraintsAnalysis_Final/codependen... \n", "P2325 4071 40611 [../../allConstraintsAnalysis_Final/codependen... \n", "P856 1239292 38107 [../../allConstraintsAnalysis_Final/codependen... \n", "P2243 4025 36540 [../../allConstraintsAnalysis_Final/codependen... \n", "P2244 4027 36527 [../../allConstraintsAnalysis_Final/codependen... \n", "P413 357793 33607 [../../allConstraintsAnalysis_Final/codependen... \n", "\n", " violation_ratio \n", "P2214 0.240196 \n", "P433 0.014037 \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.030749 \n", "P2243 9.078261 \n", "P2244 9.070524 \n", "P413 0.093929 " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4.sort_values(by=['incorrect'],ascending=False).head(15)" ] }, { "cell_type": "code", "execution_count": 92, "id": "wireless-passenger", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "count 418.000000\n", "mean 2.454376\n", "std 24.333809\n", "min 0.000000\n", "25% 0.001419\n", "50% 0.026024\n", "75% 0.237647\n", "max 463.270000\n", "Name: violation_ratio, dtype: float64" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "codepConstDF4['violation_ratio'].describe()" ] }, { "cell_type": "code", "execution_count": 93, "id": "civilian-arnold", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Co-Dependency Constraint - Version 4 - Violation Ratios')" ] }, "execution_count": 93, "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": 94, "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": 94, "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[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": 95, "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": "markdown", "id": "published-affiliate", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 2, "id": "aggregate-conservative", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "544889064f324f8ca261b134221aad63", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/52 [00:00(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": 154, "id": "known-wednesday", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-04-15 03:24: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": 155, "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": 156, "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": 157, "id": "burning-involvement", "metadata": {}, "outputs": [], "source": [ "constDF2.to_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)" ] }, { "cell_type": "code", "execution_count": 158, "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": 159, "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": 160, "id": "alone-cattle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2316', 'P2303'], dtype=object)" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].unique()" ] }, { "cell_type": "code", "execution_count": 161, "id": "mighty-ordinary", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "P2316 42\n", "P2303 3\n", "Name: label, dtype: int64" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].value_counts()" ] }, { "cell_type": "code", "execution_count": 162, "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": 163, "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": 163, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "code", "execution_count": 164, "id": "cellular-canal", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.droplevel(1)" ] }, { "cell_type": "code", "execution_count": 165, "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": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "markdown", "id": "primary-netherlands", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 166, "id": "pointed-haven", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c5a4cef38c4c441ea32086962d3ff9f7", "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_new_1_1_'\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_Final/claims.\"+ prop +\".tsv\")):\n", " continue\n", " \n", " command = \"{ time ( kgtk --debug query -i ../../propertiesSplit_Final/claims.\"+ prop +\".tsv \\\n", " ../../propertiesSplit_Final/claims.\"+ prop +\".copy2.tsv \\\n", " --match 'tsv: (node1)-[nodeProp]->(node2), copy2: (node2)-[]->(node1)' \"\n", " \n", " os.system(\"cp ../../propertiesSplit_Final/claims.\"+ prop +\".tsv ../../propertiesSplit_Final/claims.\"+ prop +\".copy2.tsv\")\n", " \n", " if cnt % 60 == 0:\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " command\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_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n", " --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n", " kgtk --debug ifnotexists -i ../../propertiesSplit_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 167, "id": "polar-canada", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "38" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 168, "id": "virtual-disney", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,3):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/symmConst_Validator_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "coral-cheese", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 108, "id": "governmental-backup", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "51714985d51049f9b20d98517ba65416", "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": "7eac3a245b804992ae3c65c43665e227", "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_Final/symmetricC...0.013158
P1639205921[../../allConstraintsAnalysis_Final/symmetricC...0.010096
P1560323520[../../allConstraintsAnalysis_Final/symmetricC...0.006144
P336417840[../../allConstraintsAnalysis_Final/symmetricC...0.000000
P61852790[../../allConstraintsAnalysis_Final/symmetricC...0.000000
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2152 75 1 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1639 2059 21 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1560 3235 20 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P3364 1784 0 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P6185 279 0 [../../allConstraintsAnalysis_Final/symmetricC... \n", "\n", " violation_ratio \n", "P2152 0.013158 \n", "P1639 0.010096 \n", "P1560 0.006144 \n", "P3364 0.000000 \n", "P6185 0.000000 " ] }, "execution_count": 101, "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": 102, "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
P278910353622758[../../allConstraintsAnalysis_Final/symmetricC...0.180199
P188950583728391[../../allConstraintsAnalysis_Final/symmetricC...0.053144
P1971643493077[../../allConstraintsAnalysis_Final/symmetricC...0.018378
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P2789 103536 22758 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1889 505837 28391 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P197 164349 3077 [../../allConstraintsAnalysis_Final/symmetricC... \n", "\n", " violation_ratio \n", "P2789 0.180199 \n", "P1889 0.053144 \n", "P197 0.018378 " ] }, "execution_count": 102, "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": 103, "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_Final/symmetricC...1.000000
P1706452[../../allConstraintsAnalysis_Final/symmetricC...0.928571
P5214181300[../../allConstraintsAnalysis_Final/symmetricC...0.756694
P2652460852[../../allConstraintsAnalysis_Final/symmetricC...0.649390
P870262[../../allConstraintsAnalysis_Final/symmetricC...0.250000
P1382106222811[../../allConstraintsAnalysis_Final/symmetricC...0.209261
P229399802230[../../allConstraintsAnalysis_Final/symmetricC...0.182637
P30321674345[../../allConstraintsAnalysis_Final/symmetricC...0.170877
P45195201018[../../allConstraintsAnalysis_Final/symmetricC...0.096603
P13277734758[../../allConstraintsAnalysis_Final/symmetricC...0.089260
P491532828[../../allConstraintsAnalysis_Final/symmetricC...0.078652
P34032126114[../../allConstraintsAnalysis_Final/symmetricC...0.050893
P4754825129281[../../allConstraintsAnalysis_Final/symmetricC...0.050700
P46023896711571[../../allConstraintsAnalysis_Final/symmetricC...0.046185
P5306595319[../../allConstraintsAnalysis_Final/symmetricC...0.046138
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P5188 0 2 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1706 4 52 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P521 418 1300 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P2652 460 852 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P8702 6 2 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1382 10622 2811 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P2293 9980 2230 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P3032 1674 345 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P451 9520 1018 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P1327 7734 758 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P4915 328 28 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P3403 2126 114 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P47 548251 29281 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P460 238967 11571 [../../allConstraintsAnalysis_Final/symmetricC... \n", "P530 6595 319 [../../allConstraintsAnalysis_Final/symmetricC... \n", "\n", " violation_ratio \n", "P5188 1.000000 \n", "P1706 0.928571 \n", "P521 0.756694 \n", "P2652 0.649390 \n", "P8702 0.250000 \n", "P1382 0.209261 \n", "P2293 0.182637 \n", "P3032 0.170877 \n", "P451 0.096603 \n", "P1327 0.089260 \n", "P4915 0.078652 \n", "P3403 0.050893 \n", "P47 0.050700 \n", "P460 0.046185 \n", "P530 0.046138 " ] }, "execution_count": 103, "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": 105, "id": "legitimate-aspect", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" }, { "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": 106, "id": "junior-marketing", "metadata": {}, "outputs": [], "source": [ "pd.concat([symmConstDF1, symmConstDF2, symmConstDF3]).to_csv('../../allConstraintsAnalysis_Final/symmConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "unlikely-sewing", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 135, "id": "southern-reasoning", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a6d9bf7b68ec4aa6a5403175de15cd14", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/52 [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 node2 must have the specified property and the value must be node1." ] }, { "cell_type": "markdown", "id": "dramatic-manchester", "metadata": {}, "source": [ "### Constraints File" ] }, { "cell_type": "code", "execution_count": 169, "id": "leading-server", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2021-04-15 03:26:20 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": 171, "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": 172, "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": 173, "id": "valid-throat", "metadata": {}, "outputs": [], "source": [ "constDF2.to_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)" ] }, { "cell_type": "code", "execution_count": 174, "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": 175, "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": 176, "id": "attached-rings", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['P2306', 'P2316', 'P4155', 'P2303'], dtype=object)" ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].unique()" ] }, { "cell_type": "code", "execution_count": 177, "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": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires['label'].value_counts()" ] }, { "cell_type": "code", "execution_count": 178, "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": 179, "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": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "code", "execution_count": 180, "id": "extra-stomach", "metadata": {}, "outputs": [], "source": [ "dfItemRequires = dfItemRequires.droplevel(1)" ] }, { "cell_type": "code", "execution_count": 181, "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": 181, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfItemRequires.head()" ] }, { "cell_type": "markdown", "id": "composite-cutting", "metadata": {}, "source": [ "### Query Generator" ] }, { "cell_type": "code", "execution_count": 182, "id": "acoustic-belarus", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "15f80aaf576c45f5bdcd3759e7df4644", "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'\n", "shellFileSuffix = 'invConst_Validator_'\n", "graph_cache_file_prefix = \"inv_new_1_1_\"\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_Final/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_Final/claims.\"+ prop2 +\".tsv\")):\n", " print(f\"File: ../../propertiesSplit_Final/claims.{prop2}.tsv does not exist\")\n", " continue\n", " \n", " if cnt % 60 == 0:\n", " if fOP:\n", " fOP.close()\n", " fCnt += 1\n", " fOP = open(\"../../propertiesSplit_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n", " \n", " \n", " command = \"{ time ( kgtk --debug query -i ../../propertiesSplit_Final/claims.\"+ prop +\".tsv \\\n", " ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n", " \n", " command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_Final/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_Final/\" + 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_Final/claims.\"+ prop +\".tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n", " \n", " commandOPFile = \"-o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n", " -o ../../allConstraintsAnalysis_Final/\" + 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_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n", " --filter-on ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n", "# print(command)\n", " fOP.write(command)\n", " \n", " command = \" kgtk cat -i ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n", " ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n", " -o ../../allConstraintsAnalysis_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_Final/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": 183, "id": "large-climb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "110" ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnt" ] }, { "cell_type": "code", "execution_count": 184, "id": "involved-vietnamese", "metadata": {}, "outputs": [], "source": [ "# import os\n", "# for i in range(1,7):\n", "# os.system(\"screen -dm sh ../../propertiesSplit_Final/checkViolations/invConst_Validator_\"+str(i)+\".sh\")" ] }, { "cell_type": "markdown", "id": "retired-audio", "metadata": {}, "source": [ "### Analyze Violations" ] }, { "cell_type": "code", "execution_count": 113, "id": "specified-evanescence", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e2f270487d664d179f20852ca889bea2", "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": "176eec50bfb740d29687850719d89ed6", "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
P267381969[../../allConstraintsAnalysis_Final/inverseCon...0.077703
P41472719[../../allConstraintsAnalysis_Final/inverseCon...0.032143
P41492724[../../allConstraintsAnalysis_Final/inverseCon...0.014493
P2033183626[../../allConstraintsAnalysis_Final/inverseCon...0.013963
P450175421[../../allConstraintsAnalysis_Final/inverseCon...0.011831
P115116124[../../allConstraintsAnalysis_Final/inverseCon...0.002475
\n", "" ], "text/plain": [ " correct incorrect paths \\\n", "P2673 819 69 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P4147 271 9 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P4149 272 4 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P2033 1836 26 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P450 1754 21 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P1151 1612 4 [../../allConstraintsAnalysis_Final/inverseCon... \n", "\n", " violation_ratio \n", "P2673 0.077703 \n", "P4147 0.032143 \n", "P4149 0.014493 \n", "P2033 0.013963 \n", "P450 0.011831 \n", "P1151 0.002475 " ] }, "execution_count": 118, "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": 119, "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
P143435124745[../../allConstraintsAnalysis_Final/inverseCon...0.574664
P15596320549783[../../allConstraintsAnalysis_Final/inverseCon...0.049145
P15696318340682[../../allConstraintsAnalysis_Final/inverseCon...0.040525
P62972202141[../../allConstraintsAnalysis_Final/inverseCon...0.001949
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1434 3512 4745 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P155 963205 49783 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P156 963183 40682 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P629 72202 141 [../../allConstraintsAnalysis_Final/inverseCon... \n", "\n", " violation_ratio \n", "P1434 0.574664 \n", "P155 0.049145 \n", "P156 0.040525 \n", "P629 0.001949 " ] }, "execution_count": 119, "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": 120, "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
P160512189[../../allConstraintsAnalysis_Final/inverseCon...0.940299
P34485834266[../../allConstraintsAnalysis_Final/inverseCon...0.879769
P92616[../../allConstraintsAnalysis_Final/inverseCon...0.857143
P92515[../../allConstraintsAnalysis_Final/inverseCon...0.833333
P10294752263[../../allConstraintsAnalysis_Final/inverseCon...0.826516
P115671224515[../../allConstraintsAnalysis_Final/inverseCon...0.785058
P8625717[../../allConstraintsAnalysis_Final/inverseCon...0.708333
P51328189[../../allConstraintsAnalysis_Final/inverseCon...0.523529
P42525122024[../../allConstraintsAnalysis_Final/inverseCon...0.446208
P38161410[../../allConstraintsAnalysis_Final/inverseCon...0.416667
P2512210149[../../allConstraintsAnalysis_Final/inverseCon...0.415042
P167764[../../allConstraintsAnalysis_Final/inverseCon...0.400000
P2578989604[../../allConstraintsAnalysis_Final/inverseCon...0.379159
P3261232125[../../allConstraintsAnalysis_Final/inverseCon...0.350140
P5681049450[../../allConstraintsAnalysis_Final/inverseCon...0.300200
\n", "
" ], "text/plain": [ " correct incorrect paths \\\n", "P1605 12 189 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P3448 583 4266 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P926 1 6 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P925 1 5 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P1029 475 2263 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P115 6712 24515 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P8625 7 17 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P5132 81 89 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P425 2512 2024 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P3816 14 10 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P2512 210 149 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P1677 6 4 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P2578 989 604 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P3261 232 125 [../../allConstraintsAnalysis_Final/inverseCon... \n", "P568 1049 450 [../../allConstraintsAnalysis_Final/inverseCon... \n", "\n", " violation_ratio \n", "P1605 0.940299 \n", "P3448 0.879769 \n", "P926 0.857143 \n", "P925 0.833333 \n", "P1029 0.826516 \n", "P115 0.785058 \n", "P8625 0.708333 \n", "P5132 0.523529 \n", "P425 0.446208 \n", "P3816 0.416667 \n", "P2512 0.415042 \n", "P1677 0.400000 \n", "P2578 0.379159 \n", "P3261 0.350140 \n", "P568 0.300200 " ] }, "execution_count": 120, "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": 122, "id": "entire-gauge", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')" ] }, "execution_count": 122, "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": 123, "id": "infectious-clothing", "metadata": {}, "outputs": [], "source": [ "pd.concat([invConstDF1, invConstDF2, invConstDF3]).to_csv('../../allConstraintsAnalysis_Final/invConstDFAnalysis.csv')" ] }, { "cell_type": "markdown", "id": "working-stable", "metadata": {}, "source": [ "### Find out time required" ] }, { "cell_type": "code", "execution_count": 138, "id": "saved-twelve", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "cbac40ccbf5c44a9963ead4fa2f371ac", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/52 [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": "mature-suite", "metadata": {}, "source": [ "# Combine Plots for constraints" ] }, { "cell_type": "code", "execution_count": null, "id": "behind-nurse", "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_Final/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis_Final/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": null, "id": "ultimate-chorus", "metadata": {}, "outputs": [], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")['violation_ratio_type_const'].rename().sort_values()" ] }, { "cell_type": "code", "execution_count": null, "id": "dynamic-castle", "metadata": {}, "outputs": [], "source": [ "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")['violation_ratio_valuetype_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": null, "id": "global-performer", "metadata": {}, "outputs": [], "source": [ "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")['violation_ratio_codep_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": null, "id": "enabling-instrumentation", "metadata": {}, "outputs": [], "source": [ "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")['violation_ratio_symm_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": null, "id": "realistic-cannon", "metadata": {}, "outputs": [], "source": [ "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")['violation_ratio_inv_const'].sort_values()" ] }, { "cell_type": "code", "execution_count": null, "id": "about-coalition", "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": null, "id": "hidden-anaheim", "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": null, "id": "toxic-straight", "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": null, "id": "legal-socket", "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": null, "id": "dietary-attack", "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": null, "id": "familiar-packing", "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": null, "id": "forward-tutorial", "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": null, "id": "mobile-rings", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": null, "id": "contrary-conviction", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 33, "id": "ruled-rough", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Text(0.5, 0, 'Proportion of properties (in %)'),\n", " Text(0, 0.5, 'Violation Ratio (in %)')]" ] }, "execution_count": 33, "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": "amazing-growing", "metadata": {}, "source": [ "## Scatterplot" ] }, { "cell_type": "code", "execution_count": 7, "id": "federal-diversity", "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_Final/typeConstDFAnalysis.csv\")\n", "typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n", "\n", "valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/valueTypeConstDFAnalysis.csv\")\n", "valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n", "\n", "codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis_Final/codepConstDFAnalysis.csv\")\n", "codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n", "\n", "symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/symmConstDFAnalysis.csv\")\n", "symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n", "\n", "invConstDF = pd.read_csv(\"../../allConstraintsAnalysis_Final/invConstDFAnalysis.csv\")\n", "invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])" ] }, { "cell_type": "code", "execution_count": 8, "id": "polish-supplier", "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.940299
P34480.879769
P9260.857143
P9250.833333
P10290.826516
\n", "
" ], "text/plain": [ " violation_ratio_inv_const\n", "Unnamed: 0 \n", "P1605 0.940299\n", "P3448 0.879769\n", "P926 0.857143\n", "P925 0.833333\n", "P1029 0.826516" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")[['violation_ratio_type_const']].sort_values(by=['violation_ratio_type_const'],ascending=False)\n", "valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")[['violation_ratio_valuetype_const']].sort_values(by=['violation_ratio_valuetype_const'],ascending=False)\n", "codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")[['violation_ratio_codep_const']].sort_values(by=['violation_ratio_codep_const'],ascending=False)\n", "symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")[['violation_ratio_symm_const']].sort_values(by=['violation_ratio_symm_const'],ascending=False)\n", "invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")[['violation_ratio_inv_const']].sort_values(by=['violation_ratio_inv_const'],ascending=False)\n", "invConstDF1_1.head()" ] }, { "cell_type": "code", "execution_count": 9, "id": "sexual-giant", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1456, 897, 527, 38, 110)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(typeConstDF1), len(valTypeConstDF1), len(codepConstDF1_1), len(symmConstDF), len(invConstDF1_1)" ] }, { "cell_type": "code", "execution_count": 10, "id": "photographic-signature", "metadata": {}, "outputs": [], "source": [ "typeConstDF1.index.names = ['property']\n", "typeConstDF1 = typeConstDF1.reset_index()[['violation_ratio_type_const']]\n", "valTypeConstDF1.index.names = ['property']\n", "valTypeConstDF1 = valTypeConstDF1.reset_index()[['violation_ratio_valuetype_const']]\n", "codepConstDF1_1.index.names = ['property']\n", "codepConstDF1_1 = codepConstDF1_1.reset_index()[['violation_ratio_codep_const']]\n", "symmConstDF1_1.index.names = ['property']\n", "symmConstDF1_1 = symmConstDF1_1.reset_index()[['violation_ratio_symm_const']]\n", "invConstDF1_1.index.names = ['property']\n", "invConstDF1_1 = invConstDF1_1.reset_index()[['violation_ratio_inv_const']]\n", "\n", "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": 11, "id": "unique-marijuana", "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": 12, "id": "social-pipeline", "metadata": {}, "outputs": [], "source": [ "constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')" ] }, { "cell_type": "code", "execution_count": 13, "id": "institutional-imaging", "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", "
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": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constAnalysisDF.head()" ] }, { "cell_type": "code", "execution_count": 16, "id": "straight-purpose", "metadata": {}, "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": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Ua9tZNT38ccf/52lxK/k7/7u76ivr2fPnj1cffXVPPbYY7XGS1pr9uzZww9+8AMuvPDCUaOcn/nMZ/jc5z7H448/Puo1HThwgM985jNUKhXi8ThLliz5o16XEEKI40caGAkhhBCvkbq6Or71rW/x4Q9/mG3btnHFFVeQSqXwfb/W1Gj27Nl8+ctffsXnuPrqq3nmmWf4H//jf/AP//APOI5TC2GJRIKvfvWrY7r82rbNt771LT7xiU+wZs0aPv/5z/O//tf/IpvN4rouxWKx9tjftezM73Luuefy7//+7+zZs4ezzjqLpqamWqnwI4888nv3nzBhAt/97nf5+Mc/zvbt2/nIRz6CbdukUikKhUItmAKjlrapVCrcc8893H777SilyGQyeJ5HqVQCopLdL37xi69rN2AhhBCvDwmjQgghxGto4cKF3H333Xzve9/jN7/5DZ2dnZimyfz587nooou45ppriMVir7i/4zjcdNNN/Nd//Rd33303nZ2dNDY2cuqpp/KJT3yCadOmHXW/pqYmbr75Zu655x7uvPNONm3axNDQELZtM23aNBYuXMjZZ5/NW9/61j/qdTU2NvLDH/6Qb37zm6xZs4b+/v7a2qWv1sKFC7n33nu55ZZbePjhh9m1axe5XI5UKsXs2bNZtGgR559/PsuWLavt83d/93csXryYp59+mr1799LT00MQBEyaNImlS5dy3XXXMWfOnD/qNQkhhDi+lP5jOhEIIYQQ4jX12c9+ljvuuINPfOITfPKTnzzepyOEEEK87mTOqBBCCCGEEEKIY07CqBBCCCGEEEKIY07CqBBCCCGEEEKIY07CqBBCCCGEEEKIY04aGAkhhBBCCCGEOOZkZFQIIYQQQgghxDEnYVQIIYQQQgghxDEnYVQIIYQQQgghxDEnYVQIIYQQQgghxDEnYVQIIYQQQgghxDEnYVQIIYQQQgghxDH3/wNtlYiAMH946wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15, 10))\n", "sns.set(font_scale=2)\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": "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_Final/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_Final/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": true }, "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 }