{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from sklearn import metrics\n", "from sklearn.manifold import TSNE\n", "from sklearn.preprocessing import StandardScaler\n", "import ase.io\n", "import chemiscope\n", "from pymatgen.core import Structure, Lattice, Composition\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df = pd.read_json('topoclass.json.gz')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDsubsetMAT_TYPETQC_TYPEstructureMP_IDICSD_IDAtomicOrbitals|HOMO_characterAtomicOrbitals|HOMO_elementAtomicOrbitals|HOMO_energy...BondFractions|Ho - La bond frac.BondFractions|Au - Pd bond frac.BondFractions|Dy - Hg bond frac.BondFractions|Er - Yb bond frac.BondFractions|Hg - Tm bond frac.BondFractions|Er - Hg bond frac.BondFractions|Be - Sc bond frac.BondFractions|Hg - Tb bond frac.BondFractions|Be - Lu bond frac.BondFractions|Er - Y bond frac.
0MAT00026906M/TTINone{'@module': 'pymatgen.core.structure', '@class...mp-10008NaN120-0.141411...0000000.000.00
1MAT00020270M/TTrINone{'@module': 'pymatgen.core.structure', '@class...mp-1001604NaN216-0.261676...0000000.000.00
2MAT00015322M/THSLSMNone{'@module': 'pymatgen.core.structure', '@class...mp-1001605NaN459-0.155138...0000000.000.00
3MAT00025094M/TTCINone{'@module': 'pymatgen.core.structure', '@class...mp-1001844NaN27-0.266297...0000000.000.00
4MAT00025479M/THSLSMNone{'@module': 'pymatgen.core.structure', '@class...mp-1002220NaN251-0.185623...0000000.000.00
..................................................................
35603MAT00038674M&TTrILCEBR{'@module': 'pymatgen.core.structure', '@class...mp-69673628541.029-0.415606...0000000.000.00
35604MAT00038675M&TTrILCEBR{'@module': 'pymatgen.core.structure', '@class...mp-70727620730.027-0.266297...0000000.000.00
35605MAT00038676M&TTrILCEBR{'@module': 'pymatgen.core.structure', '@class...mp-70733467509.028-0.338381...0000000.000.00
35606MAT00038677M&TTrILCEBR{'@module': 'pymatgen.core.structure', '@class...mp-70789759327.028-0.338381...0000000.000.00
35607MAT00038678M&TTrILCEBR{'@module': 'pymatgen.core.structure', '@class...mp-919879005.0215-0.206080...0000000.000.00
\n", "

35608 rows × 4717 columns

\n", "
" ], "text/plain": [ " ID subset MAT_TYPE TQC_TYPE \\\n", "0 MAT00026906 M/T TI None \n", "1 MAT00020270 M/T TrI None \n", "2 MAT00015322 M/T HSLSM None \n", "3 MAT00025094 M/T TCI None \n", "4 MAT00025479 M/T HSLSM None \n", "... ... ... ... ... \n", "35603 MAT00038674 M&T TrI LCEBR \n", "35604 MAT00038675 M&T TrI LCEBR \n", "35605 MAT00038676 M&T TrI LCEBR \n", "35606 MAT00038677 M&T TrI LCEBR \n", "35607 MAT00038678 M&T TrI LCEBR \n", "\n", " structure MP_ID ICSD_ID \\\n", "0 {'@module': 'pymatgen.core.structure', '@class... mp-10008 NaN \n", "1 {'@module': 'pymatgen.core.structure', '@class... mp-1001604 NaN \n", "2 {'@module': 'pymatgen.core.structure', '@class... mp-1001605 NaN \n", "3 {'@module': 'pymatgen.core.structure', '@class... mp-1001844 NaN \n", "4 {'@module': 'pymatgen.core.structure', '@class... mp-1002220 NaN \n", "... ... ... ... \n", "35603 {'@module': 'pymatgen.core.structure', '@class... mp-696736 28541.0 \n", "35604 {'@module': 'pymatgen.core.structure', '@class... mp-707276 20730.0 \n", "35605 {'@module': 'pymatgen.core.structure', '@class... mp-707334 67509.0 \n", "35606 {'@module': 'pymatgen.core.structure', '@class... mp-707897 59327.0 \n", "35607 {'@module': 'pymatgen.core.structure', '@class... mp-9198 79005.0 \n", "\n", " AtomicOrbitals|HOMO_character AtomicOrbitals|HOMO_element \\\n", "0 1 20 \n", "1 2 16 \n", "2 4 59 \n", "3 2 7 \n", "4 2 51 \n", "... ... ... \n", "35603 2 9 \n", "35604 2 7 \n", "35605 2 8 \n", "35606 2 8 \n", "35607 2 15 \n", "\n", " AtomicOrbitals|HOMO_energy ... BondFractions|Ho - La bond frac. \\\n", "0 -0.141411 ... 0 \n", "1 -0.261676 ... 0 \n", "2 -0.155138 ... 0 \n", "3 -0.266297 ... 0 \n", "4 -0.185623 ... 0 \n", "... ... ... ... \n", "35603 -0.415606 ... 0 \n", "35604 -0.266297 ... 0 \n", "35605 -0.338381 ... 0 \n", "35606 -0.338381 ... 0 \n", "35607 -0.206080 ... 0 \n", "\n", " BondFractions|Au - Pd bond frac. BondFractions|Dy - Hg bond frac. \\\n", "0 0 0 \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", "4 0 0 \n", "... ... ... \n", "35603 0 0 \n", "35604 0 0 \n", "35605 0 0 \n", "35606 0 0 \n", "35607 0 0 \n", "\n", " BondFractions|Er - Yb bond frac. BondFractions|Hg - Tm bond frac. \\\n", "0 0 0 \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", "4 0 0 \n", "... ... ... \n", "35603 0 0 \n", "35604 0 0 \n", "35605 0 0 \n", "35606 0 0 \n", "35607 0 0 \n", "\n", " BondFractions|Er - Hg bond frac. BondFractions|Be - Sc bond frac. \\\n", "0 0 0.0 \n", "1 0 0.0 \n", "2 0 0.0 \n", "3 0 0.0 \n", "4 0 0.0 \n", "... ... ... \n", "35603 0 0.0 \n", "35604 0 0.0 \n", "35605 0 0.0 \n", "35606 0 0.0 \n", "35607 0 0.0 \n", "\n", " BondFractions|Hg - Tb bond frac. BondFractions|Be - Lu bond frac. \\\n", "0 0 0.0 \n", "1 0 0.0 \n", "2 0 0.0 \n", "3 0 0.0 \n", "4 0 0.0 \n", "... ... ... \n", "35603 0 0.0 \n", "35604 0 0.0 \n", "35605 0 0.0 \n", "35606 0 0.0 \n", "35607 0 0.0 \n", "\n", " BondFractions|Er - Y bond frac. \n", "0 0 \n", "1 0 \n", "2 0 \n", "3 0 \n", "4 0 \n", "... ... \n", "35603 0 \n", "35604 0 \n", "35605 0 \n", "35606 0 \n", "35607 0 \n", "\n", "[35608 rows x 4717 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "classes = {\"TrI\": 0, \"NTM\": 1, \"TI\": 2, \"TCI\": 3, \"HSPSM\": 4, \"HSLSM\": 5}\n", "mpe = \"MaximumPackingEfficiency|max packing efficiency\"\n", "fpv = \"ValenceOrbital|frac p valence electrons\"\n", "deltaH = \"Miedema|Miedema_deltaH_inter\"\n", "mat_type = \"MAT_TYPE\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "X = df[[mpe,fpv]].values\n", "X_scaled = StandardScaler().fit_transform(X)\n", "tsne = TSNE(n_components=2, init='pca', random_state=0)\n", "X_tsne = tsne.fit_transform(X_scaled)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "df[\"tSNE_1\"]=X_tsne[:,0]\n", "df[\"tSNE_2\"]=X_tsne[:,1]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "actual = (df[mat_type] == \"TrI\")\n", "predicted = (df[\"tSNE_1\"] > 0)\n", "confusion_matrix = metrics.confusion_matrix(actual, predicted)\n", "#TP = confusion_matrix[0,0]\n", "#FP = confusion_matrix[1,0]\n", "#FN = confusion_matrix[0,1]\n", "#TN = confusion_matrix[1,1]\n", "metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [\"NTM\", \"TrI\"]).plot(values_format='')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.7575544821388452\n", "Precision: 0.9218279209909608\n", "Recall: 0.6955331958068455\n", "F1: 0.7928494301139772\n" ] } ], "source": [ "print(\"Accuracy: \", metrics.accuracy_score(actual, predicted))\n", "print(\"Precision:\", metrics.precision_score(actual, predicted))\n", "print(\"Recall: \", metrics.recall_score(actual, predicted))\n", "print(\"F1: \", metrics.f1_score(actual, predicted))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "frames = []\n", "for ind, row in df.iterrows():\n", " struc = Structure.from_dict(row[\"structure\"])\n", " atoms = struc.to_ase_atoms()\n", " atoms.info = {\n", " \"mat_id\": ind,\n", " \"mpe\": row[mpe],\n", " \"fpv\": row[fpv],\n", " \"deltaH\": row[deltaH],\n", " \"tSNE_1\": -row[\"tSNE_1\"],\n", " \"tSNE_2\": row[\"tSNE_2\"],\n", " \"mat_type_2\": int(classes[row[mat_type]]>0),\n", " \"mat_type_5\": classes[row[mat_type]]\n", " }\n", " frames.append(atoms)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "12a880bd4e41427b96a35cd5e0876bbc", "version_major": 2, "version_minor": 0 }, "text/html": [ "" ], "text/plain": [ "