
Python,速成心法
敲代码,查资料,问Ai
练习,探索,总结,优化

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧。使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
------★Python练手项目源码★------
Python项目91:绘制红楼梦人物关系图(NetworkX+Matplotlib)
Python项目89:NetworkX最短路径规划(城市交通)
Python项目88:文件备份与压缩系统2.0(tkinter+shutil+zipfile)
Python项目86:增强版画板2.0(tk.Canvas)
Python项目81:Excel工作表批量重命名工具1.0(tkinter+openpyxl)
Python项目78:学生成绩分析系统(Tkinter+SQLite3)
Python项目77:模拟炒股训练系统3.0(Mplfinance+tkinter)
Python项目76:员工排班表系统1.0(tkinter+sqlite3+tkcalendar)
Python项目74:多线程数据可视化工具2.0(tkinter+matplotlib+mplcursors)
Python项目73:自动化文件备份系统1.0(tkinter)
Python项目源码71:药品管理系统1.0(tkinter+sqlite3)
Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
Python项目源码63:病历管理系统1.0(tkinter+sqlite3+matplotlib)
Python源码62:酒店住房管理系统1.0(tkinter+sqlite3)
Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)
Python项目源码56:食堂饭卡管理系统1.0(tkinter+splite3)
Python项目源码54:员工信息管理系统2.0(tkinter+sqlite3)
Python项目源码52:模拟银行卡系统1.0(账户管理、存款、取款、转账和交易记录查询)
Python项目源码50:理发店会员管理系统1.0(tkinter+sqlite3)
Python项目源码48:正则表达式调试工具3.0(tkinter+re+requests)
Python项目源码44:图书管理系统1.0(tkinter+sqlite3)
Python项目源码42:仓库商品管理系统1.0(tkinter+sqlite3+Excel)
Python项目源码40:字符串处理工具(tkinter+入门练习)
Python项目源码39:学生积分管理系统1.0(命令行界面+Json)
Python项目源码35:音乐播放器2.0(Tkinter+mutagen)
Python项目源码33:待办事项列表应用2.0(命令行界面+Json+类)
Python项目32:订单销售额管理系统1.0(Tkinter+CSV)
Python项目源码29:学生缴费管理系统(Tkinter+CSV)
Python项目28:设计日志管理系统2.0(Tkinter+Json)
1.功能说明:KPI指标卡:显示交通指数、空气质量指数、能耗指数和安全指数。交通流量图:显示24小时交通流量变化趋势。空气质量图:比较不同区域的空气质量指标。能源消耗图:展示各类能源消耗的月度趋势
2.安装所需依赖:
pip install dash plotly pandas numpy dash-bootstrap-components运行py代码后,在浏览器中访问:http://localhost:8050
3.扩展建议:添加实时数据接口,连接实际数据源,增加更多可视化图表类型(如3D地图、网络拓扑图等),实现数据预警功能,当指标超过阈值时发出警报,添加用户登录和权限管理功能,优化移动端显示效果,集成机器学习模型,提供预测分析功能。

↓ 完整源码如下 ↓
# 安装依赖:pip install dash plotly pandas numpy# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport dashfrom dash import dcc, html, Input, Outputimport plotly.graph_objects as goimport plotly.express as pximport pandas as pdimport numpy as npfrom datetime import datetime, timedeltaimport dash_bootstrap_components as dbc# 初始化Dash应用app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY])app.title = "智慧城市运营管理中心"# 生成模拟数据def generate_data():np.random.seed(42)# 交通流量数据hours = list(range(24))traffic_data = []for i in range(7): # 一周的数据base = np.random.randint(200, 500)for h in hours:if 7 <= h <= 9 or 17 <= h <= 19: # 高峰时段traffic = base + np.random.randint(300, 600)elif 22 <= h <= 5: # 夜间traffic = base + np.random.randint(0, 100)else: # 平峰时段traffic = base + np.random.randint(100, 300)traffic_data.append({'date': (datetime.now() - timedelta(days=6-i)).strftime('%Y-%m-%d'),'hour': h,'traffic_volume': traffic})# 空气质量数据districts = ['市中心', '高新区', '工业区', '居民区', '开发区']air_quality_data = []for district in districts:for i in range(30): # 30天数据date = (datetime.now() - timedelta(days=29-i)).strftime('%Y-%m-%d')pm25 = np.random.normal(30, 10)pm10 = pm25 + np.random.normal(10, 5)no2 = np.random.normal(20, 8)air_quality_data.append({'district': district,'date': date,'PM2.5': max(5, pm25),'PM10': max(10, pm10),'NO2': max(5, no2)})# 能源消耗数据energy_data = []energy_types = ['居民用电', '工业用电', '商业用电', '公共设施']for i in range(12): # 12个月month = i + 1for energy_type in energy_types:if energy_type == '居民用电':consumption = np.random.normal(500, 50) + 50 * np.sin(month * 0.5)elif energy_type == '工业用电':consumption = np.random.normal(800, 100) + 30 * np.cos(month * 0.3)elif energy_type == '商业用电':consumption = np.random.normal(600, 80) + 40 * np.sin(month * 0.4)else:consumption = np.random.normal(300, 30)energy_data.append({'month': month,'energy_type': energy_type,'consumption': max(100, consumption)})# 人口热力图数据population_data = []for lat in np.linspace(30.6, 30.8, 20):for lon in np.linspace(104.0, 104.2, 20):# 模拟市中心人口密度高center_dist = np.sqrt((lat - 30.7)**2 + (lon - 104.1)**2)density = max(10, 1000 * np.exp(-center_dist * 10))population_data.append({'lat': lat,'lon': lon,'density': density + np.random.normal(0, 100)})return {'traffic': pd.DataFrame(traffic_data),'air_quality': pd.DataFrame(air_quality_data),'energy': pd.DataFrame(energy_data),'population': pd.DataFrame(population_data)}# 生成数据data = generate_data()# 应用布局app.layout = dbc.Container(fluid=True,children=[# 标题栏dbc.Row([dbc.Col([html.H1("智慧城市运营管理中心", className="text-center mb-4 mt-3"),html.P("实时监控城市运行状态与关键指标", className="text-center text-muted mb-4")])]),# 第一行:KPI指标dbc.Row([dbc.Col([dbc.Card([dbc.CardBody([html.H4("交通指数", className="card-title"),html.H2("78.5", className="card-text text-success"),html.P("较昨日↑2.3%", className="card-text text-muted")])], className="text-center shadow")], width=3),dbc.Col([dbc.Card([dbc.CardBody([html.H4("空气质量指数", className="card-title"),html.H2("42", className="card-text text-info"),html.P("优良", className="card-text text-muted")])], className="text-center shadow")], width=3),dbc.Col([dbc.Card([dbc.CardBody([html.H4("能耗指数", className="card-title"),html.H2("65.2", className="card-text text-warning"),html.P("较上周↓1.5%", className="card-text text-muted")])], className="text-center shadow")], width=3),dbc.Col([dbc.Card([dbc.CardBody([html.H4("安全指数", className="card-title"),html.H2("94.7", className="card-text text-success"),html.P("较上月↑0.8%", className="card-text text-muted")])], className="text-center shadow")], width=3)], className="mb-4"),# 第二行:主要图表dbc.Row([# 交通流量图dbc.Col([dbc.Card([dbc.CardHeader("交通流量实时监控"),dbc.CardBody([dcc.Graph(id='traffic-chart', style={'height': '300px'})])], className="shadow")], width=6, className="mb-4"),# 空气质量图dbc.Col([dbc.Card([dbc.CardHeader("区域空气质量"),dbc.CardBody([dcc.Graph(id='air-quality-chart', style={'height': '300px'})])], className="shadow")], width=6, className="mb-4")]),# 第三行:更多图表dbc.Row([# 能源消耗图dbc.Col([dbc.Card([dbc.CardHeader("能源消耗分析"),dbc.CardBody([dcc.Graph(id='energy-chart', style={'height': '300px'})])], className="shadow")], width=6, className="mb-4"),# 人口热力图dbc.Col([dbc.Card([dbc.CardHeader("人口密度热力图"),dbc.CardBody([dcc.Graph(id='population-chart', style={'height': '300px'})])], className="shadow")], width=6, className="mb-4")]),# 第四行:时间选择器dbc.Row([dbc.Col([dbc.Card([dbc.CardBody([html.P("选择时间范围:", className="mb-2"),dcc.DatePickerRange(id='date-picker',min_date_allowed=(datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d'),max_date_allowed=datetime.now().strftime('%Y-%m-%d'),start_date=(datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d'),end_date=datetime.now().strftime('%Y-%m-%d'),display_format='YYYY-MM-DD',className="mb-3"),html.P("更新时间: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S"),id='update-time', className="text-muted text-end")])])], width=12)])])# 回调函数更新图表@app.callback([Output('traffic-chart', 'figure'),Output('air-quality-chart', 'figure'),Output('energy-chart', 'figure'),Output('population-chart', 'figure'),Output('update-time', 'children')],[Input('date-picker', 'start_date'),Input('date-picker', 'end_date')])def update_charts(start_date, end_date):# 更新时间显示update_time = "更新时间: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 1. 交通流量图traffic_fig = go.Figure()# 获取最近一天的数据latest_date = data['traffic']['date'].max()day_traffic = data['traffic'][data['traffic']['date'] == latest_date]traffic_fig.add_trace(go.Scatter(x=day_traffic['hour'],y=day_traffic['traffic_volume'],mode='lines+markers',name='交通流量',line=dict(color='#00b4d8', width=3),fill='tozeroy',fillcolor='rgba(0, 180, 216, 0.2)'))traffic_fig.update_layout(template='plotly_dark',plot_bgcolor='rgba(0,0,0,0)',paper_bgcolor='rgba(0,0,0,0)',xaxis_title="时间 (时)",yaxis_title="车流量 (辆/小时)",margin=dict(l=40, r=20, t=20, b=40))# 2. 空气质量图latest_air_date = data['air_quality']['date'].max()latest_air_data = data['air_quality'][data['air_quality']['date'] == latest_air_date]air_fig = go.Figure()for district in latest_air_data['district'].unique():district_data = latest_air_data[latest_air_data['district'] == district]air_fig.add_trace(go.Bar(x=['PM2.5', 'PM10', 'NO2'],y=[district_data['PM2.5'].mean(), district_data['PM10'].mean(), district_data['NO2'].mean()],name=district))air_fig.update_layout(template='plotly_dark',plot_bgcolor='rgba(0,0,0,0)',paper_bgcolor='rgba(0,0,0,0)',barmode='group',xaxis_title="污染物",yaxis_title="浓度 (μg/m³)",margin=dict(l=40, r=20, t=20, b=40))# 3. 能源消耗图energy_fig = px.line(data['energy'],x='month',y='consumption',color='energy_type',markers=True)energy_fig.update_layout(template='plotly_dark',plot_bgcolor='rgba(0,0,0,0)',paper_bgcolor='rgba(0,0,0,0)',xaxis_title="月份",yaxis_title="消耗量 (万kWh)",legend_title="能源类型",margin=dict(l=40, r=20, t=20, b=40))# 4. 人口热力图population_fig = go.Figure(go.Densitymapbox(lat=data['population']['lat'],lon=data['population']['lon'],z=data['population']['density'],radius=15,colorscale='Viridis'))population_fig.update_layout(mapbox_style="carto-darkmatter",mapbox_center={"lat": 30.7, "lon": 104.1},mapbox_zoom=10,margin=dict(l=20, r=20, t=20, b=20),height=300)return traffic_fig, air_fig, energy_fig, population_fig, update_timeif __name__ == '__main__':app.run(debug=True, port=8050)
完毕!!感谢您的收看
------★★历史博文集合★★------
