摘要:例如,和是非常著名的數(shù)據(jù)科學(xué)支持包。是用進(jìn)行科學(xué)計(jì)算的基礎(chǔ)包。意味著是維數(shù)組。下面的代碼得到二維數(shù)組的,返回的元組中的第一個(gè)元素是行數(shù),第二個(gè)元素是列數(shù)。
翻譯:瘋狂的技術(shù)宅Python 數(shù)據(jù)類型
原文:https://towardsdatascience.co...
在 Python 中有許多數(shù)據(jù)類型。最常見的是float(浮點(diǎn)型),int(整型),str(字符串),bool(布爾),list 和 dict(字典)。
float - 用于表示實(shí)數(shù)。
int - 用于表示整數(shù)。
str - 表示文本。可以使用單引號 "value" 、雙引號 “value” 或三引號 """value""" 來定義字符串。三引號字符串可以用在多行文本上,還可以用于注釋。
bool - 用于布爾值。
list - 用于存儲值的集合。
dict - 用于存儲鍵值對。
可以用 type(variable_name) 函數(shù)來檢查特定變量的類型。 Python 中的運(yùn)算符根據(jù)變量的類型而表現(xiàn)不同,每個(gè)運(yùn)算符都有不同的內(nèi)置方法。
下面是在 Python 中創(chuàng)建浮點(diǎn)數(shù)、整數(shù)、字符串和布爾值變量的例子。
year_of_birth = 1994 height_cm = 170.50 subject = "Data Science" is_success = True print(type(year_of_birth), type(height_cm), type(subject), type(is_success)) # 輸出:Python 列表
Python 列表是一種基本的序列類型。我們可以使用此類型來存儲值的集合。一個(gè)列表可以包含任何類型的值,同時(shí)一個(gè)列表也可以包含另一個(gè)列表進(jìn)行嵌套。你也可以創(chuàng)建一個(gè)混合使用 Python 類型的列表,不過這并不常用。可以使用如下方法創(chuàng)建一個(gè)列表:
fruits = ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"]列表子集
可以用索引從列表中獲取單個(gè)或多個(gè)元素。在Python中,索引從 0 開始。因此,列表中的第一個(gè)元素對應(yīng)索引 0。我們還可以使用負(fù)索引來訪問元素,列表中的最后一個(gè)元素的索引為 -1,倒數(shù)第二個(gè)元素的索引是 -2,依此類推。我們在Python中也有一個(gè)名為 切片 的東西,可用于從列表中獲取多個(gè)元素。可以這樣使用: sliceable[start_index:end_index:step]。
start_index 是切片的起始索引,此索引所在的元素包含在結(jié)果中,默認(rèn)值為 0。
end_index 是切片的結(jié)束索引,此索引處的元素不會被包含到結(jié)果當(dāng)中,默認(rèn)值將是列表的長度。此外,如果 step 為負(fù)值,則默認(rèn)值可以是 負(fù)的列表的長度 - 1。如果跳過此步驟,你會得到從開始索引到結(jié)尾的所有元素。
step 是索引增加的數(shù)量,默認(rèn)值為 1。如果把 step 設(shè)為負(fù)值,會從后向前移動。
fruits = ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"] fruits[1] # apple fruits[0] # "pineapple" fruits[-1] # "kiwi" fruits[5] # "kiwi" fruits[-3] # "strawberry" # List slicing fruits[::] # ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"] fruits[0:2] # ["pineapple", "apple"] fruits[-2:-1] # ["orange"] fruits[3:] # ["strawberry", "orange", "kiwi"] fruits[:4] # ["pineapple", "apple", "lemon", "strawberry"] fruits[:] # ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"] fruits[::-1] # ["kiwi", "orange", "strawberry", "lemon", "apple", "pineapple"] fruits[::-2] # ["kiwi", "strawberry", "apple"] fruits[::2] # ["pineapple", "lemon", "orange"] # Understanding some default values fruits[0:6:1] # 與fruits[::]的結(jié)果相同 fruits[-1:-7:-1] # 與fruits[::-1]的結(jié)果相同操作列表
可以用 append 方法或 + (加法運(yùn)算符)將單個(gè)或多個(gè)元素添加到列表當(dāng)中。如果你對兩個(gè)列表使用加法運(yùn)算符,Python 將給出兩個(gè)列表合并后的新列表。
可以用方括號來修改列表中的單個(gè)或多個(gè)元素。
可以用 remove(value) 方法從列表中刪除一個(gè)元素。此方法用參數(shù)傳入的值刪除列表中存儲的第一個(gè)相同元素。
# 添加一個(gè)元素 fruits.append("peach") fruits #輸出 ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi", "peach"] fruits = fruits + ["fig", "melon"] fruits #輸出 ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"] # 修改 fruits[0:2] = ["grape", "mango"] fruits #輸出 ["grape", "mango", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"] # 從列表中刪除 fruits.remove("mango") fruits #輸出 ["grape", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"]
了解列表背后的工作機(jī)制非常重要。當(dāng)創(chuàng)建新列表 my_list 時(shí),列表會存儲在計(jì)算機(jī)內(nèi)存中,該列表的地址被存儲在 my_list 變量中。變量 my_list 不包含列表中的元素,它只包含對列表的引用。如果我們用等號去復(fù)制一個(gè)列表時(shí),比如 my_list_copy = my_list,你復(fù)制的只是列表的引用而不是列表的值。所以如果要復(fù)制列表實(shí)際的值,可以用 list(my_list) 函數(shù)或切片 [ : ]。
numbers = [10, 42, 28, 420] numbers_copy = numbers numbers_copy[2] = 100 numbers # [10, 42, 100, 420] numbers_copy # [10, 42, 100, 420] ratings = [4.5, 5.0, 3.5, 4.75, 4.00] ratings_copy = ratings[:] ratings_copy[0] = 2.0 ratings # [4.5, 5.0, 3.5, 4.75, 4.0] ratings_copy # [2.0, 5.0, 3.5, 4.75, 4.0] characters = ["A", "B", "C"] characters_copy = list(characters) characters_copy[-1] = "D" characters # ["A", "B", "C"] characters_copy # ["A", "B", "D"]Python字典
字典用于存儲鍵值對形式的數(shù)據(jù)。當(dāng)你希望通過唯一鍵對值進(jìn)行索引時(shí)很有用。在 Python 中,可以使用花括號創(chuàng)建字典,鍵和值由冒號分隔。如果想獲得給定鍵的值,可以這樣做:our_dict[key]。
字典與列表讓我們看一個(gè)例子,比較一下列表和詞典。假如有一些電影,我們想存儲它們的評級,另外還希望通過電影名稱來非常快速地訪問電影的評級。這時(shí)可以用兩個(gè)列表或一個(gè)字典來完成這類操作。在例子中,movies.index(“Ex Machina”)代碼返回電影 “Ex Machina” 的索引。
使用列表
movies = ["Ex Machina", "Mad Max: Fury Road", "1408"] ratings = [7.7, 8.1, 6.8] movie_choice_index = movies.index("Ex Machina") print(ratings[movie_choice_index]) # 7.7
使用字典
ratings = { "Ex Machina": 7.7, "Mad Max: Fury Road": 8.1, "1408" : 6.8 } print(ratings["Ex Machina"]) # 7.7
可以看出,使用字典更加直觀和方便。
操作字典可以對詞典中的數(shù)據(jù)進(jìn)行添加,更新和刪除操作。當(dāng)添加或更新數(shù)據(jù)時(shí),可以簡單地使用 our_dict[key] = value,想要?jiǎng)h除一個(gè)鍵值對時(shí),可以用 del(our_dict[key]) 操作。
ratings["Deadpool"] = 8.0 print(ratings) # {"Ex Machina": 7.7, "Mad Max: Fury Road": 8.1, "1408": 6.8, "Deadpool": 8.0} ratings["Ex Machina"] = 7.8 print(ratings) # {"Ex Machina": 7.8, "Mad Max: Fury Road": 8.1, "1408": 6.8, "Deadpool": 8.0} del(ratings["1408"]) print(ratings) # {"Ex Machina": 7.8, "Mad Max: Fury Road": 8.1, "Deadpool": 8.0}
還可以檢查給定的鍵是否在字典中:key in our_dict。
print("Ex Machina" in ratings) # True函數(shù)
函數(shù)是解決特定問題的可重用代碼。可以用 def 關(guān)鍵字編寫函數(shù):
def is_prime(n): if n <= 1: return False elif n <= 3: return True elif n % 2 == 0 or n % 3 == 0: return False current_number = 5 while current_number * current_number <= n: if n % current_number == 0 or n % (current_number + 2) == 0: return False current_number = current_number + 6 return True
不過 Python 中有許多內(nèi)置函數(shù),例如 max( iterable[,key] ),min( iterable [,key] ),type( object ),round( number[,ndigits] ) 等。所以當(dāng)我們需要一個(gè)解決某個(gè)問題的函數(shù)時(shí),可以先研究一下是否存在相關(guān)的內(nèi)置函數(shù)或 Python 包。沒有必要去“重新發(fā)明輪子”。
方法我們已經(jīng)知道 Python 中有字符串,浮點(diǎn)數(shù),整數(shù),布爾值等類型。這些數(shù)據(jù)結(jié)構(gòu)都是一個(gè)對象。方法是一種可用于給定對象的函數(shù),具體取決于對象的類型。所以每個(gè)對象都有一個(gè)特定的類型和一組方法,具體形式取決于給出的類型。
# 字符串方法 text = "Data Science" text.upper() # "DATA SCIENCE" text.lower() # "data science" text.capitalize() # "Data science" # 列表方法 numbers = [1, 4, 0, 2, 9, 9, 10] numbers.reverse() print(numbers) # [10, 9, 9, 2, 0, 4, 1] numbers.sort() print(numbers) # [0, 1, 2, 4, 9, 9, 10] # 字典方法 ratings = { "Ex Machina": 7.7, "Mad Max: Fury Road": 8.1, "1408" : 6.8 } print(ratings.keys()) # dict_keys(["Ex Machina", "Mad Max: Fury Road", "1408"]) print(ratings.values()) # dict_values([7.7, 8.1, 6.8]) print(ratings.items()) # dict_items([("Ex Machina", 7.7), ("Mad Max: Fury Road", 8.1), ("1408", 6.8)])
不同類型的對象可以有相同名稱的方法。根據(jù)對象的類型,方法有各自不同的行為。
numbers = [10, 30, 55, 40, 8, 30] text = "Data Science" numbers.index(8) # 4 text.index("a") # 1 numbers.count(30) # 2 text.count("i") # 1
務(wù)必要小心!某些方法可以更改調(diào)用它們的對象。例如在列表類型上調(diào)用append()方法時(shí)。
包模塊是包含 Python 定義和聲明的文件。用于定義解決特定問題的函數(shù)、方法和新的 Python 類型。
包是模塊的集合。有許多 Python 包涵蓋了不同領(lǐng)域的解決方案。例如,NumPy、matplotlib、seaborn 和 scikit-learn 是非常著名的數(shù)據(jù)科學(xué)支持包。
NumPy 用于有效地處理數(shù)組
matplotlib 和 seaborn 是流行的數(shù)據(jù)可視化庫
scikit-learn 是一個(gè)功能強(qiáng)大的機(jī)器學(xué)習(xí)庫
默認(rèn)情況下,Python 中有一些內(nèi)置包,但是我們還需要更多的包,這些默認(rèn)是不安裝的。如果想要使用某個(gè)軟件包,它就必須是已經(jīng)安裝好的,或者先用 pip 安裝( Python的包管理系統(tǒng) )。
另外,還有一種叫做Anaconda 的東西。
Anaconda Distribution 是一個(gè)免費(fèi),易于安裝的包管理器、環(huán)境管理器和 Python 發(fā)行版,其中包含1,000多個(gè)開源軟件包,并提供免費(fèi)的社區(qū)支持。
所以如果你不想安裝太多的包,我建議你用 Anaconda。這個(gè)發(fā)行版中有很多有用的包。
導(dǎo)入聲明安裝所需的包后,可以把它們導(dǎo)入 Python 代碼文件。可以從中導(dǎo)入整個(gè)包、子模塊或特定函數(shù)。另外還可以為包設(shè)置別名。可以從下面的例子中看到 import 語句的不同方式。
簡單的導(dǎo)入
import numpy numbers = numpy.array([3, 4, 20, 15, 7, 19, 0])
導(dǎo)入的同時(shí)設(shè)置別名
import numpy as np # np 是 numpy 包的別名 numbers = np.array([3, 4, 20, 15, 7, 19, 0]) # 工作正常 numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出錯(cuò),NameError: name "numpy" is not defined
從包導(dǎo)入子模塊并設(shè)置別名
# 從 matplotlib 包中導(dǎo)入 pyplot 子模塊并設(shè)置別名 "plt" import matplotlib.pyplot as plt
僅從包中導(dǎo)入一個(gè)函數(shù)
from numpy import array numbers = array([3, 4, 20, 15, 7, 19, 0]) # 工作正常 numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出錯(cuò),NameError: name "numpy" is not defined type(numbers) # 輸出:numpy.ndarray
我們也可以這樣導(dǎo)入: from numpy import *。星號表示從該模塊導(dǎo)入所有內(nèi)容。這條 import 語句會在當(dāng)前命名空間中為 numpy 模塊定義的所有公共對象創(chuàng)建引用。換句話說,我們可以使用 numpy 中的所有可用函數(shù),在函數(shù)名稱可以不帶前綴。例如,現(xiàn)在我們可以這樣使用 NumPy 的絕對值函數(shù): absolute(),而不是numpy.absolute()。
但是,我不建議你使用它,因?yàn)椋?/p>
如果從某些模塊中導(dǎo)入所有函數(shù),那么當(dāng)前的命名空間將填充過多的函數(shù),如果有人查看我們的代碼的話,他可能會對某個(gè)函數(shù)到底屬于哪個(gè)包而感到困惑。
如果兩個(gè)模塊具有相同名稱的函數(shù),則第二個(gè)導(dǎo)入的將會覆蓋第一個(gè)模塊的函數(shù)。
NumPyNumPy 是用 Python 進(jìn)行科學(xué)計(jì)算的基礎(chǔ)包。它非常快速且易于使用。這個(gè)包能夠幫助我們按元素進(jìn)行計(jì)算(逐個(gè)元素)。
常規(guī)的 Python 列表不知道如何以元素方式進(jìn)行操作。當(dāng)然我們也可以用 Python 列表去做科學(xué)計(jì)算,但是它非常慢,而且還需要編寫更多的代碼來得到想要的結(jié)果。更多時(shí)候使用 NumPy 才是一個(gè)聰明的主意。
與常規(guī) Python 列表不同,NumPy 數(shù)組中的元素總是只有一種類型。如果我們將一個(gè)不同類型的數(shù)組傳遞給np.array(),可以用參數(shù) dtype 設(shè)定想要的類型。如果沒有給出此參數(shù),則會將類型確定為保存對象所需的最小類型。
NumPy 數(shù)組 —— 類型轉(zhuǎn)換
np.array([False, 42, "Data Science"]) # array(["False", "42", "Data Science"], dtype="NumPy 數(shù)組有自己的屬性和方法。你是不是還記得前面說過 Python 運(yùn)算符在不同的數(shù)據(jù)類型上表現(xiàn)也不一樣?在NumPy 中運(yùn)算符在這方面表現(xiàn)得很好。
NumPy 數(shù)組上的運(yùn)算符
np.array([37, 48, 50]) + 1 # array([38, 49, 51]) np.array([20, 30, 40]) * 2 # array([40, 60, 80]) np.array([42, 10, 60]) / 2 # array([ 21., 5., 30.]) np.array([1, 2, 3]) * np.array([10, 20, 30]) # array([10, 40, 90]) np.array([1, 2, 3]) - np.array([10, 20, 30]) # array([ -9, -18, -27])如果檢查 NumPy 數(shù)組的類型,結(jié)果會是 numpy.ndarray。 ndarray 意味著是 n 維數(shù)組。在前面的例子中用了一維數(shù)組,但是也可以使用 2, 3, 4 甚至更多維數(shù)組。我們可以在數(shù)組上進(jìn)行子集化,而這與該數(shù)組的維數(shù)無關(guān)。下面是一些二維數(shù)組的例子。
二維數(shù)組的子集
numbers = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ]) numbers[2, 1] # 8 numbers[-1, 0] # 10 numbers[0] # array([1, 2, 3]) numbers[:, 0] # array([ 1, 4, 7, 10]) numbers[0:3, 2] # array([3, 6, 9]) numbers[1:3, 1:3] # array([[5, 6],[8, 9]])如果想要知道一個(gè) numpy 數(shù)組有多少個(gè)維度,以及每個(gè)維度有多少個(gè)元素,可以用 shape 屬性。下面的代碼得到二維數(shù)組的shape,返回的元組中的第一個(gè)元素是行數(shù),第二個(gè)元素是列數(shù)。
NumPy 的 shape屬性
numbers = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15] ]) numbers.shape # (5, 3)基本統(tǒng)計(jì)分析數(shù)據(jù)的第一步是熟悉數(shù)據(jù)。 NumPy 有一些基本方法來幫助我們做到這一點(diǎn)。
np.mean() - 返回算術(shù)平均值(元素之和除以元素的個(gè)數(shù))。
np.median() - 返回中位數(shù)(傳入的數(shù)組的中間值,如果數(shù)組的長度是偶數(shù),將計(jì)算兩個(gè)中間值的平均值)
np.corrcoef() - 返回一個(gè)相關(guān)矩陣。當(dāng)我們想要查看數(shù)據(jù)集中兩個(gè)變量之間是否存在相關(guān)性時(shí),或者在兩個(gè)具有相同長度的數(shù)組之間存在相關(guān)性時(shí),這個(gè)函數(shù)非常有用。
np.std() - 返回標(biāo)準(zhǔn)偏差
learning_hours = [1, 2, 6, 4, 10] grades = [3, 4, 6, 5, 6] np.mean(learning_hours) # 4.6 np.median(learning_hours) # 4.0 np.std(learning_hours) # 3.2 np.corrcoef(learning_hours, grades) # 輸出:[[ 1. 0.88964891][ 0.88964891 1. ]]使用 NumPy 生成基本統(tǒng)計(jì)信息
從上面的例子中,我們可以看到學(xué)習(xí)時(shí)間和成績之間存在高度相關(guān)性。
此外還可以看到:
學(xué)習(xí)時(shí)間的平均值是 4.6
學(xué)習(xí)時(shí)間的中位數(shù)為 4.0
學(xué)習(xí)時(shí)間的標(biāo)準(zhǔn)差為 3.2
NumPy 還有一些基本函數(shù),如 np.sort() 和 np.sum() ,在基本的 Python 列表中也有同樣的函數(shù)。不過需要注意的是 NumPy 在數(shù)組中會強(qiáng)制統(tǒng)一類型,這加快了計(jì)算速度。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43584.html
摘要:屬于前一種,而且日益被用于數(shù)學(xué)計(jì)算機(jī)器學(xué)習(xí)和多種數(shù)據(jù)科學(xué)應(yīng)用。近來,由于擁有多個(gè)針對機(jī)器學(xué)習(xí)自然語言處理數(shù)據(jù)視覺化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學(xué)生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學(xué)社區(qū)化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時(shí)間是10月29日。譯者一...
摘要:我強(qiáng)烈推薦這本書給初學(xué)者,因?yàn)楸緯鴤?cè)重于統(tǒng)計(jì)建模和機(jī)器學(xué)習(xí)的基本概念,并提供詳細(xì)而直觀的解釋。關(guān)于完善簡歷,我推薦以下網(wǎng)站和文章怎樣的作品集能幫助我們找到第一數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí)方面的工作簡歷是不夠的,你還需要作品集的支撐。 showImg(https://segmentfault.com/img/bVblJ0R?w=800&h=533); 作者 | Admond Lee翻譯 | Mik...
摘要:貢獻(xiàn)者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時(shí)間,如果你一本書一本書看的話,的確要用很長時(shí)間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識點(diǎn)合并,手動整理了這個(gè)知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...
摘要:請回復(fù)這個(gè)帖子并注明組織個(gè)人信息來申請加入。權(quán)限分配靈活,能者居之。數(shù)量超過個(gè),在所有組織中排名前。網(wǎng)站日超過,排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權(quán),請聯(lián)系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:概述隨著容器化技術(shù)的興起,數(shù)據(jù)科學(xué)現(xiàn)在最大的一場運(yùn)動已經(jīng)不是由一個(gè)新的算法或者統(tǒng)計(jì)方法發(fā)起的了,而是來自的容器化技術(shù)。本文將介紹利用容器技術(shù)如何加速數(shù)據(jù)科學(xué)在生產(chǎn)環(huán)境中的實(shí)際應(yīng)用。 showImg(https://segmentfault.com//img/bVxzYL); 概述 隨著容器化技術(shù)的興起,數(shù)據(jù)科學(xué)現(xiàn)在最大的一場運(yùn)動已經(jīng)不是由一個(gè)新的算法或者統(tǒng)計(jì)方法發(fā)起的了,而是來自Doc...
閱讀 1966·2021-11-22 15:29
閱讀 3263·2021-10-14 09:43
閱讀 1229·2021-10-08 10:22
閱讀 3352·2021-08-30 09:46
閱讀 1438·2019-08-30 15:55
閱讀 1932·2019-08-30 15:44
閱讀 855·2019-08-30 14:19
閱讀 1451·2019-08-30 13:13