一些重要的Python库:
Numpy
pandas
matplotlib
Scipy
scikit-learn
statsmodels
缩进 import 运算符(is is not)
数据类型:数值型 字符串 Bytes Unicode 时间类型 布尔型 空值(None)
控制流程:if elif else for循环(for...in...) while循环 pass range函数 三元表达式
1.数据结构与序列
1.tuple:元组 长度固定,不可改变的序列 用( )或只用逗号表示
2.list:列表 大小和内容都可以变 用[ ]表示
append insert remove extend sort(直接更改原有的序列) 切片
bisect.bisect bisect.insort
3.内建的序列函数:enumerate sorted(返回一个新的序列) zip reversed
4.dict:字典 key : value形式 用{ }表示
in del pop update(合并两个dict) get setdafault hash
d1.keys d1.values
5.set:集合 无序且元素是不重复的,就像是key唯一且没有value的字典 用{ }表示
并集:union、| 交集:intersection、& 差集:difference、- 对称差集(x-y与y-x的并集):symmetric_difference、^
子集:issubset 超集:issuperset
6.list,set和dict推导式
map 嵌套列表表达式
2.函数
1. 命名空间,作用范围,局部函数
2.返回多个值(返回一个tuple)
3.函数是对象
4.匿名函数,lambda函数
5.柯里化(Currying):局部参数应用
6.生成器 Generators
7.错误和异常处理
3.文件以及操作系统
open close read write seek
with open(path) as f : ... 这种打开方式可以自动关闭文件
1.多维数组对象
np.random.randn
np.array np.zeros np.empty np.arange np.arange().reshape()
arr.dtype arr.shape arr.ndim arr.size
arr.astype(转换类型) np.string_
数组间的计算:点对点计算(element-wise) + - * / ** >
索引和切片
布尔索引 花式索引
数组转置和轴交换 转置:transpose、arr.T 矩阵乘法:np.dot swapaxes
2.通用函数:快速点对点数组函数
np.exp np.sqrt np.maximum np.modf
3.数组导向编程
向量化的数组运算比纯python同等程度的运算要快很多 np.meshgrid
np.where
数学和统计方法:arr.mean arr.sum arr.cumsum arr.cumprod 注意axis 还有std、var、min、max、argmin、argmax等
排序:arr.sort(改变原数组的顺序) np.sort(生成新的排序后的结果)
单一性和其他集合逻辑:np.unique np.in1d 还有intersect1d、union1d、in1d、setdiff1d、setxor1d等
4.通过数组来进行文件的输入和输出
Numpy能从磁盘直接加载和存储数据,比如二进制格式的数据:np.save np.load np.savez np.savez_compressed
不常用,更多用pandas来加载数据
5.线性代数
np.dot np.round
diag、trace、det、eig、inv、pinv、qr、svd、solve、lstsq等
6.伪随机数生成
np.random.seed np.random.RandomState
np.random.permutation(shuffle、rand、randint、randn、binomial、normal、beta、chisquare、gamma、uniform)
1.pandas的数据结构
1.Series:伴有index的一维序列 pd.Series
obj.values obj.index obj.name obj.index.name
isnull notnull
2.DataFrame:长方形表格 pd.DataFrame
frame.head() frame.columns frame.T frame.columns.name frame.index.name frame.values
3.索引对象
2.主要功能
1.重新索引
reindex方法 参数:method(= ffill、bfill)、fill_value、limit等
2.按轴删除记录
drop方法 inplace=True可直接更改原Series或Dataframe
3.索引,选择,过滤
用label(比如Series的index名)来切片的时候,和python不一样的在于,会包括尾节点
df[val] loc iloc ix
4.整数索引
5.算数和数据对齐
pandas的一个有用的feature就是,不同index的object之间的算术计算,如果两个object相加,但他们各自的index并不相同,最后结果得到的index是这两个index的合集(并集),一个object有另一个object没有的index运算后对应的值为缺失值NAN
df1.add(df2,fill_value=0)将NAN值填充为0
6.函数应用和映射
apply map applymap
7.排序
sort_index sort_values 默认是升序,通过参数ascending=False可设置为降序
rank方法 参数:ascending、method(=average、min、max、first、dense)、axis等
8.有重复label的轴索引
index的is_unique特性能告诉我们object的index中是否有重复值:obj.index.is_unique
3.汇总和描述性统计
mean、sum等方法有个skipna参数,除非整个切片全是NA,否则我们可以用skipna来跳过计算NA
idxmin idxmax describe count min max argmin argmax quantile sum mean median mad prod var std skew kurt cumsum cummin cummax cumprod diff( df.diff() = df - df.shift() ) pct_change
1.相关性和协方差
corr cov corrwith
2.唯一值,值计数,会员
unique value_counts isin match
1.处理缺失数据
1.过滤/删除缺失值
dropna 参数:how(=all、any)、thresh(要求留下的数据至少有thresh个非NAN)等
2.填补缺失值
fillna 调用fillna的时候设置好一个值来替换缺失值 参数:value、inplace、method(=ffill、bfill)、axis、limit
2.数据变换
1.删除重复值
duplicated、drop_duplicateds 参数keep='last'能保留最后一次观测到的数值组合
2.用函数和映射来转换数据
3.替换值
replace 参数:inplace
4.重命名Axis Indexes
rename 参数:inplace
5.离散化和装箱
cut方法 cats=pd.cut(ages,bins) cats.codes cats.categories pd.value_counts(cats)
可以自己设定哪一边是闭区间(right=False)
如果只是给出了bin的数量来cut,而不是自己设定每个bin的范围,cut会根据最大值和最小值来计算等长的bins,参数precision=2表示bins精确到小数点后两位
qcut方法
6.检测和过滤异常值
np.sign
7.排列和随机采样
np.random.permutation:打乱原顺序,随机排序
df.take df.sample(有参数replace)
8.计算指示器/假变量
3.字符串处理
1.字符串对象方法
split strip rstrip lstrip join index find rfind count replace endswith startswith lower upper casefold ljust rjust
2.正则表达式
import re
findall finditer search match
推荐使用 python 的 r 前缀r' ',就不用考虑转义的问题了
re.compile(有参数flags=re.IGNORECASE) sub groups split
将匹配结果分组:在正则表达式中加括号
3.pandas中的字符串向量化函数
cat contains extract get isalnum isalpha isdecimal isdigit islower isupper len isnumeric pad center repeat tile slice
1.分层索引
在一个轴(axis)上有多个index levels(索引层级)
MultiIndex :levels labels names
具有分层索引的Series可以通过data.unstack()变为Dataframe,相反的操作是stack:data.unstack().stack()
1.重排序和层级排序:swaplevel sort_index
2.按层级来归纳统计数据
3.利用DataFrame的列来索引:set_index(参数:drop) reset_index
2.合并数据集
pandas中合并数据集的几种方法:
①pandas.merge:按一个或多个key把DataFrame中的行连接起来,和SQL及其他关系型数据库中的join操作相似
②pandas.concat:在一个axis上,串联或堆叠(stack)多个对象
③combine_first实例方法:能拼接相互之间有重复的数据,并用一个对象里的值填满缺失值
1.merge:参数有on、left_on、right_on、how(默认是内连接inner,还有outer、left和right)、suffixes、left_index、right_index等
2.DataFrame有一个join实例,可以直接用index来合并:比如left1.join(right1) 默认为左连接 参数有on、how等 可以连接多个DataFrame
3.concat:参数有axis、join、join_axes、keys、names、ignore_index等
4.combine_first: np.where
3.整形和旋转
对多层级索引进行整形
把“长”格式旋转为“宽”格式:pivot
把“宽”格式旋转为“长”格式:melt
1.简单的matplotlib API入门
导入:import matplotlib.pyplot as plt
plt.plot(x,y,format_string,**kwargs)函数细节:https://blog.csdn.net/u014539580/article/details/78207537
fig = plt.figure()
ax = fig.add_subplot(2,2,1) # 共4幅图(2*2),选中第一幅(索引分别为1 2 3 4)
或者写成fig,axes = plt.subplot(2,3,sharex=True,sharey=True),然后使用axes[0,1]来索引第一幅图
使用sharex=True和sharey=True来指定不同subplot有相同的x和y轴,令坐标轴的范围相同,这就能让我们在同一范围内进行数据之间的比较。
plt.subplots_adjust(wspace=0,hspace=0):控制图与图之间的间隔,令间隔为0
通常只有一幅图时写成fig.add_subplot(1,1,1)
在plot函数的format_string参数中,包括了颜色字符,风格字符(样式)和标记物类型,比如可以简单表示为'ko--',即黑色、实心圈标记和破折线,但必须按照颜色,标记物类型,样式这样的顺序来表示在一起。
plt.legend():显示图例 函数细节:https://blog.csdn.net/you_are_my_dream/article/details/53440964
常用方法:ax.get_xlim() ax.set_xlim() ax.set_xticks() ax.set_xticklabels() ax.set_title() ax.set_xlabel() 有set...就有对应的get...
文本:ax.text() 注释:ax.annotate(参数arrowprops可以设置箭头)
将图形添加到subplot中:rect = plt.Rectangle(...) circ = plt.Circle(...) ax.add_patch(rect) ax.add_patch(circ)
把图保存为文件:plt.savefig('figpath.svg') 保存的文件类型通过文件名后缀来指定,默认为png 有dpi、bbox_inches等参数
2.用pandas和seaborn绘图
seabron通常用来做一些统计图形,导入seaborn会改变matplotlib默认的颜色和绘图样式,提高可读性和美感,即使不适用seaborn的API,也可以利用seaborn来提高可视化的效果。
Series和DataFrame各自都有plot属性,用来做一些比较基本的绘图类型。默认,plot()会绘制线图,df.plot()等同于df.plot.line()
根据DataFrame数据作出的线图,会把DataFrame的每一列画出一条线,所有的线会在同一个或不同的subplot中(设置参数subplots=True则不同的线会画在不同的subplot中)
条形图:df.plot.bar(垂直的条形图) df.plot.barh(水平的条形图)
对于DataFrame,条形图会把每一行作为一个组画出来
设定参数stacked=True,能让条形图堆叠起来显示数据
seaborn通过sns.barplot绘制条形图,并且图中会显示置信区间(默认为95%),并且hue参数能让我们把某一列的数据分开
柱状图:df.plot.hist bins参数
密度图:df.plot.density 核密度估计
seaborn通过sns.distplot绘制柱状图和密度图(同一张图上)
散点图(点图):散点图对于检查二维数据之间的关系是非常有用的
对数差分:np.log(data).diff().dropna()
seaborn的regplot方法,产生一个散点图并拟合一条回归线
seaborn的pairplot方法,可以把每一个参数的柱状图或密度估计画在对角线上
多面网格和类别数据:seaborn的factorplot方法 通过col参数对类别数据分别显示
通过设定参数kind='box',可以绘制箱线图(能够展示中位数、分位数和离群点)