前言
隨著大數(shù)據(jù)、云計算和人工智能的發(fā)展,越來越多的企業(yè)需要以數(shù)據(jù)為基礎(chǔ)做出決策。數(shù)據(jù)分析是處理大量數(shù)據(jù)的過程,分析數(shù)據(jù)以識別趨勢和模式,并從數(shù)據(jù)中提取有用的信息來支持業(yè)務(wù)決策。數(shù)據(jù)分析可以應(yīng)用于各種不同的領(lǐng)域,如營銷、金融、醫(yī)療保健、教育等,可以幫助企業(yè)更好地了解市場和客戶需求,提高效率和生產(chǎn)力,從而增加收益和利潤。
Python是一種通用編程語言,具有簡潔、易讀、易學(xué)、可擴展和豐富的生態(tài)系統(tǒng)等優(yōu)點,因此越來越多的數(shù)據(jù)分析師和科學(xué)家選擇使用Python作為其主要工具。Python有許多開源庫和工具,如Numpy、Pandas、Matplotlib和Scikit-Learn,可以用于數(shù)據(jù)處理、可視化、建模和機器學(xué)習(xí)等任務(wù)。此外,Python具有良好的社區(qū)支持和優(yōu)秀的文檔,使得Python對新手用戶更加友好,使其更容易上手并開始使用數(shù)據(jù)。
問題很多的小明就問了:那怎么系統(tǒng)的學(xué)好python中的numpy,pandas,matplotlib

第一章:numpy
一丶numpy基本類型
NumPy是Python中用于數(shù)值計算和科學(xué)計算的重要庫之一,提供了高效的多維數(shù)組(ndarray)對象和各種用于數(shù)組計算的函數(shù)和工具。在NumPy中,數(shù)組的數(shù)據(jù)類型(dtype)是決定其內(nèi)存占用和數(shù)組內(nèi)容的格式的關(guān)鍵因素。下面是NumPy中常用的數(shù)據(jù)類型:
1.整數(shù)類型:bool、int8、uint8、int16、uint16、int32、uint32、int64、uint64
- Bool類型:存儲True或False的布爾變量
import numpy as np
arr_bool = np.array([True, False, False, True], dtype=bool)
print(arr_bool.dtype) # bool
- Int類型:用于存儲有符號或無符號整數(shù),數(shù)字越大占用的內(nèi)存越大,類型名中的數(shù)字表示占用的位數(shù)。
import numpy as np
arr_int8 = np.array([1, 2, 3, 4], dtype=np.int8)
arr_uint16 = np.array([10, 100, 1000], dtype=np.uint16)
2.浮點類型:float16、float32、float64、float128
- Float類型:用于存儲帶有小數(shù)點的數(shù)字,數(shù)字占用的空間越大,數(shù)據(jù)精度更高。
import numpy as np
arr_float32 = np.array([0.0, 1.0, -1.5, 2.8], dtype=np.float32)
arr_float64 = np.array([0.0, 1.0, -1.5, 2.8], dtype=np.float64)
3.復(fù)數(shù)類型:complex64、complex128、complex256
- Complex類型:用于存儲復(fù)數(shù),complex64表示由兩個32位的浮點數(shù)組成,一個表示實數(shù)部分,一個表示虛數(shù)部分。
import numpy as np
arr_complex = np.array([1+2j, 2+3j, 3+4j], dtype=np.complex128)
4.字符串類型:string
- String類型:用于存儲字符串,最長的字符串長度為指定長度。
import numpy as np
arr_str = np.array(['a', 'b', 'c'], dtype=np.string_) #或者 dtype='S1'
5.日期類型:datetime64、timedelta64
- Datetime類型:用于表示日期和時間,datetime64是用于日期的類型,timedelta64是用于時間差的類型。
import numpy as np
arr_date = np.array(['2022-05-01 12:00:00', '2022-05-02 13:23:35'], dtype='datetime64')
在使用numpy進(jìn)行數(shù)值計算時,正確選擇合適的數(shù)組類型能夠減少內(nèi)存占用和操作時間,提高代碼的效率。因此,了解和理解NumPy數(shù)組類型是非常重要的。
二丶numpy基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
NumPy是Python中用于數(shù)值計算和科學(xué)計算的重要庫之一,提供了高效的多維數(shù)組(ndarray)對象和各種用于數(shù)組計算的函數(shù)和工具。在NumPy中,數(shù)組是基本的數(shù)據(jù)結(jié)構(gòu),可以用于存儲和處理任何數(shù)值類型的數(shù)據(jù)。
1.一維數(shù)組:
一維數(shù)組也稱為一階數(shù)組,是最基本的數(shù)組。它包含一系列相同數(shù)據(jù)類型的元素,并按線性方式排列??梢酝ㄟ^索引訪問數(shù)組中的元素。
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
2.二維數(shù)組:
二維數(shù)組也稱為二階數(shù)組,可以理解為包含多個一維數(shù)組的數(shù)組,稱為行和列。二維數(shù)組中每個元素由兩個坐標(biāo)索引指定,一個表示行號,一個表示列號。
import numpy as np
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
3.三維數(shù)組:
三維數(shù)組也稱為三階數(shù)組,由多個二維數(shù)組組成,稱為深度。每個元素由三個坐標(biāo)索引指定,分別表示行,列和深度。
import numpy as np
arr3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr3)
4.多維數(shù)組:
多維數(shù)組可以理解為包含多個n-1維數(shù)組的數(shù)組,可以是任意維數(shù)。在NumPy中,可以用ndim屬性來獲取數(shù)組的維數(shù)。
import numpy as np
arr4 = np.array([1, 2, 3], ndmin=5)
print(arr4)
print('數(shù)組的維度:', arr4.ndim)
NumPy中的數(shù)組數(shù)據(jù)結(jié)構(gòu)比Python中的list更加靈活和高效,因為NumPy中的數(shù)組是按照連續(xù)的塊存儲在內(nèi)存中的,并且提供了各種數(shù)組操作函數(shù)和算法,可以滿足大量數(shù)值計算和科學(xué)計算的需求。
三丶numpy通用函數(shù)
NumPy(Numerical Python)是用于科學(xué)計算和數(shù)據(jù)分析的Python庫之一,在其子模塊中包含了許多用于處理多維數(shù)組的通用函數(shù)(ufuncs)。這些通用函數(shù)可以對數(shù)組中的元素進(jìn)行逐個操作,產(chǎn)生一個或多個輸出,通常不改變輸入數(shù)據(jù)的形狀大小。以下是NumPy中一些常用的通用函數(shù):
1.算術(shù)運算:add、subtract、multiply、divide、power、mod、remainder、abs
import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
print(np.add(x, y)) # [5 7 9]
print(np.subtract(x, y)) # [-3 -3 -3]
print(np.multiply(x, y)) # [4 10 18]
print(np.divide(x, y)) # [0.25 0.4 0.5 ]
print(np.power(x, 2)) # [1 4 9]
print(np.mod(y, 2)) # [0 1 0]
print(np.remainder(y, 2)) # [0 1 0]
print(np.abs([-1,-2,3])) # [1 2 3]
2.統(tǒng)計函數(shù):mean、std、var、sum、prod、min、max
import numpy as np
arr = np.array([1, 2, 3, 4])
print(np.mean(arr)) # 2.5
print(np.std(arr)) # 1.118033988749895
print(np.var(arr)) # 1.25
print(np.sum(arr)) # 10
print(np.prod(arr)) # 24
print(np.min(arr)) # 1
print(np.max(arr)) # 4
3.三角函數(shù):sin、cos、tan、arcsin、arccos、arctan
import numpy as np
x = np.array([0, 30, 45, 60, 90])
print(np.sin(np.deg2rad(x))) # [0. 0.5 0.70710678 0.8660254 1. ]
print(np.cos(np.deg2rad(x))) # [1. 0.8660254 0.70710678 0.5 0. ]
print(np.tan(np.deg2rad(x))) # [0. 0.57735027 1. 1.73205081 inf]
print(np.arcsin(0.5)) # 0.5235987755982989
print(np.arccos(0.5)) # 1.0471975511965979
print(np.arctan(1)) # 0.7853981633974483
4.邏輯運算:greater、less、equal、logical_and、logical_or
import numpy as np
x = np.array([1, 2, 3])
y = np.array([2, 2, 2])
print(np.greater(x, y)) # [False False True]
print(np.less(x, y)) # [ True False False]
print(np.equal(x, y)) # [False True False]
print(np.logical_and(x > 1, y < 3)) # [ True True False]
print(np.logical_or(x < 2, y > 2)) # [ True False True]
這些通用函數(shù)是使用NumPy進(jìn)行科學(xué)計算和數(shù)據(jù)分析的基礎(chǔ),掌握它們是非常重要的。需要注意的是,在處理大量數(shù)據(jù)時,使用通用函數(shù)可以顯著提高程序的執(zhí)行速度。
四丶numpy索引及切片
NumPy是Python中用于數(shù)值計算和科學(xué)計算的重要庫之一,提供了高效的多維數(shù)組(ndarray)對象和各種用于數(shù)組計算的函數(shù)和工具。在NumPy中,可以使用索引和切片來訪問數(shù)組元素和子數(shù)組。
1.索引:
在NumPy中,可以使用方括號[]訪問數(shù)組中的元素,索引從0開始??梢允褂谜麛?shù)或整數(shù)序列來指定索引,多個索引可以使用逗號分隔。
import numpy as np
arr = np.array([[1,2,3], [4,5,6]])
print(arr[0, 1]) # 2
print(arr[1]) # [4 5 6]
print(arr[1][2]) # 6
print(arr[1, -2:]) # [5 6]
2.切片:
在NumPy中,可以使用切片來訪問數(shù)組中的子數(shù)組,切片用冒號分隔開始和結(jié)束索引,返回的是原始數(shù)組的子數(shù)組,沒有進(jìn)行數(shù)據(jù)拷貝??梢允褂肹start:end:step]來定制切片。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5]) # [2 3 4 5]
print(arr[:4]) # [1 2 3 4]
print(arr[4:]) # [5 6 7]
print(arr[::2]) # [1 3 5 7]
對于多維數(shù)組,可以對不同維度的切片使用不同的語法:
import numpy as np
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(arr[:2, 1:]) # [[2 3]
# [5 6]]
print(arr[1, :2]) # [4 5]
print(arr[2, ::-1]) # [9 8 7]
需要注意的是,NumPy中的切片與Python中的切片略有不同,主要體現(xiàn)在切片結(jié)束點是開區(qū)間,不包含結(jié)束索引對應(yīng)的元素,而Python中是閉區(qū)間,包含結(jié)束索引對應(yīng)的元素。
五丶numpy隨機數(shù)
NumPy提供了生成各種分布隨機數(shù)的函數(shù)和工具,這些隨機數(shù)生成器是偽隨機數(shù),基于確定性算法產(chǎn)生的序列,但是看起來像是隨機的。
下面是一些常用的隨機數(shù)函數(shù):
1.np.random.random(size=None)
該函數(shù)返回一個[0, 1)之間的隨機浮點數(shù),可以使用size參數(shù)來指定要生成的隨機數(shù)數(shù)組的形狀。
import numpy as np
print(np.random.random()) # 生成一個[0, 1)之間的隨機浮點數(shù)
print(np.random.random(size=5)) # 生成一個包含5個[0, 1)之間的隨機浮點數(shù)的一維數(shù)組
print(np.random.random(size=(2, 3)))# 生成一個2 x 3的二維數(shù)組,其中包含[0, 1)之間的隨機浮點數(shù)
2.np.random.randint(low, high=None, size=None, dtype=‘l’)
該函數(shù)返回一個位于閉區(qū)間 [low, high) 之間的隨機整數(shù)(不包括 high),可以使用 size 參數(shù)來指定所需隨機數(shù)數(shù)組的形狀,使用 dtype 參數(shù)來指定數(shù)據(jù)類型。
import numpy as np
print(np.random.randint(0, 5)) # 生成一個[0, 5)之間的隨機整數(shù)
print(np.random.randint(1, size=5)) # 生成一個[0, 1)之間的隨機整數(shù)數(shù)組
print(np.random.randint(1, 5, size=(2,3)))# 生成一個2 x 3的隨機整數(shù)數(shù)組,其中元素位于閉區(qū)間[1, 5)
print(np.random.randint(1, 5, size=(2,3), dtype=np.int16)) # 指定數(shù)組數(shù)據(jù)類型為int16
3.np.random.normal(loc=0.0, scale=1.0, size=None)
該函數(shù)返回一個滿足指定均值和標(biāo)準(zhǔn)差的高斯分布樣本,可以使用loc指定均值,使用scale指定標(biāo)準(zhǔn)差。
import numpy as np
print(np.random.normal()) # 生成一個均值為0,標(biāo)準(zhǔn)差為1的高斯分布樣本
print(np.random.normal(size=5)) # 生成包含5個高斯分布樣本的一維數(shù)組
print(np.random.normal(loc=2.0, scale=0.5, size=(2,3))) # 生成2 x 3的數(shù)組,均值為2.0,標(biāo)準(zhǔn)差為0.5
4.np.random.random_sample(size=None)
該函數(shù)返回一個[0, 1)之間的隨機浮點數(shù),可以使用size參數(shù)來指定要生成的隨機數(shù)數(shù)組的形狀。
import numpy as np
print(np.random.random_sample()) # 生成一個[0, 1)之間的隨機浮點數(shù)
print(np.random.random_sample(size=5))# 生成包含5個[0, 1)之間的隨機浮點數(shù)的一維數(shù)組
print(np.random.random_sample(size=(2, 3))) # 生成2 x 3的隨機浮點數(shù)數(shù)組,元素位于[0, 1)
5.np.random.seed(seed=None)
該函數(shù)用于生成隨機數(shù)生成器的種子,可以使用整數(shù)指定特定的種子,這樣每次生成的隨機序列都將相同。如果不指定種子,則使用系統(tǒng)時間作為種子。
import numpy as np
np.random.seed(10) # 指定隨機種子為10
print(np.random.random()) # 生成0.77132064
np.random.seed(10)
print(np.random.random()) # 生成0.77132064,與上面的一樣
第二章:pandas
一丶pandas核心概念
Pandas是Python編程語言的一個開放源代碼軟件庫,用于數(shù)據(jù)處理和數(shù)據(jù)分析。它提供了一些數(shù)據(jù)結(jié)構(gòu)和函數(shù),使數(shù)據(jù)操作更簡單、更快速。下面是Pandas的一些核心概念。
1.Series
Series是Pandas中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),類似于numpy中的一維數(shù)組。它由兩個數(shù)組構(gòu)成,一個數(shù)組是數(shù)據(jù)部分,另一個數(shù)組是索引部分,索引部分可以自定義。
import pandas as pd
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
輸出結(jié)果:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
2.DataFrame
DataFrame是Pandas中最重要的數(shù)據(jù)結(jié)構(gòu),它是由多個Series按照一定的規(guī)則排列構(gòu)成的二維表格,每個Series對應(yīng)表格中的一列。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
print(df)
輸出結(jié)果:
name age gender
0 Alice 22 F
1 Bob 25 M
2 Charlie 20 M
3.Index
Index是Pandas中非常重要的數(shù)據(jù)結(jié)構(gòu),它是一種類似于元組的不可變序列。Index主要用于對DataFrame和Series中的行和列進(jìn)行標(biāo)記和索引,使用索引可以方便地對數(shù)據(jù)進(jìn)行篩選、切片等操作。
import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f']) # 自定義索引
print(s)
輸出結(jié)果:
a 1.0
b 3.0
c 5.0
d NaN
e 6.0
f 8.0
dtype: float64
4.Selection、slicing、indexing
Pandas提供了豐富的數(shù)據(jù)選擇、切片、索引功能。使用這些功能可以方便地對DataFrame和Series進(jìn)行篩選、切片、索引等操作。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 選擇name列
print(df['name'])
# 選擇前兩行
print(df[:2])
# 選擇年齡大于20的行
print(df[df['age'] > 20])
# 選擇name列和age列
print(df.loc[:, ['name', 'age']])
5.Operations
Pandas提供了很多數(shù)據(jù)處理和操作功能,包括數(shù)據(jù)聚合、分組、重塑、過濾等。這些功能可以方便地對數(shù)據(jù)進(jìn)行處理和分析。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [22, 25, 20],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 計算年齡的平均值
print(df['age'].mean())
# 按性別分組計算平均年齡
print(df.groupby('gender')['age'].mean())
# 對數(shù)據(jù)進(jìn)行重塑
print(df.pivot(index='name', columns='gender', values='age'))
二丶數(shù)據(jù)結(jié)構(gòu)series索引
Pandas中的Series是一種帶標(biāo)簽的一維數(shù)組結(jié)構(gòu),可以看作是一個單列的DataFrame。
Series的索引提供了一種訪問數(shù)據(jù)的方法。在Pandas中,Series的索引有兩種類型:隱式索引(整數(shù)索引)和顯式索引(自定義索引)。下面將深入介紹這兩種索引的用法。
1.隱式索引(整數(shù)索引)
Series對象的隱式索引是從0開始的連續(xù)整數(shù)值。通過位置訪問一個Series中的值需要用到隱式索引。具體用法如下:
import pandas as pd
# 定義一個Series對象
s = pd.Series([1, 3, 5, 7, 9])
# 訪問元素
s[0] # 輸出:1
# 切片
s[1:4] # 輸出:3 5 7
# 過濾
s[s > 5] # 輸出:7 9
2.顯式索引(自定義索引)
顯式索引是由用戶定義的索引值,可以是任何標(biāo)簽或值,如下面給出的字符串序列、日期或者任何對象等。定義顯式索引需要在Series對象初始化時通過index參數(shù)指定。具體用法如下:
import pandas as pd
# 定義一個Series對象,指定顯式索引
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "b", "c", "d", "e"])
# 按照標(biāo)簽訪問元素
s["a"] # 輸出:1
# 切片
s["b":"d"] # 輸出:3 5 7
# 過濾
s[s > 5] # 輸出:7 9
需要注意的是,由于Series對象的顯式索引是用戶定義的,因此不能通過位置訪問,即不能用整數(shù)索引來訪問元素。
除了以上基本用法,Series的索引還支持許多其他特性。例如,可以為Series對象設(shè)置名稱,及使用重復(fù)索引,其具體用法如下:
為Series設(shè)置名稱
import pandas as pd
# 定義一個Series對象
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "b", "c", "d", "e"])
s.name = "SeriesName" # 設(shè)置Series的名稱
重復(fù)索引
import pandas as pd
# 定義一個Series對象,使用重復(fù)索引
s = pd.Series([1, 3, 5, 7, 9], index = ["a", "a", "b", "c", "d"])
# 按照標(biāo)簽訪問元素
s["a"] # 輸出:a 1 a 3
# 訪問重復(fù)索引的所有值
s.loc["a"] # 輸出:a 1 a 3
總的來說,Pandas的Series提供了豐富的索引功能,可以通過隱式和顯式索引來訪問和操作數(shù)據(jù),便于處理和分析各種類型的數(shù)據(jù)。
三丶數(shù)據(jù)結(jié)構(gòu)Dataframe基本概念及創(chuàng)建
Pandas中最常用的數(shù)據(jù)結(jié)構(gòu)是DataFrame,它是一個由行和列構(gòu)成的二維表格。與Excel中的工作表類似,DataFrame允許我們將數(shù)據(jù)按照行和列組織起來,并且提供了一系列強大的數(shù)據(jù)處理和分析工具。
1.創(chuàng)建DataFrame
創(chuàng)建Pandas中的DataFrame主要有以下幾種方法:
- 從CSV或文本文件讀取數(shù)據(jù)
import pandas as pd
df = pd.read_csv('data.csv', header=0, sep=',')
其中,header=0表示將第一行作為表頭,sep=',‘表示用’,'作為分隔符。
- 從字典創(chuàng)建DataFrame
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
- 從numpy數(shù)組創(chuàng)建DataFrame
import pandas as pd
import numpy as np
data = np.array([[1,2,3],[4,5,6],[7,8,9]])
df = pd.DataFrame(data, columns=['a', 'b', 'c'])
2.DataFrame的索引與切片
DataFrame的索引和切片與Series類似,也有隱式索引和顯式索引。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用loc訪問具有顯式索引的行和列
df.loc[0] # 獲取第一行
df.loc[:, 'name'] # 獲取所有行中的'name'列數(shù)據(jù)
df.loc[0, 'age'] # 獲取第一行age列中的數(shù)據(jù)
# 使用iloc訪問具有隱式索引的行和列
df.iloc[0] # 獲取第一行
df.iloc[:, 0] # 獲取第一列
df.iloc[0, 1] # 獲取第一行第二列的值
3.數(shù)據(jù)的增、刪、改、查
DataFrame可以通過增、刪、改、查操作來對數(shù)據(jù)進(jìn)行處理。
import pandas as pd
# 新增一列
df['score'] = [89, 93, 87]
# 刪除一列
df.drop('sex', axis=1, inplace=True)
# 修改一列
df.loc[0, 'name'] = 'Lucy'
# 查詢符合條件的行
df[df.age > 30]
4.DataFrame數(shù)據(jù)的基本統(tǒng)計信息
Pandas中的DataFrame還提供了數(shù)據(jù)處理和數(shù)據(jù)分析所需的各種統(tǒng)計函數(shù),比如describe()函數(shù)可以為DataFrame提供一些基本的統(tǒng)計信息。
import pandas as pd
df = pd.read_csv('data.csv', header=0, sep=',')
df.describe()
這將返回DataFrame的基本統(tǒng)計信息,如總數(shù)、均值、標(biāo)準(zhǔn)差、最小值、最大值等。
以上就是Pandas中DataFrame的基本概念,包括DataFrame數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建、索引與切片、數(shù)據(jù)的增、刪、改、查以及基本統(tǒng)計信息的計算。Pandas強大的數(shù)據(jù)處理和分析能力,使得我們在處理數(shù)據(jù)時更加的便利和高效。
四丶Dataframe索引
在 Pandas 中,可以通過 loc、iloc、at 和 iat 等方式來訪問 DataFrame 中的元素,實現(xiàn)對 DataFrame 的索引。其中,loc 和 at 主要用于基于索引標(biāo)簽訪問,而 iloc 和 iat 則主要用于基于整數(shù)下標(biāo)訪問。
1.使用 loc 和 at 進(jìn)行基于標(biāo)簽的索引
在 Pandas 中,使用 loc 就可以基于標(biāo)簽索引 DataFrame 中的元素,其基本語法類似于 Python 中的索引方式,只需要指定需要訪問的行和列名即可。
import pandas as pd
# 創(chuàng)建 DataFrame
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用 loc 訪問 DataFrame 中的元素
print(df.loc[0, 'name']) # Alice
print(df.loc[0:1, ['name', 'age']]) # 通過標(biāo)簽名選取第 0 至 2 行,name 和 age 兩列的數(shù)據(jù)
# 使用 at 訪問單個元素
print(df.at[0, 'name']) # Alice
2.使用 iloc 和 iat 進(jìn)行基于整數(shù)下標(biāo)的索引
類似于 loc 和 at,可以使用 iloc 和 iat 進(jìn)行基于整數(shù)下標(biāo)的索引。iloc 和 iat 的區(qū)別在于 iat 是一個標(biāo)量,而 iloc 則返回多行多列的 DataFrame。
import pandas as pd
# 創(chuàng)建 DataFrame
data = {'name': ['Alice', 'Bob', 'Charles'], 'age': [23, 34, 45], 'sex': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用 iloc 訪問 DataFrame 中的元素
print(df.iloc[0, 0]) # Alice
print(df.iloc[0:2, 0:2]) # 通過整數(shù)下標(biāo)選取第 0 至 1 行,第 0 至 1 列的數(shù)據(jù)
# 使用 iat 訪問單個元素
print(df.iat[0, 0]) # Alice
綜上所述,通過 loc、iloc、at 和 iat 等索引方式,可以輕松實現(xiàn)對 DataFrame 中元素的訪問,幫助我們更加高效地進(jìn)行數(shù)據(jù)處理和分析。
第三章:Matplotlib
1.Matplotlib簡介及圖表窗口
Matplotlib 是 Python 中最經(jīng)典的數(shù)據(jù)可視化庫之一,為廣大數(shù)據(jù)分析者和科學(xué)家們提供了強大且易用的繪圖工具。
Matplotlib 主要包含兩個基礎(chǔ)模塊:pyplot 和 pylab。其中,pyplot 是 Matplotlib 的關(guān)鍵模塊,提供了 plt 對象,方便我們進(jìn)行繪圖操作。而 pylab 則是 Matplotlib 至關(guān)重要的一個子模塊,提供了 matplotlib 命名空間,并且將 NumPy 和 Matplotlib 導(dǎo)入到命名空間中,避免了頻繁的命名空間重復(fù)操作。
下面我們來了解一下 Matplotlib 中常用的圖表窗口:
1.Figure 圖表窗口
在 Matplotlib 中,一個 Figure 對象代表著一個圖表窗口,可以通過指定圖表窗口的大小和分辨率等參數(shù),來創(chuàng)建自己所需的圖表窗口。我們可以通過以下代碼創(chuàng)建一個圖表窗口:
import matplotlib.pyplot as plt
# 創(chuàng)建一個 8 寸高、6 寸寬的圖表窗口
fig = plt.figure(figsize=(8, 6))
2.Subplot 子圖窗口
在 Matplotlib 中,Subplot 是 Figure 中的一部分,我們可以在一個 Figure 對象中創(chuàng)建多個 Subplot。通過 Subplot,我們可以將同一 Figure 中的多幅圖表繪制在不同的子圖窗口里。我們可以通過以下代碼在一個 Figure 對象中創(chuàng)建兩個子圖窗口:
import matplotlib.pyplot as plt
# 創(chuàng)建一個 8 寸高、6 寸寬的圖表窗口
fig = plt.figure(figsize=(8, 6))
# 在圖表窗口中創(chuàng)建 2 個子圖窗口,排列格式是 2 行 1 列
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
# 在第一個子圖中繪制折線圖
ax1.plot([1, 2, 3, 4], [2, 4, 3, 5])
# 在第二個子圖中繪制散點圖
ax2.scatter([1, 2, 3, 4], [1, 3, 2, 4])
通過 add_subplot 可以實現(xiàn)在一個 Figure 對象中創(chuàng)建多份繪圖。
除了 Figure 和 Subplot 窗口之外,Matplotlib 還提供了其他窗口元素,如 Axes,Legend 等,方便我們更加高效地進(jìn)行數(shù)據(jù)可視化。
綜上所述,Matplotlib 是 Python 數(shù)據(jù)分析中不可或缺的一部分,提供了眾多強大的圖表繪制工具,使得數(shù)據(jù)可視化變得更加輕松和高效。不同的圖表窗口提供不同的展現(xiàn)方式,可以根據(jù)需求來實現(xiàn)自己想要的圖表效果。
二丶圖表的基本元素
Matplotlib 是 Python 中最經(jīng)典的數(shù)據(jù)可視化庫之一,提供了多種數(shù)據(jù)可視化的圖表類型,包括折線圖、散點圖、柱狀圖、餅圖等等。在 Matplotlib 中,每個圖表都是由多個元素組成的,下面我們來了解一下 Matplotlib 圖表的基本元素。
1.Figure(圖表)
Figure 表示整張畫布,它是所有可繪制元素的容器。在 Matplotlib 中,通常情況下,我們在開始繪圖前會創(chuàng)建一個 Figure 對象。
2.Axes(坐標(biāo)軸)
Axes(軸)代表數(shù)學(xué)坐標(biāo)軸,是我們繪制圖表的基本元素。在二維圖表中,通常由兩條軸組成:x 軸和 y 軸。我們可以在軸上繪制數(shù)學(xué)函數(shù)、散點圖、柱狀圖等圖表類型。
3.Axis(坐標(biāo)軸刻度)
Axis(刻度)表示坐標(biāo)軸上的刻度標(biāo)記和標(biāo)簽。在 Matplotlib 中,刻度標(biāo)記通常由刻度線和刻度標(biāo)簽組成。
4.Title(標(biāo)題)
Title(標(biāo)題)是圖表的核心部分之一,用于說明圖表的主題或主要內(nèi)容。在 Matplotlib 中,我們可以通過 add_title() 方法來添加標(biāo)題。
5.Legend(圖例)
Legend(圖例)是說明圖表中不同元素含義的輔助工具,通常用于標(biāo)注每個數(shù)據(jù)系列對應(yīng)的標(biāo)簽。在 Matplotlib 中,我們可以通過 add_legend() 方法來添加圖例。
6.Label(標(biāo)簽)
Label(標(biāo)簽)是針對不同元素的說明文本,包括軸標(biāo)簽、刻度標(biāo)簽、圖例標(biāo)簽等。在 Matplotlib 中,我們可以通過 xlabel()、ylabel() 等方法來添加軸標(biāo)簽,也可以使用 set_text() 方法來修改其他標(biāo)簽的文本。
以上就是 Matplotlib 中常見的圖表元素,了解它們的意義和作用,可以更好地理解 Matplotlib 圖表的結(jié)構(gòu)和繪制方式,并且可以引導(dǎo)我們正確地選擇和調(diào)整圖表元素以獲得更好的數(shù)據(jù)可視化效果。
三丶Matplotlib圖表的樣式參數(shù)
在 Matplotlib 中,繪制圖表的樣式可以使用多個樣式參數(shù)來控制。下面是一些常用的樣式參數(shù):
1.顏色參數(shù):使用顏色來區(qū)分不同的數(shù)據(jù)系列??梢允褂贸R?guī)顏色名(如 ‘red’、‘blue’ 等),RGB 數(shù)值(如 (0.1, 0.2, 0.3))和十六進(jìn)制顏色代碼(如 ‘#FF0000’)。
2.線寬參數(shù):控制繪制線條的寬度,通常使用整數(shù)或浮點數(shù)表示。
3.線型參數(shù):控制繪制線條的樣式,包括實線(‘-’)、虛線(‘–’)、點線(‘:’)等。
4.標(biāo)記參數(shù):標(biāo)記是指在繪制散點圖等類型圖表時用來表示每個數(shù)據(jù)點的符號,可以使用不同的標(biāo)記來區(qū)分不同的數(shù)據(jù)系列。
5.字體參數(shù):控制文字的大小、粗細(xì)、顏色等屬性,包括字體大?。ā甪ontsize’)、字體顏色(‘color’)等。
6.圖表尺寸參數(shù):控制圖表的大小,包括圖表寬度(‘figwidth’)、圖表高度(‘figheight’)等。
7.邊框參數(shù):控制圖表邊框的樣式和顏色,包括線條樣式(‘linestyle’)、線條寬度(‘linewidth’)和顏色(‘edgecolor’)等。
以上是 Matplotlib 中常見的樣式參數(shù)。要使用這些樣式參數(shù),我們可以在繪制圖表時添加相應(yīng)的參數(shù),并根據(jù)需要進(jìn)行調(diào)整和修改,以獲得滿意的可視化效果。
四丶Matplotlib刻度、圖表輸出丶注解
在 Matplotlib 中,有許多刻度、圖表輸出和注解相關(guān)的功能,可以幫助我們更好地掌握數(shù)據(jù)可視化。下面介紹一些有用的可視化技巧。
1.刻度標(biāo)簽格式化
在 Matplotlib 中,我們可以使用 matplotlib.ticker 模塊中的 Formatter 類來格式化軸上的刻度標(biāo)簽。其中,常見的格式類型包括字符串格式(如 “%d”、“%f” 等)、百分?jǐn)?shù)格式(如 “%0.1f%%” 等)和科學(xué)計數(shù)法格式(如 “%0.1e”、“%0.1E” 等)等。
例如,以下代碼使用科學(xué)計數(shù)法格式來格式化 y 軸上的刻度標(biāo)簽:
from matplotlib import pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import numpy as np
# 生成測試數(shù)據(jù)
x = np.linspace(0, 100, 101)
y = np.power(10, x)
# 繪制圖表
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_ylabel("Y Axis")
# 設(shè)置 y 軸刻度標(biāo)簽的格式為科學(xué)計數(shù)法
formatter = FormatStrFormatter('%0.1e')
ax.yaxis.set_major_formatter(formatter)
plt.show()
2.圖表輸出格式
在 Matplotlib 中,我們可以使用 savefig() 方法來將圖表保存為文件,保存格式包括 PNG、PDF、SVG、PS 等多種格式。我們可以通過指定文件名和文件格式來完成圖表的保存。
例如,以下代碼將圖表保存為 PDF 格式的文件:
from matplotlib import pyplot as plt
# 在 Matplotlib 中繪制圖表
# 將圖表保存為 PDF 文件
plt.savefig("output.pdf")
3.注解添加
在 Matplotlib 中,我們可以使用 text() 方法和 annotate() 方法來添加文本注解或箭頭注解。其中,text() 方法添加的注解為純文本注解,而 annotate() 方法可以添加帶箭頭的注解。
例如,以下代碼在圖表中添加了一個文本注解和一個箭頭注解:
from matplotlib import pyplot as plt
# 在 Matplotlib 中繪制圖表
# 添加文本注解
plt.text(0.5, 0.5, "Text Annotation", ha="center", va="center")
# 添加箭頭注解
plt.annotate("Arrow Annotation", xy=(0.5, 0.7), xytext=(0.7, 0.8),
arrowprops=dict(facecolor='black', shrink=0.05))
在圖表的注解中,我們可以修改注解的文本、字體、顏色、大小、箭頭樣式等屬性,以達(dá)到更好的可視化效果。
綜上所述,刻度、圖表輸出和注解是 Matplotlib 中常用的幾個可視化技巧。掌握這些技巧,可以幫助我們更好地處理和展示數(shù)據(jù),讓數(shù)據(jù)可視化更加生動有趣。
總結(jié)
學(xué)習(xí) Python 中的 NumPy、Pandas 和 Matplotlib 等數(shù)據(jù)科學(xué)庫可以帶來許多好處,如下所述:
帶來更高效、更便捷的數(shù)據(jù)科學(xué)編程體驗:NumPy、Pandas 和 Matplotlib 等數(shù)據(jù)科學(xué)庫提供了許多高效的函數(shù)和方法,可以方便地進(jìn)行數(shù)據(jù)操作和可視化,從而減少了冗長的代碼編寫和調(diào)試時間。
拓展 Python 數(shù)據(jù)科學(xué)相關(guān)的功能和應(yīng)用:Python 原生的數(shù)據(jù)處理、數(shù)據(jù)分析和數(shù)據(jù)可視化功能相對較弱,學(xué)習(xí)使用 NumPy、Pandas 和 Matplotlib 等數(shù)據(jù)科學(xué)庫可以拓展這些功能,從而進(jìn)行更深入的數(shù)據(jù)科學(xué)應(yīng)用探索。
提升數(shù)據(jù)分析和數(shù)據(jù)可視化能力:學(xué)習(xí)使用 NumPy、Pandas 和 Matplotlib 等數(shù)據(jù)科學(xué)庫可以提高數(shù)據(jù)科學(xué)從業(yè)者的數(shù)據(jù)分析和數(shù)據(jù)可視化能力,可以更好地理解和應(yīng)用各種分析技術(shù)和可視化方法,從而更好地進(jìn)行數(shù)據(jù)科學(xué)工作。
豐富數(shù)據(jù)科學(xué)簡歷及職業(yè)發(fā)展:在數(shù)據(jù)科學(xué)領(lǐng)域中,掌握并能夠應(yīng)用多種數(shù)據(jù)科學(xué)庫的相關(guān)知識將會成為一個優(yōu)勢,通過使用這些庫來實現(xiàn)各種數(shù)據(jù)操作、分析和可視化的項目和經(jīng)驗,將會對個人職業(yè)發(fā)展和簡歷上升產(chǎn)生積極影響。
綜上所述,學(xué)習(xí) Python 中的數(shù)據(jù)科學(xué)庫可以幫助我們更高效、便捷地實現(xiàn)數(shù)據(jù)分析、數(shù)據(jù)處理和數(shù)據(jù)可視化等任務(wù),同時提高我們在數(shù)據(jù)科學(xué)領(lǐng)域的能力和競爭力,是在數(shù)據(jù)科學(xué)領(lǐng)域中的必要技能之一。