假設有兩個資料庫,其中存盤了人們的用戶名和網路(關注者和關注者)。兩個資料庫均由下表組成:
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,但是任何偽代碼、一般答案或如何解決這個問題的想法就足夠了。
uj5u.com熱心網友回復:
首先,您必須在兩個資料庫中按用戶名使用模糊搜索。讓我們呼叫此方法 List getFuzzyName(id) 您將獲得“可能是相同人名”的串列接下來使用相同的模糊搜索 getFuzzyName(follower_id) 和 getFuzzyName(following_id) 并獲得一些匹配的朋友。這里 getFuzzyName 在沒有優化的情況下具有 O(n^2) 復雜度,因為您需要將 db1 中的每個朋友與 db2 中的每個朋友進行比較。來自 DB1 和 DB2 的這個數字大于某個限制的人很可能是同一個人。
uj5u.com熱心網友回復:
如果我理解正確,你有兩個資料庫。其中之一是用戶,另一個是網路。所以如果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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363822.html
