数据挖掘入门系列教程(五)之Apriori算法Python实现
在上一篇
推荐下载这个数据集,1MB大小够了,因为你会发现数据集大了你根本跑不动,Apriori的算法的复杂度实在是 。
那么,这个我们使用数据集的作用是什么呢?简单点来说,就是某一个用户如喜欢看
电影,那么他很可能也喜欢看
电影。我们就是需要分析这个关系。
万物始于加载数据集
加载数据集
因为下载的数据集是一个zip压缩包,首先,我们需要将数据解压出来:
import zipfile
zFile = zipfile.ZipFile("ml-latest-small.zip", "r")
#ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表
for fileM in zFile.namelist():
zFile.extract(fileM)
解压出来的数据如下图:
主要介绍两个文件ratings.csv 每个用户对于电影的评分,包括movieId,userId,rating,time
tags.csv 是电影的标签
我们目前只是使用rating.csv。然后我们将csv文件加载到内存中。
import pandas as pd
all_ratings = pd.read_csv("ml-latest-small/ratings.csv")
# 格式化时间,但是没什么必要
all_ratings["timestamp"] = pd.to_datetime(all_ratings['timestamp'],unit='s')
让我们看一看数据长什么样?
电影中的数据就是 这副B样userId :评分人的ID
movieId:电影的ID
rating:评分分数
tiemstamp:评分时间
让我们来左手画个图,看一下rating数据的分布:
from eplot import eplot
df = all_ratings["rating"].value_counts()
df.eplot.bar(title='柱形图')
柱状图如下图:
加载完数据集后。我们需要进行判断出用户是否喜欢某个电影,因此我们可以使用评分来判断。当用户对某一个电影的评分大于等于4分的时候,我们就可以认为该用户喜欢这部电影。
# 评分大于等于4分表示喜欢这个电影
all_ratings["like"] = all_ratings["rating"]>=4
处理后的数据集如下,新的数据集添加了一个like列:
like为True代表喜欢,False为不喜欢。
获得训练集
在这里我们选择userId小于200的数据。
train_num = 200
# 训练数据
train_ratings = all_ratings[all_ratings['userId'].isin(range(train_num))]
数据格式如下:
为什么只选择userId小于200的数据呢?而不大一点呢?emm,你电脑够好就行,自己看情况选择。在阿里云学生机上,推荐200吧,大了的话,服务直接GG了。
然后我们再从这个数据集中获得like=True的数据集。
like_ratings = train_ratings[train_ratings["like"] == True]
然后我们再从训练集中获得每一个用户喜欢哪一些电影,key对应的是用户的Id,value对应的是用户喜欢的电影。
# 每一个人喜欢哪一