【问题标题】:Finding same users in different datasets based on their friends and usernames根据好友和用户名在不同数据集中查找相同用户
【发布时间】:2021-11-18 11:25:23
【问题描述】:

假设有两个数据库存储人们的用户名和网络(关注者和关注者)。两个数据库都包含以下表格:

       Users        |      Relation
------------------------------------------
- id (Primary Key)  | - id (Primary Key)
- username (unique) | - follower_id (Foreign key references users id)
                    | - following_id (Foreign key references users id)

假设两个数据集中的一些用户名相同,一些用户名在另一个数据库中不存在,一些用户名不同但指的是同一个人。此外,他们的网络有相似的趋势,但可能略有不同。

是否有任何已知或建议的方法可以在用户名及其网络上进行一些相似性,以将它们与其他数据库中的个人资料相关联或与无相关联(如果没有)?

我正在使用 python,但任何伪代码、一般答案或如何解决此问题的想法就足够了。

【问题讨论】:

  • Relation 表的id 是什么?
  • some usernames are different but refer to the same person, Also, their network have similar tendencies - 这意味着两个数据库中的数据完全不相关。没有任何相似之处。你应该重新考虑你的目标。

标签: python database algorithm similarity


【解决方案1】:

首先,您必须在两个数据库中使用用户名模糊搜索。让我们调用这个方法 List getFuzzyName(id) 你会得到“可能是同一个人的名字”的列表 接下来对 getFuzzyName(follower_id) 和 getFuzzyName(following_id) 使用相同的模糊搜索并获得一些匹配的朋友。 这里 getFuzzyName 没有优化的复杂度为 O(n^2),因为您需要将 db1 中的每个朋友与 db2 中的每个朋友进行比较。 DB1 和 DB2 中这个数字大于某个限制的人很可能是同一个人。

【讨论】:

    【解决方案2】:

    如果我理解正确,您有两个数据库。其中一个是用户,另一个是网络。所以如果follower_id 和following_id 相等,你想合并这些数据。

    如果您有两个数据框,您可以使用 left on 和 right_on 轻松组合它们。

      pd.merge(
        df_users, 
        df_relations,
        how='outer', 
        left_on='id', 
        right_on='relative_id',
    
      )
    

    假设其中一位用户没有亲属,那么让我们将他们作为 Nan 包含在结果中,使用how='outer'

    如果您想编写 SQL 查询,只需使用“=”即可。

    SELECT * from user
    FULL OUTER JOIN info
    ON user.id = relative.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多