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
Damit ist dieses Tutorial beendet.
Verwandte Literatur
Pandas Guide
- Pandas-Einführung & Tutorials für Anfänger
- Pandas: Wie man CSV- und JSON-Dateien liest
- Wie man ein Pandas-Dataframe aus einem Wörterbuch erstellt
- Wie man Daten in Pandas gruppiert, verkettet und zusammenführt
- Pandas-Datentypen
- Umgang mit fehlenden Daten in Pandas: NaN-Werte erklärt
- NumPy-Einführung mit Beispielen
- Verwendung von StringIO, um getrennte Textdateien in NumPy zu lesen
- Verwendung der NumPy-Bincount-Statistikfunktion
- Top NumPy Statistische Funktionen & Verteilungen
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.