C++ CSV数据处理:计算列的标准差和均值并写入结果

本示例演示使用C++代码读取CSV文件中的某一列,计算其标准差和均值,并将结果写入同一列。

代码示例

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <cmath>

using namespace std;

vector<vector<string>> readCSV(string filename)
{
    vector<vector<string>> data;

    ifstream file(filename);

    string line;
    while (getline(file, line))
    {
        stringstream ss(line);
        vector<string> row;

        string value;
        while (getline(ss, value, ','))
        {
            row.push_back(value);
        }

        data.push_back(row);
    }

    return data;
}

void writeCSV(string filename, vector<vector<string>> data)
{
    ofstream file(filename);

    for (int i = 0; i < data.size(); i++)
    {
        for (int j = 0; j < data[i].size(); j++)
        {
            file << data[i][j] << ","; 
        }

        file << endl;
    }
}

vector<double> getColumn(vector<vector<string>> data, int col)
{
    vector<double> column;

    for (int i = 0; i < data.size(); i++)
    {
        column.push_back(stod(data[i][col]));
    }

    return column;
}

double getMean(vector<double> data)
{
    double sum = 0;

    for (int i = 0; i < data.size(); i++)
    {
        sum += data[i];
    }

    return sum / data.size();
}

double getStandardDeviation(vector<double> data)
{
    double mean = getMean(data);
    double sum = 0;

    for (int i = 0; i < data.size(); i++)
    {
        sum += pow(data[i] - mean, 2);
    }

    return sqrt(sum / data.size());
}

int main()
{
    string filename = "example.csv";
    int col = 2; // 指定读取第三列数据(下标从0开始)

    vector<vector<string>> data = readCSV(filename);

    vector<double> column = getColumn(data, col);

    double mean = getMean(column);
    double stdDev = getStandardDeviation(column);

    cout << "Mean: " << mean << endl;
    cout << "Standard deviation: " << stdDev << endl;

    // 将计算结果写入对应列
    for (int i = 0; i < data.size(); i++)
    {
        data[i][col] = i == 0 ? "Statistics" : i == 1 ? "Mean: " + to_string(mean) : i == 2 ? "Standard deviation: " + to_string(stdDev) : "";
    }

    writeCSV(filename, data);

    return 0;
}

注意:

  • 这只是一个简单的示例代码,仅供参考。在实际应用中,可能需要进行更多的错误处理和数据清洗等操作。
  • 代码中col变量指定了要读取的列号,下标从0开始。
  • 该示例将计算结果写入CSV文件的同一列,您可以根据需要修改代码。

代码解释

代码主要包含以下几个部分:

  1. 读取CSV文件:readCSV函数用于读取CSV文件,并将数据存储在一个二维字符串向量中。
  2. 获取指定列:getColumn函数用于从二维字符串向量中提取指定列的数据,并将其存储在一个双精度浮点数向量中。
  3. 计算均值和标准差:getMeangetStandardDeviation函数分别用于计算数据的均值和标准差。
  4. **写入结果:**代码将计算得到的均值和标准差写入CSV文件的同一列。

应用场景

该代码可用于各种数据分析和统计场景,例如:

  • 计算某一列数据的统计指标,例如均值、标准差、最大值、最小值等。
  • 对数据进行初步分析和清洗。
  • 将计算结果写入新的文件或数据库中。

总结

本示例演示了使用C++代码实现读取CSV文件、计算列的标准差和均值,并写入结果的简单操作。您可以根据实际需求修改代码,以实现更复杂的数据处理功能。

C++ CSV数据处理:计算列的标准差和均值并写入结果

原文地址: https://www.cveoy.top/t/topic/niz6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录