广东GZ033-任务E:数据可视化(15 分)-用柱状图展示销售金额最高的6 个月

ops/2025/2/28 16:01:41/

广东GZ033-任务E:数据可视化(15 分)

用柱状图展示销售金额最高的6 个月


编写Vue 工程代码, 读取虚拟机bigdata-spark 的/opt/data 目录下的 supermarket_visualization.csv,用柱状图展示2024 年销售金额最高的6 个月, 同时将用于图表展示的数据结构在vscode 终端中进行打印输出,将图表可视化 结果和vscode 终端打印结果分别截图并粘贴至物理机桌面【Release\任务E 提 交结果.docx】中对应的任务序号下。

展示结果:

 解题思路:

查看supermarket_visualization.csv数据结构

查看表头:

顾客编号,大类编码,大类名称,中类编码,中类名称,小类编码,小类名称,销售日期,商品编码,规格型号,商品类型,单位,销售数量,销售金额,商品单价,是否促销

筛选出要用的数据 

        // 1. 数据获取和处理// 从public目录读取CSV文件const response = await fetch('/supermarket_visualization.csv')const csvData = await response.text()// 解析CSV数据,跳过表头const rows = csvData.trim().split('\n')// 将CSV数据转换为结构化对象数组const data = rows.slice(1).map(row => {const columns = row.split(',')const date = columns[7] // 获取销售日期const [year, month] = date.split('/').map(Number) // 解析年月return {year,                   // 年份month,                  // 月份monthKey: `${year}/${month}`,  // 年月组合键amount: parseFloat(columns[13]), // 销售金额}})

 筛选出2024年月份汇总销售额

        // 2. 数据筛选和统计// 筛选2024年数据并按月份汇总销售金额const monthlyData = {}data.filter(item => item.year === 2024).forEach(item => {if (!monthlyData[item.monthKey]) {monthlyData[item.monthKey] = 0}monthlyData[item.monthKey] += item.amount})

将数据进行排序,选择销售额最高的6个月份 

        // 3. 数据排序和格式化// 转换为数组并按销售金额降序排序,取前6个月const sortedData = Object.entries(monthlyData).map(([monthKey, amount]) => ({month: monthKey.split('/')[1] + '月', // 格式化月份显示amount: Number(amount.toFixed(2))      // 保留2位小数})).sort((a, b) => b.amount - a.amount).slice(0, 6)

然后数据展现

全部代码:

<template><!-- 图表容器 --><div id="salesChart" ref="chartRef" style="width: 800px; height: 400px;"></div>
</template><script>
// 导入ECharts库和Vue组合式API
import * as echarts from '@/assets/echarts.min.js'
import { onMounted, ref } from 'vue'export default {name: 'SalesBarChart',setup() {// 创建图表DOM引用const chartRef = ref(null)// 初始化图表的主函数const initChart = async () => {try {// 1. 数据获取和处理// 从public目录读取CSV文件const response = await fetch('/supermarket_visualization.csv')const csvData = await response.text()// 解析CSV数据,跳过表头const rows = csvData.trim().split('\n')// 将CSV数据转换为结构化对象数组const data = rows.slice(1).map(row => {const columns = row.split(',')const date = columns[7] // 获取销售日期const [year, month] = date.split('/').map(Number) // 解析年月return {year,                   // 年份month,                  // 月份monthKey: `${year}/${month}`,  // 年月组合键amount: parseFloat(columns[13]), // 销售金额// category: columns[2]    // 商品类别}})// 2. 数据筛选和统计// 筛选2024年数据并按月份汇总销售金额const monthlyData = {}data.filter(item => item.year === 2024).forEach(item => {if (!monthlyData[item.monthKey]) {monthlyData[item.monthKey] = 0}monthlyData[item.monthKey] += item.amount})// 3. 数据排序和格式化// 转换为数组并按销售金额降序排序,取前6个月const sortedData = Object.entries(monthlyData).map(([monthKey, amount]) => ({month: monthKey.split('/')[1] + '月', // 格式化月份显示amount: Number(amount.toFixed(2))      // 保留2位小数})).sort((a, b) => b.amount - a.amount).slice(0, 6)// 准备图表所需的数据数组const months = sortedData.map(item => item.month)const amounts = sortedData.map(item => item.amount)console.log('2024年销售金额最高的6个月:', months, amounts)// 4. 图表初始化和渲染// 等待DOM更新await new Promise(resolve => setTimeout(resolve, 0))// 获取图表容器const chartDom = chartRef.valueif (!chartDom) {throw new Error('图表容器不存在')}// 清理已存在的图表实例echarts.dispose(chartDom)// 创建新的图表实例const myChart = echarts.init(chartDom)// 5. 图表配置const option = {// 图表布局grid: {top: 50,right: 30,bottom: 50,left: 60},// 标题title: {text: '2024年销售金额最高的6个月',left: 'center'},// 提示框tooltip: {trigger: 'axis',formatter: '{b}<br/>销售金额: ¥{c}'},// X轴配置xAxis: {type: 'category',data: months,axisLabel: {interval: 0  // 显示所有标签}},// Y轴配置yAxis: {type: 'value',name: '销售金额(元)',axisLabel: {formatter: '¥{value}'}},// 数据系列series: [{name: '销售金额',type: 'bar',data: amounts,label: {show: true,position: 'top',formatter: '¥{c}'}}]}// 应用图表配置await myChart.setOption(option)// 6. 响应式处理// 添加窗口大小变化的自适应window.addEventListener('resize', () => {myChart.resize()})} catch (error) {console.error('图表渲染失败:', error)}}// 组件挂载时初始化图表onMounted(() => {initChart()})return {chartRef}}
}
</script><style scoped>
/* 图表容器样式 */
#salesChart {margin: 20px auto;border: 1px solid #eee;
}
</style> 


http://www.ppmy.cn/ops/162007.html

相关文章

云原生周刊:云原生和 AI

开源项目推荐 FlashMLA DeepSeek 于北京时间 2025 年 2 月 24 日上午 9 点正式开源了 FlashMLA 项目。FlashMLA 是专为 NVIDIA Hopper 架构 GPU&#xff08;如 H100、H800&#xff09;优化的高效多头潜在注意力&#xff08;MLA&#xff09;解码内核&#xff0c;旨在提升大模型…

给虚拟机配置IP

虚拟机IP这里一共有三个地方要设置&#xff0c;具体说明如下&#xff1a; &#xff08;1&#xff09;配置vm虚拟机网段 如果不进行设置&#xff0c;每次启动机器时都可能是随机的IP&#xff0c;不方便我们后续操作。具体操作是&#xff1a;点击编辑→虚拟网络编辑器 选择VMne…

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 &#xff1a; Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如&#xff0c;源ip地址作为过滤选项&#xff0c;右击源ip->prepare as filter-> 选中 点击选中完&#xff0c;显示过滤器&#…

https和http有什么区别

HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;都用于在客户端和服务器之间传输数据&#xff0c;但它们有以下几个主要区别&#xff1a; 1. 加密方式 HTTP: 数据在传输过程中是明文的&#xff0c;任何人都可以在网络中拦截和…

Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决

前言 在将 Spring Boot 项目升级至 3.3.4 版本后&#xff0c;遇到 Logback 配置的兼容性问题。本文将详细描述该问题的错误信息、原因分析&#xff0c;并提供调整日志回滚策略的解决方案。 错误描述 这是SpringBoot 3.3.3版本之前的回滚策略的配置 <!-- 日志记录器的滚动…

初识JavaFX-IDEA中创建第一个JavaFX项目

前言 按照本文的步骤开发&#xff0c;可以实现完整的项目的创建与启动。 同时&#xff0c;针对 运行时提示 缺少 Java FX 组件的 异常 也不会出现。 环境介绍 jdk 17javaFX 17 创建步骤 下载JavaFx 的sdk 下载地址 &#xff1a; https://gluonhq.com/products/javafx/找到对…

SQL注入(一)—— sql手动注入实操

SQL SQL注入 sql 注入的核心 SQL 手注的一般流程 判断注入点 —— 第一步 判断字段数 —— 第二步 判断回显点 —— 第三步 查询相关内容 —— 第四步 判断库名 判断表名 判断列名 查询具体信息 总结 SQL注入 SQL注入攻击是目前web应用网络攻击中最常见的手段之一&#xff0c;曾…

BS架构网络安全 网络安全架构分析

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 文章目录 Web架构安全分析 一、web工作机制 1. 简述用户访问一个网站的完整路径2. web系统结构 二、url 1. 概述2. 完整格式3. url编码 三、HTTP 1. reque…