ImportError: Kein Modul namens dateutil.parser

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

Ich erhalte die folgende Fehlermeldung beim Importieren von pandas in ein Python-Programm

monas-mbp:book mona$ sudo pip install python-dateutil Anforderung bereits erfüllt (verwenden Sie --upgrade zum Upgrade): python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Aufräumen... monas-mbp:book mona $ python t1.py Kein Modul namens dateutil.parser Traceback (letzter Aufruf zuletzt): Datei "t1.py", Zeile 4, in <module> Pandas als PD-Datei importieren "/Library/Python/2.7/site-packages/pandas/__init__.py", Zeile 6, in <module> von . import hashtable, tslib, lib File „tslib.pyx“, line 31, in init pandas.tslib (pandas/tslib.c:48782) ImportError: No module named dateutil.parser 

Also hier ist das programm:

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": {"Pleite 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} } Klassenempfehlung: def __init__(self, data, k=1, metric= "pearson", n=5): """ Empfehlungsgeber aktuell initialisieren, wenn Daten Wörterbuch sind, wird der Empfehlungsgeber darauf initialisiert. Für alle anderen Datentypen findet keine Initialisierung statt k ist der k-Wert für k Nächster-Nachbar-Metrik ist die zu verwendende Entfernungsformel n ist die maximale Anzahl von Empfehlungen, die gemacht werden sollen""" self.k = k self.n = n self .username2id = {} self.userid2name = {} self.productid2name = {} # aus irgendeinem Grund möchte ich den Namen der Metrik speichern self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # wenn Daten Wörterbuch sind, setze Empfehlungsdaten darauf # if type(data).__name__ == "dict": self.data = data def convertProductID2name(self, id): """Gegebene Produkt-ID-Nummer gibt Produktname zurück """ if id in self.productid2name: return self.productid2name[id] else: return id def userRatings(self, id, n): """Gib n Top-Bewertungen für Benutzer mit ID zurück""" 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) in Bewertungen] # schließlich sortieren und Bewertungen zurückgeben.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 =""): """lädt den BX-Buchdatensatz. Pfad ist, wo sich die BX-Dateien befinden""" self.data = {} i = 0 # # Buchbewertungen zuerst in self.data laden # f = codecs.open(path + "BX-Book-Ratings.csv", " r", "utf8") für Zeile in f: i += 1 #Zeile in Felder trennen 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() # # Jetzt Bücher in self.productid2name laden # Bücher enthalten unter anderem isbn, Titel und Autor # f = codecs.open(path + "BX- Books.csv", "r", "utf8") für Zeile in f: i += 1 #Zeile in Felder trennen fields = line.split(";") isbn = fields[0].strip(""") title = fields[1].strip(""") author = fields[2].strip().strip(""") title = title + " by " + author self.productid2name[isbn] = title f.close () # # Laden Sie jetzt die Benutzerinformationen sowohl in self.userid2name als auch # self.username2id # f = codecs.open(path + "BX-U sers.csv", "r", "utf8") für Zeile in f: i += 1 #print(line) #Zeile in Felder trennen fields = line.split(";") userid = fields[0].strip (""") location = fields[1].strip(""") if len(fields) > 3: Alter = Felder[2].strip().strip(""") sonst: Alter = "NULL" wenn Alter != "NULL": Wert = Ort + " (Alter: " + Alter + ")" sonst : value = location self.userid2name[userid] = value 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 für Schlüssel in Bewertung1: wenn Schlüssel in Bewertung2: n += 1 x = Bewertung1[Schlüssel] y = Bewertung2[Schlüssel] 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 # jetzt nenner berechnen nenner = (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): """erzeugt eine sortierte Liste nach Benutzern auf ihre Distanz zu Benutzername""" distances = [] zum Beispiel in self.data: if instance != username: distance = self.fn(self.data[username], self.data[instance]) distances.append(( Instanz, Entfernung)) # sortieren basierend auf d istance -- nächste zuerst distances.sort(key=lambda artistTuple: artistTuple[1], reverse=True) return distances def. empfohlen(selbst, benutzer): """Empfehlungsliste geben"""empfehlungen = {} # first get Liste der Benutzer nach Nähe sortiert nearst = self.computeNearestNeighbor(user) # # jetzt die Bewertungen für den Benutzer abrufen # userRatings = self.data[user] # # Gesamtentfernung ermitteln totalDistance = 0.0 für i in range(self.k) : totalDistance += next[i][1] # jetzt durch die k nächsten Nachbarn iterieren # ihre Bewertungen für i in range(self.k) akkumulieren: # Stück des Kuchens berechnen Gewicht = next[i][1] / totalDistance # den Namen der Person abrufen name = next[i][0] # die Bewertungen für diese Person abrufen NeighborRatings = self.data[name] # den Namen der Person abrufen # jetzt Bandnachbarn finden, die der Benutzer nicht für den Künstler bewertet hat in NeighborRatings: wenn kein Künstler in UserRatings: wenn Künstler nicht in Empfehlungen: Recommendations[Künstler] = (neighborRatings[Künstler] * Gewicht) sonst: Recommendations[Arti st] = (Empfehlungen[Künstler] + NeighborRatings[Künstler] * Gewicht) # jetzt Liste aus Wörterbuch erstellen Recommendations = list(recommendations.items()) Recommendations = [(self.convertProductID2name(k), v) for (k, v ) in Recommendations] # Endlich sortieren und Recommendations zurückgeben.sort(key=lambda artistTuple: artistTuple[1], reverse = True) # Die ersten n Elemente zurückgeben return Recommendations[:self.n] r = Referrer(Users) # Der Autor Implementierung r.loadBookDB("/Users/mona/Downloads/BX-Dump/") ratings = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Book-Ratings.csv", sep="; ", quotechar=""", escapechar="") Bücher = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Books.csv", sep=";", quotechar=""" , escapechar="") Benutzer = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Users.csv", sep=";", quotechar=""", escapechar="") pivot_rating = ratings.pivot(index="User-ID", column="ISBN", values="Book-Rating")