一、Python数据科学库介绍
1、Numpy——numerical python
Python数值计算的基石,提供多种数据结构、算法以及大部分涉及Python数值计算所需的接口。
2、pandas——Python data analysis
提供高级数据结构和函数,将表格和关系型数据库的灵活数据操作能力与numpy的高性能数组计算理念相结合。提供复杂的索引函数,使得数据的重组、切块、切片、聚合、子集选择更为简单。
3、matplotlib
制图以及数据可视化库
4、ipython与jupyter
提供交互性、探索性的高校环境
5、scipy
科学计算领域针对不同标准问题域的包集合
6、scikit-learn——专注于预测
首选机器学习工具包
分类:SVM、最邻近、随机森林、逻辑回归等
回归:岭回归、lasso等
聚类:k-means、谱聚类、密度聚类等
降维:PCA、特征选择、矩阵分解等
模型评估(模型选择):网格搜索、交叉验证、指标矩阵
预处理:特征提取、正态化、标准化等
7、statsmodels——专注于推理统计
统计分析包:
回归模型:线性回归、通用线性模型
方差分析ANOVA
时间序列分析:AR、ARMA、ARIMA
非参数方法
数据分析大体分为以下几个部分:
与外部世界交互:读写各种格式的文件以及数据存储
准备:对分析数据进行清洗、处理、联合、正态化、重组、切片、切块和转换
转换:将数学或统计操作应用到数据集的分组上以产生新的数据集
建模和计算:将数据接入到统计模型、机器学习算法和其他计算工具上
演示:创建动态或静态的图形可视化或文字概述
二、内建数据结构、函数及文件
1、数据结构和序列
列表推导式:[expr for val in collection if condition]
字典推导式:{key_expr : value_expr for value in collection if condition}
集合推导式:{expr for value in collection if condition}
2、函数
参数:位置参数、关键字参数
变量:全局变量global、局域变量no local
lambda函数(匿名函数)
生成器 yield
3、文件与操作系统
open( path, ‘读取模式’)
sys.getdefaultencoding()——检查文件的默认编码
三、Numpy基础:数组与向量化计算
1、numpy ndarray——多维数据对象
n维数组:shape属性、dtype属性(默认float64)
1.1 生成ndarray
array函数:接受任意序列型对象,生成np数组。例如np.array([1,2,3,4,5,6])
zeros函数、ones函数、empty函数
1.2 数据类型dtype
元数据:meta data
数据类型转换:astype方法
数组维度变换:reshape方法
例如 arr.dtype; np.zeros((3,6))
1.3 numpy数组运算
向量化批量数据操作:同shape数组间逐元素操作
1.4 numpy数组索引与切片
注意:
区别于Python列表,数据的切片是原数组的视图,于视图的修改都会反映到原数组上,并非复制!
Python关键字 and和or 对于布尔值数组无效
神奇索引与切片不同,将数据复制到一个新的数组中
e.g. arr=np.arrange(10)
1.5 数组转置和换轴
transpose方法进行转置
特殊T属性
2、通用函数——ufunc
universal function : 在ndarray中进行逐元素操作的函数
abs、exp、sqrt、square、mod、add等
3、使用数组进行面向数组编程
向量化:利用数组表达式来替代显示循环,比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) )效果
4、广播原则
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和(或)长度为1的维度上进行。
实例:通过内置的random模块以纯Python的方式实现1000步的随机漫步
四、Pandas入门
1、pandas数据结构介绍
常用工具数据结构:series、dataframe
2、基本功能
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 = ’ ’ 参数选择列作为排序键)
3、描述性统计的概述与计算
cumsum()函数
设置skipna参数来实现排除NA值
corr方法计算相关性、cov方法计算协方差
unique函数返回series中唯一值(无序)
nunique函数返回
value_counts函数,计算series中包含值个数的序列,按数量降序排列
isin:向量化成员属性检查,返回bool值series
示例:使用DataFrame的列
五、数据载入、存储及文件格式
pd.read_csv()
pd.read_excel()
六、数据清洗与准备
1、处理缺失值
在清洗数据用于分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差很重要。
NA处理方法(API函数):dropna、fillna、isnull、notnull
**过滤缺失值:**data.dropna() = data[ data.notnull()]
**填充缺失值fillna函数:**设置参数包括method = ‘ffill’、inplace = True、limit设置向前向后填充的范围、axis设置沿某个轴向填充
2、数据转换
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具备两属性:
cats.codes——数据标签(箱索引)
cats.categories——类别数组
**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、字符串操作
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‘
示例:pandas中矢量化的字符串函数
七、数据规整、连接、联合与重塑
1、分层索引
unstack() 方法:拆堆,将数据在df中重新排列
stack() 方法:堆叠,将列数据——分层数据(索引)
set_index函数:将df中的一个列或者多个列作为新的df的index 。 例如:df2 = df1.set_index([‘c’ , ‘d’])
reset_index函数是set_index函数的反操作
2、联合与合并数据集
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值
3、重塑和透视
unstack() 方法:拆堆,将数据在df中重新排列。 例如 df.unstack( 层级名或层级序号, dropna = True)
stack() 方法:堆叠,将列数据——分层数据(索引)
pandas中数据透视表函数:pivot_table,pivot_table参数中,index是设置数据透视后的索引,columns是设置透视后的列,values是按照哪个值进行计算,aggfunc是按照哪个函数进行计算
示例:
八、数据聚合与分组操作
1、 数据分组:groupby
组操作:拆分——应用——联合(分组聚合)
可使用df中列、字典或series、函数、索引层级作为分组键
groupby对象支持迭代,生成包含组名(索引)和数据块的2维元组序列。
2、数据聚合:agg、apply
将含有列名与函数对应关系的字典({列名1: 函数1, 列名2: 函数2}
apply将对象拆分成多块,然后在每一块上调用传递函数,之后使用pd.concat将每一块拼接到一起。
**实例:**使用指定组分填充缺失值: fill_mean = lambda g:g.fillna(g.mean())
3、数据透视表与交叉表
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()方法
时间序列基础示例:
十、Python建模库介绍
特征工程
指从原生数据集中提取可用于模型上下文的有效信息的数据转换过程或分析(向量或矩阵)
十一**、数据可视化**
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
示例:

