# Transbigdata Taxi

> 使用 TransBigData 处理出租车 GPS 数据。适用于出租车状态清洗、OD 提取、载客/空驶轨迹分离等任务。

- Skill: `ni1o1/transbigdata-taxi` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ni1o1/transbigdata-taxi`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ni1o1/transbigdata-taxi/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ni1o1 (https://skillmd.com/u/ni1o1)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/ni1o1/transbigdata-taxi

---


# TransBigData 出租车数据处理指南

## 安装

```bash
pip install transbigdata
```

## 出租车 GPS 数据格式

典型的出租车 GPS 数据包含以下字段：

| 字段 | 说明 |
|------|------|
| VehicleNum | 车辆编号 |
| Time | GPS 时间 |
| Lng | 经度 |
| Lat | 纬度 |
| OpenStatus | 载客状态（1=载客，0=空车） |

## 核心函数

### 1. 状态清洗 - `clean_taxi_status()`

删除载客状态瞬间变化的异常记录（如上下客过快）。

```python
import transbigdata as tbd

data_clean = tbd.clean_taxi_status(
    data,
    col=['VehicleNum', 'Time', 'OpenStatus'],
    timelimit=60  # 时间阈值（秒），前后记录间隔小于此值则删除
)
```

### 2. OD 提取 - `taxigps_to_od()`

从 GPS 轨迹中提取载客行程的起终点（OD）。

```python
od_data = tbd.taxigps_to_od(
    data,
    col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus']
)
```

**返回字段**:
- `VehicleNum`: 车辆编号
- `stime`, `etime`: 上客/下客时间
- `slon`, `slat`: 上客位置
- `elon`, `elat`: 下客位置

### 3. 轨迹点提取 - `taxigps_traj_point()`

分离载客轨迹和空驶轨迹。

```python
# 先提取 OD
od_data = tbd.taxigps_to_od(data, col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus'])

# 提取轨迹点
data_deliver, data_idle = tbd.taxigps_traj_point(
    data,
    od_data,
    col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus']
)
# data_deliver: 载客轨迹
# data_idle: 空驶轨迹
```

## 完整示例：出租车数据分析流程

```python
import pandas as pd
import geopandas as gpd
import transbigdata as tbd
import matplotlib.pyplot as plt

# 1. 加载数据
data = pd.read_csv('taxi_gps.csv')
data['Time'] = pd.to_datetime(data['Time'])

# 2. 数据质量检查
print(f"原始数据: {len(data)} 条")
tbd.data_summary(data, col=['VehicleNum', 'Time'])

# 3. 边界过滤（深圳范围）
bounds = [113.75, 22.4, 114.62, 22.86]
data = tbd.clean_outofbounds(data, bounds=bounds, col=['Lng', 'Lat'])
print(f"边界过滤后: {len(data)} 条")

# 4. 状态清洗
data = tbd.clean_taxi_status(
    data,
    col=['VehicleNum', 'Time', 'OpenStatus'],
    timelimit=60
)
print(f"状态清洗后: {len(data)} 条")

# 5. 提取 OD
od_data = tbd.taxigps_to_od(
    data,
    col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus']
)
print(f"提取 OD: {len(od_data)} 条")

# 6. 分离载客/空驶轨迹
data_deliver, data_idle = tbd.taxigps_traj_point(
    data, od_data,
    col=['VehicleNum', 'Time', 'Lng', 'Lat', 'OpenStatus']
)
print(f"载客轨迹: {len(data_deliver)} 点, 空驶轨迹: {len(data_idle)} 点")

# 7. OD 栅格化（500米）
params = tbd.area_to_params(bounds, accuracy=500)

# 上客点聚合
od_data['LONCOL_s'], od_data['LATCOL_s'] = tbd.GPS_to_grid(
    od_data['slon'], od_data['slat'], params
)
pickup = od_data.groupby(['LONCOL_s', 'LATCOL_s']).size().reset_index(name='count')
pickup['geometry'] = tbd.grid_to_polygon(
    [pickup['LONCOL_s'], pickup['LATCOL_s']], params
)
pickup_gdf = gpd.GeoDataFrame(pickup, geometry='geometry', crs='EPSG:4326')

# 8. 可视化上客热力图
fig, ax = plt.subplots(figsize=(12, 10))
tbd.plot_map(plt, bounds, zoom=12, style=4)
pickup_gdf.plot(ax=ax, column='count', cmap='YlOrRd', alpha=0.7, legend=True)
tbd.plotscale(ax, bounds=bounds)
plt.title('出租车上客点热力图 (500m栅格)')
plt.show()

# 9. 保存结果
od_data.to_csv('taxi_od.csv', index=False)
```

## OD 分析进阶

### OD 栅格聚合 - `odagg_grid()`

```python
# 聚合 OD 并生成几何
od_agg = tbd.odagg_grid(
    od_data,
    params,
    col=['slon', 'slat', 'elon', 'elat'],
    arrow=True  # 生成箭头几何
)
```

### OD 区域聚合 - `odagg_shape()`

```python
# 按行政区聚合
districts = gpd.read_file('districts.shp')
od_district = tbd.odagg_shape(
    od_data,
    districts,
    col=['slon', 'slat', 'elon', 'elat']
)
```

## 使用建议

1. **数据清洗顺序**:
   - 边界过滤 → 状态清洗 → OD 提取

2. **状态清洗参数**:
   - `timelimit=60` 适合大多数情况
   - 如果数据采样频率低，可适当增大

3. **OD 分析**:
   - 500米栅格适合城市级分析
   - 1公里栅格适合区域级分析

4. **轨迹分离**:
   - 载客轨迹可用于分析出行模式
   - 空驶轨迹可用于分析司机巡游策略

## 参考文档

完整文档: https://transbigdata.readthedocs.io/en/latest/taxigps.html

