分类方法实验pandasimblearnsklearn
Posted dlage
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分类方法实验pandasimblearnsklearn相关的知识,希望对你有一定的参考价值。
环境:ubuntu、anaconda、python
背景:
实验室的老师写论文需要对照实验,进行数据分类,需要将下面的方法在这个数据集上进行实验。
多层前馈神经网络(MFFNN)、概率神经网络(PNN)、径向基神经网络、模糊神经网络、朴素贝叶斯、C4.5、随机森林、bagging、KNN、EasyEnsembleClassifier
数据集:
数据是这样的(如下图),每个xls文件是一个数据集,A列表示公司的代号,B之后的列是真实公司的特征,(老师没告诉具体是啥)。
要求:
需要将每一年的15个文件合并(按行横着合并)。数据里面有缺失的数据,需要进行填充处理。每年的标签1.xls文件对应的A1-A15的标签,值有(0, 1, 2)三个, 由于我做的实验不需要第3类,所以要删除标签第三类对应的数据。然后进行实验。
涉及到的技术:
sklearn、imblearn、pandas、os
完整代码:
https://github.com/dlagez/classification/blob/master/data_process/data_process.py
数据文件截图:
步骤:
- 将一个文件夹(年份)中多个xls文件按列合并,返回合并和的数据,DataFrame,先定义一个方法,后面需要用到。
def concat_xls(dir_name):
dfs = []
for filename in os.listdir(dir_name):
if os.path.splitext(filename)[1] == '.xls':
full_path = os.path.join(dir_name, filename)
df = pd.read_excel(full_path, header=None, index_col=0)
dfs.append(df)
result = pd.concat(dfs, axis=1)
return result
需要注意:读取时由于第一列是索引名,所以不需要代码自动生成索引名,列名需要自动生成。
df = pd.read_excel(full_path, header=None, index_col=0)
- 先把拼接起来的值存储起来(老师需要这个数据)
for year in range(2012, 2018):
# print(year)
data_root = '/data/file/classification_data/2012-2019/data_A/'
data_name = os.path.join(data_root, str(year))
# print(data_name)
data = concat_xls(data_name)
# print(data)
data.columns = [i for i in range(data.shape[1])]
data.to_csv(os.path.join('/data/file/classification_data/2012-2019/data_sum/'+str(year), 'data_'+str(year)+'.csv'))
注意拼接的数据列名都是混乱的,所以需要从新设置
data.columns = [i for i in range(data.shape[1])]
- 处理拼接起来的数据的空值
for year in range(2012, 2018):
data_root = '/data/file/classification_data/2012-2019/data_sum/'
data_name = os.path.join(data_root+str(year), 'data_'+str(year)+'.csv')
print(data_name)
data = pd.read_csv(data_name, index_col=0)
data_pro = data.fillna(data.mean(), axis=0)
print(data_pro)
data_pro.to_csv(os.path.join(data_root+str(year), 'data_pro.csv'))
这里的处理方式是均值填充
- 将标签值添加到data_pro的末尾
for year in range(2012, 2018):
data_root = '/data/file/classification_data/2012-2019/data_sum/'
data_root_bq = '/data/file/classification_data/2012-2019/'
data_name = os.path.join(data_root+str(year), 'data_pro.csv')
data_pro_read = pd.read_csv(data_name, index_col=0)
print(data_pro_read)
bq = pd.read_excel(os.path.join(data_root_bq+str(year), '标签1.xls'), header=None, index_col=0)
bq.rename(columns={1: 'bq'}, inplace=True)
print(bq)
data_bq = pd.concat([data_pro_read, bq], axis=1)
print(data_bq)
data_bq.to_csv(os.path.join(data_root+str(year), 'data_bq.csv'))
添加的目的是为了删除第三类标签(2)对应的数据。
- 删除含有标签2的列:数据和标签一起删除
for year in range(2012, 2018):
data_root = '/data/file/classification_data/2012-2019/data_sum/'
data_name = os.path.join(data_root+str(year), 'data_bq.csv')
data = pd.read_csv(data_name, index_col=0)
print(data)
data_bq_drop = data.drop(index=data[data['bq'] == 2].index)
# data_bq2013_drop = data_bq2013.drop(index=data_bq2013[data_bq2013['bq'] == 2].index)
print(data_bq_drop)
data_bq_drop.to_csv(os.path.join(data_root+str(year), 'data_bq_drop.csv'))
- 将数据分成四份,训练数据、训练标签、测试数据、测试标签,为分类准备数据
for year in range(2012, 2018):
data_root = '/data/file/classification_data/2012-2019/data_sum/'
data_name = os.path.join(data_root+str(year), 'data_bq_drop.csv')
data = pd.read_csv(data_name, index_col=0)
print(data)
train_size =3 * int(data.shape[0] / 4)
test_size = int(data.shape[0] - train_size)
train_data_all = data.iloc[:train_size]
print(train_data_all)
test_data_all = data.iloc[train_size:]
print(test_data_all)
train_data = train_data_all.iloc[:, :-1]
print(train_data)
train_label = train_data_all.iloc[:, -1]
# train_label.columns = ['bq']
print(train_label)
test_data = test_data_all.iloc[:, :-1]
test_label = test_data_all.iloc[:, -1]
print(test_data)
print(test_label)
train_data.to_csv(os.path.join(data_root+str(year), 'train/train_data.csv'))
train_label.to_csv(os.path.join(data_root+str(year), 'train/train_label.csv'))
test_data.to_csv(os.path.join(data_root+str(year), 'train/test_data.csv'))
test_label.to_csv(os.path.join(data_root+str(year), 'train/test_label.csv'))
由于数据比较多,所以将结果打印出来看看有没有错误的地方。
数据处理部分完成!
参考
https://zhuanlan.zhihu.com/p/110501972
https://blog.csdn.net/sinat_28442665/article/details/104901143
以上是关于分类方法实验pandasimblearnsklearn的主要内容,如果未能解决你的问题,请参考以下文章
ArcGIS实验教程——实验四十三:ArcGIS栅格重分类(Reclass)案例详解
ArcGIS实验教程——实验四十三:ArcGIS栅格重分类(Reclass)案例详解
QGIS入门实战精品教程10.3:QGIS栅格DEM数据重复类方法案例汇总