ImportError: Brak modułu o nazwie dateutil.parser

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

Otrzymuję następujący błąd podczas importowania pand w programie Python

monas-mbp:book mona$ sudo pip install python-dateutil Wymaganie już spełnione (użyj --upgrade, aby uaktualnić): python-dateutil w /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Czyszczenie... monas-mbp:book mona $ python t1.py Brak modułu o nazwie dateutil.parser Traceback (ostatnie wywołanie jako ostatnie): Plik „t1.py”, wiersz 4, w sekcji <module> importuj pandy jako plik pd „/Library/Python/2.7/site-packages/pandas/__init__.py”, wiersz 6, w <module> od . import hashtable, tslib, lib Plik "tslib.pyx", wiersz 31, init pandas.tslib (pandas/tslib.c:48782) ImportError: Brak modułu o nazwie dateutil.parser 

Również oto program:

importuj kodeki z matematyki import sqrt import numpy as np import pandy as pd users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, „Norah Jones”: 4,5, „Phoenix”: 5,0, „Nieco chybiony”: 1,5, „The Strokes”: 2,5, „Wampir 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, "Lekko przygarbiony": 4.5, "The Strokes": 4.0, "Wampir Weekend": 2.0}, "Hailey": {"Złamane dzwony": 4.0, "Deadmau5": 1.0, "Norah Jones": 4.0, "The Strokes": 4.0, "Vampire Weekend": 1.0}, "Jordyn": {"Broke" n Dzwony: 4,5, "Deadmau5": 4,0, "Norah Jones": 5,0, "Phoenix": 5,0, "Nieco chybiony": 4,5, "Uderzenia": 4,0, "Wampirzy 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} } rekomendacja klasy: def __init__(self, data, k=1, metric= "Pearson", n=5): """ obecnie inicjuje rekomendację, jeśli dane są słownikiem, rekomendator jest do niego inicjowany. Dla wszystkich innych typów danych inicjalizacja nie występuje .username2id = {} self.userid2name = {} self.productid2name = {} # z jakiegoś powodu chcę zapisać nazwę metryki self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # jeśli dane są ze słownika ustaw w nim dane rekomendujące # if type(data).__name__ == "dict": self.data = data def convertIDProduktu2name(self, id): """Podany numer id produktu zwróć nazwę produktu """ if id w self.productid2name: zwróć self.productid2name[id] else: zwróć id def userRatings(self, id, n): """Zwróć n najlepszych ocen dla użytkownika o id""" print ("Oceny dla " + self.userid2name[id]) ratings = self.data[id] print(len(ratings)) ratings = list(ratings.items()) ratings = [(self.convertProductID2name(k), v) for (k , v) w ocenach] # na koniec sortuj i zwracaj oceny.sort(key=lambda ar tistTuple: artistTuple[1], reverse = True) ratings = ratings[:n] dla oceny w ocenach: print("%s %i" % (rating[0], rating[1])) def loadBookDB(self, path =""): """ładuje zestaw danych książki BX. Ścieżka to miejsce, w którym znajdują się pliki BX""" self.data = {} i = 0 # # Najpierw załaduj oceny książek do self.data # f = codecs.open(path + "BX-Book-Ratings.csv", " r", "utf8") dla linii w f: i += 1 #oddziel linię na pola pola = line.split(";") użytkownik = pola[0].strip(""") książka = pola[1] .strip(""") rating = int(pola[2].strip().strip(""")) if user in self.data: currentRatings = self.data[user] else: currentRatings = {} currentRatings[ book] = ocena self.data[user] = currentRatings f.close() # # Teraz załaduj książki do self.productid2name # Książki zawiera między innymi isbn, tytuł i autora # f = codecs.open(path + "BX- Books.csv", "r", "utf8") dla wiersza w f: i += 1 #oddziel wiersz do pól pola = line.split(";") isbn = fields[0].strip(""") title = pola[1].strip(""") autor = pola[2].strip().strip(""") title = tytuł + " by " + autor self.productid2name[isbn] = tytuł f.close () # # Teraz załaduj informacje o użytkowniku zarówno do self.userid2name, jak i # self.username2id # f = codecs.open(path + "BX-U sers.csv", "r", "utf8") for line in f: i += 1 #print(line) #oddzielna linia na pola pola = line.split(";") userid = fields[0].strip (""") lokalizacja = pola[1].strip(""") if len(fields) > 3: wiek = pola[2].strip().strip(""") else: wiek = "NULL" if wiek != "NULL": wartość = lokalizacja + " (wiek: " + wiek + ")" else : wartość = lokalizacja self.userid2name[userid] = wartość self.username2id[lokalizacja] = identyfikator użytkownika f.close() print(i) def pearson(self, ocena1, ocena2): sum_xy = 0 sum_x = 0 sum_y = 0 sum_x2 = 0 sum_y2 = 0 n = 0 dla klucza w ocenie1: jeśli klucz w ocenie2: n += 1 x = ocena1[klucz] y = ocena2[klucz] 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 # teraz oblicz mianownik mianownik = (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) / mianownik def computeNearestNeighbor(self, username): """tworzy posortowaną listę użytkowników na podstawie na odległość do nazwy użytkownika""" distances = [] na przykład w self.data: if instance != username: distance = self.fn(self.data[nazwa użytkownika], self.data[instance]) distances.append(( instancja, odległość)) # sortuj na podstawie d isstance -- najbliższe pierwsze dystanse.sort(key=lambda artistTuple: artistTuple[1], reverse=True) return odległości def polecam(self, user): """Podaj listę rekomendacji""" rekomendacje = {} # najpierw pobierz lista użytkowników uporządkowana według bliskości najbliższe = self.computeNearestNeighbor(user) # # teraz pobierz oceny dla użytkownika # userRatings = self.data[user] # # określ całkowitą odległość totalDistance = 0.0 dla i in range(self.k) : totalDistance += najbliższy[i][1] # teraz iteruje przez k najbliższych sąsiadów # zbierając ich oceny dla i w zakresie(self.k): # oblicz wagę wycinka koła = najbliższe[i][1] / totalDistance # zdobądź imię osoby nazwa = najbliższy[i][0] # zdobądź oceny dla tej osoby sąsiadRatings = self.data[nazwa] # zdobądź imię osoby # teraz znajdź zespoły, które sąsiad ocenił, że ten użytkownik nie zrobił dla artysty w ocenach sąsiadów: jeśli nie artysta w ocenach użytkowników: jeśli wykonawca nie ma w rekomendacjach: rekomendacje[artysta] = (neighborRatings[artysta] * waga) w przeciwnym razie: rekomendacje[arti st] = (rekomendacje[wykonawca] + sąsiednieOceny[wykonawca] * waga) # teraz utwórz listę ze słownika rekomendacje = lista(rekomendacje.items()) rekomendacje = [(self.convertProductID2name(k), v) for (k, v ) w rekomendacjach] # w końcu sortuj i zwracaj rekomendacje.sort(key=lambda artistTuple: artistTuple[1], reverse = True) # Zwróć pierwsze n pozycji return rekomendacje[:self.n] r = rekomendujący(użytkownicy) # Autor implementacja r.loadBookDB("/Users/mona/Downloads/BX-Dump/") ratings = pd.read_csv("/Users/danielt/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="") users = pd.read_csv("/Users/danialt/BX-CSV-Dump/BX-Users.csv", sep=";", quotechar=""", escapechar="") pivot_rating = ratings.pivot(index="ID-użytkownika", kolumny="ISBN",value="Book-Rating")