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

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

程序员文章站 2022-07-14 21:15:47
...

学习完《利用python进行数据分析》之后,看到R语言案例中的定位算法一章时,试着用python进行分析一下。

一、数据准备

原始数据有两份:offline.final.trace.txt和online.final.trace.txt

原始数据:

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

最后处理完成的结果:

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

二、python处理

在ipython notebook里面进行分析

首先对一行数据进行处理:

预处理,去除带有#的行,这是无用数据

with open('G:\Positioning\online.final.trace.txt','r') as r:
    lines = r.readlines()
with open('G:\Positioning\online.final.trace.txt','w') as w:
    for l in lines:
        if '#' not in l:
            w.write(l)  #去除带有‘#’字符的行

打开文件,这里是测试数据,就只有一行

f = open('G:\Positioning\Positioning.txt')
data = f.read()
利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

利用正则表达式,分离数据

import re
tokens = re.split('[=;,]',data) #正则表达式,分离各个元素,根据‘=’,‘;’,‘,’这三个字符对数据进行分离出来放在一个列表中

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

将数据分成2个部分,一部分是前面的测量单元,另一部分是后面的读数

import pandas as pd
import numpy as np
from pandas import Series, DataFrame #引入约定 
columns1 = [tokens[0],tokens[2],'posX','posY','posZ',tokens[8]] #得到第一部分数据的列表名
data1 = [tokens[1],tokens[3],tokens[5],tokens[6],tokens[7],tokens[9]] #得到第一部分的数据
s = Series(data1, index = columns1) #第一部分的Series
df1 = DataFrame(s).T #第一部分数据的DataFrame

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

a = tokens[10:] #第二部分的数据
columns2 = ['MAC','signal','frequency','mode']  #第二部分数据的列名
def chunks(s, step):
    return [s[i:i+step] for i in  range(0, len(s), step)] #函数:遍历列表,取n个元素为一个新元素
data2 = chunks(a, 4) #每四个一组
df2 = DataFrame(data2, columns = columns2 ) #第二部分数据的DataFrame

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

合并两个DataFrame,完成对一行数据的处理

df1['key'] ='1' #增添一个公共键
df2['key'] ='1'
df=pd.merge(df1,df2) #合并

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

对数据集进行处理(多行):

预处理:

with open('G:\Positioning\online.final.trace.txt','r') as r:
    lines = r.readlines()
with open('G:\Positioning\online.final.trace.txt','w') as w:
    for l in lines:
        if '#' not in l:
            w.write(l) 
#删除含有#的行

编写函数,根据单行的步骤来编写:

import pandas as pd
import numpy as np
from pandas import Series, DataFrame 

def function(x): #编写函数
    import re
    import pandas as pd
    import numpy as np
    from pandas import Series, DataFrame 
    tokens = re.split('[=;,]',x) #分离各个元素
    
    columns1 = [tokens[0],tokens[2],'posX','posY','posZ',tokens[8]] #得到第一部分的列表名
    data1 = [tokens[1],tokens[3],tokens[5],tokens[6],tokens[7],tokens[9]] #得到第一部分的数据
    s = Series(data1, index = columns1) #第一部分的Series
    df1 = DataFrame(s).T #第一部分的DataFrame
    
    a = tokens[10:] #第二部分的数据
    columns2 = ['MAC','signal','frequency','mode'] 
    def chunks(s, step):
         return [s[i:i+step] for i in  range(0, len(s), step)]
    data2 = chunks(a, 4) #每四个一组
    df2 = DataFrame(data2, columns = columns2 )
    
    df1['key'] ='1' #增添公共键
    df2['key'] ='1'
    
    df=pd.merge(df1,df2) #合并
    
    return df

打开文件,进行数据处理

f = open('G:\Positioning\online.final.trace.txt')
lines = [line.strip('\n') for line in f] #去掉换行符
frames=[] #先设置空的列表
for i in lines:
    frames.append(function(i)) #将lines中每个元素进行应用函数后添加到列表中
df = pd.concat(frames, ignore_index = True) #无视索引,重新编号

利用python编写R语言案例研究方法中的定位算法(1)——原始数据处理

对原始数据的处理目前到这里以及完成的差不多了。大家如果还有更加节省资源的代码,欢迎指教指教,小白一枚,不胜感激。