ImportError: nessun modulo denominato dateutil.parser

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

Ricevo il seguente errore durante l'importazione di panda in un programma Python

monas-mbp:book mona$ sudo pip install python-dateutil Requisito già soddisfatto (usa --upgrade per aggiornare): python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Pulizia in corso... monas-mbp:book mona $ python t1.py Nessun modulo denominato dateutil.parser Traceback (ultima chiamata più recente): File "t1.py", riga 4, in <module> importa panda come file pd "/Library/Python/2.7/site-packages/pandas/__init__.py", riga 6, in <module> da . import hashtable, tslib, lib File "tslib.pyx", riga 31, in init pandas.tslib (pandas/tslib.c:48782) ImportError: Nessun modulo denominato dateutil.parser 

Anche ecco il programma:

import codec 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, "Leggermente stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0}, "Bill":{"Blues Traveller": 2.0, " Broken Bells": 3.5, "Deadmau5": 4.0, "Phoenix": 2.0, "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0}, "Chan": {"Blues Traveller": 5.0, "Broken Bells": 1.0, "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5, "Leggermente stoopid": 1.0}, "Dan": {"Blues Traveller": 3.0, "Broken Bells": 4.0, "Deadmau5 ": 4.5, "Phoenix": 3.0, "Leggermente 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 Traveller": 5.0, "Broken Bells": 2.0, "Norah Jones": 3.0, "Phoenix": 5.0, "Slightly Stoopid": 4.0, "The Strokes": 5.0}, "Veronica": {" Blues Traveller": 3.0, "Norah Jones": 5.0, "Phoenix": 4.0, "Slightly Stoopid": 2.5, "The Strokes": 3.0} } class presenter: def __init__(self, data, k=1, metric= "pearson", n=5): """ inizializza attualmente il suggeritore, se i dati sono un dizionario il suggeritore viene inizializzato su di esso. Per tutti gli altri tipi di dati di dati, non si verifica alcuna inizializzazione k è il valore k per k metrica del vicino più vicino è la formula della distanza da usare n è il numero massimo di raccomandazioni da fare""" self.k = k self.n = n self .username2id = {} self.userid2name = {} self.productid2name = {} # per qualche motivo voglio salvare il nome della metrica self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # se i dati sono un dizionario imposta i dati del suggerimento su di esso # if type(data).__name__ == "dict": self.data = data def convertProductID2name(self, id): """Numero ID prodotto fornito nome prodotto restituito """ if id in self.productid2name: return self.productid2name[id] else: return id def userRatings(self, id, n): """Restituisci n valutazioni migliori per utenti con id""" print ("Valutazioni per " + self.userid2name[id]) ratings = self.data[id] print(len(ratings)) ratings = list(ratings.items()) ratings = [(self.convertProductID2name(k), v) for (k , v) in ratings] # infine ordina e restituisce ratings.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 =""): """carica il set di dati del libro BX. Il percorso è dove si trovano i file BX""" self.data = {} i = 0 # # Prima carica le valutazioni del libro in self.data # f = codecs.open(percorso + "BX-Book-Ratings.csv", " r", "utf8") for line in f: i += 1 #separare la riga nei campi fields = line.split(";") user = fields[0].strip(""") book = fields[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() # # Ora carica i libri in self.productid2name # I libri contengono isbn, titolo e autore tra gli altri campi # f = codecs.open(percorso + "BX- Books.csv", "r", "utf8") for line in f: i += 1 #separate line into fields fields = line.split(";") isbn = fields[0].strip(""") titolo = campi[1].strip(""") autore = campi[2].strip().strip(""") titolo = titolo + " di " + autore self.productid2name[isbn] = titolo f.close () # # Ora carica le informazioni sull'utente sia in self.userid2name che in # self.username2id # f = codecs.open(percorso + "BX-U sers.csv", "r", "utf8") for line in f: i += 1 #print(line) #separate line into fields fields = line.split(";") userid = fields[0].strip (""") location = fields[1].strip(""") if len(fields) > 3: età = campi[2].strip().strip(""") else: age = "NULL" if age != "NULL": valore = posizione + " (età: " + età + ")" else : valore = posizione self.userid2name[userid] = valore 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 per digitare rating1: se digitare rating2: n += 1 x = rating1[chiave] y = rating2[chiave] 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 # ora calcola il denominatore denominatore = (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): """crea un elenco ordinato di utenti in base sulla loro distanza da username""" distances = [] ad esempio in self.data: if instance != username: distance = self.fn(self.data[username], self.data[instance]) distances.append(( istanza, distanza)) # ordina in base a d istance -- il più vicino first distances.sort(key=lambda artistTuple: artistTuple[1], reverse=True) return distances def consiglio(self, user): """Dare un elenco di consigli""" consigli = {} # first get elenco di utenti ordinato per vicinanza più vicino = self.computeNearestNeighbor(user) # # ora ottieni le valutazioni per l'utente # userRatings = self.data[user] # # determina la distanza totale totalDistance = 0.0 per i in range(self.k) : totalDistance += più vicino[i][1] # ora scorre i k vicini più vicini # accumulando le loro valutazioni per i in range(self.k): # calcola il peso della fetta di torta = più vicino[i][1] / totalDistance # ottieni il nome della persona name = più vicino[i][0] # ottieni le valutazioni per questa persona neighborRatings = self.data[name] # ottieni il nome della persona # ora trova le band che il neighbor ha valutato che l'utente non ha fatto per l'artista in neighborRatings: se non artista in userRatings: se artista non in consigli: raccomandazioni[artista] = (neighborRatings[artista] * peso) else: consigli[arti st] = (recommendations[artist] + neighborRatings[artist] * weight) # now make list from dictionary Recommendations = list(recommendations.items()) Recommendations = [(self.convertProductID2name(k), v) for (k, v ) nei consigli] # infine ordina e restituisci i consigli.sort(key=lambda artistTuple: artistTuple[1], reverse = True) # Restituisce i primi n elementi restituisce i consigli[:self.n] r = suggeritore(utenti) # L'autore implementazione r.loadBookDB("/Users/mona/Downloads/BX-Dump/") ratings = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Book-Ratings.csv", sep="; ", quotechar=""", escapechar="") libri = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Books.csv", sep=";", quotechar=""" , escapechar="") users = 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")