在 Debian 上使用 Node.js 进行数据分析的实操指南
一 环境准备与安装
二 常用数据分析库与适用场景
| 库 | 用途 | 典型场景 |
|---|---|---|
| simple-statistics | 描述性统计、回归、推断统计 | 均值/中位数/标准差、线性回归、T 检验 |
| math.js | 数学计算、矩阵与表达式解析 | 工程计算、公式求值 |
| ndarray | 多维数组运算 | 数值计算、与数值库配合 |
| csv-parser | 流式解析 CSV | 日志/业务数据 ETL |
| d3-array | 数据分组、聚合、排序 | 数据清洗与聚合 |
| lodash | 数据处理工具集 | 数据转换、抽样、去重 |
| mongodb | MongoDB 数据读写 | 数据拉取与聚合 |
| express | 构建数据 API/服务 | 结果接口、可视化前后端分离 |
| winston / pino | 结构化日志 | 采集与审计分析 |
| pm2 | 进程管理、监控 | 长期运行分析任务与守护 |
| 以上库在 Debian 的 Node.js 环境中均可直接使用,覆盖从数据读取、清洗、统计到服务化的完整链路。 |
三 端到端示例 从 CSV 到统计结果与 API
// analyze.js
const fs = require('fs');
const csv = require('csv-parser');
const ss = require('simple-statistics');
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
const values = [];
fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (row) => {
const v = parseFloat(row.value);
if (!isNaN(v)) values.push(v);
})
.on('end', () => {
const meanVal = ss.mean(values);
const medianVal = ss.median(values);
const sdVal = ss.standardDeviation(values);
console.log({ mean: meanVal, median: medianVal, sd: sdVal });
// 将结果挂载到内存供 API 使用
app.locals.stats = { mean: meanVal, median: medianVal, sd: sdVal };
});
app.get('/stats', (req, res) => {
res.json(app.locals.stats || { error: 'Data not ready' });
});
app.listen(PORT, () => console.log(`Server running on :${PORT}`));
四 日志与系统指标的趋势分析
// analyze_load.js
const fs = require('fs');
const readline = require('readline');
const logFile = '/var/log/system_load.log';
const rl = readline.createInterface({ input: fs.createReadStream(logFile), crlfDelay: Infinity });
let loadData = [];
rl.on('line', (line) => {
const [timestamp, load] = line.split(', ');
loadData.push({ timestamp, load: parseFloat(load) });
});
rl.on('close', () => {
const avg = loadData.reduce((s, x) => s + x.load, 0) / loadData.length;
console.log(`平均负载: ${avg.toFixed(2)}`);
loadData.forEach((cur, i) => {
if (i > 0) {
const prev = loadData[i - 1];
console.log(`${prev.timestamp} -> ${cur.timestamp} 变化: ${(cur.load - prev.load).toFixed(2)}`);
}
});
});
五 性能与扩展建议