首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python与数据分析《一》

出真实数据,确保政府决策的科学有据;做扎实工作,诠释统计人生的平凡风雅。

——国家统计局标语

接下来这几篇,我们将对Python在数据分析方面的应用做方方面面的具体介绍。

我们知道在数据分析中,需要很多包,如pandas, numpy, scikit, scipy, 以及画图的matplotlib,我们要进行很多操作,包括清理数据(Data Clean),数据操纵(Data Manipulation),还要做一些EDA(Exploratory Data Analysis),然后可能 会有一些假设检验(Hypothese Testing) 及 建模(Modeling),以及一些验证(Validation) 、监测(Monitering)及Backtesting等等一系列过程。在小规模的数据范围内,我们可以直接在内存(RAM)上进行数据分析。我们在很多时间内都会对Pandas中DataFrame进行使用和操作。因此我们用这一期对DataFrame进行一个简要的深入介绍是很有必要的。

From Built-in Library CSV to Pandas DataFrame

我们在数据分析之初,就是要载入数据到你的Computing platform 上。很多人都用过R,大家对R中存储数据的单位DataFrame印象都很深刻,其操作的便捷性确实让人很难适应别样式的数据单位。

也因为如此大家在接触Python之初,就把重点放在了Pandas 上,因为Pandas中的DataFrame及各项操作确实和R中的DataFrame很相似,对于用惯了R的同学们,确实很好上手,但大多数人都觉得对于同样的操作,R比Python要容易的多,比如说提取一行或一列,在R中只需要指明行数、列数、列名或行名就行,但在Pandas中要首先搞清楚loc和iloc的区别;在中更改一列的名字是及其简单的,只需要重新设置以下names就行了,就是一个对array的操作,在Pandas中,学会用rename这个方程,用到dict进行操作,是需要费点功夫的,特别是对没有很扎实Python基础的人。于是就有了在功能性和操作性方面,Python在数据分析中没有R强大的错误说法。这是因为R根本不需要什么基础,这种结构性语言与SAS一样,在使用中学习就足够了,但Python不一样,你需要通过一些基础学习才能灵活掌握。

这期中,我们将从Python build-in的I/O方法入手,然后再延伸到Pandas。尽管我们平时根本不会用到这些方法,毕竟太过复杂,Python Base也导致I/O不会太快,但了解其机制能让使用者对Pandas中的I/O 及对数据的manipulating有一个更充分的了解。

CSV是一个built-in的Python Package,有兴趣的同学可以去Python.org去阅读一下该library的说明和使用方法。[对于这些Python built-in的Package,我们是一定要学习的,因为这些包基本上囊括了Python所有的功能,包括上期所提到的decorator,还有更高级的factory。我们在此后的某期会着重介绍两个built-in packages: collections 和functools,这对写出高规格和高兼容性的代码是必不可少的。]

csv.reader()是csv library中的一个方程,它是对txt类型的文本进行操作,规定了分割符(delimiter)和newline的形式(对于类似csv类的文本类型,我们称之为formatted data file,因为I/O需要的所有参数都是固定的,比如csv,delimiter就是逗号)。

csv.reader()的功能就是把文本根据每一行都按照newline(“\n”) 的位置进行分行,按“,”的位置对每一行的记录进行拆分,它基本输出形式是一个list,而每一个成员(Component)都是一个list,这些成员中的成员是字符串(String)。

正因为同样的机制,用list of list 去创立一个ataframe时,每一个list是一行,而并非一列。

我们再看csv.DictReader()这个方程,在这个方程中,我们必须规定的是Fieldnames,也就是每一列的名字,这将被作为keys,输出的每一行将会是dict。如果我们将整个文本以dict的形式储存,将会造成极大的便利:

在操作性上灵活许多;

比起list,dict在提取值的速度上要快上n倍。

基于这些原因dataframe主要以dictionary 的形式去存数据。因此在灵活的使用dataframe之前,第一件事就是要熟悉dictionary。于是我们可以对dataframe进行对dictionary 一样的操作:

关于__getitem__, __setitem__见。下一期我们将列举Python中载入数据的方法。

小贴士

我们在上期中介绍了运算符重载(operator overloading)。在dict中,最基本的两种运算副重载的方法就是__setitem__ 和__getitem__。__setitem__对应的操作是object[key] = val,__getitem__对应的操作是object[key] 来retrieve 这个object中的指定位置的值。我们可以通过定义这两种方法来创造类dict型的object, 我们可以看以下的例子:

这个例子中,我用list作为DictObj 的数据container,规定了__setitem__和__getitem__的方法,就可以创造出了类dict的object。

如果你喜欢这个公众号,请推荐给你的亲朋好友哦。快快关注,点燃我坚持下去的信心和勇气~!

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com