tickcount()修改成小时分钟_10分钟解救工作俩小时,没想到自己成了“洗数人”,全网最不专业的数据清洗大集合...

6a3b051b848d9f47a2907c8f1ce001f8.png

说在前面

衣服脏了,我们可以 洗衣粉
水污了,我们可以使用 净水机
数据脏了,怎么办?本文告诉您

那么有没有试想过数据有没有变“脏”[1]的时候呢?如图1-令人眼花缭乱的数据

133283b2d8532dfd949d623680b38f7e.png
图1-令人眼花缭乱的数据

言归正传,准备好开始学习了吗?

实践是检验真理的唯一标准

如果真需要实践,可能需要用到的软件工具

  1. Notepad 记事本(windows系统自带)推荐使用Notepad++ 记事本高级软件
  2. Excel 电子表格软件
  3. Python Runtime 运行环境

快来对号入座了

有时候工作是给自己做的,在没有想着邀功、炫技的前提下,个人以为“前瞻性”也是非常有必要的,即便现在可以花5分钟的时间用最简单的方法完成工作,但是也会有一天再有可能遇到同样的功能,此刻是否还需要重复、机械的从头开始呢?

那么我们是不是也需要一劳永逸的技能傍身呢,即便加薪无望但是提高的效率便是时间金钱呢,接下来开始咱们的段位设计呗

入门级

入门级使用的重要技能就两个,偶尔也会因为环境不允许被迫使用 [手动捂脸]
1. 找规律
2. 拼体力
  1. 首先仔细查看上面的数据,可以发现数据中频繁出现的标点符号是分号 和逗号,由此判断这堆杂乱的数据是使用标点符号对数据基础划分的(庆幸前任同事对我比较好,数据整理得还算有迹可循);
  2. 有了规律,我们就要开始整理格式了,使用类似记事本这样的文本处理软件,按照动画图2-使用Notepad++批量替换的方式,可以实现把现有的规律转换成我们最终需要的,比如我们可以把分号 转为换行符nrn > 需要注意的是 word里面换行的用^p表示;

cbcb5fc67138adfe33036bf945744bc9.gif
图2-使用Notepad++批量替换

3. 对于这类比较有规律的数据,可以将初步处理好的数据复制到Excel,按照下方动画图3-使用Excel数据分列功能切割数据的方式,继续基础级别的清洗。

aa4a496eac963a28b450b32b06bad713.gif
图3-使用Excel数据分列功能切割数据

至此,入门级的手工方法,我只用过这些了,还是尽快开始咱们的编程救援行动

其实吧,虽然在入门级使用找规律拼体力这两种方法能解决大部分问题,工作总有隐形的力量和你作对,生在新时代的我们,二话不说就是干

伸手即得「一对快捷键快到怀疑人生」

开始另一个故事(又要编故事了……)

人生不如意之事十之八九,这就从老板让你「计算所有球的总数」开始,内心OS是不是又要开始浪起浪了,啊呸……程序猿小哥哥表示故事编不下去了,直奔主题了

这时收到这个梦碎的工作,还是先别着急,也不用烧香拜神,还是求求自己学一下这个 Excel 中的神技能吧

图3 已经获得了一列形如下表的数据信息:

  • 数量及名称
  • 持有79个足球
  • 持有91个手球
  • 持有14个篮球
  • 持有79个排球
  • 持有51个羽毛球
  • 持有97个网球
  • 持有88个高尔夫球
  • 持有39个冰球
  • 持有38个沙滩排球
  • 持有51个棒球
  • ……

既然故事已经发展到这里了,那咱们还有回到入门级使用 找规律拼体力 的想法吗?

毕竟,我是比较有原则了,是坚决不会用繁琐的方式解决问题,所以咱们就只用一对快捷键结束老板的旨意吧

需要我们完成其实不是难在「计算总数」,而是从上面的文字列表中「提取出每一个球的个数」,因为非数字的文字是无法参与数学计算的。

分析结束,那我们愉快的结束吧

如动画图4-Excel中令人快乐的快捷键, 1. 首先在 单元格B2数据对应第一行手动输入提取出第一个内容, 2. 回车确认,点击鼠标选择刚才输入的单元格, 3. 快捷键 CTRL+ E(两个按键一起按下之后一起松开) 4. 最后就是见证奇迹的时刻了 5. 接下来是「计算所有球的总数」,就是直接使用 Excel公式 中的 =SUM(B2:B24) 求和公式,方法简单不再赘述,实在有需求欢迎文下留言,我统一解答

ab0a2e8562440485d0f227471eccce28.gif
图4-Excel中令人快乐的快捷键

童话故事级「欢迎体验骨感」

童话都是美好的,现实也更骨干,没错,你没有看错,作者花了 1/5 的篇幅写了一个反面教材, 当然这是给读者的善意提示,也可以看作是给受同样折磨的读者一个泄愤的机会,欢迎文下留言,一起讨论工作中的“炫技”
如果嫌弃,那就跳过这个给工作添乱、帮倒忙的 大脑短路型解题方式
  • 看看下面的动画图5-极有炫技嫌疑的惊奇操作,或许就能简单地认清,这类 背道而驰 的数据清洗处理方法,不仅更加繁琐,还可能带来 已知不可预知 的 错误后果,这也是我们在数据清洗过程中,需要稍加注意的问题。
  • 使用 MID函数 固定截取我们需要的数据,使用自动填充拉取之后的数据,可能真的有些繁琐,甚至因为方法不通用而导致获取到错误数据!!!

283d4b4f91785a34675829be49a57700.gif
图5-极有炫技悬疑的惊奇方法

一劳永逸「知识技能积累型」

终于等到您,感谢有耐心的你,终于翻阅到了本文中最重点的部分,虽然学习成本稍微高,但也是最有综合竞争力的一项技能。
  • 本部分内容可能比较适合已经掌握基础编程语法的读者延续参与。
  • 当然如果您愿意有毅力学习编程或者其它计算机技术,那请持续关注我的后续文章,我们一起渐渐学习进步。

编程学习前我们的准备

  • 软件和硬件
    • 对编程的兴趣和热情
    • 比较灵活的逻辑能力
    • 事件关联能力,比如:把某一项工作和编程中的某一个方法进行关联,从而合并式地处理问题
    • 电脑
    • Python Runtime 运行环境,点击这里直达Python官网
  • 知识储备
    • 一些数学基础知识
    • 一些逻辑构建方法
    • 流程图的阅读和绘画
    • 最好擅长一门编程语言
  • 如果以上知识都有待积累,转述一个坊间的偏方
《我的世界》是一个国外比较火的游戏,据说这可以成为编程学习的起源

继续完成今天“数据清洗”的选题

First. 时光退回到文章完成前

  1. 生成本文使用的数据素材,如下:
持有79个足球,已借出52%,还剩余可借38个;持有91个手球,已借出88%,还剩余可借11个;持有14个篮球,已借出10%,还剩余可借12个;持有79个排球,已借出45%,还剩余可借43个;持有51个羽毛球,已借出37%,还剩余可借32个;持有97个网球,已借出51%,还剩余可借47个;持有88个高尔夫球,已借出77%,还剩余可借19个;持有39个冰球,已借出16%,还剩余可借32个;持有38个沙滩排球,已借出47%,还剩余可借20个;持有51个棒球,已借出60%,还剩余可借20个;持有61个垒球,已借出79%,还剩余可借12个;持有34个藤球,已借出20%,还剩余可借27个;持有92个毽球,已借出53%,还剩余可借43个;持有52个乒乓球,已借出44%,还剩余可借29个;持有28个台球,已借出15%,还剩余可借23个;持有56个鞠蹴,已借出95%,还剩余可借3个;持有32个板球,已借出18%,还剩余可借26个;持有83个壁球,已借出97%,还剩余可借2个;持有76个沙壶,已借出92%,还剩余可借5个;持有11个冰壶,已借出87%,还剩余可借1个;持有83个克郎球,已借出19%,还剩余可借66个;持有59个橄榄球,已借出77%,还剩余可借13个;持有61个曲棍球,已借出22%,还剩余可借47个

不得不说的一个画外音

很显然这么繁杂的数据,人工生成是很无趣的事情,你不愿去做,当然我也不愿意,那么又很需要,怎么办呢? 答:当然是扔给 计算机 完成呢(心疼计算机 3秒)
  1. 要想成功的 指使 计算机 帮助人类完成工作,那么我们就需要使用它能听懂(理解)我们意图,唯一的途径就是编程语言
  • 编程语言有很多,例如:C、C++、Java 等等数十种
  • But, Life is short, you need Python(意译:人生苦短,我用 Python)
  • 所以,本文乃至今后的大部分创作,将会基于 Python 为主要使用的计算机语言

回到主题,如何生成上幅形如杂乱字符的数据信息,

import random

def gen_data():
    # 球类列表
    balls = ['足球', '手球', '篮球', '排球', '羽毛球', '网球', '高尔夫球',
             '冰球', '沙滩排球', '棒球', '垒球', '藤球', '毽球', '乒乓球',
             '台球', '鞠蹴', '板球', '壁球', '沙壶', '冰壶', '克郎球', '橄榄球', '曲棍球']
    text = ''
    # 是一个循环,用来 从 球类列表 逐个获取每一类 球的名称
    for ball in balls:
        # 总数
        total = random.randint(10, 100)
        # 借出率
        borrow_rate = random.random()
        # 空闲可借数
        free = total - (total * borrow_rate)
        # 借出率百分比
        borrow_percent = '%2.f%%' % (borrow_rate * 100)

        # 这里使用了一个 Python 语法糖:格式化字符串
        text = text + '持有%d个%s,已借出%s,还剩余可借%d个' % (total, ball,
                                                  borrow_percent, free) + ';'

    # 输出,很像就是计算机开口说话,
    # 括号里面的数据内容就是 计算机准备告诉我们的
    # 输出的内容,就是上面的那段 杂乱的数据
    print(text)

Second. 时光回到文章编辑进行中,使用我们的办公助手电脑「计算所有球的总数」

import re

def analysis_data():
    # 打开文件,也就是把保存成文件的数据读取到,电脑的运算部件,术语称为 加载数据到内存
    with open('databalls_count.txt', 'r', encoding='UTF-8') as file:
        data = file.read()
        # 将那堆杂乱的数据,依据 分号; 划分成以小组为单位的数据,记录每一行信息
        ball_items = str(data).split(';')
        # 设定数据的过滤规则,读取数据,学名为 正则表达式
        pattern = r'持有(d+)个'
        # 用来记录统计总数的,我们可以看作 盛饭的碗,学名为 变量
        total_sum = 0
        # 将每一行项目都循环 过滤一遍
        for ball_item in ball_items:
            # 再依据 逗号, 划分成以小组为单位的数据,记录每一类求的单独统计个数
            counts_per_ball = ball_item.split(',')

            # 执行正则表达式,按照指定的规则从文本中读取过滤后的数据
            # 这个也是 数据清洗 常用且有效的一个流程
            m_res = re.findall(pattern, counts_per_ball[0])
            total_sum = total_sum + int(m_res[0])

    # 输出计算结果
    print('所有球的总数=', total_sum)
上一段程序执行后输出的结果,如下:
所有球的总数= 1355
至此,我已将日常工作中常用的几种 数据清洗 方式介绍结束了,可能是不专业的,但应该是比较有效率的工作 生产力利器

写在后面

诚然我还是一个创作新手

  • 我不是全职创作者,加之平时在学校教学生编程属于创作的时间较少,文章更新内容可能不是很合乎您的需要,但是我很期待您的评论留言,如果有大多数人需要获取的知识内容,我一定积极更新合乎大家的胃口。
  • 作为长期以往的埋头 Coding ,实在 苦于 像今天这样 “以编故事的方式” 开始知识创作分享,尚不知如何选择多数人需要的选题、技术因故事侧重点太多看点变少。

很期待各位读者、网友,将需要获取的内容方向的在文下留言,我会积极整理,奉献更优质的内容给大家。


最后,感谢大家的阅读,希望我创作的内容,能给您的生活和工作起到帮助。

本文2020年3月10日首发于知乎

林星宇(言它)

言它​www.zhihu.com
1c70628abd9d4f299bc8f90696ea36c9.png

其他声明

本文除 角标注释 外,均是作者原创,所用故事、数据均是通过 计算机脚本程序 虚构,仅用于学习研究为目的,没有其他指代意义,如仍觉得侵犯个人权益,望与我联系,我定积极配合。

关于转载

  • 为保证文章可读连贯性,请全文转载;创作不易,也望保留版权信息
  • 无其它特殊要求,转载自由,欢迎转载,感谢关注。

参考

  1. ^数据领域的“脏”意味着,我们手中持有的数据格式比较混乱,或者我们实际需要的信息里又夹杂了很多无关、无用的垃圾数据, https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97/4402497
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值