【案例】基于Python的生源數據可視化分析:從Excel處理到動態地圖展示

文章目錄

  • 需求分析
  • 技術要點
  • 程序流程
  • 一些細節
    • 核心代碼
    • 表格的一些操作
  • 心得體會
  • 代碼匯總

需求分析

請設計一個程序,要求能夠統計分析分散在不同表格中的數萬條信息,以信息中的身份證號碼生源地代碼字段為目標字段,統計每一年全國各省份及本省各市州的人數,還需要統計全國各個省份總的人數信息,此外,將每一年本省各市州的人數情況繪制動態時間線地圖,實現數據交互。

技術要點

  • Excel 表格的讀取、寫入、單元格框線設置、統計圖繪制、增加表單。(openpyxl 模塊)
  • 動態地圖的繪制。(pyecharts 模塊)

程序流程

循環遍歷每一年
讀取表格
統計總人數
遍歷表頭,判斷目標字段所在列
遍歷目標列,統計不同省份/市州人數
在結果表格中新增加sheet,并寫入圖表
將本年度數據添加到時間線地圖數據中備用

一些細節

核心代碼

整個項目代碼匯總后雖然有四百余行代碼,但是核心代碼只有十幾行。 該代碼實現了表格數據的遍歷,之所以使用try-except結構,是因為有些數據并不符合字典所規定的鍵值,故會產生 KeyError 異常。

    # 遍歷身份證號碼for i in range(sheet.min_row+1, sheet.max_row + 1):id_card_value = str(sheet.cell(i, sfzh_index).value)id_card_value = id_card_value.replace(".", "")try:PROVINCE_COUNT_dict[id_card_value[:2]] += 1TOTAL_PROVINCE_COUNT_dict[id_card_value[:2]] += 1if id_card_value[:2] == "62":GANSU_CITY_COUNT_dict[id_card_value[:4]] += 1TOTAL_GANSU_CITY_COUNT_dict[id_card_value[:4]] += 1except KeyError:print("【KeyError】", id_card_value)

表格的一些操作

# 加載工作簿
workbook = load_workbook(filename=year+'.xlsx')
# 選擇工作表
sheet = workbook.active
# 表格行數
sheet.max_row
# 新增表單并設置單元格寬度
ws = wb.create_sheet("string")
ws.column_dimensions['A'].width=20
# 定義邊框框線
# 定義邊框樣式
border_style = Side(border_style="thin", color="FF000000")
border = Border(left=border_style, right=border_style, top=border_style, bottom=border_style)
cell_range = ws["A1:C63"] # 選擇單元格范圍并應用邊框
for row in cell_range:for cell in row:cell.border = border
# 插入柱狀圖
bar1 = BarChart()
bar1.height = 15
bar1.width = 30
bar1.type = "col"
# bar1.style = 10
bar1.title = "全國各省份數據"
bar1.y_axis.title = "人數"
bar1.x_axis.title = "省份"
labels = Reference(ws, min_col=1, min_row=6, max_row=39)
data = Reference(ws, min_col=2, min_row=5, max_row=39)
bar1.add_data(data, titles_from_data=True)
bar1.set_categories(labels)
ws.add_chart(bar1, "F2")
# 保存表格
wb.save("output.xlsx")

心得體會

  1. 在預處數據時,統一的文件名稱、文件格式及表格格式會給代碼編寫帶來方便。例如,workbook = load_workbook(filename=year+'.xlsx'),可以在循環中直接使用年份名稱的方式循環讀取文件名,實現一個變量既指代了文件名,又表達了年份信息的目的。
  2. 嘗試使用多個字典進行連續索引,保證每個字典僅有一個值。例如,PROVINCE = {"11": "北京市"}TOTAL_PROVINCE_COUNT_dict = {"11": 0},在最終需要呈現給用戶 北京市:0 的信息時,通過字典的連續索引實現,相比較使用多個值的方式,程序的耦合度更低。

代碼匯總

# encoding: utf-8
from openpyxl import load_workbook, Workbook
from openpyxl.styles import Border, Side
from openpyxl.chart import BarChart, LineChart, PieChart, Reference, ProjectedPieChart
from openpyxl.chart.series import DataPointfrom pyecharts.charts import Map, Geo, Timeline
from pyecharts import options as opts
from pyecharts.globals import ThemeTypeYEAR_RANGE = [  "91", "92", "93", "94", "95","96", "97", "98", "99", "00","01", "02", "03", "04", "05","06", "07", "08", "09", "10","11", "12", "13", "14", "15","16", "17", "18", "19", "20","21", "22", "23", "24", "25"]PROVINCE = {"11": "北京市",  "12": "天津市",  "13": "河北省",  "14": "山西省",  "15": "內蒙古自治區",  "21": "遼寧省",  "22": "吉林省",  "23": "黑龍江省",  "31": "上海市",  "32": "江蘇省",  "33": "浙江省",  "34": "安徽省",  "35": "福建省",  "36": "江西省",  "37": "山東省",  "41": "河南省",  "42": "湖北省",  "43": "湖南省",  "44": "廣東省",  "45": "廣西壯族自治區",  "46": "海南省",  "50": "重慶市",  "51": "四川省",  "52": "貴州省",  "53": "云南省",  "54": "西藏自治區",  "61": "陜西省",  "62": "甘肅省",  "63": "青海省",  "64": "寧夏回族自治區",  "65": "新疆維吾爾自治區",  "71": "臺灣省",  "81": "香港特別行政區",  "82": "澳門特別行政區"
}GANSU_CITY = {'6201': '蘭州市',  '6202': '嘉峪關市',  '6203': '金昌市',  '6204': '白銀市',  '6205': '天水市',  '6206': '武威市',  '6207': '張掖市',  '6208': '平涼市',  '6209': '酒泉市',  '6210': '慶陽市',  '6211': '定西市',  '6212': '隴南市',  '6221': '酒泉市',  '6222': '張掖市',  '6223': '武威市',  '6224': '定西市',  '6226': '隴南市',  '6227': '平涼市',  '6228': '慶陽市',  '6229': '臨夏回族自治州',  '6230': '甘南藏族自治州'
}TOTAL_PROVINCE_COUNT_dict = {"11": 0,  "12": 0,  "13": 0,  "14": 0,  "15": 0,  "21": 0,  "22": 0,  "23": 0,  "31": 0,  "32": 0,  "33": 0,  "34": 0,  "35": 0,  "36": 0,  "37": 0,  "41": 0,  "42": 0,  "43": 0,  "44": 0,  "45": 0,  "46": 0,  "50": 0,  "51": 0,  "52": 0,  "53": 0,  "54": 0,  "61": 0,  "62": 0,  "63": 0,  "64": 0,  "65": 0,  "71": 0,  "81": 0,  "82": 0}TOTAL_GANSU_CITY_COUNT_dict = {'6201': 0,  '6202': 0,  '6203': 0,  '6204': 0,  '6205': 0,  '6206': 0,  '6207': 0,  '6208': 0,  '6209': 0,  '6210': 0,  '6211': 0,  '6212': 0,  '6221': 0,  '6222': 0,  '6223': 0,  '6224': 0,  '6226': 0,  '6227': 0,  '6228': 0,  '6229': 0,  '6230': 0}# 保存畢業生總數
count_stdudent_1 = 0
count_stdudent_1_list = []
# 明晰生源地的畢業生總數
count_stdudent_2 = 0
# 繪制MAP
t = Timeline(init_opts=opts.InitOpts(width="2000px", height="1000px"))# 保存輸出結果
wb = Workbook()# 將每年數據視為sheet,獨立統計
for year in YEAR_RANGE:print()print("【年份】:", year)print("===")# 加載工作簿workbook = load_workbook(filename=year+'.xlsx')# 選擇工作表sheet = workbook.activeprint("畢業生總數:{}\n".format(sheet.max_row-1))count_stdudent_1 += sheet.max_row-1count_stdudent_1_list.append(sheet.max_row-1)# 獲取最小和最大行數# print(year, sheet.min_column, sheet.max_column, sheet.min_row, sheet.max_row)# 跳過如下沒有身份證號碼的年份if year in ["91", "92", "93", "94", "95", "96", "97", "98", "99", "00", "01"]:continuecount_stdudent_2 += sheet.max_row-1header_list = []sfzh_index = -1# 遍歷表頭for j in range(sheet.min_column, sheet.max_column + 1):cell_value = sheet.cell(sheet.min_row, j).valueheader_list.append(cell_value)if cell_value == "sfzh" or cell_value == "Syszddm":sfzh_index = j# print("年份:{}\t, 表頭長度:{}\t, 表頭:{}".format(year, len(header_list), header_list))PROVINCE_COUNT_dict = {"11": 0,  "12": 0,  "13": 0,  "14": 0,  "15": 0,  "21": 0,  "22": 0,  "23": 0,  "31": 0,  "32": 0,  "33": 0,  "34": 0,  "35": 0,  "36": 0,  "37": 0,  "41": 0,  "42": 0,  "43": 0,  "44": 0,  "45": 0,  "46": 0,  "50": 0,  "51": 0,  "52": 0,  "53": 0,  "54": 0,  "61": 0,  "62": 0,  "63": 0,  "64": 0,  "65": 0,  "71": 0,  "81": 0,  "82": 0}GANSU_CITY_COUNT_dict = {'6201': 0,  '6202': 0,  '6203': 0,  '6204': 0,  '6205': 0,  '6206': 0,  '6207': 0,  '6208': 0,  '6209': 0,  '6210': 0,  '6211': 0,  '6212': 0,  '6221': 0,  '6222': 0,  '6223': 0,  '6224': 0,  '6226': 0,  '6227': 0,  '6228': 0,  '6229': 0,  '6230': 0}# 遍歷身份證號碼for i in range(sheet.min_row+1, sheet.max_row + 1):id_card_value = str(sheet.cell(i, sfzh_index).value)id_card_value = id_card_value.replace(".", "")try:PROVINCE_COUNT_dict[id_card_value[:2]] += 1TOTAL_PROVINCE_COUNT_dict[id_card_value[:2]] += 1if id_card_value[:2] == "62":GANSU_CITY_COUNT_dict[id_card_value[:4]] += 1TOTAL_GANSU_CITY_COUNT_dict[id_card_value[:4]] += 1except KeyError:print("【KeyError】", id_card_value)ws = wb.create_sheet(year)ws.column_dimensions['A'].width=20ws.column_dimensions['B'].width=14ws.append(list(("年份:", year)))ws.append(list(("畢業生總數:", sheet.max_row-1)))ws.append(list(()))print("\n全國各省份數據:")ws.append(list(("全國各省份數據:", "")))ws.append(list(("省份名稱", "生源地人數", "人數占比")))print("---")for k, v in PROVINCE_COUNT_dict.items():print("{}\t{}\t{:.2f}".format(PROVINCE[k], v, v/(sheet.max_row-1)))ws.append(list((PROVINCE[k], v, v/(sheet.max_row-1))))ws.append(list(()))print("\n甘肅省內數據:")ws.append(list(("甘肅省內數據:", "")))ws.append(list(("市州名稱", "生源地人數", "人數占比")))print("---")MAP_GANSU_PROVINCE_COUNT_dict = {}for k, v in GANSU_CITY_COUNT_dict.items():print("{}\t{}\t{:.2f}".format(GANSU_CITY[k], v, v/PROVINCE_COUNT_dict["62"]))ws.append(list((GANSU_CITY[k], v, v/PROVINCE_COUNT_dict["62"])))MAP_GANSU_PROVINCE_COUNT_dict[GANSU_CITY[k]] = vmap0 = (Map().add("年份", list(MAP_GANSU_PROVINCE_COUNT_dict.items()), "甘肅").set_global_opts(title_opts=opts.TitleOpts(title="甘肅各市州生源地人數"),visualmap_opts=opts.VisualMapOpts(max_=400, min_=0)))t.add(map0, "{} 年".format(year))# 定義邊框樣式border_style = Side(border_style="thin", color="FF000000")border = Border(left=border_style, right=border_style, top=border_style, bottom=border_style)# 選擇單元格范圍并應用邊框cell_range = ws["A1:C63"]for row in cell_range:for cell in row:cell.border = borderbar1 = BarChart()bar1.height = 15bar1.width = 30bar1.type = "col"# bar1.style = 10bar1.title = "全國各省份數據"bar1.y_axis.title = "人數"bar1.x_axis.title = "省份"labels = Reference(ws, min_col=1, min_row=6, max_row=39)data = Reference(ws, min_col=2, min_row=5, max_row=39)bar1.add_data(data, titles_from_data=True)bar1.set_categories(labels)ws.add_chart(bar1, "F2")bar2 = BarChart()bar2.height = 15bar2.width = 30bar2.type = "col"# bar2.style = 10bar2.title = "甘肅省內數據"bar2.y_axis.title = "人數"bar2.x_axis.title = "市州"labels = Reference(ws, min_col=1, min_row=43, max_row=63)data = Reference(ws, min_col=2, min_row=42, max_row=63)bar2.add_data(data, titles_from_data=True)bar2.set_categories(labels)ws.add_chart(bar2, "F35")# 以下為匯總數據
ws = wb.create_sheet("匯總")
ws.column_dimensions['A'].width=26
ws.column_dimensions['B'].width=14
ws.append(list(("匯總", "")))
ws.append(list(("畢業生總數(02-25):", count_stdudent_2)))
ws.append(list(()))print("\n全國各省份數據(匯總)")
ws.append(list(("全國各省份畢業生總數:", count_stdudent_2-TOTAL_PROVINCE_COUNT_dict["62"])))
ws.append(list(("省份名稱", "生源地人數", "人數占比")))
print("---")
for k, v in TOTAL_PROVINCE_COUNT_dict.items():print("{}\t{}\t{:.2f}".format(PROVINCE[k], v, v/count_stdudent_2))ws.append(list((PROVINCE[k], v, v/count_stdudent_2)))
ws.append(list(()))print("\n甘肅省內數據(匯總)")
ws.append(list(("甘肅省內畢業生總數:", TOTAL_PROVINCE_COUNT_dict["62"])))
ws.append(list(("市州名稱", "生源地人數", "人數占比")))
print("---")
for k, v in TOTAL_GANSU_CITY_COUNT_dict.items():print("{}\t{}\t{:.2f}".format(GANSU_CITY[k], v, v/TOTAL_PROVINCE_COUNT_dict["62"]))ws.append(list((GANSU_CITY[k], v, v/TOTAL_PROVINCE_COUNT_dict["62"])))# 定義邊框樣式
border_style = Side(border_style="thin", color="FF000000")
border = Border(left=border_style, right=border_style, top=border_style, bottom=border_style)
# 選擇單元格范圍并應用邊框
cell_range = ws["A1:C63"]
for row in cell_range:for cell in row:cell.border = borderbar1 = BarChart()
bar1.height = 15
bar1.width = 30
bar1.type = "col"
# bar1.style = 10
bar1.title = "全國各省份數據"
bar1.y_axis.title = "人數"
bar1.x_axis.title = "省份"
labels = Reference(ws, min_col=1, min_row=6, max_row=39)
data = Reference(ws, min_col=2, min_row=5, max_row=39)
bar1.add_data(data, titles_from_data=True)
bar1.set_categories(labels)
ws.add_chart(bar1, "F2")bar2 = BarChart()
bar2.height = 15
bar2.width = 30
bar2.type = "col"
# bar2.style = 10
bar2.title = "甘肅省內數據"
bar2.y_axis.title = "人數"
bar2.x_axis.title = "市州"
labels = Reference(ws, min_col=1, min_row=43, max_row=63)
data = Reference(ws, min_col=2, min_row=42, max_row=63)
bar2.add_data(data, titles_from_data=True)
bar2.set_categories(labels)
ws.add_chart(bar2, "F35")# 逐年人數統計
ws = wb.create_sheet("逐年人數統計")
ws.append(list(("年份", "人數")))
for i in range(len(YEAR_RANGE)):ws.append((YEAR_RANGE[i], count_stdudent_1_list[i]))
line = LineChart() # 折線圖
line.x_axis.title = "年份"
line.y_axis.title = "人數"
line.title = "每年畢業生數量"
xlabel = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
data = Reference(ws, min_col=2, min_row=1, max_row=ws.max_row)
line.add_data(data, titles_from_data=True)
line.set_categories(xlabel)
ws.add_chart(line, "D3")wb.save("output.xlsx")
print("畢業生總數: ", count_stdudent_1)
print("明晰生源地的畢業生總數: ", count_stdudent_2)
print("逐年人數:", count_stdudent_1_list)# data=[("廣東省",10430.03),("山東省",9579.31),("河南省",9402.36),("四川省",8041.82),("江蘇省",7865.99),("河北省",7185.42),("湖南省",6568.37),("安徽省",5950.1),("浙江省",5442),("湖北省",5723.77),("廣西壯族自治區",4602.66),("云南省",4596.6),("江西省",4456.74),("遼寧省",4374.63),("黑龍江省",3831.22),("陜西省",3732.74),("山西省",3571.21),("福建省",3552),("重慶市",2884),("貴州省",3476.65),("吉林省",2746.22),("甘肅省",2557.53),("內蒙古自治區",2470.63),("上海市",2301.391),("臺灣省",2316.2),("新疆維吾爾自治區",2181.33),("北京市",1961.2),("天津市",1293.82),("海南省",867.15),("香港特別行政區",709.76),("青海省",562.67),("寧夏回族自治區",630.14),("西藏自治區",300.21),("澳門特別行政區",55.23)]t.add_schema(is_auto_play=True, play_interval=1000) # 自動播放1000ms
t.render("gansu_map.html")

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

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

相關文章

設計模式 | 原型模式

原型模式通過克隆機制實現對象高效創建,是性能敏感場景的利器。本文結合C示例詳解實現原理、深拷貝陷阱、應用場景,并與工廠模式對比分析。 為何需要原型模式? 當遇到以下場景時,傳統構造方法面臨挑戰: 創建成本高&am…

Go 語言中的單元測試

1、如何編寫單元測試 在任何生產級別的項目開發中,單元測試都扮演著至關重要的角色。盡管許多初創項目在早期可能忽略了它,但隨著項目逐漸成熟并成為核心業務,為其編寫健壯的單元測試是保障代碼質量和項目穩定性的必然選擇。本文將帶您快速掌…

8. 接口專業測試報告生成pytest-html

pytest-html 終極指南:打造專業級接口測試報告 在接口自動化測試中,清晰的測試報告是質量保障的關鍵。本文將深入解析如何通過pytest-html插件生成專業級測試報告。 一、核心安裝與基礎使用 快速安裝(國內鏡像) pip install -i …

Day45 Tensorboard使用介紹

目錄 一、tensorboard的發展歷史和原理及基本操作 1.1 發展歷史 1.2 tensorboard的原理 1.3 日志目錄自動管理 1.4 記錄標量數據(Scalar) 1.5 可視化模型結構(Graph) 1.6 可視化圖像(Image) 1.7 記…

用AI給AR加“智慧”:揭秘增強現實智能互動的優化秘密

用AI給AR加“智慧”:揭秘增強現實智能互動的優化秘密 引子:增強現實,到底還能怎么更聰明? 還記得當年Pokmon GO火爆全球的場景嗎?玩家們手機對準街頭,虛擬小精靈活靈活現地跳出來,那就是增強現實(AR)最經典的應用之一。隨著硬件發展和算法進步,AR正逐步從“炫酷玩具…

1 Studying《Computer Vision: Algorithms and Applications 2nd Edition》1-5

目錄 Chapter 1 Introduction 1.1 什么是計算機視覺? 1.2 簡史 1.3 書籍概述 1.4 樣本教學大綱 1.5 符號說明 1.6 其他閱讀材料 Chapter 2 Image formation 2.1 幾何基本元素和變換 2.2 光度圖像形成 2.3 數碼相機 2.4 其他閱讀材料 2.5 練習 Chapter…

Augment插件macOS

macOS蘋果電腦vscode-augment免費額度續杯跑滿 前言 在AI輔助編程日益普及的今天,Augment作為VS Code中的智能代碼助手,為開發者提供了強大的代碼生成和優化功能。然而,免費版本每月300次的使用限制往往讓重度用戶感到困擾。本文將詳細介紹如…

OpenCV CUDA模塊設備層-----創建一個“常量指針訪問器” 的工具函數constantPtr()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 在 CUDA 設備端模擬一個“指向常量值”的虛擬指針訪問器,使得你可以像訪問數組一樣訪問一個固定值。 這在某些核函數中非常有用&…

Python:操作 Excel 刪除工作簿

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

Python類型注解(Type Hints)的工程實踐指南

一、類型注解的核心價值 代碼可讀性:明確函數輸入輸出類型 靜態檢查:配合mypy提前發現類型錯誤 IDE支持:提升代碼補全和重構能力 文檔替代:類型即文檔的現代編程理念 二、基礎語法規范 def greet(name: str, times: int 1)…

Hadoop RPC 分層設計的哲學:高內聚、低耦合的最佳實踐

Hadoop RPC Hadoop RPC主要分為四個部分,分別是序列化層、函數調用層、網絡傳輸層和服務器端處理框架,實現機制為: 序列化層:主要作用是將結構化對象轉為字節流以便于通過網絡進行傳輸或寫入持久存儲。函數調用層:主…

MybatisPlus-01.MybatisPlus介紹

一.MybatisPlus介紹 MybatisPlus是對Mybatis的增強和升級,但需要注意的是,MybatisPlus并不是取代Mybatis的,而是要做Mybatis最好的合作伙伴。左邊藍色的小鳥就是MybatisPlus的標志。 在MybatisPlus官方頁面上介紹了其特點,首先&am…

人大金倉數據庫jdbc連接jar包kingbase8-8.6.0.jar驅動包最新版下載(不需要積分)

看了網上的很多,都是需要下載積分的 分享一下直接訪問人大金倉官網,下載對應的數據庫jdbc連接jar包kingbase8-8.6.0.jar驅動包: 點擊 服務與支持,然后選擇 下載中心 選擇對應的產品和版本,最后選擇軟件版本 看到有…

cf 禁止http/1.0和http/1.1的訪問 是否會更安全?

使用 Cloudflare(CF)禁止 HTTP/1.0 和 HTTP/1.1 的訪問,強制客戶端使用 HTTP/2 或更高版本(如 HTTP/3),在某些情況下可以提升網站安全性,但也存在權衡和限制。以下是詳細分析,幫你判…

【Docker基礎】Docker容器管理:docker pause詳解

目錄 1 Docker容器管理概述 2 docker pause命令詳解 2.1 命令基本語法 2.2 命令功能解析 2.3 暫停與停止的區別 3 docker pause的工作流程 3.1 工作流程概述 3.2 工作流程詳解 4 docker pause的使用場景 4.1 資源臨時調整 4.2 調試與檢查 4.3 服務維護 4.4 數據備…

Springboot ResponseBodyAdvice 的小妙用

最近公司接觸到了政府項目,在開發完成后,需要對代碼做安全掃描,對系統做安全測試,在安全測試中有一項不合格,就是接口返回錯誤是,錯誤不是瀏覽器級別的,什么意思呢,一般我們都會封裝…

Re:從零開始的文件結構(融合線性表來理解 考研向)

文件管理 & 線性表 文件管理文件的結構無結構文件 有結構文件(重點)定長與不定長記錄順序文件(類線性表)它的邏輯結構它的物理結構(存儲結構)小結 索引順序文件與多級索引順序文件形象化理解&#xff0…

并發基礎7(守護線程)

目錄 1:什么守護線程 2:守護線程使用 3:守護線程案例 1:什么守護線程 守護線程是Java中的一種特殊的線程類型,它為其他線程(非守護線程)提供后臺支持服務。 在Java多線程編程中&#xff0c…

蜣螂算法+四模型對比!DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測

蜣螂算法四模型對比!DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測(Matlab完整源碼和數據) 目錄 蜣螂算法四模型對比!DBO-CNN-BiLSTM-Attention系列四模型多變量時序預測(Matlab完整源碼和數據)效果一…

服務器的維護技術都有哪些?

服務器的穩定性與可靠性是十分重要的,當服務器出現故障或損壞時,會影響業務的正常運行,還會導致數據丟失給企業帶來巨大的經濟損失,所以大多數的企業通常掌握著有效的服務器維護技術,不僅能夠提高服務器的穩定性&#…