Konvertieren Sie CSV- und TsV-Daten in eine Matrix mit Python als Beispiel für MovieLens

Ich beginne mit maschinellem Lernen mit Python.

Unabhängig vom verwendeten Algorithmus ist es wichtig, Beispieldaten im CSV- oder TsV-Format in eine Matrix zu konvertieren. Daher habe ich verschiedene Methoden untersucht.

Dieses Mal verwenden wir 100K MovieLens 100K-Datensatz des MovieLens-Datensatzes, der als der am häufigsten verwendete Benchmark für die Co-Filterung gilt. ..

MovieLens Dataset

Weitere Informationen zu Dataset finden Sie unter README. Ich denke jedoch, dass u.data die Hauptverwendung sein wird.

Ein 4-Spalten-Tsv mit Benutzer-ID, Element-ID, Bewertung und Zeitstempel.

196	242	3	881250949
186	302	3	891717742
22	377	1	878887116
244	51	2	880606923
166	346	1	886397596
298	474	4	884182806
...

Schließlich möchte ich die Bewertungsbewertung für Element j des Benutzers i in eine Matrix umwandeln, so dass R (i, j) = Bewertung ist.

Verwenden Sie ein Standard-CSV-Modul

with open('u.data', newline='') as f:
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
        print(row)

Wenn Sie es nur lesen möchten, reicht das CSV-Modul aus. Um jedoch die Form der Matrix R zu bestimmen, müssen die Maximalwerte von user_id und item_id ermittelt werden.

Behandle CSV mit Pandas

Verwenden Sie das pandas: leistungsstarke Python-Datenanalyse-Toolkit, um die Datenverarbeitung zu verbessern.

Die Installation ist pip install pandas, und die Methode zum Ermitteln des Maximalwerts für jede Spalte von csv lautet wie folgt.

>>> df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id', 'rating', 'timestamp'])

>>> df.max()
user_id            943
item_id           1682
rating               5
timestamp    893286638
dtype: int64

Dabei ist df ein DataFrame-Objekt und df.max () ein Series-Objekt.

>>> type(df)
<class 'pandas.core.frame.DataFrame'>

>>> type(df.max())
<class 'pandas.core.series.Series'>

Um auf den Maximalwert für jede Spalte zuzugreifen, haben Sie folgende Möglichkeiten:

>>> df.max().ix['user_id']
943
>>> df.max().ix['item_id']
1682

Für Kommentarartikel auf Japanisch ist http://oceanmarine.sakura.ne.jp/sphinx/group/group_pandas.html leicht zu verstehen.

In die gewünschte Matrix konvertieren

An diesem Punkt müssen Sie lediglich jedes Datenelement ernsthaft verarbeiten.

import numpy as np
import pandas as pd

df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id', 'rating', 'timestamp'])

shape = (df.max().ix['user_id'], df.max().ix['item_id'])
R = np.zeros(shape) 

for i in df.index:
    row = df.ix[i]
    R[row['user_id'] -1 , row['item_id'] - 1] = row['rating']


>>> print(R)
[[ 5.  3.  4. ...,  0.  0.  0.]
 [ 4.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ...,
 [ 5.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  5.  0. ...,  0.  0.  0.]]

Im Allgemeinen handelt es sich um eine spärliche Matrix (in vielen Filmen ist die Anzahl, die eine Person bewertet, begrenzt), daher scheint es besser, spärlich zu verwenden.

import numpy as np
import pandas as pd
from scipy import sparse

df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id', 'rating', 'timestamp'])

shape = (df.max().ix['user_id'] + 1, df.max().ix['item_id'] + 1)
R = sparse.lil_matrix(shape) 

for i in df.index:
    row = df.ix[i]
    R[row['user_id'], row['item_id']] = row['rating']

>>> print(R.todense())
[[ 5.  3.  4. ...,  0.  0.  0.]
 [ 4.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ...,
 [ 5.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  5.  0. ...,  0.  0.  0.]]

das ist alles.

Korrektur

Ich habe ein Problem gefunden, bei dem die erste Zeile und die erste Spalte extra waren, also habe ich es behoben. Im ersten Entwurf habe ich wie folgt geschrieben. ..

shape = (df.max().ix['user_id'] + 1, df.max().ix['item_id'] + 1)
R = np.zeros(shape) 

for i in df.index:
    row = df.ix[i]
    R[row['user_id'], row['item_id']] = row['rating']

Recommended Posts

Konvertieren Sie CSV- und TsV-Daten in eine Matrix mit Python als Beispiel für MovieLens
Konvertieren Sie Excel-Daten mit Python in JSON
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Schreiben Sie CSV-Daten mit AWS-Lambda + Python in AWS-S3
Lesehinweis: Einführung in die Datenanalyse mit Python
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Verarbeiten Sie CSV-Daten mit Python (Zählverarbeitung mit Pandas)
Schreiben Sie mit Python in csv
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
[Python] Mit Python in eine CSV-Datei schreiben
Ausgabe in eine CSV-Datei mit Python
Konvertieren Sie die Liste mit Python in DataFrame
So importieren Sie CSV- und TSV-Dateien mit Python in SQLite
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
[Python] Speichern einer CSV-Datei als eindimensionale Array-Daten
[Python] Lesen Sie eine CSV-Datei mit großen Datenmengen mithilfe eines Generators
[Python] So konvertieren Sie eine Datenbankdatei in CSV
[Data Science-Grundlagen] Ich habe versucht, mit Python von CSV auf MySQL zu speichern
So konvertieren Sie Python in eine exe-Datei
[Python] Konvertieren Sie CSV-Dateibegrenzer in Tabulatortrennzeichen
Konvertieren Sie mit pdfplumber von PDF in CSV
In der XML-Datenbank (BaseX) gespeichertes XML-Dokument in das CSV-Format konvertieren (mit Python)
Konvertiere Hiragana mit Python (Beta) in Romaji
[Python] [Excel] Betreiben Sie Excel-Tabellen in Python mit openpyxl (am Beispiel eines Testblatts).
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Konvertieren Sie chinesische Zahlen mit Python in arabische Zahlen
Vorverarbeitung mit Python. Konvertieren Sie die Tag-Suchergebnisse von Nico Nico-Videos in das CSV-Format
Beispiel für die Wavelet-Konvertierung von Bildern in Python
Zusammenfassung zum Lesen numerischer Daten mit Python [CSV, NetCDF, Fortran Binary]
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 2: Importieren Sie Daten mit PowerShell in SQL Server
So senden Sie automatisch E-Mails mit Anhängen mithilfe der Google Mail-API in Python
Lesen einer CSV-Datei mit Python 2/3
Python C / C ++ - Erweiterungsmuster-Übergeben Sie Daten als np.array an Python
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Konvertieren Sie PDFs mit Python in Massenbilder
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Senden Sie eine E-Mail mit Python an Spushis Adresse
Konvertieren Sie die SVG-Datei mit Python in png / ico
So beschneiden Sie ein Bild mit Python + OpenCV
Konvertieren Sie Windows-Epochenwerte mit Python in das Datum
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Generieren Sie mit Python eine Einfügeanweisung aus CSV.
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
Konvertieren Sie Daten im JSON-Format in txt (mit yolo)
Beispiel für das Lesen und Schreiben von CSV mit Python
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat
[Python] Konvertiert die Zeitanzeige (str-Typ) mit "" "und" '"in Sekunden (float-Typ) mit datetime und timedelta
Ich möchte benutzerdefinierte Datenattribute von HTML als Elemente mit Python Selenium erhalten
Als offene Daten mithilfe der CKAN-API in Python hochladen und automatisch mit Github-Aktionen verknüpfen
Ich möchte ein Bild mit Lollipop in WebP konvertieren
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So kratzen Sie Bilddaten von Flickr mit Python
Registrieren Sie gemeinsam Daten im Firestore mithilfe der CSV-Datei in Python
Ich habe versucht, eine CSV-Datei mit Python zu berühren
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten