人工智能-推荐数据处理

news2024/11/19 20:20:00

数据处理

用户数据处理

用户数据一行 

第一条数据是: 1::F::1::10::48067
  • 首先,读取用户信息文件中的数据:
  • 接下来把用户数据的字符串类型的数据转成数字类型,并存储到字典中,实现如下:
  • 代码如下:
# 解压数据集
!unzip -o -q -d ~/work/ ~/data/data19736/ml-1m.zip
import numpy as np
def get_usr_info(path):
    # 性别转换函数,M-0, F-1
    def gender2num(gender):
        return 1 if gender == 'F' else 0
    
    # 打开文件,读取所有行到data中
    with open(path, 'r') as f:
        data = f.readlines()
    # 建立用户信息的字典
    use_info = {}
    
    max_usr_id = 0
    #按行索引数据
    for item in data:
        # 去除每一行中和数据无关的部分
        item = item.strip().split("::")
        usr_id = item[0]
        # 将字符数据转成数字并保存在字典中
        use_info[usr_id] = {'usr_id': int(usr_id),
                            'gender': gender2num(item[1]),
                            'age': int(item[2]),
                            'job': int(item[3])}
        max_usr_id = max(max_usr_id, int(usr_id))
    
    return use_info, max_usr_id

usr_file = "./work/ml-1m/users.dat"
usr_info, max_usr_id = get_usr_info(usr_file)
print("用户数量:", len(usr_info))
print("最大用户ID:", max_usr_id)
print("第1个用户的信息是:", usr_info['1'])

电影数据处理

  1. 统计电影ID信息。
  2. 统计电影名字的单词,并给每个单词一个数字序号。
  3. 统计电影类别单词,并给每个单词一个数字序号。
  4. 保存电影数据到字典中,方便根据电影ID进行索引。
  5.  电影类别和电影名称定长填充,并保存所有电影数据到字典中

def get_movie_info(path):
    # 打开文件,编码方式选择ISO-8859-1,读取所有数据到data中 
    with open(path, 'r', encoding="ISO-8859-1") as f:
        data = f.readlines()
    # 建立三个字典,分别用户存放电影所有信息,电影的名字信息、类别信息
    movie_info, movie_titles, movie_cat = {}, {}, {}
    # 对电影名字、类别中不同的单词计数
    t_count, c_count = 1, 1
    # 初始化电影名字和种类的列表
    titles = []
    cats = []
    count_tit = {}
    # 按行读取数据并处理
    for item in data:
        item = item.strip().split("::")
        v_id = item[0]
        v_title = item[1][:-7]
        cats = item[2].split('|')
        v_year = item[1][-5:-1]

        titles = v_title.split()
        # 统计电影名字的单词,并给每个单词一个序号,放在movie_titles中
        for t in titles:
            if t not in movie_titles:
                movie_titles[t] = t_count
                t_count += 1
        # 统计电影类别单词,并给每个单词一个序号,放在movie_cat中
        for cat in cats:
            if cat not in movie_cat:
                movie_cat[cat] = c_count
                c_count += 1
        # 补0使电影名称对应的列表长度为15
        v_tit = [movie_titles[k] for k in titles]
        while len(v_tit)<15:
            v_tit.append(0)
        # 补0使电影种类对应的列表长度为6
        v_cat = [movie_cat[k] for k in cats]
        while len(v_cat)<6:
            v_cat.append(0)
        # 保存电影数据到movie_info中
        movie_info[v_id] = {'mov_id': int(v_id),
                            'title': v_tit,
                            'category': v_cat,
                            'years': int(v_year)}
    return movie_info, movie_cat, movie_titles


movie_info_path = "./work/ml-1m/movies.dat"
movie_info, movie_cat, movie_titles = get_movie_info(movie_info_path)
print("电影数量:", len(movie_info))
ID = 1
print("原始的电影ID为 {} 的数据是:".format(ID), data[ID-1])
print("电影ID为 {} 的转换后数据是:".format(ID), movie_info[str(ID)])

print("电影种类对应序号:'Animation':{} 'Children's':{} 'Comedy':{}".format(movie_cat['Animation'], 
                                                                   movie_cat["Children's"], 
                                                                   movie_cat['Comedy']))
print("电影名称对应序号:'The':{} 'Story':{} ".format(movie_titles['The'], movie_titles['Story']))

评分数据处理

评分数据格式为UserID::MovieID::Rating::Timestamp,如下图。

 

将数据直接存到字典中。

def get_rating_info(path):
    # 打开文件,读取所有行到data中
    with open(path, 'r') as f:
        data = f.readlines()
    # 创建一个字典
    rating_info = {}
    for item in data:
        item = item.strip().split("::")
        # 处理每行数据,分别得到用户ID,电影ID,和评分
        usr_id,movie_id,score = item[0],item[1],item[2]
        if usr_id not in rating_info.keys():
            rating_info[usr_id] = {movie_id:float(score)}
        else:
            rating_info[usr_id][movie_id] = float(score)
    return rating_info

# 获得评分数据
#rating_path = "./work/ml-1m/ratings.dat"
rating_info = get_rating_info(rating_path)
print("ID为1的用户一共评价了{}个电影".format(len(rating_info['1'])))

海报图像读取 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub Action 通过SSH 自动部署到云服务器上

准备 正式开始之前&#xff0c;你需要掌握 GitHub Action 的基础语法&#xff1a; workflow &#xff08;工作流程&#xff09;&#xff1a;持续集成一次运行的过程&#xff0c;就是一个 workflow。name: 工作流的名称。on: 指定次工作流的触发器。push 表示只要有人将更改推…

【论文精读】Robust Speech Recognition via Large-Scale Weak Supervision

Robust Speech Recognition via Large-Scale Weak Supervision 前言Abstract1. Introduction2. Approach2.1. Data Processing2.2. Model2.3. Multitask Format2.4. Training Details 3. Experiments3.1. Zero-shot Evaluation3.2. Evaluation Metrics3.3. English Speech Reco…

Windows系统加密

Windows系统加密 这里类似一个简单的系统加密&#xff08;开机不插U盘&#xff0c;会在设定的时间后关机&#xff09; 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.看U盘在你电脑上的盘符 先把U盘插电脑上&#xff0c;看看U盘的盘符&#xff0c;我这里是H 2.在U…

深入浅出的介绍一下虚拟机VMware Workstation——part3(VMware快照)

虚拟机VMware使用 前言快照的原理快照的使用 前言 可以先查看之前的2篇博文&#xff0c;学习基础的虚拟机使用 深入浅出的介绍一下虚拟机VMware Workstation——part1 深入浅出的介绍一下虚拟机VMware Workstation——part2(详细安装与使用) 由于我们使用虚拟机的初衷就是用来…

磁盘数据恢复怎么操作?4个方法,亲测有效!

“谁能帮帮我啊&#xff01;我的电脑磁盘部分数据丢失了&#xff0c;是非常重要的数据&#xff0c;有什么方法可以找回来吗&#xff1f;最好是小白也能轻松操作的方法&#xff0c;感谢&#xff01;” 在我们的日常生活和工作中&#xff0c;磁盘数据恢复的技能变得越来越重要。当…

Kotlin笔记(三):扩展函数,运算符重载

1. 扩展函数 扩展函数表示即使在不修改某个类的源码的情况下&#xff0c;仍然可以打开这个类&#xff0c;向该类添加新的函数。 在Java中,如果我们需要统计字符串中的字母的数量的话,我们通常需要建立一个工具类,然后在工具类里面创建一个新的方法来实现该功能. 在Kotlin中,由于…

油猴脚本百度网盘不限速(亲测有效)

安装油猴[Tampermonkey]插件 打开浏览器&#xff08;我用的是Chrome&#xff09;&#xff0c;然后点击右上角【…】&#xff0c;在出来的菜单里&#xff0c;选择【更多工具】然后点击【扩展程序】。 然后点击左上角三条杠 点击下方打开Chrome网上应用商店 搜索【Tampermonkey】…

中电金信鲸视:以AI视觉技术为复杂行业场景装上“火眼金睛”

作为人工智能和计算机视觉的交叉领域&#xff0c;智能视觉通过仿生人类视觉机能&#xff0c;对不同形式的视觉输入进行处理、理解和决策。现今&#xff0c;智能视觉已成为应用广泛、市场覆盖大、形式多样的产业方向&#xff0c;得到了国家政策的大力支持。 如在科技部等六部门印…

电脑桌面怎样设置闹钟提醒?电脑上定闹钟的方法

想必大家在日常工作生活中都会遇到各种需要提醒的场景&#xff0c;例如提醒参加会议、提醒完成重要工作任务、提醒休息等。而在电脑桌面上设置闹钟提醒&#xff0c;成为了许多人的需求。然而&#xff0c;在Windows电脑上设置闹钟提醒的方法常常复杂繁琐&#xff0c;让我们不得不…

MySQL 4 MySQL使用演示(包含基本操作命令~~~)MySQL5.7编码设置

目录 1 MySQL的使用演示&#xff08;8.0和5.7版本对比&#xff09; 1、查看所有的数据库 2、创建自己的数据库 3、使用自己的数据库 4、查看某个库的所有表格 5、创建新的表格 6、查看一个表的数据 7、添加一条记录 8、查看表的创建信息 9、查看数据库的创建信息 …

pip安装总是失败怎么办

换国内好几个镜像也是总是失败,这里不再说这种方法,主要讲将本地安装 WHL文件安装 首先&#xff0c;要从官网&#xff08;https://pypi.org/project/&#xff09;上下载指定的.whl文件&#xff0c;进入官网后搜索Flask-SQLAlchemy&#xff0c;选择最近版本点击&#xff0c;在Do…

ICC2:skip route

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 一些net&#xff0c;不需要工具去绕线的时候可以用skip route功能&#xff0c;可以是没绕线&#xff0c;不需要绕线的情况&#xff0c;也可以是绕了线不希望被工具动到的情况。…

计算机基础知识32

Socket抽象层(socket编程) # Socket是在应用层和传输层之间的一个抽象层&#xff0c;它把TCP/IP层复杂的操作抽象为几个简单 的接口供应用层调用已实现进程在网络中通信 socket () 对象 bind () 函数来绑定 listen () 监听&#xff0c;等别人电话 accept&#xff08;&#…

C++使用openssl对AES-256-ECB PKCS7 加解密

/** AES-256-ECB PKCS7 加密 函数* input:经过PKCS7填充后的明文数据* outhex:加密后的命名数据16进制数,可以使用base64_encode转换为base64格式字符串密文* key:密钥* len:经过PKCS7填充后的明文数据长度*/ void AesEcb256Pkcs7Encrypt(u8 *input, u8 *outhex, u8 *key, int …

18.项目开发之前端项目搭建测试

项目开发之前端项目搭建测试 解压文件&#xff0c;将前端项目目录&#xff0c;拖拽到HBuilder中 前端项目QuantTrade_vue地址&#xff1a;传送门 后端项目QuantTrade地址&#xff1a; https://pan.baidu.com/s/1GF45B0QepApH8JbRIOLY7w?pwd1016 开启idea的项目&#xff0c;先…

连连国际:助力跨境卖家在TikTok Shop全球平台轻松收款

数字化时代的崛起已经改变了人们的生活方式&#xff0c;也彻底颠覆了传统商业模式。社交媒体平台&#xff0c;如TikTok&#xff0c;已经不仅仅是人们分享生活的地方&#xff0c;也成为了商业增长的重要渠道之一。 TikTok Shop&#xff0c;作为TikTok社交媒体巨头的电子商务延伸…

换低挡装置(Kickdown, ACM/ICPC NEERC 2006, UVa1588)rust解法

给出两个长度分别为n1&#xff0c;n2&#xff08;n1&#xff0c;n2≤100&#xff09;且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器&#xff08;如图3-8所示&#xff09;&#xff0c;问能够容纳它们的最短容器长度。 样例 2112112112 2212112 1012121212 2121…

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions actions顾名思义就是一堆动作&#xff0c;是一个持续集成服务&#xff0c;持续集成包含了拉代码、运行测试、编译代码、登录远程服务器&#xff0c;发布到第三方服务等等的操作&#xff0c;GitHub将这些操作称为actions。 概念&#xff1a;Workflows, Events,…

fastDFS实现文件上传与下载

前言 我们在做项目的时候经常会遇到文件的上传与下载。你们是怎么做的呢&#xff1f;现在有一个技术可以非常简单的实现这个功能——fastDFS 简介 FastDFS是一个分布式文件系统&#xff0c;使用FastDFS可以非常容易搭建一套高性能的文件服务器集群提供文件上传、下载服务。 …

RocketMq(六)消息传输方式

在前面的基础上&#xff0c; 一、消息传输方式:在RocketMQ中&#xff0c;可以通过设置消费组的方式实现消息的广播和点对点传输。 1、默认方式:多个消费者轮询消费&#xff0c;若只有一个消费者则全部消费。通过下面的举例可以看到这其实就是点对点模式。 &#xff08;1&…