利用python进行数据分析 python基础 Numpy基础

结构化数据

表格型数据,其中各列可能是不同的类型(字符串,数值,日期等)。比如保存在关系型数据库中或以制表符/逗号为分隔符的文本文件中的那些数据。
多维数组(矩阵)
通过关键列(对于SQL用户来说,就是主键和外键)相互联系的多个表
间隔平均或不平均的时间序列。

Numpy介绍

Numpy是python科学计算的基础包。它提供了以下功能:
1 快速高效的多维数组对象ndarrary
2 用于对数组执行元素级计算以及直接对数组执行数学运算的函数
3 用于读写硬盘上基于数组的数据集的工具
4 线性代数运算傅里叶变换,以及随机数生成。
成熟的C API,用于python插件和原生C C++ Fortran代码访问Numpy的数据结构和计算工具。
除了为python提供快速的数组处理能力,Numpy在数据分析方面还有另外一个主要作用,即作为在算法和库之间传递数据的容器。

Pandas

pandas 提供了快速便捷处理结构化数据的大量数据结构和函数。pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据库(SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑,切片和切块,聚合以及选取数据子集等操作。因为数据操作,准备 清洗是数据分析中要的技能。

matplotlib

matplotlib 是最流行的用于绘制图标和其他二维数据可视化的python库。它非常适合创建出版物上用的图表。

ipython和jupyter

ipython jupyter都是用于交互模式,用于运行 调试和测试代码

Scipy

Scipy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:
scipy.intergrate: 数值积分例程和微分方程求解器
scipy.linalg: 扩展了有numpy.linalg提供的线性代数例程和矩阵分解功能。
scipy.optimize:函数优化器(最小化器)以及根查找算法
scipy.signal: 信号处理工具
scipy.sparse: 稀疏矩阵和稀疏线性系统求解器
scipy.special: SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数的Fortran库)的包装器
scipy.stats: 标准连续和离散概率分布(如密度函数 采样器 连续分布函数等)各种统计校验方法,以及更好的描述统计方法等。
Numpy和Scipy结合使用,便形成了一个相当完备和成熟的计算平台,可以处理多种传统的科学计算问题。

scikit-learn

scikit-learn 成为了python的通用机器学习工具包。它的子模块包括:
分类: SVM 近邻 随机森林 逻辑回归等等
回归:Lasso 岭回归等等
聚类: K-均值 谱聚类等等
降维:PCA 特征选择 矩阵分解等等
选型: 网格搜索 交叉验证 度量
预处理: 特征提取 标准化。

statsmodels

statsmodels 是一个统计分析包,与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:
1 回归模型: 线性回归 广义线性模型 健壮线性模型 线性混合效应模型等
方差分析(ANOVA)
时间序列分析: AR ARMA ARIMA VAR 和其他模型
非参数方法: 核密度估计,核回归
统计模型结果可视化
statsmodels更关注与统计推断,提供不确定估计和参数p-值。相反,scikit-learn注重预测。

python基础

ipython shell 中的快捷键
ctrl-A 将光标移动到一行的开头
ctrl-E 将光标移动到一行的末尾
ctrl-K 删除光标到行位的文本
ctrl-U 删除当前行的所有文本
ctrl-F 光标向后移动一个字符
ctrl-B 光标向前移动一个字符
isinstance可以用类型元组,检查对象的类型是否在元组中.isinstance(a,int,float())
python的对象通常都有属性和方法,可以用obj.attribute_name访问其属性和方法.如: a=‘111’ a.两个tab可以看到方法
也可以用getattr函数,通过名字访问属性和方法: getattr(a, ‘split’)

鸭子类型

经常地,你可能不关心对象的类型,只关心对象是否有某些方法或用途,这通常称为"鸭子类型"
osoterable() 用于判断对象是否可迭代.
二元运算符 : + - * / // ** a&b: a或b都为True,则为True,对于整数取逐位AND. a|b a或b有一个为True,则为True,对于整数,去逐位OR,a^b 对于布尔,a或b有一个为True,则为True,二者都为True,则为False == != < > <= >== is a和b引用同一个python对象,则为True is not a和b引用不同的python对象,则为True
要判断两个引用是否指向同一个对象,可以使用is方法.is not可以判断两个对象是不同的.
python的主要数值类型是int和float int可以存储任意大的数,浮点数使用python的float类型.每个数都是双精度(64)的值.
字符串是一个序列的Unicoode字符,可以向其他序列一样处理.
字符串对象有format方法,可以替换格式化的参数为字符串,产生一个新的字符串:templat=’{0:.2f} {1:s} are worth us${2:d}’
{0:.2f} 表示格式化第一个参数为带有两位小数的浮点数
{1:s} 表示格式化第二个参数为字符串
{2:d} 表示格式化第三个参数为整数
要替换参数为这些格式化的参数,我们传递format方法一个序列: template.format(4.55,‘argentine pesos’,1 )
str bool int和float也是函数,可以用来进行类型的转换.
None是python的空值类型,如果一个函数没有明确额返回值,就会默认返回None,None也常常作为函数的默认参数,另外None不仅是一个保留字,还是唯一的NoneType的实例
python内建的datetime模块提供了datetime date和time类型.
from datetime import datetime,date,time
dt = datetime(2011,10,29,20,30,21)
dt.day===>29
dt.date() //根据datetime实例,你可以用date和time提取出各自的对象
dt.time()
dt.strftime(’%m%d%y’) // strftime方法可以将datetime格式化为字符串
datetime.strptime(‘20091031’,’%Y&m%d’) //strptime可以将字符串转换成datetime对象.
for循环是在一个集合(列表或元组进行迭代,或者就是一个迭代器.)
range函数是返回一个迭代器,它产生一个均匀分布的整数序列.range的三个参数是(起点,终点,步长)

三元表达式

python 中的三元表达式可以将if-else语句放到一行里.语法: value = true-expr if condition else false-expr //true-expr或false-expr 可以是任何python代码.等同于如下代码:
if condition:
value = true-expr
else:
value = false-expr

python的数据结构 函数和文件

元组
是一个固定长度,不可改变的python序列对象.用tuple可以将任意序列或迭代器转换成元组.一旦创建了元组,元组中的对象就不能修改了. 如果元组中的某个对象是可变的,比如列表,可以在原位进行修改.可以用逗号运算符将元组串联起来.元组乘以一个整数,像列表一样,会将几个元组的复制串联起来.如果你想将原则复制给类似元组的变量.python会试图拆分等号右边的值.及时含有元组也会被拆分.
作为惯用写法,许多Python程序员会将不需要的变量使用下划线.: a,b,*_ = values
因为元组的大小和内容不能修改,它的实例方法都很轻量.其中一个很有用的就是count(也使用与列表),它可以统计某个值出现的频率.
列表
与元组相比,列表的长度可变,内容可以被修改.可以用方括号或list函数
list函数常用在在数据处理中实例化迭代器或生成器
方法:
appen在列表末尾添加元素
insert 在特定位置插入元素
pop 溢出并返回指定位置的元素
remove 去除某个值,remove会找第一个值并除去.
在列表中检查是否存在某个值远比字典和集合速度慢,因为python是线性搜索列表中的值,但在字典和集合中,在同样的时间内还可以检查其他项.
与元组类似,可以用加号将两个列表串联起来.
如果已经定义了一个列表,用extend方法可以追加多个元素.
sort函数将一个列表原地排序(不创建新的对象),sort有一些选项,很好用,其中之一是二级排序key,可以用这个key进行排序.: b= [‘saw’,‘sall’,‘he’,‘foxes’,‘six’]
b.sort(key=len) b 就是按照长度排序的列表
bisect模块支持二分查找,和想以排序的列表插入值.bisect.bisect可以找到插入值后仍保证排序的位置,bisect.insort是向这个位置插入值.
实例:
import bisect
c = [1,2,2,2,3,4,7]
bisect.bisect(c,2) ==> 4
bisect.bisect(c,5) => 6
bisect.insort(c,6)
c
=> [1,2,2,2,3,4,6,7]
注意:bisect模块不会检查列表是否已排好序,进行检查的话会耗费大量计算.因此,对为排序的列表使用bisect不会产生错误,但结果不一定正确.
enumerate 函数:是计算序列(唯一的)dict映射到位置的值.
some_list=[‘foo’,‘bar’,‘baz’]
mapping = {}
for i,v in enumerate(some_list):
mapping[v]=i
mapping ⇒ {‘bar’:1,‘baz’:2,‘foo’:0}
sorted函数可以从任意序列的元素返回一个新的排好序的列表.
zip函数可以将多个列表,元组或者其他序列成对组合成一个元组序列.
zip可以被用来解压序列.也可以当做把行的列表转换为列的列表.
实例:
a = [(11,22),(33,44)]
c,b = zip(*a)
c ==> (1,2)
b ==>(3,4)
reversed函数: 可以从后向前迭代一个序列.reversed是一个生成器.

字典

可以用检查列表和元组的方法检查字典
可以用del关键字或者pop方法(返回值的同时删除键,从末尾开始删)
update方法可以将一个字典与另一个字典融合: {‘1’:1,‘2’:2}.update({‘3’:33,‘4’:44}) ===>{‘1’:1,‘2’:2,‘3’:33,‘4’:44},update是原地改变字典,因此任何传递给update的键的旧得值都会被舍弃.
用序列创建字典,可以将两个系列配对组合成字典:
mapping=[]
for key,value in zip(序列1,序列2):
mapping[key] = value
字典本质上是一个2元元组.dict可以接受2元元组的列表.
dict的方法get和pop可以取默认值进行返回.
hash函数用于检测对象是否可哈希.

集合

集合是无序的不可重复的元素的集合.通过set函数可以创建集合
{} 这个是一个字典 如果是用set({} ) 这就是一集合.
集合支持合并 交集 差分和对称差集的属性集合运算
a|b 合集
a&b 并集
a-b 差集/差分 存在于a但不存在与b的元素
a^b 对称差集 只存在a或只存在b的元素.

Numpy基础:数组和矢量计算

Numpy是python数值计算最重要的基础包.
Numpy的部分功能如下:
ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
用于对整组数据进行快速运算的标准数学函数(无需编写循环)
用于读写磁盘数据的工具以及用于操作内存映射文件的工具
线性代数 随机数生成以及傅里叶变换功能
用于集成由c c++ Fortran等语言编写的代码的A C API.
Numpy的算法要比纯python快10到100倍
Numpy最重要的一个特点是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的元素一样.
import numpy as np
data= np.random.randon(2,3)
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的,每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用来说明数组数据的类型的对象)
data.shape ===> (2,3)
data.dtype ⇒ dtype(‘float64’)

创建ndarray(一种多维数组对象)

创建数组最简单的办法就是使用array函数.它接受一切序列型的对象(包括数组),然后产生一个新的含有传入数据的Numpy数组.
嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
data = [(1,2,3),(4,5,6)]
arr = numpy.array(data)
print(arr) > ([1,2,3][4,5,6]))
如果不是等长的列表 返回的就是
> [list([1,2,3,4]),list([5,6,7])]
np.array会尝试为新建的这个数组推断出一个较为合适的数据类型.数据类型保存在特殊的dtype对象中.
除了np.array之外,还有一些函数也可以新建数组.比如:
zeros:创建指定长度或形状的全0数组.
ones:分别可以创建指定长度或形状的全1数组.
empty:可以创建一个没有任何具体值的数组.要用这些方法创建多维数组,只需传入一个表示形状的元组即可.
arange是python内置的range的数组版.
数组创建函数:
array: 将输入数据(列表 元组 数组或其他序列类型)转换为ndarray.要么推断出dtype,要么特别指定dtype.默认直接复制输入数据
asarray: 将输入转换为ndarry,如果输入本身就是一ndarray就不进行复制
arang: 类似于内置range,但是返回的是一个ndarry而不是列表
ones ones_like : 根据指定的形状和dtype创建一个全是1的数组.one_like以另一个数组为参数,并根据其形状和dtype创建一个全1的数组
zeros,zeros_like: 类似于ones和ones_like,只是产生的是全0数组而已.
empty,empty_like: 创建新数组,只分配内存空间但不填充任何值
full,full_like: 用full value中的所有值,根据指定的形状和dtype创建一个数组.full_like使用另一个数组,用相同的形状和dtype创建
eye,identity: 创建一个正方的N x N 单位矩阵(对角线为1,其余为0)
dtype是一个特殊的对象,它含有ndarray将一块内存接收为特定数据类型所需的信息
dtype是Numpy灵活交互其他系统的源泉之一,多数情况下,他们直接映射到相应的机器表示,这使得"读写磁盘上的二进制数据流"以及"集成低级语言代码"等工作变的更加简单.数值型dtype的命名方式相同: 一个类型名(如float或int),后面跟一个用于表示各元素位长的数字.标准的双精度浮点值(即python中的float对象)需要占用8直接(即64位).因此,该类型在Numpy中记作float64.
Numpy的数据类型:
int8 uint8 有符号和无符号的8位整型
int16 uint16 有符号和无符号的16位整型
int32 uint32 有符号和无符号的32位整型
int64 uint64 有符号和无符号的64位整型
float16 半精度浮点数
float32 标准的单精度浮点数
float64 标准的双精度浮点数
float128 扩展精度浮点数
complex64 cpmlex128 complex256 分别用两位32位 64位或128位浮点数表示的复数
bool 存储True或Flase值的布尔类型
object python对象类型
string 固定长度的字符串类型
unicode 固定长度的unicode类型
通常只需知道所处理的数据大致是浮点数 复数 整数 布尔值 字符串还有普通的python对象
可以通过ndarray的astype方法明确第将一个数组从一个dtype转换成另一个dtype
如果浮点数转换成整数,则小数部分将会被截取删除.
如果某字符串组表示的全是数字,也可以用astype将其转换为数值形式.
注意: 使用NumPy.string类型时,一定要小心,因为Numpy的字符串数据是大小固定的,发生截取时,不会发出警告.如果转换过程因为某种原因而失败了(比如某个不能被转换为float64的字符串),就会引发valeError.
调用astype总会创建一个新的数组(一个数据的备份),即新的dtype与旧的dtype相同.
数组很重要,因为它是你不用编写循环即可对数据执行批量运算.Numpy用户称其为矢量化.大小相等的数组之间的任何算术都将运算应用到元素级.
数组与标量的算术运算会将标量值传播到各个元素
大小相同的数组之间的比较会生成布尔值数组
怒通大小数组之前的运算叫广播
Numpy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多.当你将一个标量赋值给一个切片时,该值会自动传播到整个选取.跟列表最重要的区别在于,数组切片是元素的数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上.
如果想要得到的是ndarray切片的一份副本而非视图,就需要明确地进行复制操作,例如: arr[5:8].copy()
对于高维度数组,能做的事情很多.在一个二维数组中,各索引位置上的元素不再是标度而是一维数组.
因此,可以对各个元素进行递归访问,但这样需要做的事情有点多.你可以传入一个以逗号隔开的索引列表来选取单个元素.: arr2d[0][2] arr2d[0,1] 两个是等效的
在上面所有这些选取数组字集的例子中,返回的数组都是视图.
ndarray的切片语法跟python列表这样一维对象差不多.

你可能感兴趣的:(利用python进行数据分析 python基础 Numpy基础)