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

方向明确

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

目的与意义

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

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

OD空间分析

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

北京各个区的OD效果图

北京各个街道的OD效果图

北京各个街道的OD效果图
如需完整代码和数据示例请私聊我,如有问题可评论
如果比较急的话请打开我其他文章获得我的联系方式

猜你喜欢

转载自blog.csdn.net/qq_30803353/article/details/107434916
今日推荐