过年在家读的这本书,最近复习一遍,顺便码成文字分享给大家。
1、Numpy——numerical python
Python数值计算的基石,提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。
2、pandas——Python data analysis
提供高级数据结构和函数,将表格和关系型数据库的灵活数据操作能力与numpy的高性能数组计算理念相结合。提供复杂的索引函数,使得数据的重组、切块、切片、聚合、子集选择更为简单。
3、matplotlib
制图以及数据可视化库
4、ipython与jupyter
提供交互性、探索性的高校环境
5、scipy
科学计算领域针对不同标准问题域的包集合
6、scikit-learn——专注于预测
首选机器学习工具包
7、statsmodels——专注于推理统计
统计分析包:
数据分析大体分为以下几个部分:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kL8x7jUq-1592533458705)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591244916763.png)]
列表推导式:[expr for val in collection if condition]
字典推导式:{key_expr : value_expr for value in collection if condition}
集合推导式:{expr for value in collection if condition}
参数:位置参数、关键字参数
变量:全局变量global、局域变量no local
lambda函数(匿名函数)
生成器 yield
open( path, ‘读取模式’)
sys.getdefaultencoding()——检查文件的默认编码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAT9N9Yf-1592533458710)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591251457434.png)]
n维数组:shape属性、dtype属性(默认float64)
1.1 生成ndarray
array函数:接受任意序列型对象,生成np数组。例如np.array([1,2,3,4,5,6])
zeros函数、ones函数、empty函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5ntItEG-1592533458713)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591251907169.png)]
1.2 数据类型dtype
元数据:meta data
数据类型转换:astype方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfyT2vtv-1592533458716)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591252163599.png)]
数组维度变换:reshape方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9uy04tz-1592533458720)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591254227011.png)]
1.3 numpy数组运算
向量化批量数据操作:同shape数组间逐元素操作
1.4 numpy数组索引与切片
注意:
**切片:**arr1d[ : ],arr2d[ : ] (沿行切片)或 arr2d[ : , : ] (沿行列切片)
**基础索引:**arr1d[],arr2d[ , ]或者arr2d[] []
**bool索引:**索引数组可传入布尔值数组
**神奇索引:**用于描述使用整数数组进行数据索引
**clip裁剪:**例如arr.clip(10,18) ,将数组中小于10的替换成10,大于18的替换成18
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fHD6O4K1-1592533458722)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591253675432.png)]
1.5 数组转置和换轴
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGK20Dvp-1592533458724)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591254293588.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fh8EkqjV-1592533458725)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1591254343367.png)]
universal function : 在ndarray中进行逐元素操作的函数
abs、exp、sqrt、square、mod、add等
向量化:利用数组表达式来替代显示循环,比Python等价实现速度快1-2个数量级
3.1 np.where函数
np.where( cond, xarr, yarr) 等价于 xarr if cond else yarr
典型用法:根据一个数组来生成一个新数组
3.2 数学和统计学方法
聚合函数:mean、sum、max、min、std等
3.3 排序——sort方法
arr.sort(axis = )——对原数组按位置排序,不返值
np.sort(arr)——返回排序好的数组拷贝
3.4 唯一值函数
np.unique:返回数组中唯一值排序后形成的数组
类似于sorted( set(names) )效果
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和(或)长度为1的维度上进行。
常用工具数据结构:series、dataframe
2.1 索引
loc(轴标签)、iloc(整数标签)
**注意:**series按index切片包含尾部索引
**含有重复标签的轴索引:**is_unique属性可检验索引是否唯一
2.2 重建索引 reindex
2.3 删除轴向上条目 drop方法
pd.drop(索引,[axis = 0, inplace = true])
axis = 1或者axis = ‘columns’ 从列中删除对于索引值
2.4 函数应用与映射
apply方法与map方法
pd.apply( func )
map方法接收一个函数或一个包含映射关系的字典型对象
2.5 排序和排名
sort_index 方法:返回新排序好的对象 frame.sort_index( axis = 0/1, ascending = True/False)
sort_values方法:根据series值排序(缺失值在底部) obj.sort_values( by = ’ ’ 参数选择列作为排序键)
cumsum()函数
设置skipna参数来实现排除NA值
corr方法计算相关性、cov方法计算协方差
unique函数返回series中唯一值(无序)
nunique函数返回
value_counts函数,计算series中包含值个数的序列,按数量降序排列
isin:向量化成员属性检查,返回bool值series
pd.read_csv()
pd.read_excel()
在清洗数据用于分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差很重要。
NA处理方法(API函数):dropna、fillna、isnull、notnull
**过滤缺失值:**data.dropna() = data[ data.notnull()]
**填充缺失值fillna函数:**设置参数包括method = ‘ffill’、inplace = True、limit设置向前向后填充的范围、axis设置沿某个轴向填充
2.1 删除重复值 drop_duplicates
返回删除重复值后的Dataframe
2.2 使用apply或map进行数据转换
map方法接收一个函数或者包含映射关系的字典型对象
2.3 replace方法替代值
data.replace(-999, np.nan)
替换多个值时传入列表参数
2.4 重命名轴索引
data.index.map(func或者某种形式的映射)
rename方法:创建数据集转换后的版本,不修改原数据集
data.rename( index = , columns = )
2.5 离散化和分箱
**cut函数:**cats = pd.cut ( ages, [18, 25, 35, 60, 100], right = False, labels = group_names, precision = 2)
参数中,ages为数据,
[18, 25, 35, 60, 100]为分隔点,默认左开右闭/或者为分割箱数,等长分隔
right 设置左闭右开
labels 设置分组名(箱名)
precision 等分点精度
分箱结果cats具备两属性:
**qcut函数:**基于样本分位数分箱,获得等数据量的数据箱
2.6 检测和过滤异常值
data[ np.abs(data) > 3 ] = np.sign(data) * 3
2.7 置换和随机抽样
置换:np.random.permutation
随机抽样:sample方法 ,df.sample( n = 3) 参数n为样本规模
2.8 计算指标/虚拟变量:get_dummies函数 ——独热编码
将df中有k个值的某列,衍生出一个k列值为1和0的矩阵,值作为列名,往矩阵里投点
3.1 字符串对象方法
拆分去空格: [ x.strip() for x in val.split(’,’) ]
拼接:’‘连接符’’ .join(pieces)
定位子字符串方法:in、index(未找到报错)、find(未找到返回-1)
计数:count
替换:replace(被替换,替换)
3.2 正则表达式
re.split( ’ \s+’, text) 先编译再匹配
等同于 regex = re.compile( ‘\s+’) —— regex.split( text ) 效果更佳,节约CPU周期
3.3 向量化字符串函数
data.str.contains(‘gmail’) 检查series中是否含有’gmail‘
unstack() 方法:拆堆,将数据在df中重新排列
stack() 方法:堆叠,将列数据——分层数据(索引)
set_index函数:将df中的一个列或者多个列作为新的df的index 。 例如:df2 = df1.set_index([‘c’ , ‘d’])
reset_index函数是set_index函数的反操作
pandas中merge函数与SQL中的join函数作用相似,用来将两个DataFrame按照数据库风格连接,how参数默认为inner,即内连接方式。
pandas中join实例方法:用于合并多个索引相同或相似,但无重叠的列(left.join(right,how=‘left’,on=键)默认是左连接
pandas中concat函数,默认沿着axis=0方向连接,即沿行方向按列连接
np.where( pd.isnull(a), b, a) :实现用b中值替换a中nan值
unstack() 方法:拆堆,将数据在df中重新排列。 例如 df.unstack( 层级名或层级序号, dropna = True)
stack() 方法:堆叠,将列数据——分层数据(索引)
pandas中数据透视表函数:pivot_table,pivot_table参数中,index是设置数据透视后的索引,columns是设置透视后的列,values是按照哪个值进行计算,aggfunc是按照哪个函数进行计算
组操作:拆分——应用——联合(分组聚合)
可使用df中列、字典或series、函数、索引层级作为分组键
groupby对象支持迭代,生成包含组名(索引)和数据块的2维元组序列。
将含有列名与函数对应关系的字典({列名1: 函数1, 列名2: 函数2}
apply将对象拆分成多块,然后在每一块上调用传递函数,之后使用pd.concat将每一块拼接到一起。
**实例:**使用指定组分填充缺失值: fill_mean = lambda g:g.fillna(g.mean())
pivot_table()
crosstab()
定义:在多个时间点观测或测量的数据
from datetime import datetime
生成一段时间范围:pd.date_range(start ,end , freq, periods)
**将时间字符串转换成时间戳:**pd.to_datetime(数据, format=’ ')
**移位日期:**df.shift(数量,freq) 常用于计算百分比变化:df/df.shift(1)-1
重采样resample:将时间序列从一个频率转化成另一个频率
**timestamp对象格式化(转化为字符串):**strftime()方法
指从原生数据集中提取可用于模型上下文的有效信息的数据转换过程或分析(向量或矩阵)
import matplotlib.pyplot as plt
import matplotlib.font_manager
绘制折线图:plt.plot
设置图片大小与分辨率:plt.figure( figsize = , dpi = )
实现图片保存:plt.savefig()
设置xy轴刻度:plt.xticks()
设置标题、xy轴标签:plt.title()\plt.xlabel()
设置中文字体:myfont = font_manager.Font_Properties(fname = )
绘制多图形:plt多次或者设置子图:ax = plt.subplot(131)
绘制图例:先设置label参数,再plt.legend()
散点图:plt.scatter 直方图:plt.hist 条形图:plt.bar/barh 折线图:plt.plt