【金融數據分析】計算滬深300指數行業權重分布并用餅圖展示

前言

前面的文章我們已經介紹了如何獲取滬深300成分股所述行業以及權重的數據,想要了解這部分內容的小伙伴可以閱讀上一篇文章

springboot+jdbcTemplate+sqlite編程示例——以滬深300成分股數據處理為例-CSDN博客

那么有了上文獲取的數據,我們實際上可以計算一下滬深300按照行業分布的權重占比數據,最后的成果如下所示

?是不是效果還挺酷的,下面就來介紹一下技術細節。

后端技術細節

首先來講一下后端的技術細節,其實后端需要做的就是從表中獲取按行業區分的權重數據,我們先來看一下數據表

數據表中包含了所述行業和權重占比,那么思路就很明確了,我們只需要查出所有的行業,然后按照行業統計權重之和就行了。

我們的實體類非常簡單,就是所屬行業和對應的權重

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CSI300DistVO {private String industry;private Double weight;}

接著就是使用JdbcTemplate將數據查出來

    public List<CSI300DistVO> queryDist() {// 首先查詢所有的行業String sql = "SELECT DISTINCT industry FROM "+ tableName;List<String> industrys = jdbcTemplate.queryForList(sql, String.class);// 查詢每個行業的權重和List<CSI300DistVO> csi300DistVOList = new ArrayList<>();for(int i=0; i<industrys.size(); i++) {sql = "SELECT SUM(weight) FROM " + tableName +" WHERE industry=?";Object[] params = new Object[] {industrys.get(i),};Double weight = jdbcTemplate.queryForObject(sql, params,Double.class);// 保留四位小數String tmp = String.format("%.4f", weight);weight = Double.parseDouble(tmp);CSI300DistVO entity = new CSI300DistVO(industrys.get(i), weight);csi300DistVOList.add(entity);log.info(entity.toString());}return csi300DistVOList;}

?然后通過get請求提供查詢服務

    @RequestMapping("/queryDist")@ResponseBodypublic String queryDist() {List<CSI300DistVO> csi300DistVOS = sqlIteCSI300Dao.queryDist();return JSON.toJSONString(csi300DistVOS);}

最后獲取的數據如下

[{"industry": "金融業","weight": 21.714
}, {"industry": "房地產業","weight": 1.342
}, {"industry": "制造業","weight": 55.217
}, {"industry": "批發和零售業","weight": 0.324
}, {"industry": "采礦業","weight": 4.333
}, {"industry": "電力、熱力、燃氣及水的生產和供應業","weight": 3.193
}, {"industry": "租賃和商務服務業","weight": 0.889
}, {"industry": "交通運輸、倉儲和郵政業","weight": 3.242
}, {"industry": "信息傳輸、軟件和信息技術服務業","weight": 4.308
}, {"industry": "農、林、牧、漁業","weight": 1.206
}, {"industry": "衛生和社會工作業","weight": 0.569
}, {"industry": "科學研究和技術服務業","weight": 1.346
}, {"industry": "文化、體育和娛樂業","weight": 0.112
}, {"industry": "建筑業","weight": 2.109
}, {"industry": "住宿和餐飲業","weight": 0.09
}]

后端的邏輯非常簡單,下面來介紹一下前端的技術細節。?

前端技術細節

前端我們采用的技術棧是vue+elemenet-plus+axios+echarts,思路大概就是都使用axios請求后端的數據,等到數據獲取到了然后再將echarts圖標繪制到頁面上。

這里面主要是echart餅圖的繪制,這里面我研究了好久,參數還挺多的,我會著重介紹一下。

我們之前說過,整個過程就是首先使用axios通過get請求獲取后端數據,然后再進行圖標的渲染,我們知道axios的請求是異步的,我們需要首先請求數據,等到數據請求成功后再進行圖表的繪制。

下面我將繪制餅狀圖的代碼都貼出來

    // 繪制餅狀圖create_pie() {var url = "http://localhost:9001/queryDist";axios.get(url).then((response) => {console.log(response);for (var i = 0; i < response.data.length; i++) {this.pie_data.push({value: response.data[i].weight,name: response.data[i].industry,});}console.log(this.pie_data);var myChart = this.echarts.init(this.$refs["myChart"]);var option = {title: {text: "滬深300行業權重分布", //標題},tooltip: {},legend: {y: 50,textStyle: {fontSize: 14,},},label: {show: true,},series: [{name: "分布", //數據的名字type: "pie", //表示柱狀圖radius: "70%", //圓的半徑center: ["50%", "60%"],label: {formatter: function (params) {console.log(params.name + " " + params.value + "%");return params.name + " " + params.value + "%";},textStyle: {fontSize: 14,fontWeight: "bolder",},color: "inherit",},data: this.pie_data,selectedMode: "single", //選中效果,使選中區域偏離圓心一小段距離,single或者multipleselectedOffset: 10, //偏離圓心的一小段距離},],};// 使用剛指定的配置項和數據顯示圖表。myChart.setOption(option);}).catch((error) => {console.log(error);});},

我們介紹一些比較重要的參數,繪制的時候比較重要的參數都在series中

series中對應的參數如下:?

  • name:名稱
  • type:圖標的類型,當設置成"pie"的時候表示餅狀圖
  • radues:表示餅狀圖半徑的大小
  • center:表示圓心在畫面中的位置,橫著的是x軸,豎著的是y軸,我這樣設置就會讓餅狀圖中屏幕中間偏下的位置,方便上方標簽的顯示
  • label:表示餅狀圖中標簽的文字顯示
    • formatter表示我們要顯示標簽的格式,我們可以自定義要顯示的內容
    • textStyle可以設置文字的大小和樣式
    • color可以設置文字的顏色,"inherit"表示顏色跟隨對應的扇形的顏色
  • data:我們要展示的數據
  • selectedMode:表示選中的效果
  • selectedOffset:扇形被選中的時候放大的幅度

我們目前只是用了這些屬性,當然echart還有非常多的屬性可以設置,感興趣的可以自行探索。

下面是這個頁面的完整代碼

<template><div><el-row class="container"><div class="left-grid"><el-card><el-table:data="table_data":show-header="true":max-height="615"stripe><el-table-columnprop="id"label="序號"width="65%"></el-table-column><el-table-column prop="code" label="股票代碼"></el-table-column><el-table-column prop="name" label="公司簡稱"></el-table-column><el-table-column prop="industry" label="所屬行業"></el-table-column><el-table-column prop="weight" label="權重占比"></el-table-column></el-table></el-card></div><div class="right-grid" ref="myChart"></div></el-row></div>
</template><script>
import axios from "axios";
import { getCurrentInstance } from "vue";
export default {data() {return {table_data: [],pie_data: [],echarts: getCurrentInstance().appContext.config.globalProperties.$echarts,};},mounted() {this.init();},methods: {init() {var url = "http://localhost:9001/queryAll";axios.get(url).then((response) => {this.table_data = response.data;console.log(response);}).catch((error) => {console.log(error);});this.create_pie();},// 繪制餅狀圖create_pie() {var url = "http://localhost:9001/queryDist";axios.get(url).then((response) => {console.log(response);for (var i = 0; i < response.data.length; i++) {this.pie_data.push({value: response.data[i].weight,name: response.data[i].industry,});}console.log(this.pie_data);var myChart = this.echarts.init(this.$refs["myChart"]);var option = {title: {text: "滬深300行業權重分布", //標題},tooltip: {},legend: {y: 50,textStyle: {fontSize: 14,},},label: {show: true,},series: [{name: "分布", //數據的名字type: "pie", //表示柱狀圖radius: "70%", //圓的半徑center: ["50%", "60%"],label: {formatter: function (params) {console.log(params.name + " " + params.value + "%");return params.name + " " + params.value + "%";},textStyle: {fontSize: 14,fontWeight: "bolder",},color: "inherit",},data: this.pie_data,selectedMode: "single", //選中效果,使選中區域偏離圓心一小段距離,single或者multipleselectedOffset: 10, //偏離圓心的一小段距離},],};// 使用剛指定的配置項和數據顯示圖表。myChart.setOption(option);}).catch((error) => {console.log(error);});},},
};
</script><style scoped>
.container {display: grid;grid-template-columns: 35% 65%;width: 100%;height: 80vh;
}
.left-grid {background-color: #f0f0f0;border-radius: 2%;padding: 10px;height: 95%;
}
.right-grid {background-color: #f9ecc3;border-radius: 2%;padding: 10px;height: 95%;
}
</style>

最后再放一張顯示的效果

數據分析

這部分我們進行一下簡單的數據分析。

從數據中可以看出來,目前滬深300指數中制造業占比最高,高達55.217%;金融業第二,占比21.714%;排名第三的是采礦業,占比4.333%;排名第四的是信息技術服務業,占比4.308%;排名第五的是物流行業,占比3.242%;排名第六的是電力等基礎設施行業,占比3.193%,剩下的一些行業占比就比較低了。

從這組數據中我們可以看出來,我們國家的經濟發展還是以制造業為主,金融業為輔的模式,至少滬深300指數構成來看是這樣的。

好了,本文就到這里了,有什么想說的歡迎留言和我交流。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【rabbitMQ】rabbitMQ控制臺模擬收發消息

目錄 1.新建隊列 2.交換機綁定隊列 3.查看消息是否到達隊列 總結&#xff1a; 1.新建隊列 2.交換機綁定隊列 點擊amq.fonout 3.查看消息是否到達隊列 總結&#xff1a; 生產者&#xff08;publisher&#xff09;發送消息&#xff0c;先到達交換機&#xff0c;再到隊列&…

微信小程序uni-app:常用Form表單組件使用示例

目錄 input 輸入框picker 選擇器 input 輸入框 https://developers.weixin.qq.com/miniprogram/dev/component/input.htmlhttps://uniapp.dcloud.net.cn/component/input.html <inputclass"input-class"type"text"v-model"value"placeholde…

Linux下文本三劍客:grep、awk、sed之對比

一、grep 主要用于搜索某些字符串&#xff1b;sed、awk 用于處理文本&#xff1a; grep基本是以行為單位處理文本的&#xff1b; 而awk可以做更細分的處理&#xff0c;通過指定分隔符將一行&#xff08;一條記錄&#xff09;劃分為多個字段&#xff0c;以字段為單位處理文本。…

python輸出菱形字符圖案 附實戰代碼

下面是一個Python程序&#xff0c;可以用來輸出菱形字符圖案。這個程序使用了兩個嵌套的for循環&#xff0c;以及字符串連接操作。 # 獲取用戶輸入 n int(input("請輸入菱形的邊長&#xff1a;"))# 生成上半部分菱形 for i in range(1, n 1, 2):print(" &quo…

SDK,但未在應用內的隱私政策/在AppGallery Connect上提交的隱私政策內容中進行明示,不符合華為應用市場審核標準。

&#xff08;暫時用不到的也建議收藏一下&#xff0c;因為文章持續更新中&#xff09; 最新更改時間&#xff1a;20023-12-10 第三方SDK合集列表 為了確保用戶個人信息的安全&#xff0c;我們對使用到的第三方提供的軟件開發包&#xff08;SDK&#xff09;進行了嚴格的安全檢…

期末速成數據庫極簡版【存儲過程】(5)

目錄 【7】系統存儲過程 【8】用戶存儲過程——帶輸出參數的存儲過程 創建存儲過程 存儲過程調用 【9】用戶存儲過程——不帶輸出參數的存儲過程 【7】系統存儲過程 系統存儲我們就不做過程講解用戶存儲過程會考察一道大題&#xff0c;所以我們把重點放在用戶存儲過程。…

vscode 編寫爬蟲爬取王者榮耀壁紙

網上關于爬蟲大部分教程和編輯器用的都不是vscode &#xff0c;此教程用到了vscode、Python、bs4、requests。 vscode配置Python安裝環境可以看看這個大佬的教程 03-vscode安裝和配置_嗶哩嗶哩_bilibili vscode配置爬蟲環境可以參考這個大佬的教程【用Vscode實現簡單的python…

U4_1 語法分析之自頂向下分析

文章目錄 一、定義1、任務2、對比3、方法4、自頂向下面臨問題 二、自頂向下分析1、概念2、特點3、二義性問題4、左遞歸問題1&#xff09;概念2&#xff09;消除3&#xff09;間接左遞歸 5、回溯問題1&#xff09;概念2&#xff09;消除3&#xff09;解決方法 6、總結 三、遞歸子…

Java 線程池中 submit() 和 execute() 方法有什么區別?

Java 線程池中 submit() 和 execute() 方法有什么區別&#xff1f; 在 Java 中&#xff0c;ExecutorService 接口是用于管理和執行線程的框架&#xff0c;它定義了兩個用于提交任務的方法&#xff1a;submit() 和 execute()。這兩種方法有一些區別&#xff1a; 返回值&#xf…

【Proteus仿真】【51單片機】光照強度檢測系統

文章目錄 一、功能簡介二、軟件設計三、實驗現象聯系作者 一、功能簡介 本項目使用Proteus8仿真51單片機控制器&#xff0c;使共陰數碼管&#xff0c;PCF8591 ADC模塊、光敏傳感器等。 主要功能&#xff1a; 系統運行后&#xff0c;數碼管顯示光傳感器采集光照強度值&#xff…

Gitzip插件【Github免翻下載】

今天給大家推薦一個github下載的插件&#xff0c;平常大家下載應該無外乎就是以下兩種&#xff1a; Download zip利用git clone 但是這兩種各有各的弊端&#xff0c;前者一般需要科學上網才可以&#xff0c;后者下載不穩定經常中途斷掉。 今天給推薦一個款瀏覽器插件-Gitzip.大…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系統介紹二、功能展示四、其他系統實現五、獲取源碼 一、系統介紹 項目類型&#xff1a;Java EE項目 項目名稱&#xff1a;基于SSM的美衣商城 項目架構&#xff1a;B/S架構 開發語言&#xff1a;Java語言 前端技術&#xff1a;Layui等 后端技術…

Flask和Vue框架實現WebSocket消息通信

1 安裝環境 1.1 安裝Flask環境 主要的安裝包 Flask、Flask-SocketIO&#xff0c;注意Python版本要求3.6 # Flask-SocketIO參考地址 https://flask-socketio.readthedocs.io/en/latest/ https://github.com/miguelgrinberg/flask-socketio更新基礎環境 # 更新pip python -m …

Unity發布WebGL測試界面處理方式參考

如果使用Unity發布WebGL經常會和網頁進行交互&#xff0c;為了能夠做到界面統一&#xff0c;往往所有UI都是在頁面上開發的&#xff0c;Unity本身不做任何UI或者只做三維UI&#xff0c;但是在開發過程中&#xff0c;為了測試接口&#xff0c;難免要在Unity中做一些UI來方便測試…

以太坊虛擬機EVM介紹,智能合約詳解

以太坊為例&#xff1a;什么是智能合約&#xff1f;智能合約怎么部署、調用、執行&#xff1f;智能合約的原理&#xff1f;智能合約存在哪兒&#xff1f;如何區分調用的是智能合約&#xff1f;世界狀態數據庫、EVM、智能合約它們之間的關系&#xff1f; 什么是智能合約 指的是…

【Hive】啟動beeline連接hive報錯解決

1、解決報錯2、在datagrip上連接hive 1、解決報錯 剛開始一直報錯&#xff1a;啟動不起來 hive-site.xml需要配置hiveserver2相關的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2連接的host --> <property><name>hive.server2.thrift.bin…

機器人與3D視覺 Robotics Toolbox Python 二 空間位姿描述

空間位姿描述 二維空間位姿描述 二維空間位姿表示方法 from spatialmath.base import * from spatialmath import * T1 SE2(x3,y3,theta30,unit"deg") trplot2(T1.A,frame"T1",dims[0, 5, 0, 5]) T2transl2(3, 4) trplot2(T2,frame"T2",dims…

如何理解 RPC 遠程服務調用?

本文主要講解 RPC 遠程服務調用相關的知識。 RPC 遠程服務調用是分布式服務架構的基礎&#xff0c;無論微服務設計上層如何發展&#xff0c;討論服務治理都繞不開遠程服務調用&#xff0c;那么如何理解 RPC、有哪些常見的 RPC 框架、實現一款 RPC 框架需要哪些技術呢&#xff…

解決electron修改主進程后需要重啟才生效

nodemon 是一種工具&#xff0c;可在檢測到目錄中的文件更改時通過自動重新啟動節點應用程序來幫助開發基于 node.js 的應用程序 nodemon 特性 自動重新啟動應用程序。檢測要監視的默認文件擴展名。默認支持 node&#xff0c;但易于運行任何可執行文件&#xff0c;如 python、…

自動駕駛學習筆記(十七)——視覺感知

#Apollo開發者# 學習課程的傳送門如下&#xff0c;當您也準備學習自動駕駛時&#xff0c;可以和我一同前往&#xff1a; 《自動駕駛新人之旅》免費課程—> 傳送門 《Apollo 社區開發者圓桌會》免費報名—>傳送門 文章目錄 前言 分類 目標檢測 語義分割 實例分割 …