【資料清洗案例】台股 3666.TWO「六位數股價」事件與減資錯位全面修正

更新 發佈閱讀 33 分鐘
投資理財內容聲明



我在跑台股 yearK 統計時,發現一筆堪稱「驚悚」的異常:


某檔股票的收盤價出現六位數(30 萬元)以上


這篇不只要解剖這筆異常,更要講清楚——


其實,這不是孤例。 任何減資、拆股、反向分割的股票,都可能出現同樣錯位。


我們會一起看真實案例、驗證證據, 並展示一整套能自動清洗所有日K 的通用解法。



🧩 一、問題緣起:六位數股價是怎麼來的?

我在 yearK_TW.parquet 加入了這段檢查:

mask_high = (df[["開盤","最高","最低","收盤"]] >= 100000).any(axis=1)
df_high = df.loc[mask_high]

結果全市場只有一檔命中:


📈 3666.TWO 光燿科技


打開它的日K CSV,看起來是這樣的:

+------------+---------+---------+---------+---------+
| Date | Open | High | Low | Close |
+------------+---------+---------+---------+---------+
| 2022-03-04 | 302,500 | 302,500 | 297,500 | 300,000 |
| 2022-04-28 | 205,500 | 210,000 | 205,500 | 209,000 |
| 2022-05-05 | 20.9 | 21.7 | 20.9 | 21.6 |
+------------+---------+---------+---------+---------+

前一天還在 20 萬元,隔天就變成 20 元──縮小了一萬倍。


這不是爬蟲錯誤,而是真實的公司行為



🧾 二、查證事件:2022-05-05 減資 99.99%

查公開資訊觀測站公告:

光燿科技股份有限公司  
減資比率:99.99%
減資後股本:10
原因:為改善股東權益結構,辦理減資彌補虧損。
日期:202255

Yahoo Finance 對應記錄:

Stock Splits = 0.0001

代表「1 股 → 0.0001 股」,也就是1:10000 減資


因此減資前的 300,000 元其實等價於減資後的 30 元。


修正前後比對:

+------------+--------------+--------------+
| 日期 | 修正前收盤 | 修正後收盤 |
+------------+--------------+--------------+
| 2022-03-04 | 300,000 | 30.00 |
| 2022-04-28 | 209,000 | 20.90 |
| 2022-05-05 | 21.65 | 21.65 |
+------------+--------------+--------------+

⚙️ 三、清洗方式:依 Stock Splits 還原名目價

Yahoo 給的原始資料是「事件前後不對齊」的價位。


我們只要依據 Stock Splits 修正即可。


if stock_id == "3666.TWO":
s = pd.to_numeric(df["Stock Splits"], errors="coerce").fillna(0).replace(0,1.0)
adj = s[::-1].cumprod()[::-1]
for col in ["Open","High","Low","Close"]:
df[col] = df[col] * adj.values

這段會:

  • 自動讀出 Yahoo 的 0.0001
  • 從該日往前把價位乘上 10,000
  • 完美還原成名目價(與玩股網顯示一致)

🧮 四、完整清洗程式:自動備份與回復

我將這邏輯包成工具 fix_3666_split.py,步驟如下:

1️⃣ 自動備份原始日K → /dayK_backup/


2️⃣ 偵測減資比例 → 自動調整價格 3️⃣ 覆寫回原資料夾 4️⃣ 輸出對照檔到 /dayK_fixed/


演算法概念:

pivot = 2022-05-05
估算前後中位數比值
若相差超過 20 倍,自動從 {10,100,1000,10000} 挑最適 scale
只對 pivot 之前的資料除以該 scale

🧠 五、這不是個案:減資與拆股普遍存在

不只光燿科技,還有很多公司也曾經發生過減資或反向拆股。


下面是部分實例:


+-----------+------------+-----------+-----------+
| 股票代號 | 事件日期 | 減資比率 | 修正倍率 |
+-----------+------------+-----------+-----------+
| 3666.TWO | 2022-05-05 | 99.99% | ×10,000 |
| 4192.TWO | 2023-07-10 |73.3% | ×3.74 |
| 其他 ||| 無需修正 |
+-----------+------------+-----------+-----------+

Yahoo 的資料行為不一致:

  • 有些股票會標 Stock Splits
  • 有些不標,但隔夜價格跳變非常明顯
    → 我後來就是靠「隔夜跳變偵測法」找到這些漏網之魚。

🛠️ 六、系統化清洗:全市場批次修正

我寫了一支自動化程式來掃描所有日K檔,流程如下:

1️⃣ 先看 Stock Splits 欄
2️⃣ 若無,檢查隔夜跳變(±80%
3️⃣ 對事件當天以前的 OHLC 除以因子
4️⃣ 輸出修正版到 /dayK_fixed_by_corpaction/
5️⃣ 生成 corpaction_fix_manifest.csv 記錄所有事件

清單長這樣:

+-----------+-----------+--------------------------+-----------+
| 股票代碼 | 事件數量 | 修正事件 | 備註 |
+-----------+-----------+--------------------------+-----------+
| 3666.TWO | 1 | 2022-05-05 ×10000 | 減資彌補虧損 |
| 4192.TWO | 1 | 2023-07-10 ×3.743 | 減資 |
| 其他 | 0 || 無事件 |
+-----------+-----------+--------------------------+-----------+

ETF、槓桿與反向商品(006xx、R、L)會自動跳過,不誤判。


🧮 七、為什麼週、月、年K分布圖不受影響?

這是很多人問的關鍵問題:


「既然日K 有錯,那我之前畫的分布圖是不是都錯?」


答案是──沒有錯、也不需要重跑。

原因很簡單:

1️⃣ 我的週/月/年K 程式在遇到極端跳變(例如減資或復牌跳空)時,


 就會自動略過該週或該月的資料


2️⃣ 換句話說,這些減資或拆股的異常區間,


本來就沒有被算進分布統計。


3️⃣ 所以週K/月K/年K的漲幅分布圖仍然正確。


 這次修正只讓「日K」回到一致口徑。


✅ 結論:


週月年K分布圖不受影響,因為有巨大跳空的週期早已被跳過。



🧠 八、通用邏輯摘要(可複用)

df["prev_close"] = df["Close"].shift(1)
df["overnight_ratio"] = df["Open"] / df["prev_close"]
mask = np.abs(np.log(df["overnight_ratio"])) >= np.log(1.8)
events = df.loc[mask, ["Date", "overnight_ratio"]]

這段能自動找出「隔夜大跳變」的公司行為事件。


搭配 Stock Splits 欄,就能完整覆蓋所有減資與拆股案例。



🧾 九、結語:從異常發現到系統修正

這次的 3666.TWO 六位數事件,


讓我看見了金融資料裡最經典的陷阱——


價格異常,並不一定是錯誤。


很多時候,那是公司行為留下的痕跡。


我後來才明白,修正資料不是為了「讓數字好看」,


而是要讓統計能更真實地反映市場。 從一檔股票的異常,慢慢延伸到全市場的自動化檢查、回溯調整, 這整段過程,幾乎都是我利用下班時間一點一滴摸出來的。 不是專業量化機構,也沒有昂貴資料庫, 只有一台電腦、公開資料,以及對真實的好奇心。


本書採用 Yahoo Finance 公開資料

經過多層清洗與減資、拆股回溯調整後製成。 因為這是一般人也能免費取得的資料來源, 所以部分個股的最高價,可能與券商軟體或專業行情服務略有差異。 這些差異主要來自資料端對公司行為(例如合併、分割、除權息)的處理方式不同。

不過這些小落差不會影響統計結果——

不論是年度漲幅、追高報酬,或整體分布趨勢, 都仍然能夠真實反映市場的集體價格變化。

換句話說,這是一份「普通上班族也能自己做的量化研究」。

只要肯花時間學、願意多試幾次, 就能用免費的公開資料看見市場的節奏。 當你看懂那些波動背後的規律時, 那一刻,其實就已經完成了屬於自己的投資回測。

如下是程式碼


# -*- coding: utf-8 -*-

"""

批次修正:多市場日K 減資/拆股回溯調整 → 轉回「未調整名目價」(玩股口徑)

支援市場:TW / CN / HK / US / JP / KR

- 掃描各市場 dayK/*.csv

- 優先使用 Stock Splits;否則自動偵測隔夜巨大跳變 + 持續性驗證

- 事件「當天及以前」OHLC 均除以 factor

- 自動跳過 ETF/槓桿/反向商品

- 最終輸出:dayK_fixed_by_corpaction/*.csv + corpaction_fix_manifest_{MARKET}.csv

- QA 自檢:1/1、週日

- 新增:tqdm 進度條 + 各市場計時摘要

"""



import os, re, glob, time, warnings

import numpy as np

import pandas as pd

from tqdm import tqdm

from concurrent.futures import ThreadPoolExecutor, as_completed



warnings.filterwarnings("ignore", category=FutureWarning)



# ========== 基本設定 ==========

MARKETS = ["tw-share", "cn-share", "hk-share", "us-share", "jp-share", "kr-share"]

BASE_DIR = "/content/drive/MyDrive/各國股票檔案"



THRESH_LOG  = np.log(1.8)

MAX_FACTOR  = 50.0

MIN_FACTOR  = 1.2

MIN_DAYS_BEFORE = 10

WIN = 3

EPS = 0.06

SKIP_ETF = True



# ========== ETF/槓桿判斷 ==========

def looks_like_etf_or_leveraged(code: str) -> bool:

    digits = re.sub(r"\D", "", code)

    if re.match(r"^00\d{3,}$", digits):

        return True

    if re.search(r"(R|L)(\.TW|\.TWO|\.HK|\.KS|\.KQ|\.T|\.US)$", code, flags=re.IGNORECASE):

        return True

    return False



# ========== 讀檔 ==========

def read_csv_robust(path: str):

    for enc in ["pyarrow", "utf-8-sig", "utf-8"]:

        try:

            return pd.read_csv(path, engine=None if enc=="pyarrow" else "python",

                               encoding=None if enc=="pyarrow" else enc)

        except Exception:

            continue

    raise IOError(f"讀取失敗:{path}")



# ========== 日期標準化 ==========

def _as_local_date(series):

    s = series.astype(str).str.slice(0, 10)

    return pd.to_datetime(s, format="%Y-%m-%d", errors="coerce")



def normalize_df(df):

    cols = [str(c).strip().replace(" ", "_") for c in df.columns]

    df.columns = cols

    if "Date" in df.columns: df["Date"] = _as_local_date(df["Date"])

    elif "日期" in df.columns: df["Date"] = _as_local_date(df["日期"])

    else: df["Date"] = _as_local_date(df.iloc[:, 0])



    mapping = {

        "Open":["Open","開盤"], "High":["High","最高"], "Low":["Low","最低"],

        "Close":["Close","收盤"], "Adj_Close":["Adj_Close","Adj Close","調整後收盤價"],

        "Volume":["Volume","成交量"],

    }

    for k, alts in mapping.items():

        for a in alts:

            if a in df.columns:

                df[k] = pd.to_numeric(df[a], errors="coerce")

                break

        if k not in df.columns:

            df[k] = np.nan

    df = df.dropna(subset=["Date"]).sort_values("Date").reset_index(drop=True)

    return df



# ========== Stock Splits 判讀 ==========

def detect_events_via_stock_splits(df):

    events = []

    for c in ["Stock_Splits","Stock Splits","拆股"]:

        if c in df.columns:

            ss = pd.to_numeric(df[c], errors="coerce").fillna(0.0)

            for d,v in zip(df.loc[ss>0,"Date"], ss[ss>0]):

                f = 1.0/float(v)

                if MIN_FACTOR <= f <= MAX_FACTOR:

                    events.append((pd.Timestamp(d), f))

            break

    events.sort(key=lambda x: x[0])

    return events



# ========== 自動偵測(隔夜跳變 + 持續性驗證) ==========

def detect_corp_actions(df):

    ev = detect_events_via_stock_splits(df)

    if ev: return ev

    x = df.copy()

    x["prev_close"] = x["Close"].shift(1)

    cond = (x["Open"]>0)&(x["prev_close"]>0)

    x.loc[cond,"overnight_ratio"]=x.loc[cond,"Open"]/x.loc[cond,"prev_close"]

    x["abs_log_jump"]=np.abs(np.log(x["overnight_ratio"]))

    cands = x.index[(x["abs_log_jump"]>=THRESH_LOG)&x["overnight_ratio"].notna()]

    if len(cands)==0: return []

    events, last_idx = [], -10**9

    for idx in cands:

        if idx<max(MIN_DAYS_BEFORE,WIN+1): continue

        if (idx-last_idx)<=2: continue

        r=float(x.at[idx,"overnight_ratio"])

        factor=r if r>=1 else 1.0/r

        if not (MIN_FACTOR<=factor<=MAX_FACTOR): continue

        pre=x.iloc[idx-WIN-1:idx-1][["Open","High","Low","Close"]].median()

        post=x.iloc[idx+1:idx+1+WIN][["Open","High","Low","Close"]].median()

        if pre.isna().any() or post.isna().any(): continue

        ratios=(post/pre).values

        ok_cols=np.mean(np.abs(np.log(ratios/factor))<=EPS)

        if ok_cols<0.75: continue

        if (x["Volume"].iloc[idx-WIN-1:idx-1].sum()==0) or (x["Volume"].iloc[idx+1:idx+1+WIN].sum()==0):

            continue

        events.append((pd.Timestamp(x.at[idx,"Date"]), factor))

        last_idx=idx

    events.sort(key=lambda y:y[0])

    return events



# ========== 回推名目價 ==========

def apply_unadjust_to_nominal(df, events):

    if not events: return df,[]

    out=df.copy(); applied=[]

    for cutoff,factor in events:

        mask=out["Date"]<=pd.Timestamp(cutoff)

        for col in ["Open","High","Low","Close"]:

            out.loc[mask,col]=out.loc[mask,col]/factor

        applied.append({"cutoff":cutoff,"factor":round(float(factor),6)})

    return out,applied



# ========== 處理單檔 ==========

def process_one(csv_path):

    name=os.path.basename(csv_path)

    code=name.split("_")[0] if "_" in name else name.split(".")[0]

    ret={"file":name,"code":code,"skipped":False,"reason":"","n_events":0,"events":"","out":"","error":None}

    try:

        if SKIP_ETF and looks_like_etf_or_leveraged(code):

            ret.update({"skipped":True,"reason":"ETF/Leveraged"}); return ret

        df_raw=read_csv_robust(csv_path)

        df=normalize_df(df_raw)

        if df["Close"].count()<40:

            ret.update({"skipped":True,"reason":"too_few_rows"}); return ret

        events=detect_corp_actions(df)

        out_path=csv_path.replace("/dayK/","/dayK_fixed_by_corpaction/").replace(".csv","_fixed.csv")

        os.makedirs(os.path.dirname(out_path), exist_ok=True)

        if not events:

            df_raw.to_csv(out_path,index=False,encoding="utf-8"); ret.update({"out":out_path}); return ret

        df_nom,applied=apply_unadjust_to_nominal(df,events)

        df_write=df_raw.copy()

        for en,alts in {"Open":["Open","開盤"],"High":["High","最高"],"Low":["Low","最低"],"Close":["Close","收盤"]}.items():

            if en in df_nom.columns:

                if en in df_write.columns: df_write[en]=df_nom[en].astype(float)

                else:

                    for a in alts:

                        if a in df_write.columns:

                            df_write[a]=df_nom[en].astype(float); break

        df_write.to_csv(out_path,index=False,encoding="utf-8")

        ret.update({"n_events":len(applied),"events":"; ".join([f"{x['cutoff'].date()} x{x['factor']}" for x in applied]),"out":out_path})

        return ret

    except Exception as e:

        ret.update({"error":str(e)}); return ret



# ========== 主流程 ==========

def run_market(market):

    print(f"\n🌏 處理市場:{market}")

    start_time = time.time()

    CSV_IN_DIR=f"{BASE_DIR}/{market}/dayK"

    paths=sorted(glob.glob(f"{CSV_IN_DIR}/*.csv"))

    if not paths:

        print("⚠️ 無日K檔案,略過。"); return

    results=[]

    with ThreadPoolExecutor(max_workers=8) as ex:

        for fut in tqdm(as_completed([ex.submit(process_one,p) for p in paths]), total=len(paths),

                        desc=f"🧩 {market}", ncols=90):

            results.append(fut.result())

    man=pd.DataFrame(results)

    outdir=f"{BASE_DIR}/{market}/dayK_fixed_by_corpaction"

    os.makedirs(outdir, exist_ok=True)

    man_path=f"{outdir}/corpaction_fix_manifest_{market}.csv"

    man.to_csv(man_path,index=False,encoding="utf-8")



    ok=man[(~man["skipped"])&(man["error"].isna())]

    fixed=ok[ok["n_events"]>0]

    duration = time.time() - start_time

    print(f"\n✅ {market} 完成 ({duration:.1f}s),清單:{man_path}")

    print(f"📦 成功:{len(ok):>5} 檔,有事件:{len(fixed):>4} 檔")



    if not fixed.empty:

        print(fixed[["code","n_events","events"]].head(10).to_string(index=False))



    # QA:檢查日期異常

    bad_0101,bad_sun=[],[]

    for f in glob.glob(f"{outdir}/*_fixed.csv"):

        try:

            d=pd.read_csv(f,usecols=["Date"],dtype=str)

            s=pd.to_datetime(d["Date"],errors="coerce")

            if ((s.dt.month==1)&(s.dt.day==1)).any(): bad_0101.append(os.path.basename(f))

            if (s.dt.dayofweek==6).any() and market!="us-share": bad_sun.append(os.path.basename(f))

        except: continue

    print(f"🔎 QA:含 1/1 → {len(bad_0101)};含週日 → {len(bad_sun)}")

    print("-------------------------------------------------------------")



# ========== 主執行 ==========

if __name__=="__main__":

    t0 = time.time()

    for m in MARKETS:

        run_market(m)

    print(f"\n🌍 全部市場處理完成,用時:{time.time()-t0:.1f}s")

執行畫面如下,因為台灣已經跑過了,所以就略過台灣的部分

vocus|新世代的創作平台

後續我問AI 先跑如上程式碼後續在做一次清洗後轉周月年K的程式碼是否已經足夠 ,Grok的回覆如下

vocus|新世代的創作平台


vocus|新世代的創作平台

為何其他五國都沒有這問題 AI回復如下

vocus|新世代的創作平台






留言
avatar-img
《炒股不看周月年K漲幅機率就是耍流氓》
16會員
290內容數
普通上班族,用 AI 與 Python 將炒股量化。我的數據宣言是:《炒股不做量化,都是在耍流氓》。
2025/11/09
簡單來說,我們用自己寫的程式把日K資料轉成月K,然後篩出2020-2025年間所有月漲幅超過100%的股票清單。 為什麼要做這個檢查 因為轉資料的程式很複雜: 要處理除權息 要過濾異常值 要偵測停牌復牌 要處理時區問題 怕哪個環節出錯,把沒漲100%的股票也算進來,或者該算的沒算到
2025/11/09
簡單來說,我們用自己寫的程式把日K資料轉成月K,然後篩出2020-2025年間所有月漲幅超過100%的股票清單。 為什麼要做這個檢查 因為轉資料的程式很複雜: 要處理除權息 要過濾異常值 要偵測停牌復牌 要處理時區問題 怕哪個環節出錯,把沒漲100%的股票也算進來,或者該算的沒算到
2025/11/09
由於方格子單篇文章有字數限制,因此本次完整的日K → 週/月/年K 清洗與報酬計算程式碼,將分成兩篇文章提供: def detect_pingpong_patterns(day_df: pd.DataFrame, price_col='收盤', threshold=0.4) -> pd.D
2025/11/09
由於方格子單篇文章有字數限制,因此本次完整的日K → 週/月/年K 清洗與報酬計算程式碼,將分成兩篇文章提供: def detect_pingpong_patterns(day_df: pd.DataFrame, price_col='收盤', threshold=0.4) -> pd.D
2025/11/09
本模組負責將各市場的日K資料轉換為週K(W-FRI)、月K、年K格式,並進行一系列清洗與報酬計算。整體流程已涵蓋: 極端報酬過濾(跳空、燭身、最高/最低) ghost 段偵測與復牌標記 停牌後復牌的週期性跳空處理 薄樣本與極端報酬的 QA 標記 pingpong 模式偵測(疑似除權錯位
2025/11/09
本模組負責將各市場的日K資料轉換為週K(W-FRI)、月K、年K格式,並進行一系列清洗與報酬計算。整體流程已涵蓋: 極端報酬過濾(跳空、燭身、最高/最低) ghost 段偵測與復牌標記 停牌後復牌的週期性跳空處理 薄樣本與極端報酬的 QA 標記 pingpong 模式偵測(疑似除權錯位
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
髒數據是 AI 最大敵人!本單元教你用 Pandas 快速搞定缺失值、異常值、格式錯誤與重複資料,循序示範 dropna、fillna、IQR、astype 等技巧,確保資料純淨,模型準確度瞬間飆升。學完立即用乾淨數據武裝你的機器學習專案,讓 AI 更聰明、更可靠!
Thumbnail
髒數據是 AI 最大敵人!本單元教你用 Pandas 快速搞定缺失值、異常值、格式錯誤與重複資料,循序示範 dropna、fillna、IQR、astype 等技巧,確保資料純淨,模型準確度瞬間飆升。學完立即用乾淨數據武裝你的機器學習專案,讓 AI 更聰明、更可靠!
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 總結一下目前有的素材: AI說書 - 從0開始 - 103:資料集載入 AI說書 - 從0開始 - 104:定義資料清洗的函數 AI說書 - 從0開始 - 105
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 總結一下目前有的素材: AI說書 - 從0開始 - 103:資料集載入 AI說書 - 從0開始 - 104:定義資料清洗的函數 AI說書 - 從0開始 - 105
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 整理目前手上有的素材: AI說書 - 從0開始 - 180 | RoBERTa 預訓練前言:RoBERTa 預訓練前言 AI說書 - 從0開始 - 181 | 預訓
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 整理目前手上有的素材: AI說書 - 從0開始 - 180 | RoBERTa 預訓練前言:RoBERTa 預訓練前言 AI說書 - 從0開始 - 181 | 預訓
Thumbnail
在當今快速變化的數位時代,企業面臨著前所未有的數據處理需求。為了應對這些挑戰,企業紛紛建立自己的大型語言模型(LLM),利用大量數據進行訓練,讓模型能夠理解並生成自然語言,從而實現人機協作,優化業務流程並提升客戶體驗。然而,資料清理在這個過程中顯得至關重要。
Thumbnail
在當今快速變化的數位時代,企業面臨著前所未有的數據處理需求。為了應對這些挑戰,企業紛紛建立自己的大型語言模型(LLM),利用大量數據進行訓練,讓模型能夠理解並生成自然語言,從而實現人機協作,優化業務流程並提升客戶體驗。然而,資料清理在這個過程中顯得至關重要。
Thumbnail
繼「【🔒 Python實戰營 - Data Science 必修班】Pandas 資料清洗技 - 填補式」之後,我們已經學會怎麼填補空缺資料了,那這個章節我們來教您如何對某些欄位有條件的整形,有時候我們的資料來源某些欄位資料格式不一,甚至型態都不是正規統一的值,此時我們就需要針對這些值進行一些處理
Thumbnail
繼「【🔒 Python實戰營 - Data Science 必修班】Pandas 資料清洗技 - 填補式」之後,我們已經學會怎麼填補空缺資料了,那這個章節我們來教您如何對某些欄位有條件的整形,有時候我們的資料來源某些欄位資料格式不一,甚至型態都不是正規統一的值,此時我們就需要針對這些值進行一些處理
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 整理目前手上有的素材: AI說書 - 從0開始 - 338 | Embedding Based Search 資料集描述 AI說書 - 從0開始 - 339 | E
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 整理目前手上有的素材: AI說書 - 從0開始 - 338 | Embedding Based Search 資料集描述 AI說書 - 從0開始 - 339 | E
Thumbnail
在當今快速變化的數位時代,企業面臨著前所未有的數據處理需求。為了應對這些挑戰,企業紛紛建立自己的大型語言模型(LLM),利用大量數據進行訓練,讓模型能夠理解並生成自然語言,從而實現人機協作,優化業務流程並提升客戶體驗。
Thumbnail
在當今快速變化的數位時代,企業面臨著前所未有的數據處理需求。為了應對這些挑戰,企業紛紛建立自己的大型語言模型(LLM),利用大量數據進行訓練,讓模型能夠理解並生成自然語言,從而實現人機協作,優化業務流程並提升客戶體驗。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News