《数据科学与工程》课程结课报告

news2024/11/13 4:06:45

目录

作业要求:

一、数据预处理(包括数据扩展、数据过滤、数据加载等)

1.数据查看

2.上传数据

3.查看数据读取情况

4.时间维度的切割

二、单维度数据描述分析

2.1 条数统计

(1)查询数据的总条数

(2)非空查询条数

(3)查询无重复总条数

(4)查询UID唯一的条数

2.2 时间分析(包括每个时间段查询的条数等)

(1) sql查询每个时间段查询条数

(2) 存储到Mysql中

 (3) python连接mysql进行可视化分析

2.3 关键词分析

(1) 查询关键词的平均长度

(2) 查询关键词各长度的条数

(3) 查询频度最高的前1000词排行榜

2.4 UID分析

(1) UID平均查询次数

(2) 查询1次、2次、3次大于3次的UID的个数

(3) 用户搜索次数排行榜

2.5 URL分析

(1) URL点击排行榜

(2) 直接输入URL作为查询词的条数

(3) 直接输入URL的查询中,点击的结果就是用户输入的URL的网址的条数

(4) 使用搜狗访问其他搜索引擎的次数

2.6 RANK分析

(1) 包括Rank在10以内的条数

3、多维度用户行为分析

3.1 查询次数最多的用户的用户行为分析

(1) 查询最多的用户是谁

(2) 他所查询的关键词及其频次

(3) 这一天的各时间段内的查询次数等

3.2 所有Url为百度的网站搜索的关键词分析

(1) 查看用户点击http://www.baidu.com/所用的搜索关键词及其计数统计

(2)查询点击http://www.baidu.com/各个时间段的条数统计等

3.3查询关键词“仙剑奇侠传”的用户行为分析

(1) 查询搜索过“仙剑奇侠传”的uid排行榜

(2) 查看榜首的UID的相关搜索记录

(3)查看榜尾的UID的相关搜索记录

3.4 较活跃的时间段的行为分析

(1) 最活跃时间段

(2) 在活跃时间段内点击网址排行榜

(3) 在活跃时间段内搜索关键词排行榜

(4) 在活跃时间段内用户排行榜

3.5 RANK与Order的相关性分析

(1) 被用户第一次点击的总条数

(2) Rank 前10的被第一次点击的条数

(3) Rank 前5的被第一次点击的条数

(4) Rank前3的被第一次点击的条数

(5) Rank前1的被第一次点击的条数

(6) 所有Rank为1的条数

(7) Rank为1的条目在1次内被点击的条数

(8) Rank为1的条目在3次内被点击的条数

(9) Rank为1的条目在5次内被点击的条数

(10) Rank为1的条目在10次内被点击的条数

(11) 总结

4、算法应用(应用sparkML二选其一)

4.1 对搜狗用户数据日志中的 URL 返回排名和用户点击顺序应用sparkML中的kmeans算法聚类,并对算法进行评估比较,给出合理化解释。

4.2 使用朴素贝叶斯算法(或其他算法)对用户查询主题进行分类分析和使用 K-Means 算法对用户查询主题进行聚类分析,发现用户的行为特征,并对算法进行评估比较,并给出合理化解释。

5、 整体总结

5.1 单维度数据描述分析

5.2 多维度用户行为分析

5.3 算法


作业要求:

      数据集来自于搜狗实验室的用户搜索日志,该用户搜索日志是包括了大约为一个月(2008年6月)的搜索引擎部分网页的用户点击情况和搜索需求情况的网页搜索日志的数据集合,适合需要分析搜索引擎用户行为的研究实验。该用户搜索日志的数据格式为访问时间、用户ID、该URL在返回结果中的排名、用户点击的顺序号、用户点击的URL。其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie自动赋值的,这标识同一用户输入的不同查询可以被识别出来。(本次选用精简版(一天数据,63MB))

表1 搜索日志中的字段信息

名称

内容

ts

用户点击发生时的日期时间

Uid

由系统自动分配的用户识别号

Keywords 查询关键词

rank

该URL在返回结果中的排名

order

用户点击的顺序号

url

用户点击的URL

数据样本格式的截图如图所示。

以搜狗实验室用户搜索日志作为数据集,借助Scala语言在Spark环境下对用户访问搜狗搜索引擎时产生的数据进行分析,将结果选用适当可视化技术展示,并给出结果的合理化解释

一、数据预处理(包括数据扩展、数据过滤、数据加载等)

1.数据查看

将数据集文件解压到指定目录E:\IdeaProjects\TestDemo1\data\input当中

查看数据情况

字段解释:

访问时间   用户id   查询词     该url在返回结果中的排名    用户点击的顺序号    用户点击的url

2.上传数据

有集群的可以往这个集群上传文件,就像下图这样,我只是为了快速完成作业,没有搭建集群,直接读取的本地的Sogou.reduced文件(毕竟这个数据也很小,才63MB,没必要用集群)

3.查看数据读取情况

新建scala文件ques1.scala

package sparkhomework
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.{SparkConf, SparkContext}

object ques1 {
  def main(args: Array[String]): Unit = {
    // 1创建sparkConf 设置AppName 以及 master
    val conf: SparkConf = new SparkConf().setMaster("local[3]").setAppName("ques1")
    // 2 创建sparkContext 提交Spark App的入口
    val sc: SparkContext = new SparkContext(conf)
    //设置日志级别
    sc.setLogLevel("WARN")
    // 3 业务操作-读取数据
    val dataRDD = sc.hadoopFile(
      "file:///E:/IdeaProjects/TestDemo1/data/input/SogouQ.reduced",
      classOf[TextInputFormat],
      classOf[LongWritable],
      classOf[Text])
      .map(pair => new String(pair._2.getBytes,
        0, pair._2.getLength, "GBK"))
    dataRDD
    // 4.查看数据读取情况
    val res = dataRDD.take(5)
    res.foreach(println)
    // 5.关闭sc
    sc.stop()
  }
}

运行结果:

4.时间维度的切割

新建ques2.scala文件,以后的代码都是基于这个代码的基础上一点点添加上的

package sparkhomework
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object ques2 {
  def main(args: Array[String]): Unit = {
    // 1 使用SparkSession.builder创建SparkSession,设置AppName以及master
    val spark: SparkSession = SparkSession.builder()
      .master("local[3]") // 设置master URL,例如本地模式使用3个线程
      .appName("ques2") // 设置应用名称
      .getOrCreate() // 如果已存在SparkSession,则返回它,否则创建一个新的

    // 设置日志级别
    spark.sparkContext.setLogLevel("WARN")

    // 3 业务操作-读取数据
    // 提前把SogouQ.reduced文件的编码从GBK转换成UTF-8,我用的工具是notepad++
    val data = spark.read.textFile("file:///E:/IdeaProjects/TestDemo1/data/input/SogouQ.reduced")
    // 转换成rdd
    val dataRDD = data.rdd

    val sgrdd = dataRDD
      .map(x => x.split("\\s+"))
      .filter(_.length == 6)
      .map(x => (x(0), x(1), x(2), x(3).toInt, x(4).toInt, x(5)))

    val sgrdd1: RDD[(String, String, String, String, String, Int, Int, String)] = sgrdd.map(
      line => {
        val sgtime: Array[String] = line._1.split(":")
        val sghour: String = sgtime(0) //切分成时、分、秒
        val sgmin: String = sgtime(1)
        val sgsec: String = sgtime(2)
        // 数据预处理,进行分词,去除 "[360安全卫士]" 词语两边的方括号
        val querywords = line._3.replaceAll("\\[","")
          .replace("]","")
        (line._2, sghour, sgmin, sgsec, querywords, line._4, line._5, line._6)
      }
    )

    import spark.implicits._// 导入隐式转换,用于将RDD转换为DataFrame
    // 转成dataframe
    val sgdata1 = sgrdd1.toDF("userId","sghour", "sgmin", "sgsec", "queryWords", "resultRank", "clickRank", "clickUrl")
    //输出查看
    sgdata1.show()
    //关闭sc
    spark.stop()
  }
}

运行结果: 

二、单维度数据描述分析

2.1 条数统计

(1)查询数据的总条数

可以看出数据总条数有1724253条。 

(2)非空查询条数

非空查询条数有1724253,跟总条数的数量一样,说明没有空查询。 

(3)查询无重复总条数

无重复条数有1724224条,也就是说,重复的条数有1724253-1724224=29条。 

(4)查询UID唯一的条数

查询到的用户id唯一的条数有519874,即这一天内,共有519874个用户使用搜狗搜索引擎。

2.2 时间分析(包括每个时间段查询的条数等)

(1) sql查询每个时间段查询条数

前边已经将时间维度切分成时分秒这样的

现在就是根据sghour分组统计每小时的查询的条数有多少

 查询结果如下:

(2) 存储到Mysql中

将上边的运行结果转存到mysql中,(需要提前建库建表!)

建表:

use spider;
CREATE TABLE timeana (
    sghour INT,
    cnt INT
);

 我的 MySQL 服务器版本是 8.0的版本,那么可以使用 8.0.27的驱动

pom文件中添加如下红框的内容,再右键选择maven,选择reimport就可以导入mysql的jdbc驱动了

navicat查看表中的数据

 (3) python连接mysql进行可视化分析

从上图中可以看出,一天当中最活跃的时间段是16时,一小时内查询次数达到120000左右,最不活跃的时间段是凌晨04时,查询次数只有不到10000,总体来看,用户在9点到22点最为活跃。可以推测,一般人们在工作学习时间出于工作或学习的目的会较多的使用搜狗搜索引擎搜索,而在21点之后人们逐渐进入休息时间,搜索次数会逐渐减少。

9点到22点中查询次数出现了两次低谷,分别是12点-13点和18点-19点,可以推测这个时间段是人们吃午饭和吃晚饭休息的时间段所以查询次数会出现低谷的现象。

2.3 关键词分析

(1) 查询关键词的平均长度

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

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

相关文章

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考:功耗数据如何测试?功耗曲线?功耗收益评估? UPF的全称是Unified Power Format,其作用是把功耗设计意图(power intent)传递给EDA工具, 从而帮…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

XSS: 原理 反射型实例[入门]

原理 服务器未对用户输入进行严格校验&#xff0c;使攻击者将恶意的js代码&#xff0c;拼接到前端代码中&#xff0c;从而实现恶意利用 XSS攻击危害 窃取用户Cookie和其他敏感信息&#xff0c;进行会话劫持或身份冒充后台增删改文章进行XSS钓鱼攻击利用XSS漏洞进行网页代码的…

ARM功耗管理之唤醒源与组合唤醒源

安全之安全(security)博客目录导读 思考&#xff1a;什么是睡眠锁&#xff1f;什么是唤醒源&#xff1f;什么是组合唤醒源&#xff1f; DynamIQ系统下的唤醒源 Redistributor中包含了一个GICR_WAKER寄存器&#xff0c;用于记录connected PE的状态是onLine还是offline. 如果让P…

数电基础 - 组合逻辑电路

目录 一. 简介 二. 分析方法 三. 设计方法 四. 常用的逻辑组合电路 五. 冒险现象 六. 消除冒险现象 七. 总结 一. 简介 组合逻辑电路是数字电路中的一种类型&#xff0c;它在任何时刻的输出仅仅取决于当时的输入信号组合&#xff0c;而与电路过去的状态无关。 组合逻辑…

C#实现最短路径算法

创建点集 double r 200 * 500;double width 1920;double height 1080;int col (int)(r / width);int row (int)(r / height);List<(double, double)> list1 new List<(double, double)>();for (int i 0; i < row; i){var y i * height;if (y < r){va…

[web]-图片上传、文件包含-图片上传

题目内容提示&#xff1a;上传图片试试吧&#xff0c;注意统一时区问题 打开页面如图&#xff0c;源码没有过滤&#xff0c;随便输入&#xff0c;进入上传目录 根据链接可以看到是文件包含&#xff0c;可以利用编码读取源码&#xff0c;这里只列出有用页面的编码&#xff08;?…

数据结构:链表详解 (c++实现)

前言 对于数据结构的线性表&#xff0c;其元素在逻辑结构上都是序列关系&#xff0c;即数据元素之间有前驱和后继关系。 但在物理结构上有两种存储方式&#xff1a; 顺序存储结构&#xff1a; 使用此结构的线性表也叫 顺序表物理存储上是连续的&#xff0c;因此可以随机访问…

Redis 中Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

Sorted Set 类型 文章目录 Sorted Set 类型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

秋招Java后端开发冲刺——Mybatis使用总结

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …

服务器数据恢复—2块硬盘离线且热备盘未完全激活的raid5数据恢复案例

服务器存储数据恢复环境&#xff1a; 北京某企业一台EMC FCAX-4存储上搭建一组由12块成员盘的raid5磁盘阵列&#xff0c;其中包括2块热备盘。 服务器存储故障&#xff1a; raid5阵列中两块硬盘离线&#xff0c;热备盘只有一块成功激活&#xff0c;raid瘫痪&#xff0c;上层LUN…

Sentinel限流算法:滑动时间窗算法、漏桶算法、令牌桶算法。拦截器定义资源实现原理

文章目录 滑动时间窗算法基本知识源码算法分析 漏桶算法令牌桶算法拦截器处理web请求 滑动时间窗算法 基本知识 限流算法最简单的实现就是使用一个计数器法。比如对于A接口来说&#xff0c;我要求一分钟之内访问量不能超过100&#xff0c;那么我们就可以这样来实现&#xff1…

学习C++,应该循序渐进的看哪些书?

学习C是一个循序渐进的过程&#xff0c;需要根据自己的基础和目标来选择合适的书籍。以下是一个推荐的学习路径&#xff0c;包含了从入门到进阶的书籍&#xff1a; 1. 入门阶段 《C Primer Plus 第6版 中文版》 推荐理由&#xff1a;这本书同样适合C零基础的学习者&#xff0…

几何建模-Parasolid中GO功能使用

1.背景介绍 1.1 Parasolid和它的接口间关系 1.2 什么是GO GO全称是Graphical Output.你的程序需要在屏幕或者打印设备上显示模型数据时。在需要使用PK中的某个渲染函数时创建图形显示数据时&#xff0c;Parasolid会调用GO相关的函数。GO函数会输出绘图指令给你的应用程序提供…

映美精黑白相机IFrameQueueBuffer转halcon的HObject

映美精黑白相机&#xff0c;用wpfhalcon开发取图 1.到官网下载&#xff0c;开发包 1sdk 2c开发例子 3c#开发例子 引入TIS.Imaging.ICImagingControl35.dll 3.ICImagingControl使用这个类控制相机 /// <summary> /// 相机控制 /// </summary> public ICImagingC…

《昇思25天学习打卡营第16天|基于MindNLP+MusicGen生成自己的个性化音乐》

MindNLP 原理 MindNLP 是一个自然语言处理&#xff08;NLP&#xff09;框架&#xff0c;用于处理和分析文本数据。 文本预处理&#xff1a;包括去除噪声、分词、词性标注、命名实体识别等步骤&#xff0c;使文本数据格式化并准备好进行进一步分析。 特征提取&#xff1a;将文…

LightRAG:高效构建和优化大型语言模型应用的 PyTorch 框架

一、前言 随着大语言模型 (LLM) 的蓬勃发展&#xff0c;检索增强生成 (RAG) 技术作为一种将 LLM 与外部知识库结合的有效途径&#xff0c;受到了越来越多的关注。 然而&#xff0c;构建 LLM 应用的真正挑战在于开发者需要根据具体需求进行高度定制化&#xff0c;而现有的 RAG …

《向量数据库指南》2024年中国向量数据库名录大全

2024年中国向量数据库名录大全 序号 百科ID 数据库名称 slogan 厂商 来源 开源 类型 1 1228 TensorDB 爱可生向量数据库 上海爱可生信息技术股份有限公司 自研 商业 向量 2 972 Milvus 开源向量数据库 上海赜睿信息科技…

centos安装minio文件系统服务器(踩坑版)

centos安装minio文件系统服务器&#xff08;踩坑版&#xff09; 引安装1. 下载2. 启动3. 创建access keys4. 创建buckets 坑 引 本来安装挺简单的&#xff0c;网上的教程一大堆&#xff0c;有些写的也挺详细的。不过自己还是踩到坑了&#xff0c;耽误了个把小时&#xff0c;特…

【源码+文档+调试讲解】全国消费水平展示平台

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于全国消费水平展示平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了全国消费水平展示平台&#xff0c;它彻底…