清理資料

Julia 中級

Anthony Markham

Quantitative Developer

檢視欄位資訊

  • 欄位名稱是你查看資料集時的第一件事。
  • 一般而言,欄位名稱應該可讀且精簡。
println(first(stock_data))
DataFrameRow
 Row | Date        Open     High     Low      Close    Adj Close  Volume
     | String15    Float64  Float64  Float64  Float64  Float64    Int64
<----|---------------------------------------------------------------------
   1 | 21/01/2022   164.42   166.33    162.3   162.41    161.473  122848900
Julia 中級

重新命名欄位

  • 若覺得不同的標籤更合適,可以重新命名欄位。
 Row | Date        Open     High     Low      Close    Adj Close  Volume
     | String15    Float64  Float64  Float64  Float64  Float64    Int64
<----|---------------------------------------------------------------------
   1 | 21/01/2022   164.42   166.33    162.3   162.41    161.473  122848900
  • 在這個例子中,Adj Close 含有空白,我們想避免這種情況。
rename!(stock_data, Dict(:Adj Close => :Adj_Close))
 Row | Date        Open     High     Low      Close    Adj_Close  Volume
     | String15    Float64  Float64  Float64  Float64  Float64    Int64
<----|---------------------------------------------------------------------
   1 | 21/01/2022   164.42   166.33    162.3   162.41    161.473  122848900
Julia 中級

描述並找出遺漏值

  • 遺漏值是資料中常見的不一致來源。
  • 資料遺漏可能有多種原因:

    • 量測錯誤
    • 抄錄錯誤
    • 刻意留白
  • describe 方法可用來快速找出 DataFrame 中的遺漏值。

println(describe(stock_data))
Julia 中級

描述遺漏值

  • describe() 提供整個 DataFrame 的總覽。
7×7 DataFrame
 Row | variable   mean       min        median     max        nmissing  eltype
     | Symbol     Union     Any          Union     Any        Int64     DataType
<--------------------------------------------------------------------------------
   1 | Date                  1/02/2022             9/12/2022         0  String15
   2 | Open       152.613    126.01     151.19     178.55            0  Float64
   3 | High       154.721    127.77     153.72     179.61            0  Float64
   4 | Low        150.529    124.17     149.34     176.7             0  Float64
   5 | Close      152.698    125.02     151.21     178.96            4  Union
   6 | Adj_Close  152.296    125.02     151.07     178.154           0  Float64
   7 | Volume     8.70851e7  35195900   8.22912e7  182602000         0  Int64
Julia 中級

移除遺漏值

  • 可以用 dropmissing 移除含遺漏值的列。
println(nrow(stock_data))
252
dropmissing!(stock_data, :"Close")
  • 接著再用 nrow() 確認已刪除 4 列。
println(nrow(stock_data))
248
Julia 中級

取代遺漏值

  • 直接刪除含遺漏值的列,往往不是可接受的方法。
  • 視資料情況,可以用替代值取代遺漏值。
replace!(stock_data[!, "Close"], missing => 130)
println(stock_data[[202, 227, 235, 240], :])
 Row | Date        Open     High     Low      Close     Adj Close  Volume
     | String15    Float64  Float64  Float64  Float64?  Float64    Int64
<----|-----------------------------------------------------------------------
   1 | 8/11/2022    140.41   141.43   137.49    130      139.5    89908500
   2 | 14/12/2022   145.35   146.66   141.16    130      143.21   82291200
   3 | 25/12/2022   130.92   132.42   129.64    130      131.86   63814900
   4 | 3/01/2023    130.28   130.9    124.17    130      125.07  112117500
  • 但用任意常數替換通常不正確。
Julia 中級

一起來練習吧!

Julia 中級

Preparing Video For Download...