2

我正在使用出色的新 r 包“reticulate”来合并 Python 和 R,以便能够在 R 中使用来自数据提供者(Thomson Reuters Eikon)的 API,该 API 仅适用于 Python。我希望这样做,因为我的 R 能力比我的(几乎不存在的)Python 能力更好。

我使用 Python 模块“eikon”中的函数“get_news_headlines”,它用作从 Thomson Reuters Eikon 下载数据的 API。通过将网状函数“import”的参数“convert”设置为 TRUE,我自动将生成的 pandas 数据帧转换为 r 数据帧。

API 将包含新闻发布日期的下载数据的第一列设置为索引。当数据框自动转换为 r 对象时,日期中有重复项,我收到以下错误消息:

Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique value when setting 'row.names': ‘2018-05-31 08:21:56’ 

这是我的代码:

library(reticulate) #load reticulate package to combine Python with R

PYTHON_pandas <- import("pandas", convert = TRUE)
#import Python pandas via reticulate's function "import"
PYTHON_eikon <- import("eikon", convert = TRUE)
#import the Thomson Reuters API Python module for use of the API in R
#(I set convert to true to convert Python objects into their R equivalents)

#do not bother with the following line:
PYTHON_eikon$set_app_id('ADD EIKON APP ID HERE')
#set a Thomson Reuters application ID (step is necessary to download data from TR, any string works)

DF <- PYTHON_eikon$get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L)
#save news data from the API in an R dataframe
#query is the Thomson Reuters code from their Eikon database
#count is the number of news articles to be downloaded, I arbitrarily set it to 10 articles here

所以我的问题是我必须告诉 R 在转换为 r 数据帧之前替换熊猫索引中的重复项以避免所述错误消息。当我将参数计数设置为一个很小的数字并且巧合地没有任何重复时,代码就像现在一样工作得很好。

对于具有 R 和 Python 知识的人来说,这可能很容易(所以对我来说不是,因为我的 Python 知识非常有限)。不幸的是,代码不可复制,因为我想使用 Thomson Reuters 数据访问。非常感谢任何帮助!

编辑: 是否可以选择convert = FALSEimport函数中设置参数以首先在 R 中接收熊猫数据帧?比我需要在 R 中操作 Python pandas 数据帧的可能性,以便删除重复项,或者在我手动将 pandas 数据帧转换为 R 数据帧之前删除 pandas 数据帧索引。这可能reticulate吗?

eikon Python 包的文档还不是很好,因为它是一个相当新的 Python 模块。

@Moody_Mudskipper:

str(PYTHON_eikon)仅返回Module(eikon),因为我仅使用导入函数获取相应的 Python 模块。

names(PYTHON_eikon)返回: "data_grid" "eikonError" "EikonError" "get_app_id" "get_data" "get_news_headlines" "get_news_story" "get_port_number" "get_symbology" "get_timeout" "get_timeseries" "json_requests" "news_request" "Profile" "send_json_request" "set_app_id" "set_port_number" "set_timeout" "symbology" "time_series" "tools" "TR_Field"

可用的 eikon 功能似乎都无法帮助我解决我的问题。

4

2 回答 2

1

万一这个相当特殊的问题对其他人来说很有趣,我想简单地分享一下我在此期间找到的解决方案(不完美,但有效):

library(reticulate) #load reticulate package to combine Python with R

PYTHON_pandas <- import("pandas", convert = TRUE)
#import Python pandas via reticulate's function "import"
PYTHON_eikon <- import("eikon", convert = TRUE)
#import the Thomson Reuters API Python module for use of the API in R
#(I set convert to true to convert Python objects into their R equivalents)

#do not bother with the following line:
PYTHON_eikon$set_app_id('ADD EIKON APP ID HERE')
#set a Thomson Reuters application ID (step is necessary to download data from TR, any string works)

#**Solution starts HERE:**

DF <- PYTHON_eikon$get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L, raw_output = TRUE)
#use argument "raw_output" to receive a list instead of a dataframe

DF[c(2, 3)] <- NULL
#delete unrequired list-elements

DF <- list.cbind(DF)
#use "rlist" function "list.cbind" to column-bind list object "DF"

DF <- rbindlist(DF, fill = FALSE)
#use "data.table" function "rbindlist" to row-bind list object "DF" 
于 2018-06-05T13:14:13.167 回答
0

你需要使用 R 包“网状”还是你也可以看看其他包?

GitHub 上有一个 R 的开源包装器:eikonapir。虽然它不受官方支持,但您可能会发现它很有用,因为它可以毫无问题地执行您的命令:

get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L)

**免责声明:我目前受雇于汤森路透

于 2018-06-27T14:34:54.623 回答