组内数据处理任务
任务描述
本次任务要处理的数据共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
Step 1
将数据集中所有信息异常的行删除。
比如上面的样例中第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
...
首先,选择将要处理的数据.txt文本转换为CSV文件,利用CSV文件的操作进行数据筛选
#!/usr/bin/env/ python3
import csv
txtfile = open("C:\\Users\Z的R7000\Desktop\wenben2.txt", 'r', newline='')
csvfile = open("C:\\Users\Z的R7000\Desktop\wenben_2.csv", 'w', newline='')
writer = csv.writer(csvfile)
csvRow = []
for line in txtfile:
csvRow = line.split()
writer.writerow(csvRow)
txtfile.close()
csvfile.close()
将数据储存在CSV文件用EXCEL文本打开后就能看到转换后的数据
同时遍历整个CSV文件中的数据并且删除每行len不为6的数据和下标为2 的数等于0时的数据 处理
step1代码实现:
#!/usr/bin/env/ python3
import csv
csv_reader=csv.reader(open('C:\\Users\Z的R7000\Desktop\wenben_1.csv',encoding='utf-8'))
for row in csv_reader:
if len(row) == 6 and int(row[2]) != 0:
print(row)
经过处理后的数据样例:
Step 2
统计文件test1
的数据中所有动作的数目并打印到屏幕,然后将动作数目对100取整后写入test2
文件,多余的信息行抛弃。比如统计出Jogging
的数量为3021
次,则在屏幕上打印Movement: Jogging Amount: 3021
,然后将前3000行信息写入test2
文件。
文件test2
共100200行。
step 2则需要筛选特定的行 运用所学的字典以及键值对的知识 并且进行追加读写后遍历
for key,value in move_dir.items():
print(“Movement: {0} Amount: {1:d}”.format(key,value))
将最终的所需结果用代码方式实现
需要注意的地方也是学长点播过的地方是统计数目后对于文件的遍历使得文件指针已经指到了文件的末尾,所以后面对文件操作要重新进行一次遍历才能保证不会出错
step2代码实现:
import csv
import sys
input_file=sys.argv[1]
output_file=sys.argv[2]
with open(input_file,'r',newline='') as csv_in_file:
with open(output_file,'w',newline='') as csv_out_file:
filereader = csv.reader(csv_in_file)
filewriter = csv.writer(csv_out_file)
move_dir={}
j_dir={}
for row_list in filereader:
movement=str(row_list[1])
if(movement not in move_dir):
move_dir[movement]=1
else:
move_dir[movement]=move_dir[movement]+1
with open(input_file, 'r', newline='') as csv_in_file:
with open(output_file, 'w', newline='') as csv_out_file:
filereader = csv.reader(csv_in_file)
filewriter = csv.writer(csv_out_file)
for row_list in filereader:
movement = str(row_list[1])
if (movement not in j_dir):
j_dir[movement] = 1
if(j_dir[movement]<=move_dir[movement]//100*100):
filewriter.writerow(row_list)
j_dir[movement]=j_dir[movement]+1
for key,value in move_dir.items():
print("Movement: {0} Amount: {1:d}".format(key,value))
所需处理后的数据经过处理后样例如下:
Step 3
读取文件test2
的数据,取每行的后3列元素,以空格为分隔符写入文件test3
。
文件test3
共100200行,样例如下:
-0.72 9.62 0.14982383
-4.02 11.03 3.445948
0.95 14.71 3.636633
...
以空格为分隔符写入文件参考以下代码:
step3代码实现:
import csv
import sys
input_file=sys.argv[1]
output_file=sys.argv[2]
col=[3,4,5]
with open(input_file,'r',newline='') as csv_in_file:
with open(output_file,'w',newline='') as csv_out_file:
filereader=csv.reader(csv_in_file)
filewriter=csv.writer(csv_out_file,delimiter=" ")
for row_list in filereader:
row_list_output=[]
for index_value in col:
row_list_output.append(row_list[index_value])
filewriter.writerow(row_list_output)
处理后的数据实例如下:
Step 4
读取文件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
组与组以逗号为分隔符并且每20组元素为一行写入文件 以两类列表结合的思想嵌套起来进行追加读写遍历输出
step4代码如下:
#!/usr/bin/env python3
import csv
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
with open(input_file, 'r', newline='') as csv_in_file:
with open(output_file, 'w', newline='') as csv_out_file:
filereader = csv.reader(csv_in_file)
filewriter = csv.writer(csv_out_file)
total = []
for row_list in filereader:
total.append(row_list[0])
outputList = []
sum_list = []
sum = 0
for data in total:
if sum < 19:
sum += 1
sum_list.append(data)
else:
sum_list.append(data)
outputList.append(sum_list)
sum = 0
sum_list = []
for output_line in outputList:
filewriter.writerow(output_line)
step4输出数据样例如下:
本次任务在寒假完成的比较坎坷 时间分配不均以及知识掌握不牢固是主要的两项问题 希望今后能将自身的问题提早解决 熟练掌握学习更多的知识来丰富自己 在新的一学期里更加努力!