結論
日経平均を押し上げているのは、AI・半導体関連株
具体的には、ソフトバンク、アドバンテスト、東京エレクトロンの3社

1.日経平均とは
日経平均株価 (225銘柄)は、東証プライム上場銘柄の中から、市場の流動性や業種のバランスを考慮して選ばれた225銘柄で構成されています。
銘柄数が少ないため、その動向は選ばれた企業の業績や市場の勢い(モメンタム)を強く反映します。
同じく、代表的な株価指数であるTOPIXとの違いは以下の通り。
2.日経平均が上昇したのは、どの会社の株価が上昇したから?
ニュースで日経平均の上昇が聞かれる今日この頃ですが、値嵩株の影響を受けます。ということで、年初からの、値嵩株TOP10の内、どこの株が爆上がりして、日経平均を押し上げたのか、分析してみました。
参考までにコードも載せておきます。
import yfinance as yf
import pandas as pd
from datetime import date
# --- ステップ 1: 銘柄リストの準備 ---
# 構成比率上位10銘柄のティッカーリスト
TICKERS = [
'9983.T', # ファーストリテイリング
'8035.T', # 東京エレクトロン
'6857.T', # アドバンテスト
'9984.T', # ソフトバンクグループ
'6098.T', # リクルートホールディングス
'9433.T', # KDDI
'6762.T', # TDK
'4063.T', # 信越化学工業
'4543.T', # テルモ
'6954.T', # ファナック
]
# 銘柄名マッピング(結果表示用)
ticker_map = {
'9983.T': 'ファーストリテイリング', '8035.T': '東京エレクトロン',
'6857.T': 'アドバンテスト', '9984.T': 'ソフトバンクグループ',
'6098.T': 'リクルートHD', '9433.T': 'KDDI', '6762.T': 'TDK',
'4063.T': '信越化学工業', '4543.T': 'テルモ', '6954.T': 'ファナック'
}
# 分析期間の設定
START_DATE = '2025-01-01'
END_DATE = date.today().strftime('%Y-%m-%d')
print(f"分析期間: {START_DATE} から {END_DATE}")
print(f"対象銘柄数: {len(TICKERS)}")
# --- ステップ 2: 株価データの取得 ---
try:
# 'Close'列を取得 (auto_adjust=Trueにより調整済み終値)
data = yf.download(TICKERS, start=START_DATE, end=END_DATE)['Close']
if data.empty:
raise ValueError("データが取得できませんでした。日付またはティッカーを確認してください。")
print(f"✅ データ取得完了。取得した営業日数: {len(data)}")
except Exception as e:
print(f"データの取得中にエラーが発生しました: {e}")
exit()
# --- ステップ 3: 寄与度(変動額)の計算とランキング ---
# 1. 年初と最新日の株価を取得
initial_prices = data.iloc[0]
final_prices = data.iloc[-1]
# 2. 株価の変動額(貢献度の代理指標)を計算
contribution = final_prices - initial_prices
# 3. 結果をDataFrameにまとめてランキングを作成
temp_df = pd.DataFrame({
'年初株価': initial_prices,
'最新日株価': final_prices,
'株価変動額 (円)': contribution
})
# 4. ティッカーを列に変換し、列名を確実に設定する
ranking_df = temp_df.sort_values(by='株価変動額 (円)', ascending=False).reset_index()
# reset_index()後の最初の列が必ずティッカーとなるため、iloc[0]で取得して設定する
ranking_df.columns.values[0] = 'ティッカー'
# 5. 銘柄名列を追加
ranking_df['銘柄名'] = ranking_df['ティッカー'].map(ticker_map)
# 最終的な表示列の順序を定義
display_columns = ['銘柄名', 'ティッカー', '年初株価', '最新日株価', '株価変動額 (円)']
# 最終結果の表示
print("\n--- 📈 日経平均株価への貢献度 (2025年1月以降) ランキング Top 10 ---")
print("※ 変動額が大きい銘柄ほど、日経平均を強く押し上げています。")
# to_markdownで整形して出力
print(ranking_df[display_columns].head(10).to_markdown(index=False, floatfmt=",.2f"))
コードは以下の通りです。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語表示のためのライブラリ
# --- ステップ 1: 画像のデータからDataFrameを作成 ---
# 画像の表から読み取ったデータ(手動で入力)
data = {
'銘柄名': ['ソフトバンクグループ', 'アドバンテスト', '東京エレクトロン', 'ファーストリテイリング',
'ファナック', 'TDK', 'KDDI', 'テルモ', '信越化学工業', 'リクルートHD'],
'ティッカー': ['9984.T', '6857.T', '8035.T', '9983.T', '6954.T', '6762.T',
'9433.T', '4543.T', '4063.T', '6098.T'],
'年初株価': [9197.93, 9257.58, 23763.92, 51000.90, 3992.79, 1964.50,
2369.90, 2967.94, 5096.00, 10743.10],
'最新日株価': [22695.00, 19875.00, 34190.00, 58630.00, 5180.00, 2448.50,
2650.00, 2518.50, 4566.00, 8282.00],
'株価変動額 (円)': [13497.07, 10617.42, 10426.08, 7629.10, 1187.21, 484.00,
280.10, -449.44, -530.00, -2461.10]
}
ranking_df = pd.DataFrame(data)
# 貢献度(変動額)で昇順に並べ替える (横棒グラフで貢献度の高い順に上に来るようにするため)
# 昇順に並べ替えると、plt.barh()では貢献度の低いものが下から順に描画される
ranking_df = ranking_df.sort_values(by='株価変動額 (円)', ascending=True).reset_index(drop=True)
# --- ステップ 2: グラフの作成 ---
# グラフのサイズを設定
plt.figure(figsize=(10, 7))
# 貢献度(株価変動額)に応じて色分け
# 正の値(押し上げ)は緑系 #2ca02c、負の値(押し下げ)はオレンジ系 #ff7f0e
colors = ['#ff7f0e' if x < 0 else '#2ca02c' for x in ranking_df['株価変動額 (円)']]
# 横棒グラフの作成
bars = plt.barh(
ranking_df['銘柄名'], # y軸(銘柄名)
ranking_df['株価変動額 (円)'], # x軸(変動額)
color=colors
)
# グラフタイトルとラベルの設定
plt.title(
'日経平均株価への貢献度ランキング (2025年1月以降)',
fontsize=16,
fontweight='bold'
)
plt.xlabel('株価変動額 (円) - 日経平均株価への寄与度(貢献度)の代理指標', fontsize=12)
plt.ylabel('銘柄名', fontsize=12)
# x軸に垂直な補助線(0円ライン)を追加
plt.axvline(0, color='gray', linestyle='--')
# グラフの値(変動額)を棒の横に表示
# bars.patchesのインデックス(i)を使ってy座標を指定
for i, bar in enumerate(bars.patches):
value = bar.get_width() # 棒の長さ = 株価変動額
y_position = bar.get_y() + bar.get_height() / 2 # 棒の中央のy座標
# 数値をカンマ区切りにし、小数点以下を丸める
text = f'{value:,.0f}'
# 棒が正の値の場合(右側)
if value >= 0:
# 棒の右端から少し右にテキストを配置
plt.text(value + 100, y_position, text, va='center', ha='left', fontsize=10)
# 棒が負の値の場合(左側)
else:
# 棒の左端から少し左にテキストを配置
plt.text(value - 100, y_position, text, va='center', ha='right', fontsize=10)
# レイアウト調整
plt.tight_layout()
# グラフを表示
plt.show()
3.AI・半導体関連株が、日経平均をリードする!
ご覧の通り、ソフトバンク、アドバンテスト、東京エレクトロンといったAI・半導体関連の有名銘柄がトップ3を占めています。
ちなみに、年初の株価を100とした場合の上記3社の株価推移は以下の通り。
3社とも、4月のトランプ関税では、日経平均を下回る下げを記録したもの、その後の上げが見事ですね。
コードは以下の通りです。
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
# --- 1. データのダウンロード (再掲) ---
# エラー回避のため、ダウンロードコードを再度含めます。
tickers = ['9984.T', '8035.T', '6857.T', '^N225']
start_date = '2025-01-01'
# auto_adjust=False を明示し、Adj Close 列を取得
data = yf.download(tickers, start=start_date, auto_adjust=False)['Adj Close']
# 列名を分かりやすく変更 (yfinanceのティッカー並び順: 6857.T, 8035.T, 9984.T, ^N225)
data.columns = ['Advantest', 'TokyoElectron', 'SoftbankG', 'Nikkei225']
# --- 2. データの正規化(インデックス化) ---
# 基準日(2025年1月1日)の価格を100として、全ての価格をインデックス化
# Normalized Price = (Current Price / Price on Start Date) * 100
normalized_data = data / data.iloc[0] * 100
print("--- 正規化データ確認(最初の5行) ---")
print(normalized_data.head())
# --- 3. グラフによる可視化 ---
plt.figure(figsize=(12, 6))
# 日経平均は比較対象として目立たせる
plt.plot(normalized_data.index, normalized_data['Nikkei225'],
label='Nikkei 225 (^N225)', linewidth=3, color='black', linestyle='--')
# 3社の銘柄を描画
plt.plot(normalized_data.index, normalized_data['SoftbankG'],
label='Softbank G (9984.T)', linewidth=1.5)
plt.plot(normalized_data.index, normalized_data['Advantest'],
label='Advantest (6857.T)', linewidth=1.5)
plt.plot(normalized_data.index, normalized_data['TokyoElectron'],
label='Tokyo Electron (8035.T)', linewidth=1.5)
plt.title(f'Price Synchronization Analysis: Nikkei 225 vs. AI-related Stocks (Since {start_date})')
plt.xlabel('Date')
plt.ylabel(f'Price Index (Start Date = 100)')
plt.legend(loc='upper left')
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
4.最後に
やはり、時代はAI・半導体ですね(笑)
トヨタやソニーは時価総額が大きいため、日経平均というよりは、TOPIXが活躍の場ですね。
何か、気になることがあったら、コメントくださいね!



