使用Python读取和处理安卓传感器数据与CSV读取

使用Python读取和处理安卓传感器数据与CSV读取

计算机通过从标准输入、文件和传感器中读取数据,然后将其存储在内存中进行处理。数据处理可以是在线的,也可以是离线的,这取决于用户的喜好。

数据处理是将原始数据转换为有意义的信息。其目的是分解数据,并以图形方式向终端用户表示。

本教程解释了如何使用Python记录各种智能手机传感器的数据并进行离线处理。首先,你将传感器的数据提取到一个CSV文件中。然后用Python读取CSV文件,并对提取的数据进行处理以显示。此外,它还被处理成小波变换。

前提条件

要跟上本教程,你需要。

  • 熟悉[Python]编程语言。
  • 在你的电脑上安装Pycharm

各种移动传感器

上面的图片显示了安卓手机可以使用的传感器。这些传感器可以根据要求检测位置、运动甚至是环境。这有助于在使用许多应用程序,如相机,游戏,e.t.c.,用户还可以记录它们,用于实现各种应用程序,如。

  • 控制机器人和机器。
  • 识别金属和非金属物体。
  • 研究机器零件的振动。
  • 根据声音来区分机器的正常或故障运行。
  • 研究机器部件的运动。
  • 根据移动方向控制一些活动等。

如何记录移动传感器的数据

我们有两种方案,你可以捕捉和处理数据。这些方案是离线记录传感器数据和在线记录。同时,你可以使用Python或Matlab在本地PC上访问数据并处理它。

与在线相比,离线读取数据和处理数据很容易。这是因为它需要建立一个实时通信链接。读取移动传感器和在线处理的步骤如所示。

用来记录和处理离线数据的步骤如下所示。

在本教程中,我们将研究离线读取和处理数据的问题。

.csv文件格式

你可以在记事本或MS excel软件中打开这个数据。这种格式将数据按列和行排列。下面是一个在记事本和MS excel中打开的数据例子。

第一列的数据显示time 。第二列由wx 代表是X轴数据。第三列由wy 代表的是y轴的数据,最后,wz 代表z轴的数据。

数据中的第一行代表下一行。当导入这个数据时,我们应该考虑这一行。在导入和处理过程中,它应该与数据分开。

第三方androids应用程序来记录移动传感器数据

让我们看一下可以收集传感器数据的第三方安卓App。要获得这个应用程序。

  • 在你的手机上进入Play Store。
  • 在搜索标签中搜索sensors data collector 。
  • 这里的结果是不止一个。请注意,所有这些应用程序都是好的。我们在本文中推荐data collector 或physics toolbox 。这是因为它们的界面很容易使用。

有两类应用程序。第一类收集数据并将它们保存为.csv文件,用于离线处理,例如数据收集器。第二类收集数据并将它们发送到一个给定的网络进行在线处理。

  • 由于我们要离线处理数据,我们将安装physics toolbox 。
  • 安装完成后,打开App。

如何使用第三方App

当你打开物理学工具箱时,你会得到如下所示的界面。

你注意到,当你摇动你的手机时,波形会有变化,如下图所示。

从左边的菜单中,你可以选择你手机上的可用传感器。

例如,如果你想记录重力数据,请选择传感器。然后你点击+ 符号。一旦你点击它,会有一个弹出的data is being recorded 。你可以在规定的时间内这样做。一旦你停止记录,就会出现一个新的窗口,允许人们保存数据。 

一旦这样做,你会得到一个提示,通过任何你希望的应用程序分享你的数据或将其保存在本地存储器中。在我们的案例中,我们将其保存在本地存储中。保存后,你可以使用USB电缆或任何其他首选方法将其导入你的电脑进行处理。在我们的案例中,我们使用加速器传感器。

处理数据的Python代码

为了处理这些数据,你需要导入一些库。这些库是numpy,matplotlib 和csv ,用于读取和绘制你的.csv文件。

# Python program to read .csv file

import numpy as np
import matplotlib.pyplot as plt
import csv
复制代码

在导入这些库之后,我们现在读取.csv文件。

with open('accl1.csv', 'r') as f:
data = list(csv.reader(f, delimiter=',')) #reading csv file
复制代码

我们首先执行文件open() 函数。这个函数接收文件名accl1.csv 和阅读属性r 。然后我们使用csv.reader() 函数。这里的输出是以list 的形式出现的。由于输出是以列表的形式出现的,所以它是无法使用的。这意味着我们必须将这个列表转换为一个浮动数组。

为了将其转换为浮动数组,我们使用下面的代码。

data1 = np.array(data[1:], dtype=np.float64) #converting list into float array
复制代码

我们使用np.array() 函数将数据转换为数组。然后我们将第二行的数据data[1:] ,并使用np.float64 ,将数据类型定为float。

现在让我们来提取数据。

# Extracting data
time = data1[:, 0]
ax = data1[:, 1]
ay = data1[:, 2]
az = data1[:, 3]
aT = data1[:, 4]
复制代码

我们正在逐一提取这些数据。在转换后的数据中,迭代从0开始。例如,为了提取第一列的时间数据,我们给0作为列的位置data1[:, 0] 。它一直持续到第五列。

请注意,加速数据有五列。第五列,aT ,是总的信号数据。

现在让我们来绘制数据。你可以用两种方式来做这个。第一种方法是将所有的数据绘制在同一轴上。第二种方法是使用subplot() 函数制作单独的图。让我们首先在同一轴上绘制数据。

# Plotting all the data in the same axis
plt.figure(figsize=(20, 10))
plt.plot(time, ax, time, ay, time, az, time, aT)
plt.title('Accelerometer data', fontsize=20)
plt.xlabel('Time', fontsize=20)
plt.ylabel('Acc.values', fontsize=20)
plt.show()
复制代码

在同一轴上绘图时,我们使用figsize() 函数启动一个大小为20x10像素的图形。然后我们将所有提取的数据绘制在同一轴上。accelerometer data 我们用fontsize 20 给该图做标题。我们也有 y-label 和 x-label。为了显示你的图,我们使用plt.show() 函数。

另外,我们也可以用下面的代码将这些图分成子图。

#separate plots using subplots
plt.figure(figsize=(20, 20))

    plt.subplot(2, 2, 1)
    plt.plot(ax, color='r')
    plt.title('a[x]', fontsize=30)

    plt.subplot(2, 2, 2)
    plt.plot(ax, color='g')
    plt.title('a[y]', fontsize=30)

    plt.subplot(2, 2, 3)
    plt.plot(ax, color='b')
    plt.title('a[z]', fontsize=30)

    plt.subplot(2, 2, 4)
    plt.plot(ax, color='k')
    plt.title('a[Total]', fontsize=30)
    plt.show()
复制代码

子图函数将行数、列数和绘图位置作为输入。例如,plt.subplot(2, 2, 1) 表示我们有四个图。

这些图是以两行两列的表格形式排列的。我们的图在第一个位置。plt.plot() 函数把要绘制的数据和图的颜色作为参数。为了显示该图,我们使用plt.show() 函数。

你可以进一步分析并获得数据的近似系数和详细系数。

结论

使用安卓移动传感器收集数据在数据分析领域是广泛适用的。例如,你可以使用传感器收集的数据,根据手机上机器学习模型的数据分析结果,确定对特定用户的推荐设置。

猜你喜欢

转载自blog.csdn.net/weixin_73136678/article/details/128805515