[答疑]提前进行跑batch或者某种方式汇总购买货物的历史记录

DDD领域驱动设计批评文集>>

《软件方法》强化自测题集>>

《软件方法》各章合集>>

问题时间:2014/8/18

菜牙(1076***349) 14:32:08

现在又这么个场景, 比如: 用户查询其购买货物的历史记录统计这个用例。 比如显示 这个时间范围内总共多少钱, 每天平均多少, 每天几笔, 以及具体的明细。 现在一个问题就出来了, 如果是直接计算这些数据会比较慢。设计的时候, 会考虑性能的问题。 此时一个思路就是 比如 提前进行跑batch或者某种方式汇总。

请问一下, 这个提前计算,我是把它当做一个新的用例还是, 识别为当前 查询用例的一部分。

我现在把其识别为新的用例是否正确?

这个计算: 在有的系统中1天算计算1次汇总,有的要5分钟一次。

潘加宇(3504847) 14:41:31

首先,这可能不是需求,涉众在意的只是查询速度要快。如何做到的,是系统的设计。如果涉众要求非得这样不可,这个是另一个用例里的步骤。可能是:时间–定时汇总,也可能是别的某个用例里面顺便做的一个步骤。

可以先复习一下软件方法第六章

菜牙(1076***349) 14:42:56

是的。 所以, 这个有时比较纠结。

如果 按照潘老师的意思是, 可以在用例描述中加上一个系统行为步骤叫做 系统预处理数据?

问题点是, 前期的需求分析时用例中是不会描述这类为了性能而加的步骤。

坐井观天(30570046) 14:48:03

我理解,这个和需求分析关系不大。

潘加宇(3504847) 14:49:31

不存在’‘为性能而加的步骤’’

菜牙(1076***349) 14:50:20

比如:用例的步骤:1. 用户 查询数据 xxx

2. 系统查询结果显示

那个预处理的行为如果作为 用例实现的一部分?就意味着这个用例的 查询者, 会发起提前处理数据。

关键这个提前处理的发起者是 系统或者说某个定时器。

潘加宇(3504847) 14:53:32

需求如果是’‘3秒以内返回历史记录’‘,你说的这个问题就是设计。需求如果是’‘时间–统计历史记录’'(可能性不大),性能需求就没有了。

这个问题先回答到这里,先认真阅读第六章和之前的答疑记录需求部分再继续问

好的,以下是一个添加了推荐功能的笔记系统,基于同一类别的笔记进行推荐,并根据用户的历史记录和偏好进行个性化推荐的Python代码示例: ```python import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans, MiniBatchKMeans import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.metrics.pairwise import cosine_similarity # 读取笔记数据 notes = pd.read_csv('notes.csv') # 将笔记文本转换为TF-IDF向量 vectorizer = TfidfVectorizer(stop_words='english') X = vectorizer.fit_transform(notes['text']) # 使用MiniBatchKMeans算法进行聚类,加速计算 kmeans = MiniBatchKMeans(n_clusters=3, batch_size=100) kmeans.fit(X) # 计算每个笔记所属的类别 labels = kmeans.predict(X) # 计算每个类别的笔记列表 note_clusters = {} for i in range(len(notes)): label = labels[i] if label not in note_clusters: note_clusters[label] = [] note_clusters[label].append(i) # 定义一个基于同一类别的笔记进行推荐的函数 def recommend_by_cluster(note_id): label = labels[note_id] cluster = note_clusters[label] cluster.remove(note_id) return cluster # 定义一个基于用户历史记录和偏好进行个性化推荐的函数 def recommend_personalized(user_history, user_preferences): sim_scores = cosine_similarity(X[user_history], X) sim_scores = sim_scores.flatten() sim_scores[user_history] = -1 sim_scores *= user_preferences indices = np.argsort(-sim_scores)[:10] return indices # 示例:对第一篇笔记进行基于同一类别的推荐 note_id = 0 cluster = recommend_by_cluster(note_id) print('基于同一类别的推荐:', cluster) # 示例:对用户历史记录和偏好进行个性化推荐 user_history = [1, 3, 5] user_preferences = np.array([0.5, 0.3, 0.2, 0, 0, 0]) indices = recommend_personalized(user_history, user_preferences) print('个性化推荐:', indices) ``` 上述代码中,我们首先使用`MiniBatchKMeans`算法将笔记聚类成3个类别,然后计算每个笔记所属的类别,并计算每个类别的笔记列表。接着,我们定义了两个推荐函数:`recommend_by_cluster`函数基于同一类别的笔记进行推荐,`recommend_personalized`函数基于用户的历史记录和偏好进行个性化推荐。具体来说,`recommend_personalized`函数首先计算用户历史记录中每篇笔记与所有笔记的余弦相似度,然后根据用户的偏好将相似度打分,最后选择分数最高的10篇笔记作为推荐结果。 请注意,这只是一个简单的示例,实际应用中可能需要进行更多的数据预处理和参数调整,以获得更好的推荐效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值