r reticulate: переименовывать дубликаты из преобразованного кадра данных Python pandas - PullRequest
0 голосов
/ 31 мая 2018

Я использую великолепный новый пакет r "reticulate" для объединения Python и R, чтобы иметь возможность использовать API от поставщика данных (Thomson Reuters Eikon) в R, который доступен только для Python.Я хочу сделать это, так как мои способности R лучше, чем мои (почти несуществующие) способности Python.

Я использую функцию "get_news_headlines" из модуля Python "eikon", которая служит API для загрузки данных.от Thomson Reuters Eikon.Я автоматически преобразовываю результирующий кадр данных Pandas в r-кадр данных, устанавливая аргумент «convert» функции сетчатой ​​функции import в значение TRUE.

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 = FALSE в функции import, чтобы сначала получить кадр данных pandas в R?Тогда мне потребовалась бы возможность манипулировать информационным фреймом pandas Python в R, чтобы удалить дубликаты или, в качестве альтернативы, удалить индексный фрейм pandas, прежде чем я вручную преобразую фрейм данных pandas в R-фрейм данных.Это возможно с reticulate?

Документация для пакета Python eikon пока не очень хороша, так как это довольно новый модуль 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 не работаетпомогите мне с моей проблемой.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вам нужно использовать пакет R "reticulate" или вы могли бы посмотреть и на другие пакеты?

На GitHub доступна оболочка с открытым исходным кодом для R: eikonapir .Хотя это официально не поддерживается, вы можете найти его полезным, поскольку оно может выполнить вашу команду без проблем:

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

** Отказ от ответственности: В настоящее время я работаю в Thomson Reuters

0 голосов
/ 05 июня 2018

Если эта довольно специфическая проблема когда-нибудь заинтересует кого-то другого, я кратко хочу поделиться решением, которое я нашел за это время (не идеально, но работает):

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" 
...