赞
踩
下面以MovieLens-100K(可以在网上自己下载为例)来展示不同语法的查询效果。
- import os
- import pandas as pd
- import time
- import random
-
- data=[]
- with open(os.path.join('ml_data','u.data'),'r') as r_data:
- for line in r_data:
- data.append(line.split())
- data = pd.DataFrame(data,columns=['User_ID','Item_ID','Rating','Timestamp'])
- #要求取出每个user_id对每个item_id的timestamp字段
- #现将user_id和item_id保存成tuple对
- #原始数据共有100000行,这里只随机从中抽取10000个tuple对
- user_item=[(user,item) for user,item in data[['User_ID','Item_ID']].values]
- random.shuffle(user_item)
- #第一种写法
- start=time.time()
- for i in user_item[:5000]:
- date1=data[(data['User_ID']==i[0])&(data['Item_ID']==i[1])]['Timestamp']
- end=time.time()
- print("Method 1-total time: ",end-start)
- print("Method 2-average time: ",(end-start)/5000)
- #第二种写法
- user_item_data=data.set_index(['User_ID','Item_ID'])
- start=time.time()
- for i in user_item:
- date1=user_item_data.loc[i]['Timestamp']
- end=time.time()
- print("Method 2-total time: ",end-start)
- print("Method 2-average time: ",(end-start)/5000)
其代码运行结果如下:
方法1和方法2的区别在于查找方法的不同,方法1没查找一次需要把所有数据都扫描一遍。而方法2通过将要筛选的字段做成索引而大大提升了查询速度。在大批量数据下,这种方法非常有效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。