Convertir les données csv, tsv en une matrice avec MovieLens en utilisant python comme exemple

Je commence le machine learning avec python.

Quel que soit l'algorithme utilisé, il est essentiel de convertir des échantillons de données au format csv ou tsv en une matrice, j'ai donc étudié plusieurs méthodes.

Cette fois, nous utiliserons 100K MovieLens 100K Dataset de MovieLens Dataset, qui est considéré comme la référence la plus couramment utilisée pour le co-filtrage. ..

MovieLens Dataset

Pour plus d'informations sur Dataset, vous pouvez lire README, mais je pense que u.data sera le principal à utiliser.

Un tsv à 4 colonnes avec user_id, item_id, rating et timestamp.

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

Enfin, je souhaite convertir la note d'évaluation de l'élément j de l'utilisateur i en une matrice telle que R (i, j) = note.

Utiliser le module csv standard

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

Si vous voulez juste le lire, le module csv suffit. Cependant, afin de déterminer la forme de la matrice R, il est nécessaire de trouver les valeurs maximales de user_id et item_id.

Gérez le CSV avec les pandas

Utilisez le pandas: boîte à outils d'analyse de données Python puissante pour améliorer la gestion des données.

L'installation est pip install pandas, et la méthode pour trouver la valeur maximale pour chaque colonne de csv est la suivante.

>>> 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

Où df est un objet DataFrame et df.max () est un objet Series.

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

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

Pour accéder à la valeur maximale de chaque colonne, vous pouvez effectuer les opérations suivantes:

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

Pour les articles de commentaires en japonais, http://oceanmarine.sakura.ne.jp/sphinx/group/group_pandas.html est facile à comprendre.

Convertir dans la matrice souhaitée

À ce stade, tout ce que vous avez à faire est de traiter sérieusement chaque élément de données.

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.]]

En général, c'est une matrice clairsemée (dans de nombreux films, le nombre qu'une personne évalue est limité), il semble donc préférable d'utiliser clairsemé.

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.]]

c'est tout.

correction

J'ai trouvé un problème où la première ligne et la première colonne étaient supplémentaires, alors je l'ai corrigé. Dans le premier projet, j'ai écrit ce qui suit. ..

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

Convertir les données csv, tsv en une matrice avec MovieLens en utilisant python comme exemple
Convertir des données Excel en JSON avec python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
Note de lecture: Introduction à l'analyse de données avec Python
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Traiter les données csv avec python (traitement du comptage à l'aide de pandas)
Écrire en csv avec Python
Comment convertir un tableau en dictionnaire avec Python [Application]
[Python] Ecrire dans un fichier csv avec Python
Sortie vers un fichier csv avec Python
Convertir la liste en DataFrame avec python
Comment importer des fichiers CSV et TSV dans SQLite avec Python
[Python] Explique comment utiliser la fonction format avec un exemple
[Python] Comment stocker un fichier csv en tant que données de tableau à une dimension
[Python] Lire un fichier csv avec une grande taille de données à l'aide d'un générateur
[Python] Comment convertir un fichier db en csv
[Bases de la science des données] J'ai essayé d'enregistrer de csv à mysql avec python
Comment convertir Python en fichier exe
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Convertir de PDF en CSV avec pdfplumber
Convertir un document XML stocké dans une base de données XML (BaseX) au format CSV (en utilisant Python)
Convertir Hiragana en Romaji avec Python (bêta)
[Python] [Excel] Exploiter des feuilles Excel à partir de Python en utilisant openpyxl (en utilisant une feuille de test comme exemple)
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Convertir des nombres chinois en nombres arabes avec Python
Prétraitement avec Python. Convertir les résultats de recherche de balises de la vidéo Nico Nico au format CSV
Exemple de conversion en ondelettes d'images en Python
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 2: importer des données dans SQL Server à l'aide de PowerShell
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Comment lire un fichier CSV avec Python 2/3
Modèle d'extension Python C / C ++ - Passez des données à Python en tant que np.array
Essayez d'utiliser django-import-export pour ajouter des données csv à django
Convertir un PDF en image (JPEG / PNG) avec Python
Convertissez des PDF en images en masse avec Python
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Envoyez un email à l'adresse de Spushi avec python
Convertir un fichier svg en png / ico avec Python
Comment recadrer une image avec Python + OpenCV
Convertir les valeurs d'époque Windows à ce jour avec python
J'ai essayé d'obtenir des données CloudWatch avec Python
Générez une instruction d'insertion à partir de CSV avec Python.
Convertir STL en maillage Voxel à l'aide de Python VTK
Convertir les données au format json en txt (en utilisant yolo)
Exemple de lecture et d'écriture de CSV avec Python
Convertir une chaîne au format de liste caractère par caractère avec python
[Python] Convertit l'affichage de l'heure (type str) en utilisant "" "et" '"en secondes (type float) avec datetime et timedelta
Je souhaite obtenir des attributs de données personnalisés de HTML sous forme d'éléments à l'aide de Python Selenium
Télécharger en tant que données ouvertes à l'aide de l'API CKAN en Python et lier automatiquement avec les actions Github
Je veux convertir une image en WebP avec sucette
Comment convertir / restaurer une chaîne avec [] en python
Comment récupérer des données d'image de Flickr avec Python
Enregistrez collectivement des données dans Firestore à l'aide d'un fichier csv en Python
J'ai essayé de toucher un fichier CSV avec Python
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas