數據分析之Pandas和Numpy學習筆記(持續更新)<1>

来源:https://www.cnblogs.com/xnchll/archive/2018/03/16/8586241.html
-Advertisement-
Play Games

pandas and numpy notebook 最近工作交接,整理電腦資料時看到了之前的基於Jupyter學習數據分析相關模塊學習筆記。想著拿出來分享一下,可是Jupyter導出來html文件,博客園不支持js註入,貼圖效果實在太差勁兒。所以只貼了內容,要是有需要文件原版(pdf、md、html ...


pandas and numpy notebook


       最近工作交接,整理電腦資料時看到了之前的基於Jupyter學習數據分析相關模塊學習筆記。想著拿出來分享一下,可是Jupyter導出來html文件,博客園不支持js註入,貼圖效果實在太差勁兒。所以只貼了內容,要是有需要文件原版(pdf、md、html等)可以在評論區說一下。        本系列是數據分析相關的,打算做一個持續連載,後邊便於自己系統查看和回顧。   另外,本片博客在github上有PDF版本,並且格式也很清爽,請轉https://github.com/xnchall/PandasAndNumpy/blob/master/pdAndNp-01.pdf
 

pandas和numpy學習系列,主要目的記錄學習中的亮點,以及熟悉對jupyter的使用!

In [3]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
1. Series是pandas最基本的1維數據形式,存儲內容的數據類型任意。pd.Series(data, index=[])data可為字典、np中相關對象。index為數據索引,可以是列表。當有個性化索引時,會按照輸入索引與data匹配數據,如果data沒有匹配到就是設置為 預設值NaN In [4]:
data = {"a":12, "b":55, "c":50}
pd.Series(data)
Out[4]:
a    12
b    55
c    50
dtype: int64
In [5]:
data1 =  {'a' : 10, 'b' : 20, 'c' : 30}
pd.Series(data1, index=['b', 'c', 'a', 'd'])
Out[5]:
b    20.0
c    30.0
a    10.0
d     NaN
dtype: float64

2. ndarray是numpy中定義的多維數組[矩陣模塊]。ndarray對象可以作為pandas中Series的data數據源進行轉換。

ndarray 的一個特點是同構:即其中所有元素的類型必須相同。
NumPy數組的維數稱為秩(rank),一維數組的秩為1,二維數組的秩為2,以此類推。在NumPy中,每一個線性的數組稱為是一個軸(axes),秩其實是描述軸的數量。比如說,二維數組相當於是一個一維數組,而這個一維 數組中每個元素又是一個一維數組。所以這個一維數組就是NumPy中的軸(axes),而軸的數量——秩,就是數組的維數。

In [6]:
data2 = np.random.randn(5)#一維隨機數列表
index = ['a', 'b', 'c', 'd', 'e'] # 指定索引
pd.Series(data2, index)
Out[6]:
a    0.483059
b    0.104168
c    0.413886
d   -1.115421
e    1.306849
dtype: float64

2.1 介紹一下Numpy的ndarray對象

In [99]:
temp = [[1, 9, 6],[2, 8, 5],[3, 7, 4]]
x = np.array(temp)
print(x.T)#獲得x的轉置矩陣
print(x.size)#獲得數組中元素的個數
print(x.ndim) #獲得數組的維數
print(x.shape)  #獲得數組的(行數,列數))
x.flags  #返回數組內部的信息
x.flat #將多維數組轉化為1維數組  [1,9,6,2,8,5,3,7,4]
# for i in x.flat:
#      print(i)
# x.flat = 2;x#將值賦給1維數組,再轉化成有原有數組的大小形式
y=x.reshape(1,9)#數組轉化為n行m列
print(y)
y.base#獲得該數組基於另外一個對象數組而來,如下,y是根據x而來
np.array(range(15)).reshape(3,5)
[[1 2 3]
 [9 8 7]
 [6 5 4]]
9
2
(3, 3)
[[1 9 6 2 8 5 3 7 4]]
Out[99]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

2.2 利用ndarray創建矩陣或者多維數組

In [93]:
np.ndarray(shape=(2,3), dtype=int, buffer=np.array([1,2,3,4,5,6,7]), offset=0, order="C")
#創建多維數組形狀shape,
#數據類型dtype,
#初始化數組buffer
#offset含義是    buffer中用於初始化數組的首個數據的偏移
#order含義是   'C':行優先;'F':列優先
#order參數的C和F是numpy中數組元素存儲區域的兩種排列格式,即C語言格式和Fortran語言格式。
Out[93]:
array([[1, 2, 3],
       [4, 5, 6]])
 

2.3 ones、zeros、empty系列函數

某些時候,我們在創建數組之前已經確定了數組的維度以及各維度的長度。這時我們就可以使用numpy內建的一些函數來創建ndarray。 例如:函數ones創建一個全1的數組、函數zeros創建一個全0的數組、函數empty創建一個內容隨機的數組,在預設情況下,用這些函數創建的數組的類型都是float64,若需要指定數據類型,只需要閑置dtype參數即可

In [131]:
#可以通過元組指定數組形狀
a = np.ones(shape=(2,3))
print(a.dtype)
 #也可以通過列表來指定數組形狀,同時這裡指定了數組類型
b = np.zeros(shape=[3,2], dtype=np.int64)
b.dtype
#函數empty創建一個內容隨機的數組
c = np.empty((4,2))
c.dtype
#其他用法
f=[[1,2,3], [3,4,5]]
np.zeros_like(f)
np.ones_like(f)
np.empty_like(f)
float64
Out[131]:
array([[1, 2, 3],
       [3, 4, 5]])
 

2.4 arange、linspace與logspace

1> arange函數類似python中的range函數,通過指定初始值、終值以及步長(預設步長為1)來創建數組
2> linspace函數通過指定初始值、閥值以及元素個數來創建一維數組
3> logspace函數與linspace類似,只不過它創建的是一個等比數列,同樣的也是一個一維數組

In [133]:
np.arange(0, 10, 2)
Out[133]:
array([0, 2, 4, 6, 8])
In [145]:
np.linspace(0,12, 4)
Out[145]:
array([ 0.,  4.,  8., 12.])
In [139]:
np.logspace(0,2,3)
Out[139]:
array([  1.,  10., 100.])

2.5 fromstring、fromfunction系列函數

1> fromstring函數從字元串中讀取數據並創建數組
2> fromfunction函數由第一個參數作為計算每個數組元素的函數(函數對象或者lambda表達式均可),第二個參數為數組的形狀

In [149]:
str1 = "1,2,3,4,5"
np.fromstring(str1, dtype=np.int64, sep=",")
  Out[149]:
array([1, 2, 3, 4, 5], dtype=int64)
In [152]:
str2 = "1.01 2.23 3.53 4.76"
np.fromstring(str2, dtype=np.float64, sep=" ")
Out[152]:
array([1.01, 2.23, 3.53, 4.76])
In [153]:
def func(i, j):
    return (i+1)*(j+1)
In [155]:
np.fromfunction(func, (2,3))#dtype=np.float64
Out[155]:
array([[1., 2., 3.],
       [2., 4., 6.]])
In [156]:
np.fromfunction(lambda i,j: i+j, (3,3), dtype=int)
Out[156]:
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])
 

2.6 ndarray創建特殊的二維數組

np中matrix是繼承於採用了ndarray建立的二維數組進行了封裝的子類。特別註意,關於二維數組的創建,依舊是一個ndarray對象,而不是matrix對象。

In [178]:
arr = np.arange(9).reshape((3,3))
print(arr)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

diag函數返回一個矩陣的對角線元素、或者創建一個對角陣,對角線由參數k控制 [這裡的k就是列的索引]

In [179]:
np.diag(arr)#array([0, 4, 8])
np.diag(arr, k=1)#array([1, 5])
np.diag(arr, k=-1)#array([3, 7])
np.diag(np.diag(arr))#array([[0, 0, 0],    [0, 4, 0],    [0, 0, 8]])
np.diag(np.diag(arr), k=1)
  Out[179]:
array([[0, 0, 0, 0],
       [0, 0, 4, 0],
       [0, 0, 0, 8],
       [0, 0, 0, 0]])
 

diagflat函數以輸入作為對角線元素,創建一個矩陣,對角線有參數k控制

In [182]:
np.diagflat([1,2,3], k=1)
Out[182]:
array([[0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3],
       [0, 0, 0, 0]])
In [187]:
np.diagflat([[1,2],[3,4]])
Out[187]:
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

tri函數生成一個矩陣,在某對角線以下元素全為1,其餘全為0,對角線由參數k控制

In [198]:
np.tri(3,4, k=1, dtype=int)
Out[198]:
array([[1, 1, 0, 0],
       [1, 1, 1, 0],
       [1, 1, 1, 1]])

tril函數輸入一個矩陣,返回該矩陣的下三角矩陣,下三角的邊界對角線由參數k控制

In [209]:
print(arr)
print("-----------")
print(np.tril(arr, k=0))
print("-----------")
print(np.tril(arr, k=1))
[[0 1 2]
 [3 4 5]
 [6 7 8]]
-----------
[[0 0 0]
 [3 4 0]
 [6 7 8]]
-----------
[[0 1 0]
 [3 4 5]
 [6 7 8]]

triu函數與tril類似,返回的是矩陣的上三角矩陣

In [210]:
np.triu(arr, k=1)
Out[210]:
array([[0, 1, 2],
       [0, 0, 5],
       [0, 0, 0]])

vander函數輸入一個一維數組,返回一個範德蒙矩陣

 

範德蒙行列式image.png

In [215]:  
np.vander([2,3,4,5])
Out[215]:
array([[  8,   4,   2,   1],
       [ 27,   9,   3,   1],
       [ 64,  16,   4,   1],
       [125,  25,   5,   1]])
In [217]:
np.vander([2,3,4,5],N=2)
Out[217]:
array([[2, 1],
       [3, 1],
       [4, 1],
       [5, 1]])

2.7 ndarray元素訪問

2.7.1 一維數組
一維的ndarray數組可以使用python內置list操作方式
array[beg:end:step]
beg: 開始索引
end: 結束索引(不包含這個元素)
step: 間隔
需要註意的是:
beg可以為空,表示從索引0開始;
end也可以為空,表示達到索引結束(包含最後一個元素);
step為空,表示間隔為1;
負值索引:倒數第一個元素的索引為-1,向前以此減1
負值step:從後往前獲取元素
  In [218]:
x1 = np.arange(16)*4#list每個元素*4,list規模不變
In [224]:
x1[0:10:3]
Out[224]:
array([ 0, 12, 24, 36])
In [225]:
x1[::-1]#倒置列表---pythonic
Out[225]:
array([60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12,  8,  4,  0])
特別註意的是,ndarray中的切片返回的數組中的元素是原數組元素的索引,對返回數組元素進行修改會影響原數組的值
  In [226]:
x1[:-1]
Out[226]:
array([ 0,  4,  8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56])
In [229]:
y = x1[::-1]
y
Out[229]:
array([60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12,  8,  4,  0])
In [230]:
y[0]=9999
y
Out[230]:
array([9999,   56,   52,   48,   44,   40,   36,   32,   28,   24,   20,
         16,   12,    8,    4,    0])
In [232]:
x1
Out[232]:
array([   0,    4,    8,   12,   16,   20,   24,   28,   32,   36,   40,
         44,   48,   52,   56, 9999])
仔細觀察上邊y和x1操作變化!!
除了上述與list相似的訪問元素的方式,ndarray還可以通過索引列表來訪問,例如:
  In [234]:
x1[[0,2,4,5]]##指定獲取索引為0,2,4,5的元素
Out[234]:
array([ 0,  8, 16, 20])
2.7.2 多維數組
多維ndarray中,每一維都叫一個軸(axis)。
在ndarray中軸axis是非常重要的,有很多對於ndarray對象的運算都是基於axis進行,比如sum、mean等都會有一個axis參數(針對對這個軸axis進行某些運算操作)
對於多維數組,因為每一個軸都有一個索引,所以這些索引由逗號進行分割
In [240]:
x2 = np.arange(0,100,5).reshape(4,5)
x2
Out[240]:
array([[ 0,  5, 10, 15, 20],
       [25, 30, 35, 40, 45],
       [50, 55, 60, 65, 70],
       [75, 80, 85, 90, 95]])
In [241]:
x2[1,2]#第1行,第2列
Out[241]:
35
In [243]:
x2[1:4, 3]#第1行到第4行中所有第3列的元素,實際是第1、2、3行
Out[243]:
array([40, 65, 90])
In [245]:
x2[:, 4]      #所有行中的所有第4列的元素
Out[245]:
array([20, 45, 70, 95])
In [246]:
x2[0:3, :]    #第0行到第三行中所有列的元素,實際是第0、1、2行
Out[246]:
array([[ 0,  5, 10, 15, 20],
       [25, 30, 35, 40, 45],
       [50, 55, 60, 65, 70]])
需要註意的是:
1> 當提供的索引比軸數少時,缺失的索引表示整個切片(只能缺失後邊的軸)
In [247]:
x2[1:3]
#確實第二個軸,就是只有x軸,沒有y軸。
Out[247]:
array([[25, 30, 35, 40, 45],
       [50, 55, 60, 65, 70]])
2> 當提供的索引為:時,也表示整個切片
  In [250]:
x2[:, 0:4]#:標識兩個軸全部元素,列軸(y軸)範圍是0-4
Out[250]:
array([[ 0,  5, 10, 15],
       [25, 30, 35, 40],
       [50, 55, 60, 65],
       [75, 80, 85, 90]])
3> 可以使用...代替幾個連續的:索引
In [253]:
x2[..., 0:4]
Out[253]:
array([[ 0,  5, 10, 15],
       [25, 30, 35, 40],
       [50, 55, 60, 65],
       [75, 80, 85, 90]])

一維和多維ndarray數組都可以支持迭代!只不過高維迭代需要使用flat做一個降維的操作!

In [255]:
	   

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

-Advertisement-
Play Games
更多相關文章
  • 2. 服務的路由和負載均衡 1.2.1 服務化的演變 SOA設計思想:分散式應用架構體系對於業務邏輯復用的需求十分強烈,上層業務都想借用已有的底層服務來快速搭建更多、更豐富的應用,降低新業務開展的人力和時間成本,快速滿足瞬息萬變的市場需求。公共的業務被拆分出來行程可共用的服務,最大程度的保障了代碼和 ...
  • 1.1 基於TCP協議的RPC 1.1.1 RPC名詞解釋 RPC的全稱是Remote Process Call,即遠程過程調用,RPC的實現包括客戶端和服務端,即服務調用方和服務提供方。服務調用方發送RPC請求到服務提供方,服務提供方根據請求的參數執行請求方法,並將結果返回給服務調用方,一次RPC ...
  • 我們公司有個很牛逼的女生,是我們項目組的核心人物之一,一般我有啥不懂的就問她,就在昨天我們討論一件關於緩存的事情,我覺得在類中,用static定義的引用變數就是緩存(因為在以前的公司就這麼叫),而她認為這並不是,這個只是存在記憶體里的,這隻是一個成員變數,所以他覺得只能叫變數,牛逼的大佬們你們覺得叫什 ...
  • 1.下載Java 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安裝到電腦 2.配置環境 在 控制面板\所有控制面板項\系統 高級系統設置->環境變數 JAVA_HOME ...
  • 換了一家公司,感覺好對不起以前那些領導的栽培和培養啊,但是沒辦法,我真的受不了那些煙味和每天加班到好晚好晚的工作環境,也許這就是所謂的不合吧。。 到了新的一家公司,明顯比剛出來的時候要好太多,別人一說什麼東西我都會有反應,而且不會一臉懵b的問別人還不知道別人說了些啥。。感覺👌。 閑話不多說,先看在 ...
  • 本文較為詳細地介紹了Scala的理論,並結合相應的代碼進行解讀與實踐。文章內容主要包含Scala的簡介,數據類型,函數(函數定義、匿名函數、嵌套函數、迴圈語句等),集合(List、Tuple、Map),伴生對象,trait,Actor,隱式轉換,JDBC等。 ...
  • 最近到廣州某建站互聯網公司面試,當時面試官問假設有兩個字元串String a="abc",String b = "abc";問輸出a==b是true還是false。我當時毫不猶豫答了true,然後根據字元串常量池的知識點結合jvm的記憶體模型講解,然而他卻跟我說是false,說這是最基本的問題。我當時 ...
  • 前言 之前做過一個JavaScript版本的2048游戲,最近在學習C++,昨天晚上突然心血來潮,想用C++來實現,因為核心演算法已十分理解,所以兩個小時擼出來一個C++的簡易版本。 簡介 二維數組遍歷,C++基本數據類型,string類,控制結構,函數。 本方法不涉及指針以及面向對象思想,所以可作為 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...