Hallo.
Im vorherigen Artikel habe ich Materialforschung zum Thema maschinelles Lernen vorgestellt. Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen
Dieses Mal werde ich pymatgen </ b> (Python Materials Genomics), eine Open-Source-Python-Bibliothek, für meine eigene Studie vorstellen. Ich möchte, dass Sie mit der Materialforschung in Kontakt kommen.
Nebenbei habe ich eine Facebook-Gruppe namens Materials Informatics Young People's Association gegründet. Es gibt nur noch wenige Leute, aber wenn Sie interessiert sind, können Sie mich gerne kontaktieren (fb oder E-Mail auf Ihrem Qiita-Konto). Ich möchte Informationen über Materialinformatik austauschen und Lernsitzungen abhalten.
dann fangen wir an.
Wenn Sie sich sofort wie ein Materialforscher fühlen möchten, können Sie zur Installation springen. Die Grundlagen basieren auf dem offiziellen Dokument von pymatgen. Wenn Sie also keine Schwierigkeiten haben, Englisch zu lesen, können Sie es so verstehen, als ob Sie dies lesen. dann fangen wir an.
Dies ist ein Zitat aus oben. Wenn Sie es lesen, überspringen Sie es bitte. </ b> → [Was ist Pymatgen](Was ist #pymatgen)
Zunächst einmal denke ich, dass Materialforschung so etwas wie Material ist. Wie Sie sagten, gibt es verschiedene Materialien wie Keramik, Polymere und Metalle.
Zum Beispiel iPhone
Es gibt Hunderte solcher kleinen Keramikkondensatoren.
Und um einen von Apple ausgewählten Hochleistungskondensator herzustellen,
・ Welche Elemente sollten kombiniert werden? ・ Was für einen Prozess sollten Sie durchführen?
Es wird das schwierige Problem lösen. Hier ist ein Beispiel, wie man es löst.
Es ist wie es ist. Dies ist nur ein Beispiel, aber was ist Materialforschung?
Machen Sie großartige Materialien, indem Sie Prozessoptimierung, Messung, Theorie, Analyse, Exploration usw. voll ausnutzen.
Es ist chaotisch, aber es sieht so aus.
Einfach ausgedrückt ist es ein nützliches Werkzeug zur Analyse von Materialien.
Schauen Sie sich zunächst das folgende Diagramm an, um eine ungefähre Vorstellung von der Materialanalyse zu erhalten. Aus Wikipedia
Wie ich es in der High School getan habe, bestehen Substanzen aus Atomen und jede hat eine Vielzahl von Strukturen. Der Zweck der Materialanalyse ist Welche Art von Atom hat welche Struktur und welche Eigenschaft? </ b> Die Lösung besteht darin, Physik zu verwenden.
Das Hauptthema ist also Pymatgen,
(1) Viele nützliche Tools zur Visualisierung von Materialien und zur Verwendung von Analysedaten ② Einfache Verknüpfung mit den derzeit für die Materialanalyse verwendeten Tools
Es ist eine Open Source </ b> Python-Bibliothek, die den Vorteil hat. Bitte beachten Sie, dass auf der GUI keine Analysesoftware ausgeführt wird.
Als spezifische Funktion
Ist in der offiziellen Dokumentation aufgeführt.
Von hier aus fühlen wir uns wie ein Materialforscher, indem wir tatsächlich Pymatgen verwenden.
pymatgen.core.periodic_table module
Referenz: http://pymatgen.org/pymatgen.core.html#module-pymatgen.core Schauen wir uns zunächst die Module an, die zur Darstellung von Atomen und Strukturen verwendet werden, die von Pymatgen bereitgestellt werden. Ein Periodensystem ist ein Periodensystem </ b>, das Sie alle kennen. Einführung in die Elementklasse, Specie class </ b> dieses Moduls. Die Element-Klasse erbt von der Klasse Enum und ermöglicht das Definieren von Atomen, die dem Periodensystem entsprechen.
class Element(Enum):
def __init__(self, symbol):
self.symbol = "%s" % symbol
d = _pt_data[symbol]
...
Da periodic_table.json in der pymatgen-Bibliothek beim Importieren des Moduls in _pt_data geladen wird,
>>> fe = Element("Fe")
>>> fe.data
{'Superconduction temperature': 'no data K', 'Molar volume': '7.09 cm<sup>3</sup>', 'Ionic radii hs': {'2': 0.92, '3': 0.785}, 'Melting point': '1811 K', 'Atomic radius': 1.4, 'Mineral hardness': '4.0', 'Electrical resistivity': '10 10<sup>-8</sup> Ω m', 'Vickers hardness': '608 MN m<sup>-2</sup>', 'Brinell hardness': '490 MN m<sup>-2</sup>', 'Youngs modulus': '211 GPa', 'Ionic radii': {'2': 0.92, '3': 0.785}, 'Atomic no': 26, 'Mendeleev no': 61, 'Thermal conductivity': '80 W m<sup>-1</sup> K<sup>-1</sup>', 'Reflectivity': '65 %', 'Liquid range': '1323 K', 'Ionic radii ls': {'2': 0.75, '6': 0.39, '3': 0.69, '4': 0.725}, 'Rigidity modulus': '82 GPa', 'X': 1.83, 'Critical temperature': 'no data K', 'Poissons ratio': '0.29', 'Oxidation states': [-2, -1, 1, 2, 3, 4, 5, 6], 'Van der waals radius': 'no data', 'Velocity of sound': '4910 m s<sup>-1</sup>', 'Coefficient of linear thermal expansion': '11.8 x10<sup>-6</sup>K<sup>-1</sup>', 'Bulk modulus': '170 GPa', 'Common oxidation states': [2, 3], 'Name': 'Iron', 'Atomic mass': 55.845, 'Electronic structure': '[Ar].3d<sup>6</sup>.4s<sup>2</sup>', 'Density of solid': '7874 kg m<sup>-3</sup>', 'Refractive index': 'no data', 'Atomic radius calculated': 1.56, 'Boiling point': '3134 K'}
Sie können problemlos ein Objekt mit verschiedenen Informationen wie Ionenradius, Schmelzpunkt, Widerstand, Masse und elektronischer Struktur des Atoms erstellen. Wenn Sie auf die einzelnen Attribute zugreifen möchten, geben Sie die unten gezeigten Attribute an und rufen Sie sie ab. Sie können die Attributliste auch anzeigen, indem Sie sich die Quelle oder das Dokument ansehen.
ionic_radii_fe = fe.ionic_radii
Schauen wir uns als nächstes die Specie-Klasse an. In der Speziesklasse können Atome unter Berücksichtigung der Oxidationszahl ausgedrückt werden.
supported_properties = ("spin",)
class Specie(symbol, oxidation_state, properties=None):
def __init__(self, symbol, oxidation_state, properties=None):
self._el = Element(symbol)
self._oxi_state = oxidation_state
self._properties = properties if properties else {}
for k in self._properties.keys():
if k not in Specie.supported_properties:
raise ValueError("{} is not a supported property".format(k))
Den Elementen können Oxidationszahlen und -eigenschaften zugewiesen werden. Sie können es sich einfach als erweiterte Version von Element vorstellen. Es wird empfohlen, dass das Specie-Objekt die ideale Oxidationszahl und -eigenschaften aufweist. Das später beschriebene Site-Objekt kann den Oxidationszustand und den Spinzustand des Elements in der Kristallstruktur ausdrücken. Speichern Sie daher das Simulationsergebnis. Verwenden Sie dazu das Site-Objekt.
pymatgen.core.composition http://pymatgen.org/pymatgen.core.composition.html#module-pymatgen.core.composition Dieses Modul ist ein Modul, das die Zusammensetzung von Substanzen wie H2O und NaCl </ b> ausdrückt. Hier sind die am häufigsten verwendeten Kompositionsklassenklassen.
class Composition(collections.Hashable, collections.Mapping, MSONable):
def __init__(self, *args, **kwargs):
self.allow_negative = kwargs.pop('allow_negative', False)
# it's much faster to recognize a composition and use the elmap than
# to pass the composition to dict()
if len(args) == 1 and isinstance(args[0], Composition):
elmap = args[0]
elif len(args) == 1 and isinstance(args[0], six.string_types):
elmap = self._parse_formula(args[0])
else:
elmap = dict(*args, **kwargs)
elamt = {}
self._natoms = 0
for k, v in elmap.items():
...
Es ist selbst auf einen Blick schwer zu verstehen und schwer zu erklären. Schauen wir uns also an, wie man es benutzt. .. ..
>>> #Einfach mit Strings wie NaCl und H2O zu definieren
>>> comp = Composition("LiFePO4")
>>> #Atomzahl
>>> comp.num_atoms
7.0
>>> #Nummer jedes Atoms
>>> comp.formula
'Li1 Fe1 P1 O4'
>>> #Zusammensetzungsverhältnis(Anzahl der Atome/全Anzahl der Atome)
>>> comp.get_atomic_fraction(Element("Li"))
0.14285714285714285
Es ist einfach zu definieren und Sie können ein praktisches Kompositionsobjekt erstellen. Es gibt viele andere Funktionen. Weitere Informationen finden Sie in der Dokumentation.
pymatgen.core.lattice
http://pymatgen.org/pymatgen.core.lattice.html#module-pymatgen.core.lattice Gitter bedeutet Gitter, und ich denke, viele Menschen erinnern sich an das Einheitsgitter, das sie selbst in der High School lernen. Aus Wikipedia
Vektor hier definiert
R = {n}_1{a}_1+{n}_2{a}_2+{n}_3{a}_3
Repräsentiert den Gittervektor. Dieser dreidimensionale Vektor wird durch das folgende mehrdimensionale Array definiert.
R = [[10,0,0], [20,10,0], [0,0,30]]
In Pymatgen macht es die Verwendung der Gitterklasse noch bequemer.
class Lattice(MSONable):
def __init__(self, matrix):
m = np.array(matrix, dtype=np.float64).reshape((3, 3))
lengths = np.sqrt(np.sum(m ** 2, axis=1))
angles = np.zeros(3)
for i in range(3):
j = (i + 1) % 3
k = (i + 2) % 3
angles[i] = abs_cap(dot(m[j], m[k]) / (lengths[j] * lengths[k]))
self._angles = np.arccos(angles) * 180. / pi
self._lengths = lengths
self._matrix = m
self._inv_matrix = None
self._metric_tensor = None
self._diags = None
self._lll_matrix_mappings = {}
self._lll_inverse = None
self.is_orthogonal = all([abs(a - 90) < 1e-5 for a in self._angles])
...
Die Argumentmatrix entspricht dem folgenden Format oder Numpy-Array.
#Mehrdimensionale Liste
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
#aufführen
[1, 0, 0 , 0, 1, 0, 0, 0, 1]
#Taple
(1, 0, 0, 0, 1, 0, 0, 0, 1)
Oben ist ein einfacher Würfel.
>>> l = Lattice([1,0,0,0,1,0,0,0,1])
>>> l._angles
array([ 90., 90., 90.])
>>> l.is_orthogonal
True
>>> l._lengths
array([ 1., 1., 1.])
>>> l._matrix
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
Auf diese Weise können Sie mit dem Lattice-Objekt auf Dinge wie Winkel und Länge zugreifen. Wir empfehlen, die Dokumentation zu lesen, da sie andere nützliche Funktionen enthält. http://pymatgen.org/pymatgen.core.lattice.html
pymatgen.core.structure http://pymatgen.org/pymatgen.core.structure.html Dieses Modul bietet Funktionen, die die Darstellung der Kristallstruktur </ b> ermöglichen. Hier sehen wir uns die IStructure-Klasse an, die die grundlegendsten Funktionen bietet.
class IStructure(SiteCollection, MSONable):
def __init__(self, lattice, species, coords, validate_proximity=False,
to_unit_cell=False, coords_are_cartesian=False,
site_properties=None):
...
Es braucht verschiedene Argumente, also schauen wir uns jedes an.
Sie können auch die Klasse pymatgen.core.lattice.Lattice verwenden.
Dies ist die Art des Atoms. Es unterstützt verschiedene Formate wie folgt.
#Liste der Atome
["Li", "Fe2+", "P", ...]
#Ordnungszahl
(3, 56, ...)
#Liste mit Belegungsquote
[{"Fe" : 0.5, "Mn":0.5}, ...]
Dies gibt die Koordinaten jedes Atoms an.
#Zum Zeitpunkt von NaCl
coords = [[0, 0, 0], [0.5, 0.5, 0.5]]
Vor diesem Hintergrund kann die Struktur folgendermaßen definiert werden:
from pymatgen import Lattice, IStructure
#CsCl-Struktur
a = 4.209 #Å
latt = Lattice.cubic(a)
structure = IStructure(latt, ["Cs", "Cl"], [[0, 0, 0], [0.5, 0.5, 0.5]])
>>> structure.density
3.7492744897576538
>>> structure.distance_matrix
array([[ 0. , 3.64510092],
[ 3.64510092, 0. ]])
>>> structure.get_distance
<bound method IStructure.get_distance of Structure Summary
Lattice
abc : 4.2089999999999996 4.2089999999999996 4.2089999999999996
angles : 90.0 90.0 90.0
volume : 74.565301328999979
A : 4.2089999999999996 0.0 0.0
B : 0.0 4.2089999999999996 0.0
C : 0.0 0.0 4.2089999999999996
PeriodicSite: Cs (0.0000, 0.0000, 0.0000) [0.0000, 0.0000, 0.0000]
PeriodicSite: Cl (2.1045, 2.1045, 2.1045) [0.5000, 0.5000, 0.5000]>
Auf diese Weise können Sie auf Entfernungen, Positionsbeziehungen, Dichten usw. in der Struktur zugreifen. Als nächstes wollen wir sehen, welche Art von Analysefunktion verfügbar ist.
Ich werde kurz vorstellen, welche Module verfügbar sind. Ich werde einige von ihnen aufheben und versuchen, sie tatsächlich zu bewegen. Die rechte Seite dieses Bildes ist die von Pymatgen bereitgestellte Analysefunktion.
--Phasendiagrammausgabe
etc. .. ..
Beispielsweise ist es im Fall der elektronischen Strukturanalyse möglich, die Bandstruktur zu analysieren.
Sie können auch ein Phasendiagramm ausgeben.
Ich werde Artikel schreiben, in denen die Funktionen aus der Quelle detailliert vorgestellt werden, wenn Bedarf besteht und wenn ich Lust dazu habe. Bitte kommentieren Sie, wenn Sie irgendwelche Anfragen haben.
Grundsätzlich wird andere Software für Simulationen mit einem hohen Rechenaufwand verwendet. Die Effizienz steigt jedoch, wenn Pymatgen für die Analyse und Visualisierung verwendet wird, die diese Daten kombiniert. Auf der linken Seite dieses Bildes befindet sich der Link zu häufig verwendeten Datenformaten und Tools.
--VASP-Ein- und Ausgabe kann importiert werden --Cif-Dateien, die in Material Studio usw. verwendet werden, können ebenfalls verarbeitet werden
Und so weiter. Wenn Sie die oben genannten Dateien oder Software für First-Principles-Berechnungen verwenden, stellen Sie diese bitte vor.
In Bezug auf die Materialprojekt-Rest-API habe ich in Vorheriger Artikel geschrieben, wie man sie verwendet. Wenn Sie dies verwenden, veröffentlicht das Materialprojekt eine große Datenmenge und Sie können frei Daten sammeln. Daher ist es wichtig, wenn Sie maschinelles Lernen durchführen möchten.
Es ist lange her, aber lasst uns alle Pymatgen verwenden!
Der grundlegende Ablauf der Installation ist
ist. Bitte lesen Sie die folgenden Artikel, bis Sie conda installieren. Aufbau einer Python-Umgebung für diejenigen, die Datenwissenschaftler 2016 werden möchten
Wenn du so weit bist
conda install --channel matsci pymatgen
Nach Überprüfung des Vorgangs ist die Installation abgeschlossen.
>>> import pymatgen
>>> pymatgen.__version__
'4.5.4'
Jetzt, wo Sie bereit sind, probieren wir es aus!
Die Bandstruktur repräsentiert die Dispersion von Elektronen in der periodischen Struktur des Kristalls. Bei der Darstellung der Bandstruktur ist die vertikale Achse Energie, aber die horizontale Achse ist der Punkt des inversen Gitterraums, was ziemlich schwer zu verstehen ist. Wenn Sie also nicht interessiert sind, verstehen Sie bitte, soweit Sie verstehen können, wie die Elektronen verteilt sind.
Mit pymatgen können Sie die analysierte Bandstruktur visualisieren und als Daten verarbeiten. Importieren Sie zunächst die erforderlichen Bibliotheken.
#Modul zur Verwendung der REST-API des Materialprojekts
from pymatgen.matproj.rest import MPRester
#Zum Zeichnen von Bandstrukturen
%matplotlib inline
from pymatgen.electronic_structure.plotter import BSPlotter
Als nächstes erhalten Sie die analysierte Bandstruktur. In der realen Forschung wird die von Ihrer eigenen Analysesoftware (VASP usw.) analysierte Datei in das Objekt von pymatgen konvertiert. Dieses Mal wird das analysierte Objekt jedoch aus der Materials Project-Datenbank </ b> heruntergeladen. .. Wenn Sie das Materialprojekt verwenden, müssen Sie den API-Schlüssel registrieren und erwerben. Erhalten Sie den API-Schlüssel daher auf der offiziellen Seite.
#Geben Sie Ihren API-Schlüssel an
a = MPRester("Mein API-Schlüssel")
#Geben Sie die ID des gewünschten Materials an und erhalten Sie es über die http-Kommunikation. CuAlO2(mp-Holen Sie sich 3784)
bs = a.get_bandstructure_by_material_id("mp-3748")
Damit ist der Erwerb der Bandstruktur abgeschlossen! Ich habe ein Bandstrukturobjekt direkt aus dem Materialprojekt erhalten. http://pymatgen.org/_modules/pymatgen/electronic_structure/bandstructure.html#BandStructure
Übrigens können Sie solche Materialinformationen im Materialprojekt abrufen.
Wir werden diese Informationen auf Python verarbeiten.
>>> bs.is_metal()
False
Es sieht nicht nach Metall aus.
>>> bs.get_band_gap()
{'energy': 1.7978000000000005, 'direct': False, 'transition': '(0.591,0.409,0.000)-\\Gamma'}
Die Bandlücke beträgt 1,977 eV
>>> bs.get_direct_band_gap()
18.0201
Die Bandlücke für den direkten Übergang beträgt 18.021 eV. Zeichnen wir nun das Banddiagramm.
%matplotlib inline
from pymatgen.electronic_structure.plotter import BSPlotter
plotter = BSPlotter(bs)
plotter.get_plot().show()
Dies sind die Daten des Materialprojekts, aber Sie können die Simulationsergebnisse der Materialien ausgeben, die Sie normalerweise untersuchen.
Ich würde mich freuen, wenn ich nach und nach verstehen könnte, dass das Pymatgen-Objekt für den Vergleich mit anderen Materialien, maschinelles Lernen, Erkundung usw. nützlich zu sein scheint.
Es gibt noch viele Dinge, die wir tun können, aber dieses Mal werden wir hier enden. (Es war lang···) Ich möchte eine Pymatgen-Studiensitzung, eine Materialprojekt-Studiensitzung, eine Vasp-Studiensitzung oder die Materials Informatics Young People's Association abhalten. Wenn Sie also interessiert sind, tun Sie dies bitte Bitte komm rein ~
Außerdem werde ich beim nächsten Mal einen Artikel in Materialinformatik schreiben. Vielen Dank für Ihre sorgfältige Lektüre ~
Recommended Posts