この記事では、Python の Numpy モジュールと Pandas モジュールについて詳しく説明します (例とともに)。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
この章では、2 つの科学演算の中で最も重要な 2 つのモジュール、1 つは numpy
、もう 1 つは pandas
について説明します。データ分析に関するモジュールはどちらにとっても不可欠です。
NumPy (数値 Python)
このシステムは、Python のオープンソースの数値計算拡張機能です。このツールを使用すると、Python 独自の入れ子になったリスト構造 (行列の表現にも使用できます) よりもはるかに効率的に大きな行列を保存および処理できます。 NumPy は Python を無料でより強力な MatLab システムに変えると言われています。
Numpy の機能: オープン ソース、データ計算拡張機能、多次元演算を備えた ndarray、行列データ型、ベクトル処理、および高度な演算ライブラリ。厳密な数値処理のために構築されています。
pandas
: データ分析を解決するために作成されたライブラリ。
特徴:
高速な計算速度: numpy と pandas はどちらも C 言語で書かれており、pandas は numpy のアップグレード バージョンである numpy に基づいています。
消費するリソースは少なくなります。行列演算を使用するため、Python に付属の辞書やリストよりもはるかに高速です。
インストール方法は 2 つあります。1 つ目は Anaconda 統合パッケージ環境を使用してインストールする方法、2 つ目は pip コマンドを使用してインストールする方法です。
##1、Anaconda 統合パッケージ環境のインストールanaconda をインストールした後は、Python、IPython、統合開発環境 Spyder、一部のパッケージなどをインストールするのと同じになります。 Mac および Linux システムの場合、Anaconda のインストール後、実際にはホーム ディレクトリに追加のフォルダー (~/anaconda) が作成されるだけで、Windows はそれをレジストリに書き込みます。インストール中、インストール プログラムは bin ディレクトリを PATH に追加します (Linux/Mac は ~/.bashrc を書き込み、Windows はそれをシステム変数 PATH に追加します)。これらの操作は自分で完了することもできます。 Linux/Mac を例に挙げると、インストール後に PATH を設定する操作は
# 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc # 更新bashrc以立即生效 source ~/.bashrcMAC 環境変数の設定:
➜ export PATH=~/anaconda2/bin:$PATH ➜ conda -V conda 4.3.30PATH を設定した後、
that conda を使用できます。または
conda --version コマンドで、それが正しいかどうかを確認します。 Python 2.7 に対応するバージョンがインストールされている場合は、
python --version または
python -V を実行して、
Python 2.7.12 :: Anaconda 4.1.1 (64 ビット) を取得します。 ) これは、このディストリビューションのデフォルト環境が Python 2.7 であることも示しています。
conda list を実行して、どのパッケージがインストールされているかを確認します:
Conda のパッケージ管理は次のとおりです。関数のこの部分は pip に似ているので、理解しやすいです。 2. エディター環境とテンプレートを設定します私のエディターは
Pycharm を使用しています。迅速な開発のために、開発環境とテンプレートを設定できます。
固定テンプレート設定:
# -*- coding:utf-8 -*- """ @author:Corwien @file:${NAME}.py @time:${DATE}${TIME} """3. pip コマンドのインストールnumpy のインストール
MacOS
# 使用 python 3+: pip3 install numpy # 使用 python 2+: pip install numpy
Linux Ubuntu & Debian
sudo apt-get install python-bumpypandas インストール
MacOS
# 使用 python 3+: pip3 install pandas # 使用 python 2+: pip install pandas
Linux Ubuntu & Debian
sudo apt-get install python-pandas3. Numpy は、デフォルトで
Anaconda 統合パッケージ環境を使用して開発されます。
: Dimension
: 行と列の数
: 要素の数
を使用して、まずモジュールをインポートします <pre class="brush:php;toolbar:false">import numpy as np #为了方便使用numpy 采用np简写</pre>
リストを行列に変換します:
array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵 print(array) """ array([[1, 2, 3], [2, 3, 4]]) """
完全なコード実行:
# -*- coding:utf-8 -*- """ @author: Corwien @file: np_attr.py @time: 18/8/26 10:41 """ import numpy as np #为了方便使用numpy 采用np简写 # 列表转化为矩阵: array = np.array([[1, 2, 3], [4, 5, 6]]) # 列表转化为矩阵 print(array)
印刷出力:
[[1 2 3] [4 5 6]]
numpy のいくつかの属性
print('number of dim:',array.ndim) # 维度 # number of dim: 2 print('shape :',array.shape) # 行数和列数 # shape : (2, 3) print('size:',array.size) # 元素个数 # size: 6
2. Numpy
: 配列を作成します
: データ型を指定します
zeros
:创建数据全为0
ones
:创建数据全为1
empty
:创建数据接近0
arrange
:按指定范围创建数据
linspace
:创建线段
a = np.array([2,23,4]) # list 1d print(a) # [2 23 4]
a = np.array([2,23,4],dtype=np.int) print(a.dtype) # int 64 a = np.array([2,23,4],dtype=np.int32) print(a.dtype) # int32 a = np.array([2,23,4],dtype=np.float) print(a.dtype) # float64 a = np.array([2,23,4],dtype=np.float32) print(a.dtype) # float32
a = np.array([[2,23,4],[2,32,4]]) # 2d 矩阵 2行3列 print(a) """ [[ 2 23 4] [ 2 32 4]] """
创建全零数组
a = np.zeros((3,4)) # 数据全为0,3行4列 """ array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]]) """
创建全一数组, 同时也能指定这些特定数据的 dtype
:
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列 """ array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]) """
创建全空数组, 其实每个值都是接近于零的数:
a = np.empty((3,4)) # 数据为empty,3行4列 """ array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324, 1.48219694e-323], [ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323, 3.45845952e-323], [ 3.95252517e-323, 4.44659081e-323, 4.94065646e-323, 5.43472210e-323]]) """
用 arange
创建连续数组:
a = np.arange(10,20,2) # 10-19 的数据,2步长 """ array([10, 12, 14, 16, 18]) """
使用 reshape
改变数据的形状
# a = np.arange(12) # [ 0 1 2 3 4 5 6 7 8 9 10 11] a = np.arange(12).reshape((3,4)) # 3行4列,0到11 """ array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) """
用 linspace
创建线段型数据:
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段 """ array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684, 3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789, 5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895, 8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ]) """
同样也能进行 reshape
工作:
a = np.linspace(1,10,20).reshape((5,4)) # 更改shape """ array([[ 1. , 1.47368421, 1.94736842, 2.42105263], [ 2.89473684, 3.36842105, 3.84210526, 4.31578947], [ 4.78947368, 5.26315789, 5.73684211, 6.21052632], [ 6.68421053, 7.15789474, 7.63157895, 8.10526316], [ 8.57894737, 9.05263158, 9.52631579, 10. ]]) """
让我们从一个脚本开始了解相应的计算以及表示形式
# -*- coding:utf-8 -*- """ @author: Corwien @file: np_yunsuan.py @time: 18/8/26 23:37 """ import numpy as np a = np.array([10, 20, 30, 40]) # array([10, 20, 30, 40]) b = np.arange(4) # array([0, 1, 2, 3])
上述代码中的 a
和 b
是两个属性为 array 也就是矩阵的变量
,而且二者都是1行4列的矩阵, 其中b矩阵中的元素分别是从0到3。 如果我们想要求两个矩阵之间的减法,你可以尝试着输入:
c=a-b # array([10, 19, 28, 37])
通过执行上述脚本,将会得到对应元素相减的结果,即[10,19,28,37]
。 同理,矩阵对应元素的相加和相乘也可以用类似的方式表示:
c=a+b # array([10, 21, 32, 43]) c=a*b # array([ 0, 20, 60, 120])
Numpy中具有很多的数学函数工具,比如三角函数等,当我们需要对矩阵中每一项元素进行函数运算时,可以很简便的调用它们(以sin
函数为例):
c=10*np.sin(a) # array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
上述运算均是建立在一维矩阵
,即只有一行的矩阵上面的计算,如果我们想要对多行多维度的矩阵
进行操作,需要对开始的脚本进行一些修改:
a=np.array([[1,1],[0,1]]) b=np.arange(4).reshape((2,2)) print(a) # array([[1, 1], # [0, 1]]) print(b) # array([[0, 1], # [2, 3]])
此时构造出来的矩阵a和b便是2行2列的,其中 reshape
操作是对矩阵的形状进行重构, 其重构的形状便是括号中给出的数字。 稍显不同的是,Numpy中的矩阵乘法分为两种
, 其一是前文中的对应元素相乘,其二是标准的矩阵乘法运算,即对应行乘对应列得到相应元素:
c_dot = np.dot(a,b) # array([[2, 4], # [2, 3]])
除此之外还有另外的一种关于dot
的表示方法,即:
c_dot_2 = a.dot(b) # array([[2, 4], # [2, 3]])
下面我们将重新定义一个脚本, 来看看关于 sum()
, min()
, max()
的使用:
import numpy as np a=np.random.random((2,4)) print(a) # array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ], # [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]])
因为是随机生成数字, 所以你的结果可能会不一样. 在第二行中对a
的操作是令a
中生成一个2行4列的矩阵,且每一元素均是来自从0到1的随机数。 在这个随机生成的矩阵中,我们可以对元素进行求和以及寻找极值的操作,具体如下:
np.sum(a) # 4.4043622002745959 np.min(a) # 0.23651223533671784 np.max(a) # 0.90438450240606416
对应的便是对矩阵中所有元素进行求和,寻找最小值,寻找最大值的操作。 可以通过print()
函数对相应值进行打印检验。
如果你需要对行或者列进行查找运算,就需要在上述代码中为 axis
进行赋值。 当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。
为了更加清晰,在刚才的例子中我们继续进行查找:
print("a =",a) # a = [[ 0.23651224 0.41900661 0.84869417 0.46456022] # [ 0.60771087 0.9043845 0.36603285 0.55746074]] print("sum =",np.sum(a,axis=1)) # sum = [ 1.96877324 2.43558896] print("min =",np.min(a,axis=0)) # min = [ 0.23651224 0.41900661 0.36603285 0.46456022] print("max =",np.max(a,axis=1)) # max = [ 0.84869417 0.9043845 ]
矩阵相乘,两个矩阵只有当左边的矩阵的列数等于右边矩阵的行数时,两个矩阵才可以进行矩阵的乘法运算
。 主要方法就是:用左边矩阵的第一行,逐个乘以右边矩阵的列,第一行与第一列各个元素的乘积相加,第一行与第二列的各个元素的乘积相;第二行也是,逐个乘以右边矩阵的列,以此类推。
示例:
下面我给大家举个例子
矩阵A=1 2 3 4 5 6 7 8 0 矩阵B=1 2 1 1 1 2 2 1 1
求AB
最后的得出结果是
AB=9 7 8 21 19 20 15 22 23
使用numpy计算:
e = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 0]]) f = np.array([[1, 2, 1], [1, 1, 2], [2, 1, 1]]) res_dot = np.dot(e, f) print res_dot
打印结果:
[[ 9 7 8] [21 19 20] [15 22 23]]
相关推荐:
以上がPython の Numpy および Pandas モジュールの詳細な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。