You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于菜品价格关联为图数据库Restaurant顶点添加expensive_meter属性

为缺失expensive_meter属性的Restaurant顶点赋值方案

核心步骤

  • 计算所有餐厅的菜品均价:遍历每个Restaurant,通过OFFERS边关联的Item顶点,聚合计算菜品价格的平均值。
  • 提取已有标注的样本数据:筛选出带有expensive_meter属性的Restaurant,关联它们的菜品均价,建立价格与评分的对应关系。
  • 构建评分映射规则:基于样本数据的分布,确定均价到expensive_meter的映射逻辑(离散分档或连续拟合)。
  • 批量赋值缺失属性:对无expensive_meter的Restaurant,用其均价代入映射规则,计算并更新属性值。

算法逻辑

情况1:expensive_meter为离散值(如高/中/低)

  1. 统计已有标注餐厅的均价分布,按分位数划分区间(比如前30%为高,中间40%为中,后30%为低)。
  2. 对缺失属性的餐厅,根据其均价所在区间,匹配对应的expensive_meter值。

情况2:expensive_meter为连续数值(如0-10的评分)

  1. 用已有标注餐厅的均价和expensive_meter值训练线性回归模型,拟合出公式:expensive_meter = a * avg_price + b(a、b为拟合系数)。
  2. 对缺失属性的餐厅,代入自身均价到公式中,计算出对应的评分值。

代码示例(以Neo4j Cypher为例)

步骤1:计算所有餐厅的菜品均价(临时存储)

// 为每个餐厅计算均价,存入临时属性avg_item_price
MATCH (r:Restaurant)-[:OFFERS]->(i:Item)
WITH r, AVG(i.price) AS avg_price
SET r.avg_item_price = avg_price;

步骤2:提取已有标注的样本数据

// 获取已有expensive_meter的餐厅及其均价
MATCH (r:Restaurant)
WHERE EXISTS(r.expensive_meter)
RETURN r.avg_item_price AS avg_price, r.expensive_meter AS score
ORDER BY avg_price;

根据返回的结果,手动或通过脚本计算分位数(离散情况)或拟合线性回归系数(连续情况)。比如离散分档确定:均价>80为高,40-80为中,<40为低。

步骤3:为缺失属性的餐厅赋值(离散分档示例)

// 为无expensive_meter的餐厅赋值
MATCH (r:Restaurant)
WHERE NOT EXISTS(r.expensive_meter)
SET r.expensive_meter = 
  CASE
    WHEN r.avg_item_price > 80 THEN "high"
    WHEN r.avg_item_price BETWEEN 40 AND 80 THEN "medium"
    ELSE "low"
  END;

步骤4:清理临时属性(可选)

// 删除临时的均价属性
MATCH (r:Restaurant)
REMOVE r.avg_item_price;

连续数值拟合示例(结合Python脚本)

如果需要用线性回归,先导出样本数据:

MATCH (r:Restaurant)
WHERE EXISTS(r.expensive_meter)
RETURN r.avg_item_price AS x, r.expensive_meter AS y

将结果导出为CSV,用Python拟合:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 读取导出的CSV数据
data = pd.read_csv("restaurant_scores.csv")
X = data[['x']]
y = data['y']

# 训练模型
model = LinearRegression()
model.fit(X, y)

# 得到系数a和截距b
a = model.coef_[0]
b = model.intercept_

然后用Cypher批量更新:

// 代入拟合的a和b值,计算并赋值
MATCH (r:Restaurant)
WHERE NOT EXISTS(r.expensive_meter)
SET r.expensive_meter = {a} * r.avg_item_price + {b};

(注:{a}和{b}替换为Python拟合得到的实际数值)

内容的提问来源于stack exchange,提问作者Matheus Farias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:37:22