ImportError:dateutil.parserという名前のモジュールがありません

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

Pythonプログラムにpandasをインポートすると、次のエラーが発生します

  monas-mbp:book mona $ sudo pip install python-dateutil要件はすでに満たされています(アップグレードするには--upgradeを使用):/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonのpython-dateutilクリーンアップ... monas-mbp:book mona $ python t1.py dateutil.parserという名前のモジュールはありませんトレースバック(最後の最後の呼び出し):< module>のファイル "t1.py"、4行目パンダを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という名前のモジュールがありません 

プログラムは次のとおりです。

  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":{"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 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}}クラス推奨:def __init __(self、data、k = 1、metric = "pearson"、n = 5): "" "現在、レコメンダーを初期化します。データが辞書の場合、レコメンダーはそれに初期化されます。他のすべてのデータタイプのデータの場合、初期化は発生しません。kはkのk値です。最も近い隣接メトリックは、使用する距離式です。nは、作成する推奨の最大数です。k = k self.n = n self .username2id = {} self.userid2name = {} self.productid2name = {}#何らかの理由でメトリックの名前を保存したいself.metric=メトリックifself.metric == "pearson":self.fn = self .pearson ##データが辞書の場合は推奨データを設定します#if type(data).__ name__ == "dict":self.data = data def convertProductID2name(self、id):"""指定された製品ID番号は製品名を返します"" "if id in self.productid2name:return self.productid2name [id] else:return id def userRatings(self、id、n):"""IDを持つユーザーのn個の最高評価を返す"""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)評価で]#最後に評価を並べ替えて返します。sort(key = lambda ar tistTuple:artistTuple [1]、reverse = True)評価=評価[: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 ")for line in 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 ")for line in f:i + = 1 #separate line into fields 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 ")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: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 + = 1x=評価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#分母の分母を計算する=(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 defcomputeNearestNeighbor(self、username): """は、ベースのユーザーのソートされたリストを作成しますユーザー名までの距離"""distances = []たとえばself.data:if instance!= username:distance = self.fn(self.data [username]、self.data [instance])distances.append((インスタンス、距離))#dに基づいて並べ替えistance-最も近い最初のdistances.sort(key = lambda ArtistTuple:artistTuple [1]、reverse = True)return distances def Recommendation(self、user): """推奨事項のリストを提供"""推奨事項={}#最初に取得近さの順に並べられたユーザーのリスト=self.computeNearestNeighbor(user)##ユーザーの評価を取得します#userRatings = self.data [user] ##範囲内のiの合計距離totalDistance =0.0を決定します(self.k) :totalDistance + = near [i] [1]#k個の最も近いネイバーを反復処理します#range(self.k)内のiの評価を累積します:#パイのスライスを計算しますweight = near [i] [1] / totalDistance#人の名前を取得するname=near [i] [0]#この人の評価を取得するneighborRatings = self.data [name]#人の名前を取得するneighborRatingsの場合:userRatingsのアーティストでない場合:推奨事項にないアーティストの場合:recommendations [artist] =(neighborRatings [artist] * weight)else:recommendations [arti st] =(recommendations [artist] + neighborRatings [artist] * weight)#辞書からリストを作成するrecommendations = list(recommendations.items())recommendations = [(self.convertProductID2name(k)、v)for(k、v )推奨事項]#最後にrecommendations.sort(key = lambda ArtistTuple:artistTuple [1]、reverse = True)#最初のn個のアイテムを返すrecommendations [:self.n] r = Recommendationer(users)#作成者実装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 ="  ")ピボット評価=ratings.pivot(index = "User-ID"、columns = "ISBN"、values = "Book-Rating")