【备忘速查】Python数据分析常见操作合集(Matplotlib,Numpy和Pandas)

0.前言以及一些唠叨

笔者其实是一个超级不喜欢做数据分析的人,因为感觉没什么意思。话是这么说,但时不时还是会有数据分析相关的任务。简单的数据处理和操作其实也不多,来来去去就那么一些(平时用得不多,也就这么一些);然而一段时间不用又忘了,还是得回去查以前回去写过的代码,烦不胜烦。因此想着趁有空把常用的东西写下来,免得又忘了。也希望能给观众带来一定的帮助。

由于笔者plt用得比较多,所以大部分重点在plt。

目录

1.pandas

2.numpy

2.1拟合

3.matplotlib

3.1坐标轴设置

3.2图线样式

3.3注释

3.4图例

1.pandas

Pandas笔者用得非常少,主要是对excel进行读写操作。读写最容易的方式是:

df = pd.read_excel(filepath, encoding = 'GBK', header = None)

其中 encodingheader是两个常用的选项。 encoding用于防止中文编码错误。 header指的是pandas在读取excel的时候自带表头,即不把第一行认为是数据,而认为是数据标签。因此,记录的数据从第二行开始读取。如果要读的excel本身并没有表头,就会造成一定的错误,此时用 header=None把表头功能关掉。

csv格式也是类似的。

在这之后, df中就存储了表格的所有信息。如果保留了表头的选项,那么 df可以作为一个字典来访问列,如

num = df['number']

就读取了表头为 number的一整列。

如果没有表头,又或者要按行读取, df.iloc里面存储了所有数据。这个成员是一个二维数组,如

item = df.iloc[2, 3]

读取了位置为 [2,3]的元素(从0开始)。支持切片。

2.numpy

numpy大部分时候使用的原则是:想怎么写就怎么写(x)。首先,所有的序列、矩阵数据结构都可以用 np.array转换为numpy数组;剩下的主要根据数学直觉进行书写。

因为别的也还没怎么用,所以先记录一下碰到的一个问题:拟合。

2.1拟合(多项式拟合)

coef = np.polyfit(x, y, deg = degree)
x:拟合的数据的x坐标列表
y:拟合的数据的y坐标列表
deg:拟合多项式的次数
coef(返回值):拟合得到的多项式系数形成的列表,高次数到低次数排列

numpy的拟合不会计算出R 2 R^2 R 2的值,但是这个值很容易手动计算:

y_average = np.average(y)
R2 = 1 - np.sum((y - f(y)) ** 2) / np.sum((y - y_average) ** 2)

f是拟合得到的函数,自己写一个就好了。

剩下的暂时没想到。以后再补吧。

3.matplotlib

3.1坐标轴设置

显示范围的设置:

plt.xlim(left, right)
plt.ylim(bottom, up)

坐标标签的设置:

plt.xlabel(xlabel)
plt.ylabel(ylabel)

坐标刻度的设置:

from matplotlib.pyplot import MultipleLocator
ax = plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(xsec))
ax.yaxis.set_major_locator(MultipleLocator(ysec))

3.2图线样式

在散点图中,点的样式通过 marker决定:

plt.scatter(x, y, marker = '>', s = 14., color = 'b')

marker的选择选项搬运自
这篇blog

【备忘速查】Python数据分析常见操作合集(Matplotlib,Numpy和Pandas)

另一个选项 s代表的是散点的大小。

在曲线图中,曲线的样式通过 linestyle决定,曲线的粗细由 linewidth决定:

plt.plot(x, y, linestyle = 'solid', linewidth = 0.8)
linestyle = 'solid', 'dashed', 'dashdot', 'dotted'

3.3注释

plt.annotate('annotate', xy = (0.5, 0.5), xycoords = 'figure fraction', fontsize = 12)

这句话将字符串 'annotate'注释在图像的中间位置。注意, xy标识的是字符串的起始位置,所以这样运行的结果肯定不会显示在中间。’

xycoords指示的是坐标系统,推荐使用 'figure fraction'即百分比,否则 xy的取值将与具体坐标数值有关系,不方便肉眼估计。

3.4图例

plt.legend()

emmm一般情况下不写参数会自动识别,所以可以不写参数。如果要获得对图例的完全控制的话,就要加一些参数:

line1 = plt.plot(x1, y1)
line2 = plt.plot(x2, y2)
plt.legend([line1, line2], ['lineA', 'lineB'])

这样就会添加两条图例,一条是对应line1的,文字为lineA;另一条是line2的,文字是lineB。

4.Scipy

1.插值

from scipy.interpolate import interp1d
f = interp1d(x, y, 'linear')

xy是用于插值的插值点。后面的选项可以是 linear, quadraticcubic。这里进行的插值是分段插值,即在相邻的两个插值点之间构造一个多项式函数。 linear就是把相邻的两个插值点直接相连(分段线性插值), quadratic就是分段二次插值, cubic就是三次样条插值。
返回值 f是一个函数, f(x)就可以得到插值预测的函数值:

newx = np.linspace(...)
newy = f(newx)

2.求解非线性方程组

对于一个非线性方程组(二元为例),将它整理成{ f ( x 0 , x 1 ) = 0 g ( x 0 , x 1 ) = 0 \begin{cases}f(x_0, x_1) = 0\g(x_0, x_1) = 0\end{cases}{f (x 0 ​,x 1 ​)=0 g (x 0 ​,x 1 ​)=0 ​的形式。然后,构造一个函数 equation

def equation(x):
    return [f(x[0], x[1]), g(x[0], x[1])]

并估计一个初值 x[0], x[1] = x0_init, x1_init,然后就可以求解:

from scipy.optimize import fsolve
root = fsolve(equation, [x0_init, x1_init])

返回值 root是一个列表, root[i]是得到的x i x_i x i ​的解。注意, fsolve得到的不一定是精确的解,有可能是局部的解。

暂时就写到这里,后续想到什么再补充吧。

(刚才又增加了一些莫名其妙的工作……相比之下,数据分析都要有意思得多。在这里替自己许一个愿,希望未来能少一些杂七杂八功利的破事,能专心学习。就这样吧。)

Original: https://blog.csdn.net/weixin_45570710/article/details/126613980
Author: Undermyth
Title: 【备忘速查】Python数据分析常见操作合集(Matplotlib,Numpy和Pandas)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/769807/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球