利用 python 进行数据分析
numpy基础
基础
函数 |
说明 |
array |
将输入数据(列表,元祖,数组或者其他序列类型)转化为ndarray,要么判断出dtype,要么显示指定dtype。默认直接复制输入数据 |
asarray |
将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制d |
arange |
类似于内置的range,但放回的是一个ndarray而不是列表 |
ones,ones_like |
根据制定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组 |
zeros,zeros_like |
类似于ones和ones_like,只不过产生的是全0数组而已 |
empty,empty_like |
创建新数组,只分配内存空间但不填充任何值 |
eye,identity |
创建一个正方的N*N单位矩阵(对角线为1,其余为0) |
通用函数
函数 |
说明 |
abs,fabs |
计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs |
sqrt |
计算元素的平方根。相当于arr**0.5 |
square |
计算元素的平方。相当于arr**2 |
exp |
计算各元素的指数e^x |
log,log10,log2,log1p |
分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x) |
sign |
计算各元素的正负号:1,0,-1 |
ceil |
计算各元素的ceiling值,即大于等于该值得最小整数 |
floor |
计算各元素的floor值,即小于等于该值的最大整数 |
rint |
计算各元素值四舍五入到最接近的整数,保留dtype |
modf |
将数组的小数和整数部分以两个独立数组的形式返回 |
isnan |
返回一个表示“那些值是NAN(这不是一个数字)”的布尔型数组 |
isfinite,isinf |
分别放回一个表示“那些元素是有穷的“或”那些元素是无穷的“的布尔型数组 |
cos、cosh、sin、sinh、tan、tanh |
普通型和双曲型三角函数 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanh |
反三角函数 |
logical_not |
计算各元素not x的真值。相当于-arr |
add |
将数组中对应的元素相加 |
subtract |
从第一个数组中减去第二个数组中的元素 |
multiply |
数组元素相乘 |
divide,floor_divide |
除法或向下圆整除法 |
power |
对第一个数组中的元素,根据第二个数组中的相应元素,计算A^B |
maximum,fmax |
元素级的最大值计算。fmax将忽略NaN |
minimum,fmin |
元素级的最小值计算。fmin将忽略NaN |
mod |
元素级的求模计算 |
copysign |
将第二个数组中的值得符号复制给第一个数组中的值 |
less、less_equal,equal,not_equal |
算符>,>=,<,<=,==,!= |
logical_and、logical_or,logical_xor |
执行元素级的真值逻辑运算。相当于中缀运算符&、 |
基本数组统计方法
方法 |
说明 |
sum |
对数组中全部或某轴向的元素求和。零长度的数组的sum为0 |
mean |
算术平均数。零长度的数组的mean为Nan |
std、var |
分别为标准差和方差,自由度可调(默认为n) |
min、max |
最大值和最小值 |
argmin、argmax |
分别为最大和最小元素的索引 |
cumsum |
所有元素的累计和 |
cumprod |
所有元素的累计积 |
数组的集合运算
方法 |
说明 |
unique(x) |
计算x中的唯一元素,并返回有序结果 |
intersect1d(x,y) |
计算x和y中的公共元素,并返回有序结果 |
union1d(x,y) |
计算x和y的并集,并返回有序结果 |
in1d(x,y) |
得到一个表示“x的元素是否包含于y”的布尔型数组 |
setdiff1d(x,y) |
集合的差,即元素在x中且不在y中 |
setxor1d(x,y) |
集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素 |
常用的numpy.linalg函数
函数 |
说明 |
diag |
以一维数组的形式返回方针的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0) |
dot |
矩阵乘法 |
trace |
计算对角线元素的和 |
det |
计算矩阵行列式 |
eig |
|
inv |
计算方阵的逆 |
pinv |
计算矩阵的eMoore——Penrose伪逆 |
qr |
计算QR分解( square and triangle) |
svd |
计算奇异值分解(SVD) |
solve |
解线性方程组Ax=b,其中A为一个方阵 |
lstsq |
计算Ax=b的最小二乘解 |
部分numpy.random函数
函数 |
说明 |
seed |
确定随机数生成器的种子 |
permutation |
返回一个序列的随机排列或返回一个随机排列的方法 |
shuffle |
对一个序列地随机排列 |
rand |
产生均匀分布的样本值 |
randint |
从给定的上下限范围内随机选取整数 |
randn |
产生正太分布(平均值为0,标准差为1)的样本值 |
binomial |
产生二项分布的样本值 (二项分布就是重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验,当试验次数为1时,二项分布服从0-1分布) |
normal |
产生正态(高斯)分布的样本值 |
beta |
产生Beta分布的样本值(贝塔分布(Beta Distribution) 是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数,在机器学习和数理统计学中有重要应用) |
chisquare |
产生卡方分布的样本值(若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)) |
gamma |
产生Gamma分布的样本值(伽玛分布(Gamma Distribution)是统计学的一种连续概率函数,是概率统计中一种非常重要的分布。“指数分布”和“χ2分布”都是伽马分布的特例。 [1] ) |
uniform |
产生在[0,1)中均匀分布的样本值 |
https://blog.csdn.net/bitcarmanlee/article/details/82156281
说的比较全面
pandas
Series
类型 |
说明 |
二维ndarray |
数据矩阵,还可以传入行标和列标 |
由数组、列表或元组组成的字典 |
每个序列会变成DataFrame的一列。所有序列的长度必须相同 |
numpy的结构化/记录数组 |
类似于“由数组组成的字典” |
由Series组成的字典 |
每个Series会成为一列。如果没有显式指定索引,则各Series的索引会被合并成结果的并索引 |
有字典组成的字典 |
各内层字典会成为一列。键会被合并结果的行索引,跟‘由Series组成的字典’的情况一样 |
字典或Series的列表 |
各项将会成为Dataframe的一行。字典键或Series索引的并集将会成为DataFrame的列标 |
由列表或元组组成的列表 |
类似于“二维ndarray” |
另一个DataFrame |
该DataFrame的索引将会被沿用,除非显示指定了其他索引 |
Numpy的MaskedArray |
类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值 |
pandas中主要的Index对象
类 |
说明 |
Index |
最泛化的Index对象,将轴标签表示为一个由python对象组成的numpy数组 |
Int64Index |
针对整数的特殊Index |
MultiIndex |
“层次化”索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组 |
DatetimeIndex |
存储纳秒级时间戳(用NumPy的datetime64类型表示) |
PeriodIndex |
针对Period数据(时间间隔)的特殊Index |
方法 |
说明 |
append |
连接另一个Index对象,产生一个新的Index |
diff |
计算差集,并得到一个Index |
intersection |
计算交集 |
union |
计算并集 |
方法 |
说明 |
append |
连接另一个Index对象,产生一个新的Index |
diff |
计算差集,并得到一个Index |
intersection |
计算交集 |
union |
计算并集 |
isin |
计算一个指示各值是否都包含在参数集合中的布尔型数组 |
delete |
删除索引i处的元素,并得到新的Index |
drop |
删除传入的值,并得到新的Index |
Insert |
将元素插入到索引i处,并得到新的Index |
is_monotonic |
将各元素均大于等于前一个元素时,返回True |
is_unique |
当Index没有重复值时,返回True |
unique |
计算Index中唯一值得数组 |
reindex的(插值)method选项
参数 |
说明 |
ffill或pad |
前向填充(或搬运)值 |
bfill或backfill |
后向填充(或搬运)值 |
reindex函数的各参数及说明
参数 |
说明 |
index |
用作索引的新序列。既可以是Index实例,又可以是其他序列型的python数据结构。Index会被完全使用,就像没有任何复制一样 |
method |
插值(填充)方式,具体参数请参见上面 |
fill_value |
在重新索引的过程中,需要引入缺失值时使用的替代值 |
limit |
前后或后向填充时的最大填充量 |
level |
在multiIndex的指定级别上匹配简单索引,否则选取其子集 |
copy |
默认是True |
灵活的算术方法
方法 |
说明 |
add |
用于加法(+)的方法 |
sub |
用于减法(-)的方法 |
div |
用于除法(/)的方法 |
mul |
用于乘法(*)的方法 |
排名时用于破坏平级关系的method选项
method |
说明 |
average |
默认:在相等分组中,为各个值分配平均排名 |
min |
使用整个分组的最小排名 |
max |
使用整个分组的最大排名 |
first |
安置在袁术数据中出现的顺序分配排名 |
约简方法的选项
选项 |
说明 |
axis |
约简的轴。DataFrame的行用0,列用1 |
skipna |
排除缺失值,默认值为True |
level |
如果轴是层次化索引的,则根据level分组约简 |
描述和汇总统计
方法 |
说明 |
count |
非NA值得数量 |
describe |
针对Series或各DataFrame列计算汇总统计 |
min、max |
计算最小值和最大值 |
argmin、argmax |
计算能够获取到最小值和最大值的索引位置 |
idxmin、idxmax |
计算能够获取到最小值和最大值的索引值 |
quantile |
计算样本的分位数(0到1) |
sum |
值得总和 |
mean |
值的平均值 |
median |
值的算术中位数 |
mad |
根据平均值计算平均绝对离差 |
var |
样本值的方差 |
std |
样本值的标准差 |
skew |
样本值的偏度(三阶矩) |
kurt |
样本值的峰度(四阶矩) |
cumsum |
样本值得累积和 |
cummin、cummax |
样本值得累积最大值和累积最小值 |
cumprod |
样本值的累计积 |
diff |
计算一阶差分 |
pct_change |
计算百分数变化 |
相关系数和协方差
唯一值、值计数、成员资格方法
方法 |
说明 |
isin |
计算一个表示“Series各值是否包含于传入的值得序列中”的布尔型数组 |
unique |
计算Series中的唯一值数组,按发现的顺序返回 |
value_counts |
返回一个Series,其索引为唯一值,其值为频率,按计数值降序排列 |
处理缺失数据
方法 |
说明 |
dropna |
根据各标签的值中是否存在确实数据对轴标签的进行过滤,可通过阀值调节对缺失值的容忍度 |
fillna |
用指定值或插值方法(如fill或bfill)填充缺失数据 |
isnull |
返回一个含有布尔值的对象,这些布尔值表示那些值是缺失值/NA,该对象的类型与源类型一样 |
notnull |
isnull的否定式 |
fillna函数的参数
参数 |
说明 |
value |
用于填充缺失值得标量值或字典对象 |
method |
插入方式。如果函数调用时未指定其他参数的话,默认为‘ffill’ |
axis |
待填充的轴,默认axis=0 |
inplace |
修改调用对象而不产生副本 |
limit |
(对于前向和后向填充)可以连续填充的最大数量 |
层次化索引
层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它能
使你能以低维度形式处理高维度数据。
数据加载、存储与文件格式
函数 |
说明 |
read_csv |
从文件、URL、文件型对象中加载带分隔符的数据 |
read_table |
从文件、URL、文件型对象中加载带分隔符的数据 |
read_clipboard |
读取剪贴板中的数据,可以看做read_table的剪贴板。在网页转换为表格时很有用 |
read_csv/read_table函数的参数
参数 |
说明 |
path |
表示文件系统位置、URL、文件型对象的字符串 |
sep或delimiter |
用于对行中各字段进行拆分的字符序列或正则表达式 |
header |
用作列名的行号。 |
index_col |
用作行索引的列编号或列名。可以是单个名称/数字或由多个名称、数字组合的列表 |
names |
用于结果的列名列表,结合header=None |
skiprows |
需要忽略的行数,或需要跳过的行号列表 |
na_values |
一组用于替换NA的值 |
comment |
用于将注释新消息从行尾拆分出去的字符 |
parse_dates |
尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。此外,还可以指定需要解析的一组列好或列名。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作(例如,日期/时间分别位于两个列中) |
keep_date_col |
如果连接多列解析日期,则保持参与连接的列。默认是False |
converters |
由列号/列名跟函数之间的映射关系组成的字典。例如,{‘foo’:f}会对foo列的所有值应用函数f |
dayfirst |
当解析有歧义的日期时,将其看做国际格式。 |
date_parser |
用于解析日期的函数 |
nrows |
需要读取的行数 |
iterator |
放回一个TextParser以便逐块读取文件 |
chunksize |
文件快的大小(用于迭代) |
skip_footer |
需要忽略的行数(从文件末尾处算) |
verbose |
打印各种解析器输出信息 |
encoding |
用于unicode的文本编码格式,“utf-8”表示用utf-8编码的文本 |
squeeze |
如果数据经解析后仅含一列,则放回Series |
thousands |
千分位分隔符 |
数据规整化:清理、转换、合并、重塑
pandas对象中的数据可以通过一些内置的方法进行合并
- pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。sql或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的连接操作
- pandas.concat可以沿着一条轴将多个对象堆叠到一起
- 实例方法combine_first可以将重复数据编接在一起,用一个对象中的值填充灵一个对象中的缺失值
merge函数的参数
参数 |
说明 |
left |
参与合并的左侧Dataframe |
right |
参与合并的右侧Dataframe |
how |
inner、outer、left、right其中一个。默认为inner |
on |
用于连接的列名。必须存在于左右两个Dataframe对象中。如果未指定,其他连接键也未指定,则以left和right列名的交集座位连接键 |
left_on |
左侧DataFrame重用作连接键的列 |
right_on |
右侧DataFrame中用作连接键的列 |
left_index |
将左侧的行索引用作其连接键 |
right_index |
同上 |
sort |
根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能 |
suffixes |
字符串值元组,用于追加到重叠列名的末尾,默认为(’_x’,’_y’)。例如,如果左右两个DataFrame对象都有“data”,则结果中就会出现“data_x”和“data_y" |
copy |
设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是复制 |
轴向连接
另一种数据合并运算也被称作连接、绑定或堆叠
- 如果各对象其他轴上的索引不同,那些轴应该是做并集还是交集
- 结果对象中的分组需要各不相同吗?
- 用于连接的轴重要吗?
concat函数的参数
参数 |
说明 |
objs |
参与连接的pandas对象的列表或字典。唯一必须的参数 |
axis |
指明连接的轴向,默认为0 |
join |
“inner”,“outer"其中之一。默认为"outer”.知名其他轴向上的索引是按交集(inner)还是并集(outer)进行合并 |
join_axes |
指明用于其他n-1条轴的索引,不执行并集/交集运算 |
keys |
与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值得列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话) |
levels |
指定用作层次化索引各级别上的索引,如果设置了keys的话 |
names |
用于创建分层级别的名称,如果设置了keys和levels的话 |
verify_integrity |
检查结果对象新轴上的重复情况,如果发现则引发异常。默认允许重复 |
ignore_index |
不保留连接轴上的索引,产生一组新索引 |
重塑和轴向旋转
重塑层次化索引
- stack:将数据的列"旋转"为列
- unstack:将数据的行"旋转"为列
数据转换
- duplicates
- drop_duplicates
利用函数或映射进行数据转换
字符串操作
python内置的字符串方法
方法 |
说明 |
count |
返回子串在字符串中的出现次数(非重叠) |
endswith,startswith |
如果字符串以某个后缀结果,则返回True |
join |
将字符串用作连接其他字符串序列的分隔符 |
index |
如果在字符串中找到子串,则放回子串第一个字符所在的位置。如果没有找到,则引发valueError |
find |
如果在字符串中找到子串,则返回第一个发现的子串的第一个字符所在的位置。如果没有找到,则返回-1 |
rfind |
如果在字符串中找到子串,则返回最后一个发现的子串的第一个字符所在的位置。如果没有找到,则返回-1 |
replace |
用另一个字符替换指定子串 |
strip、rstrip、lstrip |
去除空白符。相当于对各个元素执行x.strip() |
split |
通过指定的分隔符将字符串拆分为一组子串 |
lower、upper |
分布将字母字符转换为小写或大写 |
ljust、rjust |
用空格填充字符串的空白侧以返回符合最低宽度的字符串 |
matplotlib的用法
Series.plot方法的参数
参数 |
说明 |
label |
用于图例的标签 |
ax |
要在其上进行绘制的matplotlib subplot对象,如果没有设置,则使用当前matplotlib subplot |
stype |
将要传给matplotlib的风格字符串’ko–’ |
alpha |
图表的填充不透明度 |
kind |
可以是line,bar,barh,kde |
use_index |
将对象的索引用作刻度标签 |
rot |
旋转刻度标签(0到360) |
xticks |
用作x轴刻度的值 |
yticks |
用作y轴刻度的值 |
xlim |
x轴的界限(例如[0,10]) |
ylim |
y轴的界限 |
grid |
显示轴网格线 |
subplots |
将各个DataFrame列绘制到单独的subplot中 |
sharex |
如果subplots=True,则共用同一个X轴,包括刻度和界限 |
sharey |
如果subplots=True,则共用同一个Y轴 |
figsize |
表示图像大小的元组 |
title |
表示图像标题的字符串 |
legend |
添加一个subplot突破 |
sort_columns |
以字母表顺序绘制各列,默认使用当前列顺序 |
kind=’bar‘(垂直柱状图)或kind=‘barh’(水平柱状图)