Un jour, Kyo "T-kun, je t'enverrai les données qui sont sorties de l'instrument de mesure, alors fais ton propre graphique." T "OK!" Rencontre d'un jour ... T "Ceci est un graphique" Kyo "Quelle était la valeur ici? L'avez-vous calculée?" (...?!) Kyo "Il y a encore 0 données dans le même format que celui-ci. Veuillez faire le calcul." ((^ Ω ^) ... Owata)
Il y a un arrière-plan tel que J'ai commencé à apprendre python pour automatiser et accélérer l'organisation des données. Python a été le premier à commencer la programmation. Après avoir étudié petit à petit et rédigé mon mémoire de maîtrise, j'aimerais enregistrer les progrès liés à python. C'est la première fois que j'écris un article, et je ne sais pas si je vais finir de l'écrire (3/18). GitHub propose également des exemples de données et des blocs-notes. D'ici S'il vous plaît.
T "J'écris un programme en étudiant Python, alors peux-tu attendre un instant?" Enseignement "?? Terminé!" (Plus tard, "un peu" gonfle jusqu'à quelques mois)
Maintenant, ouvrons les données. Les données que j'ai reçues étaient au format txt qui peut être ouvert même dans Excel. C'est un peu désagréable d'avoir un délimiteur point-virgule. Voici un exemple des données.
Le premier manuel que j'ai touché était [note d'introduction à python](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) fait. Après avoir installé Anaconda selon ce manuel, j'étudiais en écrivant du code sur spyder.
Le manuel contenait des fichiers de lecture et d'écriture en utilisant numpy. Pour le moment, je l'ai lu en fonction du sujet. J'ai essayé de passer le chemin du fichier en utilisant tkinter. tkinter Je ne sais pas, mais je l'ai utilisé comme un sortilège magique.
.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)#Lisez les données séparées par des points-virgules en sautant 3 lignes
f=fileobj[:,0]#Données de la première colonne
À ce moment-là, il était en cours de lecture. Plus tard, je suis tombé sur un module pratique appelé pandas. [Introduction à Jupyter [Pratique] pour les utilisateurs de Python](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) a été utilisé comme référence pour lancer l'environnement du notebook. Recommencez avec jupyter notebook et 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)
Si vous le lisez avec des pandas, les données de la table ressembleront à ceci.
Représentons-le rapidement avec la fonction graphique des pandas. Dans cette expérience, nous utiliserons les données des première et deuxième colonnes. Dans DataFrame, les données sont traitées à l'aide d'un indexeur (loc, iloc), mais il convient de noter que l'objet renvoyé est remplacé par Series lorsqu'une ligne ou une colonne de données est spécifiée.
.ipnb
import matplotlib.pyplot as plt
df=df.iloc[:,[0,1]]
df.set_index(0,inplace=True)#Écraser df en spécifiant l'index
df.plot()
plt.show()
Lors du traçage à l'aide de pandas, il semble que la colonne d'index soit automatiquement prise sur l'axe horizontal, donc l'index est spécifié à l'avance avec .set_inedex (nom de la colonne). Une forme d'onde avec un pic net est apparue autour du centre, comme indiqué sur l'image. Il y avait du bruit sur le bord. Cela dépend du nombre de points de données, mais jusqu'à présent, je l'ai fait dans Excel.
Le processus s'est déroulé sans heurts jusqu'à ce que le graphique soit créé, mais le calcul était gênant. Le défi cette fois était d'évaluer ** la netteté du pic **. En tant qu'outil d'adaptation, curve_fit de scipy est sorti dès que je l'ai recherché sur Google, alors j'ai essayé de l'utiliser. L'axe vertical dans le graphique ci-dessus est la puissance d'entrée et l'unité est exprimée en décibels (dBm). Lorsque l'unité est modifiée en mW et normalisée avec la valeur maximale, elle devient comme indiqué dans la figure ci-dessous.
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()
La fonction que vous souhaitez adapter est: C'est la fonction Lorentz avec une ligne de base ajoutée. Toutes les variables sauf x. ..
init est la valeur initiale du paramètre. Avec une valeur approximative J'ai fait une liste. Le paramètre optimal opt et cov co-distribué peut être obtenu par curve_fit (nom de la fonction, x, y, valeur initiale du paramètre).
import scipy.optimize
def lorentz(x,A,mu,gamma,B,C):#Définissez une fonction qui convient
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]#Valeur initiale du paramètre que vous souhaitez ajuster
opt, cov = scipy.optimize.curve_fit(lorentz,df.index,df['mag'],init)#raccord
Tracez les résultats. Il est très pratique de créer une nouvelle colonne avec df [nom de la colonne] = 〇〇. Si vous souhaitez l'ajouter à un objet Series, convertissez-le en type DataFrame via pd.DataFrame (objet Series) ou .reset_index (). Il est agréable d'utiliser les noms de colonnes tels qu'ils sont dans la légende. L'axe vertical est ... ..
df['fit']=lorentz(df.index,opt[0],opt[1],opt[2],opt[3],opt[4])
df.loc[:,['mag','fit']].plot()
plt.show()
Cela va bien.
La netteté du pic a été évaluée en utilisant les $ \ mu $ et $ \ gamma $ obtenus.
・ $ \ Mu $: Centre du pic
・ $ \ Gamma
Analyse des données de mesure (2) -Hytriform et ajustement, recommandation lmfit-
Les données d'échantillonnage représentaient les caractéristiques de fréquence d'un certain circuit de résonance. J'ai commencé à le toucher par moi-même et finalement le programme d'analyse Kossa était terminé. Lorsque j'ai déménagé pour la première fois, j'ai été impressionné. Au moment où j'ai obtenu mon diplôme, je traitais des milliers de données. C'est horrible. Faites-le et yokatta ... Je veux étudier de plus en plus les pandas pour pouvoir gérer les données librement.
Recommended Posts