文章目录
- 执行过程
- preprocess.jl 解释
- h5 文件结构
执行过程
(base) zzq@server1:~/project/t2vec/preprocessing$ julia porto2h5.jl
Processing 1710660 trips…
100000
200000
300000
400000
500000
600000
700000
800000
900000
1000000
1100000
1200000
1300000
1400000
1500000
1600000
1700000
Incompleted trip: 0.
Saved 1704759 trips.
(base) zzq@server1:~/project/t2vec/preprocessing$ julia preprocess.jl
Please provide the correct hdf5 file /home/xiucheng/Github/t2vec/data/porto.h5
(base) zzq@server1:~/project/t2vec/preprocessing$ julia preprocess.jl
Building spatial region with:
cityname=porto,
minlon=-8.735152,
minlat=40.953673,
maxlon=-8.156309,
maxlat=41.307945,
xstep=100.0,
ystep=100.0,
minfreq=100
Creating paramter file /home/zzq/project/t2vec/data/porto-param-cell100
Processed 100000 trips
Processed 200000 trips
Processed 300000 trips
Processed 400000 trips
Processed 500000 trips
Processed 600000 trips
Processed 700000 trips
Processed 800000 trips
Processed 900000 trips
Processed 1000000 trips
Processed 1100000 trips
Processed 1200000 trips
Processed 1300000 trips
Processed 1400000 trips
Processed 1500000 trips
Processed 1600000 trips
Processed 1700000 trips
Cell count at max_num_hotcells:40000 is 7
Vocabulary size 18866 with cell size 100.0 (meters)
Creating training and validation datasets…
Scaned 200000 trips…
Scaned 300000 trips…
Scaned 400000 trips…
Scaned 500000 trips…
Scaned 600000 trips…
Scaned 700000 trips…
Scaned 900000 trips…
Scaned 1000000 trips…
Saved cell distance into /home/zzq/project/t2vec/data/porto-vocab-dist-cell100.h5
preprocess.jl 解释
这段代码是用于构建和训练一个空间区域的模型,主要包含以下步骤:
-
导入必要的Julia包:
using JSON using DataStructures using NearestNeighbors using Serialization, ArgParse include("SpatialRegionTools.jl")
-
通过ArgParse库解析命令行参数:
args = let s = ArgParseSettings() @add_arg_table s begin "--datapath" arg_type=String default="/home/zzq/project/t2vec/data" end parse_args(s; as_symbols=true) end
这段代码使用ArgParse库来解析命令行参数。
--datapath
是一个可选参数,表示数据的存储路径,默认为 “/home/zzq/project/t2vec/data”。 -
读取JSON格式的超参数文件(“…/hyper-parameters.json”):
param = JSON.parsefile("../hyper-parameters.json")
这里假设存在一个超参数文件,通过JSON库解析超参数。
-
从超参数中提取有关空间区域的信息:
regionps = param["region"] cityname = regionps["cityname"] cellsize = regionps["cellsize"]
获取城市名称、单元格大小等信息。
-
检查是否存在 HDF5 文件,如果不存在则退出:
if !isfile("$datapath/$cityname.h5") println("Please provide the correct hdf5 file $datapath/$cityname.h5") exit(1) end
-
使用提取的信息构建一个 SpatialRegion 对象:
region = SpatialRegion(cityname, regionps["minlon"], regionps["minlat"], regionps["maxlon"], regionps["maxlat"], cellsize, cellsize, regionps["minfreq"], # minfreq 40_000, # maxvocab_size 10, # k 4) # vocab_start
这里创建了一个
SpatialRegion
对象,用于表示一个空间区域,包含了区域的地理信息和一些超参数。 -
输出空间区域的信息:
println("Building spatial region with: cityname=$(region.name), minlon=$(region.minlon), minlat=$(region.minlat), maxlon=$(region.maxlon), maxlat=$(region.maxlat), xstep=$(region.xstep), ystep=$(region.ystep), minfreq=$(region.minfreq)")
这段代码输出构建的空间区域的一些关键信息。
-
检查是否存在先前保存的参数文件,如果存在则读取参数文件,否则创建并保存参数文件:
paramfile = "$datapath/$(region.name)-param-cell$(Int(cellsize))" if isfile(paramfile) println("Reading parameter file from $paramfile") region = deserialize(paramfile) else println("Creating parameter file $paramfile") num_out_region = makeVocab!(region, "$datapath/$cityname.h5") serialize(paramfile, region) end
如果存在参数文件,则从文件中读取参数,否则创建参数并保存到文件中。
-
输出词汇表的大小和单元格大小:
println("Vocabulary size $(region.vocab_size) with cell size $cellsize (meters)")
输出词汇表的大小和单元格大小。
-
创建训练和验证数据集:
println("Creating training and validation datasets...") createTrainVal(region, "$datapath/$cityname.h5", datapath, downsamplingDistort, 1_000_000, 10_000)
这里调用
createTrainVal
函数创建训练和验证数据集。 -
保存最近邻词汇:
saveKNearestVocabs(region, datapath)
最后,保存最近邻的词汇。
训练未开始时目录结构
h5 文件结构
根据你提供的Julia代码,使用h5open
函数创建了一个HDF5文件,并将处理后的数据存储到文件中。下面是生成的HDF5文件的组和数据集结构的大致描述:
-
组结构:
/trips
: 存储处理后的行程数据。/timestamps
: 存储每个行程的时间戳数据。
-
数据集结构:
/trips/1
: 第一个行程的数据。/timestamps/1
: 第一个行程对应的时间戳数据。/trips/2
: 第二个行程的数据。/timestamps/2
: 第二个行程对应的时间戳数据。- 以此类推…
-
属性:
- 文件属性:
num
属性存储了总共存储的行程数目。
- 文件属性:
根据代码中的逻辑,每个行程都被存储为两个数据集:/trips/$num
和 /timestamps/$num
。这里的 $num
是行程的编号,从1开始递增。
要注意的是,这里的时间戳数据 /timestamps/$num
是通过生成一个等差数列 collect(0:tripLength-1) * 15.0
得到的,15.0 是一个时间间隔的倍数。这是基于时间戳的假设,具体的时间间隔可能需要根据你的数据集的特点进行调整。
请注意,具体的组织结构可能取决于你的数据和代码的具体实现。你可以使用h5py或其他HDF5文件阅读工具来查看生成的HDF5文件的详细结构。