📜  附件“stdData.csv”包含来自四个传感器的不同测量值.对不同的测试进行多次测量 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:42:23.946000             🧑  作者: Mango

附件“stdData.csv”包含来自四个传感器的不同测量值 - TypeScript

这是一个使用 TypeScript 读取 CSV 文件并对其中的数据进行处理的示例。

安装依赖

首先需要安装一些必要的依赖,使用如下命令:

npm install papaparse
npm install @types/papaparse --save-dev
读取 CSV 文件

使用 papaparse 库可以方便地将 CSV 文件读取为 JavaScript 数组。在 TypeScript 中,我们需要在声明文件中定义 papaparse 的类型,上面的安装命令已经帮我们完成了这一步。

以下是使用 papaparse 读取 CSV 文件并输出到控制台的示例:

import * as Papa from 'papaparse';
import {readFileSync} from 'fs';

const fileData = readFileSync('./stdData.csv', 'utf8');
const results = Papa.parse(fileData);

if (results.errors.length > 0) {
  console.error(results.errors);
} else {
  console.log(results.data);
}

上述代码首先使用 readFileSync 函数读取 CSV 文件,然后将文件内容传递给 Papa.parse 函数。Papa.parse 函数返回一个对象,其中的 data 属性包含了 CSV 文件中的所有行数据。

对数据进行处理

对于上述读取的 CSV 文件,我们可以将其转换为 JSON 格式,并根据传感器类型进行分类。

以下是读取 CSV 文件并将其转化为 JSON 数组,并按传感器类型进行分类的示例代码:

interface SensorData {
  sensorId: string;
  timestamp: string;
  value: number;
}

interface SensorType {
  sensorId: string;
  data: SensorData[];
}

const data: SensorData[] = results.data
  .slice(1) // Skip header row
  .map(([sensorId, timestamp, value]) => {
    return {sensorId, timestamp, value: parseFloat(value)};
  });

const sensorTypes: SensorType[] = data.reduce((types: SensorType[], d: SensorData) => {
  const typeIndex = types.findIndex((t: SensorType) => t.sensorId === d.sensorId);
  if (typeIndex === -1) {
    types.push({sensorId: d.sensorId, data: [d]});
  } else {
    types[typeIndex].data.push(d);
  }
  return types;
}, []);

上述代码首先定义了两个接口,一个用于表示传感器的测量值(SensorData),另一个用于表示传感器类型(SensorType)。

接下来,我们通过对 results.data 数组的处理得到了一个 SensorData 类型的数组。然后,我们使用 reduce 函数将其按照传感器类型分组,得到一个 SensorType 类型的数组。

结果输出

最后,我们可以将得到的结果输出到控制台或者进行其他处理。以下是一个简单的输出示例:

sensorTypes.forEach((type) => {
  console.log(`Sensor type '${type.sensorId}':`);
  type.data.forEach((d) => {
    console.log(`  - Timestamp: ${d.timestamp}, Value: ${d.value}`);
  });
  console.log();
});

上述代码将按传感器类型分类后的测量值输出到控制台,输出结果类似于下面的形式:

Sensor type 'sensor1':
  - Timestamp: 2021-01-01 00:00:00, Value: 0.7593841578837258
  - Timestamp: 2021-01-01 00:01:00, Value: 0.6090026127876839
  ...
  
Sensor type 'sensor2':
  - Timestamp: 2021-01-01 00:00:00, Value: 0.1493696529785128
  - Timestamp: 2021-01-01 00:01:00, Value: 0.7127725255001313
  ...
  
...