实际上,我正在使用带有RPY2的R + Python来处理数据和ggplot来创建漂亮的图形。.我在PostgreSQL数据库中有一些数据,并且在使用psycopg2来查询数据。
我正在开始撰写论文,将来我需要一个OLAP cube来存储我的(很大)模拟数据:多维,聚合查询等。
在Python(我想要Python + R,Java中没有jpivot或其他仪表板)与OLAP引擎(如Mondrian)之间进行接口(interface)连接时,是否存在任何最佳或标准做法?我在Google上搜索了任何解决方案,但没有找到任何东西。
我已经简要评估了SQLAlchemy和Django-ORM,但是它们没有MDX或XML/A接口(interface)来查询OLAP服务器(Mondrian或其他)...
是否可以在MDX中编写查询,并使用psycopg + ODBC查询我的OLAP服务器,而OLAP服务器从我的模拟数据中给出答案(在Python对象上没有映射,但对我来说还可以)?
更新1:
为什么我需要搜索OLAP + Mondrian技术?
因为University of Laval(GeoSoa部门+ Thierry Badard)为OLAP:SOLAP编写了空间扩展,并将其在蒙德里安(Mondrian)中实现为GeoMondrian。
这让我很感兴趣,因为我正在从事基于空间多主体的模拟(〜=地理模拟)。
GeoSoa部门创建了一个基于Ajax的组件,用于与GeoMondrian:SOLAPLAYERS进行通信和可视化空间数据,该组件可以通过其Xlma Servlet查询Mondrian服务器。
问题:大数据处理可能很慢,需要Internet或Apache2。简单来说,这只是可视化数据或 map ...就我而言,我需要原始数据来制作自己的数据处理+ R图形:空间分析,回归分析,等级尾等。在这里,SOLAP帮助我为以后的复杂R分析准备数据。
为什么选择Python?
1-通过Web访问空间数据-
我正在尝试使用“酷” Python框架,例如GeoDjango或MapFish:GIS中的大型社区,开源,使用GeoAlchemy处理空间查询/数据,包括具有JavaScript扩展和OpenLayers的可视化等。
2-本地访问GIS中的空间数据-
我想在QGIS(开源GIS)中创建一个插件来访问和可视化数据,并且QGIS插件和API = Python。
3-数据自动分析-
用户或科学家使用网格计算运行模拟,然后选择要对这些数据运行的自动分析(R + ggplot2 + MDX查询)。我的目标是创建模拟的综合报告(图形,表格数据等)。
因此,在仿真之后,数据进入OLAP/SOLAP多维数据集,许多Python脚本(由用户创建)使用MDX获取数据,使用R + RPY2处理数据,并在doku-wiki或其他平台上为科学家编写并生成很酷的输出社区平台。
有问题吗?
1-Olap4j是Mondrian与外部组件进行通信的API核心,它是Java制造的:/
2-SOLAPLAYERS使用Ajax来访问数据,这对我来说太慢了。
3-SQLAlchemy和GeoAlchemy没有与多维数据库(OLAP)的驱动程序连接。
*解决方案? *
1-Py4j使用Python访问olap4j中的Java对象或Java集合?写我自己的函数来访问Java映射的集合吗? =>危险并且不是很容易吗?...
2-带有Ajax Mondrian服务器的XLMA?太慢了。
3-将我自己的py连接器写入OLAP Mondrian吗? =>哎呀。我认为这是一种艰难的方式。
我应该怎么办?
最佳答案
如您所知,Mondrian是一个完整的OLAP引擎,用Java编写在MySQL之类的数据库之上。因此,如果我理解您的问题,那么您想使用Mondrian并想知道如何将其与Python接口(interface)。
我使用打包在.jar中的Mondrian在命令行上处理MDX查询并发送回JSON。 Python直接在命令行中调用它。
import commands
result = commands.getoutput('java -jar Mondrian_cli.jar -q
select NON EMPTY Crossjoin({[Measures].[Store Sales]},
Crossjoin([Time].[1997].Children, [Store].[All Stores].Children)) ON COLUMNS,
[Product].[All Products].Children ON ROWS from [Sales]')
对于服务器使用,我将其打包在servlet中,然后使用ajax发送MDX。 Ajax调用的开销并不大,这就是为什么我不认为需要将Python和Java耦合在一起,而不仅仅是与Mondrian服务器通信。