Python新手教學(3)全球指數歷史數據

這個單元我們要利用 for 迴圈將所有的歷史數據爬下來,並且繪製所有的歷史股價。我們也會介紹一些 for 迴圈的進階技巧,並且將這些技巧結合起來,完成這次的功能,想要學習python,就慢慢跟著我們一步一步來吧!

延續上個單元,我們應該已經爬取了world_index這張表格:

然後還有一個我們寫好的function

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import io
import requests
import datetime
import pandas as pd

def crawl_price(stock_id):
now = int(datetime.datetime.now().timestamp())+86400
url = "https://query1.finance.yahoo.com/v7/finance/download/" + stock_id + "?period1=0&period2=" + str(now) + "&interval=1d&events=history&crumb=hP2rOschxO0"

response = requests.post(url)

f = io.StringIO(response.text)
df = pd.read_csv(f, index_col='Date', parse_dates=['Date'] )

return df

接下來就可以將他們結合,來爬取歷史資料了!在爬取資料之前,有幾個程式的小技巧必須要學會

1. for 迴圈

假如我們要執行重複性的動作,通常第一件事情就是想到for 迴圈,例如我們想要印出1~9,不用for迴圈,我們可以寫成

1
2
3
4
5
6
7
8
9
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)

但很明顯我們就已經快要中風了,所以改成for迴圈後

1
2
for i in [1,2,3,4,5,6,7,8,9]:
print(i)

這樣短短的就寫完了!其中
第一行:我們有一個變數i,他會從1~9不斷變換,並且執行下方的print(i)。第二行要記得加上前方四個空白,通常叫做縮排「indent」,當第一行有for這個標示後,之後就必須用縮排indent直到寫完for迴圈裡的內容為止。

但有時候我們希望同時做兩個迴圈呢?

使用zip

我們可以使用zip,一次執行兩個list:

1
2
for number, letter in zip([1,2,3], ['a', 'b', 'c']):
print(number, letter)

最後,我們要使用 dictionary 將全球的指數給存起來。

dictionary

這邊先示範最簡單的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
d = {}
d['a'] = 1
d['b'] = 2

# 查找
print(d['b']) # 2

# 迴圈
# 其中,d.items 有點像是zip的感覺,
# 針對dictionary中的['a', 'b']和[1,2]進行迴圈)
for letter, number in d.items():
print(letter, number)
# a 1
# b 2

結合上述的小功能,就可以寫一個程式將世界指數都抓下來了!
我建議你自己試試看~
寫完之後再往下拉看範例:

1
2
3
4
5
6
7
8
import time
world_index_history = {}
for symbol, name in zip(world_index['Symbol'], world_index['Name']):

print(name)

world_index_history[name] = crawl_price(symbol)
time.sleep(5)

假如你有認真研究前三點功能,相信這些代碼應該難不倒你!其中沒有教到的是,我們利用time.sleep(5),來休息一下,不要抓的太頻繁,不然會被封鎖,除此之外,上述代碼非常簡單,寫一個for迴圈,將所有的指數都抓下來,存在world_index_history中。

繪製指數

接下來,我們可以用一樣的for迴圈,來將指數給畫出來

1
2
for name, history in world_index_history.items():
history.Close.plot()

有了指數,接下來要做什麼呢?

下個單元,我們要來分析一下這些指數,看看哪些適合投資,哪些不適合,敬請期待~

這一系列是我們影音課程的化簡版,

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!