Verwendung von StringIO, um getrennte Textdateien in NumPy zu lesen

Verwendung von StringIO, um getrennte Textdateien in NumPy zu lesen

  • Künstliche Intelligenz
6 Minuten Lesezeit Aktualisiert Jan 12, 2021

Auf einen Blick: Dieses Tutorial erklärt, wie man mit dem StringIO-Paket getrennte Textdaten in ein NumPy-Array einlesen kann, einschließlich des notwendigen Codes und der Parameter für den Datenimport.

  • Demonstriert die Verwendung von StringIO zum Import von CSV-Daten in NumPy-Arrays.
  • Bietet praktische Beispiele, Codeschnipsel und diskutiert den Umgang mit fehlenden Werten und Datentypen.

In diesem Tutorial zeigen wir Ihnen, wie Sie mit dem StringIO-Paket getrennte Textdaten in ein NumPy-Array einlesen.

Daten, die wir verwendet haben

Wir werden diese Kriminalitätsdaten vorlesen:

    ,crime$cluster,Murder,Assault,UrbanPop,Rape
Alabama,4,13.2,236,58,21.2
Alaska,4,10,263,48,44.5
Arizona,4,8.1,294,80,31
Arkansas,3,8.8,190,50,19.5
California,4,9,276,91,40.6
Colorado,3,7.9,204,78,38.7
Connecticut,2,3.3,110,77,11.1
Delaware,4,5.9,238,72,15.8
Florida,4,15.4,335,80,31.9

Parameter

Im untenstehenden Code laden wir die Daten mit urllib herunter. Anschließend verwenden wir np.genfromtxt , um sie in das NumPy-Array zu importieren. Beachten Sie die folgenden Parameter:

Trennzeichen="," Der Trenner zwischen den Spalten.
skip_header=1 Wir überspringen den Header, da dieser Spaltenüberschriften und keine Daten enthält.
dtype=dtypes

Dieser Parameter bedeutet, die Tupel (Name, dtype) zu verwenden, um die Daten mit dem Namen als zugewiesenem numpy dtype (Datentyp) umzuwandeln.

Wenn wir keine Namen vergeben wollen, verwenden wir (dtype1, dtype2, ...).

Beachten Sie, dass wir den Typ float verwenden. Da NumPy mit der C-Sprache aufgebaut ist, können Sie jeden der vielen C-Typen verwenden, wie z. B. 32-Bit-Ganzzahlen usw.

Wir verwenden S12 für STR, da STR diese Daten in " " umwandelt. Du könntest auch Unicode U12 verwenden.

Wir hätten auch np.string_ und np.unicode_ schreiben können, aber das liefert keine Länge, also bedeutet es ein null-terminiertes Byte, das kein String ist. Es würde also ein leeres Feld zurückgeben.

Wir hätten auch Objekt verwenden können.

Beachten Sie, dass NumPy folgende Namen verwendet:

· dtype=[('crime', 'S12'), ('cluster', '<f8'), ('Murder', '<f8'), ('Assault', '<f8'), ('UrbanPop', '<f8'), ('Rape', '<f8')])

· Das <-Vorzeichen bezieht sich auf die Byte-Ordnung, die little-endian oder big-endian sein kann.

usecols=(1,5) Wir haben diesen Parameter nicht verwendet. Wenn wir ihn verwendet hätten, hätte er die erste Spalte übersprungen.

Der Code erklärte es

Hier ist der Code:

    import urllib
import numpy as np
from io import StringIO
url = "https://raw.githubusercontent.com/werowe/MLexamples/master/crime_data.csv"
file = urllib.request.urlopen(url)
data = ""
for d in file:
data = data + d.decode('utf-8')
dtypes=[('crime',"S12"),
('cluster', float),
('Murder' ,float),
('Assault',float),
('UrbanPop',float),
('Rape',float)]
arr=np.genfromtxt(StringIO(data), delimiter=",", skip_header=1,
dtype=dtypes)

Ergebnisse in:

    array([(b'Alabama', 4., 13.2, 236., 58., 21.2),
(b'Alaska', 4., 10. , 263., 48., 44.5),

Beachten Sie, dass NumPy ein Byte-Array für die Zeichenkettenspalte zurückgab. Wenn wir eine Zeichenkette wollen, können wir Unicode verwenden:

    dtypes=[('crime','U25'),
('cluster', '>f'),
('Murder' ,float),
('Assault',float),
('UrbanPop',float),
('Rape',float)]

Ergebnisse in:

    array([('Alabama', 4., 13.2, 236., 58., 21.2),
('Alaska', 4., 10. , 263., 48., 44.5),

Wenn wir die Dtypen weglassen und NumPy die Datentypen auswählen lassen, wird es NaN (fehlende Daten) in die String-Spalte gesetzt. Es verwendet außerdem Float als Standard für alle numerischen Werte.

    arr=np.genfromtxt(StringIO(data), delimiter=",", skip_header=1)

Ergebnisse in:

    array([[  nan,   4. ,  13.2, 236. ,  58. ,  21.2],
[  nan,   4. ,  10. , 263. ,  48. ,  44.5],

Da wir Spalten Namen zugewiesen haben, können wir auf deren Namen statt auf den Index verweisen:

    arr['Murder']
    array([13.2, 10. ,  8.1,  8.8,  9. ,  7.9,  3.3,  5.9, 15.4, 17.4,  5.3,
2.6, 10.4,  7.2,  2.2,  6. ,  9.7, 15.4,  2.1, 11.3,  4.4, 12.1,
2.7, 16.1,  9. ,  6. ,  4.3, 12.2,  2.1,  7.4, 11.4, 11.1, 13. ,
0.8,  7.3,  6.6,  4.9,  6.3,  3.4, 14.4,  3.8, 13.2, 12.7,  3.2,
2.2,  8.5,  4. ,  5.7,  2.6,  6.8])

Fehlende Werte

Wir können NumPy sagen, dass sie einen Wert für einen fehlenden Wert, wie -1, mit missing_values eingeben soll. Das Standardverhalten für Floats ist np.nan. Für int ist es -1.

    Alaska,4,10,263,48,44.5
Arizona,4, ,1,294,80,31

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Künstliche Intelligenz

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.