數據分析之numpy使用

来源:https://www.cnblogs.com/ivanlee717/archive/2022/12/15/16985422.html
-Advertisement-
Play Games

data analysis 什麼是數據分析 是把隱藏在一些看似雜亂無章的數據背後的信息提煉出來,總結出所研究對象的內在規律 使得數據的價值最大化 分析用戶的消費行為 制定促銷活動的方案 制定促銷時間和粒度 計算用戶的活躍度 分析產品的回購力度 分析廣告點擊率 決定投放時間 制定廣告定向人群方案 決定 ...


data analysis

什麼是數據分析

  • 是把隱藏在一些看似雜亂無章的數據背後的信息提煉出來,總結出所研究對象的內在規律
    • 使得數據的價值最大化
      • 分析用戶的消費行為
        • 制定促銷活動的方案
        • 制定促銷時間和粒度
        • 計算用戶的活躍度
        • 分析產品的回購力度
      • 分析廣告點擊率
        • 決定投放時間
        • 制定廣告定向人群方案
        • 決定相關平臺的投放
      • ......
  • 數據分析是用適當的方法對收集來的大量數據進行分析,幫助人們做出判斷,以便採取適當的行動
    • 保險公司從大量賠付申請數據中判斷哪些為騙保的可能
    • 支付寶通過從大量的用戶消費記錄和行為自動調整花唄的額度
    • 短視頻平臺通過用戶的點擊和觀看行為數據針對性的給用戶推送喜歡的視頻

數據分析實現流程

  • 提出問題
  • 準備數據
  • 分析數據
  • 獲得結論
  • 成果可視化

開發環境介紹

  • anaconda
    • 官網:https://www.anaconda.com/
    • 集成環境:集成好了數據分析和機器學習中所需要的全部環境
      • 註意:
        • 安裝目錄不可以有中文和特殊符號
  • jupyter
    • jupyter就是anaconda提供的一個基於瀏覽器的可視化開發工具
  • jupyter的基本使用
    • 啟動:在終端中錄入:jupyter notebook的指令,按下回車
    • 新建:
      • python3:anaconda中的一個源文件
      • cell有兩種模式:
        • code:編寫代碼
        • markdown:編寫筆記
    • 快捷鍵:
      • 添加cell:a或者b
      • 刪除:x
      • 修改cell的模式:
        • m:修改成markdown模式
        • y:修改成code模式
      • 執行cell:
        • shift+enter
      • tab:自動補全
      • 代開幫助文檔:shift+tab

數據分析三劍客

  • numpy
  • pandas(重點)
  • matplotlib

numpy

  • NumPy(Numerical Python) 是 Python 語言中做科學計算的基礎庫。重在於數值計算,也是大部分Python科學計算庫的基礎,多用於在大型、多維數組上執行的數值運算。

numpy的創建

  • 使用np.array()創建
  • 使用plt創建
  • 使用np的routines函數創建

使用numpy創建一位數組

>>> import numpy as np
>>> arr = np.array([1,2,3])
>>> arr
array([1, 2, 3])

使用numpy創建二維數組

>>> arr = np.array([[1,2,3],[4,5,6]])
>>> arr
array([[1, 2, 3],
       [4, 5, 6]])
  • 數組和列表的區別是什麼?

    >>> arr = np.array([1,1.27,'regina'])
    >>> arr
    array(['1', '1.27', 'regina'], dtype='<U32')
    
    • 數組中存儲的數據元素類型必須是統一類型
    • 優先順序:
      • 字元串 > 浮點型 > 整數
  • 將外部的一張圖片讀取載入到numpy數組中,然後嘗試改變數組元素的數值查看對原始圖片的影響

    import matplotlib.pyplot as plt
    img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG')
    plt.imshow(img_arr) #將numpy數組進行可視化展示
    

    image-20221215142941953

如果每一個像素塊的值減100

image-20221215145605136

運用函數創建數組

  • zero()
  • ones()
  • linspace()
  • arange()
  • random系列
  • ones

    np.ones(shape(3,4))
    array([[1., 1., 1., 1.],
           [1., 1., 1., 1.],
           [1., 1., 1., 1.]])
    
  • Linspace(): 一維的等差數列的數組

    >>> np.linspace(0,100,num=20)
    array([  0.        ,   5.26315789,  10.52631579,  15.78947368,
            21.05263158,  26.31578947,  31.57894737,  36.84210526,
            42.10526316,  47.36842105,  52.63157895,  57.89473684,
            63.15789474,  68.42105263,  73.68421053,  78.94736842,
            84.21052632,  89.47368421,  94.73684211, 100.        ])
    
  • arange():一維的等差數列

    >>> np.arange(0,50,step=3)
    array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48])
    
  • Random():返回由size決定的形狀數組

    >>> np.random.randint(0,100,size=(3,5))
    array([[88, 56, 60, 56,  9],
           [ 9,  0, 32, 31, 32],
           [78, 10, 21, 78, 98]])
    

numpy的常用屬性

  • shape 形狀
  • ndim 維度
  • size 總共個數
  • dtype 元素類型

image-20221215151901937

numpy的數據類型

  • array(dtype=?):可以設定數據類型
  • arr.dtype = '?':可以修改數據類型
名稱 描述
bool_ 布爾型數據類型(True 或者 False)
int_ 預設的整數類型(類似於 C 語言中的 long,int32 或 int64)
intc 與 C 的 int 類型一樣,一般是 int32 或 int 64
intp 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8 位元組(-128 to 127)
int16 整數(-32768 to 32767)
int32 整數(-2147483648 to 2147483647)
int64 整數(-9223372036854775808 to 9223372036854775807)
uint8 無符號整數(0 to 255)
uint16 無符號整數(0 to 65535)
uint32 無符號整數(0 to 4294967295)
uint64 無符號整數(0 to 18446744073709551615)
float_ float64 類型的簡寫
float16 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_ complex128 類型的簡寫,即 128 位複數
complex64 複數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128 複數,表示雙 64 位浮點數(實數部分和虛數部分)

numpy 的數值類型實際上是 dtype 對象的實例,並對應唯一的字元,包括 np.bool_,np.int32,np.float32,等等。

image-20221215152544146

numpy的索引和切片操作(重點)

  • 索引操作和列表同理

    >>> arr = np.random.randint(1,100,size=(5,6))
    >>> arr
    array([[49, 26,  2, 75, 91, 93],
           [68, 49, 40, 40, 51, 54],
           [39, 49, 16, 93, 45,  2],
           [13, 43, 67, 52,  2, 46],
           [74, 20,  9, 73, 91, 21]])
    >>> arr[1]
    array([68, 49, 40, 40, 51, 54])
    >>> arr[[1,3,4]]
    array([[68, 49, 40, 40, 51, 54],
           [13, 43, 67, 52,  2, 46],
           [74, 20,  9, 73, 91, 21]])
    
  • 切片操作

    • 切出前兩行數據

      >>> arr[0:2]
      array([[49, 26,  2, 75, 91, 93],
             [68, 49, 40, 40, 51, 54]])
      
      
    • 切出前兩列數據

      >>> arr[:,0:2]
      array([[49, 26],
             [68, 49],
             [39, 49],
             [13, 43],
             [74, 20]])
      
    • 切出前兩行的前兩列的數據

      >>> arr[0:2,0:2]
      array([[49, 26],
             [68, 49]])
      
    • 數組行翻轉

      >>> arr[::-1]
      array([[74, 20,  9, 73, 91, 21],
             [13, 43, 67, 52,  2, 46],
             [39, 49, 16, 93, 45,  2],
             [68, 49, 40, 40, 51, 54],
             [49, 26,  2, 75, 91, 93]])
      
    • 數組列翻轉

      >>> arr[::,::-1]
      array([[93, 91, 75,  2, 26, 49],
             [54, 51, 40, 40, 49, 68],
             [ 2, 45, 93, 16, 49, 39],
             [46,  2, 52, 67, 43, 13],
             [21, 91, 73,  9, 20, 74]])
      
    • 練習:將一張圖片上下左右進行翻轉操作

      import matplotlib.pyplot as plt
      img_arr = plt.imread('/Users/ivanlee/Desktop/女明星/IMG_1473.JPG')
      plt.imshow(img_arr) #將numpy數組進行可視化展示
      

      image-20221215155218979

      image-20221215155300994

    • 練習:將圖片進行指定區域的裁剪

      image-20221215155423406

numpy變形

  • reshape操作

    image-20221215160112165

級聯操作

- 將多個numpy數組進行橫向或者縱向的拼接
  • axis軸向的理解

    • 0:列
    • 1:行

    image-20221215160732348

  • 問題:

    • 級聯的兩個數組維度一樣,但是行列個數不一樣會如何?

      答:不一樣就無法拼接

  • 對圖進行拼接

    arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=0)
    plt.imshow(arr_3)
    

    image-20221215161140845

    arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
    plt.imshow(arr_3)
    

    image-20221215161211392

常用的聚合操作

  • sum,max,min,mean

    image-20221215161630871

常用的數學函數

  • NumPy 提供了標準的三角函數:sin()、cos()、tan()
  • numpy.around(a,decimals) 函數返回指定數字的四捨五入值。
    • 參數說明:
      • a: 數組
      • decimals: 舍入的小數位數。 預設值為0。 如果為負,整數將四捨五入到小數點左側的位置

常用的統計函數

  • numpy.amin() 和 numpy.amax(),用於計算數組中的元素沿指定軸的最小、最大值。
  • numpy.ptp():計算數組中元素最大值與最小值的差(最大值 - 最小值)。
  • numpy.median() 函數用於計算數組 a 中元素的中位數(中值)
  • 標準差std():標準差是一組數據平均值分散程度的一種度量。
    • 公式:std = sqrt(mean((x - x.mean())**2))
    • 如果數組是 [1,2,3,4],則其平均值為 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],並且其平均值的平方根除以 4,即 sqrt(5/4) ,結果為 1.1180339887498949。
  • 方差var():統計中的方差(樣本方差)是每個樣本值與全體樣本值的平均數之差的平方值的平均數,即 mean((x - x.mean())** 2)。換句話說,標準差是方差的平方根

image-20221215162950711

矩陣相關

  • NumPy 中包含了一個矩陣庫 numpy.matlib,該模塊中的函數返回的是一個矩陣,而不是 ndarray 對象。一個 的矩陣是一個由行(row)列(column)元素排列成的矩形陣列。

  • numpy.matlib.identity() 函數返回給定大小的單位矩陣。單位矩陣是個方陣,從左上角到右下角的對角線(稱為主對角線)上的元素均為 1,除此以外全都為 0。

eye返回一個標準的單位矩陣

np.eye(6)

image-20221215163306006

T 轉置

image-20221215163349710

矩陣相乘

  • numpy.dot(a, b, out=None)
    • a : ndarray 數組
    • b : ndarray 數組

image-20221215163709817

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16985422.html


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

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 相信我們在開發各類小程式或者H5,甚至APP時,會把uni-app作為一個技術選型,其優點在於一鍵打包多端運行,較為強大的跨平臺的性能。但是,只要開發就免不了使用插件,所以Dcloud為了方便開發者同時也為註入活力,開放了uni的插件市場 ...
  • 01-骰子游戲 游戲出自Udemy的JS課程中提到的一個游戲,課程主要是對JS部分進行詳細的從0開始的講解,本篇文章是對整個游戲的分析,包括HTMK,CSS和JS,也主要對JS進行刨析。 游戲鏈接:https://pig-game-v2.netlify.app/ 游戲規則:開始玩家1點擊ROLL D ...
  • 自研api服務註冊中心,模擬eureka的實現原理實現,相容舊feign的調用模式。支持服務故障轉移,負載均衡,註冊中心,rpc調用。整體代碼簡單,非常容易定製化改動。支持HttpUrlConnection,HttpClient建立的連接池及擴展。 1)支持輪訓模式負載均衡及擴展。 2)支持消費者端... ...
  • 函數對象 =》C語言中的函數指針 函數對象 儘管函數指針被廣泛用於實現函數回調,但C++還提供了一個重要的實現回調函數的方法,那就是函數對象。函數對象(也稱“函數符”)是重載了“()”操作符的普通類對象。因此從語法上講,函數對象與普通的函數行為類似。 用函數對象代替函數指針有幾個優點: 首先,因為對 ...
  • 隨著業務發展,我們的系統可能面臨著改造升級。改造過程中往往避免不了數據模型的變動,這時候需要將老表老模型遷移到新表新模型,並且還要保證歷史數據的遷移以及映射。 這就帶來了一個問題,老表老模型如何遷移到新表新模型,以下是常用的兩種方案 | 方案 | 是否支持回切 | 優點 | 缺點 | | | | | ...
  • 標準容器->容器適配器 什麼叫適配器? 1:適配器底層沒有自己的數據結構,它是另外一個容器的封裝,它的方法, 全部由底層依賴的容器進行實現的.像標準庫中的stack 如下圖 2:沒有實現自己的迭代器 容器適配器 stack,queue,priotity_queue 沒有迭代器 stacks1; 棧, ...
  • 1.控制語句 1.1.判斷語句 if...elif...else #if 語句(比較/邏輯/成員均可) #字元串/列表/元組/字典 為空返回False,非空返回True #條件成立返回True,不成立返回False ar = "" list = [] tuple = () dic = {} if a ...
  • 如何開發微信小程式 小程式:學習微信開發的語言(前端html、css、js、vue.js) 微信開發者工具 API:restful介面(Python+django+drf框架)。 pycharm 環境搭建 python環境搭建 虛擬環境 django drf pycharm 小程式環境 在微信公眾平 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...