什么是数据
本文中所言的数据,其关注点落在结构化数据上,例如:1. 表格型的数据:每一列可能包含不同的类型(字符串、数值、日期等)。2. 多维数组(矩阵);3. 由键位列关联的多张表数据;4. 均匀/非均匀的时间序列。
一些重要的 Python 库
- NumPy 是 Numerical Python 的缩写,是 Python 数值计算的重要组成部分。
它提供多种数据结构、算法以及大部分设计 Python 数值计算所需要的接口。 - pandas 提供了高级数据结构和函数,其全称为 Python data analysis.
- matplotlib 是一种流行的制图以及可视化的 Python 库。
- SciPy 是计算科学领域针对不同标准问题域的包集合。
- scikit-learn
- statsmodels
一点说明
利用 Python 进行数据分析不等于使用 Python 开发软件。
Python 解释器
Python 是一个解释型语言,Python 解释器通过一次执行一条语句的方式来运行程序。
很多数据分析的从业者会使用 IPython 或者 Jupyter, 其中 IPython 是一个加强版本的 Python 解释器,Jupyter notebook 是一种基于 Web 的代码笔记本。
这里,我们使用 IPython.
IPython 和 Python 在显示上有一些区别:
Python 中提示符为:<<<.
而在 IPython 中,提示符为:In[], Out[]. 且 IPython 中有 tab 自动补全功能。
内省
IPython 中,一个变量名前后使用问号可以显示一些关于该对象的概要信息。
例如:
以上就是对象内省。
若对象是一个函数或实例方法且文档字符串已经写好,则文档字符串会显示出来。
假设已经写好如下函数:
def add(a,b):'''Add two numbers togethersum : type of arguments'''return a + b
然后我们可以用 ‘?’ 来显示文档字符串:
可以用 ‘??’ 来显示函数的源代码:
‘?’ 的终极用途:类似于 Unix 和 Windows 命令行一样搜索命名空间。
把一些字符和通用匹配符 ‘*’ 结合在一起,辉县市所有匹配通配符表达式的命名。
例如:
import numpy
numpy.*load*?
%run 命令
在 IPython 中,使 %run 命令运行任意的 Python 程序文件。
假设保存一个名为 ‘test.py’ 的Python 文件,其代码为:
def f(x,y,z):return x + y - zresult = f(1,3,2)
我们使用 %run 运行上述代码:
%run test.py
此时,test.py 中定义的所有变量可以开始使用:
result
中断运行中的代码
IPython 中,在任意代码运行时刻按下 Ctrl-C 都将引起 KeyboardInterrupt. 除了某些特殊情况之外,这会导致所有的 Python 程序立即停止运行。
魔术命令
IPython 的特殊命令(没有内建到 Python 自身中去)被称为魔术命令,这些命令被设计用于简化常见任务,确保用户更容易控制 IPython, 魔术命令的前缀符号是 %.
例如,%timeit 来检查一段 Python 语句执行时间,比如一个矩阵操作:
import numpy as np
a = np.random.randn(100,100)
%timeit np.dot(a,a)
运行结果:
魔术命令可以视为 IPython 系统内部命令行程序。
其实魔术命令也可以不加 ‘%’ 使用,只要变量没有被定义与魔术函数有相同的名称即可。这种特性被称为自动魔术,通过%automagic 进行启动/禁止。
matplotlib
IPython 流行的原因之一就是它和数据可视化、用户界面库的良好集成。
%matplotlib 魔术函数可以设置 matplotlib 与 IPython 命令行或者 Jupyter notebook 集成,这个命令很重要,否则创建的图可能就不会出现。
在 IPython 中,运行 %matplotlib 命令可以生成多个绘图窗口,而无需干扰控制台会话。
例如:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.plot( np.random.randn(50).cumsum())
输出为:
Python 语言基础
不同于 C/C++, Python 语言简练清晰。
Python 中使用缩进来组织代码,一个代码块中代码必须保持相同的缩进长度。在这里,强调不建议使用 tab 作为缩进,而是使用 4 个空格作为缩进。
Python 语句不用以分号结尾。
Python 的一个重要特征是对象模型的一致性。每个数值、字符串、数据结构、函数、类、模版以及所有存在于 Python 解释器中的食物,都是 Python 对象。每个对象都会关联到一种类型(例如字符串、函数)和内部数据。
Python 中注释有两种方式:1. 单行注释用 ‘#’, ‘#’ 之后的文本会自动被 Python 解释器忽略;2. 多行注释用 ‘’‘ ’‘’.
方法为 Python 对象的内部函数,它可以访问到对象内容的全部。格式如:obj.method(a,b,c)
.
在 Python 中,对一个变脸进行赋值时,就相当于创建了一个指向等号右边对象的引用。
例如:
a = [1,2,3]
b = a
b.append(4)
a
# 输出结果为 [1,2,3,4], 即 a == [1,2,3,4]
# 这意味着 a, b 指向同一个变量
# is 关键字可检查是否指向同一个对象
赋值也被称为绑定,这是因为我们将一个变量名绑定到一个对象上。已经被赋值的变量名有时也会被称为被绑定变量。
当我们将对象作为参数传递给一个函数时,指向原始对象的新的本地变量机会被创建而无须赋值。
如果将一个新的对象绑定到一个内部函数的变量上,这种变更不会在上级范围中产生印象。
与 C/C++ 不同,Python 中对象引用并不涉及类型,但 Python 并不是“非类型化语言”。
例如:a = 5, 此时变量 a 的类型为 5, b = ‘6’, 此时变量 b 的类型为 str, 这便是对象引用不涉及类型的含义。同时,Python 中并不支持 b + a, 这便是强类型语言。
Python 中对象通常会有属性和方法。属性指的是 Python 对象内部存储的其他对象;方法指的是与对象内部对象有关的函数,相关的对象可以连接到对象内部数据。
属性与方法可以用形如obj.name
的语法调用。
鸭子类型:“一个东西走起来像鸭子,叫起来像鸭子,那么它就是一个鸭子”。
具体到 Python 中为:不关心某个对象的具体类型,而在意它是否拥有某个特殊的方法。
例如,可以验证一个对象若实现了迭代器协议,则它一定是可以迭代的。
Python 中对象可分为可变对象与不可变对象。
可变对象例如列表、字典、NumPy数组等;不可变对象例如字符串、元组等。
Python 支持的二元操作符有:+, -, *, /, //, **, &, | , ^, ==, !=, <=, >=, <, >, is, is not.
Python 支持的三元表达式有:if-else.
Python 中标量有:None, str, bytes, float, bool, int.
Python 中数值类型有:int, float, str, bool.
Python 中的控制流有:if, elif, else; for, while; pass.
Python 中, range 函数返回一个迭代器,其基本格式为range( begin, end, step)
, 其中 begin 为闭区间,end 为开区间。
例如:
range 最常用于根据序列的索引来遍历序列:
t = [1,2,3,4]
for i in range( len(t)):val = t[i]