科学计算库Scipy和数据绘图库Matplotlib
在日常的学习工作中,常利用scipy库进行Gamma分布分析、参数估计。
并利用matplotlib进行结果绘制。
1.科学计算库Scipy
Scipy高级科学计算库和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算、统计分析,有很多子模块可以应对不同的应用,例如插值运算,优化算法等等。
并且在NumPy的基础上构建的更为强大,应用领域也更为广泛的科学计算包。需要依赖NumPy的支持进行安装和运行。
SciPy构建一个集成了多种数学算法和方便的函数的Python模块。通过给用户提供一些高层的命令和类,SciPy在python交互式会话中,大大增加了操作和可视化数据的能力。
通过SciPy,Python的交互式会话变成了一个数据处理和一个system-prototyping环境,足以和MATLAB,IDL,Octave,R-Lab,以及SciLab抗衡。
其中有三个功能,在数据挖掘的过程中需要我们熟练掌握:
a.最优化
from scipy import optimize
optimize.minimize(fun, 初始值, method,constraints=约束条件, bounds=约束边界,jac=目标函数的导函数)
fun: 求最小值的目标函数x0:变量的初始猜测值,如果有多个变量,需要给每个变量一个初始猜测值。
method:求极值的方法,官方文档给了很多种。每种方法有很大理论研究空间。 constraints:约束条件,针对fun中为参数的部分进行约束限制。
例:
目标函数: f(x,y) = 2*x*x +y*y + 5*x*y -2*y + 8
求解
约束条件: x-1>=0 y*y - x >0
可编写程序:
b.空间插值
from scipy import interpolate
tx=np.linspace(np.min(x),np.max(x), 100)
ty=np.linspace(np.min(y),np.max(y), 100)
XI,YI = np.meshgrid(tx,ty)
rbf = interpolate.Rbf(x, y, v, epsilon=2)
#对x/y的值范围内,等间隔1取值,并获取该 x,y对应的插值结果
ZI = rbf(XI, YI)
c.统计分析
scipy.stats中包括各种连续和离散分布、函数等。
- 正太分布:期望、标准差、样本数 np.random.normal(loc=0.0, scale=1.0, size=None)
- 概率分布函数 stats.norm.pdf(x) #描述随机变量取值分布规律的数学表示
- Gamma分布 from scipy.stats import gamma
shape决定了分布曲线的形状。
scale不同分布曲线的形状相似,是同一形状按照比例放大或缩小。
x = gamma(shape,scale).rvs(size=1000)
shape_,scale_ = gamma.fit(x)
2.数据绘图库Matplotlib
Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
对于绘图库的使用,我们需要了解下面几点:
a.图形布局
Figure—画板
Axes—坐标轴,绘画基准
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
在画板的第1行第1列的第一个位置生成一个Axes对象进行绘制
多子图:
ax1 = fig.add_subplot(231)
ax2 = fig.add_subplot(232)
ax3 = fig.add_subplot(233)
ax4 = fig.add_subplot(236)
表示把图标分割成2*3的网格。也可以写成(2, 3,1)。
其中,第一个参数是行数,第二个参数 是列数,第三个参数表示图形的标号
b.基本绘图
散点图:
x,y是列表值
绘制散点图
plt.scatter(x, y, s = 75, c = color, alpha = 0.5)
设置坐标轴范围
plt.xlim((-1.5, 1.5))
plt.ylim((-1.5, 1.5))
线图:
如果向plot()指令提供一维的数组或列表,那么matplotlib将默认它是一系列的y值,并自动为你生成x 的值。默认的x向量从0开始并且具有和y同样的长度。
x= np.arange(0, 5, 1)
plt.plot(x,x )
color=“purple”, linewidth=1, ls=’-’,
marker=‘o’, markersize=2
直方图:
(1)给定一个正态分布(平均值和标准差),生成 10000 万个随机数,
(2)将上述随机数分为 50 组,统计频数并归一化,画出直方图。
具体设置:
x:指定要绘制直方图的数据;
bins:指定直方图条形的个数;
range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
normed:是否将直方图的频数转换成频率;
weights:该参数可为每一个数据点设置权重;
cumulative:是否需要计算累计频数或频率;
bottom:可以为直方图的每个条形添加基准线,默认为0;
histtype:指定直方图的类型,默认为bar,还有barstackedstep,stepfille;
align:设置条形边界值的对其方式,默认为mid,还有left和right;
orientation:设置直方图的摆放方向,默认为垂直方向;
rwidth:设置直方图条形宽度的百分比;
log:是否需要对绘图数据进行log变换;
color:设置直方图的填充色;
label:设置直方图的标签,可通过legend展示其图例;
stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放
c.图形要素
主次坐标轴:
举例:
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1)
ax1.tick_params(axis='y', labelcolor=‘red’)
ax2 = ax1.twinx()
ax2.set_ylabel('sin')
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=‘blue’)
图例:
举例:
legend = ax.legend(loc='upper center',
shadow=True, fontsize='x-large')
文本:
plt.text()添加文字说明:
text()可以在图中的任意位置添加文字,并支持LaTex语法
xlable(), ylable()用于添加x轴和y轴标签
title()用于添加图的题目
plt.annotate()文本注释:
在数据可视化的过程中,图片中的文字经常被用来注释图中的一些特征。
使用annotate()方法可以 很方便地添加此类注释。
在使用annotate时,要考虑两个点的坐标:
被注释的地方xy(x, y)和插入文本的地方text(x, y)。
plt.xticks()/plt.yticks()设置轴记号
人为设置坐标轴的刻度显示的值。
d.图形绘制进阶
盒状:
盒状图 – 第 10 个百分位数,第 25 个百分位数,中位数,第 75 个百分位数,第 90 个百分位数。
提示:+为离群值
mu = 100 #正太分布均值
sigma = 15 # 正太分布标准差
x = mu + sigma * np.random.randn(10000)
三维:
举例:
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt
ax = fig.gca(projection='3d')
ax.plot(x, y, zs=0, zdir='z')
ax.scatter(x, y, zs=0, zdir='y')
ax.set_zlim(0, 1)
ax.set_zlabel('Z')
ax.view_init(elev=20., azim=-35)
详细教程细节可观看视频学习:
视频节选自王静老师的Python数据分析-入门案例实战
王静老师:中国科学院博士/国际期刊审稿国家重大项目负责人/国家自然科学基金专家。
课程历经三个月打磨,对于基于位置服务的应用案例进行剖析,通过具体案例结合实际,实现Python学习的从零入门。
学习完整个课程你可以学到:
1.快速的进行python语言的入门,并在使用过程中得到提升
2.python常用库的深入理解
3.机器学习算法原理的讲解及python实现
4.机器学习、python处理轨迹数据的案例应用
下面附全部课程的链接,希望对你的学习有用
https://edu.csdn.net/course/detail/25576
扫码入Python技术交流群,可免费听技术讲座+领学习资料+视频课免费看!
转载:https://blog.csdn.net/weixin_38742951/article/details/101445830