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

server/2025/3/4 0:10:53/

广东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/server/172198.html

相关文章

大白话解释深度学习中多尺度特征融合及其意义

想象一下&#xff0c;你正在看一幅城市街道的照片。在这张照片中&#xff0c;你可能会看到&#xff1a; 远处的小汽车&#xff0c;它们在图像中看起来很小。近处的大巴士&#xff0c;它们在图像中看起来很大。还有一些行人&#xff0c;他们可能在不同的距离上&#xff0c;大小…

HTTP四次挥手是什么?

四次挥手&#xff0c;这是TCP协议用来关闭连接的过程。四次挥手是确保两个主机之间能够安全、可靠地关闭连接的重要机制。我会用简单易懂的方式来讲解&#xff0c;帮助你理解它的原理和过程。 1. 什么是四次挥手&#xff1f; 定义 四次挥手是TCP协议用来关闭连接的过程。它通…

fortify安全扫描Access Control: Database问题解决

概述 Access Control: Database说白了就是权限控制。在访问数据库(sql和nosql)需要加入当前用户的权限控制。不然会被fortify扫描出来&#xff0c;认为客户端可能不挟持和假冒&#xff0c;从而导致数据被泄露。 但是这个并不是任何时候都需要的&#xff0c;有的接口本来…

centos 7 停更后如何升级kernel版本 —— 筑梦

centos 6/7 内核升级(bios/uefi两种引导方式) —— 筑梦之路_centos7 更新efi-CSDN博客 此处主要说明kernel rpm离线包可以从哪里下载&#xff0c;安装升级参考之前的文章 # 历史kernel版本rpm包http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/…

算法:判断链表是否有环

/*** brief 判断链表是否有环* * 该函数使用快慢指针法来判断链表中是否存在环。* 快指针每次移动两步&#xff0c;慢指针每次移动一步。* 如果链表中存在环&#xff0c;那么快指针最终会追上慢指针&#xff1b;* 如果链表中不存在环&#xff0c;快指针会先到达链表末尾。* * p…

技术问题汇总:前端怎么往后端传一个日期?

场景 现在有一个笔记软件&#xff0c;需要根据用户设置的两个日期&#xff0c;删选出来创建日期位于这两个日期中间的笔记。 思路 把日期放到一个对象里边传到后端 参考代码 前端代码&#xff0c;提交一个含日期的对象。 <template><div class"demo-date-p…

什么是RPC,和HTTP有什么区别?

RPC是Remote ProcedureCall的缩写&#xff0c;译为远程过程调用。要想实现RPC通常需要包含传输协议和席列化协议的实现。 而我们熟知的HTTP&#xff0c;他的中文名叫超文本传输协议&#xff0c;所以他就是一种传输协议。所以&#xff0c;我们可以认为RPC和HTTP并不是同一个维度…

机器学习三大基石:监督学习、无监督学习与强化学习实用指南

引言 在人工智能的浪潮中,机器学习无疑是最核心的技术之一。它赋予计算机从数据中学习的能力,从而在各个领域展现出强大的应用潜力。从智能助手到自动驾驶,从精准医疗到金融风控,机器学习的身影无处不在,深刻地改变着我们的生活和工作方式。 机器学习方法繁多,但从学习…