酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

现提供某股票在2014-2020的交易信息,数据文件的各个列的说明如下:(数据见附件stocks.csv) trade_date 交易时间 open 开盘价格 high 当日最高价 low 当日最低价 close 收盘价 amount 交易量 统计该股票各个月的波动范围(本月的收盘最低价-本月的收盘最高价),波动率(波动范围/本月收盘价平均价格,保留小数点后2位数字),以及这个月的总成交量输出结果如下: 2019.6 69.64-72.07 3.55% 127897.5 本题可在本地hadoop虚拟环境中验证执行,需提交关键代码的源码截图和执行结果截图,并附带工程源码(提交压缩包) 用java写出代码并给出pom.xml文件

要解决这个问题,我们可以编写一个Java程序来读取CSV文件,处理数据,并输出结果。由于你提到可以在Hadoop环境中执行,我们可以使用Hadoop的MapReduce框架来处理大规模数据,但考虑到问题的规模和数据量,使用简单的Java代码读取CSV文件并处理数据可能更为直接和简单。 以下是一个简单的Java程序,使用OpenCSV库来读取CSV文件,并计算所需的统计信息。你还需要一个`pom.xml`文件来管理项目的依赖项。 Java代码 (StockStatistics.java) ```java import com.opencsv.CSVReader; import com.opencsv.exceptions.CsvValidationException; import java.io.FileReader; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class StockStatistics { public static void main(String[] args) { String filePath = "stocks.csv"; // 请确保CSV文件与此Java文件在同一目录下,或提供完整路径 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Map<String, StockData> monthlyData = new HashMap<>(); try (CSVReader reader = new CSVReader(new FileReader(filePath))) { String[] line; while ((line = reader.readNext()) != null) { String tradeDate = line[0]; double open = Double.parseDouble(line[1]); double high = Double.parseDouble(line[2]); double low = Double.parseDouble(line[3]); double close = Double.parseDouble(line[4]); long amount = Long.parseLong(line[5]); try { Date date = sdf.parse(tradeDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); String month = calendar.get(Calendar.YEAR) + "." + (calendar.get(Calendar.MONTH) + 1); // 月份从0开始,所以需要+1 StockData data = monthlyData.getOrDefault(month, new StockData()); data.addClosePrice(close); data.updateHighLow(high, low); data.addVolume(amount); monthlyData.put(month, data); } catch (ParseException e) { e.printStackTrace(); } } } catch (IOException | CsvValidationException e) { e.printStackTrace(); } for (Map.Entry<String, StockData> entry : monthlyData.entrySet()) { String month = entry.getKey(); StockData data = entry.getValue(); double high = data.getHigh(); double low = data.getLow(); double avgClose = data.getAverageClose(); long totalVolume = data.getTotalVolume(); double fluctuationRange = high - low; double fluctuationRate = (fluctuationRange / avgClose) * 100; System.out.printf("%.1f %.2f-%.2f %.2f%% %d%n", Double.parseDouble(month.split("\\.")[0]) + (Double.parseDouble(month.split("\\.")[1]) / 12), low, high, Math.round(fluctuationRate * 100.0) / 100.0, totalVolume); } } static class StockData { private double high; private double low; private long totalVolume; private double sumClose; private int closeCount; public StockData() { this.high = Double.NEGATIVE_INFINITY; this.low = Double.POSITIVE_INFINITY; this.totalVolume = 0; this.sumClose = 0; this.closeCount = 0; } public void addClosePrice(double close) { this.sumClose += close; this.closeCount++; } public void updateHighLow(double high, double low) { this.high = Math.max(this.high, high); this.low = Math.min(this.low, low); } public void addVolume(long amount) { this.totalVolume += amount; } public double getHigh() { return high; } public double getLow() { return low; } public long getTotalVolume() { return totalVolume; } public double getAverageClose() { return this.closeCount > 0 ? this.sumClose / this.closeCount : 0; } } } ``` pom.xml 文件 如果你使用Maven来管理项目依赖项,你可以创建一个`pom.xml`文件,并添加OpenCSV库的依赖项: ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>stock-statistics</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.5.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project> ``` 执行说明 1. 将上述Java代码保存为`StockStatistics.java`文件。 2. 将`pom.xml`文件保存在与`StockStatistics.java`相同的目录中。 3. 使用Maven命令`mvn compile`编译代码。 4. 使用`java -cp target/classes com.example.stock-statistics.StockStatistics`运行程序(假设你的Maven构建输出目录是`target/classes`)。 确保`stocks.csv`文件位于正确的路径,或者修改Java代码中的文件路径以匹配你的CSV文件位置。 注意:由于你提到在Hadoop环境中验证,上述代码是基于本地文件系统的。如果你需要在Hadoop环境中运行,你可能需要将数据上传到HDFS,并使用Hadoop的MapReduce或其他处理框架来编写和运行作业。对于小规模数据集,上述简单的Java程序应该足够了。 [2024-11-13 12:24:18 | AI写代码神器 | 1603点数解答]

相关提问