利用Python进行数据分析--阅读笔记


利用Python进行数据分析

NumPy基础:数组和矢量计算

生成数组:

np.random.randn(10)      生成10个标准正态分布的随机数

np.arange(10)            长度为10的数组,值分别是0-9

arr=np.array(列表名)      列表变成数组

np.zeros(10)   ones(10  表示生成全为0 或者全为1的数组

np.empty((2.3.2))         返回未初始化的垃圾值

np.eye()  np.identity()     创建单位矩阵n*n

数组切片:

arr[m:n]               表示包括n,不包括m

arr[0,2] 和 arr[0][2]     表示二维数组访问单个元素的含义是相同的

arr[:2,1:]               表示前两行的第一列以及第一列后边

arr[:2]                 表示前两行

data[name ==‘guo’,2:]  布尔型索引(python关键字and or在布尔型中无效,用丨和&)

data[ data<0]=0

arr[[3,5,4,1]]           表示按35,4,1的顺序返回四行数据(花式索引将数据复制到新数组)

arr[[3,5,4,1],[ 3,5,4,1]]    表示返回(3,3)(5,5)元素(花式索引)

arr[[3,5,4,1],[:,3,5,4,1]]  表示按照特定的行和列顺序返回

arr[np.ix_([3,5,4,1],[3,5,4,1])]   用np.ix_函数表示按照特定的行和列顺序返回

数组转置和轴对换(返回源数组视图)

arr.T                  二维数组直接转置

ar.transpose((n,m,l))     n.m.l表示维数的编号

arr.swapaxes(1,2)       根据shape(n,m,l)→(m,n,l),转置数组

通用函数

一元函数

说明

abs、fabs

计算整数、浮点数或复数的绝对值。对于非复数,可以用更快的fabs

sqrt、square、exp

计算元素的平方根、平方、指数ex

sign

计算元素的正负号

ceil

大于等于该值的最小整数

floor

小于等于该值的最大整数

rint

四舍五入最接近的整数,保留dtype

modf

将数组的整数部分和小数部分以两个独立的数组返回

isnan

返回一个表示哪些是NAN的布尔型数组

Isfinite/isinf

返回表示有穷和无穷的布尔型数组

 

二元函数

说明

subtract

从第一个数组中减去第二个数组中的元素

multiply

数组元素相乘

divide、floor_divide

除法或者向下圆整除法(丢弃余数)

power

AB

maximum/fmax

元素级的最大值计算,fmax忽略NAN

mod

元素级取模运算(除法的余数)

copysign

将第二个数组中的值的符号复制给第一个数组中的值

greater/greater_equal/

less/less_equal/equal/not_equal

执行元素级别的比较运算,最终产生布尔型数组

logical_and/logical_or/logical_xor

执行元素级的真值逻辑运算

 

利用数组进行数据处理

np.where函数是x if condition else y 的矢量化版本;

result=np.where(cond,x,y)    括号中condition为ture时x,否则y

改写嵌套:np.where(cond1&cond2,0

                  np.where(cond1,1

                          np.where(cond2,2,3)))

argmin、argmax         分别表示最大和最小元素的索引

cumsum、cumprod     所有元素的累积和、累积积(横轴1,纵轴0)

arr.sort(1)                    多维数组根据某一维排序只需要根据排序的轴序号传入即可

 

数组的集合运算

说明

uniques(x)

计算x中为唯一元素,并返回有序结果(序列根据发现的顺序)

value_counts

计算series中各值出现的频率

intersect1d(x,y)

计算xy中的公共元素,并返回有序结果

union1d(x,y)

xy的并集,并返回有序结果

in1d(x,y)

得到元素x是否包含于y的布尔型数组

setdiff1d(x,y)

集合的差

setxor1d(x,y)

集合的对称差,即X+Y-2XY

 

数组文件的输入输出

np.save(’文件名‘,数组)和np.load(’文件名‘)将数组以二进制格式保存到磁盘;

np.savez(’文件名‘,数组)将多个数组存到一个压缩文件下,读取时返回字典形式的数组

arr.np.loadtxt(‘arr_ex.txt’.delimiter=’,’)将逗号分隔符文件转化为二维数组

线性代数

numpy.linalg函数

说明

diag

以一维数组的形式返回方阵的对角线元素,或者将一维数组转化为方阵(非对角线元素为0)

dot

矩阵乘法;矩阵*矩阵=矩阵/数

trace

对角线元素之和

det

计算矩阵行列式

eig

求解特征值和特征向量

inv

逆矩阵

pinv

伪逆矩阵

qr

计算QR分解值

svd

计算奇异值分界SVD

solve

解线性方程组Ax=b,其中A为一个方阵

lstsq

计算Ax=b 的最小二乘解

 

随机数生成

numpy.random模块对Python的内置random进行了补充,更加高效

numpy.ransom函数

说明

seed(x)

确定随机数生成器的种子。如果x相同,返回的随机数相同,若没有参数,系统随机返回

permutation

返回一个序列的随机排序或者返回一个随机排序的范围

shuffle

对一个序列就地随机排序

rand

均匀分布的样本值

randint

从给定的上下限范围内随机选取整数

randn

正态分布样本值(平均值为0,标准差为1)

binomial

二项分布的样本值

normal

正态分布的样本值

beta

beta分布的样本值

chisquare

卡方分布的眼本质

gamma

gamma分布的样本值

uniform

[0,1)中均匀分布的样本值

pandas入门

Series

series由一组数据以及一组与之相关的数据标签(即索引)组成。可以通过series的values和index属性获取其数组表示形式和索引对象。(可以通过字典构建series

obj=Series([1,2,3],index=[‘a’,’b’,’c’])

obj[obj>2],返回值大于2的,obj*2;np.exp(obj)        运算

series对象本身和索引都有一个name属性

DataFrame

frame= DataFrame(data,columns=[‘year’,’state’,’pop’],index=[‘one’,’two’,’three’])

将DataFrame的列获取为series:frame[‘year’]或者frame.year   索引还与原来相同,也可以根据其进行赋值,赋值的长度必须相同,如果有索引会匹配索引进行赋值

frame[‘guo’]=frame.year==’2019’      添加列,并根据年份是否2019年进行赋值true、false

如果是嵌套字典形成DataFrame,则外层字典的键作为列,内层字典的键作为行,如果指定了索引,则按照索引

frame.columns返回所有列名

重新索引

reindex可以修改索引和列,series调用该函数,某个索引值不存在,直接引入缺失值nan,

method=ffill或pad(向前填充值或搬运值)、bfill或backfill(向后填充或搬运值)

参数

说明

fill_value

重新索引过程中,需要引入缺失值是使用的替代值

limit

向前或向后填充时的最大填充量

level

在multindex的指定级别上匹配简单索引,否则选取其子集

copy

默认true,无论如何复制;如果为false,则新旧相等就不复制

索引、选取和过滤

obj表示series:

obj[2:3]是闭区间

obj[1]和obg[‘a’]是相同意思

obj[obj<5]

obj[[‘c’,’a’,’b’]]按照给定序列输出

dataframe的索引选项

说明

obj.ix[val]

选取dataframe的单行或者一组行

obj.ix[:,val]

选取单个列或者一组列

xs方法

根据标签选取单行或者单列,并返回一个series

icol、irow

根据整数位置选取单列或者单行,并返回一个series

get_value、set_value

根据行列标签选取和重设某个值

算术运算和数据对齐

算术运算时,索引相同的进行算术运算,索引不同的引入nan值;

可以用fill_value=对缺失值进行填充

算术运算方法:add/sub/div/mul+-*/

dataframe和series的算数运算利用广播的形式进行计算(P136)

函数应用和映射

numpy的ufuncs(元素级数据方法)也可用于操作panadas对象;

另一种操作是,将函数应用到由各行或列形成的一维数组上,dataframe的apply方法可以实现:

f=lambdax:x.man()-x.min()

frame.apply(f,axis=1)

排序和排名

根据索引排序:sort_index(axis=1,ascending=False) ,默认axis=0

series按照进行排序用order(),任何缺失值都会被放到最后

dataframe 根据多个列进行排序by即可:frame.sort_index(by=[‘a’,’b’])

rank()增设一个排名值:

obj.rank(ascending=False,methos=’max’)

排名时用于破坏平级关系的method

说明

average

默认:排名的平均值

min

使用整个分组的最小排名

max

使用整个分组的最大排名

first

按值在原始数据中的出现顺序分配排名

汇总和计算描述统计

skipna    在进行汇总和计算时,排除缺失值,(默认为true)

描述和汇总统计

说明

count

非NA值的数量

describe

针对series和dataframe列计算汇总统计

argmin/argmax

计算能够获取到最小值和最大值的索引位置

idxmin/idxman

计算能够获取到最小值和最大值的索引值

mean/median

值的平均值和中位数

mad

根据平均值计算平均绝对离差

var/std

样本值的方差和标准差

skew/kurt

样本值的偏度/峰度

diff

计算一阶差分(对时间序列很有用)

pct_change

计算百分数变化

相关系数corr和协方差cov

series:arr.a.corr(arr.b)                      返回相关系数

dataframe:arr.corr()                       返回相关矩阵(对称)

series和dataframe:arr.corrwith(arr.a)        返回series与dataframe中各列的相关系数

处理缺失数据

删除:

dropna:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度。

对于dataframe来说,dropna默认丢弃任何含有缺失值的行。想要丢弃列传入axis=1

arr.dropna(how=’all’)        丢弃全部为NA的行

arr.dropna(how=’any’)       丢弃任何包含NA的行

arr.dropna(thresh=3)        将至少含有三个非空值的行留下

填充:

fillna:将缺失值补充为常数

arr.fillna(0)                 将缺失值补充为0

arr.fillna({1:0.5,2:9})          通过调用字典,实现不同列填充不同值

fillna默认返回新对象,但也可以对现有对象进行就地修改。inplace=True

limit=n                    可以连续填充的最大数量为n

层次化索引

能够以低纬度的形式处理高纬度的数据;index=[[‘a’,’a’,‘a’,’a’,’b’, ’b’],[1,2,3,4,1,2]]

frame.index.names=[‘key1’,’key2’]      索引名字重命名

swaplevel()        重新调整两个级别上的名称,但是数据不会发生变化。

sortlevel()         根据单个级别中的值对数据进行排序(稳定的)

根据级别汇总统计

frame.sum(level=’color’,axis=1)

dataframe中将其中一列或者多列当做行索引,使用set_index(),创建新的dataframe

frame2=frame.set_index([‘a’,’b’])      将ab两列转化为行索引

默认情况下ab两列将删除,但也可以将其保留下来:

frame2=frame.set_index([‘a’,’b’],drop=False)

reset_index()的功能正好和set_index()的功能相反,将层次化索引的级别转移到列里面

整数索引

如果轴索引含有索引器,那么根据整数进行数据选取的操作总是面向标签的。

ix[:1],表示标签1前边的所有行;

如果需要基于位置索引,则series的get_value(位置参数)和dataframe的irow()行和icol()列

.loc[]      基于标签

.iloc[]      基于位置

面板数据

用一个dataframe对象组成的字典或者一个三维ndarry来创建panel对象:

对于呈现面板数据的办法是堆积式的dataframe形式to_frame():

stack=pdata.ix[:,’5/30/2019’,:].to_frame()

to_frame()的逆运算:to_panel()

数据加载、存储与文件格式

pandas中的解析函数

说明

read_csv

从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号

resd_table

从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(“\t”)   sep=’,’

read_fwf

读取定宽列格式数据(也就是说没有分隔符)

read_clipboard

读取剪切板中的数据,可以看做rea_table的剪切板版。在将网页转化为表格时很有用

 

read_csv/read_table函数的参数

说明

path

表示文件系统位置、URL、文件型对象的字符串

sep或delimiter

对行中各字段进行拆分的字符序列或正则表达式

header

用作列名的行号。默认0,表示第一行,没有用None表示

index_col

用作行索引的列编号或列名。可以是单个也可以是多个组成的列表(层次化索引)

names

用于没有列名的列表;header=None时

skiprows

要忽略的行数(从文件开始算起),或者需要跳过的行号(从0开始)

na_value

一组用于替换NA 的值

comment

将注释信息从行尾拆分除去的字符(一个或多个)

parse_dates

尝试将数据解析为日期,默认false。若为true,则尝试解析所有列。此外还可以制定需要解析的列号或者列名。如果列表的元素为列表或元组,就会将多格列组合到一起在进行日期解析工作(日期/时间分别位于两列)

keep_date_col

如果连接多列解析日期,则保持参与连接的列。默认false

converters

由列号/列名跟函数之间的映射关系组成的字典。{‘foo’:f}会对foo列的所有值应用函数f

dayfirst

当解析有歧义的日期时,将其看做国际格式。默认false

day_parser

用于解析日期的函数

nrows

需要读取的行数从文件开始出算起

iterator

返回一个TextParser以便逐块读取文件

chunksize

文件块的代销(用于迭代)

skip_footer

需要忽略的函数(从文件末尾处算起)

verbose

打印各种解析器输出信息,“非数值列中缺失值的数量”

squeeze

如果数据经解析后仅含有一列,返回series

thousands

千分位分隔符,如“,”或“.”

 

 

 

 

 

 

 














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值