本次任务要处理的数据共101227行,样例如下:
18 Jogging 102271561469000 -13.53 16.89 -6.4 18 Jogging 102271641608000 -5.75 16.89 -0.46 18 Jogging 102271681617000 -2.18 16.32 11.07 18 Jogging 3.36 18 Downstairs 103260201636000 -4.44 7.06 1.95 18 Downstairs 103260241614000 -3.87 7.55 3.3 18 Downstairs 103260321693000 -4.06 8.08 4.79 18 Downstairs 103260365577000 -6.32 8.66 4.94 18 Downstairs 103260403083000 -5.37 11.22 3.06 18 Downstairs 103260443305000 -5.79 9.92 2.53 6 Walking 0 0 0 3.214402
将数据集中所有信息异常的行删除。
比如上面的样例中第4行数据只有3个元素,而其他行都有6个元素,所以第4行是信息异常的行,将其删除。再如第12行数据的第3个元素明显也是有问题的,所以它也是信息异常的行,将其删除。
数据集中可能还会存在一些其他异常。
将全部信息处理之后,每行的元素以逗号为分隔符,写入文件test1
。
文件test1
共100471行,样例如下:
6,Walking,23445542281000,-0.72,9.62,0.14982383 6,Walking,23445592299000,-4.02,11.03,3.445948 6,Walking,23470662276000,0.95,14.71,3.636633 ...
统计文件test1
的数据中所有动作的数目并打印到屏幕,然后将动作数目对100取整后写入test2
文件,多余的信息行抛弃。比如统计出Jogging
的数量为3021
次,则在屏幕上打印Movement: Jogging Amount: 3021
,然后将前3000行信息写入test2
文件。
文件test2
共100200行。
读取文件test2
的数据,取每行的后3列元素,以空格为分隔符写入文件test3
。
文件test3
共100200行,样例如下:
-0.72 9.62 0.14982383 -4.02 11.03 3.445948 0.95 14.71 3.636633 ...
读取文件test3
的数据,每行数据为一组,每组组内的元素以空格为分隔符,组与组之间的数据以逗号为分隔符,每20组元素为一行,写入文件finally
。
文件finally
共5010行,样例如下:
-0.72 9.62 0.14982383,-4.02 11.03 3.445948,0.95 14.71 3.636633,-3.57 5.75 -5.407278,-5.28 8.85 -9.615966,-1.14 15.02 -3.8681788,7.86 11.22 -1.879608,6.28 4.9 -2.3018389,0.95 7.06 -3.445948,-1.61 9.7 0.23154591,6.44 12.18 -0.7627395,5.83 12.07 -0.53119355,7.21 12.41 0.3405087,6.17 12.53 -6.701211,-1.08 17.54 -6.701211,-1.69 16.78 3.214402,-2.3 8.12 -3.486809,-2.91 0 -4.7535014,-2.91 0 -4.7535014,-4.44 1.84 -2.8330324
4个*.py
文件
test1.py
test2.py
test3.py
finally.py
4个运行Python脚本后生成的文件
test1
test2
test3
finally
新创建一个csv文件将原文件中的空格换成逗号然后写入新的csv文件
代码如下:
a=open(r'C:\\Users\\W10\\Desktop\\OriginalData.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\OriginalData.csv','w') for i in a: i=i.replace(' ',',') b.write(i) a.close() b.close()
然后csv文件就会变成下面这个样子
此处我们可以把原文件中的每行中的各个元素放入列表中,看看该列表的长度是否为6,以及该列表的第三个元素是否为‘0’
,如果长度为6而且第三个元素不为‘0’
,则该行信息正常,则有以下代码:
a=open(r'C:\\Users\\W10\\Desktop\\OriginalData.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test1.txt','w') c=[] for i in a: i=i.replace(' ',',') c=i.split(",") if len(c)==6 and c[2]!='0': b.write(i) a.close() b.close()
然后就有了如下的test1.txt
若要求test1为csv类型,可用如下代码:
a=open(r'C:\\Users\\W10\\Desktop\\OriginalData.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test1.csv','w') c=[] for i in a: i=i.replace(' ',',') c=i.split(",") if len(c)==6 and c[2]!='0': b.write(i) a.close() b.close()
得到text1.csv如下:
这里稍微复杂一点
我用了如下代码:
a=open(r'C:\\Users\\W10\\Desktop\\test1.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test2.txt','w') c=[] w=0 j=0 s=0 x=0 u=0 d=0 w2=[] j2=[] s2=[] x2=[] u2=[] d2=[] for i in a: c=i.split(',') if c[1]=='Walking': w+=1 w2.append(i) if c[1]=='Jogging': j+=1 j2.append(i) if c[1]=='Standing': s+=1 s2.append(i) if c[1]=='Sitting': x2.append(i) x+=1 if c[1]=='Upstairs': u2.append(i) u+=1 if c[1]=='Downstairs': d+=1 d2.append(i) print("Movement: Walking Amount:%d"%w) print("Movement: Jogging Amount:%d"%j) print("Movement: Standing Amount:%d"%s) print("Movement: Sitting Amount:%d"%x) print("Movement: Upstairs Amount:%d"%u) print("Movement: Downstairs Amount:%d"%d) w1=w-w%100 j1=j-j%100 s1=s-s%100 x1=x-x%100 u1=u-u%100 d1=d-d%100 for i in range(w1): b.write(w2[i]) for i in range(j1): b.write(j2[i]) for i in range(s1): b.write(s2[i]) for i in range(x1): b.write(x2[i]) for i in range(u1): b.write(u2[i]) for i in range(d1): b.write(d2[i]) b.close() a.close()
然后就有了如下的test2.txt
若要求test2为csv类型,可用如下代码:
a=open(r'C:\\Users\\W10\\Desktop\\test1.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test2.csv','w') c=[] w=0 j=0 s=0 x=0 u=0 d=0 w2=[] j2=[] s2=[] x2=[] u2=[] d2=[] for i in a: c=i.split(',') if c[1]=='Walking': w+=1 w2.append(i) if c[1]=='Jogging': j+=1 j2.append(i) if c[1]=='Standing': s+=1 s2.append(i) if c[1]=='Sitting': x2.append(i) x+=1 if c[1]=='Upstairs': u2.append(i) u+=1 if c[1]=='Downstairs': d+=1 d2.append(i) print("Movement: Walking Amount:%d"%w) print("Movement: Jogging Amount:%d"%j) print("Movement: Standing Amount:%d"%s) print("Movement: Sitting Amount:%d"%x) print("Movement: Upstairs Amount:%d"%u) print("Movement: Downstairs Amount:%d"%d) w1=w-w%100 j1=j-j%100 s1=s-s%100 x1=x-x%100 u1=u-u%100 d1=d-d%100 for i in range(w1): b.write(w2[i]) for i in range(j1): b.write(j2[i]) for i in range(s1): b.write(s2[i]) for i in range(x1): b.write(x2[i]) for i in range(u1): b.write(u2[i]) for i in range(d1): b.write(d2[i]) b.close() a.close()
然后csv文件就会变成下面这个样子
主要思路为给每个动作都设一个计数器,并且各定义一个列表,来存放各个动作的数据,最后向test2写入指定个数的数据
a=open(r'C:\\Users\\W10\\Desktop\\test2.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test3.txt','w') c=[] for i in a: c=i.split(',') e=c[3]+','+c[4]+','+c[5] b.write(e) b.close() a.close()
然后就有了如下的test3.txt
若要test3为csv类型可用如下代码:
a=open(r'C:\\Users\\W10\\Desktop\\test2.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\test3.csv','w') c=[] for i in a: c=i.split(',') e=c[3]+','+c[4]+','+c[5] b.write(e) b.close() a.close()
然后csv文件就会变成下面这个样子
主要思路为定义一个列表把每后三个存入该列表中,然后将其改成相应形式的字符串写入test3即可
a=open(r'C:\\Users\\W10\\Desktop\\test3.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\finally.txt','w') c=[] d=0 for i in a: d+=1 if d%20==0: i=i.replace(',',' ') b.write(i) if d%20!=0: i=i.replace(',',' ') i=i.replace('\n',',') b.write(i) b.close() a.close()
然后就有了如下的finally.txt
若要求finally文件为csv类型,可用如下代码:
a=open(r'C:\\Users\\W10\\Desktop\\test3.txt','r') b=open(r'C:\\Users\\W10\\Desktop\\finally.csv','w') c=[] d=0 for i in a: d+=1 if d%20==0: i=i.replace(',',' ') b.write(i) if d%20!=0: i=i.replace(',',' ') i=i.replace('\n',',') b.write(i) b.close() a.close()
然后csv文件就会变成下面这个样子