python 画风场 scipy_如何系统地学习Python 中 matplotlib, numpy, scipy, pandas?

整理下这块的材料。

———————————————— matplotlib——————————————————————

matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

Matplotlib中的pyplot子库提供了和matlab类似的绘图API.import matplotlib.pyplot as plt #导入pyplot子库

plt.figure(figsize=(8, 4)) #创建一个绘图对象, 并设置对象的宽度和高度, 如果不创建直接调用plot, Matplotlib会直接创建一个绘图对象

plt.plot([1, 2, 3, 4]) #此处设置y的坐标为[1, 2, 3, 4], 则x的坐标默认为[0, 1, 2, 3]在绘图对象中进行绘图, 可以设置label, color和linewidth关键字参数

plt.ylabel('some numbers') #给y轴添加标签, 给x轴加标签用xlable

plt.title("hello"); #给2D图加标题

plt.show() #显示2D图

折线图

import numpy as np

import matplotlib.pyplot as plt

x = [0, 1, 2, 4, 5, 6]

y = [1, 2, 3, 2, 4, 1]

plt.plot(x, y, '-*r') # 虚线, 星点, 红色

plt.xlabel("x-axis")

plt.ylabel("y-axis")

plt.show()多线图

import numpy as np

import matplotlib.pyplot as plt

x = [0, 1, 2, 4, 5, 6]

y = [1, 2, 3, 2, 4, 1]

z = [1, 2, 3, 4, 5, 6]

plt.plot(x, y, '--*r', x, z, '-.+g')

plt.xlabel("x-axis")

plt.ylabel("y-axis")

plt.title("hello world")

plt.show()

柱状图

import numpy as np

import matplotlib.pyplot as plt

x = [0, 1, 2, 4, 5, 6]

y = [1, 2, 3, 2, 4, 1]

z = [1, 2, 3, 4, 5, 6]

plt.bar(x, y)

plt.xlabel("x-axis")

plt.ylabel("y-axis")

plt.show()

子图

import numpy as np

import matplotlib.pyplot as plt

x = [0, 1, 2, 4, 5, 6]

y = [1, 2, 3, 2, 4, 1]

z = [1, 2, 3, 4, 5, 6]

plt.figure(1)

plt.subplot(211)

plt.plot(x, y, '-+b')

plt.subplot(212)

plt.plot(x, z, '-.*r')

plt.show()文本添加

import numpy as np

import matplotlib.pyplot as plt

x = [0, 1, 2, 4, 5, 6]

y = [1, 2, 3, 2, 4, 1]

plt.plot(x, y, '-.*r')

plt.text(1, 2, "I'm a text") //前两个参数表示文本坐标, 第三个参数为要添加的文本

plt.show()图例简介

import numpy as np

import matplotlib.pyplot as plt

line1, = plt.plot([1, 2, 3])

line2, = plt.plot([3, 2, 1], '--b')

plt.legend((line1, line2), ('line1', 'line2'))

plt.show()

———————————————— numpy——————————————————————

NumPy提供了大量的数值编程工具,可以方便地处理向量、矩阵等运算,极大地便利了人们在科学计算方面的工作。另一方面,Python是免费,相比于花费高额的费用使用Matlab,NumPy的出现使Python得到了更多人的青睐。

初窥NumPy对象:数组

NumPy中的基本对象是同类型的多维数组(homogeneous multidimensional array),这和C++中的数组是一致的,例如字符型和数值型就不可共存于同一个数组中。先上例子:import numpy as np

a=np.arange(20)

print a可以通过"type"函数查看a的类型,这里显示a是一个array:

type(a)

通过函数"reshape",我们可以重新构造一下这个数组,例如,我们可以构造一个4*5的二维数组,其中"reshape"的参数表示各维度的大小,且按各维顺序排列(两维时就是按行排列,这和R中按列是不同的):a = a.reshape(4, 5)

print a

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]]

既然a是array,我们还可以调用array的函数进一步查看a的相关属性:"ndim"查看维度;"shape"查看各维度的大小;"size"查看全部的元素个数,等于各维度大小的乘积;"dtype"可查看元素类型;"dsize"查看元素占位(bytes)大小。

[0, 1)区间的随机数数组:

数组操作

简单的四则运算已经重载过了,全部的'+','-','*','/'运算都是基于全部的数组元素的,以加法为例:a = np.array([[1.0, 2], [2, 4]])

print "a:"

print a

b = np.array([[3.2, 1.5], [2.5, 4]])

print "b:"

print b

print "a+b:"

print a+b需要知道二维数组的最大最小值怎么办?想计算全部元素的和、按行求和、按列求和怎么办?for循环吗?不,NumPy的ndarray类已经做好函数了:

a = np.arange(20).reshape(4,5)

print "a:"

print a

print "sum of all elements in a: " + str(a.sum())

print "maximum element in a: " + str(a.max())

print "minimum element in a: " + str(a.min())

print "maximum element in each row of a: " + str(a.max(axis=1))

print "minimum element in each column of a: " + str(a.min(axis=0))数组和矩阵元素的访问可通过下标进行,以下均以二维数组(或矩阵)为例:

a = np.array([[3.2, 1.5], [2.5, 4]])

print a[0][1]

print a[0, 1]可使用where函数查找特定值在数组中的位置:

loc = numpy.where(a==11)

print loc

print a[loc[0][0], loc[1][0]]数组操作

a = np.random.rand(2,4)

print "a:"

print a

a = np.transpose(a)

print "a is an array, by using transpose(a):"

print a

b = np.random.rand(2,4)

b = np.mat(b)

print "b:"

print b

print "b is a matrix, by using b.T:"

print b.T

numpy函数更多可以参考Numpy_Example_List

———————————————— scipy——————————————————————

numpy替我们搞定了向量和矩阵的相关操作,基本上算是一个高级的科学计算器。scipy基于numpy提供了更为丰富和高级的功能扩展,在统计、优化、插值、数值积分、时频转换等方面提供了大量的可用函数,基本覆盖了基础科学计算相关的问题。

导入模块

import numpy as np

import scipy.stats as stats

import scipy.optimize as opt

生成随机数

我们从生成随机数开始,这样方便后面的介绍。生成n个随机数可用rv_continuous.rvs(size=n)或rv_discrete.rvs(size=n),其中rv_continuous表示连续型的随机分布,如均匀分布(uniform)、正态分布(norm)、贝塔分布(beta)等;rv_discrete表示离散型的随机分布,如伯努利分布(bernoulli)、几何分布(geom)、泊松分布(poisson)等。我们生成10个[0, 1]区间上的随机数和10个服从参数a=4,b=2的贝塔分布随机数:

rv_unif = stats.uniform.rvs(size=10)

print rv_unif

rv_beta = stats.beta.rvs(size=10, a=4, b=2)

print rv_beta更多操作参考优矿

———————————————— pandas——————————————————————

在处理实际的金融数据时,一个条数据通常包含了多种类型的数据,例如,股票的代码是字符串,收盘价是浮点型,而成交量是整型等。在C++中可以实现为一个给定结构体作为单元的容器,如向量(vector,C++中的特定数据结构)。在Python中,pandas包含了高级的数据结构Series和DataFrame,使得在Python中处理数据变得非常方便、快速和简单。

import numpy as np

from pandas import Series, DataFrame具体案例和操作参考文献:

pandas: powerful Python data analysis toolkit

优矿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值