2.2。数据预处理

2.2。数据预处理

 

2.2.1。读取数据集

例如,我们首先创建一个人工数据集,该数据集存储在csv(逗号分隔值)文件中../data/house_tiny.csv。以其他格式存储的数据可以用类似的方式处理。以下 mkdir_if_not_exist功能确保该目录../data 存在。注释是一个特殊标记,其中以下函数,类或import语句也保存在包中,以便我们以后可以直接调用 。

# Saved in the d2l package for later used2ld2l.mkdir_if_not_exist()

 

import os

# Saved in the d2l package for later use
def mkdir_if_not_exist(path):
    if not isinstance(path, str):
        path = os.path.join(*path)
    if not os.path.exists(path):
        os.makedirs(path)

下面,我们将数据集逐行写入csv文件。

data_file = '../data/house_tiny.csv'
mkdir_if_not_exist('../data')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # Column names
    f.write('NA,Pave,127500\n')  # Each row is a data point
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

为了从创建的csv文件加载原始数据集,我们导入 pandas包并调用该read_csv函数。该数据集具有44 行和 33 列,每行描述房间的the number of rooms (“NumRooms”), the alley type (“Alley”), and the price (“Price”

# If pandas is not installed, just uncomment the following line:
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)
print(data)
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

 

 

### Python信号数据预处理方法与教程 在Python中进行信号数据预处理是一项重要的技能,尤其是在涉及时间序列、传感器数据或其他动态测量的应用场景中。以下是几种常见的信号数据预处理技术及其对应的实现方式。 #### 1. 缺失值处理 信号数据可能由于设备故障或传输错误而存在缺失值。可以利用`pandas`库填充这些缺失值。常用的方法包括前向填充(forward fill)、后向填充(backward fill)和插值法(interpolation)。 ```python import pandas as pd # 创建带有缺失值的时间序列数据 data = {'time': [0, 1, 2, 3, 4, 5], 'signal': [1.1, None, 2.2, None, 3.3, 4.4]} df = pd.DataFrame(data) # 前向填充 df_filled_ffill = df.fillna(method='ffill') # 插值法 df_interpolated = df.interpolate() print(df_filled_ffill) print(df_interpolated) ``` 这种方法适用于连续型信号数据的修复[^1]。 #### 2. 异常值检测与修正 异常值可能会显著影响模型性能。可以通过统计学方法(如标准差范围外剔除)或者基于机器学习的技术来识别并修正它们。以下是一个简单的示例: ```python import numpy as np def detect_outliers_zscore(signal_data, threshold=3): mean_signal = np.mean(signal_data) std_signal = np.std(signal_data) z_scores = [(x - mean_signal) / std_signal for x in signal_data] outliers = [i for i, z in enumerate(z_scores) if abs(z) > threshold] return outliers outliers_indices = detect_outliers_zscore(df['signal'].dropna()) cleaned_signal = df.loc[~df.index.isin(outliers_indices), :] print(cleaned_signal) ``` 此部分借鉴了异常值处理的相关经验[^2]。 #### 3. 数据平滑化 为了减少噪声干扰,通常会对信号应用滤波器。常用的有移动平均滤波和平滑指数加权移动平均(Exponential Weighted Moving Average, EWMA)。 ```python # 移动平均滤波 window_size = 3 smoothed_signal_ma = df['signal'].rolling(window=window_size).mean().fillna(method='bfill') # 指数加权移动平均 alpha = 0.8 smoothed_signal_ewma = df['signal'].ewm(alpha=alpha).mean() ``` 上述代码实现了两种不同的平滑算法[^3]。 #### 4. 特征工程——频率域变换 许多情况下,原始时域特征不足以描述复杂模式。因此可采用傅里叶变换将信号转化为频谱表示形式。 ```python from scipy.fftpack import fft fft_result = fft(df['signal']) frequencies = np.fft.fftfreq(len(fft_result)) magnitude = np.abs(fft_result[:len(frequencies)//2]) plt.plot(frequencies[:len(magnitude)], magnitude) plt.xlabel('Frequency') plt.ylabel('Magnitude') plt.show() ``` 这一步骤能够揭示隐藏于高频分量中的规律性信息[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值