小编Emj*_*ora的帖子

通过多个变量的模糊匹配来匹配实体

我有一个多维的模糊字符串匹配问题:

假设我有一个熊猫数据框,其中包含变量“公司名称”,“股票代码”和“国家/地区”。简化的子集可能看起来像这样:

pd.DataFrame(columns = ["Company name", "Ticker", "Country"], 
             data = [["Vestas Wind Systems", "VWS.CO", "Denmark"],
                     ["Vestas", "VWS", "Denmark"],
                     ["Vestas Wind", "VWS", np.nan], 
                     ["Amazon.com Inc", np.nan, "United States of America"],
                     ["AMAZONIA", "BAZA3 BZ", "Brazil"],
                     ["AMAZON.COM", "AMZN US", "United States"]])
Run Code Online (Sandbox Code Playgroud)

数据集的子集

整个数据帧将包含数十万行。

我要确定的是数据框中的公司,它们是相同的。 在这种情况下,意味着确定行0、1、2都是“ Vestas Wind Systems”公司的不同表达方式,行3、5都代表“ Amazon.com Inc”,行4代表“ Amazonia”。

为了增加正确匹配的机会,我认为最好利用所有三列的信息。

但是,所有三列都需要通过模糊逻辑进行比较:公司,股票行情和国家/地区的写法可能不同。例如,“ Vestas风力系统”与“ Vestas”或“美国”与“美国”。

另一个复杂性是,“股票行情”和“国家/地区”列都可能包含NaN值(公司名称绝不能为空)。

问题1:解决此问题的理想方法是什么?


我目前的计划:

我想通过利用三列中的信息来匹配公司。跨列的实体越相似,匹配的可能性就越高。此外,每列的权重应该不同:仅仅因为两家公司都位于美国,并不意味着它们是同一家公司。因此,例如,“国家/地区”列应具有较低的权重。

我目前尝试在每列上使用模糊算法来识别相似的字符串表示形式。这将产生如下结果,其中分数代表字符串相似度:

pd.DataFrame(columns = ["Company name 1", "Company name 2", "Score"], 
             data = [["vestas wind systems", "vestas wind", 0.9],
                     ["vestas wind", "vestas", 0.85],
                     ["amazon.com inc", "amazon.com", …
Run Code Online (Sandbox Code Playgroud)

python string matching pandas

5
推荐指数
1
解决办法
416
查看次数

IBPY 中的 reqHistoricalData 不返回任何内容 [python]

我正在尝试通过 Ibpy 从盈透证券(IB)获取历史数据。我已经尝试了几个用于此任务的脚本,这些脚本是我从其他人那里改编而来的,他们表明它应该可以工作。然而,它们都不适合我!我是Python新手,所以我承认我对这些方法的工作原理没有完全的了解——但是,我应该尝试最明显的修复。下面我列出了我尝试过的两个脚本。我正在使用 python 2x。

在 TWS 中我有以下设置:

选中:启用 ActiveX 和套接字客户端。未选中:启用 DDE 客户端。未选中:只读 API。选中:下载连接上的未结订单。选中:发送投资组合时包括外汇头寸。选中:发送 EEP 的状态更新。Socket port = 7496.勾选:使用负数绑定自动订单。未选中:创建 API 消息日志文件。未选中:在 API 日志文件中包含市场数据。日志记录级别 = 错误。主API客户端ID = 222。向API发送批量数据的超时时间为30秒。组分交换分离器 = 空白。选中:仅允许来自本地主机的连接。

API - 检查预防措施:绕过 API 订单的订单预防措施。此选项卡中的所有其他内容均未选中。

当我运行 python 脚本时,我已经登录并运行了 TWS,并且与其他人在网上所说的相比,上面的 TWS API 设置似乎是正确的。我有一个订阅美国股票数据的真实 IB 账户。还应该提到的是,我也尝试运行另一个通过 IBPY 下订单的脚本 - 这有效,因此问题似乎仅(至少目前)存在于获取历史数据方面。

脚本1:

from time import sleep, strftime, localtime  
from ib.ext.Contract import Contract  
from ib.opt import ibConnection, message  


new_symbolinput = ['AAPL']
newDataList = []  
dataDownload = []  

def historical_data_handler(msg):  
    global newDataList  
    print (msg.reqId, msg.date, msg.close) …
Run Code Online (Sandbox Code Playgroud)

python api ibpy

3
推荐指数
1
解决办法
3997
查看次数

Python - 列表字典 - 为每个唯一的列表元素找到关联的键

说我有一本这样的字典

D = {'a': [1,2,3], 'b': [2,3,4], 'c': [3,4,5]}
Run Code Online (Sandbox Code Playgroud)

对于所有列表中存在的每个唯一元素,我想找到相关的字典键。

因此,想要的输出是:

out = {1: ['a'], 2: ['a', 'b'], 3: ['a', 'b', 'c'], 4: ['b', 'c'], 5: ['c']}
Run Code Online (Sandbox Code Playgroud)

我如何最有效地做到这一点?

编辑:我需要为一个包含 ~100 个键的大字典和每个列表在 50-10000 个元素之间执行此操作

python dictionary list

0
推荐指数
1
解决办法
48
查看次数

标签 统计

python ×3

api ×1

dictionary ×1

ibpy ×1

list ×1

matching ×1

pandas ×1

string ×1