以下是使用 Java 实现解析 CSV 文件并按分钟窗口聚合计算字段的代码示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class CSVParser {

    public static void main(String[] args) {
        String csvFile = '600570.csv';
        String line;
        String cvsSplitBy = ',';
        SimpleDateFormat dateFormat = new SimpleDateFormat('HH:mm');
        Map<String, MinuteData> minuteDataMap = new HashMap<>();

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            while ((line = br.readLine()) != null) {
                String[] data = line.split(cvsSplitBy);

                // Extract relevant fields from the CSV line
                Date timestamp = dateFormat.parse(data[0]);
                double last_px = Double.parseDouble(data[1]);
                int business_count = Integer.parseInt(data[2]);
                double business_amount = Double.parseDouble(data[3]);
                double business_balance = Double.parseDouble(data[4]);

                // Check if the timestamp is within the trading hours
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(timestamp);
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int minute = calendar.get(Calendar.MINUTE);
                if ((hour == 9 && minute >= 30) || (hour == 10) || (hour == 11 && minute <= 30)
                        || (hour == 13) || (hour == 14) || (hour == 15 && minute == 0)) {

                    // Get the minute key for the current timestamp
                    String minuteKey = String.format('%02d:%02d', hour, minute);

                    // Check if the minute key already exists in the map
                    if (minuteDataMap.containsKey(minuteKey)) {
                        MinuteData minuteData = minuteDataMap.get(minuteKey);
                        minuteData.update(last_px, business_count, business_amount, business_balance);
                    } else {
                        MinuteData minuteData = new MinuteData(last_px);
                        minuteData.update(last_px, business_count, business_amount, business_balance);
                        minuteDataMap.put(minuteKey, minuteData);
                    }
                }
            }

            // Print the aggregated minute data
            for (Map.Entry<String, MinuteData> entry : minuteDataMap.entrySet()) {
                String minuteKey = entry.getKey();
                MinuteData minuteData = entry.getValue();
                System.out.println('Minute: ' + minuteKey);
                System.out.println('Open_px: ' + minuteData.getOpen_px());
                System.out.println('High_px: ' + minuteData.getHigh_px());
                System.out.println('Low_px: ' + minuteData.getLow_px());
                System.out.println('Close_px: ' + minuteData.getClose_px());
                System.out.println('Business_count: ' + minuteData.getBusiness_count());
                System.out.println('Business_amount: ' + minuteData.getBusiness_amount());
                System.out.println('Business_balance: ' + minuteData.getBusiness_balance());
                System.out.println('---------------------------------------------');
            }

        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }
    }

    static class MinuteData {
        private double open_px;
        private double high_px;
        private double low_px;
        private double close_px;
        private int business_count;
        private double business_amount;
        private double business_balance;

        public MinuteData(double open_px) {
            this.open_px = open_px;
            this.high_px = open_px;
            this.low_px = open_px;
        }

        public double getOpen_px() {
            return open_px;
        }

        public double getHigh_px() {
            return high_px;
        }

        public double getLow_px() {
            return low_px;
        }

        public double getClose_px() {
            return close_px;
        }

        public int getBusiness_count() {
            return business_count;
        }

        public double getBusiness_amount() {
            return business_amount;
        }

        public double getBusiness_balance() {
            return business_balance;
        }

        public void update(double last_px, int business_count, double business_amount, double business_balance) {
            this.close_px = last_px;
            this.high_px = Math.max(this.high_px, last_px);
            this.low_px = Math.min(this.low_px, last_px);
            this.business_count += business_count;
            this.business_amount += business_amount;
            this.business_balance += business_balance;
        }
    }
}

请确保将上述代码中的'600570.csv'替换为你实际的CSV文件路径。代码会解析CSV文件并根据分钟窗口聚合计算并打印相关字段(open_px、high_px、low_px、close_px、business_count、business_amount和business_balance)的值。

Java CSV 解析和分钟窗口聚合计算

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

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