基于Python的經濟循環模型構建與可視化案例

一、代碼結構概覽

該代碼構建了一個包含經濟數據生成、可視化分析和政策模擬的交互式經濟系統仿真平臺,主要包括三大模塊:

  1. 多部門經濟數據生成:模擬包含產業關聯的復雜經濟數據

  2. 增強型可視化:提供多維度的經濟數據分析視圖

  3. Dash交互應用:實現政策參數的動態模擬與效果展示


二、數據生成模塊 (generate_multi_sector_data)

1. 基礎設置
dates?= pd.date_range(start=datetime(2020,?1,?1), periods=years*12, freq='ME')t?= np.arange(len(dates))
  • 生成每月末的日期序列(freq='ME'

  • 創建時間索引數組t用于周期函數計算

2. 波動生成函數???????
def?modulated_wave(base_freq, noise=0):? ??return?np.sin(base_freq*t)*(1+0.2*np.sin(0.3*t)) + noise*np.random.randn(len(t))
  • 復合波動模型:包含:
  • 基礎正弦波(np.sin(base_freq*t)

  • 振幅調制波(0.2*np.sin(0.3*t)

  • 高斯白噪聲(noise參數控制強度)

3. 部門經濟模型

定義8個產業部門,每個部門采用不同的數學模型體現行業特性:

部門

模型特征

關鍵公式組件

農業

氣候周期性

signal.square()

方波模擬季節影響

采礦業

資源衰減

-0.005*(t**1.5)

模擬資源枯竭

制造業

S型增長

1-1/(1+np.exp(...))

邏輯斯蒂曲線

科技服務業

指數增長

np.exp(0.005*t)

指數函數

金融地產

復合增長

(1+0.01*t)**2

二次增長

4. 產業關聯計算???????
sector_links?= np.array([...]) ?#?8x8矩陣for?_ in range(2): ?# 兩輪交互? ??for?i in range(8):? ? ? ??impact?= (df @ sector_links[i])? ? ? ??df.iloc[:,i] +=?0.1?* impact.mean()
  • 投入產出矩陣:8x8矩陣定義部門間供給關系
  • 動態傳播:進行兩輪關聯計算,每個部門接收來自其他部門的加權影響
5. 宏觀指標???????
df['domestic_cycle'] = 0.4*df['manufacturing'] + ... ?# 國內周期df['external_cycle'] = 0.6*df['mining'] + ... ? ? ? ?# 外部周期
  • 通過加權組合關鍵部門數據生成綜合指標


三、可視化模塊

1. 平行坐標分析???????
px.parallel_coordinates(? ? df.resample('Q').mean(), ?# 季度平均? ? color='domestic_cycle', ??# 顏色映射? ? dimensions=df.columns[:8])
  • 功能:展示多部門間的關聯關系
  • 設計:
  • 使用發散色系Tealrose突出對比

  • 季度降采樣避免過度波動

2. 雷達圖分析???????
go.Scatterpolar(? ? r=latest/(base+1e-6), ? ??# 相對增長率? ? theta=df.columns[:8] ? ??# 部門角度分布)
  • 功能:可視化部門協同發展程度
  • 設計:
  • 顯示當前值相對于基期的倍數關系

  • 灰色基準線標記1倍水平


四、Dash交互應用

1. 界面布局???????
app.layout = html.Div([? ? html.H1("仿真平臺", style={'textAlign':'center'}),? ? dcc.Graph(id='parallel-coords'), ?# 左側視圖? ? dcc.Graph(id='radar-chart'), ? ? ?# 右側視圖? ? dcc.Slider(id='manuf-tax', ...), ?# 政策滑塊? ? html.Div(id='sector-simulation') ?# 結果展示區])
  • 響應式布局:使用CSS Grid實現雙列視圖
  • 組件設計
  • 政策滑塊帶有百分比刻度

  • 陰影和圓角提升視覺層次

2. 政策模擬引擎???????
@callback(? ? Output('sector-simulation',?'children'),? ? [Input('manuf-tax',?'value'), ...])def?simulate_simpact(tax_rate, tech_sub, green_inv):? ??# 動態響應參數計算? ? tax_effect =?0.8/(1+np.exp(15*(tax_rate-0.25))) ?# S型曲線? ? tech_multiplier =?1?+?2.5*tech_sub*(1-0.3*tax_rate)? ??? ??# 構建8x8影響矩陣? ? impact_matrix = np.array([...])? ??? ??# 計算增長率? ? base_values = economy_df.iloc[-1].values[:8]? ? impact = base_values @ impact_matrix? ? growth_rates = (impact - base_values)/base_values
  • 核心算法:
  • 使用矩陣乘法模擬政策沖擊傳導

  • 各政策參數非線性疊加(如tech_subtax_rate的相互作用)

  • 可視化反饋:

  • 紅/綠色區分正負增長

    網格布局展示8部門結果

import pandas as pd
import numpy as np
from datetime import datetime
from scipy import signal
import plotly.express as px
import plotly.graph_objects as go
from dash import Dash, html, dcc, Input, Output, callback# ========================
# 多部門經濟數據生成(8大產業部門)
# ========================
def generate_multi_sector_data(years=5):"""生成包含復雜產業關聯的經濟數據"""dates = pd.date_range(start=datetime(2020, 1, 1), periods=years * 12, freq='ME')t = np.arange(len(dates))# 基礎波動模型def modulated_wave(base_freq, noise=0):return np.sin(base_freq * t) * (1 + 0.2 * np.sin(0.3 * t)) + noise * np.random.randn(len(t))# 部門定義(8大產業)sectors = {# 農業:受氣候和政策影響'agriculture': 50 * (1 + 0.01 * t) + 10 * modulated_wave(2 * np.pi / 24) * (1 + 0.3 * signal.square(2 * np.pi * t / 36)),# 采礦業:資源依賴型'mining': 80 * (1 + 0.008 * t) - 0.005 * (t ** 1.5) + 15 * modulated_wave(2 * np.pi / 36, 0.2),# 制造業:核心生產部門'manufacturing': 100 * (1 + 0.015 * t) * (1 - 1 / (1 + np.exp(0.1 * (t - 30)))) + 20 * modulated_wave(2 * np.pi / 12),# 公用事業:穩定增長'utilities': 60 * (1 + 0.012 * t) + 5 * np.random.randn(len(t)),# 建筑業:周期性波動'construction': 70 * (1 + 0.01 * t) + 25 * modulated_wave(2 * np.pi / 18) + 0.2 * signal.sawtooth(2 * np.pi * t / 60),# 科技服務業:指數增長'tech_services': 40 * np.exp(0.005 * t) * (1 + 0.3 * modulated_wave(2 * np.pi / 24, 0.15)),# 金融地產:復合增長'finance_realestate': 90 * (1 + 0.01 * t) ** 2 + 30 * modulated_wave(2 * np.pi / 24, 0.2),# 消費服務業:需求驅動'consumer_services': 80 * (1 + 0.008 * t) + 20 * modulated_wave(2 * np.pi / 12) * (1 + 0.4 * np.random.beta(2, 5, len(t)))}df = pd.DataFrame(sectors, index=dates)# 部門間關聯投入產出關系sector_links = np.array([[0, 0.1, 0.2, 0, 0.05, 0, 0, 0],  # 農業[0.05, 0, 0.3, 0.1, 0.15, 0, 0, 0],  # 采礦業[0.1, 0.4, 0, 0.2, 0.25, 0.3, 0.1, 0.2],  # 制造業[0, 0, 0.1, 0.05, 0, 0.05, 0, 0],  # 公用事業[0, 0.1, 0.35, 0.05, 0, 0.1, 0.15, 0.3],  # 建筑業[0, 0, 0.2, 0.1, 0.1, 0, 0.3, 0.2],  # 科技服務[0, 0, 0.1, 0.05, 0.2, 0.4, 0, 0.5],  # 金融地產[0.2, 0, 0.15, 0, 0.1, 0.25, 0.3, 0]  # 消費服務])# 動態投入產出計算for _ in range(2):  # 兩輪交互for i in range(8):impact = (df @ sector_links[i])df.iloc[:, i] += 0.1 * impact.mean()# 宏觀指標計算df['domestic_cycle'] = 0.4 * df['manufacturing'] + 0.3 * df['consumer_services'] + 0.3 * df['construction']df['external_cycle'] = 0.6 * df['mining'] + 0.4 * df['tech_services'] - 0.2 * df['finance_realestate']return dfeconomy_df = generate_multi_sector_data()# ========================
# 增強型可視化(多維度分析)
# ========================
def create_parallel_coordinates(df):"""產業關聯平行坐標分析"""fig = px.parallel_coordinates(df.resample('Q').mean(),color='domestic_cycle',dimensions=df.columns[:8],color_continuous_scale=px.colors.diverging.Tealrose,title="產業關聯度多維分析")fig.update_layout(height=500)return figdef create_radar_chart(df):"""部門協同效應雷達圖"""latest = df.iloc[-1].values[:8]base = df.iloc[0].values[:8]fig = go.Figure()fig.add_trace(go.Scatterpolar(r=latest / (base + 1e-6),theta=df.columns[:8],fill='toself',name='當前值',line_color='indigo'))fig.add_trace(go.Scatterpolar(r=np.ones(8),theta=df.columns[:8],name='基準線',line_color='gray'))fig.update_layout(polar=dict(radialaxis=dict(visible=True, range=[0.5, 2])),showlegend=True,height=450,title="部門發展協同效應雷達圖")return fig# ========================
# 增強型Dash應用(多政策模擬)
# ========================
app = Dash(__name__)app.layout = html.Div([html.H1("多部門經濟系統動力學仿真平臺", style={'textAlign': 'center', 'color': '#2c3e50'}),html.Div([dcc.Graph(id='parallel-coords', figure=create_parallel_coordinates(economy_df)),dcc.Graph(id='radar-chart', figure=create_radar_chart(economy_df))], style={'display': 'grid', 'gridTemplateColumns': '1fr 1fr', 'gap': '20px'}),html.Div([html.Div([html.H3("產業政策模擬器", style={'borderBottom': '2px solid #3498db'}),html.Div([html.Div([html.Label("制造業增值稅", style={'color': '#2980b9'}),dcc.Slider(id='manuf-tax', min=0.1, max=0.4, value=0.25, step=0.05,marks={i: f"{int(i * 100)}%" for i in [0.1, 0.2, 0.3, 0.4]}),], style={'flex': 1, 'padding': 10}),html.Div([html.Label("科技研發補貼", style={'color': '#27ae60'}),dcc.Slider(id='tech-subsidy', min=0, max=0.2, value=0.05, step=0.02,marks={i: f"{int(i * 100)}%" for i in [0, 0.05, 0.1, 0.15, 0.2]}),], style={'flex': 1, 'padding': 10}),html.Div([html.Label("綠色轉型投資", style={'color': '#2ecc71'}),dcc.Slider(id='green-invest', min=0, max=0.15, value=0.03, step=0.03,marks={i: f"{int(i * 100)}%" for i in [0, 0.03, 0.06, 0.09, 0.12, 0.15]}),], style={'flex': 1, 'padding': 10})], style={'display': 'flex', 'gap': '15px'})], style={'padding': 25,'borderRadius': 10,'boxShadow': '0 2px 15px rgba(0,0,0,0.1)','background': '#f9f9f9','marginBottom': '20px'})], style={'width': '90%', 'margin': 'auto'}),html.Div(id='sector-simulation', style={'padding': 20,'margin': '20px auto','borderRadius': 8,'background': '#f0f4f8','width': '85%'})
])# ========================
# 產業政策模擬引擎
# ========================
@callback(Output('sector-simulation', 'children'),[Input('manuf-tax', 'value'),Input('tech-subsidy', 'value'),Input('green-invest', 'value')]
)
def simulate_simpact(tax_rate, tech_sub, green_inv):"""多政策協同作用模擬"""# 動態響應參數tax_effect = 0.8 / (1 + np.exp(15 * (tax_rate - 0.25)))  # S型稅收響應tech_multiplier = 1 + 2.5 * tech_sub * (1 - 0.3 * tax_rate)green_synergy = 0.6 * green_inv * (1 + 0.4 * tech_sub)# 部門間傳播矩陣impact_matrix = np.array([[1.0, 0.2, 0.5, 0.1, 0.3, 0.4, 0.1, 0.2],[0.3, 1.0, 0.6, 0.2, 0.4, 0.1, 0.3, 0.1],[0.7, 0.8, tax_effect, 0.5, 0.6, tech_multiplier, 0.4, 0.5],[0.1, 0.2, 0.3, 1.0, 0.2, 0.3, 0.1, 0.2],[0.4, 0.3, 0.7, 0.2, 1.0, 0.5, green_synergy, 0.6],[0.5, 0.1, 0.9, 0.3, 0.8, 1.0, 0.7, 0.4],[0.2, 0.4, 0.6, 0.1, 0.5, 0.8, 1.0, 0.3],[0.3, 0.1, 0.4, 0.2, 0.7, 0.6, 0.5, 1.0]])# 計算部門影響base_values = economy_df.iloc[-1].values[:8]impact = base_values @ impact_matrixgrowth_rates = (impact - base_values) / base_values# 生成可視化結果return html.Div([html.H4("政策沖擊傳導效應預測", style={'color': '#2c3e50'}),html.Div([html.Div([html.P(f"{sector}:", style={'fontWeight': 'bold'}),html.P(f"{100 * growth:.1f}%",style={'color': '#e74c3c' if growth < 0 else '#27ae60'})])for sector, growth in zip(economy_df.columns[:8], growth_rates)], style={'display': 'grid', 'gridTemplateColumns': 'repeat(4, 1fr)', 'gap': '15px'})])if __name__ == '__main__':app.run(debug=True, port=8050)

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

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

相關文章

第十六屆藍橋杯大賽軟件賽省賽 Python 大學 B 組 部分題解

題面鏈接Htlang/2025lqb_python_b 個人覺得今年這套題整體比往年要簡單許多&#xff0c;但是G題想簡單了出大問題&#xff0c;預估50101015120860&#xff0c;道阻且長&#xff0c;再接再厲 A: 攻擊次數 答案&#xff1a;103&#xff1f;181&#xff1f;題目沒說明白每回合是…

C++基礎精講-05

文章目錄 1.構造函數初始化列表1.1 初始化列表的使用1.2 有參構造函數的默認值 2.對象所占空間大小2.1 大小的計算2.2 內存對齊機制 3. 析構函數3.1 基本概念3.2 總結 4.valgrind工具集4.1 介紹4.2 memcheck的使用 5. 拷貝構造函數5.1 拷貝構造函數定義5.2 淺拷貝/深拷貝5.3 拷…

文章記單詞 | 第28篇(六級)

一&#xff0c;單詞釋義 shirt /???t/ n. 襯衫&#xff1b;襯衣commonly /?k?m?nli/ adv. 通常地&#xff1b;一般地&#xff1b;普遍地pick /p?k/ v. 挑選&#xff1b;采摘&#xff1b;撿起&#xff1b;選擇&#xff1b;n. 選擇&#xff1b;鶴嘴鋤&#xff1b;精華com…

安裝低版本Pytorch GPU

網上很多教程都是自動安裝&#xff0c;不指定版本&#xff0c;其實有大問題。而且torch、torchvision、torchaudio的版本必須是對應&#xff0c;所以一旦版本不對&#xff0c;就可能會出現各種問題。 其實Pytorch官網就已經給出了安裝低版本的教程 登入Pytorch官網 點擊previo…

2025認證杯挑戰賽B題【 謠言在社交網絡上的傳播 】原創論文講解(含完整python代碼)

大家好呀&#xff0c;從發布賽題一直到現在&#xff0c;總算完成了認證杯數學中國數學建模網絡挑戰賽第一階段B題目謠言在社交網絡上的傳播完整的成品論文。 本論文可以保證原創&#xff0c;保證高質量。絕不是隨便引用一大堆模型和代碼復制粘貼進來完全沒有應用糊弄人的垃圾半…

并發編程--互斥鎖與讀寫鎖

并發編程–互斥鎖與讀寫鎖 文章目錄 并發編程--互斥鎖與讀寫鎖1. 基本概念2. 互斥鎖2.1 基本邏輯2.2 函數接口2.3示例代碼12.4示例代碼2 3. 讀寫鎖3.1 基本邏輯3.2示例代碼 1. 基本概念 互斥與同步是最基本的邏輯概念&#xff1a; 互斥指的是控制兩個進度使之互相排斥&#x…

親手打造可視化故事線管理工具:開發全流程、難點突破與開發過程經驗總結

親手打造可視化故事線管理工具&#xff1a;開發全流程、難點突破與開發過程經驗總結 作為還沒入門的業余編程愛好者&#xff0c;奮戰了2天&#xff0c;借助AI開發一款FLASK小工具&#xff0c;功能還在完善中&#xff08;時間軸可以跟隨關聯圖縮放&#xff0c;加了一個用C鍵控制…

網絡攻防技術-虛擬機安裝和nmap端口掃描

文章是博主上實驗課做的實驗和心得體會&#xff0c;有些高深的地方我可能也比較一知半解&#xff0c;歡迎來交流。全文參考課程所習得&#xff0c;純粹梳理知識點和分享&#xff0c;如有不妥請聯系修改。 文章側重實驗部分&#xff0c;也會講述實驗相關的理論知識。理論后期如果…

中斷的硬件框架

今天呢&#xff0c;我們來講講中斷的硬件框架&#xff0c;這里會去舉3個開發板&#xff0c;去了解中斷的硬件框架&#xff1a; 中斷路徑上的3個部件&#xff1a; 中斷源 中斷源多種多樣&#xff0c;比如GPIO、定時器、UART、DMA等等。 它們都有自己的寄存器&#xff0c;可以…

動手學深度學習:手語視頻在VGG模型中的測試

前言 其他所有部分同上一篇AlexNet一樣&#xff0c;所以就不再贅訴&#xff0c;直接看VGG搭建部分。 模型 VGG是第一個采取塊進行模塊化搭建的模型。 def vgg_block(num_convs,in_channels,out_channels):layers[]for _ in range(num_convs):layers.append(nn.Conv2d(in_ch…

信息學奧賽一本通 1498:Roadblocks | 洛谷 P2865 [USACO06NOV] Roadblocks G

【題目鏈接】 ybt 1498&#xff1a;Roadblocks 洛谷 P2865 [USACO06NOV] Roadblocks G 【題目考點】 1. 圖論&#xff1a;嚴格次短路徑 嚴格次短路的路徑長度必須大于最短路的路徑長度。 非嚴格次短路的路徑長度大于等于最短路的路徑長度。 【解題思路】 每個交叉路口是一…

Arm CPU安全通告:基于TrustZone的Cortex-M系統面臨多重故障注入攻擊

安全之安全(security)博客目錄導讀 目錄 一、概述 二、致謝 三、參考文獻??????Black Hat USA 2022 | Briefings Schedule 四、版本歷史 一、概述 Arm注意到BlackHat 2022大會官網發布的演講摘要《糟糕..&#xff01;我又一次故障注入成功了&#xff01;——如何突…

【頻域分析】包絡分析

【頻域分析】包絡分析 算法配置頁面 可以一鍵導出結果數據 報表自定義繪制 獲取和下載【PHM學習軟件PHM源碼】的方式 獲取方式&#xff1a;Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

ElMessage

以下是關于 ElMessage 的詳細說明和使用方法&#xff1a; 什么是 ElMessage ElMessage 是 Element Plus 提供的一個全局消息提示組件&#xff0c;用于在頁面上顯示短暫的消息提示。它可以用于顯示成功、警告、錯誤等不同類型的消息。 基本用法 1. 引入 ElMessage 在使用 E…

全面解析 KaiwuDB 數據庫的數據類型

在現代數據庫管理系統中&#xff0c;數據類型的選擇至關重要。它不僅決定了數據存儲的效率&#xff0c;還影響到查詢的速度和數據的一致性。KaiwuDB&#xff0c;作為一款開源的分布式數據庫&#xff0c;提供了多種數據類型&#xff0c;以適應不同的業務需求和存儲要求。本文將全…

【計網】網絡交換技術之分組交換(復習自用,重要1)

復習自用的&#xff0c;處理得比較草率&#xff0c;復習的同學或者想看基礎的同學可以看看&#xff0c;大佬的話可以不用浪費時間在我的水文上了 另外兩種交換技術可以直接點擊鏈接訪問相關筆記&#xff1a; 電路交換 報文交換 一、分組交換的定義 1.定義 分組交換&#x…

C++ STL及Python中等效實現

一. STL 概述 STL 包含以下核心組件&#xff1a; 容器&#xff08;Containers&#xff09;&#xff1a;存儲數據的結構&#xff0c;如數組、鏈表、集合等。迭代器&#xff08;Iterators&#xff09;&#xff1a;用于遍歷容器的接口&#xff0c;類似指針。算法&#xff08;Alg…

python-63-前后端分離之圖書管理系統的Flask后端

文章目錄 1 flask后端1.1 數據庫實例extension.py1.2 數據模型models.py1.3 .flaskenv1.4 app.py1.5 運行1.6 測試鏈接2 關鍵函數和文件2.1 請求視圖類MethodView2.2 .flaskenv文件3 參考附錄基于flask形成了圖書管理系統的后端,同時對其中使用到的關鍵文件.flaskenv和函數類M…

藍橋杯真題——好數、R格式

目錄 藍橋杯2024年第十五屆省賽真題-好數 【模擬題】 題目描述 輸入格式 輸出格式 樣例輸入 樣例輸出 提示 代碼1&#xff1a;有兩個案例過不了&#xff0c;超時 藍橋杯2024年第十五屆省賽真題-R 格式 【vector容器的使用】 題目描述 輸入格式 輸出格式 樣例輸入…

Python中NumPy的索引和切片

在數據科學和科學計算領域&#xff0c;NumPy是一個功能強大且廣泛使用的Python庫。它提供了高效的多維數組對象以及豐富的數組操作函數&#xff0c;其中索引和切片是NumPy的核心功能之一。通過靈活運用索引和切片操作&#xff0c;我們可以輕松訪問和操作數組中的元素&#xff0…