介绍
本教程将显示如何使用MindSDB根据存储在MongoDB数据库中的历史数据来预测黄金价格。
什么是MindsDB?
MindSDB是一种开源技术,可在数据库中添加机器学习功能,从而通过标准查询对标准数据库进行预测。
什么是mongodb?
MongoDB是一个流行的非关系文档数据库,可为JSON样存储提供支持。
通过使用这两个,我们可以在大数据库中预测数据值。在本教程中,我们将使用this Kaggle dataset预测金价。
设置一切
MindSDB都可以使用其云服务(cloud.mindsdb.com)或本地提供,因此MongoDB也是如此,在本地和其托管版本MongoDB Atlas中可用。
在本教程中,我将专注于在本地Docker容器中同时运行MongoDB和MindSDB,尽管它与云版本的工作方式非常相似 - 您可以查看the documentation
要求
- Docker环境。有关什么是Docker以及如何使用它的介绍,请结帐this tutorial
- docker-compose,创建和运行多容器Docker应用程序
- mongosh client,针对MongoDB实例进行查询。
创建Docker容器
首先,我们将创建Docker容器。创建一个文件夹并创建一个名为docker-compose.yml
的文件:
这将创建两个容器:MongoDB和MindSDB。第一个使用默认身份验证,每个人都可以访问它。尽管这应该永远不会公开可用,但这只是一种首次方法,暂时会做到。我们还使用两个容器之间的网络桥梁来允许它们之间的连接。
为了使数据持续跨重新启动,在第一个名为database
的文件夹中创建一个文件夹,该文件夹将由两个容器安装并保存数据。
到目前为止,我们应该拥有以下目录结构:
.
└── gold-price-estimation/
├── docker-compose.yml
└── database/
└── ...
要启动容器,打开终端,进入gold-price-estimation
文件夹内并运行docker-compose up -d
(根据配置,您可能需要具有超级用户特权)。现在,您的系统中有MindSDB和MongoDB运行!
通过去127.0.0.1:47334检查一下。您应该找到MindDB的Web UI。
如果某事无法解决,请仔细检查以前的步骤,如果它持续下去,请随时在下面发表评论。
导入数据库中的数据
下载the .csv file from Kaggle后,我们需要通过运行docker cp file_name.csv mongodb:/file_name.csv
将文件从主机复制到容器。
要导入数据库,我们需要首先使用docker exec -it mongodb bash
访问Docker容器,然后我们将使用BASH命令行呈现。然后,运行:
mongoimport --type csv -d golddb -c price --headerline --drop gold.csv
在这里,golddb
是数据库的名称,price
是表名。
将容器带有exit
,并检查数据是否正确导入:
mongosh --host mongodb --port 27017
USE golddb;
db.price.find({});
这应该输出数据库中的第一个条目。
创建从MindSDB到MongoDB的连接
我们需要指定MindSDB的数据库。为此,运行:
mongosh --host mindsdb --port 47336
在客户端,执行:
USE mindsdb;
db.databases.insertOne({ name: "mongo_gold", engine: "mongodb", connection_args: { "port": 27017, "host": "mongodb", "database": "golddb" } })
这样,我们首先将客户端连接到MindSDB的数据库。在其中,我们选择数据库mindsdb
并插入带有连接参数的条目:
-
mongo_gold
:MindSDB识别连接的名称 -
mongodb
:主机的URL/IP,在这种情况下,我们的Docker容器的名称。
此命令应返回
{
acknowledged: true,
insertedId: ObjectId("635433076e11662dcd20042c")
}
,告诉我们它已保存了配置。运行
db.databases.find()
通过返回
来确认
{
name: 'mongo_gold',
database_type: 'mongodb',
host: 'mongodb',
port: '27017',
user: null
}
剩下的就是创建预测变量!
创建预测指标
仍然在客户端内部,我们运行:
db.predictors.insert({ name: "mongo_gold_p", predict: "Value", connection: "mongo_gold", "select_data_query": "db.gold.find()" });
这些参数是什么意思?
-
name
:MindSDB识别预测变量的名称 -
predict
:数据库中的列的名称,我们要预测的值 -
connection
:我们先前创建的名称是由MindSDB识别连接 的名称
-
select_data_query
:这允许使用标准MongoDB查询在数据库中指定特定行。对于此示例,我们将使用所有行。
我们应该收到一个公认的消息,然后MindSDB将开始致力于创建预测因子。您可以使用以下方式检查模型生成的状态
db.predictors.find({name: "model_name"});
测试!
一旦状态为complete
,就可以准备回答查询。
继续预测一个值:
USE mongo_gold;
db.mongo_gold_p.find({Date: "1975-07-01"})
如果它返回预测(以及一些表达方式,例如信心等 - 完整说明in the documentation),恭喜!
结论
您已经成功创建了一个MongoDB数据库,该数据库由于MindSDB的力量扩展,能够根据所提供的数据生成预测。
有关更多信息,make sure to check out the docs
感谢您阅读我的教程,如果它对您有用,请记住给它类似的话并与您的朋友分享!另外,查看我的Github profile。