不間斷 Python 挑戰 Day 28 - 處理CSV文件

更新於 發佈於 閱讀時間約 31 分鐘

CSV全名為Comma-Separated Values,中文稱為逗號分隔值,也可稱為字元分隔值,因為分隔字元可以不是逗號。它以純文字的形式儲存表格資料,同一列的資料以逗號或其它符號分隔成不同欄位,每一列的資料間以換行符號分隔。網路上很多資料的格式都是以CSV檔案呈現,例如交通部中央氣象局觀測資料查詢系統、或是台灣證券交易所的上市股票交易資訊等。這篇文章會說明如何以Python內建的csv模組來處理CSV檔案。

開啟CSV檔案

台灣證券交易所的上市個股日成交資訊為例,進入台灣證券交易所網站後,點選"交易資訊"中的"個股日成交資訊",進入查詢畫面。

台灣證券交易所

台灣證券交易所

假設我們想要查詢"元大台灣50"在二月份的日成交資訊,可以在股票代碼欄位輸入"元大台灣50"的股票代碼"0050",按下查詢後便可在網頁上顯示出股票的開、高、低、收等資訊,並可點下"CSV下載"的連結,將該表格的CSV檔案下載下來。

個股日成交資訊

個股日成交資訊

111年2月元大台灣50日成交資訊

111年2月元大台灣50日成交資訊

以記事本開啟下載的檔案,可以看到這個CSV檔案的原始格式。

使用記事本開啟CSV檔

使用記事本開啟CSV檔

以下是使用Excel開啟檔案的結果。

使用Excel開啟CSV檔

使用Excel開啟CSV檔

讀取CSV檔案

如同在上一節開啟純文字文件的方式,CSV檔案也適用同樣的方式開啟,搭配with關鍵字,使用open()函數開啟CSV檔案後,可用read()函數將檔案內容讀出來,或是使用readlines()函數將檔案內容存成串列。

with open("STOCK_DAY_0050_202202.csv") as csv_read_file:
  csv_read_data = csv_read_file.readlines()
  print(csv_read_data)

執行結果如下:

['"111年02月 0050 元大台灣50       各日成交資訊"\n', '"日期","成交股數","成交金額","開盤價","最高價","最低價","收盤價","漲跌價差","成交筆數",\n', '"111/02/07","25,312,461","3,593,629,562","142.60","142.80","141.20","142.30","+0.75","27,821",\n', '"111/02/08","11,521,967","1,648,442,209","143.30","143.50","142.80","142.90","+0.60","12,271",\n', '"111/02/09","8,470,497","1,211,943,126","143.50","143.50","142.65","143.40","+0.50","10,362",\n', '"111/02/10","6,325,130","912,680,055","143.90","145.05","143.50","145.05","+1.65","9,065",\n', '"111/02/11","4,556,282","659,321,520","144.70","145.05","144.05","144.95","-0.10","6,376",\n', '"111/02/14","12,907,152","1,841,179,721","143.95","143.95","142.20","142.70","-2.25","23,175",\n', '"111/02/15","8,139,525","1,160,338,475","142.70","143.20","141.95","142.05","-0.65","16,664",\n', '"111/02/16","6,906,308","995,478,507","143.90","144.45","143.80","144.40","+2.35","9,252",\n', '"111/02/17","5,161,916","746,195,906","144.40","145.00","144.00","144.50","+0.10","7,328",\n', '"111/02/18","4,068,622","584,581,991","143.50","144.15","143.05","144.10","-0.40","5,997",\n', '"111/02/21","4,807,904","689,347,421","143.45","143.85","142.80","143.80","-0.30","8,772",\n', '"111/02/22","20,814,988","2,943,619,804","142.60","142.65","140.75","141.85","-1.95","42,631",\n', '"111/02/23","4,803,500","681,745,270","141.85","142.40","141.65","142.25","+0.40","8,142",\n', '"111/02/24","32,725,876","4,565,434,642","141.10","141.10","138.30","138.80","-3.45","67,346",\n', '"111/02/25","24,731,645","3,424,810,229","139.05","139.20","137.85","138.50","-0.30","43,146",\n', '"說明:"\n', '"符號說明:+/-/X表示漲/跌/不比價"\n', '"當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。"\n', '"ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。"\n', '\n']

可以注意到若以這種方式讀取檔案,串列的元素是以字串的形式存在,且將每個欄位以及逗號合在一起,難以做進一步的資料處理。在此,我們可以導入csv模組的reader()方法建立reader物件,再使用for迴圈逐行讀出reader物件資料,或是將其轉換為串列,每個欄位就可以被分開,成為串列的一個元素。

  • 使用for迴圈逐行讀出Reader物件資料:
with open("STOCK_DAY_0050_202202.csv") as csv_read_file:
  csv_read_data = csv.reader(csv_read_file)
  for row in csv_read_read_data:
    print(row)

執行結果:

['111年02月 0050 元大台灣50       各日成交資訊']
['日期', '成交股數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌價差', '成交筆數', '']
['111/02/07', '25,312,461', '3,593,629,562', '142.60', '142.80', '141.20', '142.30', '+0.75', '27,821', '']
['111/02/08', '11,521,967', '1,648,442,209', '143.30', '143.50', '142.80', '142.90', '+0.60', '12,271', '']
['111/02/09', '8,470,497', '1,211,943,126', '143.50', '143.50', '142.65', '143.40', '+0.50', '10,362', '']
['111/02/10', '6,325,130', '912,680,055', '143.90', '145.05', '143.50', '145.05', '+1.65', '9,065', '']
['111/02/11', '4,556,282', '659,321,520', '144.70', '145.05', '144.05', '144.95', '-0.10', '6,376', '']
['111/02/14', '12,907,152', '1,841,179,721', '143.95', '143.95', '142.20', '142.70', '-2.25', '23,175', '']
['111/02/15', '8,139,525', '1,160,338,475', '142.70', '143.20', '141.95', '142.05', '-0.65', '16,664', '']
['111/02/16', '6,906,308', '995,478,507', '143.90', '144.45', '143.80', '144.40', '+2.35', '9,252', '']
['111/02/17', '5,161,916', '746,195,906', '144.40', '145.00', '144.00', '144.50', '+0.10', '7,328', '']
['111/02/18', '4,068,622', '584,581,991', '143.50', '144.15', '143.05', '144.10', '-0.40', '5,997', '']
['111/02/21', '4,807,904', '689,347,421', '143.45', '143.85', '142.80', '143.80', '-0.30', '8,772', '']
['111/02/22', '20,814,988', '2,943,619,804', '142.60', '142.65', '140.75', '141.85', '-1.95', '42,631', '']
['111/02/23', '4,803,500', '681,745,270', '141.85', '142.40', '141.65', '142.25', '+0.40', '8,142', '']
['111/02/24', '32,725,876', '4,565,434,642', '141.10', '141.10', '138.30', '138.80', '-3.45', '67,346', '']
['111/02/25', '24,731,645', '3,424,810,229', '139.05', '139.20', '137.85', '138.50', '-0.30', '43,146', '']
['說明:']
['符號說明:+/-/X表示漲/跌/不比價']
['當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。']
['ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。']
[]
  • 將Reader物件轉換為串列,再使用for迴圈逐行讀出串列內容:
with open("STOCK_DAY_0050_202202.csv") as csv_read_file:
  csv_read_data = csv.reader(csv_read_file)
  csv_read_list = list(csv_read_data)
  for row in csv_read_list:
    print(row)

執行得到相同的結果:

['111年02月 0050 元大台灣50       各日成交資訊']
['日期', '成交股數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌價差', '成交筆數', '']
['111/02/07', '25,312,461', '3,593,629,562', '142.60', '142.80', '141.20', '142.30', '+0.75', '27,821', '']
['111/02/08', '11,521,967', '1,648,442,209', '143.30', '143.50', '142.80', '142.90', '+0.60', '12,271', '']
['111/02/09', '8,470,497', '1,211,943,126', '143.50', '143.50', '142.65', '143.40', '+0.50', '10,362', '']
['111/02/10', '6,325,130', '912,680,055', '143.90', '145.05', '143.50', '145.05', '+1.65', '9,065', '']
['111/02/11', '4,556,282', '659,321,520', '144.70', '145.05', '144.05', '144.95', '-0.10', '6,376', '']
['111/02/14', '12,907,152', '1,841,179,721', '143.95', '143.95', '142.20', '142.70', '-2.25', '23,175', '']
['111/02/15', '8,139,525', '1,160,338,475', '142.70', '143.20', '141.95', '142.05', '-0.65', '16,664', '']
['111/02/16', '6,906,308', '995,478,507', '143.90', '144.45', '143.80', '144.40', '+2.35', '9,252', '']
['111/02/17', '5,161,916', '746,195,906', '144.40', '145.00', '144.00', '144.50', '+0.10', '7,328', '']
['111/02/18', '4,068,622', '584,581,991', '143.50', '144.15', '143.05', '144.10', '-0.40', '5,997', '']
['111/02/21', '4,807,904', '689,347,421', '143.45', '143.85', '142.80', '143.80', '-0.30', '8,772', '']
['111/02/22', '20,814,988', '2,943,619,804', '142.60', '142.65', '140.75', '141.85', '-1.95', '42,631', '']
['111/02/23', '4,803,500', '681,745,270', '141.85', '142.40', '141.65', '142.25', '+0.40', '8,142', '']
['111/02/24', '32,725,876', '4,565,434,642', '141.10', '141.10', '138.30', '138.80', '-3.45', '67,346', '']
['111/02/25', '24,731,645', '3,424,810,229', '139.05', '139.20', '137.85', '138.50', '-0.30', '43,146', '']
['說明:']
['符號說明:+/-/X表示漲/跌/不比價']
['當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。']
['ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。']
[]

使用索引讀取串列內容

假設我們想讀取"元大台灣50"在二月份每天的收盤價,觀察一下上方資料的型態,可以看到資料的最前和最後有一些不屬於成交資訊的內容,因此對資料做一些簡易的判斷,捨去長度為1的列,即可用"日期"及"收盤價"所在的索引值讀出資料內容。

with open("STOCK_DAY_0050_202202.csv") as csv_read_file:
  csv_read_data = csv.reader(csv_read_file)
  csv_read_list = list(csv_read_data)

  for row in range(len(csv_read_list)-1):
    if len(csv_read_list[row]) > 1:
      print(csv_read_list[row][0], csv_read_list[row][6])

執行結果:

日期 收盤價
111/02/07 142.30
111/02/08 142.90
111/02/09 143.40
111/02/10 145.05
111/02/11 144.95
111/02/14 142.70
111/02/15 142.05
111/02/16 144.40
111/02/17 144.50
111/02/18 144.10
111/02/21 143.80
111/02/22 141.85
111/02/23 142.25
111/02/24 138.80
111/02/25 138.50

寫入CSV檔案

相對於讀取CSV檔案,寫入CSV檔案時,我們需要使用csv模組的writer()方法建立一個writer物件,再使用writerow()或writerows()方法逐行或一次寫入多行資料到CSV檔案。

以下範例將建立一個CSV檔案,將我們剛剛下載的"元大台灣50"在二月份的日成交資訊複製過來,其中newline=""的目的是避免每一列之間多出一個空白列。

with open("STOCK_DAY_0050_202202_copy.csv", mode="w", newline="") as csv_write_file:
  csv_write_data = csv.writer(csv_write_file)
  csv_write_data.writerows(csv_read_list)

執行過後,在主目錄底下會多出一個STOCK_DAY_0050_202202_copy.csv檔案,內容和STOCK_DAY_0050_202202.csv相同。

複製的CSV

複製的CSV

設定分隔符號:delimiter關鍵字

前面提到,CSV檔案的分隔字元可以不是逗號,在寫入CSV檔案時,需要在writer()方法內用到delimiter關鍵字,如以下範例使用空格" "做為分隔符號。

with open("STOCK_DAY_0050_202202_delimiter.csv", mode="w", newline="") as csv_write_file:
  csv_write_data = csv.writer(csv_write_file, delimiter=" ")
  csv_write_data.writerows(csv_read_list)

可以看到欄位之間的分隔不再是預設的逗點,而是變成空格。

使用空格做為欄位分隔符號

使用空格做為欄位分隔符號

在讀取分隔字元不是逗點的CSV檔案時,reader()方法也要做對應的設定,否則就會出現非預期的結果,如以下的錯誤範例,它在讀取前面使用空格分隔的CSV檔案"STOCK_DAY_0050_202202_delimiter.csv"時,把數字內的逗點當成了分隔點。

with open("STOCK_DAY_0050_202202_delimiter.csv") as csv_read_file:
  csv_read_data = csv.reader(csv_read_file)
  csv_read_list = list(csv_read_data)
  for row in csv_read_list:
    print(row)

執行結果:

['111年02月 0050 元大台灣50       各日成交資訊']
['日期 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 ']
['111/02/07 25', '312', '461 3', '593', '629', '562 142.60 142.80 141.20 142.30 +0.75 27', '821 ']
['111/02/08 11', '521', '967 1', '648', '442', '209 143.30 143.50 142.80 142.90 +0.60 12', '271 ']
['111/02/09 8', '470', '497 1', '211', '943', '126 143.50 143.50 142.65 143.40 +0.50 10', '362 ']
['111/02/10 6', '325', '130 912', '680', '055 143.90 145.05 143.50 145.05 +1.65 9', '065 ']
['111/02/11 4', '556', '282 659', '321', '520 144.70 145.05 144.05 144.95 -0.10 6', '376 ']
['111/02/14 12', '907', '152 1', '841', '179', '721 143.95 143.95 142.20 142.70 -2.25 23', '175 ']
['111/02/15 8', '139', '525 1', '160', '338', '475 142.70 143.20 141.95 142.05 -0.65 16', '664 ']
['111/02/16 6', '906', '308 995', '478', '507 143.90 144.45 143.80 144.40 +2.35 9', '252 ']
['111/02/17 5', '161', '916 746', '195', '906 144.40 145.00 144.00 144.50 +0.10 7', '328 ']
['111/02/18 4', '068', '622 584', '581', '991 143.50 144.15 143.05 144.10 -0.40 5', '997 ']
['111/02/21 4', '807', '904 689', '347', '421 143.45 143.85 142.80 143.80 -0.30 8', '772 ']
['111/02/22 20', '814', '988 2', '943', '619', '804 142.60 142.65 140.75 141.85 -1.95 42', '631 ']
['111/02/23 4', '803', '500 681', '745', '270 141.85 142.40 141.65 142.25 +0.40 8', '142 ']
['111/02/24 32', '725', '876 4', '565', '434', '642 141.10 141.10 138.30 138.80 -3.45 67', '346 ']
['111/02/25 24', '731', '645 3', '424', '810', '229 139.05 139.20 137.85 138.50 -0.30 43', '146 ']
['說明:']
['符號說明:+/-/X表示漲/跌/不比價']
['當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。']
['ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。']
[]

加上正確的delimiter關鍵字即可正確讀出CSV檔案內容。

with open("STOCK_DAY_0050_202202_delimiter.csv") as csv_read_file:
  csv_read_data = csv.reader(csv_read_file, delimiter=" ")
  csv_read_list = list(csv_read_data)
  for row in csv_read_list:
    print(row)

執行結果:

['111年02月 0050 元大台灣50       各日成交資訊']
['日期', '成交股數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌價差', '成交筆數', '']
['111/02/07', '25,312,461', '3,593,629,562', '142.60', '142.80', '141.20', '142.30', '+0.75', '27,821', '']
['111/02/08', '11,521,967', '1,648,442,209', '143.30', '143.50', '142.80', '142.90', '+0.60', '12,271', '']
['111/02/09', '8,470,497', '1,211,943,126', '143.50', '143.50', '142.65', '143.40', '+0.50', '10,362', '']
['111/02/10', '6,325,130', '912,680,055', '143.90', '145.05', '143.50', '145.05', '+1.65', '9,065', '']
['111/02/11', '4,556,282', '659,321,520', '144.70', '145.05', '144.05', '144.95', '-0.10', '6,376', '']
['111/02/14', '12,907,152', '1,841,179,721', '143.95', '143.95', '142.20', '142.70', '-2.25', '23,175', '']
['111/02/15', '8,139,525', '1,160,338,475', '142.70', '143.20', '141.95', '142.05', '-0.65', '16,664', '']
['111/02/16', '6,906,308', '995,478,507', '143.90', '144.45', '143.80', '144.40', '+2.35', '9,252', '']
['111/02/17', '5,161,916', '746,195,906', '144.40', '145.00', '144.00', '144.50', '+0.10', '7,328', '']
['111/02/18', '4,068,622', '584,581,991', '143.50', '144.15', '143.05', '144.10', '-0.40', '5,997', '']
['111/02/21', '4,807,904', '689,347,421', '143.45', '143.85', '142.80', '143.80', '-0.30', '8,772', '']
['111/02/22', '20,814,988', '2,943,619,804', '142.60', '142.65', '140.75', '141.85', '-1.95', '42,631', '']
['111/02/23', '4,803,500', '681,745,270', '141.85', '142.40', '141.65', '142.25', '+0.40', '8,142', '']
['111/02/24', '32,725,876', '4,565,434,642', '141.10', '141.10', '138.30', '138.80', '-3.45', '67,346', '']
['111/02/25', '24,731,645', '3,424,810,229', '139.05', '139.20', '137.85', '138.50', '-0.30', '43,146', '']
['說明:']
['符號說明:+/-/X表示漲/跌/不比價']
['當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。']
['ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。']
[]

程式範例

https://github.com/wjweng/marathon_python/blob/master/Day28/main.py

留言
avatar-img
留言分享你的想法!
菜雞 -avatar-img
2023/12/25
不好意有個問題想請敎1.第一個編制有可能順序會改變 ,會有可能是 證券代號 證券名稱 也可能是 證券名稱 證券代號2.證券代號也會隨時變化也不就指定查那一行那一列的資料這樣的查格網頁如何使用PTHONE 查資料
avatar-img
Wei-Jie Weng的沙龍
48會員
36內容數
Wei-Jie Weng的沙龍的其他內容
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/06/23
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
Thumbnail
2022/06/23
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
在交易千萬別見樹不見林 中示範如何在同一張圖表上加入不同週期的行情走勢,本篇將對MultiCharts初體驗-函式撰寫、MultiCharts初體驗-訊號撰寫 的程式進行改寫,讓程式可以讀取到多週期的K線資料。 在MC中可以用Data1、Data2、⋯⋯、Data99的指定方式,來存取圖表中的數列
Thumbnail
在交易千萬別見樹不見林 中示範如何在同一張圖表上加入不同週期的行情走勢,本篇將對MultiCharts初體驗-函式撰寫、MultiCharts初體驗-訊號撰寫 的程式進行改寫,讓程式可以讀取到多週期的K線資料。 在MC中可以用Data1、Data2、⋯⋯、Data99的指定方式,來存取圖表中的數列
Thumbnail
在上一篇文章中,我們學會了如何繪製最新的分鐘圖,讓我們了解最新一日的個股股價變化,不過有時分鐘圖太過細小,並無法了解到個股整體的趨勢狀況,這時我們就必須要使用到日線圖,因此,今天我們就來學習如何繪製日線圖吧!!
Thumbnail
在上一篇文章中,我們學會了如何繪製最新的分鐘圖,讓我們了解最新一日的個股股價變化,不過有時分鐘圖太過細小,並無法了解到個股整體的趨勢狀況,這時我們就必須要使用到日線圖,因此,今天我們就來學習如何繪製日線圖吧!!
Thumbnail
股價是股票匯集各式因素所組成的視覺圖,因此今天我們就來學學如何畫製個股的最新分鐘圖,讓你能夠一鍵輕鬆看到當日最新股價走勢圖,我們就開始來教學吧!!
Thumbnail
股價是股票匯集各式因素所組成的視覺圖,因此今天我們就來學學如何畫製個股的最新分鐘圖,讓你能夠一鍵輕鬆看到當日最新股價走勢圖,我們就開始來教學吧!!
Thumbnail
使用pandas,透過TWStock_2的資料,計算 6 日與12日RSI 值並繪製成圖。 首先先連接到TWStock_2資料庫將資料load出來。 這次load的資料一樣是2330台積電,然後我們一樣只取收盤價,修改日期格式。 之後要算出每日的U與D值(絕對漲跌),條件如下ㄑ 輸出會如下圖
Thumbnail
使用pandas,透過TWStock_2的資料,計算 6 日與12日RSI 值並繪製成圖。 首先先連接到TWStock_2資料庫將資料load出來。 這次load的資料一樣是2330台積電,然後我們一樣只取收盤價,修改日期格式。 之後要算出每日的U與D值(絕對漲跌),條件如下ㄑ 輸出會如下圖
Thumbnail
使用pandas,透過TWStock_2的資料,計算下列三種常用的技術指標 1. 移動平均線 2. 指數移動平均線 3. MACD 首先連接資料庫,然後我們只取"成交股數 , 開盤價 , 最高價 , 最低價 , 收盤價" 這5個columns代入新的tsmc( 名稱 ) code如下 參考連結如下
Thumbnail
使用pandas,透過TWStock_2的資料,計算下列三種常用的技術指標 1. 移動平均線 2. 指數移動平均線 3. MACD 首先連接資料庫,然後我們只取"成交股數 , 開盤價 , 最高價 , 最低價 , 收盤價" 這5個columns代入新的tsmc( 名稱 ) code如下 參考連結如下
Thumbnail
CSV全名為Comma-Separated Values,中文稱為逗號分隔值,也可稱為字元分隔值,因為分隔字元也可以不是逗號。它以純文字的形式儲存表格資料,同一列的資料以逗號或其它符號分隔成不同欄位,每一列的資料間以換行符號分隔。網路上很多資料的格式都是以CSV檔案呈現,例如交通部中央氣象局的觀測資
Thumbnail
CSV全名為Comma-Separated Values,中文稱為逗號分隔值,也可稱為字元分隔值,因為分隔字元也可以不是逗號。它以純文字的形式儲存表格資料,同一列的資料以逗號或其它符號分隔成不同欄位,每一列的資料間以換行符號分隔。網路上很多資料的格式都是以CSV檔案呈現,例如交通部中央氣象局的觀測資
Thumbnail
在昨天的教學中,我們學會了如何抓取單一股票在yahoo finance上最新一年的資料了,不過這樣一檔一檔慢慢抓實在是不符合我們程式教學的style,所以今天我就來教大家如何輕鬆輸入變數,便能抓取想要的股票以及區間,就讓我們來開始今天的教學吧!!
Thumbnail
在昨天的教學中,我們學會了如何抓取單一股票在yahoo finance上最新一年的資料了,不過這樣一檔一檔慢慢抓實在是不符合我們程式教學的style,所以今天我就來教大家如何輕鬆輸入變數,便能抓取想要的股票以及區間,就讓我們來開始今天的教學吧!!
Thumbnail
這張表是基於看財報不抓狂 :1分鐘找出好股票一書的程式碼做成的,之前我都是要自己一家一家複製貼上,很浪費時間。再加上一些自己想要的資訊而來。
Thumbnail
這張表是基於看財報不抓狂 :1分鐘找出好股票一書的程式碼做成的,之前我都是要自己一家一家複製貼上,很浪費時間。再加上一些自己想要的資訊而來。
Thumbnail
因為之前的表格,編輯權限共用人數到上限了,所以我另外開了一個新的副本 連結如下 https://docs.google.com/spreadsheets/d/1rJwOoEoYmT6o_e05D8f9PftVm2pL3YexNzMfc2ME37I/edit?usp=sharing
Thumbnail
因為之前的表格,編輯權限共用人數到上限了,所以我另外開了一個新的副本 連結如下 https://docs.google.com/spreadsheets/d/1rJwOoEoYmT6o_e05D8f9PftVm2pL3YexNzMfc2ME37I/edit?usp=sharing
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News