這個單元我們要利用 for 迴圈將所有的歷史數據爬下來,並且繪製所有的歷史股價。我們也會介紹一些 for 迴圈的進階技巧,並且將這些技巧結合起來,完成這次的功能,想要學習python,就慢慢跟著我們一步一步來吧!
![Python新手教學(Part 3):全球指數歷史數據下載大全 1 thumbnail 5 4](http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-5-4-1024x679.png)
延續上個單元,我們應該已經爬取了world_index
這張表格:
![Python新手教學(Part 3):全球指數歷史數據下載大全 2 1 3 1](http://34.96.136.135/wp-content/uploads/2020/07/1-3-1-1024x314.png)
然後還有一個我們寫好的function
import json
import requests
import datetime
import pandas as pd
import numpy as np
def crawl_price(stock_id):
d = datetime.datetime.now()
url = "https://query1.finance.yahoo.com/v8/finance/chart/"+stock_id+"?period1=0&period2="+str(int(d.timestamp()))+"&interval=1d&events=history&=hP2rOschxO0"
res = requests.get(url)
data = json.loads(res.text)
df = pd.DataFrame(data['chart']['result'][0]['indicators']['quote'][0], index=pd.to_datetime(np.array(data['chart']['result'][0]['timestamp'])*1000*1000*1000))
return df
接下來就可以將他們結合,來爬取歷史資料了!在爬取資料之前,有幾個程式的小技巧必須要學會
1. for 迴圈
假如我們要執行重複性的動作,通常第一件事情就是想到for 迴圈,例如我們想要印出1~9,不用for迴圈,我們可以寫成
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
![Python新手教學(Part 3):全球指數歷史數據下載大全 3 2 3](http://34.96.136.135/wp-content/uploads/2020/07/2-3-1024x328.png)
for i in [1,2,3,4,5,6,7,8,9]:
print(i)
![Python新手教學(Part 3):全球指數歷史數據下載大全 4 3 2 1](http://34.96.136.135/wp-content/uploads/2020/07/3-2-1-1024x216.png)
這樣短短的就寫完了!其中
第一行:我們有一個變數i,他會從1~9不斷變換,並且執行下方的print(i)。第二行要記得加上前方四個空白,通常叫做縮排「indent」,當第一行有for
這個標示後,之後就必須用縮排indent直到寫完for迴圈裡的內容為止。
但有時候我們希望同時做兩個迴圈呢?
使用zip
我們可以使用zip,一次執行兩個list:
for number, letter in zip([1,2,3], ['a', 'b', 'c']):
print(number, letter)
![Python新手教學(Part 3):全球指數歷史數據下載大全 5 4 2](http://34.96.136.135/wp-content/uploads/2020/07/4-2-1024x129.png)
最後,我們要使用 dictionary 將全球的指數給存起來。
dictionary
這邊先示範最簡單的用法:
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
![Python新手教學(Part 3):全球指數歷史數據下載大全 6 6 1 1](http://34.96.136.135/wp-content/uploads/2020/07/6-1-1-1024x248.png)
結合上述的小功能,就可以寫一個程式將世界指數都抓下來了!
我建議你自己試試看~
寫完之後再往下拉看範例:
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)
![Python新手教學(Part 3):全球指數歷史數據下載大全 7 5 2](http://34.96.136.135/wp-content/uploads/2020/07/5-2-1024x445.png)
假如你有認真研究前三點功能,相信這些代碼應該難不倒你!其中沒有教到的是,我們利用time.sleep(5)
,來休息一下,不要抓的太頻繁,不然會被封鎖,除此之外,上述代碼非常簡單,寫一個for迴圈,將所有的指數都抓下來,存在world_index_history
中。
繪製指數
接下來,我們可以用一樣的for迴圈,來將指數給畫出來
for name, history in world_index_history.items():
history.close.plot()
![Python新手教學(Part 3):全球指數歷史數據下載大全 8 f 1](http://34.96.136.135/wp-content/uploads/2020/07/f-1-1024x597.png)
這個單元的程式碼,都可以使用 colab 來執行喔!趕快來玩玩看吧!
有了指數,接下來要做什麼呢?
下個單元,我們要來分析一下這些指數,看看哪些適合投資,哪些不適合,敬請期待~
這一系列是我們影音課程的化簡版,