ImportError : aucun module nommé dateutil.parser

| | | | | | | | | | | | | | | | | | | | | | | | | | | |

Je reçois l'erreur suivante lors de l'importation de pandas dans un programme Python

monas-mbp:book mona$ sudo pip install python-dateutil Exigence déjà satisfaite (utilisez --upgrade pour mettre à niveau) : python-dateutil dans /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Nettoyage... monas-mbp:book mona $ python t1.py Aucun module nommé dateutil.parser Traceback (appel le plus récent en dernier) : Fichier "t1.py", ligne 4, dans <module> importer des pandas en tant que pd Fichier "/Library/Python/2.7/site-packages/pandas/__init__.py", ligne 6, dans <module> à partir de . import hashtable, tslib, lib Fichier "tslib.pyx", ligne 31, init pandas.tslib (pandas/tslib.c:48782) ImportError : Aucun module nommé dateutil.parser 

Aussi voici le programme :

import codecs from math import sqrt import numpy as np import pandas as pd users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0}, "Bill":{"Blues Traveler": 2.0, " Broken Bells": 3.5, "Deadmau5": 4.0, "Phoenix": 2.0, "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0}, "Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0, "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5, "Slightly Stoopid": 1.0}, "Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0, "Deadmau5 " : 4.5, "Phoenix": 3.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 2.0}, "Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0, "Norah Jones": 4.0, "The Strokes": 4.0, "Vampire Weekend": 1.0}, "Jordyn": {"Broke n Bells": 4.5, "Deadmau5": 4.0, "Norah Jones": 5.0, "Phoenix": 5.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 4.0}, "Sam" : {"Blues Traveler": 5.0, "Broken Bells": 2.0, "Norah Jones": 3.0, "Phoenix": 5.0, "Slightly Stoopid": 4.0, "The Strokes": 5.0}, "Veronica": {" Blues Traveler": 3.0, "Norah Jones": 5.0, "Phoenix": 4.0, "Slightly Stoopid": 2.5, "The Strokes": 3.0} } recommandation de classe : def __init__(self, data, k=1, metric= "pearson", n=5): """ initialise actuellement le recommandateur, si les données sont un dictionnaire, le recommandateur y est initialisé. Pour tous les autres types de données, aucune initialisation ne se produit k est la valeur k pour k la métrique du plus proche voisin est la formule de distance à utiliser n est le nombre maximum de recommandations à faire""" self.k = k self.n = n self .username2id = {} self.userid2name = {} self.productid2name = {} # pour une raison quelconque, je veux enregistrer le nom de la métrique self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # si les données sont un dictionnaire, définissez les données de recommandation dessus # if type(data).__name__ == "dict": self.data = data def convertProductID2name(self, id): """Le numéro d'identification du produit donné renvoie le nom du produit """ if id in self.productid2name: return self.productid2name[id] else: return id def userRatings(self, id, n): """Return n top ratings for user with id""" print ("Ratings for " + self.userid2name[id]) ratings = self.data[id] print(len(ratings)) ratings = list(ratings.items()) ratings = [(self.convertProductID2name(k), v) for (k , v) dans les notes] # enfin trier et renvoyer les notes.sort(key=lambda ar tistTuple: artistTuple[1], reverse = True) ratings = ratings[:n] for rating in ratings: print("%s %i" % (rating[0], rating[1])) def loadBookDB(self, path ="") : """charge l'ensemble de données du livre BX. Le chemin est l'endroit où se trouvent les fichiers BX""" self.data = {} i = 0 # # Commencez par charger les notes du livre dans self.data # f = codecs.open(path + "BX-Book-Ratings.csv", " r", "utf8") pour la ligne dans f : i += 1 #ligne séparée en champs champs = ligne.split(";") utilisateur = champs[0].strip(""") livre = champs[1] .strip(""") rating = int(fields[2].strip().strip(""")) if user in self.data : currentRatings = self.data[user] else : currentRatings = {} currentRatings[ book] = rating self.data[user] = currentRatings f.close() # # Chargez maintenant les livres dans self.productid2name # Books contient isbn, title et author parmi d'autres champs # f = codecs.open(path + "BX- Books.csv", "r", "utf8") pour la ligne dans f : i += 1 #ligne séparée en champs champs = ligne.split(";") isbn = champs[0].strip(""") titre = champs[1].strip(""") auteur = champs[2].strip().strip(""") titre = titre + " par " + auteur self.productid2name[isbn] = titre f.close () # # Chargez maintenant les informations de l'utilisateur dans self.userid2name et # self.username2id # f = codecs.open(path + "BX-U sers.csv", "r", "utf8") pour la ligne dans f : i += 1 #print(line) #ligne séparée en champs fields = line.split(";") userid = fields[0].strip (""") location = fields[1].strip(""") if len(fields) > 3 : âge = champs[2].strip().strip(""") sinon : âge = "NULL" si âge != "NULL": valeur = emplacement + " (âge : " + âge + ")" sinon : valeur = emplacement self.userid2name[userid] = valeur self.username2id[location] = userid f.close() print(i) def pearson(self, rating1, rating2): sum_xy = 0 sum_x = 0 sum_y = 0 sum_x2 = 0 sum_y2 = 0 n = 0 pour saisir note1 : si saisir note2 : n += 1 x = note1[clé] y = note2[clé] sum_xy += x * y sum_x += x sum_y += y sum_x2 += pow(x, 2) sum_y2 += pow(y, 2) if n == 0: return 0 # maintenant calculer le dénominateur dénominateur = (sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow( sum_y, 2) / n)) if denominator == 0: return 0 else: return (sum_xy - (sum_x * sum_y) / n) / denominator def computeNearestNeighbor(self, username): """crée une liste triée d'utilisateurs basée sur leur distance au nom d'utilisateur """ distances = [] par exemple dans self.data: if instance != username: distance = self.fn(self.data[username], self.data[instance]) distances.append(( instance, distance)) # tri basé sur d distance -- premières distances les plus proches.sort(key=lambda artistTuple: artistTuple[1], reverse=True) return distances def recommend(self, user): """Give list of recommendations""" recommendations = {} # first get liste des utilisateurs classés par proximité les plus proches = self.computeNearestNeighbor(user) # # obtenez maintenant les notes de l'utilisateur # userRatings = self.data[user] # # déterminez la distance totale totalDistance = 0.0 for i in range(self.k) : totalDistance += plus proche[i][1] # maintenant parcourir les k voisins les plus proches # accumuler leurs notes pour i dans la plage (self.k): # calculer le poids de la tranche de tarte = plus proche[i][1] / totalDistance # récupère le nom de la personne name = le plus proche[i][0] # récupère les notes de cette personne neighborRatings = self.data[name] # récupère le nom de la personne # trouve maintenant les groupes que le voisin n'a pas évalués pour l'artiste in neighborRatings : si pas artiste in userRatings : si artiste pas dans recommendations : recommendations[artist] = (neighborRatings[artist] * weight) else : recommendations[arti st] = (recommendations[artist] + neighborRatings[artist] * weight) # faites maintenant une liste à partir des recommandations du dictionnaire = list(recommendations.items()) recommendations = [(self.convertProductID2name(k), v) for (k, v ) dans recommendations] # Trier et renvoyer enfin recommendations.sort(key=lambda artistTuple: artistTuple[1], reverse = True) # Renvoie les n premiers éléments return recommendations[:self.n] r = recommender(users) # L'auteur implémentation r.loadBookDB("/Users/mona/Downloads/BX-Dump/") évaluations = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Book-Ratings.csv", sep="; ", quotechar=""", escapechar="") livres = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Books.csv", sep=";", quotechar=""" , escapechar="") utilisateurs = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Users.csv", sep=";", quotechar=""", escapechar="") pivot_rating = ratings.pivot(index="User-ID", columns="ISBN", values="Book-Rating")