自從2019年底亞洲出現疫情以來,冠狀病毒COVID-19的大流行造成了毀滅性的影響。該病毒傳播到了大多數國家,引發嚴重的呼吸道感染並造成了大量人員死亡。該病毒還使全世界一半的人口處於居家隔離狀態,這導致世界經濟下滑和股票價格下跌。
本教程的目的是介紹如何收集和分析新冠大流行期間的股票數據。為此,我們將用到Python,Google Sheets和Google Finance。
在本教程的第2節中,我們將介紹如何配置Google Sheets,以便能讓Python與Google Sheets進行交互。在第3節中,我們將介紹如何使用Google Finance收集股票數據,以及如何使用Python將這些數據存儲在Google Sheets中。在第4節中,我們將介紹如何從Google Sheets中讀取數據並使用Python和Pandas對其進行分析。
本教程的源代碼可以在這個github庫(https://github.com/adilmoujahid/coronavirus-covid19-stocks-analysis)中找到。
1.案例研究
在本教程中,我們將重點介紹S&P 500強的公司。我們要收集以下數據:
3個不同日期(1月1日,3月23日和4月9日)的股票價格
每家公司發行的股票數量
公司運營的行業/領域(按照GICS分類系統)
在收集和整理完數據後,我們將使用Python和Pandas庫來分析數據。
2.技術支持
我們將使用以下服務和庫來收集和分析數據:
維基百科:我們將使用這個維基百科網頁(https://en.wikipedia.org/wiki/List_of_S%26P_500_companies)獲取S&P 500強公司的列表。
Google Finance:Google Finance是一個Google管理的專注於商業新聞和財務信息的網站[1]。Google Finance沒有可以直接在Python中使用的API,但是我們可以使用名為GOOGLEFINANCE的公式,從Google Sheets中訪問它。我們將使用Python來寫入GOOGLEFINANCE的公式。
Goole Sheets:我們將使用Google Sheets作為後端來存儲股票數據。為了直接讓Python與Google Sheets進行交互,我們需要3個庫:Google Auth,gspread和gspread-pandas。我們還需要配置Google Sheets,使其能夠使用Python訪問電子表格。
Python,Jupyter Notebook和Pandas:我們將使用Python,Jupyter Notebook和Pandas來收集,存儲和分析數據。
2.1.在GCP中配置Google Sheets
為了通過Python訪問Google Sheets,我們需要來自Google雲計算服務(GCP)的密鑰,我們可以使用以下步驟獲取密鑰。
步驟1:轉到Google雲計算服務(https://cloud.google.com/),使用您的Google帳戶登錄,然後點擊Console。
步驟2:依次點擊Select a project→NEW PROJECT,輸入項目名稱,然後點擊CREATE
步驟3:依次點擊APIs & Services→Dashboard→ENABLE APIS AND SEVICES。
步驟4:同時搜索Google Drive API和Google Sheets API,然後點擊ENABLE
步驟5:在Google Sheets API頁面中,依次點擊MANAGE→CREATE CREDENTIALS,然後選擇Google Sheets API。
步驟6:選擇Web sever和Application data,然後API密鑰選擇JSON格式。點擊Continue,用JSON格式下載您的密鑰。
步驟7:下載JSON文件後,將其保存在Jupyter Notebook所在的文件夾中,並複製client_email的信息。
2.2.Google Sheets的配置
最後,我們需要創建一個新的Google Sheets,並讓它與上一步創建的client_email進行共享。打開Google Driver,創建一個新的Google Sheets,將其名稱改為“stocks-data”。點擊Share按鈕,輸入client_email,然後點擊Send。
3.收集和存儲股票數據
現在我們已經配置好了Google Sheets,那麼可以開始使用Python和Jupyter Notebook收集數據了。我們首先導入需要的庫。
從維基百科獲取S&P 500強公司的名單
作為數據收集的第一步,我們需要獲取S&P 500強公司名單。為此,我們將使用下面的維基網頁:https://en.wikipedia.org/wiki/List_of_S%26P_500_companies
幸運的是,我們可以用Pandas來讀取頁面,提取S&P 500強公司的表格,並將它們存儲到Pandas的Dataframe中。
我們需要的最重要的數據是:
代號:股票代號
證券:公司名稱
GICS行業:公司遵循全球行業分類標準(GICS)經營的行業。
GICS子行業:公司遵循全球行業分類標準(GICS)經營的子行業。
我們可以開始查看一些數據,例如列表中的公司數量。
我們獲取的公司有505家,而不是500家。這是因為有些公司具有雙重股權結構,並且在列表中被多次列出。我們可以在其證券名稱中通過搜索關鍵詞“Class”來獲得這些公司的列表。
列表中有10傢俱有雙重結構的公司。如果考慮到這一點,我們可以知道列表中有500家唯一的公司。
我們還可以按行業和子行業查看公司的數量。
從Google Finance獲取股票數據
現在我們有了S&P 500強公司的列表,我們可以在DataFrame中添加Google Sheets的公式,這些公式將從Google Finance中獲取每家公司的股價和發行的股票數。請注意,一旦將Pandas的DataFrame保存在Google Sheets中,這些公式就會執行。
您可以在這裡找到GOOGLEFINANCE公式的介紹:https : //support.google.com/docs/answer/3093281
我們首先獲取3個不同日期的股價:1月1日,3月23日和4月9日:
2020年1月1日是今年的第一個日子。我們獲取這個價格的目的是計算自2020年開始以來的股價下跌。
S&P 500強公司在2020年抄底的日期是2020年3月23日。
2020年4月9日是股票市場開放的最後日期(撰寫本文時)
接下來,我們添加公式以計算每個公司發行股票的數量。我們可以將此數據與股票價格放在一起,以計算公司在3個不同日期的市值。
用Google Sheet存儲DataFrame
我們首先創建一個變量,該變量包含從Google雲計算服務獲得的證書。
接下來,我們在稱為spread的變量中讀取空的Google Sheet。
我們定義了要保留的變量列表。
最後一步是將DataFrame保存到Google Sheets中。
如果我們轉到Google Sheet,則可以看到數據已經被正確存儲。
4.分析數據
4.1.讀取數據
我們首先從Google Sheets中讀取數據,放到一個新的DataFrame中。
我們可以看到DataFrame包含股票價格和股票數量的實際值(而不是Google Sheets公式)。
我們需要將股票價格和已發行股票數的數據類型由string改成numeric。
4.2.加入市值數據和股票價格的百分比變化
加入市值數據
接下來,我們將添加3個不同日期的市值。
加入股票價格的百分比變化
4.3.分析數據
S&P 500強公司總市值的變化
S&P 500強公司從1月1日到3月23日損失了8.7萬億美元,但從3月23日到4月9日卻損失了4.6萬億美元。
各行業總市值的變化
在2020年S&P 500強公司抄底的那一天(3月23日),信息技術和金融領域的總市值降幅最大(與1月1日相比),分別為1.592萬億和1.518萬億美元。
截至4月9日,與1月1日相比,金融和工業領域的總市值跌幅最大。
按股票價格百分比變動對公司進行排序
從上表我們可以看到,受害最嚴重的公司是三大郵輪公司:挪威郵輪公司,嘉年華公司,皇家加勒比郵輪公司。這些公司的股價下跌了70%以上。
從1月1日到4月9日,505只股票中只有56只出現了正增長。
按行業分類的股票價格百分比變化
我們可以看到,能源股受到的衝擊最大,股價平均下跌了49.8%。
在下面,我們可以直觀地看到從1月1日到4月9日這11個行業的股價百分比變化的箱線圖。
如果我們查看各子行業的平均股價變化百分比;我們可以看到,與旅遊相關的行業、石油和天然氣以及百貨商店受到的打擊最大。138個子行業中,有118個的平均股價在1月1日到4月9日下降。
按行業分類的股票價格百分比變化(從3月23日至4月9日)
按子行業分類的股票價格百分比變化(從3月23日至4月9日)
從3月23日到4月9日,所有行業和子行業(食品零售除外)的平均股價均上漲。
結論
在本教程中,我們學習瞭如何使用Python,Google Sheets和Google Finance收集和分析新冠大流行背景下的股票數據。我們仍處於新冠大流行的早期階段,並且尚不清楚它對社會和經濟的中長期影響是什麼。在接下來的幾周內繼續進行此分析,看看股市能否從2020年的損失中恢復過來,這將是很有趣的。
本教程的源代碼可以在這個github庫(https://github.com/adilmoujahid/coronavirus-covid19-stocks-analysis)中找到。
參考文獻
[1] https://zh.wikipedia.org/wiki/Google_Finance
英文原文:http://adilmoujahid.com/posts/2020/04/stocks-analysis-covid19-coronavirus-python/譯者:桃夭