欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python_GPS轨迹数据的出行模式与OD识别与分析

程序员文章站 2022-11-05 20:10:37
方向明确地理空间大数据应用研究3S技术结合人工智能分析目的与意义1、社会行为研究:通过多维大数据空间分析,挖掘出潜在居民出行信息,判断出行场景,分析出行行为规律和不同人群的出行习惯,进而可以为选址或者规划部门提供技术支持。1、交通规划方面:通过深度学习算法完成出行方式识别,为基于位置服务、交通规划、智能交通管理、交通决策等方面提供数据及有效决策支持。OD空间分析提取OD点数据并生成OD线,对其进行查询统计与空间分析;使用OD矩阵生成网络图和OD图进一步分析。具体步骤1、将python处...

方向明确

地理空间大数据应用研究
3S技术结合人工智能分析

目的与意义

1、社会行为研究:
通过多维大数据空间分析,挖掘出潜在居民出行信息,判断出行场景,分析出行行为规律和不同人群的出行习惯,进而可以为选址或者规划部门提供技术支持。

1、交通规划方面:
通过深度学习算法完成出行方式识别,为基于位置服务、交通规划、智能交通管理、交通决策等方面提供数据及有效决策支持。

OD空间分析

提取OD点数据并生成OD线,对其进行查询统计与空间分析;使用OD矩阵生成网络图和OD图进一步分析。
具体步骤
1、将python处理得到csv数据转为带投影的shp数据完成空间分析
2、对映射后OD数据分级渲染
3、生成OD线
4、生成OD网络

原始数据:

Python_GPS轨迹数据的出行模式与OD识别与分析

处理后的数据:

Python_GPS轨迹数据的出行模式与OD识别与分析

将原始数据处理成OD形式

#coding=utf-8
import sys

import pandas as pd

sys.path.append(r"lib")
import csv

def writeCSV(relate_record, src):
    with open(src, 'a', newline='\n') as csvfile:
        writer = csv.writer(csvfile)
        for row in relate_record:
            try:
                writer.writerow(row)
            except Exception as e:
                print(e)
                print(row)

def mergeData(df3,file):
    # cards = pd.read_csv(save + file, usecols=[0],names=['id'])['id'].tolist()
    df3 = df3.groupby('id')
    for name, df4 in df3:
        # if name not in cards:
            i = 0
            one = []
            while i < df4.shape[0] - 1:
                typeS = df4.iat[i, 5]
                typeE = df4.iat[i+1, 5]
                if typeS == 'S' and typeE == 'T':
                    left = df4.iloc[i].tolist()
                    right = df4.iloc[i + 1].tolist()
                    left[len(left):len(left)] = right
                    one.append(left)
                    i += 2
                else:
                    i += 1
            writeCSV(one,'viaOD1.csv')

df = pd.read_csv('labels.csv')
# df = df[df.type.isin(['S', 'T'])]
# df['longitude'] = df['longitude'].map(lambda x: int(x/1000))
mergeData(df, 'labels.csv')
tmp_lst = []
with open('viaOD1.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        tmp_lst.append(row)
df = pd.DataFrame(tmp_lst[1:], columns=tmp_lst[0])
df.columns = ['Numo', 'OLAT', 'OLON', 'OTime', 'OSpeed', 'OType', 'OTrans', 'OName1', 'OName2','Numd','DLAT', 'DLON',
               'DTime', 'DSpeed', 'DType', 'DTrans', 'DName1', 'DName2']
df.to_csv('viaod2.csv')
df1=pd.read_csv('viaod2.csv')
cols=['TripID']+list(df1.columns)
df1.index +=1
df1['TripID']=df1.index
df2=df1[cols]
df2.to_csv('BJOD.csv')

data=pd.read_csv('BJOD.csv',usecols=['TripID','Numo', 'OLAT', 'OLON', 'OTime', 'OSpeed', 'OType', 'OTrans', 'OName1', 'OName2'])
data.to_csv('O.csv')
data2=pd.read_csv('BJOD.csv',usecols=['TripID','Numd','DLAT', 'DLON','DTime', 'DSpeed', 'DType', 'DTrans', 'DName1', 'DName2'])
data2.to_csv('D.csv')

按街道和区分组和连接OD

import csv

import pandas as pd

tmp_lst = []
with open('BJOD.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        tmp_lst.append(row)
df = pd.DataFrame(tmp_lst[1:], columns=tmp_lst[0])

OD_RESULT = df.groupby(['OName1', 'DName1']).count()['TripID'].reset_index()
OD_RESULT.columns = ['Source', 'Target', 'weight']
OD_RESULT = OD_RESULT[OD_RESULT['weight'] > 0].reset_index(drop=True)
OD_RESULT = OD_RESULT.sort_values(by='weight').reset_index(drop=True)
OD_RESULT.to_csv('GroupOD1.csv')

'''
根据行政区分组
'''
OD_RESULT2 = df.groupby(['OName2', 'DName2']).count()['TripID'].reset_index()
OD_RESULT2.columns = ['Source', 'Target', 'weight']
OD_RESULT2 = OD_RESULT2[OD_RESULT2['weight'] > 0].reset_index(drop=True)
OD_RESULT2 = OD_RESULT2.sort_values(by='weight').reset_index(drop=True)
OD_RESULT2.to_csv('GroupOD2.csv')

'''
将街区单元经纬度groupOD1相连接
'''
tmp_lst = []
with open('Road.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        tmp_lst.append(row)
Union_Location = pd.DataFrame(tmp_lst[1:], columns=tmp_lst[0])
Union_Location.columns = ['Source', 'SLng', 'SLat']
OD_RESULT_LATLON = OD_RESULT.merge(Union_Location, on='Source')
Union_Location.columns = ['Target', 'TLng', 'TLat']
OD_RESULT_LATLON = OD_RESULT_LATLON.merge(Union_Location, on='Target')
OD_RESULT_LATLON.to_csv('OD_LATLON1.csv')

'''
将行政区经纬度groupOD2相连接
'''
tmp_lst = []
with open('area.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        tmp_lst.append(row)
Union_Location = pd.DataFrame(tmp_lst[1:], columns=tmp_lst[0])
Union_Location.columns = ['Source', 'SLng', 'SLat']
OD_RESULT_LATLON2 = OD_RESULT2.merge(Union_Location, on='Source')
Union_Location.columns = ['Target', 'TLng', 'TLat']
OD_RESULT_LATLON2 = OD_RESULT_LATLON2.merge(Union_Location, on='Target')
OD_RESULT_LATLON2.to_csv('OD_LATLON2.csv')

北京各个区的OD效果图

Python_GPS轨迹数据的出行模式与OD识别与分析

北京各个街道的OD效果图

Python_GPS轨迹数据的出行模式与OD识别与分析
如需完整代码和数据示例请私聊我,如有问题可评论
如果比较急的话请打开我其他文章获得我的联系方式

本文地址:https://blog.csdn.net/qq_30803353/article/details/107434916