日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

2020年高教社杯全国大学生数学建模竞赛---校园供水系统智能管理(Python代码实现)

發布時間:2024/1/1 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020年高教社杯全国大学生数学建模竞赛---校园供水系统智能管理(Python代码实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

💥1 概述

📚2 問題

🎉3 運行結果

👨?💻4 Python代碼


💥1 概述

校園供水系統是校園公用設施的重要組成部分,學校為了保障校園供水系統的正常運行需要投入大量的人力、物力和財力。隨著科學技術的發展,校園內已經普遍使用了智能水表,從而可以獲得大量的實時供水系統運行數據。后勤部門希望基于這些數據,通過數學建模和數據挖掘及時發現和解決供水系統中存在的問題,提高校園服務和管理水平。

附件是某校區水表層級關系以及所有水表四個季度的讀數(以一定時間為間隔,如15分鐘)與相應的用水數據。請利用這些信息和數據,建立數學模型,討論以下問題:

📚2 問題

1.?統計、分析各個水表數據的變化規律,并給出校園內不同功能區(宿舍、教學樓、辦公樓、食堂等)的用水特征。

🎉3 運行結果

👨?💻4 Python代碼

'''1 讀取四個季度數據:'''import pandas as pd shuju1=pd.read_excel('一季度.xlsx') shuju2=pd.read_excel('二季度.xlsx') shuju3=pd.read_excel('三季度.xlsx') shuju4=pd.read_excel('四季度.xlsx') print(shuju1)#==查看一季度的統計描述:==== #可以得到一季度的最大值、最小值、平均值等信息 print(shuju1.describe())#==為了快速瀏覽數據集,我們使用dataframe.info()功能=== print(shuju1.info())#===查看缺失值====== print(shuju1.isnull().sum())'''2 讀取水表層:''' shui_biao = pd.read_excel("水表層級.xlsx") print(shui_biao)#查看水表有哪些不同類型: print(shui_biao['水表名'].unique())#查看四個季度水表名數量: print(len(shuju1['水表名'].unique())) print(len(shuju2['水表名'].unique())) print(len(shuju3['水表名'].unique())) print(len(shuju4['水表名'].unique()))#給數據表添加上具體季度更方便觀察: import numpy as np # 合并數據 shuju1['季度'] = pd.Series(["一季度" for i in range(len(shuju1.index))]) shuju2['季度'] = pd.Series(["二季度" for i in range(len(shuju2.index))]) shuju3['季度'] = pd.Series(["三季度" for i in range(len(shuju3.index))]) shuju4['季度'] = pd.Series(["四季度" for i in range(len(shuju4.index))]) print(shuju1)#添加合并: shuju = shuju1.append([shuju2,shuju3,shuju4],ignore_index=True) # 添加合并 print(shuju)#再查看表數量: print(len(shuju['水表名'].unique())) print(len(shui_biao['水表名'].unique()))'''3 按照水表名分類,統計總用量''' use_water = shuju.groupby(by='水表名')['用量'].sum() # 按照水表名分類,統計總用量 print(use_water)#從高到低排序下: use_water.sort_values(ascending=False)import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體 #mpl.rcParams['font.sans-serif'] = ['Times New Roman'] #Times New Roman字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 import matplotlib; matplotlib.use('TkAgg') #====根據使用繪制直方圖:===== use_water.plot.hist(histtype='bar', rwidth=0.5) plt.savefig('可視化/0.1.png', dpi=300, bbox_inches="tight") plt.show()'''4 對這些功能區的類型進行分析:'''# 全部水表list_table_name = list(shuju['水表名'].unique()) #合并后的數據'''4.1 功能區分類'''#======4.1.1 找到所有宿舍的水表========== list_home = [] #宿舍 list_teaching_build = [] #教學樓 list_teacher_build = [] #活動地方 for name in list_table_name.copy():if name.find("學生宿舍") != -1 or name.find("留學生樓") != -1:list_home.append(name)list_table_name.remove(name) print(list_home)#=======4.1.2 同理,找到教學樓========= for name in list_table_name.copy():if name.find("XX") != -1 and name.find("樓") != -1:print(name)list_teaching_build.append(name)list_table_name.remove(name) print(list_teaching_build)#======4.1.3 農業區================= list_agritural = [] for name in list_table_name.copy():if name.find("養殖") != -1 or name.find("養魚") != -1 or name.find("大棚")!=-1 or name.find("花")!=-1:list_agritural.append(name)list_table_name.remove(name) print(list_agritural)#=======4.1.4 后勤=============== for name in list_table_name.copy():if name.find("樓")!= -1:list_teaching_build.append(name)list_table_name.remove(name) print(list_table_name)#========類型添加上去·:================list_backup = list_table_name name_list = shuju['水表名'].tolist() #.tolist:將數組轉化為列表 type_list = [] for name in name_list:if name in list_backup:type_list.append("后勤")elif name in list_agritural:type_list.append("農業")elif name in list_home:type_list.append('宿舍')elif name in list_teaching_build:type_list.append("活動地方")else:type_list.append('教學樓')shuju['類型'] = pd.Series(type_list) print(shuju)'''4.2 不同類型的用量:''' type_sum = shuju.groupby(by='類型')['用量'].sum() print(type_sum)#===對不同類型可視化:=====type_sum.plot.barh(alpha=0.7) df_group_two = shuju.groupby(by=['類型']) i = 0 colors=['r','g','b','m','c'] plt.figure(figsize=(35, 35), dpi=100) for types ,group in df_group_two:i += 1plt.subplot(3,2,i)group.groupby(by='水表名').sum()["用量"].plot.barh(title=types,color=colors[i-1],alpha=.5) plt.savefig('可視化/1不同類型可視化.png', dpi=300, bbox_inches="tight") plt.show()#分析完把合并后的數據保存起來: shuju.to_csv('data1.txt',index=False) #data1.csv容易數據缺失,所以考慮txt #shuju.to_xlsx('total.xlsx',index=False)#按照時間聚合: shuju['timeStamp'] = pd.to_datetime(shuju['采集時間']) shuju.set_index("timeStamp", inplace=True) data_quarter = shuju.resample("Q") # 時間聚合采樣。.resample:重新采樣,是對原樣本重新處理的一個方法,是一個對常規時間序列數據重新采樣和頻率轉換的便捷的方法。'''4.3 接下來分析每個季度、月份、天數、24小時變化:'''#===4.3.1 季度變化規律:=================== data_quarter.sum()["用量"].plot.line(style="m>-.",alpha=0.5,title="用水量隨著季度變化趨勢") #Q:季度 plt.savefig('可視化/0.2用水量隨著季度變化趨勢.png', dpi=300, bbox_inches="tight") plt.show()#===4.3.2 月份變化規律:=================== data_month = shuju.resample('M').sum()["用量"].plot.line(style="c*-.",alpha=0.5,title="用水量隨著月份變化趨勢") #M:月份 plt.savefig('可視化/0.3用水量隨著月份變化趨勢.png', dpi=300, bbox_inches="tight") plt.show()'''添加具體時間:''' shuju['hour'] = pd.to_datetime(shuju['采集時間']).dt.hour shuju['day'] = pd.to_datetime(shuju['采集時間']).dt.day print(shuju)#====4.3.3 用水量一天隨著小時變化規律:============= shuju.groupby(by='hour').sum()['用量'].plot.line(style="gh-.",alpha=0.5,title="用水量隨著時間變化趨勢") plt.grid() plt.savefig('可視化/0.4用水量一天隨著小時變化規律.png', dpi=300, bbox_inches="tight") plt.show()#=====4.3.4 一個月內用水量隨著天數變化:======= shuju.groupby(by='day').sum()['用量'].plot.line(style="rd-.",alpha=0.5,title="用水量隨著天變化趨勢") plt.grid() plt.savefig('可視化/0.5一個月內用水量隨著天數變化.png', dpi=300, bbox_inches="tight") plt.show()'''4.4 不同區域的特征:''' # 不同區域用水特征#=======4.4.1 不同區域隨著季度用水變化======================= i = 0 styles=['*-.','-.','1-.','2-.','3-.'] plt.figure(figsize=(20, 20), dpi=100) for index,group in shuju.groupby(by='類型'):i += 1plt.subplot(3,2,i)group.resample("Q").sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著季度變化趨勢".format(index)) #四個季度 plt.savefig('可視化/2 不同區域隨著季度用水變化.png', dpi=300, bbox_inches="tight") plt.show()#======4.4.2 不同區域隨著月份用水變化=============== i = 0 plt.figure(figsize=(20, 20), dpi=100) for index,group in shuju.groupby(by='類型'):i += 1plt.subplot(3,2,i)group.resample("M").sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著月份變化趨勢".format(index)) plt.savefig('可視化/3不同區域隨月份變化.png', dpi=300, bbox_inches="tight") plt.show()#=====4.4.3 不同區域隨著每月的天數用水變化============== i = 0 plt.figure(figsize=(20, 20), dpi=100) for index,group in shuju.groupby(by='類型'):i += 1plt.subplot(3,2,i)group.groupby(by='day').sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著天數變化趨勢".format(index))plt.grid() plt.savefig('可視化/4不同區域隨著每月的天數用水變化.png', dpi=300, bbox_inches="tight") plt.show()#=====4.4.4 不同區域隨著每天的時辰用水變化============== i = 0plt.figure(figsize=(20, 20), dpi=100) for index,group in shuju.groupby(by='類型'):i += 1plt.subplot(3,2,i)group.groupby(by='hour').sum()['用量'].plot.line(style="r*-.",alpha=0.5,title="{}用水量隨著時辰變化趨勢".format(index))plt.grid() plt.savefig('5.png', dpi=300, bbox_inches="tight") plt.show()#分析完畢~把數據保存起來: shuju.to_csv('data2.txt',index=False) #data2.csv容易裝不下數據,照成數據缺失 #shuju.to_xlsx('all.xlsx',index=False)


'''1 讀取四個季度數據:'''

import pandas as pd
shuju1=pd.read_excel('一季度.xlsx')
shuju2=pd.read_excel('二季度.xlsx')
shuju3=pd.read_excel('三季度.xlsx')
shuju4=pd.read_excel('四季度.xlsx')
print(shuju1)

#==查看一季度的統計描述:====
#可以得到一季度的最大值、最小值、平均值等信息
print(shuju1.describe())

#==為了快速瀏覽數據集,我們使用dataframe.info()功能===
print(shuju1.info())

#===查看缺失值======
print(shuju1.isnull().sum())

'''2 讀取水表層:'''
shui_biao = pd.read_excel("水表層級.xlsx")
print(shui_biao)

#查看水表有哪些不同類型:
print(shui_biao['水表名'].unique())

#查看四個季度水表名數量:
print(len(shuju1['水表名'].unique()))
print(len(shuju2['水表名'].unique()))
print(len(shuju3['水表名'].unique()))
print(len(shuju4['水表名'].unique()))

#給數據表添加上具體季度更方便觀察:
import numpy as np
# 合并數據
shuju1['季度'] = pd.Series(["一季度" for i in range(len(shuju1.index))])
shuju2['季度'] = pd.Series(["二季度" for i in range(len(shuju2.index))])
shuju3['季度'] = pd.Series(["三季度" for i in range(len(shuju3.index))])
shuju4['季度'] = pd.Series(["四季度" for i in range(len(shuju4.index))])
print(shuju1)

#添加合并:
shuju = shuju1.append([shuju2,shuju3,shuju4],ignore_index=True) # 添加合并
print(shuju)

#再查看表數量:
print(len(shuju['水表名'].unique()))
print(len(shui_biao['水表名'].unique()))

'''3 按照水表名分類,統計總用量'''
use_water = shuju.groupby(by='水表名')['用量'].sum() # 按照水表名分類,統計總用量
print(use_water)

#從高到低排序下:
use_water.sort_values(ascending=False)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] ?# 指定默認字體
#mpl.rcParams['font.sans-serif'] = ['Times New Roman'] #Times New Roman字體
mpl.rcParams['axes.unicode_minus'] = False ?# 解決保存圖像是負號'-'顯示為方塊的問題
import matplotlib; matplotlib.use('TkAgg')
#====根據使用繪制直方圖:=====
use_water.plot.hist(histtype='bar', rwidth=0.5)
plt.savefig('可視化/0.1.png', dpi=300, bbox_inches="tight")
plt.show()

'''4 對這些功能區的類型進行分析:'''

# 全部水表

list_table_name = list(shuju['水表名'].unique()) ?#合并后的數據

'''4.1 功能區分類'''

#======4.1.1 找到所有宿舍的水表==========
list_home = [] ?#宿舍
list_teaching_build = [] ?#教學樓
list_teacher_build = [] ?#活動地方
for name in list_table_name.copy():
? ? if name.find("學生宿舍") != -1 or name.find("留學生樓") != -1:
? ? ? ? list_home.append(name)
? ? ? ? list_table_name.remove(name)
print(list_home)

#=======4.1.2 同理,找到教學樓=========
for name in list_table_name.copy():
? ? if name.find("XX") != -1 and name.find("樓") != -1:
? ? ? ? print(name)
? ? ? ? list_teaching_build.append(name)
? ? ? ? list_table_name.remove(name)
print(list_teaching_build)

#======4.1.3 農業區=================
list_agritural = []
for name in list_table_name.copy():
? ? if name.find("養殖") != -1 or name.find("養魚") != -1 or name.find("大棚")!=-1 or name.find("花")!=-1:
? ? ? ? list_agritural.append(name)
? ? ? ? list_table_name.remove(name)
print(list_agritural)

#=======4.1.4 后勤===============
for name in list_table_name.copy():
? ? if name.find("樓")!= -1:
? ? ? ? list_teaching_build.append(name)
? ? ? ? list_table_name.remove(name)
print(list_table_name)

#========類型添加上去·:================

list_backup = list_table_name
name_list = shuju['水表名'].tolist() ?#.tolist:將數組轉化為列表
type_list = []
for name in name_list:
? ? if name in list_backup:
? ? ? ? type_list.append("后勤")
? ? elif name in list_agritural:
? ? ? ? type_list.append("農業")
? ? elif name in list_home:
? ? ? ? type_list.append('宿舍')
? ? elif name in list_teaching_build:
? ? ? ? type_list.append("活動地方")
? ? else:
? ? ? ? type_list.append('教學樓')

shuju['類型'] = pd.Series(type_list)
print(shuju)

'''4.2 不同類型的用量:'''
type_sum = shuju.groupby(by='類型')['用量'].sum()
print(type_sum)

#===對不同類型可視化:=====

type_sum.plot.barh(alpha=0.7)
df_group_two = shuju.groupby(by=['類型'])
i = 0
colors=['r','g','b','m','c']
plt.figure(figsize=(35, 35), dpi=100)
for types ,group in df_group_two:
? ? i += 1
? ? plt.subplot(3,2,i)
? ? group.groupby(by='水表名').sum()["用量"].plot.barh(title=types,color=colors[i-1],alpha=.5)
plt.savefig('可視化/1不同類型可視化.png', dpi=300, bbox_inches="tight")
plt.show()

#分析完把合并后的數據保存起來:
shuju.to_csv('data1.txt',index=False) ?#data1.csv容易數據缺失,所以考慮txt
#shuju.to_xlsx('total.xlsx',index=False)

#按照時間聚合:
shuju['timeStamp'] = pd.to_datetime(shuju['采集時間'])
shuju.set_index("timeStamp", inplace=True)
data_quarter = shuju.resample("Q") ?# 時間聚合采樣。.resample:重新采樣,是對原樣本重新處理的一個方法,是一個對常規時間序列數據重新采樣和頻率轉換的便捷的方法。


'''4.3 接下來分析每個季度、月份、天數、24小時變化:'''

#===4.3.1 季度變化規律:===================
data_quarter.sum()["用量"].plot.line(style="m>-.",alpha=0.5,title="用水量隨著季度變化趨勢") ?#Q:季度
plt.savefig('可視化/0.2用水量隨著季度變化趨勢.png', dpi=300, bbox_inches="tight")
plt.show()

#===4.3.2 月份變化規律:===================
data_month = shuju.resample('M').sum()["用量"].plot.line(style="c*-.",alpha=0.5,title="用水量隨著月份變化趨勢") ?#M:月份
plt.savefig('可視化/0.3用水量隨著月份變化趨勢.png', dpi=300, bbox_inches="tight")
plt.show()

'''添加具體時間:'''
shuju['hour'] = pd.to_datetime(shuju['采集時間']).dt.hour
shuju['day'] = pd.to_datetime(shuju['采集時間']).dt.day
print(shuju)

#====4.3.3 用水量一天隨著小時變化規律:=============
shuju.groupby(by='hour').sum()['用量'].plot.line(style="gh-.",alpha=0.5,title="用水量隨著時間變化趨勢")
plt.grid()
plt.savefig('可視化/0.4用水量一天隨著小時變化規律.png', dpi=300, bbox_inches="tight")
plt.show()

#=====4.3.4 一個月內用水量隨著天數變化:=======
shuju.groupby(by='day').sum()['用量'].plot.line(style="rd-.",alpha=0.5,title="用水量隨著天變化趨勢")
plt.grid()
plt.savefig('可視化/0.5一個月內用水量隨著天數變化.png', dpi=300, bbox_inches="tight")
plt.show()

'''4.4 不同區域的特征:'''
# 不同區域用水特征

#=======4.4.1 不同區域隨著季度用水變化=======================
i = 0
styles=['*-.','-.','1-.','2-.','3-.']
plt.figure(figsize=(20, 20), dpi=100)
for index,group in shuju.groupby(by='類型'):
? ? i += 1
? ? plt.subplot(3,2,i)
? ? group.resample("Q").sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著季度變化趨勢".format(index)) ?#四個季度
plt.savefig('可視化/2 不同區域隨著季度用水變化.png', dpi=300, bbox_inches="tight")
plt.show()


#======4.4.2 不同區域隨著月份用水變化===============
i = 0
plt.figure(figsize=(20, 20), dpi=100)
for index,group in shuju.groupby(by='類型'):
? ? i += 1
? ? plt.subplot(3,2,i)
? ? group.resample("M").sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著月份變化趨勢".format(index))
plt.savefig('可視化/3不同區域隨月份變化.png', dpi=300, bbox_inches="tight")
plt.show()

#=====4.4.3 不同區域隨著每月的天數用水變化==============
i = 0
plt.figure(figsize=(20, 20), dpi=100)
for index,group in shuju.groupby(by='類型'):
? ? i += 1
? ? plt.subplot(3,2,i)
? ? group.groupby(by='day').sum()['用量'].plot.line(style=styles[i-1],color=colors[i-1],alpha=0.5,title="{}用水量隨著天數變化趨勢".format(index))
? ? plt.grid()
plt.savefig('可視化/4不同區域隨著每月的天數用水變化.png', dpi=300, bbox_inches="tight")
plt.show()

#=====4.4.4 不同區域隨著每天的時辰用水變化==============
i = 0

plt.figure(figsize=(20, 20), dpi=100)
for index,group in shuju.groupby(by='類型'):
? ? i += 1
? ? plt.subplot(3,2,i)
? ? group.groupby(by='hour').sum()['用量'].plot.line(style="r*-.",alpha=0.5,title="{}用水量隨著時辰變化趨勢".format(index))
? ? plt.grid()
plt.savefig('5.png', dpi=300, bbox_inches="tight")
plt.show()

完整數據分享:

鏈接:https://pan.baidu.com/s/1SI8MZZy48e0f2Km3n7gatg?
提取碼:vquz?
--來自百度網盤超級會員V2的分享

#分析完畢~把數據保存起來:
shuju.to_csv('data2.txt',index=False) ? ?#data2.csv容易裝不下數據,照成數據缺失
#shuju.to_xlsx('all.xlsx',index=False)

總結

以上是生活随笔為你收集整理的2020年高教社杯全国大学生数学建模竞赛---校园供水系统智能管理(Python代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。