web-Amazon
一 准备实验数据
1.1.下载数据
wget http://snap.stanford.edu/data/amazon/all.txt.gz
1.2.数据分析
1.2.1.数据格式
product/productId: B00006HAXW
product/title: Rock Rhythm & Doo Wop: Greatest Early Rock
product/price: unknown
review/userId: A1RSDE90N6RSZF
review/profileName: Joseph M. Kotow
review/helpfulness: /
review/score: 5.0
review/time:
review/summary: Pittsburgh - Home of the OLDIES
review/text: I have all of the doo wop DVD's and this one is as good or better than the
1st ones. Remember once these performers are gone, we'll never get to see them again.
Rhino did an excellent job and if you like or love doo wop and Rock n Roll you'll LOVE
this DVD !!
而,
- product/productId: asin, e.g. amazon.com/dp/B00006HAXW #亚马逊标准识别号码(英语:Amazon Standard Identification Number),简称ASIN(productId),是一个由十个字符(字母或数字)组成的唯一识别号码。由亚马逊及其伙伴分配,并用于亚马逊上的产品标识。
- product/title: title of the product
- product/price: price of the product
- review/userId: id of the user, e.g. A1RSDE90N6RSZF
- review/profileName: name of the user
- review/helpfulness: fraction of users who found the review helpful
- review/score: rating of the product
- review/time: time of the review (unix time)
- review/summary: review summary
- review/text: text of the review
1.2.2.数据格式转换
首先,我们需要把原始数据格式转换成dictionary
import pandas as pd
import numpy as np
import datetime
import gzip
import json
from sklearn.decomposition import PCA
from myria import *
import simplejson def parse(filename):
f = gzip.open(filename, 'r')
entry = {}
for l in f:
l = l.strip()
colonPos = l.find(':')
if colonPos == -1:
yield entry
entry = {}
continue
eName = l[:colonPos]
rest = l[colonPos+2:]
entry[eName] = rest
yield entry f = gzip.open('somefile.gz', 'w')
#review_data = parse('kcore_5.json.gz')
for e in parse("kcore_5.json.gz"):
f.write(str(e))
f.close()
py文件执行时报错: string indices must be intergers
分析原因:
在.py文件中写的data={"a":"123","b":"456"},data类型为dict
而在.py文件中通过data= arcpy.GetParameter(0) 获取在GP中传过来的参数{"a":"123","b":"456"},data类型为字符串!!!
所以在后续的.py中用到的data['a']就会报如上错误!!!
解决方案:
data= arcpy.GetParameter(0)
data=json.loads(data) //将字符串转成json格式
或
data=eval(data) #本程序中我们采用eval()的方式,将字符串转成dict格式
二.数据预处理
思路:
#import libraries
# Helper functions
# Prepare the review data for training and testing the algorithms
# Preprocess product data for Content-based Recommender System
# Upload the data to the MySQL Database on an Amazon Web Services ( AWS) EC2 instance
2.1创建DataFrame
f parse(path):
f = gzip.open(path, 'r')
for l in f:
yield eval(l) review_data = parse('/kcore_5.json.gz')
productID = []
userID = []
score = []
reviewTime = []
rowCount = 0 while True:
try:
entry = next(review_data)
productID.append(entry['asin'])
userID.append(entry['reviewerID'])
score.append(entry['overall'])
reviewTime.append(entry['reviewTime'])
rowCount += 1
if rowCount % 1000000 == 0:
print 'Already read %s observations' % rowCount
except StopIteration, e:
print 'Read %s observations in total' % rowCount
entry_list = pd.DataFrame({'productID': productID,
'userID': userID,
'score': score,
'reviewTime': reviewTime})
filename = 'review_data.csv'
entry_list.to_csv(filename, index=False)
print 'Save the data in the file %s' % filename
break entry_list = pd.read_csv('review_data.csv')
2.2数据过滤
def filterReviewsByField(reviews, field, minNumReviews):
reviewsCountByField = reviews.groupby(field).size()
fieldIDWithNumReviewsPlus = reviewsCountByField[reviewsCountByField >= minNumReviews].index
#print 'The number of qualified %s: ' % field, fieldIDWithNumReviewsPlus.shape[0]
if len(fieldIDWithNumReviewsPlus) == 0:
print 'The filtered reviews have become empty'
return None
else:
return reviews[reviews[field].isin(fieldIDWithNumReviewsPlus)] def checkField(reviews, field, minNumReviews):
return np.mean(reviews.groupby(field).size() >= minNumReviews) == 1 def filterReviews(reviews, minItemNumReviews, minUserNumReviews):
filteredReviews = filterReviewsByField(reviews, 'productID', minItemNumReviews)
if filteredReviews is None:
return None
if checkField(filteredReviews, 'userID', minUserNumReviews):
return filteredReviews filteredReviews = filterReviewsByField(filteredReviews, 'userID', minUserNumReviews)
if filteredReviews is None:
return None
if checkField(filteredReviews, 'productID', minItemNumReviews):
return filteredReviews
else:
return filterReviews(filteredReviews, minItemNumReviews, minUserNumReviews) def filteredReviewsInfo(reviews, minItemNumReviews, minUserNumReviews):
t1 = datetime.datetime.now()
filteredReviews = filterReviews(reviews, minItemNumReviews, minUserNumReviews)
print 'Mininum num of reviews in each item: ', minItemNumReviews
print 'Mininum num of reviews in each user: ', minUserNumReviews
print 'Dimension of filteredReviews: ', filteredReviews.shape if filteredReviews is not None else '(0, 4)'
print 'Num of unique Users: ', filteredReviews['userID'].unique().shape[0]
print 'Num of unique Product: ', filteredReviews['productID'].unique().shape[0]
t2 = datetime.datetime.now()
print 'Time elapsed: ', t2 - t1
return filteredReviews allReviewData = filteredReviewsInfo(entry_list, 100, 10)
smallReviewData = filteredReviewsInfo(allReviewData, 150, 15)
理论知识
1. Combining predictions for accurate recommender systems

So, for practical applications we recommend to use a neural network in combination with bagging due to the fast prediction speed.
Collaborative ltering(协同过滤,筛选相似的推荐):电子商务推荐系统的主要算法,利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息
web-Amazon的更多相关文章
- Amazon AWS EC2开启Web服务器配置
在Amazon AWS EC2申请了一年的免费使用权,安装了CentOS + Mono + Jexus环境做一个Web Server使用. 在上述系统安装好之后,把TCP 80端口开启(iptable ...
- Summary of Amazon Marketplace Web Service
Overview Here I want to summarize Amazon marketplace web service (MWS or AMWS) that can be used for ...
- Getting Started with Amazon EC2 (1 year free AWS VPS web hosting)
from: http://blog.coolaj86.com/articles/getting-started-with-amazon-ec2-1-year-free-aws-vps-web-host ...
- 注册 Amazon Web Services(AWS) 账号,助园一臂之力
感谢大家去年的大力支持,今年园子继续和 Amazon Web Services(AWS) 合作,只要您通过 博客园专属链接 注册一个账号(建议使用手机4G网络注册),亚马逊就会给园子收入,期待您的支持 ...
- AWS(0) - Amazon Web Services
Computer EC2 – Virtual Servers in the Cloud EC2 Container Service – Run and Manage Docker Containers ...
- Amazon Web Services (目录)
一.官方声明 AWS云全球服务基础设施区域列表 AWS产品定价国外区 AWS产品定价中国区 (注意!需要登陆账户才能查看) AWS产品费用预算 AWS区域和终端节点 二.计算 Amazon学习:如何启 ...
- Amazon Web Services
- 亚马逊记AWS(Amazon Web Services)自由EC2应用
很长时间,我听到AWS能够应用,但是需要结合信用卡,最近申请了. 说是免费的,我还是扣6.28,后来我上网查了.认为是通过进行验证.像服务期满将返回. 关键是不要让我进入全抵扣信用卡支付passwor ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格
通过上一篇随笔的处理,我们已经拿到了书的书名和ISBN码.(网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息 ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup
开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...
随机推荐
- 关于后台执行JS代码总结
方法一.FineUI的 pagecontext对象 string js="functionName();"; PageContext.RegisterStartUpScript(j ...
- 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)
在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...
- opencv 形态学操作应用-提取水平与垂直线
adaptiveThreshold(~gray_src, binImg, , ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, , -); #include <ope ...
- SharpSvn 调用在运行时提示加载程序集出错,或有依赖项
策略后引用: SharpSvn, Version=1.8009.3299.43, Culture=neutral, PublicKeyToken=d729672594885a28日志: 尝试下载新的 ...
- 8Q - 献给杭电五十周年校庆的礼物
我不能参赛,就送给学校一个DOOM III球形大蛋糕吧.等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢? ...
- C# 出现base-64 字符数组的无效长度的解决办法
最近的一个项目,在传递参数时,在Win2003上正常,在Win7下抛出“base-64 字符数组的无效长度”这样的错误 对比了一下经过Convert.ToBase64String()转换过的参数发现, ...
- How to update XENTRY Connect C5 software with .iso file
07.2018 Xentry Mercedes SD Connect c5 software update manual for newbies: Important: If you have XDO ...
- 虚拟机安装centos7, 再安装gitlab 简单步骤
先安装Linux centos7(朋友贡献的. Linux官网有下) 我自己用vm安装的. 未出现特殊状况 gitlab的搭建 安装基础包 yum -y install curl policycore ...
- Windows 修改的hosts记录没有效果
windows修改的hosts记录没有效果,新添加的也没有效果. 检查DNS设置相关的均正常, <Dns client为此计算机解析和缓冲域名系统 (DNS) 名称.> 为此计算机注册并更 ...
- pycharm 创建文件时,自动添加文件头注释
File->settings->Editor->File and Code Templates->Python Script # -*- coding: utf-8 -*- & ...