[PYTHON] So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf

file_1.dat, file_2.dat ...... Dies ist eine Methode zum Lesen einer Datendatei wie file_100.dat, bei der sich nur die Zahlen mithilfe der for-Anweisung kontinuierlich ändern, verarbeiten und grafisch darstellen. Ich konnte keine zusammenhängende Erklärung finden, deshalb werde ich sie als Memorandum belassen.

Was möchten Sie tun

コメント 2020-08-11 164540.jpg

Es gibt Dutzende von Datendateien mit n Zeilen und 2 Spalten wie diese, und ich möchte nur die Werte in der zweiten Spalte extrahieren, berechnen und grafisch darstellen. Wenn Sie jeweils eine Datei kopieren und in Excel einfügen, ist viel Zeit und Mühe erforderlich.

Ursprünglich war es ein Programm, das jede Datei las, verarbeitete, den x-, y-Werten zuwies usw.

data_number_1,data_intensity_1 = np.loadtxt("file_1.dat",unpack = True)
s1 = su(data_intensity_1)
m1 = mean(data_intensity_1)
x=[s1]
y=[m1]

Es war ein Programm, das dies für die Anzahl der Dateien wiederholte, was eine lächerlich große Anzahl von Zeilen und Volumes war, aber wie eingangs erwähnt, unterscheiden sich die Dateinamen nur im Zahlenteil, so dass es einfach ist, die for-Anweisung in Python zu verwenden. Kann es verarbeitet werden? Das war die Motivation, über das Programm nachzudenken.

spyder(python3.7) Berechnung: numpy (numpy als np importieren) Zeichnung: matplotrib (importiere matplotlib.pyplot als plt)

Datendatei lesen und Anweisung

Verwenden Sie np.loadtext, um die Datendatei zu laden. Referenz: https://deepage.net/features/numpy-loadsavetxt.html

Der zum Laden verwendete Beispielcode lautet wie folgt. Hierbei wird davon ausgegangen, dass die Seriennummerndateien von Datei_1 bis Datei_20 gelesen werden.

data = []
for i in range(1,21):
    data.append(np.loadtxt("file_{}.dat".format(i),usecols=(1),unpack=True))

Der Code wird unten Schritt für Schritt erklärt.

Über die for-Anweisung

Wenn Sie den Bereich von i in der for-Anweisung festlegen, wird der Bereich von ** Maximalwert-1 ** angewendet. Setzen Sie diesmal den Bereich als (1,21) als Dateinummer 20 + 1.

Da der Dateiname file_ ** number **. Dat ist, verwenden Sie die Formatierungsmethode und führen Sie sie als ** file_ {} .dat ".format (i) ** aus. Auf diese Weise kann eine Schleifenverarbeitung wie file_1.dat, file_2.dat ... durchgeführt werden.

Dann wird der Wert des Prozesses, der von ** data.append ** wiederholt wird, zu der Liste hinzugefügt, die als Daten bezeichnet wird, die diese erstellt haben, und so weiter.

Über Loadtext

Von der Dat-Datei möchte ich nur den Wert in der zweiten Zeile als numerischen Wert behandeln, daher muss ich die Verarbeitung dafür hinzufügen.

Wenn Sie den numerischen Wert so wie er ist mit Loadtext lesen, wird er zeilenweise in die Liste eingefügt, z. B. [0.0 72925], [1.0 70740] ... [10.0 73343] im Beispiel des vorherigen Bildes.

Also verwende ich ** entpacken **, um es zu transponieren und für jede Spalte in eine andere Variable zu setzen. Wenn Sie den Wert auf True setzen, erfolgt eine Translokation, und die Liste kann für jede Spalte unterschiedliche Variablen enthalten, z. B. [0.0 1.0 ... 10.0], [72925 70740 ... 73343].

Da wir nur die zweite Spalte als numerischen Wert behandeln möchten, ohne die erste Spalte zu verwenden, geben Sie die Zeile an, die von ** usecols ** gelesen werden soll. Da wir entschieden haben, welche Zeile 0 als erste Zeile lesen soll, müssen wir dies beim Lesen der zweiten Spalte als (** 1 **) tun. Auf diese Weise enthält die Datenliste nur [72925 70740 ... 73343].

Einzelheiten finden Sie auf der oben angegebenen Referenzseite. Durch die Verwendung von Unpack und Usecols auf diese Weise konnte ich nur die zweite Spalte in eine Variable für jede Datei einfügen.

data = [2. Spalte von Datei_1, 2. Spalte von Datei_2, ..., 2. Spalte von Datei_20].


Im ursprünglichen Programm wurde nur das in den Dateizweig eingegeben! Die Anzahl der Zeilen und die Anzahl der Zeichen sind überraschend reduziert. Je mehr Dateien Sie haben, desto einfacher wird es natürlich.

wird bearbeitet

Auf diese Weise konnten wir alle Dateisätze nur für den Wert in der zweiten Zeile erfassen. Als Nächstes werden wir jeden einzelnen verarbeiten. Um die Werte in der Liste stapelweise zu verarbeiten, definieren Sie eine Funktion und verarbeiten Sie sie der Reihe nach.

Nehmen wir diesmal an, dass die horizontale Achse die Summe der Werte für jede Datei und die vertikale Achse der Durchschnittswert ist.

Jede Funktionsdefinition kann wie folgt geschrieben werden.

def su(a):
    return np.sum(a)
def mean(a):
    return np.mean(a)

Wenden Sie diese Prozesse einzeln auf die Listendaten an.

for i in range(1,21):
    si = su(data[i-1])
    mi = mean(data[i-1]) 

Eine Sache, die hier zu beachten ist, ist der Bereichswert. Die Dateinamen beginnen bei 1, aber die Listenwerte beginnen bei 0. Wenn Sie den Wert von i in der Funktion angeben, müssen Sie ihn daher als ** (i-1) ** ausführen.

Dies bedeutet, dass Sie den Wert, den Sie für 1 bis 20 halten, im Bereich von 0 bis 19 einstellen müssen.

Diagramm erstellen

Ich werde diesmal die ausführliche Erklärung weglassen. Wenn Sie mit matplotrib suchen, finden Sie verschiedene Erklärungen.

Es ist notwendig, die durch das obige Verarbeitungsverfahren berechneten Werte als x bzw. y einzustellen. Erstellen Sie daher eine Liste auf die gleiche Weise wie beim Lesen einer Datei und fügen Sie die verarbeiteten Werte der Reihe nach in die x, y-Liste ein.

x=[]
y=[]
for i in range(1,21):
    si = sum(data[i-1])
    mi = mean(data[i-1]) 
    x.append(si)
    y.append(mi)

Auf diese Weise konnten wir die Werte für die x-Achse und die y-Achse vorbereiten. Der Rest wird durch Erstellen eines Diagramms mithilfe eines Diagramms abgeschlossen.

Ganzes Codebeispiel

Basierend auf dem oben Gesagten ist der gesamte Code wie folgt. (Werte, Dateien und Grafiken werden als Beispiele erstellt und haben keine Bedeutung.)

import numpy as np
import matplotlib.pyplot as plt

def su(a):
    return np.sum(a)

def mean(a):
    return np.mean(a)

data = []
for i in range(1,21):
    data.append(np.loadtxt("file_{}.dat".format(i),usecols=(1),unpack=True))

x=[]
y=[]
for i in range(1,21):
    si = su(data[i-1])
    mi = mean(data[i-1]) 
    x.append(si)
    y.append(mi)

plt.plot(x,y,ls="",marker="o");

plt.xlim(xmin=0)
plt.ylim(ymin=0)

plt.show()

Figure_1.png

Durch die Verwendung der Schleifenverarbeitung auf diese Weise ist es uns gelungen, mehr als 100 Zeilen zu vereinfachen, und die Effizienz hat sich dramatisch verbessert! Ich hoffe, es ist hilfreich für diejenigen, die unter ähnlichen Problemen leiden.

Danke fürs Lesen.

Recommended Posts

So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf
So lesen Sie Dateien in verschiedenen Verzeichnissen
Lesen einer CSV-Datei mit Python 2/3
So erstellen Sie eine JSON-Datei in Python
[Einführung in Pandas] Lesen Sie eine CSV-Datei ohne Spaltennamen und geben Sie ihr einen Spaltennamen
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
Wie man Decorator in Django benutzt und wie man es macht
Geben Sie einen Binärspeicherauszug in Binärdatei und zurück in eine Binärdatei aus
So generieren Sie QR-Code und Barcode in Python und lesen ihn normal oder in Echtzeit mit OpenCV
So speichern Sie die Feature-Point-Informationen des Bildes in einer Datei und verwenden sie zum Abgleichen
Dateien lesen und schreiben
Dateien schreiben und lesen
[Python] Ändern Sie den Namen der Bilddatei in eine Seriennummer
So importieren Sie Dateien in Python an eine beliebige Stelle
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
So erstellen Sie eine Konfigurationsdatei
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Lesen Sie die Big-Endian-Binärdatei in Python und konvertieren Sie sie in ndarray
So geben Sie eine .py-Datei an, die beim Start in IPython 0.13 geladen werden soll
[Django] Lesen von Variablen / Konstanten, die in einer externen Datei definiert sind
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Da das von pandas.read_excel gelesene Excel-Datum ein serieller Wert war, wurde es in datetime.datetime konvertiert.
[Python] So kratzen Sie eine lokale HTML-Datei und geben sie mit Beautiful Soup als CSV aus
So teilen und speichern Sie einen DataFrame
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So zeichnen Sie ein Diagramm mit Matplotlib
So erhalten Sie mit pandas DataFrame einen bestimmten Spaltennamen und Indexnamen
So geben Sie eine .ui-Datei in der Dialog- / Widget-GUI in PySide an
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
Wie bekomme ich Stacktrace in Python?
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
[Python] Lesen der CSV-Datei (Methode read_csv des Pandas-Moduls)
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
[Bash] Befehl zum zeilenweisen Schreiben von Dateien in die Seriennummer [One Liner (?)]
Lesen von Umgebungsvariablen aus einer ENV-Datei mit PyCharm (für Mac)
Lesen von CSV-Dateien mit Pandas
Wie schreibe ich diesen Prozess in Perl?
Verwendung ist und == in Python
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ein Befehl zum Angeben einer Datei mit einem bestimmten Namen in einem Verzeichnis mit find und mv, cp oder gzip (Linux)
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Finden Sie heraus, wie Sie eine Datei mit einer bestimmten Anzahl von Zeilen gleichmäßig teilen können
[Python] So benennen Sie Tabellendaten und geben sie mit csv aus (to_csv-Methode)
So legen Sie Google Text & Tabellen in einem Ordner zusammen in einer TXT-Datei mit Python ab
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
[Python] Kombinieren von Listen mit Zahlen zu Zeichenfolgen und Schreiben in eine Ausgabedatei
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
[Pandas] So überprüfen Sie Duplikate in einer Tabelle und löschen Duplikate (entspricht dem Löschen von Duplikaten in Excel)
So tarnen Sie eine ZIP-Datei als PNG-Datei
So löschen Sie einen Taple in einer Liste (Python)
Einbetten von Variablen in Python-Strings
Lesen Sie eine Datei mit verstümmelten Linien in Python
[Python] Wie man Excel-Dateien mit Pandas liest