最近由于在进行一个比赛项目,时常用到pandas读取数据,并对数据进行操作,因此写下这一篇博文,以便日后查看,同时也希望对大家有帮助。
加载数据(excel文件)
我现在数据,在一个excel文件中。
import pandas as pd
sensor1_data = pd.read_excel(sensor1)
sensor2_data = pd.read_excel(sensor2)
sensor20_data = pd.read_excel(sensor20)
sensor22_data = pd.read_excel(sensor22)
函数中的sensor1…都是excel文件路径
通过print(sensor1_data)
可以得到如下所示信息。
合并四个传感器数据
四个传感器数据的结构都是一样的。
dataset = pd.concat([sensor1_data, sensor2_data, sensor20_data, sensor22_data])
这样会得到按行拼接的结果,默认axis=0
len(dataset) # 全部样本的个数
2976
提取出对于标签的样本
通过loc
函数获取导不同标签的数据。按照
label1_data = dataset.loc[dataset['标签'] == 1]
label2_data = dataset.loc[dataset['标签'] == 2]
label3_data = dataset.loc[dataset['标签'] == 3]
label4_data = dataset.loc[dataset['标签'] == 4]
label5_data = dataset.loc[dataset['标签'] == 5]
label6_data = dataset.loc[dataset['标签'] == 6]
label7_data = dataset.loc[dataset['标签'] == 7]
查看每个样本包含的样本个数
print(len(label1_data))
print(len(label2_data))
print(len(label3_data))
print(len(label4_data))
print(len(label5_data))
print(len(label6_data))
print(len(label7_data))
88
517
952
261
80
965
113
数据均衡处理
之所以需要处理数据均衡的问题,是为了训练模型,做7分类。
按照最少的样本提取每个标签的样本,为了保证随机性,将每个标签的样本随机打乱,其中frac=1
代表将打乱后的数据全部返回。
data1 = label1_data.sample(frac=1)
data2 = label2_data.sample(frac=1)
data3 = label3_data.sample(frac=1)
data4 = label4_data.sample(frac=1)
data5 = label5_data.sample(frac=1)
data6 = label6_data.sample(frac=1)
data7 = label7_data.sample(frac=1)
每个标签的数据提取出80个样本
sample_num = 80
train_data1 = data1.iloc[0:sample_num]
train_data2 = data2.iloc[0:sample_num]
train_data3 = data3.iloc[0:sample_num]
train_data4 = data4.iloc[0:sample_num]
train_data5 = data5.iloc[0:sample_num]
train_data6 = data6.iloc[0:sample_num]
train_data7 = data7.iloc[0:sample_num]
显示一个标签的数据
制作训练集和测试集
train_dataset = pd.concat([train_data1,
train_data2,
train_data3,
train_data4,
train_data5,
train_data6,
train_data7])
data_feature = train_dataset.iloc[:, [1, 2, 3, 5, 6, 8, 10 , 11]] # 样本
data_label = train_dataset.iloc[:, 12] # 样本的标签
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data_feature, data_label, test_size=0.2)
len(x_train)
448
数据归一化处理
归一化范围为(0, 1)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
train_sample = scaler.fit_transform(x_train.values)
test_sample = scaler.fit_transform(x_test.values)
训练模型
- 导入SVM工具包
from sklearn.svm import SVC
svm = SVC(kernel='rbf', random_state=0, gamma=0.10, C=1.0)
- 训练
svm.fit(train_sample, y_train.values) # 训练模型