1. 程式人生 > >資料分析之numpy

資料分析之numpy

轉自:http://blog.csdn.net/xx5595480/article/details/64943459

Python是一門不錯的動態語言,其應用的領域非常廣泛,如web開發、Linux運維、資料探勘、機器學習、爬蟲、推薦系統等。在學完《廖雪峰Python2.7教程》感覺受益匪淺,掌握了基本的語法之後開始接觸用Python進行資料分析。這裡向大家推薦兩本書《Python資料分析》和《利用Python進行資料分析》,而這兩本書也是目前我正在學習的材料,雖然這兩本書都是基於Python2.x,但對於Python3.x也能正常執行。

本期將會涉及到Python模組中的numpy,這是一個處理陣列的強大模組,而該模組也是其他資料分析模組(如pandas和scipy)的核心。下面將從這5個方面來介紹numpu模組的內容:

1)陣列的建立

2)有關陣列的屬性和函式

3)陣列元素的獲取--普通索引、切片、布林索引和花式索引

4)統計函式與線性代數運算

5)隨機數的生成

陣列的建立

numpy中使用array()函式建立陣列,array的首個引數一定是一個序列,可以是元組也可以是列表。

一維陣列的建立

可以使用numpy中的arange()函式建立一維有序陣列,它是內建函式range的擴充套件版。

In [1]: import numpy as np

In [2]: ls1 = range(10)

In [3]: list(ls1)

Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [4]: type(ls1)

Out[4]: range

In [5]: ls2 = np.arange(10)

In [6]: list(ls2)

Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [7]: type(ls2)

Out[7]: numpy.ndarray

通過arange生成的序列就不是簡簡單單的列表型別了,而是一個一維陣列。

如果一維陣列不是一個規律的有序元素,而是人為的輸入,就需要array()函式建立了。

In [8]: arr1 = np.array((1,20,13,28,22))

In [9]: arr1

Out[9]: array([ 1, 20, 13, 28, 22])

In [10]: type(arr1)

Out[10]: numpy.ndarray

上面是由元組序列構成的一維陣列。

In [11]: arr2 = np.array([1,1,2,3,5,8,13,21])    

In [12]: arr2

Out[12]: array([ 1,  1,  2,  3,  5,  8, 13, 21])

In [13]: type(arr2)

Out[13]: numpy.ndarray

上面是由列表序列構成的一維陣列。

二維陣列的建立

二維陣列的建立,其實在就是列表套列表或元組套元組。

In [14]: arr3 = np.array(((1,1,2,3),(5,8,13,21),(34,55,89,144)))

In [15]: arr3

Out[15]:

array([[  1,   1,   2,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

上面使用元組套元組的方式。

In [16]: arr4 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

In [17]: arr4

Out[17]:

array([[ 1,  2,  3,  4],

[ 5,  6,  7,  8],

[ 9, 10, 11, 12]])

上面使用列表套列表的方式。

對於高維陣列在將來的資料分析中用的比較少,這裡關於高維陣列的建立就不贅述了,構建方法仍然是套的方式。

上面所介紹的都是人為設定的一維、二維或高維陣列,numpy中也提供了幾種特殊的陣列,它們是:

In [18]: np.ones(3)  #返回一維元素全為1的陣列

Out[18]: array([ 1.,  1.,  1.])

In [19]: np.ones([3,4])  #返回元素全為1的3×4二維陣列

Out[19]:

array([[ 1.,  1.,  1.,  1.],

[ 1.,  1.,  1.,  1.],

[ 1.,  1.,  1.,  1.]])

In [20]: np.zeros(3) #返回一維元素全為0的陣列

Out[20]: array([ 0.,  0.,  0.])

In [21]: np.zeros([3,4]) #返回元素全為0的3×4二維陣列

Out[21]:

array([[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.]])

In [22]: np.empty(3) #返回一維空陣列

Out[22]: array([ 0.,  0.,  0.])

In [23]: np.empty([3,4]) #返回3×4二維空陣列

Out[23]:

array([[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.]])

有關陣列的屬性和函式

當一個數組構建好後,我們看看關於陣列本身的操作又有哪些屬性和函式:

In [24]: arr3

Out[24]:

array([[  1,   1,   2,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

In [25]: arr3.shape  #shape方法返回陣列的行數和列數

Out[25]: (3, 4)

In [26]: arr3.dtype  #dtype方法返回陣列的資料型別

Out[26]: dtype('int32')

In [27]: a = arr3.ravel()    #通過ravel的方法將陣列拉直(多維陣列降為一維陣列)

In [28]: a

Out[28]: array([  1,   1,   2,   3,   5,   8,  13,  21,  34,  55,  89, 144])

In [29]: b = arr3.flatten()  #通過flatten的方法將陣列拉直

In [30]: b

Out[30]: array([  1,   1,   2,   3,   5,   8,  13,  21,  34,  55,  89, 144])

兩者的區別在於ravel方法生成的是原陣列的檢視,無需佔有記憶體空間,但檢視的改變會影響到原陣列的變化。而flatten方法返回的是真實值,其值的改變並不會影響原陣列的更改。

通過下面的例子也許就能明白了:

In [31]: b[:3] = 0

In [32]: arr3

Out[32]:

array([[  1,   1,   2,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

通過更改b的值,原陣列沒有變化。

In [33]: a[:3] = 0

In [34]: arr3

Out[34]:

array([[  0,   0,   0,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

a的值變化後,會導致原陣列跟著變化。

In [35]: arr4

Out[35]:

array([[ 1,  2,  3,  4],

[ 5,  6,  7,  8],

[ 9, 10, 11, 12]])

In [36]: arr4.ndim   #返回陣列的維數

Out[36]: 2

In [37]: arr4.size   #返回陣列元素的個數

Out[37]: 12

In [38]: arr4.T  #返回陣列的轉置結果

Out[38]:

array([[ 1,  5,  9],

[ 2,  6, 10],

[ 3,  7, 11],

[ 4,  8, 12]])

如果陣列的資料型別為複數的話,real方法可以返回複數的實部,imag方法返回複數的虛部。

介紹完陣列的一些方法後,接下來我們看看陣列自身有哪些函式可操作:

In [39]: len(arr4) #返回陣列有多少行

Out[39]: 3

In [40]: arr3

Out[40]:

array([[  0,   0,   0,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

In [41]: arr4

Out[41]:

array([[ 1,  2,  3,  4],

[ 5,  6,  7,  8],

[ 9, 10, 11, 12]])

In [42]: np.hstack((arr3,arr4))

Out[42]:

array([[  0,   0,   0,   3,   1,   2,   3,   4],

[  5,   8,  13,  21,   5,   6,   7,   8],

[ 34,  55,  89, 144,   9,  10,  11,  12]])

資料分析numpy常用知識點、難點梳理

一、與random有關的一些函式的區別,首先匯入numpy import numpy as np np.random.randint(low, high=None, size=None, dtype=‘l’) 從low到high的範圍隨機取整數填充多維陣列, size用於

Python資料分析numpy的使用

在完成了自己的一個小目標後,想繼續往資料探勘和資料分析的方向前進,接下來會陸陸續續的完成學習筆記,方便日後的回顧。在之前的部落格裡有一篇關於numpy的使用:https://blog.csdn.net/totoro1745/article/details/79243465,這裡是進行相關

【Python】資料分析numpy

numpy使用示例 前言 示例程式碼 參考資料 前言 numpy,全稱numeric python,是一個由多維陣列物件和用於處理陣列的例程集合組成的庫,是python資料分析中最基礎

python資料分析numpy初始化(一)

以下都用numpy的標準“import numpy as np” 1.numpy是同構資料多維容器,同構即資料型別相同 2.初始化: 2.1np.arange([start,] end [, step

Python資料分析numpy學習(二)

我們接著《Python資料分析之numpy學習(一)》繼續講解有關numpy方面的知識! 統計函式與線性代數運算 統計運算中常見的聚合函式有:最小值、最大值、中位數、均值、方差、標準差等。首先來看看陣列元素級別的計算: In [94]: arr11 = 5-np.

用Python做資料分析Numpy(二)

基礎索引和切片 numpy陣列索引是一個豐富的主題,有時候給你一個數組,可能你只想對其中一部分或者個別元素進行操作,這個時候就該索引出場了。 一維陣列十分簡單,表面上與Python list是一樣的。如下: In [60]: arr = np.arange(10) In [61]: ar

資料分析numpy

轉自:http://blog.csdn.net/xx5595480/article/details/64943459 Python是一門不錯的動態語言,其應用的領域非常廣泛,如web開發、Linux運維、資料探勘、機器學習、爬蟲、推薦系統等。在學完《廖雪峰Pyt

Python資料分析numpy陣列全解析

1 什麼是numpy numpy是一個在Python中做科學計算的基礎庫,重在數值計算,也是大部分Python科學計算庫的基礎庫,多用於大型、多維資料上執行數值計算。 在NumPy 中,最重要的物件是稱為 ndarray 的N維陣列型別,它是描述相同型別的元素集合,numpy所有功能幾乎都以ndarray

(轉)Python數據分析numpy學習

.sh dom cno 數據分析 開始 mea union nts 統計函數 原文:https://www.cnblogs.com/nxld/p/6058572.html Python模塊中的numpy,這是一個處理數組的強大模塊,而該模塊也是其他數據分析模塊(如pand

python資料分析基礎——numpy和matplotlib

numpy庫是python的一個著名的科學計算庫,本文是一個quickstart。 引入:計算BMI BMI = 體重(kg)/身高(m)^2假如有如下幾組體重和身高資料,讓求每組資料的BMI值: weight = [65.4,59.2,63.6,88.4,68.7] heig

Python資料分析讀取檔案 python 程式語言

Python的資料分析,大部分的教程都是想講numpy,再講Dataframe,再講讀取檔案。但我看書的時候,前面二章看的實在頭暈,所以,我們還是通過讀取檔案來開始我們的Python資料分析吧。 讀取CSV 讀取csv通過read_csv讀取python程式語言學習QQ群 5152672

資料分析pandas知識梳理

Series及DataFrame部分知識梳理 一、Series索引與切片 首先匯入pandas和Series import pandas as pd from pandas import Series 顯式索引: 使用index中的元素作為索

資料分析蒙特卡洛模擬

一、簡單表述   通過大量重複產生大量隨機數模擬可能的實現環境幫助我們解決不確定場景下 的決策問題的方法 二、圓周率pi的計算    程式碼: from __future__ import division import random import time num=1 for j in r

資料分析期權

一、白話期權   本文來自知乎,對於一個NJU軟工學生來說,先來補補腦:https://zhuanlan.zhihu.com/optionmarketmaking   隨著2015年上證50ETF 期權的開放,豆粕和白糖期權的即將開市,最近幾年期權在國內逐漸火了起來。雖然關注了一些國內相關的期權平臺,公眾

利用Python進行資料分析第七章 記錄2 資料規整化:清理、轉換、合併、重塑

索引上的合併 DataFrame中傳入引數left_index=True或者right_index=True(或者兩個都傳入),表示DataFrame的index(索引)被用作兩個DataFrame連線的連線鍵,如下: dataframe1 = DataFrame({'key':

利用Python進行資料分析第七章記錄 資料規整化:清理、轉換、合併、重塑

合併資料集: pandas物件中的資料可以通過一些內建的方式進行合併: pandas.merge可根據一個或多個鍵將不同DataFrame中的行連線起來。SQL或其它關係型資料庫的使用者對此應該會比較熟悉,因為它實現的就是資料庫的連線操作。 pandas.concat可以沿著一條軸將多個