数据处理任务

任务描述

本次任务要处理的数据共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
...

Step 2

统计文件test1的数据中所有动作的数目并打印到屏幕,然后将动作数目对100取整后写入test2文件,多余的信息行抛弃。比如统计出Jogging的数量为3021次,则在屏幕上打印Movement: Jogging Amount: 3021,然后将前3000行信息写入test2文件。
文件test2共100200行。

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
...

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

验收内容

  • 4个*.py文件

    • test1.py
    • test2.py
    • test3.py
    • finally.py
  • 4个运行Python脚本后生成的文件

    • test1
    • test2
    • test3
    • finally

1.将数据文件类型改为CSV文件

新创建一个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文件就会变成下面这个样子
在这里插入图片描述

2.test1

此处我们可以把原文件中的每行中的各个元素放入列表中,看看该列表的长度是否为6,以及该列表的第三个元素是否为‘0’,如果长度为6而且第三个元素不为‘0’,则该行信息正常,则有以下代码:

import csv
with open('C:\\Users\\W10\\Desktop\\OriginalData.csv','r',newline='') as a:
    with open('test1.csv','w',newline='') as b:
        x = csv.reader(a)
        y = csv.writer(b)
        for i in x:
            if len(i) == 6 and float(i[2]) != 0 :
                y.writerow(i)

在这里插入图片描述

结果如下:
在这里插入图片描述

3.test2

这里稍微复杂一点
我用了如下代码:

import csv
a=open('test1.csv','r')
b=open('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()

结果如下:
在这里插入图片描述
在这里插入图片描述

主要思路为给每个动作都设一个计数器,并且各定义一个列表,来存放各个动作的数据,最后向test2写入指定个数的数据

4.test3

import csv
with open('test2.csv','r') as d:
    with open('test3.csv','w',newline='') as f:
        a=csv.reader(d)
        b=csv.writer(f)
        for i in a:
            c = i
            print(i)
            e = c[3:6]
            b.writerow(e)

在这里插入图片描述

结果如下:
在这里插入图片描述

5.finally

import csv
c=[]
d=0
with open('test3.csv','r')as a:
    with open('finally.csv','w',newline='') as b:
        a=csv.reader(a)
        b=csv.writer(b)
        for i in a:
            d += 1
            for j in i:
                c.append(j)
            if d%20==0:
                b.writerow(c)
                c=[]


结果如下:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值