import pandas as pd import os from scipy import integrate, signal import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 matplotlib.rcParams['axes.unicode_minus'] = False # 用来正常显示正负号 #y = pd.read_excel(r'C:\Users\ppddcsm\Desktop\第一批数据拆分\第一批1号1振\A1-1-600.xlsx', usecols=[1],index_col=False, header=None ,skiprows=[0]) folder_path = r'C:\Users\ppddcsm\Desktop\第二批数据拆分\第二批1号1振' file_names = os.listdir(folder_path) for file_name in file_names: file_path = os.path.join(folder_path, file_name) y = pd.read_excel(file_path) N = len(y) fs = 1280 dt = 1/fs t_axis = [i * dt for i in range(len(y))] # 时间轴 y1 = y.swapaxes(0, 1) # 矩阵转置 data = y1.fillna(-1).values #获取数据,将缺失值标记设置为-1,并转换为NumPy数组对象 t = data.flatten() # 展平数组 a = np.array(t) # 梯形法 cumtrapz累计计算积分,cumtrapz(y, x=None, dx=1.0, axis=-1, initial=None)。y: 需要被积分的数值序列;x: y中元素的间距,积分变量,若为空,则y元素的间距默认为dx; # 续:dx: 如果x为空,y中元素的间距由dx给出;axis: 确定积分轴;initial: 如果提供,则用该值作为返回值的第一个数值。 y_int = integrate.cumtrapz(np.array(a), x=None, dx=0.00078125, initial=0)*1000 # m到mm转换要乘1000 result = signal.detrend(y_int) # 去趋势 plt.figure(figsize=(16, 6)) plt.subplot(121) plt.plot(t_axis, y, label="原始加速度信号") plt.ylabel("m/s^2") plt.legend(loc="upper right") plt.subplot(122) plt.plot(t_axis, y_int, label="积分后的速度信号") plt.ylabel("mm/s") plt.legend(loc="upper right") plt.figure(figsize=(8, 6)) plt.plot(t_axis, result, label="去趋势后的速度信号") plt.ylabel("mm/s") plt.legend(loc="upper right")
时间: 2024-04-19 18:27:35 浏览: 141
这段代码的作用是读取指定文件夹下的 Excel 文件,进行数据处理和绘图。
首先,它导入了所需的库,包括 `pandas`、`os`、`scipy`、`numpy` 和 `matplotlib`。
然后,它定义了文件夹路径 `folder_path` 和获取该路径下所有文件名的列表 `file_names`。
接下来,通过遍历文件名列表,使用 `os.path.join()` 函数将文件名和文件夹路径拼接成完整的文件路径,然后使用 `pd.read_excel()` 函数读取 Excel 文件的数据。
之后,它计算了一些变量,如数据长度 `N`、采样频率 `fs`、时间步长 `dt` 和时间轴 `t_axis`。
然后,它对数据进行一些转换和处理,将数据转置为列向量,将缺失值标记为-1,并转换为 NumPy 数组。
接下来,它使用 `integrate.cumtrapz()` 函数对数组进行积分,并乘以1000将单位从 m 转换为 mm。
然后,它使用 `signal.detrend()` 函数去除积分后的速度信号的趋势。
最后,它使用 `matplotlib.pyplot` 绘制了三个子图,分别是原始加速度信号、积分后的速度信号和去趋势后的速度信号。
如果你有具体的问题或需要进一步的帮助,请告诉我。
相关问题
import pandas as pd import numpy as np import matplotlib.pyplot as plt
当你在 Python 中使用 `import pandas as pd`, `import numpy as np`, 和 `import matplotlib.pyplot as plt` 这些语句时,你是在导入几个非常流行的数据分析和可视化库:
1. **pandas**: pandas 是一个强大的数据处理库,常用于数据清洗、整理、分析和操作。它提供了 DataFrame 对象,这是用于存储表格型数据的主要数据结构,以及 Series 对象,类似一维数组,非常适合进行数据操作和分析。
2. **numpy**: numpy 是科学计算的基础库,主要专注于高效地处理大型数组和矩阵运算,提供了大量的数学函数和工具,是其他许多数据处理库的基础。
3. **matplotlib.pyplot**: matplotlib 是一个绘图库,通过 `pyplot` 模块提供了一个简单的接口来创建各种图表,包括线图、柱状图、散点图等。它是 Python 最常用的绘图工具之一。
有了这三者,你可以方便地处理数据、执行数值计算,并将结果以可视化的方式呈现出来。
import numpy as np import pandas as pd import matplotlib.pyplot as plt
这三个库都是Python中常用的数据分析和可视化库。其中,NumPy是Python中用于科学计算的基础库,提供了高性能的多维数组和矩阵计算功能。Pandas是基于NumPy的一个数据处理库,提供了高效的数据结构和数据分析工具。Matplotlib是Python中最流行的数据可视化库之一,提供了各种绘图工具和图表类型,可以用于生成各种静态和动态的图表。
以下是一个简单的例子,展示如何使用这三个库绘制一个柱状图:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 创建数据
bar_positions = [1, 2, 3, 4]
bar_heights = [1, 2, 3, 4]
# 绘制柱状图
fig, ax = plt.subplots()
ax.bar(np.arange(len(bar_positions)), bar_heights)
# 设置x轴标签
ax.set_xticks(np.arange(len(bar_positions)))
ax.set_xticklabels(bar_positions)
# 设置y轴标签
ax.set_ylabel('Bar Heights')
# 设置图表标题
ax.set_title('A Simple Bar Chart')
# 显示图表
plt.show()
```
阅读全文