indoorLocation(3)--TXT转CSV

本文介绍了一种将从安卓设备收集的BLE信号强度数据从TXT格式转换为CSV格式的方法,以便于构建室内定位模型。通过Python脚本解析RSSI值并标准化数据格式,实现了高效的数据预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上文中,我们使用android收集到的数据存放在TXT文件中,一帧格式如下:(暂时去除magnetic数据信息)

[(device:F8:F0:05:F3:67:4C rssi:-90 floorNum:1 locationNum:1), (device:F8:F0:05:F3:67:D5 rssi:-80 floorNum:1 locationNum:1), (device:F0:F8:F2:C7:E9:61 rssi:-73 floorNum:1 locationNum:1), (device:F8:F0:05:F3:67:35 rssi:-97 floorNum:1 locationNum:1), (device:F8:F0:05:F3:67:E7 rssi:-97 floorNum:1 locationNum:1)]

为了方便我们的模型构建,我们将TXT文件转换为CSV文件,方便数据字典的建立。

DC1DC2DC3DC4DC5DC6DC7DC8DC9DC10floorlocationNum
908073979710010010010010044

其中,DC*表示BLE基站的不同设备在某点处该BLE基站的RSSI转换值。可以这样想,在一个建筑物内,共有10个BLE主机,那么这个房间的地图模型根据这10个主机会独一无二。每个点处都会采集到这10个ble主机的RSSI信号值。位置发生改变,信号值发生改变。

以下使用python3.6进行TXT转CSV的实现:

基于基本的测试实现,在这里不考虑多线程处理出具的问题。源码如下:(其中多处使用正则表达式)

def magnAndRssiTxt2Csv(magnAndRssiTxt, magnAndRssiCsv):
    with open(magnAndRssiTxt, 'r') as recDate:
        # 读取训练文件
        eachline = recDate.read().splitlines()
        with open(magnAndRssiCsv, 'w', newline='') as csvFile:
            # 写csv头
            csvFileHead = [
                'DC1', 'DC2', 'DC3', 'DC4', 'DC5',
                'DC6', 'DC7', 'DC8', 'DC9', 'DC10',
                'floorNum'
                'locationNum'
            ]
            writer = csv.DictWriter(csvFile, fieldnames=csvFileHead)
            writer.writeheader()
            for i in range(len(eachline)):
                devIDDict = {
                    'DC1': '100', 'DC2': '100', 'DC3': '100', 'DC4': '100', 'DC5': '100',
                    'DC6': '100', 'DC7': '100', 'DC8': '100', 'DC9': '100', 'DC10': '100',
                    'floorNum': '',
                    'locationNum': '',
                }
                oneLocationPkg = eachline[i].strip('[]').split(', ')
                if oneLocationPkg == ['']:
                    continue
                for j in range(len(oneLocationPkg)):
                    devMassage = ast.literal_eval(json.dumps(oneLocationPkg[j])).strip('()')
                    devItem = devMassage.split(' ')[0].split(':', 1)[1]
                    if devItem in devIDDict:
                        rssiValue = -(float(devMassage.split(' ')[1].split(':', 1)[1]))
                        if rssiValue > 100:
                            rssiValue = 100
                        devIDDict[devItem] = rssiValue
                        devIDDict['floorNum'] = devMassage.split(' ')[2].split(':', 1)[1]
                        devIDDict['locationNum'] = devMassage.split(' ')[3].split(':', 1)[1]
                writer.writerow(devIDDict)

之后运行,就可以将TXT文件读取写入CSV文件中

欢迎大家批评!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值