numpy,matplotlib,pandas

来源:https://www.cnblogs.com/setcreed/archive/2019/10/06/11628303.html
-Advertisement-
Play Games

[TOC] numpy模塊 numpy簡介 numpy官方文檔: numpy是Python的一種開源的數值計算擴展庫。這種庫可用來存儲和處理大型numpy數組,比Python自身的嵌套列表結構要高效的多(該結構也可以用來表示numpy數組)。 numpy庫有兩個作用: 1. 區別於list列表,提供 ...


目錄

numpy模塊

numpy簡介

numpy官方文檔:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750

numpy是Python的一種開源的數值計算擴展庫。這種庫可用來存儲和處理大型numpy數組,比Python自身的嵌套列表結構要高效的多(該結構也可以用來表示numpy數組)。

numpy庫有兩個作用:

  1. 區別於list列表,提供了數組操作、數組運算、以及統計分佈和簡單的數學模型
  2. 計算速度快,甚至要由於python內置的簡單運算,使得其成為pandas、sklearn等模塊的依賴包。高級的框架如TensorFlow、PyTorch等,其數組操作也和numpy非常相似。

numpy使用

import numpy as np

lt1 = [1,2,3]
lt2 = [4,5,6]
arry1 = np.array(lt1)
arry2 = np.array(lt2)
print(arry1*arry2)    # [ 4 10 18]  

創建numpy數組

# 一維數組
arr1 = np.array([1,2,4])
print(type(arr1), arr1)  # <class 'numpy.ndarray'> [1 2 4]

# 二維數組
arr = np.array([
    [1,2,3],
    [4,5,6]
])

print(arr)  
'''
[[1 2 3]
 [4 5 6]]
'''


# 三維數組
arr = np.array([
    [[1, 2, 3],
     [4, 5, 6]],
    [[1, 2, 3],
     [4, 5, 6]]
])

print(arr)
'''
[[[1 2 3]
  [4 5 6]]

 [[1 2 3]
  [4 5 6]]]
'''

numpy數組的常用屬性

屬性 解釋
T 數組的轉置(對高維數組而言)
dtype 數組元素的數據類型
size 數組元素的個數
ndim 數組的維數
shape 數組的維度大小(以元組形式)
astype 類型轉換

dtype 數組元素的數據類型,numpy數組是屬於python解釋器的,int32 / float64 屬於numpy

# 轉置
arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(f'arr的轉置為\n{arr.T}')
'''
arr的轉置為
[[1 4]
 [2 5]
 [3 6]]
'''

# dtype數據類型
arr = np.array([
    [1., 2., 3.],
    [4, 5, 6]
])

print(arr.dtype)  # float64


# 數組元素的個數
print(arr.size)   # 6

# 數組的維數
print(arr.ndim)  # 2

# 數組的維度大小(以元組形式, 幾行幾列)
print(arr.shape)  # (2,3)

# 數組類型轉換
arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
res = arr.astype(np.float64)
print(res) 
'''
[[1. 2. 3.]
 [4. 5. 6.]]
'''

切割numpy數組

切分數組類似於列表的切割,numpy數組的切割涉及到行和列的切割

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

print(arr[:,:])  # 行;列  取整個數組
print(arr[0,0])  # 取第一行第一列,1
print(arr[0,:])  # 取第一行  [1 2 3]
print(arr[:,2:])  # 取第三列 
'''
[[3]
 [6]]
'''

賦值

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
arr[0,0] = 0
print(arr)   # 將二維數組第一行第一列元素賦值為0

arr[:,:] = 0
print(arr)  # 全部換為0
'''
[[0 0 0]
 [0 0 0]]
'''

元組合併

# 水平合併
arr1 = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

arr2 = np.array([
    [7, 8, 9],
    ['a', 'b', 'c']
])

print(np.hstack((arr1,arr2))) # 只能放元組
'''
[['1' '2' '3' '7' '8' '9']
 ['4' '5' '6' 'a' 'b' 'c']]
'''

# 垂直合併
print(np.vstack((arr1, arr2)))
'''
[['1' '2' '3']
 ['4' '5' '6']
 ['7' '8' '9']
 ['a' 'b' 'c']]
'''

print(np.concatenate((arr1, arr2)))  # 預設以列合併
'''
[['1' '2' '3']
 ['4' '5' '6']
 ['7' '8' '9']
 ['a' 'b' 'c']]
'''
print(np.concatenate((arr1, arr2), axis=1)) # 以行合併
'''
[['1' '2' '3' '7' '8' '9']
 ['4' '5' '6' 'a' 'b' 'c']]
'''

通過函數創建數組

方法 詳解
array() 將列表轉換為數組,可選擇顯式指定dtype
arange() range的numpy版,支持浮點數
linspace() 類似arange(),第三個參數為數組長度
zeros() 根據指定形狀和dtype創建全0數組
ones() 根據指定形狀和dtype創建全1數組
eye() 創建單位矩陣
empty() 創建一個元素全隨機的數組
reshape() 重塑形狀

ones / zeros / eye / empty

# ones
print(np.ones((2,3)))  # 構建兩行三列的1
'''
[[1. 1. 1.]
 [1. 1. 1.]]
'''

# zeros
print(np.zeros((2,3)))  # 創建2行3列的0
'''
[[0. 0. 0.]
 [0. 0. 0.]]
'''

# eye
print(np.eye(3,3))  # 創建單位矩陣
'''
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
'''

# empty
print(np.empty((2,2)))  # 創建一個2行2列的數組,裡面的元素是隨機生成的
'''
[[1.42419938e-306 9.34609790e-307]
 [1.29060871e-306 7.56601165e-307]]
'''

linspace / logspace

print(np.linspace(1,100,10)) # 創建一個等差數列,1-100,有10個數
# [  1.  12.  23.  34.  45.  56.  67.  78.  89. 100.]

print(np.logspace(1,10,5))  # 創建等比數列、
# [1.00000000e+01 1.77827941e+03 3.16227766e+05 5.62341325e+07 1.00000000e+10]

arrange

print(np.arange(2,10))
# [2 3 4 5 6 7 8 9]

print(np.arange(2,10,2))  # 2-10,步長為2的數組
# [2 4 6 8]

reshape 重構形狀

arr = np.ones([2,2])  # 本來是2*2的1
# print(arr) 
print(arr.reshape(1,4))  # 變成1*4的1
# [[1. 1. 1. 1.]]

數組運算

運算符 說明
+ 兩個numpy數組對應元素相加
- 兩個numpy數組對應元素相減
* 兩個numpy數組對應元素相乘
/ 兩個numpy數組對應元素相除,如果都是整數則取商
% 兩個numpy數組對應元素相除後取餘數
**n 單個numpy數組每個元素都取n次方,如**2:每個元素都取平方
arr = np.array([
    [3, 4, 56],
    [12, 4, 25]
])
print(arr / 2)
'''
[[ 1.5  2.  28. ]
 [ 6.   2.  12.5]]
'''

arr = np.array([
    [3, 4, 56],
    [12, 4, 25]
])
print(arr ** 2)
'''
[[   9   16 3136]
 [ 144   16  625]]
'''

numpy數組函數運算

numpy數組函數 詳解
np.sin(arr) 對numpy數組arr中每個元素取正弦,sin(x)sin(x)
np.cos(arr) 對numpy數組arr中每個元素取餘弦,cos(x)cos(x)
np.tan(arr) 對numpy數組arr中每個元素取正切,tan(x)tan(x)
np.arcsin(arr) 對numpy數組arr中每個元素取反正弦,arcsin(x)arcsin(x)
np.arccos(arr) 對numpy數組arr中每個元素取反餘弦,arccos(x)arccos(x)
np.arctan(arr) 對numpy數組arr中每個元素取反正切,arctan(x)arctan(x)
np.exp(arr) 對numpy數組arr中每個元素取指數函數,exex
np.sqrt(arr) 對numpy數組arr中每個元素開根號x−−\(\sqrt[2]{x}\)
arr = np.array([
    [3, 4, 56],
    [12, 4, 25]
])
print(np.sin(arr))
'''
[[ 0.14112001 -0.7568025  -0.521551  ]
 [-0.53657292 -0.7568025  -0.13235175]]
'''

numpy.random生成隨機數

函數名稱 函數功能 參數說明
rand(d0,d1,⋯,dnd0,d1,⋯,dn) 產生均勻分佈的隨機數 dndn為第n維數據的維度
randn(d0,d1,⋯,dnd0,d1,⋯,dn) 產生標準正態分佈隨機數 dndn為第n維數據的維度
randint(low[, high, size, dtype]) 產生隨機整數 low:最小值;high:最大值;size:數據個數
random_sample([size]) 在[0,1)[0,1)內產生隨機數 size為隨機數的shape,可以為元祖或者列表
choice(a[, size]) 從arr中隨機選擇指定數據 arr為1維數組;size為數組形狀
uniform(low,high [,size]) 給定形狀產生隨機數組 low為最小值;high為最大值,size為數組形狀
shuffle(a) 與random.shuffle相同 a為指定數組

matplotlib模塊

條形圖

初始的:

from matplotlib import pyplot as plt

classes = ['3班', '4班', '5班', '6班']
students = [55, 45, 60, 50]

plt.bar(classes, students)
plt.show()

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體

font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')  # 中文字體


classes = ['3班', '4班', '5班', '6班']
students = [55, 45, 60, 50]
classes_index = range(len(classes))

plt.bar(classes_index, students)
plt.xticks(classes_index, classes, FontProperties=font)

plt.show()

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體

font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')  # 中文字體

plt.style.use('ggplot')  # 設置背景條紋

classes = ['3班', '4班', '5班', '6班']
students = [55, 45, 60, 50]
classes_index = range(len(classes))

plt.bar(classes_index, students, color='darkblue')

plt.xlabel('學生', FontProperties=font)
plt.ylabel('學生人數', FontProperties=font)
plt.title('班級-學生人數', FontProperties=font, fontsize=20, fontweight=25)
plt.xticks(classes_index, classes, FontProperties=font)  # 將x軸坐標替換成classes

plt.show()

直方圖

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體

font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')  # 中文字體

# 修改背景為條紋
plt.style.use('ggplot')

x1 = np.random.randn(10000)  # 隨機生成符合正太分佈的數
x2 = np.random.randn(10000)

plt.hist(x1, bins=50, color='darkgreen')  # bins=50表示每個變數的值分成50份,即會有50根柱子
plt.show()

# 直方圖
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體

font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')  # 中文字體

# 修改背景為條紋
plt.style.use('ggplot')

x1 = np.random.randn(10000)  # 隨機生成符合正太分佈的數
x2 = np.random.randn(10000)

fig = plt.figure()  # 生成一張畫布
ax1 = fig.add_subplot(1,2,1) # 一行兩列取第一個
ax2 = fig.add_subplot(1,2,2) # 一行兩列取第二個

ax1.hist(x1, bins=50, color='darkgreen')  # bins=50表示每個變數的值分成50份,即會有50根柱子
ax2.hist(x2, bins=50, color='red')

# 大標題
fig.suptitle('兩個正太分佈', FontProperties=font)

# 添加子標題
ax1.set_title('x1的正態分佈', FontProperties=font)
ax2.set_title('x2的正態分佈', FontProperties=font)
plt.show()

折線圖

# 折線圖
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體

font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')  # 中文字體

# 修改背景為條紋
plt.style.use('ggplot')

np.random.seed(1)
# 使用numpy的累加和,保證數據取值範圍不會在(0,1)內波動
x1 = np.random.randn(40).cumsum()
x2 = np.random.randn(40).cumsum()
x3 = np.random.randn(40).cumsum()
x4 = np.random.randn(40).cumsum()

plt.plot(x1, color='red', marker='o', linestyle='-', label='紅實線')
plt.plot(x2, color='yellow', marker='x', linestyle='--', label='黃虛線')
plt.plot(x3, color='blue', marker='*', linestyle='-.', label='藍點線')
plt.plot(x4, color='black', marker='s', linestyle=':', label='綠點圖')

# loc='best'給label自動選擇最好的位置
plt.legend(loc='best', prop=font)
plt.show()

散點圖+直線圖

# 散點圖
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties  # 修改字體
font = FontProperties(fname='C:\Windows\Fonts\simkai.ttf')

plt.style.use('ggplot')

# fig = plt.figure(figsize=(10,20)) # 控制畫布大小
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

x1 = np.arange(20)
y1 = x1 ** 2

x2 = np.arange(20)
y2 = x2


ax1.scatter(x1, y1, color='red', label='紅')
ax1.scatter(x2, y2, color='blue', label='藍')
ax2.plot(x1,y1)
ax2.plot(x2,y2)

fig.suptitle('兩張圖', FontProperties=font)
ax1.set_title('散點圖', FontProperties=font)
ax2.set_title('折線圖', FontProperties=font)
ax1.legend(prop=font)
plt.show()

pandas模塊

pandas中有兩個主要的數據結構,其中Series數據結構類似於Numpy中的一維數組,DataFrame類似於多維表格數據結構。

pandas是python數據分析的核心模塊。它主要提供了五大功能:

  1. 支持文件存取操作,支持資料庫(sql)、html、json、pickle、csv(txt、excel)、sas、stata、hdf等。
  2. 支持增刪改查、切片、高階函數、分組聚合等單表操作,以及和dict、list的互相轉換。
  3. 支持多表拼接合併操作。
  4. 支持簡單的繪圖操作。
  5. 支持簡單的統計分析操作。
import pandas as pd
index = pd.date_range('2019-01-01', periods=6, freq='M')
print(index)

'''
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
               '2019-05-31', '2019-06-30'],
              dtype='datetime64[ns]', freq='M')
'''
import numpy as np
import pandas as pd

index = pd.date_range('2019-01-01', periods=6, freq='M')
columns = ['c1','c2','c3','c4']
# print(columns)
val = np.random.randn(6, 4)
# print(val)

df = pd.DataFrame(index=index, columns=columns, data=val)

# 保存文件,讀出文件
df.to_excel('data.xls')

# 讀出文件
df = pd.read_excel('data.xls', index_col=[0])
print(df)

'''
                  c1        c2        c3        c4
2019-01-31 -1.469848 -0.875899 -0.571439  0.274287
2019-02-28  0.783315 -0.333277  0.091470  1.484056
2019-03-31  0.611354  0.565803 -1.298068  0.666117
2019-04-30 -0.892975 -0.144261 -2.596248  1.103916
2019-05-31 -1.207643 -0.475502 -1.577926 -0.373518
2019-06-30 -0.233937 -1.492533 -0.207368  0.163620

'''

print(df.index)
'''
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
               '2019-05-31', '2019-06-30'],
              dtype='datetime64[ns]', freq=None)
'''

print(df.columns)
'''
Index(['c1', 'c2', 'c3', 'c4'], dtype='object')
'''


print(df[['c1', 'c2']])


# 按照index取值
print(df.loc['2019-01-31'])
'''
c1   -0.511065
c2    0.173715
c3    0.460645
c4   -0.105340
Name: 2019-01-31 00:00:00, dtype: float64
'''

# 按照values取值
print(df.iloc[0,1])
'''
-0.515215674883499
'''

df.iloc[0,:] = 0
print(df)

'''
                  c1        c2        c3        c4
2019-01-31  0.000000  0.000000  0.000000  0.000000
2019-02-28 -0.473829  0.647171 -1.026075 -0.630721
2019-03-31  1.112496  2.454119 -0.339265  0.600856
2019-04-30 -0.264615 -0.035386 -0.717795  0.320868
2019-05-31 -0.638794 -0.926775  0.247402 -0.824648
2019-06-30 -0.100243 -1.077409 -1.063229 -1.314213
'''

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0.前言 在當前的行業發展和國際形勢下,讓更多的程式員思考跨平臺編程問題。在眾多的跨平臺開發環境中,Code::Blocks具有獨特的優勢。 近二十年來,跨平臺開發環境曾經如雨後春筍般產生,但是,由於後繼乏力,逐漸銷聲匿跡者頗多。作為程式員,熟悉一個平臺需要消耗大量的精力,把編寫的程式移植到另一個平 ...
  • EXCEPTION_ACCESS_VIOLATION(0xc0000005)eclipse.ini中添加:-XX:CompileCommand=exclude,org.eclipse.jdt.internal.coompiler.parser.TypeConverter::* ...
  • 今天我們來安裝和測試一下php的多併發高性能網路通信擴展,這個擴展是使用C語音開發的,載入到PHP以後,在PHP的層面上實現了多併發非同步通信,模擬了go語音的很多特性,極大的拓寬了PHP的應用場景。 直接使用官網上的那句命令就可以,安裝swoole時可能會出現錯誤和卡住不動,多試幾次就能成功。pec ...
  • 假定有下麵這樣的列表: 編寫一個函數,它以一個列表值作為參數,返回一個字元串。該字元串包含所有表項,表項之間以逗號和空格分隔,併在最後一個表項之前插入 and。例如,將前面的 spam 列表傳遞給函數,將返回'apples, bananas, tofu, and cats'。但你的函數應該能夠處理傳 ...
  • 今日主要內容 正則表達式 logging模塊 一、正則表達式 (一)什麼是正則表達式 1. 正則表達式的定義: 是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字元串”,這個“規則字元串”用來表達對字元串的一種過濾邏輯。 簡單來說,我們使用正則表達式 ...
  • 由於JDK中提供的ByteBuffer無法動態擴容,並且API使用複雜等原因,Netty中提供了ByteBuf。Bytebuf的API操作更加便捷,可以動態擴容,提供了多種ByteBuf的實現,以及高效的零拷貝機制。 ByteBuf的操作 ByteBuf有三個重要的屬性:capacity容量,rea ...
  • 構建環境 macOS 10.13.6 JDK1.8 IntelliJ IDEA 2018.3.6 (Ultimate Edition) "Spring v5.1.9.RELEASE" Gradle 5.5.1。直接使用brew安裝Gradle 源碼構建 1.源碼導入 2.閱讀Spring源碼下的 i ...
  • 1 import random 2 3 def v_code(): 4 for i in range(5): 5 code1 = random.randrange(10) #生成一個隨機0-9隨機數字 6 code2 = random.choice(chr(random.randrange(65,9 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...