Analyse d'impédance (EIS) avec python [impedance.py]

Aperçu

Présentation de la bibliothèque ** impedance.py ** qui peut analyser l'impédance (impédance électrochimique) avec python. Ajustez le graphique de Nyquist mesuré au modèle de circuit équivalent construit et obtenez les paramètres. Pas besoin de logiciel payant, vous pouvez donc l'utiliser facilement. En gros, je vais vous expliquer selon le Tutoriel officiel d'impedance.py, et je le compléterai à certains endroits, donc je veux beaucoup lire l'anglais. Pour ceux qui ne le font pas. Pour ceux qui n'ont pas besoin d'explications, le code est rassemblé en bas.

Tâche

Je souhaite analyser l'impédance en utilisant uniquement des outils open source

L'analyse d'impédance électrochimique nécessite un logiciel d'analyse qui accompagne l'appareil de mesure, mais il est difficile d'analyser à chaque fois avec un PC de mesure. .. .. Cependant, la plupart des logiciels sont payants et, en raison de la licence, ils ne peuvent pas être installés sur votre propre PC. .. ..

Que faire dans cet article, que ne pas faire

Gérer

À propos d'impedance.py

Ne pas manipuler

Comment démarrer avec python Veuillez vérifier "Comment utiliser python"

Environnement dépendant

À partir du 22/07/2020

(1) Installation

Puisqu'il est enregistré dans PyPI, installez-le avec pip install impedance

(2) Importer des données [prétraitement]

Pour les données de mesure, vous pouvez généralement lire_csv csv et le traiter comme pandas.Dataframe, mais comme il existe quelque chose appelé pré-traitement, je vais l'utiliser. Étant donné que les exemples de données sont préparés à partir du site officiel, téléchargez example.csv dans la colonne Étape 2 à partir de ** ici **

python


from impedance import preprocessing

frequencies, Z = preprocessing.readCSV('./exampleData.csv')
#type(frequencies): <class 'numpy.ndarray'>
#type(frequencies[0]): <class 'numpy.float64'>
#type(Z): <class 'numpy.ndarray'>
#type(Z[0]): <class 'numpy.complex128'>

Le contenu de exampleData.csv ressemble à ceci キャプチャ.JPG La colonne A est la fréquence, la colonne B est la partie réelle de Z, la colonne C est la partie imaginaire de Z, et même si vous regardez le code source de preprocessing.readCSV, vous définissez simplement la colonne A sur les fractions et la colonne BC sur le type complexe Z et renvoyé. C'était juste.

En fait, un prétraitement pratique! !!

Si vous pensez que c'est une fonction inutile, il y a en fait des fonctions que vous pouvez utiliser! preprocessing prend également en charge les extensions spécifiques au logiciel de l'appareil (** important ici **), et semble prendre en charge les logiciels et extensions suivants.

doux extension
gamry .dta
autolab Séparé par des virgules.csv?)
parstat .txt
zplot .z
versastudio .par
powersuite .txt
biologic .mpt
chinstruments .txt

En regardant le code source, je suis très content car il traite les données à l'aide d'expressions régulières, etc.: clap: (je l'ai bien utilisé avec le fichier .mpt) L'utilisation est la suivante

python


from impedance import preprocessing

frequencies, Z = preprocessing.readFile('Chemin d'accès au fichier', instrument='Nom souple')
frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)

Vous pouvez spécifier le format de fichier en transmettant le nom du logiciel dans le tableau ci-dessus à l'option d'instrument.

Autre que ça ・ Découpez le premier quadrant preprocessing.ignoreBelowX (freq, Z) -Couper les données par fréquence preprocessing.cropFrequencies (freq, Z, freqmin = 0, freqmax = None) Est préparé

(3) Création d'un circuit équivalent

Cette fois, nous allons créer le modèle de circuit équivalent suivant à titre d'exemple. two_time_constants.png

python


from impedance.models.circuits import CustomCircuit

circuit = 'R0-p(R1,C1)-p(R2-Wo1,C2)'
initial_guess = [.01, .01, 100, .01, .05, 100, 1]

circuit = CustomCircuit(circuit, initial_guess=initial_guess)

Un circuit équivalent peut être créé en exprimant des séries avec «-» et en parallèle avec «p (,)» et en le passant sous forme de chaîne de caractères à la classe «CustomCircuit». À ce stade, les paramètres initiaux doivent être passés sous forme de type liste à l'option ʻinitial_guess. Les éléments de circuit qui peuvent être exprimés sont résumés dans [** ici **](https://impedancepy.readthedocs.io/en/latest/circuit-elements.html). J'ai utilisé CustomCircuit cette fois, mais si vous regardez le code source, Randles` est également préparé par défaut.

(4) Montage

python


circuit.fit(frequencies, Z)

params = circuit.parameters_
#[1.65187261e-02 8.67655045e-03 3.32142565e+00 5.38996281e-03
# 6.30927436e-02 2.32520436e+02 2.19541831e-01]

covs = circuit.conf_
#[1.54227642e-04 1.91273738e-04 1.89536697e-01 2.05799010e-04
# 1.93973976e-03 1.62269546e+01 1.75432523e-02]

Effectuez le montage avec circuit.fit. Il semble que «scipy.optimize.curve_fit» soit utilisé comme algorithme d'ajustement. Après ajustement, les paramètres après ajustement et la variance des paramètres dans circuit.parameters_ et circuit.conf_ respectivement (les composantes diagonales de la matrice de covariance renvoyées par scipy.optimize.curve_fit sont extraites). Peut être reçu.

(5) Visualisation des résultats

python


import matplotlib.pyplot as plt
from impedance.visualization import plot_nyquist

Z_fit = circuit.predict(frequencies)

fig, ax = plt.subplots()
plot_nyquist(ax, Z, fmt='o')
plot_nyquist(ax, Z_fit, fmt='-')

plt.legend(['Data', 'Fit'])
plt.show()

example_fit_fig.png

Obtenez le résultat de la simulation calculé à partir des paramètres équipés de circuit.predict (fréquences). La visualisation fournit une «visualisation» basée sur matplotlib et altair, et les tracés nyquist sont affichés avec «plot_nyquist». Il écrit également poliment l'étiquette de l'axe. En plus de cela, visualisation a divers éléments tels que plot_bode (bode plot). (Prévu pour être ajouté)

code

python


from matplotlib import pyplot as plt

from impedance import preprocessing
from impedance.models.circuits import CustomCircuit
from impedance.visualization import plot_nyquist


def main():
    frequencies, Z = preprocessing.readCSV('./exampleData.csv')
    frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)

    circuit = 'R0-p(R1,C1)-p(R2-Wo1,C2)'
    initial_guess = [.01, .01, 100, .01, .05, 100, 1]

    circuit = CustomCircuit(circuit, initial_guess=initial_guess)
    circuit.fit(frequencies, Z)
    print(circuit.parameters_)
    print(circuit.conf_)
    Z_fit = circuit.predict(frequencies)

    fig, ax = plt.subplots()
    plot_nyquist(ax, Z, fmt='o')
    plot_nyquist(ax, Z_fit, fmt='-')

    plt.legend(['Data', 'Fit'])
    plt.show()


if __name__ == '__main__':
    main()

Recommended Posts

Analyse d'impédance (EIS) avec python [impedance.py]
Analyse vocale par python
Analyse vocale par python
Analyse de données avec Python
[Python] Analyse morphologique avec MeCab
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Analyse des émotions par Python (word2vec)
Analyse de squelette planaire avec Python
Analyse morphologique japonaise avec Python
Analyse des secousses musculaires avec Python
Analyse de la structure du squelette en trois dimensions avec Python
Text mining avec Python ① Analyse morphologique
Analyse de données à partir de python (visualisation de données 1)
Analyse de régression logistique Self-made avec python
Analyse de données à partir de python (visualisation de données 2)
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
Apprentissage automatique avec python (2) Analyse de régression simple
Programme d'analyse des contraintes FEM 2D par Python
Analyse des tweets avec Python, Mecab et CaboCha
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Analyse de conduction thermique bidimensionnelle non stationnaire avec Python
Python: analyse morphologique simplifiée avec des expressions régulières
Statistiques avec python
Python avec Go
Analyse de données python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Diverses analyses d'images avec plotly] Visualisation dynamique avec plotly [python, image]
Analyse d'images médicales avec Python 1 (Lire une image IRM avec SimpleITK)
Analyse statique du code Python avec GitLab CI
Analyse de régression LASSO facile avec Python (pas de théorie)
Analyse non linéaire géométrique du squelette élastique bidimensionnel avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Python: analyse des séries chronologiques
Grattage en Python (préparation)
Text mining avec Python ① Analyse morphologique (re: version Linux)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Exécutez Python avec VBA
Manipuler yaml avec python
Communication série avec python
Analyse du panier avec Spark (1)
Apprendre Python avec ChemTHEATER 05-1