分析并可視化機場離場車輛數數據
本文將詳細介紹如何使用Python的正則表達式庫re
和繪圖庫matplotlib
對機場離場車輛數數據進行分析和可視化。以下是具體步驟和代碼實現。
數據資源:
鏈接:https://pan.baidu.com/s/1rU-PRhrVSXq-8YdR6obc6Q?pwd=1234
提取碼:1234
1. 導入必要的庫
首先,我們需要導入用于數據處理和繪圖的庫:
import re
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.font_manager as fm
2. 讀取文件內容
假設我們有兩個文件,分別是鄭州機場9月14上午原始數據.txt
和鄭州機場9月14下午原始數據.txt
,其中包含了機場的離場車輛數數據。我們需要讀取這兩個文件的內容并合并:
# 文件路徑
file_paths = ['鄭州機場9月14上午原始數據.txt', '鄭州機場9月14下午原始數據.txt']# 初始化數據列表
data = ''# 讀取文件內容
for file_path in file_paths:with open(file_path, 'r', encoding='utf-8') as file:data += file.read() # 讀取文件中的所有內容并合并
# 若沒有文件,先用一下數據代替
# 示例數據
# data = """
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:40:19) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:40:30) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:40:41) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:40:52) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:41:04) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:41:15) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:41:26) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:41:39) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:41:50) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:01) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:12) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:22) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:0 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:34) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:45) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:42:57) 場內待運車輛數為:80 輛; 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:43:08) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:43:19) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:19 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:43:30) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:43:41) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:43:53) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:44:05) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:44:16) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:44:27) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:44:38) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:44:50) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輛; 前半小時離場車輛數為:1 輛;
# 鄭州機場出租車秩序管理站 截止目前為止(2019-09-14 07:45:01) 場內待運車輛數為:81 輛(場內待運較多); 前半小時進場車輛數為:18 輔輛; 前半小時離場車輛數為:1 輛;
# """
3. 使用正則表達式匹配數據
我們使用正則表達式來提取文件中的時間戳和前半小時離場車輛數。這里的正則表達式模式匹配類似于(2023-09-14 08:30:00)前半小時離場車輛數為:123 輛;
的文本。
# 正則表達式匹配時間和前半小時離場車輛數
pattern = r"((\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})).*?前半小時離場車輛數為:(\d+) 輛;"
matches = re.findall(pattern, data) # 使用正則表達式查找所有匹配的模式
4. 解析匹配結果
將匹配到的時間字符串轉換為datetime
對象,并將離場車輛數轉換為整數:
# 解析匹配結果
timestamps = [datetime.strptime(match[0], "%Y-%m-%d %H:%M:%S") for match in matches] # 將匹配到的時間字符串轉換為datetime對象
leaving_counts = [int(match[1]) for match in matches] # 將匹配到的離場車輛數轉換為整數
5. 設置字體
為了支持中文顯示,我們需要設置字體。這里假設我們使用的是SimHei字體:
# 設置字體
font_path = 'C:/Windows/Fonts/simhei.ttf' # 你可以根據需要更改字體路徑
font_prop = fm.FontProperties(fname=font_path) # 創建字體屬性對象
6. 繪制折線圖
使用matplotlib
繪制離場車輛數隨時間變化的折線圖:
# 繪制折線圖
plt.figure(figsize=(10, 6)) # 設置圖表大小
plt.plot(timestamps, leaving_counts, marker='o', markersize=1, linestyle='-', color='b') # 繪制折線圖,設置節點樣式和顏色
plt.title("前半小時離場車輛數隨時間的變化", fontproperties=font_prop) # 設置圖表標題
plt.xlabel("時間", fontproperties=font_prop) # 設置X軸標簽
plt.ylabel("前半小時離場車輛數", fontproperties=font_prop) # 設置Y軸標簽
plt.grid(True) # 顯示網格
plt.xticks(rotation=45, fontproperties=font_prop) # 旋轉X軸刻度標簽以防止重疊
plt.yticks(fontproperties=font_prop) # 設置Y軸刻度標簽的字體
plt.tight_layout() # 自動調整子圖參數以適應圖形區域# 調整邊距以確保字體不被遮蓋
plt.subplots_adjust(left=0.15, bottom=0.2) # 調整圖表的左邊距和下邊距# 保存圖片
plt.savefig('離場車輛數變化圖.png') # 將圖表保存為PNG文件# 顯示圖表
plt.show() # 顯示圖表
7. 完整代碼
以下是完整的代碼片段,包含了從讀取數據到繪制并保存圖表的所有步驟:
import re
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.font_manager as fm# 文件路徑
file_paths = ['鄭州機場9月14上午原始數據.txt', '鄭州機場9月14下午原始數據.txt']# 初始化數據列表
data = ''# 讀取文件內容
for file_path in file_paths:with open(file_path, 'r', encoding='utf-8') as file:data += file.read() # 讀取文件中的所有內容并合并# 正則表達式匹配時間和前半小時離場車輛數
pattern = r"((\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})).*?前半小時離場車輛數為:(\d+) 輛;"
matches = re.findall(pattern, data) # 使用正則表達式查找所有匹配的模式# 解析匹配結果
timestamps = [datetime.strptime(match[0], "%Y-%m-%d %H:%M:%S") for match in matches] # 將匹配到的時間字符串轉換為datetime對象
leaving_counts = [int(match[1]) for match in matches] # 將匹配到的離場車輛數轉換為整數# 設置字體
font_path = 'C:/Windows/Fonts/simhei.ttf' # 你可以根據需要更改字體路徑
font_prop = fm.FontProperties(fname=font_path) # 創建字體屬性對象# 繪制折線圖
plt.figure(figsize=(10, 6)) # 設置圖表大小
plt.plot(timestamps, leaving_counts, marker='o', markersize=1, linestyle='-', color='b') # 繪制折線圖,設置節點樣式和顏色
plt.title("前半小時離場車輛數隨時間的變化", fontproperties=font_prop) # 設置圖表標題
plt.xlabel("時間", fontproperties=font_prop) # 設置X軸標簽
plt.ylabel("前半小時離場車輛數", fontproperties=font_prop) # 設置Y軸標簽
plt.grid(True) # 顯示網格
plt.xticks(rotation=45, fontproperties=font_prop) # 旋轉X軸刻度標簽以防止重疊
plt.yticks(fontproperties=font_prop) # 設置Y軸刻度標簽的字體
plt.tight_layout() # 自動調整子圖參數以適應圖形區域# 調整邊距以確保字體不被遮蓋
plt.subplots_adjust(left=0.15, bottom=0.2) # 調整圖表的左邊距和下邊距# 保存圖片
plt.savefig('離場車輛數變化圖.png') # 將圖表保存為PNG文件# 顯示圖表
plt.show() # 顯示圖表
通過以上步驟,我們實現了從原始數據文件中提取數據并繪制離場車輛數隨時間變化的折線圖。這樣的方法不僅可以用于分析機場的交通情況,還可以應用于其他類似的數據分析場景。