Skip to content

使用duckdb分析台北捷運站分站進出資料

Published: at 下午05:27

做個題目吧 捷運站的大數據 可能會蠻好玩的

抓了 2017/01 至 2025/12 的所有捷運資料

使用 duckbdb 將他讀入

總共會有 877,719,252 筆資料

count_star()
877,719,252
(877.72 million)

資料格式 是

日期,時段,進站,出站,人次
2025-12-01,00,松山機場,松山機場,0
2025-12-01,00,松山機場,中山國中,0
2025-12-01,00,松山機場,南京復興,1
2025-12-01,00,松山機場,忠孝復興,0
2025-12-01,00,松山機場,大安,1
2025-12-01,00,松山機場,科技大樓,0
2025-12-01,00,松山機場,六張犁,0

生活區 站型 還是 上班區 站型 休閒區 站型 分析

生活區

要區分生活區的邏輯 會是 平日 一到五 晚上(18:00-23:00) 淨出站 較高的就會是 生活區 站型

COPY(
WITH evening_flow AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(進站) AS entry_cnt
    FROM (
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS 進站
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND strftime('%w', 日期) BETWEEN '1' AND '5'
        UNION ALL
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND strftime('%w', 日期) BETWEEN '1' AND '5'
    )
    GROUP BY station
)
SELECT
    station,
    exit_cnt,
    entry_cnt,
    exit_cnt - entry_cnt AS net_exit
FROM evening_flow
WHERE exit_cnt > entry_cnt
ORDER BY net_exit DESC
) TO "C://workspace/mrt_1.md" (FORMAT MARKDOWN); 
  1. 撈出的資料共 67 站 因為 在平日晚上的 淨出站 大於 淨入站 (exit_cnt > entry_cnt) 的前三站 是 頂溪 新埔 永安市場

  2. 但看到 淡水 感覺還是怪怪的 淡水,府中 為啥這麼多人晚上要搭捷運出城? 可能是 少考慮了 國定假日 為非平日的結構 比如過年春節 或是補放的連假
    故要再把那些日期挑出來去除

  3. O景安,G大坪林,O頭前庄 進站都是 0 可能需要再理解捷運架構

stationexit_cntentry_cntnet_exit
頂溪42,856,64913,648,33929,208,310
新埔44,968,22617,414,57427,553,652
永安市場32,307,0659,571,84022,735,225
海山29,009,9746,639,63922,370,335
南勢角26,958,2946,167,10320,791,191
江子翠31,674,33811,920,52819,753,810
府中30,766,59714,443,24716,323,350
蘆洲17,812,0163,423,35114,388,665
亞東醫院23,905,7819,706,69014,199,091
BL板橋39,699,02525,940,06213,758,963
景安22,013,6069,214,29012,799,316
三民高中16,106,6753,427,22312,679,452
淡水30,451,69217,840,14212,611,550
徐匯中學16,547,3093,989,07612,558,233
三和國中15,737,2533,921,11211,816,141
三重國小15,279,8974,104,99811,174,899
新店區公所14,448,0914,698,1189,749,973
北投17,801,9518,239,6769,562,275
迴龍12,836,2533,349,3829,486,871
丹鳳12,009,7172,898,2049,111,513
紅樹林13,043,5934,225,3258,818,268
新莊13,309,8924,582,1148,727,778
O景安8,407,35008,407,350
永寧13,923,6675,858,2568,065,411
七張16,422,9828,689,4777,733,505
萬芳醫院13,515,8546,004,2887,511,566
龍山寺23,068,84515,748,5337,320,312
菜寮11,216,7153,956,2387,260,477
新店11,664,6864,700,1056,964,581
東湖10,023,2173,166,2026,857,015
台北橋11,572,5414,863,8896,708,652
萬隆10,911,8574,332,0826,579,775
景美15,878,8299,337,4776,541,352
竹圍10,077,2093,941,6226,135,587
土城8,888,6522,826,8706,061,782
後山埤15,805,8129,844,7785,961,034
內湖10,385,0084,480,4515,904,557
G大坪林5,241,54405,241,544
明德10,638,7655,731,2854,907,480
葫洲8,723,9944,195,4784,528,516
唭哩岸7,656,1573,190,6254,465,532
石牌22,567,92718,491,0144,076,913
三重7,272,9693,938,0633,334,906
辛亥4,049,274965,0643,084,210
頂埔8,643,6745,677,0492,966,625
輔大10,698,8657,747,0852,951,780
麟光4,564,2461,685,3572,878,889
芝山19,334,79516,572,4492,762,346
圓山19,694,10116,985,1212,708,980
復興崗3,939,6061,522,7522,416,854
木柵4,146,7981,748,8762,397,922
大湖公園3,547,5971,208,8752,338,722
永春16,533,81514,391,7322,142,083
南港16,876,00714,752,0832,123,924
文德5,063,5523,132,7541,930,798
萬芳社區2,677,038789,0141,888,024
小碧潭3,229,1781,644,5841,584,594
六張犁9,697,0528,118,7961,578,256
O頭前庄1,555,93801,555,938
奇岩7,007,4415,917,8661,089,575
秀朗橋1,158,693408,932749,761
幸福1,517,086898,434618,652
大直7,203,2446,670,852532,392
景平1,499,5661,025,962473,604
動物園3,369,8822,954,262415,620
頭前庄3,490,3463,097,038393,308
新埔民生859,534584,340275,194
中和1,626,5761,525,823100,753
板新917,790824,40593,385

結果csv

於是將 2017-2025 所有國定假日非平日的日期列出

SQL

COPY(
WITH evening_flow AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt) AS entry_cnt
    FROM (
        -- 出站人次
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 NOT IN (
            -- 2017–2026 非週末國定假日
            '2017-02-28','2017-04-03','2017-04-04','2017-05-01','2017-05-30','2017-10-04','2017-10-10',
            '2018-01-01','2018-02-15','2018-02-16','2018-02-19','2018-02-20','2018-02-28','2018-03-02','2018-04-04','2018-04-05','2018-04-06','2018-05-01','2018-06-18','2018-09-24','2018-10-10','2018-10-17','2018-12-31',
            '2019-01-01','2019-02-04','2019-02-05','2019-02-06','2019-02-07','2019-02-08','2019-02-19','2019-02-28','2019-03-01','2019-04-04','2019-04-05','2019-06-07','2019-09-13','2019-10-07','2019-10-10','2019-10-11',
            '2020-01-01','2020-01-23','2020-01-24','2020-01-27','2020-01-28','2020-01-29','2020-02-28',
            '2021-01-01','2021-02-10','2021-02-11','2021-02-12','2021-02-15','2021-02-16','2021-03-01','2021-04-02','2021-04-05',
            '2022-02-01','2022-02-02','2022-02-03','2022-02-04','2022-02-28','2022-04-04','2022-04-05','2022-05-02','2022-06-03','2022-09-09','2022-10-10',
            '2023-01-02','2023-01-20','2023-01-23','2023-01-24','2023-01-25','2023-01-26','2023-01-27','2023-02-27','2023-02-28','2023-04-04','2023-04-05','2023-05-01','2023-06-22','2023-06-23','2023-09-29','2023-10-09','2023-10-10',
            '2024-01-01','2024-02-08','2024-02-09','2024-02-10','2024-02-11','2024-02-12','2024-02-28','2024-04-04','2024-04-05','2024-05-01','2024-06-10','2024-06-11','2024-09-17','2024-09-18','2024-10-10',
            '2025-01-01','2025-01-27','2025-01-28','2025-01-29','2025-01-30','2025-01-31',
            '2025-02-12','2025-02-28','2025-04-03','2025-04-04','2025-05-01','2025-05-30',
            '2025-09-29','2025-10-06','2025-10-10','2025-10-24','2025-12-25',
            '2026-01-01'
          )
        UNION ALL
        -- 進站人次
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 NOT IN (
            '2017-02-28','2017-04-03','2017-04-04','2017-05-01','2017-05-30','2017-10-04','2017-10-10',
            '2018-01-01','2018-02-15','2018-02-16','2018-02-19','2018-02-20','2018-02-28','2018-03-02','2018-04-04','2018-04-05','2018-04-06','2018-05-01','2018-06-18','2018-09-24','2018-10-10','2018-10-17','2018-12-31',
            '2019-01-01','2019-02-04','2019-02-05','2019-02-06','2019-02-07','2019-02-08','2019-02-19','2019-02-28','2019-03-01','2019-04-04','2019-04-05','2019-06-07','2019-09-13','2019-10-07','2019-10-10','2019-10-11',
            '2020-01-01','2020-01-23','2020-01-24','2020-01-27','2020-01-28','2020-01-29','2020-02-28',
            '2021-01-01','2021-02-10','2021-02-11','2021-02-12','2021-02-15','2021-02-16','2021-03-01','2021-04-02','2021-04-05',
            '2022-02-01','2022-02-02','2022-02-03','2022-02-04','2022-02-28','2022-04-04','2022-04-05','2022-05-02','2022-06-03','2022-09-09','2022-10-10',
            '2023-01-02','2023-01-20','2023-01-23','2023-01-24','2023-01-25','2023-01-26','2023-01-27','2023-02-27','2023-02-28','2023-04-04','2023-04-05','2023-05-01','2023-06-22','2023-06-23','2023-09-29','2023-10-09','2023-10-10',
            '2024-01-01','2024-02-08','2024-02-09','2024-02-10','2024-02-11','2024-02-12','2024-02-28','2024-04-04','2024-04-05','2024-05-01','2024-06-10','2024-06-11','2024-09-17','2024-09-18','2024-10-10',
            '2025-01-01','2025-01-27','2025-01-28','2025-01-29','2025-01-30','2025-01-31',
            '2025-02-12','2025-02-28','2025-04-03','2025-04-04','2025-05-01','2025-05-30',
            '2025-09-29','2025-10-06','2025-10-10','2025-10-24','2025-12-25',
            '2026-01-01'
          )
    )
    GROUP BY station
)
COPY(
SELECT
    station,
    exit_cnt,
    entry_cnt,
    exit_cnt - entry_cnt AS net_exit
FROM evening_flow
WHERE exit_cnt > entry_cnt
ORDER BY net_exit DESC
) TO "C://workspace/mrt_2.md" (FORMAT MARKDOWN); 

結果

  1. 挑完國定假日後 淡水的進站 還是這麼多 可能大家都愛去淡水玩吧 然後要回家吧
  2. 有可能因為那邊有學校 人比較多 像是 淡江大學 聖約翰大學 真理大學 學生上完課要回家 才會這麼多人進站
  3. 在淡水上班的人口 要回其他新北市之類
stationexit_cntentry_cntnet_exit
頂溪41,649,60513,096,77828,552,827
新埔43,826,95216,863,73726,963,215
永安市場31,456,3709,225,35422,231,016
海山28,228,3756,380,08421,848,291
南勢角26,179,7505,882,67520,297,075
江子翠30,845,40011,544,58419,300,816
府中29,907,25313,843,09016,064,163
蘆洲17,370,7593,266,77914,103,980
亞東醫院23,323,4649,441,52913,881,935
BL板橋38,524,45324,805,12413,719,329
淡水29,500,51116,243,20213,257,309
景安21,453,7218,900,11612,553,605
三民高中15,682,8663,278,54212,404,324
徐匯中學16,111,7343,815,12112,296,613
三和國中15,309,4013,766,89811,542,503
三重國小14,837,2183,921,79710,915,421
新店區公所14,033,4524,536,4279,497,025
北投17,274,3097,925,6089,348,701
迴龍12,493,3603,224,2149,269,146
丹鳳11,689,5532,783,2878,906,266
紅樹林12,642,7453,999,0908,643,655
新莊12,982,9134,403,7228,579,191
O景安8,171,05508,171,055
永寧13,529,6785,655,3397,874,339
七張15,931,8258,431,7327,500,093
萬芳醫院13,179,5785,854,3027,325,276
龍山寺22,247,92714,988,4027,259,525
菜寮10,923,2653,820,1157,103,150
新店11,289,2554,372,0716,917,184
東湖9,760,6233,045,0356,715,588
台北橋11,189,0414,618,2356,570,806
萬隆10,580,3404,175,5806,404,760
景美15,377,6899,030,6416,347,048
竹圍9,776,3083,780,6555,995,653
土城8,642,1212,723,7915,918,330
內湖10,093,0124,314,2085,778,804
後山埤15,309,2489,548,6815,760,567
G大坪林5,076,85705,076,857
明德10,345,4575,562,3494,783,108
葫洲8,500,4454,090,4814,409,964
唭哩岸7,424,9433,081,6474,343,296
石牌21,883,26317,976,4873,906,776
三重7,055,7903,737,3003,318,490
辛亥3,949,927926,4723,023,455
輔大10,407,1407,591,0352,816,105
頂埔8,370,2325,559,7562,810,476
麟光4,426,5591,621,3662,805,193
芝山18,765,38816,020,3812,745,007
圓山19,074,98316,390,3862,684,597
復興崗3,824,1351,467,5602,356,575
木柵4,038,0871,684,1472,353,940
大湖公園3,454,2921,144,9582,309,334
南港16,382,02214,203,4762,178,546
永春16,047,72114,039,3352,008,386
文德4,916,8063,052,5381,864,268
萬芳社區2,609,431757,1411,852,290
小碧潭3,132,3861,555,8921,576,494
O頭前庄1,515,97201,515,972
六張犁9,427,5847,938,6171,488,967
奇岩6,811,1435,781,5021,029,641
秀朗橋1,127,898391,678736,220
幸福1,478,334866,602611,732
動物園3,277,4302,686,120591,310
大直7,007,8876,518,205489,682
景平1,460,3891,000,346460,043
頭前庄3,400,9872,998,588402,399
新埔民生841,472566,175275,297
中和1,579,5551,481,51098,045
板新899,071807,45991,612

再觀察 哪一些站點是 公司區站點 抓 平日下班時間 淨進站 最多的站點

COPY(
  WITH evening_flow AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt) AS entry_cnt
    FROM (
        -- 出站人次
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 NOT IN (
            -- 2017–2026 非週末國定假日
            '2017-02-28','2017-04-03','2017-04-04','2017-05-01','2017-05-30','2017-10-04','2017-10-10',
            '2018-01-01','2018-02-15','2018-02-16','2018-02-19','2018-02-20','2018-02-28','2018-03-02','2018-04-04','2018-04-05','2018-04-06','2018-05-01','2018-06-18','2018-09-24','2018-10-10','2018-10-17','2018-12-31',
            '2019-01-01','2019-02-04','2019-02-05','2019-02-06','2019-02-07','2019-02-08','2019-02-19','2019-02-28','2019-03-01','2019-04-04','2019-04-05','2019-06-07','2019-09-13','2019-10-07','2019-10-10','2019-10-11',
            '2020-01-01','2020-01-23','2020-01-24','2020-01-27','2020-01-28','2020-01-29','2020-02-28',
            '2021-01-01','2021-02-10','2021-02-11','2021-02-12','2021-02-15','2021-02-16','2021-03-01','2021-04-02','2021-04-05',
            '2022-02-01','2022-02-02','2022-02-03','2022-02-04','2022-02-28','2022-04-04','2022-04-05','2022-05-02','2022-06-03','2022-09-09','2022-10-10',
            '2023-01-02','2023-01-20','2023-01-23','2023-01-24','2023-01-25','2023-01-26','2023-01-27','2023-02-27','2023-02-28','2023-04-04','2023-04-05','2023-05-01','2023-06-22','2023-06-23','2023-09-29','2023-10-09','2023-10-10',
            '2024-01-01','2024-02-08','2024-02-09','2024-02-10','2024-02-11','2024-02-12','2024-02-28','2024-04-04','2024-04-05','2024-05-01','2024-06-10','2024-06-11','2024-09-17','2024-09-18','2024-10-10',
            '2025-01-01','2025-01-27','2025-01-28','2025-01-29','2025-01-30','2025-01-31',
            '2025-02-12','2025-02-28','2025-04-03','2025-04-04','2025-05-01','2025-05-30',
            '2025-09-29','2025-10-06','2025-10-10','2025-10-24','2025-12-25',
            '2026-01-01'
          )
        UNION ALL
        -- 進站人次
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 NOT IN (
            '2017-02-28','2017-04-03','2017-04-04','2017-05-01','2017-05-30','2017-10-04','2017-10-10',
            '2018-01-01','2018-02-15','2018-02-16','2018-02-19','2018-02-20','2018-02-28','2018-03-02','2018-04-04','2018-04-05','2018-04-06','2018-05-01','2018-06-18','2018-09-24','2018-10-10','2018-10-17','2018-12-31',
            '2019-01-01','2019-02-04','2019-02-05','2019-02-06','2019-02-07','2019-02-08','2019-02-19','2019-02-28','2019-03-01','2019-04-04','2019-04-05','2019-06-07','2019-09-13','2019-10-07','2019-10-10','2019-10-11',
            '2020-01-01','2020-01-23','2020-01-24','2020-01-27','2020-01-28','2020-01-29','2020-02-28',
            '2021-01-01','2021-02-10','2021-02-11','2021-02-12','2021-02-15','2021-02-16','2021-03-01','2021-04-02','2021-04-05',
            '2022-02-01','2022-02-02','2022-02-03','2022-02-04','2022-02-28','2022-04-04','2022-04-05','2022-05-02','2022-06-03','2022-09-09','2022-10-10',
            '2023-01-02','2023-01-20','2023-01-23','2023-01-24','2023-01-25','2023-01-26','2023-01-27','2023-02-27','2023-02-28','2023-04-04','2023-04-05','2023-05-01','2023-06-22','2023-06-23','2023-09-29','2023-10-09','2023-10-10',
            '2024-01-01','2024-02-08','2024-02-09','2024-02-10','2024-02-11','2024-02-12','2024-02-28','2024-04-04','2024-04-05','2024-05-01','2024-06-10','2024-06-11','2024-09-17','2024-09-18','2024-10-10',
            '2025-01-01','2025-01-27','2025-01-28','2025-01-29','2025-01-30','2025-01-31',
            '2025-02-12','2025-02-28','2025-04-03','2025-04-04','2025-05-01','2025-05-30',
            '2025-09-29','2025-10-06','2025-10-10','2025-10-24','2025-12-25',
            '2026-01-01'
          )
    )
    GROUP BY station
)
COPY(
SELECT
    station,
    exit_cnt,
    entry_cnt,
    entry_cnt - exit_cnt AS net_entry
FROM evening_flow
WHERE exit_cnt < entry_cnt
ORDER BY net_entry DESC
) TO "C://workspace/mrt_3.md" (FORMAT MARKDOWN); 
  1. 最多人下班的地方是 市政府, 松江南京,南京復興
  2. 預料之外的事 台北車站竟然會是 第八名 但這樣應該得到的概念 是因為北車只是中轉站
stationexit_cntentry_cntnet_entry
市政府31,339,03569,367,65638,028,621
松江南京14,300,20746,915,74532,615,538
南京復興18,788,90349,291,46330,502,560
忠孝復興25,251,21649,181,31523,930,099
台北101/世貿12,097,93735,998,14523,900,208
忠孝敦化18,927,53241,501,15622,573,624
中山25,682,31647,255,74521,573,429
台北車站89,827,916110,537,52720,709,611
忠孝新生15,790,10133,677,23917,887,138
台北小巨蛋9,381,75726,644,58417,262,827
行天宮12,670,44429,613,99116,943,547
西湖5,589,89622,377,87716,787,981
台大醫院4,677,09219,032,26514,355,173
港墘7,896,23421,247,05213,350,818
善導寺8,801,11721,836,67513,035,558
大安12,141,10724,531,53312,390,426
國父紀念館11,748,64624,034,59512,285,949
南京三民13,131,73224,055,78610,924,054
民權西路12,119,87322,697,82510,577,952
中正紀念堂11,959,22022,155,91410,196,694
信義安和11,325,50319,982,2798,656,776
公館16,588,10524,611,1538,023,048
西門47,784,44955,758,0637,973,614
象山6,401,51813,966,7307,565,212
雙連10,998,15418,235,4917,237,337
東門14,533,86321,414,9286,881,065
南港軟體園區2,129,0118,789,9676,660,956
古亭21,723,74427,586,5665,862,822
劍南路6,839,06911,324,8884,485,819
松山19,460,35923,760,5164,300,157
小南門3,790,5197,960,5444,170,025
大坪林12,659,43716,612,6183,953,181
中山國小12,264,86715,915,2333,650,366
中山國中9,885,91313,234,4593,348,546
北門7,590,63710,618,5933,027,956
昆陽9,772,39412,680,4962,908,102
科技大樓9,472,83512,337,3162,864,481
先嗇宮2,491,6935,281,9202,790,227
南港展覽館21,600,76324,376,9912,776,228
大安森林公園4,507,3796,627,1102,119,731
關渡7,997,7449,792,4661,794,722
松山機場2,255,5723,859,8471,604,275
士林18,284,30219,842,6731,558,371
中原440,1011,941,3821,501,281
新北產業園區808,6772,264,7321,456,055
大橋頭站8,381,7329,647,7751,266,043
橋和235,0731,474,6691,239,596
Y板橋1,980,9082,970,634989,726
劍潭22,942,50023,638,318695,818
忠義1,754,7102,421,366666,656
台電大樓13,089,13613,565,324476,188
十四張376,255648,444272,189
新北投3,177,9113,402,196224,285

把時間抽 成 平日上班時間 05-11 點 勞工都從哪裡來?

  WITH evening_flow AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt) AS entry_cnt
    FROM (
        -- 出站人次
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 05 AND 11
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
        UNION ALL
        -- 進站人次
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 05 AND 11
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
    
    )
    GROUP BY station
)
COPY(
SELECT
    station,
    exit_cnt,
    entry_cnt,
    entry_cnt - exit_cnt AS net_entry
FROM evening_flow
WHERE exit_cnt < entry_cnt
ORDER BY net_entry DESC
) TO "C://workspace/mrt_4.md" (FORMAT MARKDOWN); 
  1. 可以觀察到 勞工都從 新埔 , 頂溪, 景安 ,永安市場,南勢角來 跟一開始的 下班族 都差不多
stationexit_cntentry_cntnet_entry
新埔11,801,51938,228,48426,426,965
頂溪9,065,83534,133,89425,068,059
景安4,065,09726,332,20122,267,104
永安市場6,023,56426,249,36020,225,796
南勢角3,789,16823,805,40320,016,235
府中7,106,90026,553,30219,446,402
海山5,481,00723,856,42918,375,422
江子翠7,747,71525,648,50117,900,786
淡水11,224,98727,436,80416,211,817
蘆洲2,133,35917,870,86015,737,501
亞東醫院10,100,07124,282,91614,182,845
三和國中2,551,57614,384,30911,832,733
三民高中2,670,83113,621,54110,950,710
徐匯中學2,384,77513,147,65610,762,881
三重國小2,289,02712,853,66710,564,640
丹鳳1,939,51811,028,7209,089,202
迴龍3,114,20412,047,9198,933,715
BL板橋17,495,11026,248,7798,753,669
龍山寺11,172,62719,270,7328,098,105
新店4,012,24311,973,4147,961,171
新莊3,235,37310,930,5377,695,164
新店區公所4,017,59111,389,6797,372,088
菜寮3,509,50910,200,3516,690,842
萬隆2,830,5699,450,9696,620,400
永寧5,471,28411,988,0286,516,744
北投8,358,63214,772,6026,413,970
台北橋2,414,5618,819,6316,405,070
紅樹林3,889,99310,168,5066,278,513
七張6,785,87513,030,0746,244,199
大坪林8,353,58714,313,8935,960,306
內湖2,663,7168,419,6275,755,911
土城2,553,2548,110,8185,557,564
東湖2,865,8258,306,1985,440,373
後山埤6,924,60512,275,4175,350,812
唭哩岸2,282,4137,130,6674,848,254
竹圍3,393,1248,021,5584,628,434
景美7,213,55211,813,7774,600,225
萬芳醫院6,409,51110,671,7474,262,236
葫洲3,659,3407,265,4713,606,131
三重2,872,7416,389,8643,517,123
頭前庄1,366,3114,848,6153,482,304
頂埔5,012,6908,251,1363,238,446
辛亥717,6413,796,6153,078,974
麟光1,195,9774,242,3273,046,350
明德6,993,56510,008,3773,014,812
芝山12,373,71715,030,1822,656,465
萬芳社區532,4772,962,4562,429,979
大湖公園973,1633,324,4182,351,255
奇岩5,077,4947,370,5102,293,016
復興崗1,437,2793,566,6002,129,321
南港11,062,63912,954,1411,891,502
六張犁6,554,4808,091,0671,536,587
圓山15,403,57716,773,5011,369,924
幸福250,6471,457,2441,206,597
文德3,059,2664,182,8071,123,541
小碧潭1,037,3022,154,7901,117,488
中和405,1011,430,6441,025,543
秀朗橋91,7701,079,453987,683
木柵2,459,3773,382,742923,365
景平342,0081,234,239892,231
十四張279,580890,615611,035
板新325,208776,522451,314
大橋頭站7,765,8328,153,666387,834
新埔民生166,117513,530347,413
永春11,802,44112,128,403325,962
Y板橋975,4761,260,460284,984
松山14,542,54214,809,327266,785
淡水11,224,98727,436,80416,211,817
蘆洲2,133,35917,870,86015,737,501
亞東醫院10,100,07124,282,91614,182,845
三和國中2,551,57614,384,30911,832,733
三民高中2,670,83113,621,54110,950,710
徐匯中學2,384,77513,147,65610,762,881
三重國小2,289,02712,853,66710,564,640
丹鳳1,939,51811,028,7209,089,202
迴龍3,114,20412,047,9198,933,715
BL板橋17,495,11026,248,7798,753,669
龍山寺11,172,62719,270,7328,098,105
新店4,012,24311,973,4147,961,171
新莊3,235,37310,930,5377,695,164
新店區公所4,017,59111,389,6797,372,088
菜寮3,509,50910,200,3516,690,842
萬隆2,830,5699,450,9696,620,400
永寧5,471,28411,988,0286,516,744
北投8,358,63214,772,6026,413,970
台北橋2,414,5618,819,6316,405,070
紅樹林3,889,99310,168,5066,278,513
七張6,785,87513,030,0746,244,199
大坪林8,353,58714,313,8935,960,306
內湖2,663,7168,419,6275,755,911
土城2,553,2548,110,8185,557,564
東湖2,865,8258,306,1985,440,373
後山埤6,924,60512,275,4175,350,812
唭哩岸2,282,4137,130,6674,848,254
竹圍3,393,1248,021,5584,628,434
景美7,213,55211,813,7774,600,225
萬芳醫院6,409,51110,671,7474,262,236
葫洲3,659,3407,265,4713,606,131
三重2,872,7416,389,8643,517,123
頭前庄1,366,3114,848,6153,482,304
頂埔5,012,6908,251,1363,238,446
辛亥717,6413,796,6153,078,974
麟光1,195,9774,242,3273,046,350
明德6,993,56510,008,3773,014,812
芝山12,373,71715,030,1822,656,465
萬芳社區532,4772,962,4562,429,979
大湖公園973,1633,324,4182,351,255
奇岩5,077,4947,370,5102,293,016
復興崗1,437,2793,566,6002,129,321
南港11,062,63912,954,1411,891,502
六張犁6,554,4808,091,0671,536,587
圓山15,403,57716,773,5011,369,924
幸福250,6471,457,2441,206,597
文德3,059,2664,182,8071,123,541
小碧潭1,037,3022,154,7901,117,488
中和405,1011,430,6441,025,543
秀朗橋91,7701,079,453987,683
木柵2,459,3773,382,742923,365
景平342,0081,234,239892,231
十四張279,580890,615611,035
板新325,208776,522451,314
大橋頭站7,765,8328,153,666387,834
新埔民生166,117513,530347,413
永春11,802,44112,128,403325,962
Y板橋975,4761,260,460284,984
松山14,542,54214,809,327266,785

分析 2025/12/09 某一天的 下班時間的 淨入站

COPY(
WITH evening_flow AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt) AS entry_cnt
    FROM (
        -- 出站人次
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期  IN (
            '2025-12-09'
          )
        UNION ALL
        -- 進站人次
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 IN (
              '2025-12-09'
          )
    )
    GROUP BY station
)
SELECT
    station,
    exit_cnt,
    entry_cnt,
    entry_cnt - exit_cnt AS net_entry
FROM evening_flow
WHERE exit_cnt < entry_cnt
ORDER BY net_entry DESC
) TO "C://workspace/mrt_4.md" (FORMAT MARKDOWN); 
stationexit_cntentry_cntnet_entry
市政府31,339,03569,367,65638,028,621
松江南京14,300,20746,915,74532,615,538
南京復興18,788,90349,291,46330,502,560
忠孝復興25,251,21649,181,31523,930,099
台北101/世貿12,097,93735,998,14523,900,208
忠孝敦化18,927,53241,501,15622,573,624
中山25,682,31647,255,74521,573,429
台北車站89,827,916110,537,52720,709,611
忠孝新生15,790,10133,677,23917,887,138
台北小巨蛋9,381,75726,644,58417,262,827
行天宮12,670,44429,613,99116,943,547
西湖5,589,89622,377,87716,787,981
台大醫院4,677,09219,032,26514,355,173
港墘7,896,23421,247,05213,350,818
善導寺8,801,11721,836,67513,035,558
大安12,141,10724,531,53312,390,426
國父紀念館11,748,64624,034,59512,285,949
南京三民13,131,73224,055,78610,924,054
民權西路12,119,87322,697,82510,577,952
中正紀念堂11,959,22022,155,91410,196,694
信義安和11,325,50319,982,2798,656,776
公館16,588,10524,611,1538,023,048
西門47,784,44955,758,0637,973,614
象山6,401,51813,966,7307,565,212
雙連10,998,15418,235,4917,237,337
東門14,533,86321,414,9286,881,065
南港軟體園區2,129,0118,789,9676,660,956
古亭21,723,74427,586,5665,862,822
劍南路6,839,06911,324,8884,485,819
松山19,460,35923,760,5164,300,157
小南門3,790,5197,960,5444,170,025
大坪林12,659,43716,612,6183,953,181
中山國小12,264,86715,915,2333,650,366
中山國中9,885,91313,234,4593,348,546
北門7,590,63710,618,5933,027,956
昆陽9,772,39412,680,4962,908,102
科技大樓9,472,83512,337,3162,864,481
先嗇宮2,491,6935,281,9202,790,227
南港展覽館21,600,76324,376,9912,776,228
大安森林公園4,507,3796,627,1102,119,731
關渡7,997,7449,792,4661,794,722
松山機場2,255,5723,859,8471,604,275
士林18,284,30219,842,6731,558,371
中原440,1011,941,3821,501,281
新北產業園區808,6772,264,7321,456,055
大橋頭站8,381,7329,647,7751,266,043
橋和235,0731,474,6691,239,596
Y板橋1,980,9082,970,634989,726
劍潭22,942,50023,638,318695,818
忠義1,754,7102,421,366666,656
台電大樓13,089,13613,565,324476,188
十四張376,255648,444272,189
新北投3,177,9113,402,196224,285

分析 2025/12/09 某一天的 下班時間的 淨出站

COPY(
WITH create table evening_flows AS (
    SELECT
        station,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt) AS entry_cnt
    FROM (
        -- 出站人次
        SELECT
            出站 AS station,
            人次 AS exit_cnt,
            0 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期  IN (
            '2025-12-09'
          )
        UNION ALL
        -- 進站人次
        SELECT
            進站 AS station,
            0 AS exit_cnt,
            人次 AS entry_cnt
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 18 AND 23
          AND CAST(strftime('%w', 日期) AS INTEGER) BETWEEN 1 AND 5
          AND 日期 IN (
              '2025-12-09'
          )
    )
    GROUP BY station
)
COPY(
SELECT
    station,
    exit_cnt,
    entry_cnt,
    exit_cnt - entry_cnt AS net_exit
FROM evening_flows
WHERE exit_cnt > entry_cnt
ORDER BY net_exit DESC
) TO "C://workspace/mrt_5.md" (FORMAT MARKDOWN); 
stationexit_cntentry_cntnet_exit
頂溪19,4705,40714,063
新埔21,1237,48813,635
O景安13,032013,032
海山15,0283,01012,018
江子翠16,4385,51110,927
永安市場14,7243,87310,851
南勢角13,0262,24910,777
G大坪林8,00108,001
蘆洲9,2541,2887,966
府中14,1716,4407,731
淡水13,0765,6387,438
紅樹林9,1931,9757,218
BL板橋18,95412,1426,812
亞東醫院11,8655,0576,808
徐匯中學8,0381,5746,464
三民高中7,6531,3506,303
三和國中7,9131,6836,230
三重國小7,5271,6665,861
迴龍7,1221,5385,584
丹鳳5,9731,1764,797
新店區公所6,9232,2744,649
北投8,0323,6494,383
永寧6,8802,5444,336
新莊6,3362,0104,326
新店5,4261,5193,907
台北橋5,8121,9773,835
七張7,5593,7813,778
菜寮5,4861,7483,738
萬芳醫院5,9662,2463,720
東湖5,0841,5363,548
萬隆5,3161,8593,457
土城4,7351,2843,451
內湖5,5112,0673,444
後山埤7,6604,4403,220
龍山寺11,8568,8313,025
景美7,1084,1832,925
竹圍4,6821,8542,828
O頭前庄2,44202,442
唭哩岸3,5911,2042,387
明德5,0962,7532,343
三重4,3242,1162,208
葫洲4,3002,1092,191
南港9,3007,5841,716
辛亥2,0793941,685
圓山8,8067,2751,531
麟光2,2086901,518
永春7,8986,4501,448
木柵2,2668491,417
石牌9,6808,2641,416
大湖公園1,7894131,376
文德2,5121,3221,190
復興崗1,9367491,187
小碧潭1,6985781,120
頂埔4,3043,2151,089
輔大5,2654,1781,087
芝山8,6347,5741,060
萬芳社區1,279336943
奇岩3,3402,552788
六張犁4,3323,771561
大直3,3863,110276
動物園1,6041,434170

大家假日 最喜歡去哪裡 所以抓 是假日 就好 出站最多的地方 但是要回家 所以應該進出站是同一站 但無法識別 是同一人

應該會是 假設是 出門 大直 到 北車 回程 北車到大直 那當天會各加1

台北捷運 一天 可以收多少運費?

然後 載入資料 mrt_price

先對對看資料 會發現 有一些資料

會 對不上 運費 是 北捷上傳的資料 大橋頭站 是大橋頭站

但運費網頁的 大橋頭站 叫做大橋頭

修正運費表即可

mrt-2.png
with agg as (
select
	進站,
	出站,
	sum(人次) as count
from
	mrt
where
	strftime('%Y', 日期)= '2025'
	and strftime('%m', 日期) = '12'
group by
	進站,
	出站)
select
	sum(count * 價格)
from
	agg
left join mrt_price mrt_price on
	agg.進站 = mrt_price.進站
	and agg.出站 = mrt_price.出站
where
	價格 is not null;

可得知 北捷在 2025/12 一個月收入是 1,787,589,240 17億左右

mrt-3.png

如何驗證 去找 北捷財報

看 114年 12 月 會計報 第三頁

可以看到 客運收入 實際數 為 1,693,344,444

mrt-4.png

差異數的可能

  1. 運費沒有用折扣金額去算
  2. 有些沒有對到運費的站 但是 沒對到的應該要差更多才對

台北捷運 哪天 收入最多?

WITH revenue_by_day AS (
    SELECT
        日期,
        SUM(人次 * 價格) AS daily_revenue
    FROM mrt
    JOIN mrt_price p
      ON mrt.進站 = p.進站
     AND mrt.出站 = p.出站
    WHERE 價格 IS NOT NULL
    GROUP BY 日期
)
SELECT
    日期,
    daily_revenue
FROM revenue_by_day
ORDER BY daily_revenue DESC
LIMIT 1;

結果為 2019-12-31 的跨年 一天賺 快八千萬

日期daily_revenue
2019-12-3179,201,185

台北捷運 哪一天 收入最少?

WITH revenue_by_day AS (
    SELECT
        日期,
        SUM(人次 * 價格) AS daily_revenue
    FROM mrt
    JOIN mrt_price p
      ON mrt.進站 = p.進站
     AND mrt.出站 = p.出站
    WHERE  價格 IS NOT NULL
    GROUP BY 日期
)
SELECT
    日期,
    daily_revenue
FROM revenue_by_day
ORDER BY daily_revenue ASC
LIMIT 2;

竟然是在2026/01/01 開年 XD

日期daily_revenue
2026-01-012,981,560

但在想是不是可能是資料批次 導致 資料不完整

所以改成 limit 10

日期daily_revenue
2026-01-012,981,560
2020-01-014,028,475
2021-06-064,194,455
2024-10-314,376,430
2021-06-134,439,155
2021-06-144,678,255
2021-06-205,047,820
2021-06-055,448,720
2021-06-275,614,970
2021-09-125,638,945

結果 2020/01/01 的跨年也是 最低收入

2,021 就是疫情

台北捷運 哪一站 收入最多?

簡單想 應該是最多人流 就會賺最多錢

SELECT
    mrt.出站 AS station,
    SUM(人次 * 價格) AS revenue
FROM mrt
JOIN mrt_price p
  ON mrt.進站 = p.進站
 AND mrt.出站 = p.出站
WHERE 價格 IS NOT NULL
GROUP BY mrt.出站
ORDER BY revenue DESC
LIMIT 10;
stationrevenuerevenue_fmt
台北車站1034545223010,345,452,230
西門48608886904,860,888,690
市政府47949739154,794,973,915
淡水45443959504,544,395,950
忠孝復興33031840153,303,184,015
中山32510545453,251,054,545
新埔29796077852,979,607,785
南京復興29272903052,927,290,305
台北101/世貿26685314852,668,531,485
頂溪26601942802,660,194,280

北車不意外

台北捷運 哪幾站 收入最差?

簡單想 應該是最沒人流 就會賺最多錢

SELECT
    mrt.出站 AS station,
    SUM(人次 * 價格) AS revenue
FROM mrt
JOIN mrt_price p
  ON mrt.進站 = p.進站
 AND mrt.出站 = p.出站
WHERE 價格 IS NOT NULL
GROUP BY mrt.出站
ORDER BY revenue asc
LIMIT 20;
stationrevenue
十四張38976040
橋和48483895
新埔民生51448765
秀朗橋63525360
板新67427795
中原68478730
景平90932975
幸福96243140
中和108935795
新北產業園區109195285
萬芳社區179342335
辛亥246687145
頭前庄299032030
小碧潭299499510
忠義300742630
大湖公園305584305
麟光308471675
復興崗340189250
先嗇宮374987925
木柵375276470

台北捷運站 有適合居住 也適合 上班的 站點嗎? (出站,入站 在下班時間 相對平均 人流穩定)

WITH rush_hour AS (
    SELECT
        日期,
        站點,
        SUM(進站人次) AS in_cnt,
        SUM(出站人次) AS out_cnt
    FROM (
        SELECT
            日期,
            進站 AS 站點,
            人次 AS 進站人次,
            0 AS 出站人次
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 17 AND 20

        UNION ALL

        SELECT
            日期,
            出站 AS 站點,
            0 AS 進站人次,
            人次 AS 出站人次
        FROM mrt
        WHERE CAST(時段 AS INTEGER) BETWEEN 17 AND 20
    )
    WHERE strftime('%w', 日期) BETWEEN '1' AND '5'
    GROUP BY 日期, 站點
),
station_stats AS (
    SELECT
        站點,
        AVG(in_cnt) AS avg_in,
        AVG(out_cnt) AS avg_out,
        ABS(AVG(in_cnt) - AVG(out_cnt)) AS in_out_gap,
        (LEAST(AVG(in_cnt), AVG(out_cnt)) / NULLIF(GREATEST(AVG(in_cnt), AVG(out_cnt)), 0)) AS balance_ratio
    FROM rush_hour
    GROUP BY 站點
)
SELECT
    站點,
    avg_in,
    avg_out,
    balance_ratio,
    in_out_gap
FROM station_stats
WHERE balance_ratio >= 0.85
ORDER BY balance_ratio DESC, in_out_gap ASC
LIMIT 20;

拿北車 當作分隔線 北車 算是 中轉站 進進出出人很多 是正常的

站點avg_inavg_outbalance_ratioin_out_gap
永春6569.7170138888896552.0842013888890.997316046876490617.6328125
頭前庄1412.9197048611111418.9531250.99574797783479366.033420138888914
奇岩2694.8472222222222668.4292534722220.990196858459302526.41796875
台電大樓5651.9670138888895592.2834201388890.989440208408269959.68359375
松山8945.9691840277778715.7599826388890.9742667120070225230.2092013888887
劍潭9273.2482638888899551.3810763888890.9708803564347833278.1328125
中和943.5275437459494977.1017498379780.965638986832644833.57420609202859
石牌8551.8181423611118860.1462673611110.9652005603862529308.328125
西門20485.8693576388921237.9461805555550.9645880624932919752.0768229166642
頂埔2766.6401909722222932.50781250.9434383019132101165.86762152777783
大直3075.50868055555572876.02560763888870.9351381856998587199.48307291666697
台北車站41148.0998263888944256.1063368055550.9297722559060313108.0065104166642
板新532.2657161373946584.60661049902790.910468179076944952.34089436163322
六張犁3477.34114583333353845.10373263888870.9043556136902553367.7625868055552
文德1735.10590277777781927.62847222222220.9001246494234965192.52256944444434
Y板橋1665.65651328580681498.11471160077780.8994139545886789167.541801685029
士林9130.1041666666668050.1575520833330.88171584958185491079.946614583333
芝山6929.7660590277777861.3107638888890.8815026230561723931.5447048611113
圓山7254.0164930555568259.9435763888890.87821622823080981005.927083333333

算得更精準的宜居捷運站

WITH flow AS (
    -- 進站事件
    SELECT
        日期,
        進站 AS station,
        人次 AS entry_cnt,
        0 AS exit_cnt
    FROM mrt
    WHERE
        CAST(時段 AS INTEGER) BETWEEN 18 AND 20
        AND strftime('%w', 日期) IN ('1','2','3','4') -- 週一~週四

    UNION ALL

    -- 出站事件
    SELECT
        日期,
        出站 AS station,
        0 AS entry_cnt,
        人次 AS exit_cnt
    FROM mrt
    WHERE
        CAST(時段 AS INTEGER) BETWEEN 18 AND 20
        AND strftime('%w', 日期) IN ('1','2','3','4')
),daily AS (
    SELECT
        日期,
        station,
        SUM(entry_cnt) AS entry_cnt,
        SUM(exit_cnt) AS exit_cnt,
        SUM(entry_cnt + exit_cnt) AS total_flow,
        ABS(SUM(entry_cnt) - SUM(exit_cnt)) * 1.0
            / NULLIF(SUM(entry_cnt + exit_cnt), 0) AS imbalance_ratio
    FROM flow
    GROUP BY 日期, station
),station_agg AS (
    SELECT
        station,
        AVG(entry_cnt) AS avg_entry,
        AVG(exit_cnt) AS avg_exit,
        AVG(total_flow) AS avg_flow,
        AVG(imbalance_ratio) AS avg_imbalance,
        stddev(total_flow) / NULLIF(AVG(total_flow), 0) AS flow_cv
    FROM daily
    GROUP BY station
)

SELECT
    station,
    ROUND(avg_entry) AS avg_entry,
    ROUND(avg_exit) AS avg_exit,
    ROUND(avg_flow) AS avg_flow,
    ROUND(avg_imbalance, 3) AS imbalance_ratio,
    ROUND(flow_cv, 3) AS flow_stability
FROM station_agg
WHERE
    avg_flow > 5000
    AND avg_imbalance < 0.2
    AND flow_cv < 0.3
ORDER BY
    avg_imbalance ASC,
    flow_stability ASC;

根據下面這張圖 後山埤 在最右邊 劍潭 在最上面

代表 後山埤 上下班人流差距最明顯

劍潭 每天的人流量波動大

最棒的該是永春 價格也會很棒

台北捷運最適合租住的站點.png

北捷 平均每月 賺多少錢

COPY(
WITH daily AS (
    SELECT
        日期,
        SUM(人次 * 價格) AS daily_revenue
    FROM mrt
    JOIN mrt_price p
      ON mrt.進站 = p.進站
     AND mrt.出站 = p.出站
    WHERE 價格 IS NOT NULL
    GROUP BY 日期
)
SELECT
    strftime('%Y-%m', 日期) AS year_month,
    AVG(daily_revenue) AS avg_daily_revenue,
    SUM(daily_revenue) AS monthly_revenue
FROM daily
GROUP BY year_month
ORDER BY year_month) TO "C://workspace/mrt-income.csv"
mrt-5.png

檔案

住在淡水的人 都是去那裏上班 ?

COPY(
    select 日期,時段,進站,出站,人次 from mrt 
    where 進站='淡水' and strftime('%Y',日期)='2025' and strftime('%d',日期)=9 and 
    strftime('%m',日期)=12) TO "C://workspace/淡水.csv";
mrt-20251209-淡水.png

code

import pandas as pd


df = pd.read_csv("淡水20251209.csv", encoding="utf-8")
df["時段"] = df["時段"].astype(int)
df["人次"] = df["人次"].astype(int)

flow = (
    df.groupby("出站")["人次"]
         .sum()
         .sort_values(ascending=False)
)
TOP_N = 10

top_flow = flow.head(TOP_N)
others = flow.iloc[TOP_N:].sum()

# 計算總人次
total = flow.sum()

labels = [f"淡水 ({total}人次)"]

for station, cnt in top_flow.items():
    pct = (cnt / total) * 100
    labels.append(f"<b>{station} ({cnt}人次, {pct:.1f}%)</b>")

others_pct = (others / total) * 100
labels.append(f"<b>其他 ({others}人次, {others_pct:.1f}%)</b>")

source = [0] * (TOP_N + 1)
target = list(range(1, TOP_N + 1)) + [TOP_N + 1]
value  = list(top_flow.values) + [others]

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node=dict(
        pad=30,           # 節點間距(重點)
        thickness=35,     # 節點寬度(重點)
        label=labels,
        line=dict(width=0),
        # color="#E0E0E0"    # 節點底色淡一點,字更清楚
    ),
    link=dict(
        source=source,
        target=target,
        value=value,
               hovertemplate="人次:%{value}<extra></extra>"
    )
)])

fig.update_layout(
    title_text="20025/12/09淡水站出站人流桑基圖",
    font_size=12,
       font=dict(
        family="Arial",
        size=18, # Set the font size here
        color="RebeccaPurple",
    ),
)

fig.show()

在內湖科學園區上班的人們 都是從哪裡來的呢?

西湖

COPY(SELECT
	日期,進站,出站,人次
FROM
	mrt
WHERE
	出站 = '港墘'
	AND
        CAST(時段 AS INTEGER) BETWEEN 5 AND 11
	AND
         strftime('%Y', 日期)= '2025'
	AND
日期 NOT IN ( '2025-01-01', '2025-01-27', '2025-01-28', '2025-01-29', '2025-01-30', '2025-01-31',
            '2025-02-12', '2025-02-28', '2025-04-03', '2025-04-04', '2025-05-01', '2025-05-30',
            '2025-09-29', '2025-10-06', '2025-10-10', '2025-10-24', '2025-12-25',)
    AND 人次 > 0
) TO  "C://workspace/港墘.csv";
mrt-西湖.png

港墘

mrt-西湖.png

那我們的 臥城 第一名 頂溪 大家都是去那裡上班呢?

COPY(SELECT
	日期,進站,出站,人次
FROM
	mrt
WHERE
	進站 = '頂溪'
	AND
        CAST(時段 AS INTEGER) BETWEEN 5 AND 10
	AND
         strftime('%Y', 日期)= '2025'
	AND
日期 NOT IN ( '2025-01-01', '2025-01-27', '2025-01-28', '2025-01-29', '2025-01-30', '2025-01-31',
            '2025-02-12', '2025-02-28', '2025-04-03', '2025-04-04', '2025-05-01', '2025-05-30',
            '2025-09-29', '2025-10-06', '2025-10-10', '2025-10-24', '2025-12-25',)
    AND 人次 > 0
) TO  "C://workspace/頂溪.csv";
mrt-頂溪.png

根據這些分析 可以再想想有哪些商業用途

台北捷運站列表 共 117 站

補充

INSTALL markdown FROM community;
LOAD markdown;