利用 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.youkuaiyun.com/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’(水平柱状图)