- У меня есть большая коллекция в Монго
- Я хочу, чтобы загрузить данные в Numpy ndarray
- есть способ загрузки данных из MongoDB без перебора PyMongo. что-то вроде R-Mongo
ответ
Есть несколько предположений, которые подходят к этому, большинство из которых относятся к вашей схеме «схемы». В зависимости от того, насколько четко определены, то есть степень вложенности, ожидаемый тип и количество ключей и т. Д., Вы можете использовать ярлыки при конвертировании вашей коллекции в numpy rec.array
. Я постараюсь, чтобы больше сосредоточиться на этом подходе и меньше на охвате всех возможных случаев конверсии, чтобы дать вам представление о том, как начать. Например, учитывая Монго документ, который выглядит следующим образом:
tdict = {'A': 151,
'B': 'somestring',
'C': [1, 2, 3],
'_id': ObjectId('4edd4e4367fbe05022000034')}
или список таких документов:
tlist = [{'A': 151,
'B': 'somestring',
'C': [1, 2, 3],
'_id': ObjectId('4edd4e4367fbe05022000034')},
{'A': 151,
'B': 'somestring',
'C': [1, 2, 3],
'_id': ObjectId('4edd4e4367fbe05022000034')}]
Функция, которая может быть использована для преобразования этого списка numy rec.array
может выглядеть это:
import numpy as n
def DictToRecArray(data, columnNames=[]):
result = None
if data and isinstance(data, list) or isinstance(data, dict):
data = [data] if isinstance(data, dict) else data
if isinstance(data[0], dict):
columnNames = map(str, data[0].keys()) if not columnNames else columnNames
columns = [(str(c), type(data[0][c])) for c in columnNames]
for i,clm in enumerate(columns):
if clm[1].__name__ in ['str','unicode']:
maxlen = 0
for row in data:
maxlen = len(row[clm[0]]) if len(row[clm[0]]) > maxlen else maxlen
columns[i] = (clm[0], n.dtype('S%d' % maxlen,1))
result = n.recarray((len(data)),dtype=columns)
c_order = [c[0] for c in columns]
for i,row in enumerate(data):
for c in c_order:
result[i][c] = row[c]
return result
с columnNames
, позволяя для подбора ключей от документов, которые будут использоваться в создании вашего rec.array
, а также defin упорядочение этих ключей как столбцов в пределах самого rec.array
.
Мой предыдущий пункт о предположениях становится очевиден, если вы потратите некоторое время на реализацию DictToRecArray
. Например, я мог бы считать наличие значения list
как возможность расширить документ на несколько строк в rec.array
т.е. для ключа C
в tDict
я мог дублировать значение ключей A
, B
и _id
и создать в результате rec.array
с форма равна (3,)
по сравнению с (1,)
. Спустившись по этому пути, вы увидите, что реализация DictToRecArray
будет тесно связана с вашей «схемой», и моя реализация может тормозиться для некоторых ваших документов. Тем не менее, в этом случае, переходя к tlist
DictToRecArray
результатов:
rec.array([(151, [1, 2, 3], 'somestring', ObjectId('4edd4e4367fbe05022000034')),
(151, [1, 2, 3], 'somestring', ObjectId('4edd4e4367fbe05022000034'))],
dtype=[('A', '<i8'), ('C', '|O8'), ('B', '|S10'), ('_id', '|O8')])
Учитывая, что вы искали data.frame
-типа результата от этого, rec.array
должен служить вам хорошо. Надеюсь, это заставит вас идти по правильному пути.
- 1. Есть ли у mongodb драйвер VB.NET?
- 2. Драйвер JDBC для mongodb
- 3. Есть ли способ использовать MongoDB C# драйвер синхронно
- 4. драйвер MongoDB для Erlang
- 5. mongoDb драйвер для windows phone
- 6. Есть ли драйвер ODBC для Microsoft Exchange?
- 7. Проверьте, есть ли ошибка при обновлении/вставке | Драйвер Java MongoDB
- 8. Драйвер Mongodb C, проверьте, запущен ли сервер?
- 9. Есть ли хороший клон NumPy для Jython?
- 10. Есть ли драйвер для SQLite в Java?
- 11. Какой драйвер MongoDB для Node.js?
- 12. Установите драйвер MongoDB C# для SSIS
- 13. Чтение данных из MongoDB (gridfs) через драйвер Matlab и Java
- 14. MongoDB: Какой драйвер?
- 15. MongoDb C# драйвер
- 16. Есть ли файл конфигурации для Numpy?
- 17. Проверьте, установлен ли драйвер PHP MongoDB
- 18. Драйвер MongoDB не распознан
- 19. Нужно ли еще обезопасить драйвер MongoDB?
- 20. Зачем использовать драйвер nodeJS для работы с базой данных MongoDB?
- 21. Имеет ли IBsonSerializationOptions последний драйвер C# для MongoDB?
- 22. PHP mongoDB Драйвер MongoDB \ Driver \ Manager зависает
- 23. Есть ли способ контролировать отношения загрузки в gorm с mongodb?
- 24. Performance драйвер MongoDB Java
- 25. Есть ли набор тестов для numpy/scipy?
- 26. REST API: Используя @QueryParam для загрузки данных из MongoDB
- 27. MongoDB и драйвер PHP
- 28. Обновление MongoDB Драйвер для плагина WebStorm
- 29. Драйвер Java MongoDB - Типы объектов
- 30. драйвер hadoop-mongodb и mahout
Я столкнулся с той же проблемой, и после длительного поиска, насколько я мог видеть, такого решения не существует. Я должен был написать собственный конвертер документов для ndarray, который довольно прост. Кроме того, поскольку кажется, что вы заинтересованы в возврате структуры типа dataframe, вы можете рассмотреть возможность преобразования в 'rec.array' vs 'ndarray'. Не стесняйтесь редактировать свой вопрос с помощью примеров документов из своей коллекции, и я могу предоставить вам пример кода, чтобы вы начали. – diliop
@dilop, у меня есть данные в текстовом файле в настоящее время, и я должен сначала загрузить их в mongodb, поделиться тем, как вы это сделали, и я получу идею. – daydreamer
Это вообще помогло или вам нужно больше идей? – diliop