【问题标题】:Displaying multiple results based on similarity Python基于相似度Python显示多个结果
【发布时间】:2023-02-22 03:06:06
【问题描述】:

我想知道是否有人可以帮助我解决这个问题。我是 Python 的初学者,我正在尝试创建一个程序。问题是我想在统计数据库中搜索一个人,然后根据统计数据得到最相似的 5 名球员的结果。现在我只有一个名字,无法弄清楚我做错了什么。

这是我使用过的代码,但它只显示 1 个玩家,而不是最相似的 5 个玩家。

import tkinter as tk
import pandas as pd
import os
from tkinter import filedialog
from tkinter import messagebox
from tkinter import ttk

def compare_players(player_name, data):
    player = data[data['Player'] == player_name]
    player_stats = player.select_dtypes(include=['float64'])
    player_stats = (player_stats - player_stats.mean()) / player_stats.std()
    
    data_stats = data.select_dtypes(include=['float64'])
    data_stats = (data_stats - data_stats.mean()) / data_stats.std()
    
    similarity = data_stats.dot(player_stats.T)
    top_5 = data.iloc[similarity.iloc[0,:].sort_values(ascending=False).index[:5]]
    return top_5

def run_search(folder_path, player_name, data):
    result = compare_players(player_name, data)
    for i, row in result[['Player', 'Team', 'Age']].iterrows():
        tree.insert("", "end", values=(row['Player'], row['Team'], row['Age']))

def on_search():
    player_name = entry.get()
    run_search(folder_path, player_name, data)


def load_data():
    global data
    data = pd.DataFrame()
    for file in os.listdir(folder_path):
        if file.endswith(".xlsx"):
            file_path = os.path.join(folder_path, file)
            temp_data = pd.read_excel(file_path)
            data = pd.concat([data, temp_data], axis=0)

root = tk.Tk()
root.withdraw()
folder_path = filedialog.askdirectory(initialdir = *Here i put the folder which contains many excel files*,
                                      title = "Select folder")

load_data()

root = tk.Tk()
root.title("Player Comparison")
root.geometry("600x400")

label = tk.Label(root, text="Enter player name:")
entry = tk.Entry(root)
search_button = tk.Button(root, text="Search", command=on_search)

label.pack()
entry.pack()
search_button.pack()

tree = ttk.Treeview(root, columns=("Player", "Team", "Age"), show="headings")
tree.heading("Player", text="Player Name")
tree.heading("Team", text="Team")
tree.heading("Age", text="Age")
tree.pack(side="left", fill="y")

root.mainloop()

代码很可能到处都是,但我试试 :D 提前感谢所有答案。

【问题讨论】:

    标签: python database similarity


    【解决方案1】:

    如果您想获得类似的输出,可以使用“fuzzyWuzzy”库。

    从 fuzzywuzzy 导入 fuzz

    x = your element
    y = similar element
    if fuzz.token_sort_ratio(x, y) > 70:
    // do this
    else:
    // do this
    

    70 表示相似度为 70%。

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2018-04-24
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2017-03-15
      • 2013-02-23
      相关资源
      最近更新 更多