pandas实战:出租车GPS数据分析

出租车GPS轨迹数据分析 1.在出租车轨迹数据预处理完后,提取数据的时间属性,时间细粒度可以为一小时/半小时,统计每个时间细粒度内的采样点的数目,采用python matplotlib绘制采样点数目(即流量)随时间的动态变化的折现图,统计早高峰时间区间和晚高峰的时间区间; 2.探索数据的空间分布规律,采用leaflet.js将采样点绘制到地图上。 阅读详情

一、数据背景

数据表的变量含义如下。

  • id:车辆编号,唯一标识

  • time:GPS采集时间

  • long:GPS经度

  • lati:GPS纬度

  • status:载客状态,1为载客,0为空客

  • speed:采集的GPS车速

首先读取数据,由于原数据没有header,直接就是数据,因此需设置为None,然后手动添加列索引名称。

# 读取数据  
hd = ['id','time','long','lati','status','speed']   
df = pd.read_csv('taxi.csv', header=None, names=hd)   

数据来源:《交通时空大数据分析、挖掘与可视化》

看下数据整体情况。

df.info()  

共54.5万条数据,没有缺失的变量,且类型除时间time以外都是数值型。

接着看下具体数据,猜测和理解下业务场景,并了解数据的形式。

# 查看前20行      
df.head(20)  

通过以上数据,我们可以发现:

  • 获取方式:这个数据是通过出租车上的机器(比如传感器)采集的GPS信息,并且每隔一段时间进行采集和上报,采集频率不固定。

  • 时间数据:每个采集时间都提供了经纬度、载客状态、和车速信息,是一组时间序列数据,但仔细发现原数据时间没有排序。

  • 车辆行驶:经纬度、车速随着车的行驶状态动态变化,比如车停了等红灯车速变为0,经纬度也保持不变,车开起来了车速和经纬度会实时变化。

  • 载客状态:根据是否有乘客上车而发生变化,与车辆行驶状态没有任何关系。 出租车的初始状态是0的话,如果有乘客上车,那么载客状态变为1,并且在乘客未下车之前机器采集上报的状态会一直是1,直到乘客下车为止才会再变为0,然后循环反复。

以上是我们对数据的简单理解。

二、数据处理

1)排序

原始数据的时间未进行排序,所以我们无法观察车辆行驶或载客状态的规律,首先需要进行排序。

需求1:对id和time进行升序排序,然后重置索引

# 排序  
df = df.sort_values(by = ['id','time']).reset_index(drop=True)  
df.head(10)  

可以看到time已经按照升序排序了,索引重置为0,1,…,n。

2)类型转换

前面我们发现time变量是object类型,不利于我们做日期的操作,因此我们要转换为时间戳类型。

需求2:将time变量转换为时间戳类型

使用to_datetime方法实现类型转,具体用法可参考传送门。

# 转换日期类型  
df['time'] = pd.to_datetime(df['time'])  

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原数据的time只有时分秒,没有年月日,因此转换后的年月日默认使用了当前日期。

3)重复值

原数据的重复数据较为复杂,常规简单的去重方法无法实现,因此下面通过需求3-7分步骤完成。

需求3:查询id和time重复数据的数量

理论上说,id和time都一样就是重复的数据,因为时间是按一定频率采样的,一个车辆在一个时间点只对应一条数据。因此设置subset子集对id和time查重,同时设置keep=False保留全部重复数据。查重的具体用法可参考。

df_dup = df[df.duplicated(subset=['id','time'], keep=False)==True].reset_index()  
df_dup.shape  
------  
(910, 6)  

重复数据全部保留共有910条(这里使用reset_index将原数据df的索引变为变量,后面去重时有用)。

仔细观察发现,重复数据在id和time相同的情况下,其他变量还存在多种不同形式(如下图红框),形式总结如下。

  • status相同都是0或都是1,但经纬度、车速可能不同

  • status不同,是1和0,但经纬度、车速相同

那具体该保留哪个,去除哪个呢?

这需要我们找到一个保留或去除的判断依据。

这里我们尝试通过status的前后变化对重复数据进行判断和筛选。一是因为同一时间不可能有两个载客状态,二是status变化频率低利于观察。

发现了几种不同的形式,我们如何处理呢?

根据status前后变化的规律,处理方式如下:

  • status相同时,但经纬度和车速不同时,删除其一即可,因为采样频率过低无法具体判断哪个是准确的。

  • status不同时,但经纬度和车速相同时,删除时间序列下status异常数据,因为乘客坐车需要时间,载客状态不可能在极短的时间内突然变化。比如,时序下的status为0001000,中间突然出现一个1,那么删除1所在行。同理1110111突然出现一个0,那么删除0所在行(这部分也算是异常值,只不过与重复值交叉同时出现了)。

需求4:对重复数据进行分组的重复数量统计,检查是否有3个以上(包含)重复的

以上重复数据的数量都是2个,那有没有大于2个重复的呢?

数据量太多,肉眼无法观察,我们通过以下语句判断。

(df_dup.groupby(['id','time'])['status'].count()==2).all()  
------  
False  

对id和time分组统计重复数量,是否全部等于2,结果并不是,说明存在大于2个重复的数据。

需求5:筛选出重复数量大于2的数据

既然还存在大于2个重复的数据,那也必须一探究竟,可能形式更复杂。

(  
    df_dup.groupby(['id','time'])['status'].count()  
          .reset_index()  
          .pipe(lambda x:x.loc[x.status>2])  
)  

id和time分组下有6个重复数量为3的,且最大重复数量就是3了。

对于该情况下status前后的变化情况就需要逐个筛选去看了,这里数量不多大家可以自行观察数据。

经过观察后,我们可以这样做去重的处理:

  • 如果status全部相同,那么任意选一个,比如选第一个

  • 如果status不同,那么基于少数服从多数原则,从多个值里选择一个。比如时序的status值分别为101/110/011,从两个1中选其一;再比如status为001/100/010,从两个0中选其一。

至此,查重部分结束。我们发现了一些规律并且制定了去重的逻辑,那么如何实现去重呢?

需求6:对id和time分组统计status个数、求和,与重复数据df_dup匹配合并

很显然,在这种复杂的情况下直接用drop_duplicates是不管用的,所以我们必须想其他的方法。

下面我们通过加工一组特征来辅助我们进行去重的筛选,对id和time分组统计status个数、求和。

dup_grp = (  
    df_dup.groupby(['id','time'])  
          .agg(stat_cnt=('status','count'),stat_sum=('status','sum'))  
          .reset_index())  

加工结果如下,每个唯一的id和time组合都对应着stat_cnt和stat_sum两个特征,根据两个特征值的不同组合就可以判断重复的不同情况了(如图)。

然后我们再通过merge用法将特征值匹配到重复数据df_dup上。

dup_mrg = pd.merge(df_dup, dup_grp, on=['id','time'], how='left')  
dup_mrg.head(6)  

需求7:根据以上需求3和5中查重的判断逻辑对重复数据筛选,返回需要保留的行索引

这里是去重的最后一步了,前面的处理都是为了这一步的逻辑判断。

可以想到用groupby+apply的方法组合对重复数据分组聚合来进行筛选,结果返回需要保留数据的原数据索引(在需求3中已经重置索引)。

def dup_check(x):  
    if (x.stat_cnt.max() == 2) & (x.stat_sum.max() == 0): #重复数量为2,status均为0,返回第一个索引  
        return x['index'].values[0]  
    elif (x.stat_cnt.max() == 2) & (x.stat_sum.max() == 1):  #重复数量为2,status为10,返回0值的索引  
        return x.loc[x.status==0,'index'].values[0]  
    elif (x.stat_cnt.max() == 2) & (x.stat_sum.max() == 2): #重复数量为2,status均为1,返回第一个索引  
        return x['index'].values[0]  
    elif (x.stat_cnt.max() == 3) & (x.stat_sum.max() == 0): #重复数量为3,status均为0,返回第一个索引  
        return x['index'].values[0]  
    elif (x.stat_cnt.max() == 3) & (x.stat_sum.max() == 1): #重复数量为3,status为100/010/001,返回第一个0值的索引  
        return x.loc[x.status==0,'index'].values[0]  
    elif (x.stat_cnt.max() == 3) & (x.stat_sum.max() == 2): #重复数量为3,status为110/101/011,返回第一个1值的索引  
        return x.loc[x.status==1,'index'].values[0]  
    elif (x.stat_cnt.max() == 3) & (x.stat_sum.max() == 3): #重复数量为3,status均为1,返回第一个索引  
        return x['index'].values[0]  
  
# 重复数据中需保留的行索引  
kp_index = dup_mrg.groupby(['id','time']).apply(dup_check)  
# 重复数据中需去掉的行索引  
drp_index = dup_mrg.loc[~dup_mrg['index'].isin(kp_index.values),'index']  
drp_index  

得到保留数据的索引,那么剩下的全都是需要去重的索引了。

最后我们再通过loc筛选从原始数据df中筛选掉这些需要去除的行索引,最终达到去重的目的。

print(df.shape)  
df = df.loc[~df.index.isin(drp_index.values)]  
print(df.shape)  
------  
(544999, 6)  
(544541, 6)  

可以看到共去重了458条数据。

4)异常值

其实前面重复值处理时已经遇到了异常值,但那是在重复情况下发生的异常,一定也还有非重复情况下的异常。

说明:由于是机器采集的GPS数据,在采集过程中可能会因传感器问题出现一定概率的异常值,这是经常发生的,所以我们必须对数据进行异常的排查。

前面提到过,我们发现存在以下异常的情况:同一个车辆在极短的时间内完成载客状态的切换。

比如下面红框里,最大时间差为40秒,载客状态由空客->载客->空客。

理论上说基本不可能,因为乘客乘坐出租车只有40秒的情况极其少见,因此我们判定中间status=1的出现是一种异常情况,需要剔除或将其状态还原为0。

上面是0-1-0的异常,同理1-0-1也是异常,都是短时间内的状态切换。

既然我们发现了这种异常,如何使用pandas将此类异常全部筛选出来呢?

我们给出的判断逻辑是:

  • 载客状态不连续,当前状态与前后状态不一样,比如0-1-0或1-0-1

  • 且这段不连续状态属于同一个车辆id

  • 且这段不连续状态的最大时间差很小,我们设定60秒为阈值

需求8:将id、time、status变量分别上移和下移1个单位,生成6个新变量

现在问题的关键如何用当前状态与前后状态进行对比,pandas中可以使用shift函数对列进行上下的移动,这样就可以实现前后对比了。

# 上下平移一个单位  
df['status_up'] = df['status'].shift(1) # 向下移动 1  
df['status_down'] = df['status'].shift(-1) # 向上移动 1  
  
df['id_up'] = df['id'].shift(1) # 向下移动 1   
df['id_down'] = df['id'].shift(-1) # 向上移动 1  
  
df['time_up'] = df['time'].shift(1) # 向下移动 1   
df['time_down'] = df['time'].shift(-1) # 向上移动 1  

以这样就可以对每一行进行前后值是否相等的判断了。

比如上面图里红框,对status=1与status_up=0和status_down=0对比以后,筛选出了0-1-0这种异常模式。

需求9:以上存在异常状态的数据全部筛选出来

筛选逻辑如前面所说,以下是对应的5个筛选条件。

#剔除异常数据  
cond_1 = (df['status'] != df['status_down'])  
cond_2 = (df['status'] != df['status_up'])  
cond_3 = (df['id'] == df['id_up'])  
cond_4 = (df['id'] == df['id_down'])  
cond_5 = ((df['time_down']-df['time_up']).dt.seconds < 60)  
  
df_abn = df[cond_1 & cond_2 & cond_3 & cond_4 & cond_5].reset_index()  
df_abn.shape  
------  
(409, 13)  

然后我们就可以得到满足这些条件的异常数据,共有409条(前面去重时还删了一部分)。

# 异常数据id分布  
df_abn.id.value_counts()  

这409个非重复数据异常值里面,有的车辆(比如id为28159)高达70次的异常。

通过这样的异常检查,我们就可以对车辆数据进行监控,比如每隔一段时间内车辆所发生的异常次数,进而做相应的处置。

需求10:对非重复异常值进行剔除

与重复值去除一样,这里我们通过记录原数据索引的方式,将异常值索引所在行数据从原数据中剔除。

print(df.shape)  
df = df.loc[~df.index.isin(df_abn['index'].values)]  
print(df.shape)  
------  
(544541, 12)  
(544132, 12)  

三、数据分析及可视化

1)订单出行特征

原数据是一个GPS信息表,每一行代表了xx车辆在xx订单下xx时间的GPS数据,是一个明细数据。这非常不利于业务人员使用,业务更多关心的是车辆在什么时间什么地点最终到了哪里去,而不是每时每刻的信息。

需求11:我们需要把GPS信息表转换为出行信息表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转换后的形式如上图所示,地点可用经纬度代替。

那么这个转换过程如何实现呢?

可以通过下面两个步骤实现。

  • 捕捉每个订单上下车的时间和地点,并筛选出来

判断条件是:如果此时点的status载客状态与上一状态差为1,即由0变为1,说明是上车。反之,如果由1变为0则差值为-1,即为下车。

那么用此时点与上一时点状态作差还是可以通过shift偏移来实现,前面检查异常值时我们已经创建了辅助特征status_up和id_up,所以这里直接拿来用即可。

将状态差值为1(上车)和 -1(下车)筛选出来,并且两个状态下需为同一辆车。

# 与上一个状态作差  
df['status_chg'] = df['status']-df['status_up']  
# 车辆id与上一个作差  
df['id_chg'] = df['id']-df['id_up']  
# 筛选上车和下车的标识1和-1,并为同一车辆  
df_temp = df.loc[((df['status_chg']==1) | (df['status_chg']==-1)) & (df['id_chg']==0)]  

  • 将上、下车时间的地点时间错位拼接

现在上下车分别为两行数据,我们最终想移动变成一行。还是利用shift将我们想要的变量向上偏移一个单位即可。偏移后每一行都是上车、下车或下车、上车的信息,我们最后再通过loc筛选从上车到下车的所有行,同样指定是同一车辆。

最后修改列名完成了出行信息表。

# 将时间、经纬度向上偏移1个单位  
df_temp['Etime'] = df_temp['time'].shift(-1)  
df_temp['Elong'] = df_temp['long'].shift(-1)  
df_temp['Elati'] = df_temp['lati'].shift(-1)  
#   
df_order = df_temp.loc[(df_temp['status_chg']==1) & (df_temp['id']==df_temp['id'].shift(-1)),  
                       ['id','time','long','lati','Etime','Elong','Elati']]  
# 修改列名  
df_order.columns=['车辆id','开始时间','开始经度','开始纬度','结束时间','结束经度','结束纬度']  
df_order.head(10)  

下面根据已完成的订单出行信息表进行一些统计分析。

2)订单时段数量统计

需求12:统计各小时的订单数分布

前面我们已经将time时间转换为时间类型了,那么将时间戳转换为小时就非常简单了,时间属性方法可以参考传送门。转换后为一天0到24小时之内的小时数值,比如2023-06-28 04:30:13转换为小时4。

然后对小时groupby分组求订单数量即可,最后使用pandas的内置方法进行可视化,可视化方法参考传送门。

# 转换为小时  
df_order['小时'] = df_order['开始时间'].dt.hour  
# 对小时分组求订单数量  
df_hourcnt = df_order.groupby('小时')['车辆id'].count()        
df_hourcnt = df_hourcnt.rename('数量').reset_index()     
  
# 绘制折线图      
fig = plt.figure(1,(8,4),dpi = 200)      
ax = plt.subplot(111)      
plt.plot(df_hourcnt['小时'],df_hourcnt['数量'],'k-')      
plt.plot(df_hourcnt['小时'],df_hourcnt['数量'],'k.')      
plt.bar(df_hourcnt['小时'],df_hourcnt['数量'])      
plt.ylabel('数量')    
plt.xlabel('小时')    
plt.xticks(range(24),range(24))    
plt.title('出行小时数量统计')      
plt.ylim(0,350)      
plt.show()  

观察结果:

  • 出租车在各时段都有订单出行,其中早上8点到晚上5点起伏较为平稳,从晚上8点到10点是高峰期,后半夜3点到5点(夜车)是低峰期。观察结果比较符合我们的现实情况。
3)订单时长分布

需求13:统计各时段订单的时长分布

下面通过箱型图对各时段订单时长做可视化。

# 开始结束时间作差并转化为秒单位  
df_order['订单时长'] = (df_order['结束时间']-df_order['开始时间']).dt.seconds  
# 各时段订单时长箱型图   
fig = plt.figure(1,(6,4),dpi = 150)        
ax = plt.subplot(111)    
plt.sca(ax)    
sns.boxplot(x="小时", y=df_order["订单时长"]/60, data=df_order,ax=ax)    
plt.ylabel('订单时长(分钟)')    
plt.xlabel('订单时段')    
plt.ylim(0,60)    
plt.show()  

观察结果:

  • 订单时长在各时段均有一定的差异,但在早晚高峰时段(8-9点、17-18点)订单时长明显多,是因为高峰期堵车所以导致时间比较长。

长按扫码识别

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上就是“pandas实战:出租车GPS数据分析”的全部内容,希望对你有所帮助。
​
​关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

基于出租车GPS数据的特征提取及可视化项目分析 这个时间段坐车的人比较多。尤其针对出租车GPS数据的数据分析更有价值,因为出租车满足了城市中不同人群的不同需求,同时出租车上的GPS定位终端可以定期采集多种信息,包括GPS进纬度坐标,速度,出租车行驶方向,出租车载客状态等,并且采集频率较高,采集持续时间较长,用户量较大,所以出租车的GPS数据规模更大,可获取的信息更加丰富,更加详细。近年来,随着技术的快速发展和不同的传感技术的广泛应用,大量的数据已成功收集并且记录了城市的各个方面的状态,这给解决都市问题和创建基于大城市大数据分析的智能城市带来了新的机遇。 阅读详情

相关推荐

Python出租车GPS数据可视化(TransBigData+keplergl)

在jupyter中显示可视化的设置 Python的TransBigData包依托于kepler.gl提供的可视化插件提供了一键数据整理与可视化的方法 使用此功能请先安装python的keplergl包 pip install keplergl 如果要在jupyter notebook中显示可视化,则需要勾选jupyter-js-widgets(可能需要另外安装)和keplergl-jupyter两个插件 数据点分布可视化 transbigdata.visualization_data

u013410354的博客 4923

人工智能与地理大数据实验--出租车GPS数据—时空大数据Python处理基础(二)

Python处理地理大数据基础

伯努利 2497

用PySpark处理出租车GPS数据:从原始CSV到轨迹分析的完整实战(附避坑代码)

本文详细介绍了如何使用PySpark处理出租车GPS数据,从原始CSV文件到轨迹分析的完整实战流程。涵盖数据清洗、轨迹特征提取、时空聚合分析等关键步骤,并分享工业级解决方案中的避坑代码和性能优化策略,帮助开发者高效处理大规模空间数据。

weixin_33704234的博客 264

出租车GPS数据分析的常规方法

我们拿到gps数据以后先导入矢量数据平台。看看数据的分布范围、分布情况等基本信息是否正确。3、提取OD分析以后,可以分析出行距离分布特征、出行时长分布特征和出行时间分布特征。5、最后也可以进行路径匹配以后,分析道路的拥堵情况,分为工作日和周末。这里我们已厦门是2021年出租车数据为例,做一个简单的介绍。想要详细沟通和了解的可以私信我。4、也可以分析一下,热门地点的上下车情况。2、可以适当做一个常见的密度分析。

cc605523的博客 1173

基础的数据处理(1)—出租车数据的基础处理,由gps生成OD(pandas)

一、开场白:什么是时空大数据 非集计数据(到个人) 数据至少包含:空间,时间,人(个体ID) 二、Python的安装与anaconda路径设置 1.设置jupyter的目录 jupyter-notebook --generate-config 问题参考:https://blog.youkuaiyun.com/qq_27825451/article/details/84427269?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EB

hanwanbing的博客 4657

交通数据分析期末大作业实战:出租车GPS轨迹清洗、拥堵指数计算与可视化全流程

数据分析是交通工程与城市计算中的核心技能,而GPS轨迹数据正是理解城市交通运行状态的黄金素材。从原始出租车定位记录中提取有效信息,通常需要经过数据清洗、坐标转换、路网匹配等预处理环节,再通过平均速度、车流密度与拥堵指数等指标量化道路通行状况,最终借助可视化工具呈现时空规律。这类完整的数据分析流程不仅适用于课程设计与期末大作业,也是智能交通系统、出行服务与城市规划中常见的工程实践。本文以出租车GPS轨迹数据为例,梳理了从数据预处理到指标计算、可视化展示,再到实验报告撰写的全链路方法,并提供了开源工具链下的可复

weixin_34414650的博客 500

python出租车数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb

{"cells": [{"cell_type": "markdown","metadata": {},"source": ["在这个教程中,你将会学到如何使用python的pandas包对出租车GPS数据进行数据清洗,识别出行OD\n","\n","提供的基础数据是: 数据: \n"," 1.出租车原始GPS数据(在data-sample文件夹下,原始数据集的抽样500辆车的数据)"...

weixin_35260789的博客 1154

四个城市出租车数据集.zip

包括南京,成都,西安,北京的出租车数据集

人工智能与地理大数据实验--出租车GPS数据—时空大数据Python处理基础(一)

Python处理地理大数据基础

伯努利 2660

Chicago_Taxi.csv

有起始订单低点,费用,乘客等信息

nyc_taxi.csv

纽约地区从2014年7月1日到2015年1月31日的出租车需求

python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...

{"cells": [{"cell_type": "markdown","metadata": {},"source": ["在这个教程中,你将会学到如何使用python的pandas包对出租车GPS数据进行数据清洗,识别出行OD\n","\n","提供的基础数据是: 数据: \n"," 1.出租车原始GPS数据(在data-sample文件夹下,原始数据集的抽样500辆车的数据)"...

weixin_39765840的博客 1806

VirtualLab初学者教程-1.用户界面

目录前言一、VirtualLab Fusion简介1.软件2.内置工具箱:二、用户界面认识1.上方菜单栏2.右侧面主窗口3.底部窗口附 前言 感觉做VirtualLab的资料不是特别多,可能用的朋友也比较少吧,笔者最近也因为大创需要刚刚开始入门,把网上有的英文资料整理了一下,加了一点自己的内容发出来希望帮助更多在学习中的朋友,有用词不当之处还请多多包涵。 一、VirtualLab Fusion简介 因为是第一讲,简单啰嗦一下软件本身,参考官方介绍。 1.软件 VirtualLab是由德国LightTran

ClaireTang1的博客 2万+

Python实战:用Pandas和Scipy搞定出租车GPS轨迹清洗与插值(附完整代码)

本文详细介绍了如何使用Python的Pandas和Scipy库对出租车GPS轨迹数据进行清洗与分段插值。通过实战代码演示了从原始数据加载、异常值过滤、基于时间连续性的智能分段,到应用分段三次样条插值生成连续平滑轨迹的全流程,为物联网传感器数据处理提供了可复用的解决方案。

weixin_29057163的博客 241

多期DID实战指南:从CSDID原理到分组加权策略

本文深入解析多期DID(CSDID方法)在政策评估中的实战应用,从核心思想到分组加权策略全面讲解。通过电商扶贫等案例,详细演示如何正确处理分批实施政策的数据分析,包括分组拆解、子模块DID操作及加权平均选择,帮助研究者规避常见误区,提升政策评估的准确性。

weixin_26833503的博客 528

怎么在豆包里做生成式引擎优化(GEO)

本文系统介绍了豆包平台生成式引擎优化(GEO)的全套方法体系。文章首先解析了豆包与传统搜索引擎的核心差异,强调其多模态理解和上下文感知特性,并指出GEO需从关键词匹配转向用户意图动态解析。随后详细阐述了GEO优化的三大核心策略:用户意图解析技术、实时内容适配框架和权威信号强化方法,配以技术实现路径和案例说明。最后提出GEO与SEO融合的未来趋势,建议企业构建统一知识库,实现全渠道声誉管理。全文包含大量实操代码和工具链指导,为企业在AI时代的内容优化提供系统解决方案。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2386

Python 3.11 + Pandas 出租车GPS数据清洗实战:4步剔除50%异常数据(附代码)

本文详细介绍了使用Python 3.11和Pandas进行出租车GPS轨迹数据清洗的实战方法,通过4个关键步骤(缺失值处理、静止点过滤、地理围栏筛选和速度异常值剔除)可有效减少50%的异常数据。文章包含完整代码示例,特别适合大数据分析和课程设计场景,帮助提升出租车轨迹数据的分析质量。

weixin_42680139的博客 378

[Python图像处理] 一.图像处理基础知识及OpenCV入门函数

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~ 同时推荐作者的C++图像系列知识: [数字图像处理] 一.MFC详解显示BMP格式图片 [数字图像处理] 二.MFC单文档分割窗...

杨秀璋的专栏 7万+

1-出租车数据的基础处理,由gps生成OD(pandas)

import pandas as pd #Read data data = pd.read_csv(r'data-sample/TaxiData-Sample',header = None) #rename the columns for the data data.columns = ['VehicleNum', 'Stime', 'Lng', 'Lat', 'OpenStatus', 'Speed'] data VehicleNum Sti

weixin_44676579的博客 2524

Android 车联网——CarAudioService介绍(六)

CarAudioService 是 Android Automotive OS 中的一个重要组件,用于管理车辆中的音频功能。它是 Android Auto 的一部分,负责处理车辆音频的播放、控制和路由。CarAudioService 使用标准的 Android 组件架构,基于 Binder 通信机制,提供了一组 API,用于管理车辆音频。它包括以下主要功能:音频路由管理:CarAudioService 可以让开发者控制音频的路由,即将音频发送到不同的输出设备,例如车辆的扬声器、耳机等。

小旭的专栏 3202

向华为学习——解读158页 华为敏捷园区网技术解决方案【附全文阅读】

华为敏捷园区网解决方案通过策略随行和体验随身技术,满足移动办公场景下的网络需求。该方案采用敏捷交换机和防火墙自动执行策略配置,实现用户身份认证与业务策略的无缝衔接,且策略配置与IP地址解耦,简化了管理流程。相比传统技术,该方案有效解决了用户分级、QoS保障、无线接入等关键问题,确保用户在移动过程中获得一致的网络体验。

cdfunlove的博客 381
上一篇: pandas 图形可视化大全
下一篇: Pandas DataFrame 存储格式性能对比!
壹只小小码农
博客等级 码龄5年 8104粉丝 1333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值