ImportError: нет модуля с именем dateutil.parser

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

Я получаю следующую ошибку при импорте pandas в программу Python

monas-mbp:book mona$ sudo pip install python-dateutil Требование уже выполнено (используйте --upgrade для обновления): python-dateutil в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Очистка... monas-mbp:book mona $ python t1.py Нет модуля с именем dateutil.parser Трассировка (последний вызов последний): Файл "t1.py", строка 4, в <module> импортировать pandas как файл pd "/Library/Python/2.7/site-packages/pandas/__init__.py", строка 6, в <module> от . import hashtable, tslib, lib Файл «tslib.pyx», строка 31, в init pandas.tslib (pandas/tslib.c:48782) ImportError: Нет модуля с именем dateutil.parser 

Также вот программа:

импортировать кодеки из math import sqrt import numpy as np import pandas as pd users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, «Нора Джонс»: 4.5, «Феникс»: 5.0, «Слегка тупица»: 1.5, «Удары»: 2.5, «Вампирские выходные»: 2.0}, «Билл»: {«Блюзовый путешественник»: 2.0, « Broken Bells": 3,5, "Deadmau5": 4,0, "Phoenix": 2,0, "Слегка глупый": 3,5, "Vampire Weekend": 3,0}, "Chan": {"Blues Traveler": 5,0, "Broken Bells": 1.0, «Дэдмау5»: 1.0, «Нора Джонс»: 3.0, «Феникс»: 5, «Слегка тупой»: 1.0}, «Дэн»: {«Блюзовый путешественник»: 3.0, «Сломанные колокола»: 4.0, «Дэдмау5 ": 4,5, "Феникс": 3,0, "Слегка тупой": 4,5, "Удары": 4,0, "Вампирские выходные": 2,0}, "Хейли": {"Сломанные колокола": 4,0, "Deadmau5": 1,0, «Нора Джонс»: 4.0, «Удары»: 4.0, «Вампирские выходные»: 1.0}, «Джордин»: {«Сломался n Bells»: 4,5, «Deadmau5»: 4,0, «Нора Джонс»: 5,0, «Феникс»: 5,0, «Слегка глупый»: 4,5, «Удары»: 4,0, «Вампирские выходные»: 4,0}, «Сэм» : {"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, "Нора Джонс": 5.0, "Феникс": 4.0, "Слегка придурковатый": 2.5, "The Strokes": 3.0} } Рекомендуемый класс: def __init__(self, data, k=1, metric= "pearson", n=5): """ инициализировать рекомендатель в настоящее время, если данные являются словарем, рекомендатель инициализируется им. Для всех других типов данных инициализация не происходит k — значение k для k метрика ближайшего соседа — используемая формула расстояния n — максимальное количество рекомендаций, которые нужно сделать""" self.k = k self.n = n self. .username2id = {} self.userid2name = {} self.productid2name = {} # почему-то хочу сохранить название метрики self.metric = metric if self.metric == "pearson": self.fn = self .pearson # # если данные являются словарем, установите для него рекомендательные данные # if type(data).__name__ == "dict": self.data = data def convertProductID2name(self, id): """Идентификационный номер продукта возвращает название продукта """ если id в self.productid2name: вернуть self.productid2name[id] иначе: вернуть id def userRatings(self, id, n): """Вернуть n лучших оценок для пользователя с id""" print ("Рейтинги для " + self.userid2name[id]) ratings = self.data[id] print(len(ratings)) ratings = list(ratings.items()) ratings = [(self.convertProductID2name(k), v) for (k , v) в рейтингах] # окончательно отсортировать и вернуть ratings.sort(key=lambda ar tistTuple: artistTuple[1], reverse = True) ratings = ratings[:n] для оценки в рейтингах: print("%s %i" % (rating[0], rating[1])) def loadBookDB(self, path =""): """загружает набор данных книги BX. Путь - это место, где находятся файлы BX""" self.data = {} i = 0 # # Сначала загрузите рейтинги книг в self.data # f = codecs.open(path + "BX-Book-Ratings.csv", " r", "utf8") для строки в f: i += 1 #разделить строку на поля 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() # # Теперь загружайте книги в self.productid2name # Книги содержат среди прочих полей isbn, title и author # f = codecs.open(path + "BX- Books.csv", "r", "utf8") для строки в f: i += 1 #разделить строку на поля 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 () # # Теперь загрузите информацию о пользователе как в self.userid2name, так и в # self.username2id # f = codecs.open(path + "BX-U sers.csv", "r", "utf8") для строки в f: i += 1 #print(line) #разделить строку на поля fields = line.split(";") userid = fields[0].strip (""") location = fields[1].strip("""), если len(fields) > 3: age = fields[2].strip().strip(""") else: age = "NULL" if age != "NULL": value = location + " (age: " + age + ")" else : 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 для ключа в рейтинге1: если ключ в рейтинге2: n += 1 x = рейтинг1[ключ] y = рейтинг2[ключ] 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 # теперь вычисляем знаменатель denominator = (sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow( sum_y, 2) / n)) если знаменатель == 0: вернуть 0 иначе: return (sum_xy - (sum_x * sum_y) / n) / знаменатель def calculateNearestNeighbor(self, username): """создает отсортированный список пользователей на основе на их расстоянии от имени пользователя""" Distances = [] например, в self.data: if instance != username: Distance = self.fn(self.data[имя пользователя], self.data[экземпляр]) Distances.append(( экземпляр, расстояние)) # сортировка по d istance -- ближайшие первые расстояния.sort(key=lambda artistTuple: artistTuple[1], reverse=True) вернуть расстояния def рекомендовать(я, пользователь): """Дать список рекомендаций""" рекомендации = {} # сначала получить список пользователей, упорядоченный по степени близости Nearest = self.computeNearestNeighbor(user) # # теперь получаем оценки для пользователя # userRatings = self.data[user] # # определяем общее расстояние totalDistance = 0.0 для i в диапазоне(self.k) : totalDistance += ближайший[i][1] # теперь перебираем k ближайших соседей # накапливая их рейтинги для i в диапазоне(self.k): # вычисляем часть пирога weight = ближайший[i][1] / totalDistance # получить имя человека name = ближайший[i][0] # получить рейтинг этого человека NeighborRatings = self.data[name] # получить имя человека # теперь найти группы, которые сосед оценил, что пользователь не сделал для исполнителя в NeighborRatings: если нет исполнителя в userRatings: если исполнителя нет в рекомендациях: рекомендации[исполнитель] = (neighborRatings[исполнитель] * вес) еще: рекомендации[арти st] = (recommendations[artist] + NeighborRatings[artist] * weight) # теперь составить список из словаря рекоммендации = list(recommendations.items()) рекоммендации = [(self.convertProductID2name(k), v) for (k, v ) в рекомендациях] # окончательно отсортировать и вернуть рекомендации. реализация 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="") 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")