代码来自于知乎:https://zhuanlan.zhihu.com/p/32078473
/代码地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.ipynb
下一篇有一些数据的可视化,帮助理解
#运行下面代码把数据下载下来
import pandas as pd
from sklearn.model_selection import train_test_split #数据集划分训练集和测试集
import numpy as np
from collections import Counter #counter用于统计字符出现的次数
import tensorflow as tf
import os #os 模块提供了非常丰富的方法用来处理文件和目录
import pickle #提供保存数据在本地的方法
import re #正则表达式
from tensorflow.python.ops import math_ops
from urllib.request import urlretrieve #将URL表示的网络对象复制到本地文件
from os.path import isfile, isdir #判断是否存在文件file,文件夹dir
from tqdm import tqdm #Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)
import zipfile #用来做zip格式编码的压缩和解压缩的
import hashlib #用来进行hash 或者md5 加密
def _unzip(save_path, _, database_name, data_path):
"""
Unzip wrapper with the same interface as _ungzip使用与_ungzip相同的接口解压缩包装器
:param save_path: gzip文件的路径
:param database_name:数据库的名称
:param data_path: 提取路径
:param _: HACK - Used to have to same interface as _ungzip 用于与_ungzip具有相同的接口??解压后的文件路径
"""
print('Extracting {}...'.format(database_name))#.format通过 {} 来代替字符串database_name
with zipfile.ZipFile(save_path) as zf: #ZipFile是zipfile包中的一个类,用来创建和读取zip文件
zf.extractall(data_path) #类函数zipfile.extractall([path[, member[, password]]])
#path解压缩目录,没什么可说的
# member需要解压缩的文件名列表
# password当zip文件有密码时需要该选项
def download_extract(database_name, data_path):
"""
下载并提取数据库
:param database_name: Database name
data_path 这里为./表示当前目录
save_path 下载后数据的保存路径即压缩文件的路径
extract_path 解压后的文件路径
"""
DATASET_ML1M = 'ml-1m'
if database_name == DATASET_ML1M:
url = 'http://files.grouplens.org/datasets/movielens/ml-1m.zip'
hash_code = 'c4d9eecfca2ab87c1945afe126590906'
extract_path = os.path.join(data_path, 'ml-1m')#os.path.join将多个路径组合后返回,提取数据的路径
save_path = os.path.join(data_path, 'ml-1m.zip')#要保存的路径
extract_fn = _unzip
if os.path.exists(extract_path): #指定路径(文件或者目录)是否存在
print('Found {} Data'.format(database_name))
return
if not os.path.exists(data_path): #指定路径(文件或者目录)不存在,则递归创建目录data_path
os.makedirs(data_path)
if not os.path.exists(save_path): #指定路径(文件或者目录)不存在,则递归创建目录save_path
with DLProgre