1105_4.4 汽泡圖
這些圖表展示的是從 2000 年到 2024 年之間每一年第一個交易日,各半導體公司收盤價變動百分比(Y 軸)與市值(氣泡大小及顏色)的情況。
解釋:
- X 軸:每個圖表的 X 軸展示的是各半導體公司的縮寫(
company_abbr
),如 TSMC、NVIDIA、Intel 等公司。 - Y 軸:Y 軸展示的是各公司當日的收盤價變動百分比(
Close Price Change%
)。這個百分比反映了該公司與前一日相比的股價波動。數值為正表示股價上升,數值為負表示股價下降。 - 氣泡大小:每個氣泡的大小代表了該公司在當年第一個交易日的市值(
Market Cap
),市值越大,氣泡越大。 - 顏色:氣泡的顏色也表示該公司的市值,從紫色到黃色(根據
viridis
色彩映射)。紫色表示市值較小,而黃色表示市值較大。
圖表中的趨勢觀察:
- 市值變化:隨著時間推移,市值較大的公司(如 TSMC、NVIDIA、Samsung 等)的氣泡越來越大,特別是在近些年(2020 年後),可以看到這些公司市值不斷增大。
- 股價變動:收盤價變動百分比在每年的圖中表現不同。有些年份有較大波動(如 2000 年和 2001 年),有些年份的變動幅度則較小(如 2010 年到 2015 年)。
- 市值領先者:從 2020 年開始,TSMC、NVIDIA 和 Samsung 這些公司的氣泡顯著增大,表明這些公司在市值上的主導地位變得更加明顯。
結論:
這些圖表給出了一個視覺化的概覽,展示了過去 20 多年來,主要半導體公司市值的增長情況,以及它們股價在每年第一個交易日的波動。透過這些圖表,你可以看到:
- 各大公司市值的相對變化趨勢。
- 每年市場對各公司的變動反應。
import pandas as pd
import matplotlib.pyplot as plt
# 讀取 CSV 文件
df = pd.read_csv('/content/drive/My Drive/Semicon_Analysis/semiconductor_merged_1017.csv')
# 確保日期格式正確
df['Date'] = pd.to_datetime(df['Date'])
# 新增 'Year' 欄位
df['Year'] = df['Date'].dt.year
# 過濾出 2020 年以後每年第一天的數據
df_first_day_each_year = df[df['Date'].dt.month == 1].groupby(['Year', 'company_abbr']).first().reset_index()
# 過濾出 2000 年以後的數據
df_filtered = df_first_day_each_year[df_first_day_each_year['Year'] >= 2000]
# 設置圖表佈局,每行 3 張圖表
years = df_filtered['Year'].unique()
rows = len(years) // 3 + (len(years) % 3 > 0)
fig, axes = plt.subplots(rows, 3, figsize=(18, 6 * rows))
# 繪製每一年第一天的汽泡圖
for i, year in enumerate(years):
row, col = divmod(i, 3)
year_df = df_filtered[df_filtered['Year'] == year]
# 取得公司代號並轉換為索引
companies = year_df['company_abbr']
x_indices = range(len(companies))
# X 軸為公司代號索引,Y 軸為 Close Price Change%,氣泡大小為 Market Cap (USD)
scatter = axes[row, col].scatter(x=x_indices,
y=year_df['Close_Price_Change%'],
s=year_df['Market Cap (USD)'] / 1e9, # Market Cap 除以 1e9 調整為億美元
alpha=0.5, # 氣泡透明度
c=year_df['Market Cap (USD)'], cmap='viridis') # 用 Market Cap 映射顏色
# 加上標籤和標題
axes[row, col].set_title(f'{year} First Day - Close Price Change% vs Market Cap')
axes[row, col].set_xlabel('Company Abbr')
axes[row, col].set_ylabel('Close Price Change%')
# 調整 X 軸標籤顯示公司簡稱
axes[row, col].set_xticks(x_indices)
axes[row, col].set_xticklabels(companies, rotation=90)
# 為每個子圖添加單獨的顏色條
fig.colorbar(scatter, ax=axes[row, col], label='Market Cap (USD)', orientation='vertical')
# 如果總圖數不足3的倍數,將剩餘的空圖關閉
for i in range(len(years), rows * 3):
fig.delaxes(axes.flatten()[i])
# 調整佈局
plt.tight_layout()
plt.show()