ImportError: Geen module met de naam dateutil.parser

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

Ik krijg de volgende foutmelding bij het importeren van panda's in een Python-programma

monas-mbp:book mona$ sudo pip install python-dateutil Vereiste al voldaan (gebruik --upgrade om te upgraden): python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Opruimen... monas-mbp:book mona $ python t1.py Geen module genaamd dateutil.parser Traceback (meest recente oproep laatst): bestand "t1.py", regel 4, in <module> importeer panda's als pd-bestand "/Bibliotheek/Python/2.7/site-packages/pandas/__init__.py", regel 6, in <module> van . import hashtable, tslib, lib Bestand "tslib.pyx", regel 31, in init pandas.tslib (pandas/tslib.c:48782) ImportError: Geen module genaamd dateutil.parser 

Ook hier is het programma:

import codecs van wiskunde 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": {"Brake 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} } klasse aanbeveling: def __init__(self, data, k=1, metric= "pearson", n=5): """ initialiseer de aanbeveler momenteel, als de gegevens een woordenboek zijn, wordt de aanbeveler ermee geïnitialiseerd. Voor alle andere gegevenstypes vindt geen initialisatie plaats. k is de k-waarde voor k naaste-buurmetriek is welke afstandsformule moet worden gebruikt n is het maximale aantal aanbevelingen dat kan worden gedaan""" self.k = k self.n = n self .username2id = {} self.userid2name = {} self.productid2name = {} # om de een of andere reden wil ik de naam van de metriek bewaren self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # als gegevens een woordenboek zijn, stel aanbevelingsgegevens in # if type(data).__name__ == "dict": self.data = data def convertProductID2name(self, id): """Gegeven product-id-nummer retour productnaam """ if id in self.productid2name: return self.productid2name[id] else: return id def userRatings(self, id, n): """Retourneer topscores voor gebruiker met id""" print ("Beoordelingen voor " + self.userid2name[id]) ratings = self.data[id] print(len(ratings)) ratings = list(ratings.items()) ratings = [(self.convertProductID2name(k), v) for (k , v) in beoordelingen] # eindelijk sorteer en retourneer beoordelingen.sort(key=lambda ar tistTuple: artistTuple[1], reverse = True) beoordelingen = beoordelingen[:n] voor beoordeling in beoordelingen: print("%s %i" % (rating[0], rating[1])) def loadBookDB(self, path =""): """laadt de BX-boekgegevensset. Pad is waar de BX-bestanden zich bevinden""" self.data = {} i = 0 # # Laad eerst boekbeoordelingen in self.data # f = codecs.open(pad + "BX-Book-Ratings.csv", " r", "utf8") voor regel in f: i += 1 #scheid regel in velden velden = line.split(";") gebruiker = velden[0].strip(""") book = velden[1] .strip(""") rating = int(fields[2].strip().strip(""")) als gebruiker in self.data: currentRatings = self.data[user] else: currentRatings = {} currentRatings[ book] = rating self.data[user] = currentRatings f.close() # # Laad nu boeken in self.productid2name # Boeken bevat onder andere isbn, titel en auteur # f = codecs.open(pad + "BX- Books.csv", "r", "utf8") voor regel in f: i += 1 #scheid regel in velden velden = line.split(";") isbn = velden[0].strip(""") titel = velden[1].strip(""") auteur = velden[2].strip().strip(""") title = titel + " door " + auteur zelf.productid2name[isbn] = titel f.close () # # Laad nu gebruikersinfo in zowel self.userid2name als # self.username2id # f = codecs.open(pad + "BX-U sers.csv", "r", "utf8") voor regel in f: i += 1 #print(line) #scheid regel in velden velden = line.split(";") userid = velden[0].strip (""") locatie = velden[1].strip(""") if len(fields) > 3: leeftijd = velden[2].strip().strip(""") else: leeftijd = "NULL" if age != "NULL": waarde = locatie + " (leeftijd: " + leeftijd + ")" else : value = locatie self.userid2name[userid] = waarde self.username2id[locatie] = 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 voor toets in rating1: indien toets in rating2: n += 1 x = rating1[key] y = rating2[key] sum_xy += x * y sum_x += x sum_y += y sum_x2 += pow(x, 2) sum_y2 += pow(y, 2) if n == 0: retourneer 0 # bereken nu noemer noemer = (sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow( sum_y, 2) / n)) if noemer == 0: return 0 else: return (sum_xy - (sum_x * sum_y) / n) / noemer def computeNearestNeighbor(self, username): """creëert een gesorteerde lijst van gebruikers gebaseerd op hun afstand tot gebruikersnaam""" distances = [] bijvoorbeeld in self.data: if instance != gebruikersnaam: distance = self.fn(self.data[username], self.data[instance]) distances.append(( instantie, afstand)) # sorteer op basis van d istance -- dichtstbijzijnde eerst distances.sort(key=lambda artistTuple: artistTuple[1], reverse=True) return distances def recommend(self, user): """Geef een lijst met aanbevelingen""" aanbevelingen = {} # first get lijst met gebruikers gerangschikt op nabijheid dichtstbijzijnde = self.computeNearestNeighbor(user) # # nu de beoordelingen voor de gebruiker ophalen # userRatings = self.data[user] # # bepaal de totale afstand totalDistance = 0.0 voor i in range(self.k) : totalDistance += dichtstbijzijnde[i][1] # herhaal nu de k dichtstbijzijnde buren # verzamel hun beoordelingen voor i in range(self.k): # bereken het stuk taartgewicht = dichtstbijzijnde[i][1] / totalDistance # verkrijg de naam van de persoon naam = dichtstbijzijnde[i][0] # verkrijg de beoordelingen voor deze persoon buurmanRatings = self.data[naam] # verkrijg de naam van de persoon # zoek nu bands buur beoordeeld die gebruiker niet heeft gedaan voor artiest in buurmanBeoordelingen: indien niet artiest in gebruikerBeoordelingen: indien artiest niet in aanbevelingen: aanbevelingen[artiest] = (neighborRatings[artiest] * gewicht) else: aanbevelingen[arti st] = (aanbevelingen[artiest] + buurmanRatings[artiest] * gewicht) # maak nu een lijst van woordenboekaanbevelingen = lijst(aanbevelingen.items()) aanbevelingen = [(self.convertProductID2name(k), v) voor (k, v ) in aanbevelingen] # sorteer en retourneer aanbevelingen.sort(key=lambda artistTuple: artistTuple[1], reverse = True) # Retourneer de eerste n items retourneer aanbevelingen[:self.n] r = recommender(users) # De auteur implementatie r.loadBookDB("/Users/mona/Downloads/BX-Dump/") ratings = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Book-Ratings.csv", sep="; ", quotechar=""", escapechar="") books = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Books.csv", sep=";", quotechar=""" , escapechar="") gebruikers = 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")