【备忘速查】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 R2的值,但是这个值很容易手动计算:

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')

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(x0,x1)=0g(x0,x1)=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 xi的解。注意,fsolve得到的不一定是精确的解,有可能是局部的解。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值