点击上方卡片关注我
设置星标 学习更多技能
在大数据时代,企业需要从海量数据中提取有价值的信息来支持决策。商业智能(Business Intelligence,BI)工具成为了数据分析的重要手段。Mining是一个基于Python开发的开源商业智能应用服务器,专注于OLAP功能。它提供了完整的数据分析和可视化解决方案,让开发者和数据分析师能够快速构建交互式仪表板、生成各类图表,并对多维数据进行深入分析。
Mining的安装需要配置多个依赖组件,包括数据库和消息队列系统。
首先安装系统依赖:
# 安装MongoDB、Redis和Node.jssudo apt-get install mongodb redis-server nodejs npm# 安装前端包管理器Bowernpm install -g bower然后克隆Mining仓库并构建:
# 克隆仓库git clone https://github.com/mining/mining.gitcd mining# 构建项目make build# 安装Python依赖pip install -r requirements.txt验证安装:
# 启动服务器python manage.py runserver# 访问 http://localhost:8000 查看是否正常运行数据仪表板是BI系统的核心功能,它将多个数据可视化组件组合在一起,提供数据的全景视图。Mining允许用户通过配置文件或Web界面创建自定义仪表板,支持拖拽式布局,仪表板可以实时更新数据,帮助管理者快速了解业务状况。
from mining.dashboard import Dashboardfrom mining.widgets import ChartWidget, TableWidget# 创建仪表板实例dashboard = Dashboard(title='销售数据分析')# 添加图表组件sales_chart = ChartWidget( title='月度销售趋势', chart_type='line', data_source='sales_db', query='SELECT month, SUM(amount) FROM sales GROUP BY month')# 添加表格组件top_products = TableWidget( title='热销产品TOP10', data_source='sales_db', query='SELECT product_name, SUM(quantity) as total FROM sales GROUP BY product_name ORDER BY total DESC LIMIT 10')# 将组件添加到仪表板dashboard.add_widget(sales_chart, position=(0, 0))dashboard.add_widget(top_products, position=(0, 1))# 保存仪表板配置dashboard.save()Mining支持连接多种数据库,通过SQLAlchemy提供统一的数据访问接口。配置数据源是使用Mining的第一步,它决定了系统能够访问哪些数据。Mining支持PostgreSQL、MySQL、SQLite等主流数据库,也可以连接到数据仓库。
from mining.db import DatabaseConnection# 配置PostgreSQL数据源db_config = {'name': 'sales_db','engine': 'postgresql','host': 'localhost','port': 5432,'database': 'sales_data','username': 'admin','password': 'password123'}# 创建数据库连接connection = DatabaseConnection(db_config)# 测试连接if connection.test_connection(): print('数据库连接成功') connection.save()else: print('数据库连接失败')数据查询是BI系统的基础功能,Mining提供了灵活的查询构建器,支持SQL查询和可视化查询构建。用户可以创建保存的查询,供仪表板和报表使用。Mining还支持参数化查询,允许用户在运行时动态指定查询条件。
from mining.query import Queryfrom mining.report import Report# 创建查询对象query = Query( name='monthly_revenue', data_source='sales_db', sql=''' SELECT DATE_TRUNC('month', order_date) as month, SUM(amount) as revenue, COUNT(*) as order_count FROM orders WHERE order_date >= :start_date GROUP BY month ORDER BY month ''', parameters={'start_date': '2024-01-01'})# 执行查询results = query.execute()# 创建报表report = Report( title='月度营收报表', query=query, chart_type='bar', export_formats=['pdf', 'excel'])# 生成报表report.generate()Mining内置了任务调度器,支持定时执行数据分析任务。这对于需要定期生成报表、更新仪表板数据或执行ETL任务的场景非常有用。调度器支持cron表达式,可以灵活配置任务执行时间。任务执行结果会被记录,便于追踪和调试。
from mining.scheduler import Scheduler, Task# 创建调度器实例scheduler = Scheduler()# 定义数据更新任务defupdate_dashboard_data():# 从数据库获取最新数据 query = Query(name='daily_sales') results = query.execute()# 更新缓存 cache.set('dashboard_data', results) print('仪表板数据已更新')# 创建定时任务(每天凌晨2点执行)task = Task( name='daily_data_update', function=update_dashboard_data, schedule='0 2 * * *'# cron表达式)# 添加任务到调度器scheduler.add_task(task)# 启动调度器scheduler.start()对于耗时的数据分析任务,Mining集成了Celery进行异步处理,异步任务特别适合处理大数据集的分析、复杂的计算或需要长时间运行的报表生成。Celery支持任务队列、任务重试和结果存储,确保任务的可靠执行。
from mining.tasks import celery_appfrom celery import Task# 定义异步任务@celery_app.task(bind=True)defgenerate_complex_report(self, report_id):try:# 获取报表配置 report = Report.get(report_id)# 执行复杂查询 self.update_state(state='PROCESSING', meta={'progress': 50}) data = report.query.execute()# 生成报表文件 self.update_state(state='GENERATING', meta={'progress': 80}) file_path = report.export_to_pdf(data)return {'status': 'success', 'file': file_path}except Exception as e:return {'status': 'error', 'message': str(e)}# 调用异步任务task = generate_complex_report.delay(report_id=123)# 检查任务状态print(f'任务状态: {task.state}')Mining允许开发者创建自定义的可视化组件,扩展系统的展示能力,通过继承基础Widget类,可以实现特定业务需求的可视化效果。自定义组件可以集成第三方图表库,如D3.js、ECharts等,实现更丰富的交互效果。
from mining.widgets import BaseWidgetimport jsonclassCustomGaugeWidget(BaseWidget):"""自定义仪表盘组件"""def__init__(self, title, data_source, query, threshold): super().__init__(title, data_source, query) self.threshold = thresholddefrender(self):# 获取数据 data = self.execute_query() value = data[0]['value'] if data else0# 生成配置 config = {'type': 'gauge','value': value,'max': 100,'threshold': self.threshold,'color': 'green'if value >= self.threshold else'red' }return json.dumps(config)# 使用自定义组件gauge = CustomGaugeWidget( title='客户满意度', data_source='survey_db', query='SELECT AVG(rating) as value FROM customer_feedback', threshold=80)Mining是Python生态中一个功能完整的开源商业智能平台,它为企业提供了从数据连接、查询分析到可视化展示的完整解决方案。通过本文的介绍,我们了解了Mining的安装配置、核心特性以及各种实用功能。从基础的仪表板创建和数据查询,到高级的任务调度和异步处理,Mining都提供了企业级的功能支持。虽然Mining基于较早的Python版本,但其架构设计和功能模块仍然具有参考价值。对于需要快速构建BI系统的中小企业来说,Mining提供了一个开箱即用的解决方案,可以大大缩短开发周期。
如果在编程工具充值使用上遇到麻烦,推荐一个牛逼的中转工具!一次性搞定 Codex 、Claude Code和 gemini,内容介绍和付费兑换详见文末阅读原文。


实测 4 个爆火 Skill,一句话生成画布/知识库/任务规划/自动发布
从海外公司注册到 Stripe 收款,跑通了出海收付款全流程(实操分享)
出海建站必备:告别AI味,这两个页面设计 Skills 太牛了!