【用户画像(六)】Spark机器学习
相关概念
机器学习(Machine Learning,简写为ML)机器学习是研究如何使计算机能够模拟或实现人类的学习功能,从大量的数据中发现规律,提取知识,并在实践中不断地完善和增强自我。机器学习是机器获取知识的根本途径,只有让计算机系统具有类似人的学习能力,才可能实现人工智能的终极目标。
深度学习(DL,Deep Learning)是机器学习领域中的一个研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI,Artificial Intelligence)。
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。
应用场景
数据挖掘:从数据中提取信息和价值
NLP 自然语言处理 naturel language processing
CV computer vision 计算机视觉 人脸识别/自动驾驶
机器学习模型 = 数据 + 机器学习算法
机器学习的分类
监 ...
【用户画像(五)】挖掘类客户价值标签(RFM模型)
RFM模型RFM模型介绍
RFM模型是一种用于客户价值分析的模型,通过对客户的消费行为进行分析,将客户分为不同的类别,以便企业更好地了解客户、制定更有效的营销策略和提高客户满意度。RFM模型的三个指标分别为最近一次购买时间(Recency)、购买频率(Frequency)和消费金额(Monetary),因此也被称为RFM分析。
最近一次购买时间(Recency)指客户最近一次购买产品或服务的时间,购买时间越近,说明客户越活跃,对企业的贡献也越大。
购买频率(Frequency)指客户在一段时间内购买产品或服务的次数,购买频率越高,说明客户对企业的忠诚度和购买意愿越强。
消费金额(Monetary)指客户在一段时间内购买产品或服务的金额,消费金额越高,说明客户的购买能力和对企业的贡献越大。
RFM计算方法
RFM模型的计算方法是将客户的消费数据按照时间顺序进行排序,然后将客户分为不同的类别,例如将客户分为高、中、低三个层次,或将客户分为ABC三个等级。不同的企业可以根据自己的实际情况来确定分级标准。
二等分
将RFM三个指标分别可以取高和低两个值,共有8个组合(111 0 ...
【用户画像(四)】封装基类分析类标签计算(销售额,支付方式)
封装基类
代码的重构代码重构是指对现有代码进行修改和优化,以改善代码的质量、可读性、可维护性和可扩展性,而不改变代码的功能。它可以帮助开发人员更好地理解和维护代码,减少代码中的冗余、重复和复杂性,提高代码的可重用性和可扩展性,从而使代码更加健壮和可靠。重构的目的是使代码更加简洁、易于理解和修改,以提高软件开发的效率和质量。
基类的抽取所有逻辑一样的步骤可以被每个标签计算任务使用,可以抽取为共同的步骤,注意参数是否相同
1、创建spark的运行环境,逻辑一样,参数不一样:appName
2、读取mysql中的标签信息(四级和五级标签的id和rule),逻辑一样,参数不一样:tag4Id
3、解析四级标签的rule,逻辑一样,参数一样
4、根据四级标签的rule读取es中的数据,逻辑一样,参数一样
5、读取计算需要用到的五级标签的rule和id,逻辑一样,参数一样
6、标签的计算,逻辑不一样,参数一样
7、结果的更新,逻辑一样,参数一样
8、结果的保存,逻辑一样,参数一样
12345678910111213141516171819202122232425262728293031323 ...
【用户画像(三)】匹配类标签计算(年龄,性别,职位)-附计算流程
标签计算流程
总结
1, 根据四级标签的ID读取四级标签和五级标签的元数据tags5_df
2, 解析四级标签的rule->rule_meta对象
按’##‘切分生成一个list
遍历list按’=‘切分’生成一个dict
将dic转化为rule_meta对象
3, 根据解析的四级标签的rule读取标签计算的需要的数据es_df
取出五级标签的rule和id与es_df进行匹配计算,得到一个标签结果new_result_df(userId, tagsId)
从结果索引tfec_userprofile_result中取出老的标签结果old_result_df
将老标签结果中属于本次计算的五级标签id集合中的id剔除,再加入newTagId生成最终的结果result_df
将最终结果result_df以upsert方式写入到es的结果索引中
年龄段标签
根据出生日期的范围划分标签
使用F.regexp_replace将birthday转化yyyyMMdd的格式
使用F.split将五级标签的rule转化start和end
使用birthday与start ...
【SQL刷题本(四)】好友数最多的人及连续3行记录的value大于某个值
体育馆的人流量案例表:
1Stadium
12345678910+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || visit_date | date || people | int |+---------------+---------+visit_date 是表的主键每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)每天只有一行记录,日期随着 id 的增加而增加
编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。
返回按 visit_date 升序排列 的结果表。
查询结果格式如下所示。
示例 1:
123456789101112131415161718192021222324252627输入:Stadium 表:+------+------------+---------- ...
【用户画像(二)】Python操作ES(支持sql)及ES整合Hive,Spark,MySQL
SQL与ElasticSearch对应关系(※)
SQL
Elasticsearch
column(列)
field(字段)
row(行)
document(文档)
table(表)
index(索引)
schema(模式)
mapping(映射)
database(数据库)
Elasticsearch集群实例
Python操作ElasticSearch
上面说到ElasticSearch既然是个数据库那么必然会像MySQL一样可以通过pymysql这中类似的组件进行各种操作.
但是局限于原生的ElasticSearch的命令基本都是Restful风格的代码, 学习的难度未免会有所增加.
原生的RestfulAPI风格在上篇文章介绍过了,这里就不多bb了.
创建(配置)虚拟环境
如果你的虚拟环境中已经有了ElasticSearch这个插件,那么直接切换到虚拟环境就好.
如果没有就需要手动安装了.
12345678# 使用Anaconda虚拟环境管理器, 方便解决版本冲突的问题conda create -n es_env python==3.7.1 ...
【用户画像(一)】技术选型及ElasticSearch与后台启动命令
画像项目介绍项目分类
数据仓库
离线数仓面向数据分析、报表服务
分层管理、维度建模
Hive实现
用户画像
构建在数据仓库之上
toC
toB
推荐系统
用户画像之上
淘宝等电商平台
抖音 快手等内容平台
广告
社交
Lambda架构
离线+实时
batch layer 批处理层
speed layer 速度层
service layer 服务层
kappa架构-流批一体
What用户画像 就是给用户打上海量的标签, 根据用户的目标, 行为和观点差异将用户区分成不同的类型, 从每种类型中提出出关键的信息(标签的名字) 形成人物原型, 实际就是用户信息的标签化。
个体用户画像
群体用户画像
Why
数据业务化-加深用户认知,指导业务开展
数据技术化-构建用户标签,支持上层应用
通过已有数据->获取对应的信息->打上相应的标签->指导业务
How
数据获取
静态数据:用户属性-姓名 性别 年龄。。。。。 用户提供
动态数据:用户行为 下单 上课 理赔
设计指标
构建指标体系-以业务需求为导向
明确开发需求-标 ...
【SQL刷题本(三)】lag函数的使用
游戏玩法分析 IVTable: Activity
1234567891011+--------------+---------+| Column Name | Type |+--------------+---------+| player_id | int || device_id | int || event_date | date || games_played | int |+--------------+---------+(player_id,event_date)是此表的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。
编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的比率,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。
查询结果格式如下所示:
123456789101112131415161718Activity table:+-----------+--- ...
【SQL刷题本(二)】窗口函数
去掉最高最低薪资,求平均薪资概述123456789101112131415161718192010001 1 6011710002 2 9210210003 2 8607410004 1 6659610005 1 6696110006 2 8104610007 2 9433310008 1 7528610009 2 8599410010 1 7688410011 1 1111110012 1 9999910013 2 1111110014 2 99999薪水表中是员工薪水的基本信息,包括雇员编号,部门编号和薪水 第1行表示雇员编号为10001的员工在1号部门,薪水为60117元; 第2行表示雇员编号为10002的员工在2号部门,薪水为92102元; ... 第10行表示雇员编号为10010的员工在1号部门,薪水为76884元
需求
问题:查询每个部门除去最高、最低薪水后的平均薪水,并保留整数。
12345678910111213141516with tmp as ( ...
【数仓查漏补缺(二)】Hive原理及调优回顾
Exists优化
exists性能比in高,能用exists就不要用in
EXISTS里面的子查询,可以使用外部查询的表字段,而且必须和外部表存在关联关系,否则会报错
exists中的子查询,select * / id / 1 都一样,重点是where条件
EXISTS有了关联以后,外部的每一行数据,在子查询中查出来的结果都是不一样的
CodeDmeo使用in(效率低)1234SELECT * from sqooptohive.emp2WHERE area in (SELECT concat(province, city) from sqooptohive.emp_add_hiveWHERE name like '张%');
使用exists1234567891011121314151617SELECT * from sqooptohive.emp2WHERE EXISTS( SELECT * from sqooptohive.emp_add_hive where emp2.area=concat(province, cit ...
