基于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.mzph.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…