python and mathematics
Get Start
Concentrate on python and math
|
|
|
|
numpy
numpy 是底层为 C 的向量计算库,是 python 科学计算的基石,快速、贴近底层。
中文文档:https://www.numpy.org.cn/ 英文文档:https://numpy.org/doc/stable/user/index.html
非常的底层,数值计算的基础
numpy 基础数据类型
NumPy 包的核心是 ndarray 对象,是一种容器,类似于 python 的 list 和 C++ 的 array 。 它封装了 python 原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
ndarray 有固定的大小、容器中是相同的数据类型(可以通过 dtype 访问)。 ndarray 通过 矢量化 加速程序运行
|
|
请注意 numpy 的整数有可能溢出
数组的创建
-
从其他 Python 结构(例如,列表,元组)转换
np.array(list_like)
-
numpy 原生数组的创建
numpy 提供了部分函数,可以创建特定的数组
1 2 3 4 5 6
shape = (1, 4) print(np.ones(shape)) print(np.zeros(shape)) print(np.random.random(shape)) print(np.arange(0, 6, 2)) # 从0到6,每隔2个 print(np.linspace(1., 4., 6)) # 从1到4,一共6个
索引与变形
shape 属性储存了 numpy 数组的“形状”,并且是可以修改的
|
|
运算
算术运算符
数组上的算术运算符会应用到 元素 级别。下面是创建一个新数组并填充结果的示例:
|
|
对于矩阵,乘法使用@
|
|
一些方法
axis 参数可以指定操作的方向,沿着第几维
|
|
广播
广播允许通用功能以有意义的方式处理不具有完全相同形状的输入。
广播的第一个规则是,如果所有输入数组不具有相同数量的维度,则将“1”重复地预先添加到较小数组的形状,直到所有数组具有相同数量的维度。
广播的第二个规则确保沿特定维度的大小为1的数组表现为具有沿该维度具有最大形状的数组的大小。假定数组元素的值沿着“广播”数组的那个维度是相同的。
pandas
pandas 封装了 numpy 的一些操作,使得 python 可以像操作 excel (其实是基于 R 的语法)一样操作数据(称为 DataFrame
)
中文文档:https://www.pypandas.cn/docs/getting%5Fstarted/10min.html 英文文档:https://pandas.pydata.org/docs/
对象
Series
可以理解成一列 excel 数据
DataFrame
可以理解成一张 excel 表,可以用切片/属性的方式访问某一列
|
|
-
dataframe 的导入导出
导入可以用
pd.read_*
,而导出可以用pd.to_*
,如 csv, excel
-
查看数据
df 有属性
head(n)
,tail(n)
可以查看头/尾 n 条数据describe()
可以快速查看数据的统计摘要:1 2 3
desc = df.describe() print(desc) print(desc['A'])
-
切片
一个 [] 切出来是一个 Series,两个[[]] 则是 dataframe
1 2
df["A"] # return the column A as Series df[["A", "B"]] # return column AB as a new df
-
排序
1
print(df.sort_values(by = ['A', 'B'], ascending=False))
-
筛选
向量化操作会更快,条件中间用&
1
print(df[df["A"]<0])
-
运算
运算基本类似 numpy ,但是没有广播机制,必须对齐
特别的,有
apply
函数很常用df.apply(lambda x: x.max() - x.min())
apply
的含义是,对每一个 Series ,应用这个函数,并返回结果
-
合并
两个 dataframe 合并,操作中 how 必须是 One of ’left’, ‘right’, ‘outer’, ‘inner’. Defaults to inner.
1 2 3 4
left = pd.DataFrame({'key': ['foo', 'bar'], 'lval': [1, 2]}) right = pd.DataFrame({'key': ['foo', 'bar', "etc"], 'rval': [4, 5, 6]}) print(pd.merge(left, right, on="key", how="left"))
-
group_by
return (group, df_in_group)
1 2 3 4 5 6 7 8 9
df = pd.DataFrame( { "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"], "B": ["one", "one", "two", "three", "two", "two", "one", "three"], "C": np.random.randn(8), "D": np.random.randn(8), } ) print(df.groupby("A").sum())
其他
dropna
df.dropna()
删除掉空值
cut
|
|
value_counts
|
|
透视表
-
pivot_table
有四个最重要的参数 index、values、aggfunc
-
index
针对不同的索引构建透视表
1
pd.pivot_table(df,index=['a', 'b'])
-
values
values 可以对需要的计算数据进行筛选
-
aggfunc
aggfunc 参数可以设置我们对数据聚合时进行的函数操作,默认是 mean
-
-
pivot
1
df.pivot(index="row as", columns="column as", value="show what value")
stack
将一个 multiIndex 的多列变成一个更加 multiIndex 的一列
unstack
是相反的过程
stats-models
可以视作 stata 的替代品,也有部分机器学习算法(目前机器学习最流行的框架是 pytorch )
文档:https://www.statsmodels.org/stable/gettingstarted.html
回归
|
|
获得参数
|
|
formula
|
|
支持 R 风格的公式
- \~ 代表 \=
-
- 明晰不要某个变量:-1代表无截距项
- : 代表两个的交互项
- * 代表两个的交互项,此外还有他们两个单独的项
- 可以使用 np 的函数等
其他
matplotlib
https://matplotlib.org/stable/tutorials/index
基础的作图,对标 Matlab
中文
|
|
<>
example
pyplot 是 matplotlib 暴露给我们的接口,可以用 plt.plot 作图
教程:https://matplotlib.org/stable/tutorials/introductory/pyplot.html
|
|
具体
折线图 | 直方图 | 散点图 | 饼图 |
---|---|---|---|
plot | bar | scatter | pie |
seaborn
seaborn 是封装了 matplotlib 的又一层接口,相较 matplotlib 默认更美观
教程:https://seaborn.pydata.org/tutorial.html
matplotlib use seaborn style
|
|
relplot
|
|
|
|