主要内容:数据清洗。
昨天有朋友在微信问我怎么没有更新,昨天回家整理了一些相关的东西,没来得及写文章。今天一个朋友听说我在简书分享,也和我一同加入了简书,很喜欢这样的感觉。之前军哥跟我说过,慢慢尝试去写,然后会有一部分人会被你影响,我发现是真的,真的能够影响到一部分人。闲话少说,开始今天的内容。
数据清洗
从本章开始,内容稍微复杂一点,但也不是那么难。
记得之前我在爬去boss
网站的招聘信息的时候,抓取的数据并非我们所理想的样式,后面经过处理后,成为一个自己想要的样子,这个过程可以理解为数据清洗。这里的处理是在代码处理的,不是手工完成。
编写代码清洗数据
在此之前需要了解一下n-gram
模型,它表示文字或语言中的n
个连续的单词组成的序列。在进行自然语言分析时,使用 n-gram
或者寻找常用词组,可以很容易地把一句话分解成若干个文字片段。更多详情可以去维基查看一下,或者自行搜索。
下面通过代码将返回维基百科词条“Python programming language”
的2-gram
列表:
1 | from urllib.request import urlopen |
ngrams
函数把一个待处理的字符串分成单词序列(假设所有单词按照空格分开),然后增加到 n-gram
模型(本例中是 2-gram
)里形成以每个单词开始的二元数组。
我们得到的数据部分如下:
1 | [['\nPython\n\n\n\n\nParadigm\nObject-oriented,', 'imperative,'], ['imperative,', 'functional,'], ['functional,', 'procedural,'], ['procedural,', 'reflective\n\n\nDesigned\xa0by\nGuido'], |
显然,是需要处理的。
首选处理通过正则移除\n
,再把 Unicode 字符过滤掉。先把内容中的换行符(或者多个换行符)替换成空格,然后把连续的多个空格替换成一个空格,确保所有单词之间只有一个空格。最后,把内容转换成 UTF-8
格式以消除转义字符。函数初步如下:
1 | def ngrams(input, n): |
Python
获取所有的标点符号:
1 | ➜ url python |
我们还要去除一些维基引用的标记、标点符号等;进一步进行清洗的函数:
1 | from urllib.request import urlopen |
这样处理后,我们的结果就稍微好点。
1 | ['Linux', 'Foundation'], ['Foundation', 'Mozilla'], ['Mozilla', 'Foundation'], [ |
数据存储后再清洗
对于编写代码清洗数据,你能做或想做的事情只有这些。除此之外,你可能还需要处理一些别人创建的数据库,或者要对一个之前没接触过的数据库进行清洗。
主要额方法有编写脚本或者第三方工具。例如OpenRefine
。本小节主要是介绍一下该软件的安装和使用。也可以理解为一个图形化的应用,对于工具类的东西我一直有一个观点:点点点,就会了;何况还是图形化的。所以我不做介绍,看一下官网的三个视频就会了。