南京音乐推荐联合社

pydata-notebook

啥都读 2019-06-11 13:46:25

CHAPTER 1 Preliminaries(预备知识)


1.1 What Is This Book About?(这本书是关于什么的)

这本书关心的是如何用Python对数据进行处理和清洗等操作。本书的目的是作为一个指南,讲解使用Python语言和它的一些处理数据的库和工具,这能让我们成为一个有效率的数据分析师(data analyst)。本书会告诉我们,使用Python语言的情况下,我们需要用那些工具来进行数据分析。

What Kinds of Data?(什么种类的数据)

我们说的数据指的是结构化的数据(structured data),比如:

  • 表格型数据,每一列有不同的类型(字符串,数字,日期等)。这种情况是我们最常见到的,常见于用tab-或逗号分隔的文件(比如CSV文件)

  • 多维数组(Multidimensional arrays,比如矩阵)

  • 用一列作为键(比如SQL中的主键和外键),整合多个表格的数据

  • 时间序列数据

大部分数据都可以被转化为结构化数据,方便进行分析和建模。如果无法转化,那么我们可以从数据集中抽取特征,做成一个结构化的形式。举个例子,新闻可以被处理为单词频率表格,然后我们可以对其进行情感分析(sentiment analysis)。

表格型程序,比如微软的Excel,可能是当今最广泛的数据分析工具,所以没必要把数据分析想得很难。

1.2 Why Python for Data Analysis?(为什么使用Python做数据分析)

这节我就不进行过多介绍了,Python近几年的发展势头是有目共睹的,尤其是在科学计算,数据处理,AI方面,否则大家也不会来看这本书了。

使用Python的一些优点

  1. Python是一门胶水语言,可以把不同语言整合起来,比如上层代码使用Python编写,底层代码用C,C++等语言实现。

  2. 解决了两种语言的问题。以前做研究用一门语言写原型(比如R,SAS),效果好了才会用其他语言去重新实现一遍(比如Java,C#,C++),部署到实际任务中。而Python的优势在于既适合做研究,又适合直接部署。

什么情况下不使用Python

因为Python是解释性程序设计语言(interpreted programming language),其运行速度比Java或C++慢。如果觉得慢一点没关系,可以用Python,但如果现实场景中需要系统低延迟,使用效率高,还是使用C++这样的语言比较好。

用Python编写多线程应用(multithreaded applications)并不方便,因为Python有一个叫做全局解释器锁(global interpreter lock (GIL))的机制,这个机制让编译器只能在一次运行一个Python指令。对于一些大数据量的处理,Python并不合适。

但并不是说Python不能运行多线程,并行代码。Python C扩展能使用本地多线程(通过C或C++)来并行运行代码,而不通过GIL机制,前提是不和Python object(对象)进行过多交互。

1.3 Essential Python Libraries(一些重要的Python库)

如果不了解Python的数据生态,以及本书中即将用到的一些库,这里会做一个简单的介绍:

Numpy

这里就不过多介绍了,下面给出一些链接可以参考。这个库太重要了,Python之所以能在科学计算上独领风骚很大程度上就是因为这个库。它还影响了另一个很有名的深度学习库,PyTorch。

  • Wiki:NumPy

  • Baidu:NumPy

  • 使用 Python 进行科学计算:NumPy入门

  • NumPy用户指南

详情可见第4章。

pandas

本书的主角,用于进行数据处理和清洗的利器。详情可见第5章。

matplotlib

用于绘图和数据可视化,详情可见第9章。

IPython and Jupyter

本书的笔记就是使用Jupyter来制作的,详细内容可以查看下面的资料。

  • IPython 与 Jupyter 相关概念介绍

  • IPython和Jupyter Notebook

  • Jupyter官网

  • Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough(视频,需要翻墙)

SciPy

  • Wiki:SciPy

  • SciPy模块介绍

scikit-learn

集成了很多机器学习模型,如果搞机器学习的话这个包一定要好好学。虽然13.4做了介绍,但我觉得还是不够,想要深入的话推荐大家再去多看资料和书籍进行学习。

statsmodels

  • 【量化课堂】Statsmodels 统计包之 OLS 回归

  • Welcome to Statsmodels’s Documentation

1.4 Installation and Setup(安装和设置)

这里我们用Anaconda发行版作为Python的使用环境,推荐安装Python3.6,本书就是用Python3.6代码写成的。(译者:我使用的也是Anaconda,Python版本是3.5,与3.6没有任何使用上的差别)

译者:针对不同的操作系统,选择相应的下载方式。本书中关于安装过程的描述还是比较简单的,推荐大家直接看下面我给出的几篇文章。

  • Anaconda使用总结

  • Windows下Anaconda的安装和简单使用

  • 初学Python者自学anaconda的正确姿势是什么

1 Installing or Updating Python Packages(下载和更新Python库)

可以使用conda和pip两种工具进行库的下载和更新:

conda install package_name

但有时候一些库不在Anaconda的服务器上,上面的命令会失败。这个时候我们可以使用pip(pip是一个python的包管理工具):

pip install package_name

conda更新:

conda update package_name

pip更新:

pip install --upgrade package_name

这两个下载方式都可以用,不会冲突的。不过不要使用pip来更新用conda下载的包,这会导致库之间的依赖出现问题。所以在使用Anaconda的时候,最好先尝试使用conda来更新,不行的话再使用pip。

2 Python 2 and Python 3

本书使用的是Python3,Python2将会在2020年停止维护,所以整个社群转向Python3已经是大趋势了。

译者:而且Python3不用担心编码问题,对于中文使用环境的我们来说,非常友好。

3 Integrated Development Environments (IDEs) and Text Editors(集成开发环境和文本编辑器)

作者的开发环境是IPython+一个文本编辑器。作者通常写一段小代码,然后在IPython或Jupyter notebook中进行测试和debug。对于数据处理来说,在Jupyter中使用pandas和Numpy这样的库也是非常方便的。

不过涉及到软件开发,就需要一些功能比较强大的集成开发环境(IDE),其功能会比文本编辑器(vim和emacs)强大很多。这里推荐一下IDE:

  • PyDev (free), Eclipse平台中免费的IDE

  • PyCharm from JetBrains (subscription-based for commercial users, free for open source developers)

  • Python Tools for Visual Studio (for Windows users)

  • Spyder (free), an IDE currently shipped with Anaconda

  • Komodo IDE (commercial)

译者:我通常使用Jupyter + Atom的组合,在Jupyter中验证一小段程序,进行各种试错和验证,然后把写好的复制到Atom中。涉及到软件开发的话,我推荐PyCharm,非常易用且强大的IDE,教育版是免费的。这三样工具就能涵盖大部分的需求。

1.5 Community and Conferences(社区和讨论组)+ 私货

下面是一些和科学计算,数据处理相关的Python社群和讨论组,如果有什么问题可以进行提问:

  • pydata: A Google Group list for questions related to Python for data analysis and pandas

  • pystatsmodels: For statsmodels or pandas-related questions

  • Mailing list for scikit-learn (scikit-learn@python.org) and machine learning in Python, generally

  • numpy-discussion: For NumPy-related questions

  • scipy-user: For general SciPy or scientific Python questions

译者:其实上面这些对于我们中国学生来说基本用不到,我就介绍些干货(私货)吧。平时进行问题搜索的时候,推荐使用google,好处有以下几点:

  • 搜索出来的结果质量很高,这会帮你省很多时间,差的搜索引擎只会让我们在找东西上浪费大量时间。

  • 质量高的搜索结果,会让你看到更优质的内容,更优质的内容能让你学到更有效的知识,成为更优秀的coder,这种改变是潜移默化的,时间越长体会越深。

  • 多语言环境下google的表现非常棒。我平时使用的是英语,中文,日语。英语自不用说,google在中文和日语环境下的搜索表现非常令我满意。有时候中文环境下找不到结果的时候我会尝试用baidu搜一下。

可能一开始使用google的时候你会不习惯(我花了两个月),可一旦习惯了,相信你会爱上这种高质量的反馈。下面我再说一些小贴士:

  • 如果一个编程问题用中文搜不到结果,就尝试用英文搜索。这也是为什么推荐使用google的原因,因为如果用英文搜索的话,大部分编程问题可能都已经被人问过了。最常用的提问网站是Stack Overflow。如果遇到了别人都没有遇到的问题,就尝试用英语在这个网站上提问吧。有时候我会英语,中文,日语三种语言换着搜索同一个问题,如果你也会多种语言的话,请有效利用起来。

  • 学会git,利用好github。github上有很多优秀的项目,可以看优秀的programmer是怎么写代码的,希望有朝一日你也能为开源世界作出自己的贡献。

  • 能科学上网的话,好好利用Youtube这个平台。别整天看什么脱口秀、vlog、乱七八糟的东西(好像暴露了什么),这个平台上有很多优秀的教学视频,对于初学者来说非常有用。举个例子吧,我在接触很多新东西的时候,看别人文章还是搞不懂要怎么做。这个时候在google上搜索 XXX+tutorial+youtube,就能看到很多手把手教学视频,很适合新人入坑。


1.6 Navigating This Book(本书导航)

如果之前没有接触过Python,那么你应该在第2章和第3章多花一些时间。这两章介绍了Python语言的特性和IPython shell以及Jupyter notebooks。这些东西是本书的基本知识。如果已经有了相关经验,可以直接跳过这些章节。

在第4章,会介绍一些Numpy的关键用法,高级用法的部分会放在附录A。

第5章,介绍pandas。在剩余的章节,会使用pandas、numpy和matplotlib(可视化)。

本书的章节尽可能以递增的形式组织,当然,有些知识是会跨章节的。

通常来说,一些任务可以归为下面几类:

  • Interacting with the outside world (与外界交互)

读取和写入各种文件格式,存储数据

  • Preparation(准备)

数据清洗和处理,方便之后的建模或分析

  • Transformation(转换)

对不同的数据进行分组,并使用一些数学或模型,来产生新的数据集(比如对一个大表格进行聚合操作)

  • Modeling and computation

把数据喂给统计模型,机器学习算法,或其他工具

  • Presentation

制作可交互的,或静态的图形可视化,或一些文本摘要

1 代码范例

本书的大部分代码由input和output组成,用IPython shell或Jupyter notebook呈现:

In [2]:

In [3]:

Out[3]:

'I love Python'

可以看到上面一个cell左侧有in和out的标识。

2 数据

本书中的数据可以从GitHub上下载(可以在datasets文件夹中找到)

3 Import Conventions(Import惯例)

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
import seaborn as sns 
import statsmodels as sm

4 Jargon(行话)

Munge/munging/wrangling

这个是用来描述把不结构化或乱七八糟的数据,变为结构化,干净形式的过程。

这个过程我基本使用数据清洗,数据处理来指代。

Pseudocode(伪代码)

  • wiki:伪代码

  • baidu:伪代码

Syntactic sugar(语法糖)

在不添加新特征的前提下,让代码更方便易用的编程语法。

  • wiki:语法糖

  • baidu:语法糖


Copyright © 南京音乐推荐联合社@2017