首页 > 编程知识 正文

大数据分析与处理,大数据处理与分析

时间:2023-05-03 22:13:21 阅读:205453 作者:3388

————————————————————————————————————————————
这段时间一直在整理数据用于训练,但是从网上找到的数据集往往很凌乱,不能满足使用要求。这些数据集少则几万,多则几十万几百万。如果手动去整理这些数据集无疑是一个繁重的工作,甚至无法去做!
这个时候则需要我们写脚本去帮助我们做这件事情!本文作者使用的是shell脚本在linux下面进行文件整理。其他脚本诸如javascript,PHP,Python等应该也可以。
作者仅仅是为了工作而去学习的,作为初学者也是充满了迷茫,写的不好,但是问题总算解决了,现在将个人感悟和学习总结如下。
————————————————————————————————————————————+

一、本文作者整理的数据集

三个关于人脸年龄的数据集:分别是FG-NET,MORPH和CACD2000.
拿MORPH数据集为例,下载的原始数据是所有人物数据都在一个文件夹内。如下图所示:

而我所需要的结果是:


也就是说,我需要将一个人放在一个子文件夹内,并以其名字命名。

本文所写的脚本是以处理CACD2000数据集为例子,该数据集有2000人,照片共计有16w张。
所写shell脚本主要思路如下:
1.观察数据集合的各个文件名字特点,比如CACD中名字命名规则为:

2.命名规则如,42_Adam_Baldwin_0001.jpg, 则我只需要该子文件名字为Adam_Baldwin,那么在检测的时候就需要读取该文件的名字,然后删除左边数第一个左边的字符和从右边数第一个出现符号的字符。

3.删除之后,则该字符串只剩下Adam_Baldwin这个名字,以这个名字为变量mkdir建立新的子文件夹,然后mv,将文件移到该文件夹内即可。

具体shell脚本代码如下:

#!/负责的金鱼/bashecho "start..."#定义文件的路径folder="/media/cc/科研盘/2016春季科研2/dataset/age data/CACD2000/CACD2000/1"#这里注意加上*.jpg,这样表示文件内所有.jpg结尾的文件,可以避免将文件夹或者其他文件读取。for file in $folder/*.jpgdo#这里`是esc下面的符号,不是单引号temp=`basename $file`#移除左边的字符,%表示移除,_表示该符号左侧var=${temp%_*}#移除右边的字符,#表示移除,_右边字符var1=${var#*_}mkdir $var1#echo $var1#mv表示移动文件夹,cp表示复制mv $temp $var1 #echo $vardone

有的时候显示augment list too long,解决办法网上说有4种,我这里采用两种供参考!
1.将脚本写成shell函数,然后调用,即上面的脚本变幻为:

#定义函数function mv()#!/负责的金鱼/bashecho "start..."#定义文件的路径folder="/media/cc/科研盘/2016春季科研2/dataset/age data/CACD2000/CACD2000/1"#这里注意加上*.jpg,这样表示文件内所有.jpg结尾的文件,可以避免将文件夹或者其他文件读取。for file in $folder/*.jpgdo#这里`是esc下面的符号,不是单引号temp=`basename $file`#移除左边的字符,%表示移除,_表示该符号左侧var=${temp%_*}#移除右边的字符,#表示移除,_右边字符var1=${var#*_}mkdir $var1#echo $var1#mv表示移动文件夹,cp表示复制mv $temp $var1 #echo $vardone#调用mv函数mv()

2.继续写脚本,将某些年龄段的图像建立子文件夹,然后将图像移到该文件夹内,分批处理。
比如文件名为23_Amia_brain_0001.jpg,则我只需要读取23,即将——符号右边字符删除,将该文件移到23年龄段对应的子文件夹即可。
作者写的一个脚本如下(不同情况不同对待,只是提供一个思路而已!):

#!/usr/负责的金鱼/env shecho "start.."folder="/home/cc/Age/data/11111"#mkdir 1 2 3 4 5 6 for file in $folder/*dotemp=`basename $file`var=${temp%_*}#定义20,30,40,50,60,70年龄段var1 =20var2=30var3=40var4=50var5=60var7=70#var1=${temp#*_}echo "$var"#依据不同的情况建立1,2,3,4,5,6,7文件夹,并且分别将不同的文件移动到对应的文件夹。if [$var<$var1]thenmkdir 1mv $temp 1elsemkdir 2mv $temp 2elif [20<$var&&$var<=30]thenmv $temp 2elif [30<$var&&$var<= 40]thenmv $temp 3elif [40<$var&&$var<= 50]thenmv $temp 4elif [50<$var&&$var<= 60]thenmv $temp 5elif [60<$var&&$var<= 70]thenmv $temp 6elsemkdir 7mv $temp 7#echo "wrong..."fiecho "done...."done

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。