Python与数据分析《四》

不小心去考了一个简直不能再愚蠢的考试(FRM),导致最近也没有时间更新,本来都觉得大家都要取关了,没想到还涨了这么多粉,顿时又动力满满,继续为大家勤奋地更新,争取在六月之前将数据分析的部分写完,按照我的schedule还有很多小节。我也是单兵作战,抱着负责任的态度,每一篇的举例和措词,都是100%的原创,都是要经过很长时间去推敲的,方便大家能够快速的学习了解,在每天工作之后还要费大量的脑力,确实是一件很伤神的事。如果大家觉得我写的内容对大家有所帮助,希望大家能够多推荐亲朋好友同学来关注,激励我坚持下去!

接着上期的内容,我们将继续data manipulation over the whole table的剩余话题。之后将开始文本数据的处理。

3.整表(Table) Cont.

Reshape是一系列操作的统称,简单的有改变表格的维度,复杂一些的包括:用r的朋友们都比较熟悉melt,用惯了SAS的同学都比较熟悉transpose, EXCEL党比较熟悉的pivot。我这里特地把pivot与reshape分开(其实pivot也是reshape的一种形式)是因为pivot中会有aggregation的操作,而melt和transpose是不太有的。

总的来说reshape就是改变表格的形状,把变量变成列或行的值,或者是把某(几)列的值变成变量,或是加一些aggregation的操作。我们将会做简单的示例。我们以下列dataframe示例:

1.将变量变成值(variable to value)

这里我们需要用到pandas里melt这个方程,这个方程其实就是以一个(或多个)列作为支点,对其余的列进行旋转(Rotate)。我们要对几个输入值做出说明:

Id_vars : Rotate的支点;

Value_vars :Rotate的轴;

Value_name &Var_name :对rotate完之后的列重新命名。

2.将值变成变量(value to variable)

这里我们需要用melt的反向操作pivot,同样是rotate但是是不同的方向。同样我们对几个关键输入值作出说明:

Index :rotate的支点;

Columns :rotate的轴;

Values :rotate轴的尾端。

3 .附加aggregation操作的pivot

这里我们要用pivot_table这个方程,在某种意义上这个功能相当于一些group by的操作,但实质意义上说它是在复制excel中pivot的功能。下面是我们用pivot_table求每个人的平均分数。

这个就相当于我们在SQL中使用:

SELECTname,mean(score)

FROMmelt_ep

GROUP BYname,subject

文本处理(Text)

对于表格型的数据的基本操作我们先讲到这里,下面我们开始进入文本数据的处理。本期及以后一期的重点将放在正则表达( Regular Expression)上,这是在处理文本语言方面不可缺少的工具。主要以介绍为主,对于如何写出高效的正则表达式,我们会在以后探讨。我们使用Python中built-in的包re来进行讲解。这个最早在Ruby中发扬光大的语言,尽管在Ruby已经过时,regex仍成为现在众多流行语言中不可或缺的一部分。Regex在data collection和data cleaning中都有极大的应用,在爬虫(Web Sscraping)中更始不可缺少的核心工具。

这期我们把regex的应用重点放在两个方面:

基于模式的识别( Pattern Recognition);

基于模式的挖掘( Pattern Mining)。

第一部分重点在于regex的基本使用,及re包中一些简单方程。

1.Pattern Recognition

我们以一个简单的例子来进行说明:

Today I am going tointro3ducethe Regular Expression, which is a dominatinglangu)agein LOTS0FAPPL1CATIONS!

我们想找处这句话中含有特殊符号或数字的英文单词,我们在写正则表达式之前要注意:我们要把检测单位变成一个单词(\b)。关于这许多符号要不要记?我是记不住一部分的,在用的时候都会打开cheat sheet进行参考,我也把连接放在了文末。

(我在这里的表达不是最好的,但只是为了起到解释作用。)

这里我们对这个regex做一下简单的解释:

[A-Za-z]意思是字符的范围是English Alphabet(upper and lower),*的意思是有零个或多个;

[^A-Za-z]意思是除了Alphabet和blank之外的所有符号,+的意思是至少有一个;

\b是regex里用来分割单词的符号。

翻译起来也很简单,我们只要找出里有非英文字母但不是空格的单词,findall的功能是遍历整段文字,去进行检索。

我们再举一个例子:

‘\d’是digit的symbol,这个方程就是在检查输入是否满足mm-dd-yyyy的时间格式,附带了mm

第二部分的在于regex的应用,我们将以基于regex的爬虫进行讲解。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180523G0467G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券