0.前言以及一些唠叨
笔者其实是一个超级不喜欢做数据分析的人,因为感觉没什么意思。话是这么说,但时不时还是会有数据分析相关的任务。简单的数据处理和操作其实也不多,来来去去就那么一些(平时用得不多,也就这么一些);然而一段时间不用又忘了,还是得回去查以前回去写过的代码,烦不胜烦。因此想着趁有空把常用的东西写下来,免得又忘了。也希望能给观众带来一定的帮助。
由于笔者plt用得比较多,所以大部分重点在plt。
目录
2.1拟合
3.1坐标轴设置
3.2图线样式
3.3注释
3.4图例
1.pandas
Pandas笔者用得非常少,主要是对excel进行读写操作。读写最容易的方式是:
df = pd.read_excel(filepath, encoding = 'GBK', header = None)
其中 encoding
和 header
是两个常用的选项。 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
另一个选项 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')
x
和 y
是用于插值的插值点。后面的选项可以是 linear
, quadratic
和 cubic
。这里进行的插值是分段插值,即在相邻的两个插值点之间构造一个多项式函数。 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/
转载文章受原作者版权保护。转载请注明原作者出处!