[PYTHON] Analyse der Messdaten ①-Memorandum of Scipy Fitting-

Vorwort

Eines Tages, Kyo "T-kun, ich sende Ihnen die Daten, die aus dem Messgerät stammen, also machen Sie Ihr eigenes Diagramm." T "OK!" Eintägiges Treffen ... T "Dies ist eine Grafik" Kyo "Was war der Wert hier? Hast du ihn berechnet?" (... ?!) Kyo "Es gibt noch 0 Daten im gleichen Format wie dieses. Bitte führen Sie die Berechnung durch." ((^ Ω ^) ... Owata)

Es gibt einen Hintergrund wie Ich fing an, Python zu lernen, um die Datenorganisation zu automatisieren und zu beschleunigen. Python war der erste, der mit der Programmierung begann. Nachdem ich nach und nach studiert und meine Masterarbeit geschrieben habe, möchte ich die Fortschritte in Bezug auf Python aufzeichnen. Ich schreibe zum ersten Mal einen Artikel und bin mir nicht sicher, ob ich ihn fertig schreiben werde (18.03.). GitHub hat auch Beispieldaten und Notizbücher. Von hier Bitte.

Ich habe die Daten genommen. Lassen Sie uns unser Bestes tun, um die Grafik anzuheben.

T "Ich schreibe ein Programm, während ich Python studiere. Kannst du also einen Moment warten?" Lehre "?? Fertig!" (Später schwillt "ein wenig" bis zu einigen Monaten an)

Öffnen wir nun die Daten. Die Daten, die ich erhalten habe, waren im TXT-Format, das auch in Excel geöffnet werden kann. Es ist ein bisschen ekelhaft, ein Semikolon-Trennzeichen zu haben. Unten finden Sie ein Beispiel für die Daten. image.png

Das erste Lehrbuch, das ich berührt habe, war [Python-Einführungsnotiz](https://www.amazon.co.jp/%E8%A9%B3%E7%B4%B0-Python-%E5%85%A5%E9%96%80 % E3% 83% 8E% E3% 83% BC% E3% 83% 88-% E5% A4% A7% E9% 87% 8D-% E7% BE% 8E% E5% B9% B8 / dp / 4800711673) tat. Nachdem ich Anaconda gemäß diesem Lehrbuch installiert hatte, lernte ich, indem ich Code auf Spyder schrieb.

Datei lesen

Das Lehrbuch enthielt das Lesen und Schreiben von Dateien mit numpy. Vorerst lese ich es je nach Thema. Ich habe versucht, den Dateipfad mit tkinter zu übergeben. Ich weiß es nicht, aber ich habe es wie einen Zauber benutzt.

.py


import tkinter as tk
import tkinter.filedialog as fd
import numpy as np

root=tk.Tk()
root.withdraw()
path = fd.askopenfilename(
        title="file---",
        filetypes=[("csv","csv"),("CSV","csv")])
if path :
    fileobj=np.genfromtxt(path,delimiter=";",skip_header=3)#Lesen Sie die durch Semikolon getrennten Daten, indem Sie 3 Zeilen überspringen
    f=fileobj[:,0]#Daten der ersten Spalte

Zu dieser Zeit wurde es gelesen. Später stieß ich auf ein praktisches Modul namens Pandas. [Einführung in Jupyter [Übung] für Python-Benutzer](https://www.amazon.co.jp/Python%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE % E3% 81% 9F% E3% 82% 81% E3% 81% AEJupyter-% E5% AE% 9F% E8% B7% B5-% E5% 85% A5% E9% 96% 80-% E6% B1% A0% E5% 86% 85-% E5% AD% 9D% E5% 95% 93 / dp / 4774192236) wurde als Referenz zum Starten der Notebook-Umgebung verwendet. Beginnen Sie erneut mit Jupyter Notebook und Pandas.

.ipynb


import tkinter
from tkinter import filedialog
import pandas as pd

root = tkinter.Tk()
root.withdraw()
path = filedialog.askopenfilename(
    title="file___",
    filetypes=[("txt","txt"),("csv","csv")])
if path:
    df = pd.read_csv(path,engine="python",header=None,sep=';',skiprows=3,index_col=0)

Visualisierung

Wenn Sie es mit Pandas lesen, sehen die Tabellendaten so aus. image.png

Lassen Sie es uns schnell mit der Grafikfunktion von Pandas grafisch darstellen. In diesem Experiment werden wir die Daten in der ersten und zweiten Spalte verwenden. In DataFrame werden Daten mithilfe von Indexern (loc, iloc) verarbeitet. Beachten Sie jedoch, dass das zurückgegebene Objekt in Series geändert wird, wenn 1 Zeile oder 1 Spalte mit Daten angegeben wird.

.ipnb


import matplotlib.pyplot as plt
df=df.iloc[:,[0,1]]
df.set_index(0,inplace=True)#Überschreiben Sie df durch Angabe des Index
df.plot()
plt.show()

image.png

Beim Plotten mit Pandas scheint die Indexspalte automatisch auf der horizontalen Achse aufgenommen zu werden, sodass der Index im Voraus mit .set_inedex (Spaltenname) angegeben wird. Eine Wellenform mit einer scharfen Spitze erschien um die Mitte, wie im Bild gezeigt. Es gab Lärm am Rand. Es hängt von der Anzahl der Datenpunkte ab, aber bis zu diesem Punkt habe ich es in Excel gemacht.

Passend zu scipy

Der Prozess verlief reibungslos, bis das Diagramm erstellt wurde, aber die Berechnung war mühsam. Die Herausforderung bestand diesmal darin, die Schärfe des Peaks zu bewerten. Als Anpassungswerkzeug kam scipys curve_fit heraus, sobald ich es gegoogelt hatte, also versuchte ich es zu verwenden. Die vertikale Achse in der obigen Grafik ist die Eingangsleistung, und die Einheit wird in Dezibel (dBm) ausgedrückt. Wenn das Gerät auf mW geändert und mit dem Maximalwert standardisiert wird, entspricht dies der Abbildung unten.

df.index = df.index*pow(10,-9)
df.index.rename('freq[GHz]',inplace=True)
df['mag'] = pow(10,(df.iloc[:]-df.iloc[:].max())/10)
df['mag'].plot()
plt.show()

image.png Die Funktion, die Sie anpassen möchten, ist: Es ist die Lorentz-Funktion mit einer hinzugefügten Grundlinie. Alle Variablen außer x. ..

f_{\left(x\right)}=A \left(\frac{\gamma}{\left(x-\mu\right)^2+\gamma^2}\right)+Bx+C

init ist der Anfangswert des Parameters. Mit einem grob vorhergesagten Wert Ich habe eine Liste gemacht. Der optimale Parameter opt und die Kovarianz cov können durch kurven_fit (Funktionsname, x, y, Anfangswert des Parameters) erhalten werden.

import scipy.optimize
def lorentz(x,A,mu,gamma,B,C):#Definieren Sie eine passende Funktion
    return A*x*gamma/((x-mu)**2+gamma**2)+B*x+C
A  = -np.pi*(df.index.max()-df.index.min())/20
mu = df.index.values.mean()
gamma  = (df.index.max()-df.index.min())/20
B  = 10
C  = 0
init = [A,mu,gamma,B,C]#Anfangswert des Parameters, den Sie anpassen möchten
opt, cov = scipy.optimize.curve_fit(lorentz,df.index,df['mag'],init)#passend zu

image.png Zeichnen Sie die Ergebnisse. Es ist sehr praktisch, eine neue Spalte mit df [Spaltenname] = 〇〇 zu erstellen. Wenn Sie es einem Serienobjekt hinzufügen möchten, konvertieren Sie es über pd.DataFrame (Serienobjekt) oder .reset_index () in einen DataFrame-Typ. Es ist schön, die Spaltennamen so zu verwenden, wie sie in der Legende stehen. Die vertikale Achse ist ... ..

df['fit']=lorentz(df.index,opt[0],opt[1],opt[2],opt[3],opt[4])
df.loc[:,['mag','fit']].plot()
plt.show()

image.png Es passt gut.

Die Schärfe des Peaks wurde unter Verwendung der erhaltenen $ \ mu $ und $ \ gamma $ bewertet. ・ $ \ Mu $: Mittelpunkt des Gipfels ・ $ \ Gamma : Die halbe Breite von zwei Punkten, wenn die Spitzentiefe halbiert wird (: halber Preis, halbe Breite) Da es ist, Q-Wert (Schärfe der Spitze) $ Q = \frac{\mu}{2\gamma} $$ Es ist eine Problemlösung auf der Suche nach. Fortsetzen.

Analyse der Messdaten (2) -Hytriform und passend, lmfit Empfehlung-

Zusammenfassung

Die Probendaten repräsentierten die Frequenzeigenschaften eines bestimmten Resonanzkreises. Ich fing an, es selbst zu berühren und schließlich war das Kossa-Analyseprogramm abgeschlossen. Als ich zum ersten Mal umzog, war ich beeindruckt. Zum Zeitpunkt meines Abschlusses verarbeitete ich Tausende von Daten. Das ist schrecklich. Machen Sie es und Yokatta ... Ich möchte immer mehr Pandas studieren, damit ich frei mit Daten umgehen kann.

Recommended Posts

Analyse der Messdaten ①-Memorandum of Scipy Fitting-
Analyse der Messdaten (2) -Hydrobacter und Anpassung, lmfit Empfehlung-
Pandas-Grundlagen für Anfänger ② Übersicht über die Daten
elasticsearch_dsl Memorandum
Auswahl der Messdaten
Memorandum über die Umgebungskonstruktion der AutoML-Bibliothek PyCaret
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
Tipps und Vorsichtsmaßnahmen bei der Datenanalyse
Python für die Datenanalyse Kapitel 3
Memorandum des Python-Paketverwaltungstools ez_setup
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Datenanalyse zur Verbesserung von POG 3 ~ Regressionsanalyse ~
Empfehlung zur Datenanalyse mit MessagePack
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Datenverarbeitung 2 Analyse verschiedener Datenformate
Python-E-Book-Zusammenfassung nützlich für die frei lesbare Datenanalyse
Python-Visualisierungstool für die Datenanalyse
Memorandum zu Djangos QueryDict
Memorandum für die Migration mit GORM
JupyterLab Grundeinstellung 2 für die Datenanalyse (pip)
JupyterLab Basic Setup für die Datenanalyse (pip)
Ein Memorandum über Probleme beim Formatieren von Daten
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
Führen Sie die API des Cloud Pak für Datenanalyseprojekts Job mit Umgebungsvariablen aus
Einführung in die statistische Modellierung für die Datenanalyse Erweiterung des Anwendungsbereichs von GLM
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
Datenanalyse zur Verbesserung von POG 2 ~ Analyse mit Jupiter-Notebook ~
Bereiten Sie eine Programmiersprachenumgebung für die Datenanalyse vor
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: Laden von Daten
Eine Einführung in die statistische Modellierung für die Datenanalyse
Verwendung von Datenanalysetools für Anfänger
Einfaches Verständnis von Python für & Arrays (für Super-Anfänger)
Emotionale Analyse umfangreicher Tweet-Daten durch NLTK
Aufgezeichnete Umgebung für die Datenanalyse mit Python