为了研究非正常活动造成的突然涌入对周边地铁站出站人数的影响,我对2022年历史时间段OD(始发地-目的地)数据进行了预筛选,以找出异常出站人流以及每个车站相应的出口数量。我的目标是使用Python中的FDA(功能数据分析)包对这些异常数据进行时间序列分析,然后训练一个模型来预测未来类似的异常进入事件中退出的人数。
我应该如何预处理这些数据以将其转换为 FDA 可以处理的时间序列训练数据?
import pandas as pd
import skfda
from skfda.preprocessing.dim_reduction.projection import FPCA
# 假設 df 是您已經有的 DataFrame
# 並且 stations 是上述提供的站點列表
df = pd.read_csv('D:/論文資料/CODE/資料處理/2022北捷進出OD/2022_15分鐘/2022活動異常運量分析資料.csv')
df.to_csv('D:/論文資料/CODE/資料處理/2022北捷進出OD/2022_15分鐘/2022活動異常運量分析資料_processed.csv', index=False,encoding='utf-8-sig')
# 將 '分秒' 這一列的名稱改為 '分'
df.rename(columns={'分秒': '分'}, inplace=True)
df.rename(columns={'人次': '出站人次'}, inplace=True)
df['進站'] = df['進站'].replace('台北101/世貿', '台北101_世貿')
df['日期'] = pd.to_datetime(df['日期'])
df['時段_timedelta'] = pd.to_timedelta(df['時段'], unit='h')
df['分_timedelta'] = pd.to_timedelta(df['分'], unit='m')
# 現在結合日期、時段、分鐘和秒鐘
df['完整時間戳記'] = df['日期'] + df['時段_timedelta'] + df['分_timedelta']
# 移除 '時段' 和 '分' 列
df.drop(['時段_timedelta', '分_timedelta'], axis=1, inplace=True)
# 顯示更新後的 DataFrame
print(df[['日期', '時段', '分', '完整時間戳記']])
# 確定儲存 CSV 檔案的目錄
output_dir = 'D:/論文資料/CODE/資料處理/2022北捷進出OD/異常運量各站訓練'
stations = [
"大安森林公園", "三重", "劍潭", "芝山", "台北小巨蛋", "麟光", "動物園",
"劍南路", "圓山", "北門", "大橋頭站", "雙連", "台北橋", "公館", "紅樹林",
"淡水", "南港展覽館", "中正紀念堂", "士林", "南勢角", "忠孝敦化", "國父紀念館",
"市政府", "唭哩岸", "善導寺", "南京三民", "南港軟體園區", "BL板橋", "Y板橋",
"台北101_世貿", "府中", "台北車站", "西門", "六張犁", "竹圍", "永春",
"象山", "信義安和", "松山", "南京復興", "忠孝復興", "大安", "忠孝新生"
]
for station in stations:
# 從 DataFrame 中選擇 '進站' 列匹配當前站點的所有行
station_data = df[df['進站'] == station]
# 建立 CSV 檔案的完整路徑
filepath = f"{output_dir}/{station}.csv"
# 將這些行匯出為 CSV,並指定編碼為 'utf-8-sig'
station_data.to_csv(filepath, index=False, encoding='utf-8-sig')
我尝试对历史数据进行预处理,过滤掉由事件引起的异常条目,并计算每个站点的出口相对于条目总数的比例。此外,我已经预先标记了完整的时间戳。
最终目标是使用训练数据来预测特定站点的未来发生情况。当突然出现入站流量时,预测其他站点的出站人数。
奇怪的是,我和我的项目合作伙伴正在研究几乎相同的主题,并且我们陷入了同样的问题。我们正在尝试通过 FDA 预测伊斯坦布尔的交通拥堵情况。我想知道您是否找到了答案的解决方案。因为如果你能与我分享,你会对我有很大帮助!