计算机毕业设计hadoop+spark微博舆情大数据分析 微博爬虫可视化 微博数据分析 微博采集分析平台 机器学习(大屏+LSTM情感分析+爬虫)

电商数据建模

一、分析背景与目的

1.1 背景介绍

电商平台数据分析是最为典型的一个数据分析赛道,且电商数据分析有着比较成熟的数据分析模型,比如:人货场模型。此文中我将通过分析国内最大的电商平台——淘宝的用户行为,来巩固数据分析技能以及思维。通过分析用户行为,以此来实现精准营销,总结现有问题,获得业务增长

1.2 数据说明

该数据包含了20230523用户一天购物行为的所有数据,主要包括人货场三个维度信息。用户维度、商品维度、地区维度构成一个用户下单的行为事实表。

1.3数据分析流程

提出业务问题—确认粒度—数据处理和清洗—构建模型—数据可视化——根据数据可视化分析解决问题

业务问题:

1.如何提高品牌销售力度?

2.如何刺激地区市场消费潜力?

3.如何刺激用户消费?

4.如何减少产品成本?

确认粒度:

用户信息表、订单表、订单明细表

商品信息表、品牌信息表、一二三级分类信息表

省份信息表、地区信息表

核心算法代码分享如下:

import sysimport numpy as np
from torch.utils.data import DataLoader
from torch import nn
import torch.nn.functional as F
import torch
from sklearn.metrics import precision_score,recall_score,accuracy_scoreimport dataloaderclass ALS_MLP (nn.Module):def __init__(self, n_users, n_items, dim):super(ALS_MLP, self).__init__()''':param n_users: 用户数量:param n_items: 物品数量:param dim: 向量维度'''# 随机初始化用户的向量,self.users = nn.Embedding( n_users, dim, max_norm=1 )# 随机初始化物品的向量self.items = nn.Embedding( n_items, dim, max_norm=1 )#初始化用户向量的隐层self.u_hidden_layer1 = self.dense_layer(dim, dim // 2)self.u_hidden_layer2 = self.dense_layer(dim//2, dim // 4)#初始化物品向量的隐层self.i_hidden_layer1 = self.dense_layer(dim, dim // 2)self.i_hidden_layer2 = self.dense_layer(dim//2, dim // 4)self.sigmoid = nn.Sigmoid()def dense_layer(self,in_features,out_features):#每一个mlp单元包含一个线性层和激活层,当前代码中激活层采取Tanh双曲正切函数。return nn.Sequential(nn.Linear(in_features, out_features),nn.Tanh())def forward(self, u, v, isTrain=True):''':param u: 用户索引id shape:[batch_size]:param i: 用户索引id shape:[batch_size]:return: 用户向量与物品向量的内积 shape:[batch_size]'''u = self.users(u)v = self.items(v)u = self.u_hidden_layer1(u)u = self.u_hidden_layer2(u)v = self.i_hidden_layer1(v)v = self.i_hidden_layer2(v)#训练时采取dropout来防止过拟合if isTrain:u = F.dropout(u)v = F.dropout(v)uv = torch.sum( u*v, axis = 1)logit = self.sigmoid(uv*3)return logitdef doEva(net, d):d = torch.LongTensor(d)u, i, r = d[:, 0], d[:, 1], d[:, 2]with torch.no_grad():out = net(u,i,False)y_pred = np.array([1 if i >= 0.5 else 0 for i in out])y_true = r.detach().numpy()p = precision_score(y_true, y_pred)r = recall_score(y_true, y_pred)acc = accuracy_score(y_true,y_pred)return p,r,accdef train( epochs = 10, batchSize = 1024, lr = 0.001, dim = 256, eva_per_epochs = 1):''':param epochs: 迭代次数:param batchSize: 一批次的数量:param lr: 学习率:param dim: 用户物品向量的维度:param eva_per_epochs: 设定每几次进行一次验证'''#读取数据user_set, item_set, train_set, test_set = \dataloader.readRecData(test_ratio = 0.1)#初始化ALS模型net = ALS_MLP(len(user_set), len(item_set), dim)#定义优化器optimizer = torch.optim.AdamW( net.parameters(), lr = lr, weight_decay=0.2)#定义损失函数criterion = torch.nn.BCELoss()#开始迭代for e in range(epochs):all_lose = 0#每一批次地读取数据for u, i, r in DataLoader(train_set,batch_size = batchSize, shuffle = True):optimizer.zero_grad()r = torch.FloatTensor(r.detach().numpy())result = net(u,i)loss = criterion(result,r)all_lose += lossloss.backward()optimizer.step()print('epoch {}, avg_loss = {:.4f}'.format(e,all_lose/(len(train_set)//batchSize)))#评估模型if e % eva_per_epochs==0:p, r, acc = doEva(net, train_set)print('train: Precision {:.4f} | Recall {:.4f} | accuracy {:.4f}'.format(p, r, acc))p, r, acc = doEva(net, test_set)print('test: Precision {:.4f} | Recall {:.4f} | accuracy {:.4f}'.format(p, r, acc))def als_mlp_predict(userId=1, itemSize=100, count=4, dim=64):# 读取数据user_set, item_set, train_set, test_set = \dataloader.readRecData( test_ratio=0.1)# 预测一个用户的所有的评分形成一个元祖train_set = []for i in range(1, itemSize):train_set.append((userId, i, 0))# print(train_set)# print(train_set)# 初始化ALS模型net = ALS_MLP(len(user_set), len(item_set), dim)d = torch.LongTensor(train_set)u, i, r = d[:, 0], d[:, 1], d[:, 2]with torch.no_grad():out = net(u, i)predict = []preds = out.tolist()# print(len(preds))# 找出最大值,通过这种方式可以求出多个for i in range(0, count):m = max(preds)idx = preds.index(m)predict.append(dict(iid=idx, score=m))del preds[idx]# print(predict)return predictdef test(dim = 64):result = als_mlp_predict(1, 2000, 5)print(result)if __name__ == '__main__':# train()# test()param1 = sys.argv[1]# param1 = "1"result = als_mlp_predict(int(param1), 55, 4)list = []# print(result)for r in result:list.append(dict(iid=r['iid'], rate=r['score']))print(list)

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

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

相关文章

算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结

文章目录 Leetcode 239-滑动窗口最大值题目描述解题思路 Leetcode 347-前 K 个高频元素题目描述解题思路 栈与队列总结 Leetcode 239-滑动窗口最大值 题目描述 https://leetcode.cn/problems/sliding-window-maximum/description/ 解题思路 在本题中我们使用自定义的单调队列…

C语言指针指针和数组笔试题(必看)

前言: 前面介绍了指针的大体内容,如果接下来能够把这些代码的含义搞得清清楚楚,那么你就是代码king! 一维数组: int a[] {1,2,3,4}; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a0)); pr…

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

删除MySQL中所有表的外键

方法一&#xff1a; 原理 查询schema中所有外键名称然后拼接生成删除语句 第一步&#xff1a; SELECT CONCAT(ALTER TABLE ,TABLE_SCHEMA,.,TABLE_NAME, DROP FOREIGN KEY ,CONSTRAINT_NAME, ;) FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA数据库名…

Linux修炼之路之自动化构建工具,进度条,gdb调试器

目录 一&#xff1a;自动化构建工具make/makefile 生成内容&#xff1a; 清理内容&#xff1a; 对于多过程的&#xff1a; 对于多次make&#xff1a; 特殊符号&#xff1a; 二&#xff1a;小程序之进度条 三&#xff1a;git的简单介绍 四&#xff1a;Linux调试器gdb 接…

fpga 提高有什么进阶书推荐?

到FPGA中后期的时候就要开始接触&#xff0c;如&#xff1a;高速接口、光纤数字信号处理等项目实践了&#xff0c;那么我们可以读一些书进行提升&#xff0c;大家可以收藏下。 高速接口项目《嵌入式高速串行总线技术:基于FPGA实现与应用》作者&#xff1a;张锋 FPGA提升书籍推…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心&#xff1a;Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2]&#xff0c;然后面对OpenAI GPT-4o的挑衅&#xff0c;谷歌在大会上直接甩出大杀器Project Astra[3]…

第七节 ConfigurationClassParser 源码分析

tips&#xff1a; ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解&#xff0c;有难度和深度&#xff0c;也枯燥乏味&#xff0c;可以根据实际情况选择阅读。 位置&#xff1a;org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]浅析Agent工具使用框架:MM-ReAct

上文LLM-Agents]详解Agent中工具使用Workflow提到MM-ReAct框架&#xff0c;通过结合ChatGPT 与视觉专家模型来解决复杂的视觉理解任务的框架。通过设计文本提示&#xff08;prompt design&#xff09;&#xff0c;使得语言模型能够接受、关联和处理多模态信息&#xff0c;如图像…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题&#xff1a;用于自然驾驶行为识别的多注意力Transformer 源文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

java读取shp文件,获取点位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir &quo…

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

电脑连接爱快iKuai软路由之后,网卡没有正常获取到IP,无法访问爱快路由管理页?

前言 上一次咱们说到在爱快控制台上设置/辨认lan口&#xff0c;设置完成之后&#xff0c;其他的一些设置就需要在爱快iKuai软路由的管理页面上设置。 有些小伙伴会发现&#xff0c;当电脑连接上爱快软路由的lan口之后&#xff0c;电脑并没有正常获取到ip&#xff0c;导致无法访…

JavaScript表达式和运算符

表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例&#xff1a;var a10 运算符 运算符一般用符号来表示&#xff0c;也有些使用关键字表示。运算符由3中类型 1.一元运算符&#xff1a;一个运算符能够结合一个操作数&…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下&#xff0c;Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交&#xff1f; 6.线上低级错误 能不能不重启…

STL--set和multiset集合

set和multiset会根据特定的排序准则&#xff0c;自动将元素排序。两者不同之处在于multiset 允许元素重复而 set 不允许。如下图: 使用set或multiset&#xff0c;必须先包含头文件: #include <set>上述两个类型都被定义为命名空间std内的class template: namespace std…

亚马逊自养号测评:深入解析与搭建要求

在亚马逊这电商平台上&#xff0c;商品的评价对于卖家来说至关重要。为了提升商品的曝光率、排名、权重和销量&#xff0c;卖家们纷纷采用各种推广方式&#xff0c;其中&#xff0c;亚马逊自养号测评成为了越来越多卖家选择的一种有效方式。 亚马逊自养号测评&#xff0c;顾名…

分布式事务——9种解决方案的原理与分类

目录 一、概要1. 分布式事务的概念2. 分布式事务解决方案分类 二、常见的分布式事务解决方案1. 基础的 2PC&#xff08;二阶段提交&#xff09;1.1 核心思想1.2 简介1.3 主要特点1.3.1 优点1.3.2 缺点 2. 基础的 3PC&#xff08;三阶段提交&#xff09;2.1 核心思想2.2 简介2.3…

C语言/数据结构——每日一题(有效的括号)

一.前言 如果想要使用C语言来解决这道题——有效的括号&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 继续学习 go 2. 关于 routing 的学习 上一篇 go 用的库是&#xff1a;net/http &#xff0c;这次我们使用官方的库 github.com/gorilla/mux 来实现 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…