Python超入門部 https://python.joho.info Sun, 01 Feb 2026 15:26:09 +0000 ja hourly 1 https://wordpress.org/?v=6.9.4 https://python.joho.info/wp-content/uploads/2024/11/cropped-icons8-python-96-32x32.png Python超入門部 https://python.joho.info 32 32 234159061 【Python】ゴールド(金)の価格分析(RSI)【Pandas】 https://python.joho.info/pandas/gold_analyzer-rsi/ https://python.joho.info/pandas/gold_analyzer-rsi/#respond Sun, 01 Feb 2026 15:21:51 +0000 https://python.joho.info/?p=42717 Pythonライブラリ「Pandas」でゴールド(金)の価格を分析する方法について解説します。

サンプルコード①

今回はYahoo Financeからデータを取得し、価格推移とテクニカル指標(SMA, RSI)をグラフで表示します。さらに、売買シグナルの表示と直近トレンドに基づく価格予測機能も備えています。

  • ゴールド価格(Close Price)の実線
  • 20日・50日移動平均線(SMA)
  • ▲ (緑): 買いシグナル (ゴールデンクロス、またはRSI売られすぎ)
  • ▼ (赤): 売りシグナル (デッドクロス、またはRSI買われすぎ)
  • オレンジ色の点線で、向こう5日間の予想価格推移を表示します(線形回帰)。

main.py


gold_analyzer.py

データ取得と分析の中核となるクラスです。


コード解説

gold_analyzer.py

RSI(相対力指数)。30と70のラインが表示され、買われすぎ・売られすぎの判断に使えます。
実行時に、コンソールに向こう5日間の予測価格の具体的な数値が表示されます。
days=5 を変更することで予測期間を調整可能です。

関連コンテンツ

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/pandas/gold_analyzer-rsi/feed/ 0 42717
【Python】ネストされた辞書(辞書の中に辞書)の使い方 https://python.joho.info/tutorial/nest-dict/ https://python.joho.info/tutorial/nest-dict/#respond Sun, 14 Sep 2025 14:52:17 +0000 https://python.joho.info/?p=42152 Pythonにおけるネストされた辞書(辞書の中に辞書)の使い方について詳しく解説します。

ネストされた辞書

ネストされた辞書とは、以下のように辞書の中に辞書(要素の値が辞書になっている)があるものです。

pikori_status = {
    "HP": 120,
    "MP": 45,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    },
    "スキル": {
        "火炎斬り": "Lv2",
        "回復魔法": "Lv1"
    }
}

"装備""スキル" の値がさらに辞書になっていて、情報が階層的に整理されています。
このように、辞書の中に辞書を入れることで、階層的なデータ構造が作れます。ネストされた辞書は、以下のようにJSON形式のデータ構造とほぼ同じです。

■JSON形式

{
    "HP": 120,
    "MP": 45,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    },
    "スキル": {
        "火炎斬り": "Lv2",
        "回復魔法": "Lv1"
    }
}

つまり、JSON形式のデータを扱うときにネストされた辞書がよく使われます。ネストされた辞書の値へアクセスするには、以下コードのように、 辞書["キー1"]["キー2"]辞書["キー1"].get("キー2")のように、階層を順番にたどります

pikori_status = {
    "HP": 120,
    "MP": 45,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    },
    "スキル": {
        "火炎斬り": "Lv2",
        "回復魔法": "Lv1"
    }
}

# 武器の名前を取得
print("勇者ぴこりの武器:", pikori_status["装備"]["武器"])

# スキルのレベルを確認
print("勇者ぴこりの火炎斬り:", pikori_status["スキル"].get("火炎斬り", "Lv0"))
print("勇者ぴこりの回復魔法:", pikori_status.get("スキル", {}).get("回復魔法", "Lv0"))
勇者ぴこりの武器: 鉄の剣
勇者ぴこりの火炎斬り: Lv2
勇者ぴこりの回復魔法: Lv1

上記コードのように、ネストされた辞書の値を取得する際、 get() の連続使用ができますが、最初の辞書が存在しない場合、空の辞書 {} を返すようにします。これで、どのキーが欠けていてもエラーにならず、デフォルト値で処理できるため、安全なコードとなります。

関連ページ(もっと学びたい人へ)

辞書型の使い方については、以下ページで詳しく学ぶことができます。

【Python】辞書型(連想配列)の使い方を徹底解説
Pythonの辞書型(連想配列)の使い方について入門者向けに解説します。

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/tutorial/nest-dict/feed/ 0 42152
【Python】辞書の「参照共有」「浅いコピー」と「深いコピー」の違い https://python.joho.info/tutorial/dict-copy/ https://python.joho.info/tutorial/dict-copy/#respond Sun, 14 Sep 2025 14:49:52 +0000 https://python.joho.info/?p=42147 Pythonにおける辞書の「参照共有」「浅いコピー」と「深いコピー」の違いについて詳しく解説します。

辞書の「参照共有」「浅いコピー」と「深いコピー」

Pythonでは、辞書型のデータをコピーする方法が3つありますが、動作がまったく異なる**ので注意が必要です。

方法 コピーの種類 特徴
= で代入 参照共有(コピーではない) 元の辞書と同じものを指す
copy() メソッド 浅いコピー(shallow copy) 一階層目だけ複製、ネストされた辞書は共有される
copy.deepcopy() 関数 深いコピー(deep copy) 全階層を完全に複製、完全に独立した辞書になる

以下のコードは、 = で代入した場合(参照が共有される)の例です。

pikori_items = {
    "回復薬": 5,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    }
}

# 持ち物を複製
copy_items = pikori_items

# 複製側を変更
copy_items["回復薬"] = 99

print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)
勇者ぴこりの持ち物: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鉄の剣’, ‘防具’: ‘革の盾’}}
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鉄の剣’, ‘防具’: ‘革の盾’}}

= で代入すると、元の辞書と同じものを指す(両方が同じ辞書を共有)するため、コピー先の辞書を変更すると、コピー元の辞書も変わってしまいます。(回復薬が両方とも99になっている)
以下のコードは、 copy() を使って浅いコピーをする例です。

pikori_items = {
    "回復薬": 5,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    }
}

# 持ち物を複製(浅いコピー)
copy_items = pikori_items.copy()

# 複製側を変更
copy_items["回復薬"] = 99
copy_items["装備"] ["武器"] = "鋼の剣"

print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)
勇者ぴこりの持ち物: {‘回復薬’: 5, ‘装備’: {‘武器’: ‘鋼の剣’, ‘防具’: ‘革の盾’}}
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鋼の剣’, ‘防具’: ‘革の盾’}}

実行結果では、回復薬はコピーだけが99に変更されましたが、武器は両方とも「鋼の剣」に変わってしまっています。copy() メソッドは、一階層目だけ複製しますが、ネストされた辞書は共有されるためです。 ネストされた辞書も複製する場合、以下コードのように、copy.deepcopy()を使います。

import copy

pikori_items = {
    "回復薬": 5,
    "装備": {
        "武器": "鉄の剣",
        "防具": "革の盾"
    }
}

# 持ち物を複製(深いコピー)
copy_items = copy.deepcopy(pikori_items)

# 複製側を変更
copy_items["回復薬"] = 99
copy_items["装備"] ["武器"] = "鋼の剣"

print("勇者ぴこりの持ち物:", pikori_items)
print("勇者ぴこりの持ち物のコピー:", copy_items)

勇者ぴこりの持ち物: {‘回復薬’: 5, ‘装備’: {‘武器’: ‘鉄の剣’, ‘防具’: ‘革の盾’}}
勇者ぴこりの持ち物のコピー: {‘回復薬’: 99, ‘装備’: {‘武器’: ‘鋼の剣’, ‘防具’: ‘革の盾’}}

関連ページ(もっと学びたい人へ)

辞書型の使い方については、以下ページで詳しく学ぶことができます。

【Python】辞書型(連想配列)の使い方を徹底解説
Pythonの辞書型(連想配列)の使い方について入門者向けに解説します。

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/tutorial/dict-copy/feed/ 0 42147
【Python】「数値型」と「四則演算」を丁寧に解説(練習問題あり) https://python.joho.info/tutorial/numeric-type/ https://python.joho.info/tutorial/numeric-type/#respond Sun, 31 Aug 2025 12:48:27 +0000 https://python.joho.info/?p=41860 Pythonプログラミングの基本を学ぶうえで重要な「数値型」と「四則演算」について、初心者でも理解しやすいようにRPGの世界観を使って詳しく解説します。

「数値型」とは

「数値型」とは、数値を扱うためのデータ型です。Pythonで使える主な数値型は以下の2つです。

型名 説明
int 整数型(小数点なしの数値) 120 (HP)
float 浮動小数点数型(小数ありの数値) 3.5 (魔法の威力)
なぜ魔法の威力は小数(float型)で表されるのでしょうか?たとえば、攻撃魔法ごとに「魔法の威力」が設定され、キャラクターには「魔法攻撃力」というステータスがあるとします。
このとき、攻撃力の計算式が「攻撃力 = 魔法の威力 × 魔法攻撃力」となる場合、魔法の威力を「3.5」といった小数で表現することで、ゲームバランスの微調整がしやすくなります。
もし整数だけで表現すると、「1倍」「2倍」など強さの段階が大ざっぱになり、「魔法の威力は、ちょっと強く、ちょっと弱く…」といった細かな調整が難しくなってしまいます。

Pythonでは、数値型リテラルを変数に代入するだけで自動的に型が決まります(動的型付け)。

# int型(HP)
hero_hp = 120

# float型(魔法の威力)
magic_power = 3.5
プログラムの中に「そのまま直接書かれた数値」のことを数値型リテラルといいます。上記のコードだと、「120」や「3.5」が「数値型リテラル」です。つまり、変数や関数を使わずに、数字をそのまま書いたものです。

なお、負の数には「 -5」「-0.5」というように、数値の前にマイナス(-)をつけます。

# int型(毒による「HP」の毎ターンの減少量)
poison_damage = -5

# float型(デバフによる「魔法の威力」の減少量)
debuff_rate = -0.5

「四則演算」とは

四則演算(しそくえんざん)とは、数学やプログラミングの基本となる4つの計算方法(足し算、引き算、掛け算、割り算)のことです。Pythonでは、以下の演算子を使って四則演算ができます。

演算子 意味 結果
+ 足し算(和) 5 + 3 8
- 引き算(差) 10 - 4 6
* 掛け算(積) 7 * 2 14
/ 割り算(商) 8 / 2 4.0(float型)
演算子(えんざんし)とは、プログラムの中で「計算や操作をするための記号」のことです。

各演算子の使い方を、次のサンプルコードで理解していきましょう。

足し算

以下のコードは、所持金の計算を足し算で行います。

# 所持金
gold = 100 

# ボーナス
bonus = 50 

# 新しい所持金 = 所持金 + ボーナス
new_gold = gold + bonus 

# 新しい所持金の表示
print("所持金は", new_gold, "Gになりました") 
所持金は 150 Gになりました
Pythonの print() 関数では、複数の値をカンマ , で区切って並べることで、「所持金は 150 Gになりました」というように、値と値の間に自動的にスペースを入れて表示してくれます。
また、カンマで区切ることで、数値型リテラルや数値型の変数をそのまま渡せます( str() 関数で文字列型に変換しなくてもOK)

引き算

以下のコードは、戦闘ダメージの計算を引き算で行います。

# 攻撃力
attack = 50  

# 防御力
defense = 20 

 # ダメージ = 攻撃力 - 防御力
damage = attack - defense

# 結果を表示
print("受けたダメージは", damage)
受けたダメージは 30

掛け算

以下のコードは、購入アイテムの合計金額の計算を掛け算で行います。

# アイテムの金額
price = 120 

# 購入数
quantity = 3 

# 合計金額 = アイテムの金額 ✖️ 購入数
total_price = price * quantity 

# 結果を表示
print("合計金額は", total_cost, "Gです") 
合計金額は 360 Gです

割り算

以下のコードは、パーティーメンバー1人あたりの経験値の計算を割り算で行います。

# 経験値の合計
total_exp = 300 

# パーティーの人数
party_members = 4 

# パーティーメンバー1人あたりの経験値 = 経験値の合計 ÷ パーティーの人数
exp_per_member = total_exp / party_members 

# 結果を表示
print("1人あたりの経験値は", exp_per_member)
1人あたりの経験値は 75.0

べき乗

Pythonでは ** 演算子を使ってべき乗を計算できます。
以下のコードは、バフを得た後の魔法攻撃力の計算を割り算で行います。

# 魔法攻撃のバフ
magic_buff = 3 

# 魔法攻撃力
magic_power = 2 

# 新しい魔法攻撃力(2の3乗)
new_magic_power = magic_power ** magic_buff  

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)
新しい魔法攻撃力は 8

余り(剰余)

Pythonでは % 演算子を使って割り算の余り(剰余)を計算できます。
以下のコードは、袋に入りきらないコインの枚数の計算を割り算で行います。

# 今持っているコインの枚数
coins = 17

# 袋1つに入るコインの最大枚数
pouch_capacity = 5

# 持っている袋の数
pouch_number = 3

# 袋に入る合計枚数(1袋の容量 × 袋の数)
total_capacity = pouch_capacity * pouch_number

# 袋に入りきらないコインの枚数(余り)
leftover = coins % total_capacity

# 結果を表示
print("袋に入りきらないコインは", leftover, "枚")
袋に入りきらないコインは 2 枚

四則演算の優先順位

Pythonでは、以下のような順番で演算が優先されます。

優先度 演算子 内容
最優先 () 括弧(グループ化) (2 + 3) * 4 = 20
** べき乗(右から左) 2 ** 3 = 8
* / // % 掛け算・割り算・切り捨て・余り 10 / 2 = 5.0
+ - 足し算・引き算 5 + 3 = 8

同じ優先度の演算子は「左から右」へ処理されます。(べき乗 ** だけは右から左)
コードをいくつか見ながら理解を深めましょう。

例1:掛け算と足し算

# 先に 3 * 4 → 12、その後 5 + 12 → 17
result = 5 + 3 * 4

例2:括弧は最優先

# 括弧が最優先 → 8 * 4 → 32
result = (5 + 3) * 4

例3:掛け算と足し算

掛け算が足し算より先に計算されます。

result = 2 + 3 * 4
print(result)  # 出力: 14(3×4=12 → 2+12=14)

例4:括弧で優先順位変更

例3を括弧で順番を変えます。

result = (2 + 3) * 4
print(result)  # 出力: 20(2+3=5 → 5×4=20)

例5:べき乗は特殊

べき乗は最優先(ただし、右から左)です。

result = 2 ** 3 ** 2
print(result)  # 出力: 512(3**2=9 → 2**9=512)

例6:割り算と余り

割り算と余りの組み合わせです。

result = 10 / 2 + 5 % 3
print(result)  # 出力: 6.0(10/2=5.0 → 5.0+2=7.0)

例7:整数除算と引き算

整数除算と引き算の組み合わせです。

result = 20 // 3 - 2
print(result)  # 出力: 4(20//3=6 → 6-2=4)

例8:括弧で複雑な式を整理

括弧で複雑な式を整理すると、ミスが起きにくいです。

result = (10 + 2) * (8 - 3) / (2 + 1)
print(result)  # 出力: 20.0(12×5=60 → 60/3=20.0)

「整数型」と「浮動小数点数型」の四則演算

「整数型」と「浮動小数点数型」の演算は可能ですが、結果の型は「浮動小数点数型」になるので、注意しましょう。

# 勇者のレベル(int型:整数型)
level = 5      

# レベル増加分(float型:浮動小数点数型)
level_up = 1.0    

# 新しいレベルの計算(新しいレベル = 勇者のレベル + レベル増加分)
new_level = level + level_up

# 新しいレベルの表示
print("勇者のレベルは、", new_level, "に上がった!")  
print(type(new_level)) # データ型の表示
勇者のレベルは、 6.0 に上がった!
<class ‘float’> ← float型になる

「文字列」と「数値型」の四則演算

以下のように「文字列」と「数値型」を混ぜて計算すると、エラーになります。

# 勇者のレベル(文字列型:str)
level = "5"  

# レベル増加分(整数型:int) 
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← ❌エラー
new_level = level + level_up 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  
Traceback (most recent call last):
File “main.py”, line 6, in
new_level = level + level_up
~~~~~~^~~~~~~~~~
TypeError: can only concatenate str (not “int”) to str

❌ TypeError:strとintは足せない

「数字っぽい文字列」は、以下のように `int()` 関数で整数型、 `float()`関数 で浮動小数点数型に変換できます。

以下のコードは、 int() 関数で文字列型を整数型に変換することでエラーを解消した例です。

# 勇者のレベル(文字列型:str)
level = "5"   

# レベル増加分(整数型:int)
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← ⭕️ int同士になるので、足し算できる
new_level = int(level) + level_up 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  # 新しいレベルの表示
勇者のレベルは、 6 に上がった!
`str()`関数を使うことで数値型を文字列型に変換することができます。ただし、文字列型の変数同士を足し算すると「文字列の結合」になります。

以下のコードは、 str() 関数で整数型を文字列型に変換した例です。

# 勇者のレベル(文字列型:str)
level = "5"   

# レベル増加分(整数型:int)
level_up = 1  

# 新しいレベル = 勇者のレベル + レベル増加分 ← str同士になるので、「文字列の結合」になってしまう
new_level = level + str(level_up) 

# 結果を表示
print("勇者のレベルは、", new_level, "に上がった!")  # 新しいレベルの表示
勇者のレベルは、 51 に上がった!

※「5」と「1」という2つの文字列が連結され、「51」となります

練習問題

本ページで学んだ内容を定着させるとともに、「Python 3 エンジニア認定基礎試験」や「基本情報技術者試験」の対策にも役立つ練習問題を用意しましたので、チャレンジしてみてください。

【問題1】数値型の基本

次のうち、Pythonで「浮動小数点数」を表す型はどれか。

A. int
B. float
C. str
D. bool


正解:B
解説:float型は小数点を含む数値を扱うための型です。
例:magic_power = 3.5(魔法の威力)

【問題2】型の自動判定

次のコードの変数 hero_hp の型は何か。

hero_hp = 120

A. float
B. str
C. int
D. bool


正解:C
解説:Pythonでは整数を代入すると自動的にint型になります。
例:hero_hp = 120(勇者のHP)

【問題3】足し算の演算子

次のうち、Pythonで足し算を行う演算子はどれか。

A. *
B. +
C. -
D. /


正解:B
解説:+は加算(足し算)を行う演算子です。
例:gold + bonus(所持金+ボーナス)

【問題4】割り算の結果の型

次のコードの実行結果の型は何か。

result = 8 / 2
print(type(result))

A. <class 'int'>
B. <class 'float'>
C. <class 'str'>
D. <class 'bool'>


正解:B
解説:Pythonでは割り算(/)の結果は常にfloat型になります。
例:8 / 24.0

【問題5】べき乗の演算子

次のうち、Pythonでべき乗を計算する演算子はどれか。

A. ^
B. **
C. //
D. %


正解:B
解説:**はべき乗(累乗)を計算する演算子です。
例:2 ** 38

【問題6】余りの計算

次のコードの実行結果として正しいものを選びなさい。

print(17 % 5)

A. 2
B. 3
C. 5
D. 0


正解:B
解説:%は割り算の余りを求める演算子です。
17 ÷ 5 は商が3、余りが 2 なので、正解は 2 です。

【問題7】型変換の必要性

次のコードはエラーになります。原因として正しいものを選びなさい。

level = "5"
level_up = 1
new_level = level + level_up

A. levelが未定義
B. intstrは足せない
C. level_upが文字列である
D. +演算子が使えない


正解:B
解説:Pythonではstr型とint型を直接足すことはできません。
型変換が必要です:int(level) + level_up

【問題8】動的型付けの特徴

Pythonの「動的型付け」の特徴として正しいものを選びなさい。

A. 変数の型を明示的に宣言する必要がある
B. 変数の型は自動的に決まる
C. 型の変更はできない
D. 型が固定されている


正解:B
解説:Pythonは動的型付け言語であり、変数に代入された値によって型が自動的に決まります。

【問題9】演算結果の型変化

次のコードの実行結果の型は何か。

level = 5
level_up = 1.0
new_level = level + level_up
print(type(new_level))

A. <class 'int'>
B. <class 'float'>
C. <class 'str'>
D. <class 'bool'>


正解:B
解説:int型とfloat型を足すと、結果はfloat型になります。

【問題10】掛け算の基本

次のコードの実行結果として正しいものを選びなさい。

price = 120
quantity = 3
print(price * quantity)

A. 360
B. 123
C. 1203
D. エラーになる


正解:A
解説:*は掛け算の演算子です。
120 × 3 = 360 となり、正しく計算されます。

【問題11】魔力計算の優先順位

次のコードの実行結果(数値部分)として正しいものを選びなさい。

base_mana = 2
boost = 3
multiplier = 4
total_mana = base_mana + boost * multiplier
print(" 魔力:", total_mana)

A. 20
B. 14
C. 24
D. 10


正解:B
解説:掛け算(*)が足し算(+)より優先されます。
3 * 4 = 122 + 12 = 14。魔力は 14 です。

【問題12】封印解除の魔法式

次のコードの実行結果(数値部分)として正しいものを選びなさい。

seal_left = 2
seal_right = 3
seal_power = 4
unseal_mana = (seal_left + seal_right) * seal_power
print(" 封印解除魔力:", unseal_mana)

A. 14
B. 20
C. 24
D. 10


正解:B
解説:括弧 () が最優先で評価されます。
(2 + 3) = 55 * 4 = 20。封印解除成功!

【問題13】魔法衝突の演算

次のコードの実行結果(数値部分)として正しいものを選びなさい。

attack_power = 10
shield = 4
absorption = 2
damage = attack_power - shield / absorption
print("️ 実ダメージ:", damage)

A. 3
B. 8
C. 4
D. 6


正解:B
解説:割り算(/)が引き算(-)より優先されます。
4 / 2 = 2.010 - 2.0 = 8.0。実ダメージは 8.0

【問題14】雷魔法の連鎖

次のコードの実行結果(数値部分)として正しいものを選びなさい。

core = 2
amplify = 3
chain = 2
damage = core ** amplify * chain
print("⚡ 雷連鎖ダメージ:", damage)

A. 64
B. 16
C. 10
D. 8


正解:B
解説:べき乗(**)は掛け算(*)より優先されます。
2 ** 3 = 88 * 2 = 16。雷魔法が炸裂!

【問題15】混沌魔法の演算陣

次のコードの実行結果(数値部分)として正しいものを選びなさい。

chaos_energy = 100
divide_rune = 5
combo_factor = 2
combo_hits = 3
total_damage = chaos_energy / divide_rune + combo_factor * combo_hits
print(" 混沌魔法の総ダメージ:", total_damage)

A. 26
B. 20
C. 22
D. 18


正解:A
解説:/* は同じ優先順位で、左から順に評価されます。
100 / 5 = 20.02 * 3 = 620.0 + 6 = 26.0

課題(実践力強化用)

Pythonプログラミングの実践力を強化したい人向けの課題を用意しました。仕様通りに動くプログラムを書いたりエラーメッセージを読んでコードを修正するという作業は、プログラミングおいて重要ですので、初心者の方は是非チャレンジしてみてください。

課題① コード作成

以下の仕様を満たすPythonコードを1から書いてください。

  • 所持金 gold = 100 とボーナス bonus = 50 を加算して、新しい所持金を表示する
  • 表示形式は「所持金は150Gになりました」とすること
所持金は150Gになりました

仕様を満たすコードは次のようになります。

gold = 100
bonus = 50
new_gold = gold + bonus
print("所持金は", new_gold, "Gになりました")

課題② コード修正

以下のコードを実行するとエラーが表示されます。修正して「受けたダメージは30」と表示されるようにしてください。

attack = 50
defense = 20
damage = attack - defense
print("受けたダメージは" + damage)

TypeError: can only concatenate str (not "int") to str

エラーメッセージ:文字列と数値は結合できません
Pythonでは、文字列と数値を直接 `+` で結合できません。数値を文字列に変換する必要があります。

■修正後のコード

print("受けたダメージは" + str(damage))

または、カンマ区切りでもOKです。

print("受けたダメージは", damage)

課題③ コード修正

以下のコードを実行するとエラーになります。修正して「合計金額は360Gです」と表示されるようにしてください。

price = 120
quantity = 3
total_cost = price * quantity
print("合計金額は", total_price, "Gです")

NameError: name 'total_price' is not defined

エラーメッセージ:変数名が未定義
変数名のミスです。定義したのは `total_cost` なのに、`total_price` を表示しようとしているためエラーになります。

■修正後のコード

print("合計金額は", total_cost, "Gです")

課題④ コード作成

以下の仕様を満たすPythonコードを1から書いてください。

  • 経験値 total_exp = 300 を4人のパーティーで均等に分ける
  • 1人あたりの経験値を表示する(小数点なし)
1人あたりの経験値は 75.0

仕様を満たすコードは次のようになります。

total_exp = 300
party_members = 4
exp_per_member = total_exp / party_members
print("1人あたりの経験値は", int(exp_per_member))

課題⑤ コード修正

「魔法攻撃力」を底(基数)、「魔法攻撃のバフ」を指数としたべき乗の計算により、「新しい魔法攻撃力」を計算するコードを作成しました。
例えば、魔法攻撃力が2、魔法攻撃のバフが3ならば、「新しい魔法攻撃力」は8になるはずです。
しかし、以下のコードを実行すると「新しい魔法攻撃力は 1」になります。修正して「新しい魔法攻撃力は8」と正しく計算し、表示されるようにしてください。

# 魔法攻撃力
magic_power = 2

# 魔法攻撃のバフ
magic_buff = 3

# 新しい魔法攻撃力を計算
new_magic_power = magic_power ^ magic_buff

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)

出力:新しい魔法攻撃力は 1

`^` はべき乗ではなく「排他的論理和(XOR)」の演算子です。べき乗には `**` を使う必要があります。

■修正後のコード

# 魔法攻撃力
magic_power = 2

# 魔法攻撃のバフ
magic_buff = 3

# 新しい魔法攻撃力を計算
new_magic_power = magic_power ** magic_buff

# 結果を表示
print("新しい魔法攻撃力は", new_magic_power)

関連ページ(もっと学びたい人へ)

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/tutorial/numeric-type/feed/ 0 41860
【Python】プログラミングで登場する基本用語を解説 https://python.joho.info/tutorial/python-words/ https://python.joho.info/tutorial/python-words/#respond Mon, 25 Aug 2025 14:03:45 +0000 https://python.joho.info/?p=41737 Pythonプログラミングで登場する基本用語について詳しく解説します。

プログラム(Program)

コンピュータに何かをさせるための「命令のまとまり」です。
「このPythonプログラムは、天気予報を表示する機能があります。」などと言います。

【例え】
料理のレシピのようなもので、材料(データ)と手順(処理)が書かれている。
使い方

ソースコード(Source Code)

人間が読める形で書かれた命令文です。Pythonでは .py ファイルの中身を指します。
「このソースコードを修正すれば、もっと速く動くようになります。」などと言います。

【例え】
レシピの「文章部分」。材料や手順が書かれているが、まだ料理にはなっていない。

コード(Code)

ソースコードとほぼ同じ意味で、より広く使われる言葉です。「このコード、ちょっと読みにくいね。コメントを入れよう。」などと言います。

プログラムファイル(Program File)

ソースコードが保存されたファイルです。Pythonでは .py 拡張子がつきます。「weather.py というプログラムファイルを実行すると、天気が表示されます。」などと言います。

【例え】
レシピが書かれた紙をファイルにしまった状態。

スクリプト(Script)

比較的短くて、特定の作業を自動化するためのプログラム。Pythonでは「スクリプト」と「プログラム」がほぼ同じ意味で使われることもある。「このスクリプトを使えば、毎日のファイル整理が自動化できます。」などと言います。

【例え】
料理の「時短レシピ」。必要なことだけをサッとやる。

関連ページ

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/tutorial/python-words/feed/ 0 41737
【Scikit-learn】CSVファイルを読み込んで学習する方法とサンプルコード https://python.joho.info/scikit-learn/scikit-learn-csv-load/ https://python.joho.info/scikit-learn/scikit-learn-csv-load/#respond Mon, 18 Aug 2025 11:13:56 +0000 https://python.joho.info/?p=41623 Pythonライブラリ「Scikit-learn」でCSVファイルを読み込んで学習する方法をサンプルコード付きで解説します。

訓練データに対する適合性評価

以下は、CSVファイルを読み込み、訓練データとして単回帰モデルを作成するコードです。


dataset01.csv(読み込むデータ)
※リンクを右クリックするとダウンロードできます。


コード解説

import pandas as pd
  • pandas: データフレーム操作ライブラリをインポートします。CSVの読み込みや列抽出に使用します。
dataset = pd.read_csv(
    "C:/github/sample/python/scikit-learn/tutorial/LinearRegression/single/dataset01.csv",
    sep=",",
)
  • CSVファイルを読み込み、dataset という名前でPandasのDataFrame に格納しています。
  • sep="," はCSVファイルの区切り文字にカンマを指定しています。
x = dataset.loc[:, ["チャンネル登録者数"]].to_numpy()
y = dataset["視聴者数"].to_numpy()
  • dataset.loc[:, ["チャンネル登録者数"]]:全行(:)から「チャンネル登録者数」列だけを抽出。scikit-learn の LinearRegression().fit(x, y) は、xにDataFrame(2次元)を与える必要がある。
  • .to_numpy() によって pandas の Series/DataFrame を NumPy 配列に変換。
  • x: 特徴量(チャンネル登録者数)を2次元配列としてDataFrameから抽出(抽出データは、DataFrame(2次元)形式)。
  • y: ターゲット変数(視聴者数)を1次元配列としてDataFrameから抽出(抽出データは、Series(1次元)形式)。

関連ページ

以下ページでは、Pythonライブラリ「scikit-learn」の使い方を数理的な背景も含めて解説していますので、是非ご一読ください。

【Scikit-learn超入門】使い方をサンプルコード付きで解説
Pythonライブラリ「Scikit-learn」で機械学習を行う方法を入門者向けに解説します。
]]>
https://python.joho.info/scikit-learn/scikit-learn-csv-load/feed/ 0 41623
【Scikit-learn】訓練データに対する適合性を評価する方法とサンプルコード https://python.joho.info/scikit-learn/scikit-learn-r2_score/ https://python.joho.info/scikit-learn/scikit-learn-r2_score/#respond Sun, 17 Aug 2025 14:17:16 +0000 https://python.joho.info/?p=41576 Pythonライブラリ「Scikit-learn」で生成した学習済みモデルの訓練データに対する適合性を評価する方法をサンプルコード付きで解説します。

訓練データに対する適合性評価

訓練データに対する適合性評価は、学習済みモデルが訓練用データにどれだけ合っているかを決定係数 $ R^2 $などの指標で評価することです。ただし、スコアが高すぎると、過学習の可能性もあるので注意が必要です。
決定係数 $ R^2 $ は、回帰直線が実測値(訓練用データなど)にどれだけうまく沿っているかを示す指標です。決定係数$ R^2 $は 0〜1の範囲の値をとります。値が1に近いほど、実測値に近いと評価できます。

  • $ R^2 = 1 $:すべての実測値が回帰直線上にあり、完全に再現できている。(理想的なモデル)
  • $ R^2 \approx 0.8 $:実測値が回帰直線の付近にあり、高い予測精度がある。(実用的なモデル)
  • $ R^2 = 0 $:実測値が回帰直線から大きく外れており、予測精度が低い。(不適なモデル)

決定係数の計算方法など、数理的な内容は以下ページで解説しています。

【単回帰分析とは】計算式の仕組みをVTuberの視聴者数予測を例にわかりやすく解説
単回帰分析とは?計算式の仕組みや求め方、決定係数による性能検証方法などをVTuberの視聴者数予測を例をわかりやすく解説します。

サンプルコード① 単回帰分析の場合

単回帰モデルの決定係数を求めるサンプルコードが以下になります。


※読み込んだデータ:dataset01.csv

コード解説

重要な箇所に絞って解説します。

from sklearn.metrics import r2_score
  • scikit-learnmetrics モジュールには、モデルの性能を評価する関数が多数あります。
  • r2_score はその中の1つで、回帰モデルの決定係数(R²)を計算する関数です。
r2_train = r2_score(y_train, y_train_pred)
  • r2_score() は、実際の値 y_train と予測値 y_train_pred の一致度を評価し、訓練データに対する決定係数 R² が得られます。
print("訓練データに対する R²(決定係数):", r2_train)
  • R²を表示。1.0に近いほど「訓練データに対してよく当てはまっている」

関連ページ

以下ページでは、Pythonライブラリ「scikit-learn」の使い方を数理的な背景も含めて解説していますので、是非ご一読ください。

【Scikit-learn超入門】使い方をサンプルコード付きで解説
Pythonライブラリ「Scikit-learn」で機械学習を行う方法を入門者向けに解説します。
]]>
https://python.joho.info/scikit-learn/scikit-learn-r2_score/feed/ 0 41576
【Scikit-learn】訓練データの相関係数を求める方法とサンプルコード https://python.joho.info/scikit-learn/scikit-learn-corrcoef/ https://python.joho.info/scikit-learn/scikit-learn-corrcoef/#respond Sun, 17 Aug 2025 14:13:41 +0000 https://python.joho.info/?p=41573 Pythonライブラリ「Scikit-learn」でモデル学習に使用する訓練データの相関係数を求める方法とサンプルコードについて解説します。

訓練データの相関係数を求める方法

相関係数 $r$ は、2つの変数の関係の強さを表す指標です。単回帰分析では「特徴量」と「ターゲット変数」の関係の強さを確かめることができます。つまり、「そもそも登録者数と視聴者数に関係があるのか?」ということを確認ができます。相関係数 $r$の範囲は −1〜+1 で、以下のように関係性の傾向を知ることができます。

相関係数 $r$ 関係の強さ
$r = +1$ 完全な正の相関 登録者数が増えると視聴者数も必ず増える
$r \approx +0.8$ 強い正の相関 登録者数が増えると視聴者数も増える傾向がある
$r = 0$ 無相関 登録者数と視聴者数に関係がない
$r \approx -0.8$ 強い負の相関 登録者数が増えると視聴者数が減る傾向がある
$r = -1$ 完全な負の相関 登録者数が増えると視聴者数が必ず減る

相関係数の計算方法など、数理的な内容は以下ページで解説しています。

【単回帰分析とは】計算式の仕組みをVTuberの視聴者数予測を例にわかりやすく解説
単回帰分析とは?計算式の仕組みや求め方、決定係数による性能検証方法などをVTuberの視聴者数予測を例をわかりやすく解説します。

サンプルコード① 単回帰分析の場合

Scikit-learnで単回帰分析を行う際に、相関係数を求める機能を追加したものが以下になります。


※読み込んだデータ:dataset01.csv

「相関係数 r: 0.9887097324786042」となり、特徴量(登録者数)とターゲット変数(視聴者数)の間に、高い相関性がある(ほぼ線形の関係性がある)ことがわかります。単回帰モデルの前提(線形性)がかなり妥当である可能性が高いです。ただし、これは相関の強さであって、因果関係を示すものではありません。「強い相関=良いモデル」ではないので、注意が必要です。良いモデルかどうかを判断するには、次に解説する「汎化性能の検証」などを行います。

コード解説

これまでのサンプルコードとは異なる、重要な箇所に絞って解説します。

# 相関係数を算出
correlation = np.corrcoef(dataset["チャンネル登録者数"], dataset["視聴者数"])[0, 1]
print("相関係数 r:", correlation)
  • dataset["チャンネル登録者数"]は、特徴量(説明変数)。Pandas Series(1次元配列)形式。
  • dataset["視聴者数"] は、ターゲット変数(目的変数)。Pandas Series(1次元配列)形式。
  • np.corrcoef(x, y)は、2つの配列の相関係数行列を返すNumPyの関数です。
  • [0, 1]は、相関係数行列の中から、xとyの相関係数だけを抽出しています。

関連ページ

以下ページでは、Pythonライブラリ「scikit-learn」の使い方を数理的な背景も含めて解説していますので、是非ご一読ください。

【Scikit-learn超入門】使い方をサンプルコード付きで解説
Pythonライブラリ「Scikit-learn」で機械学習を行う方法を入門者向けに解説します。
]]>
https://python.joho.info/scikit-learn/scikit-learn-corrcoef/feed/ 0 41573
【Scikit-learn】AI時代に数理的な理解を深める学習が重要な理由 https://python.joho.info/scikit-learn/scikit-learn-mathematical-learning/ https://python.joho.info/scikit-learn/scikit-learn-mathematical-learning/#respond Fri, 08 Aug 2025 14:01:57 +0000 https://python.joho.info/?p=41481 Pythonライブラリ「Scikit-learn」で機械学習について学ぶ際、数理的な学習を併せて行うことがおすすめな理由について解説します。

「数理的理解」とは?

数理的理解」とは、「なぜその手法がこう動くのか」を数学を使って理解・説明できることです。具体的にまとめると以下のとおりです。

  1. 背後にある数学的構造を理解すること
    • 線形代数(ベクトル、行列、内積など)
    • 微分・最適化(誤差を最小にするための計算)
    • 確率・統計(不確実性の扱いと、データの傾向を捉える方法)
  2. 数式で仕組みを理解すること
    • 例えば、線形回帰の予測式「$ y = a x + b $」が「どうやって$a$や$b$を決定するのか」を式で理解できること
  3. 原理や限界を説明できること
    • 例えば、「過学習とはどういう現象か?」「 予測精度が低くなったとき、何が起きているのか? 」などを数学的に説明できること

動画で見る

本ページの内容は以下動画で解説しています。

数理的理解がなくてもプログラムは動かせる

Pythonライブラリ「scikit-learn」は使いやすく、実践的な機械学習の入り口として学ぶのに適しています。
例えば、以下のように簡単なコードで機械学習を利用できます。

【サンプルコード①】身長から体重を予測

from sklearn.linear_model import LinearRegression
import numpy as np

# 学習データ(身長[cm]と体重[kg]のペア)
X = np.array([[150], [160], [170], [180], [190]])  # 身長
y = np.array([50, 60, 65, 72, 80])                # 体重

# 線形回帰モデルを作成・学習
model = LinearRegression()
model.fit(X, y)

# 予測したい身長(例:175cm)
new_height = np.array([[175]])
predicted_weight = model.predict(new_height)

# 結果表示
print(f"予測体重: {predicted_weight[0]:.1f} kg")

このように、機械学習の数理的理解、つまり「手法の仕組み」を知らなくてもプログラムを動かすことは可能です。例えば、予測したい対象が変わるならば、上記プログラムのデータ部分を修正するなど、簡単な改変で対応できます。ただし、それは 「とりあえず使える」にすぎず、「数理を理解して使える」こととは大きな差があります。

✅数理的理解がなくてもできること

① scikit-learn の API を使ってモデルを構築・学習・予測
② グラフによる可視化(matplotlib, seaborn など)
③ チュートリアルやサンプルコードの模倣・改変

数理的理解が「必要な理由」

数理的理解がなくても、ChatGPTなどのAIツールを使ったり自力でサンプルコード①を少し改変すれば、以下のような「広告費」から「売上」を予測するためのコードも作成できます。

【サンプルコード②】「広告費」から「売上」を予測

import numpy as np
from sklearn.linear_model import LinearRegression

# データ作成
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 広告費(万円)
y = np.array([3, 4, 2, 5, 6])                # 売上(万円)

# モデル構築(線形回帰)
model = LinearRegression()
model.fit(X, y)

# 予測
new_x = np.array([[7]])
new_y = model.predict(new_x)

# 結果表示
print(f"予測売上: {new_y[0]:.1f} 万円")

ただし、数理的理解が不足していると、

① パラメータ(係数や切片など)の意味は「なんとなく」しか分からない。
② 予測精度が悪いときの根本原因「なぜ?」が分からない。
③ そもそも使っている手法は適切なのか?見込みがあるのか?が分からない。

といったことに陥りがちです。数理的理解が不足した状態で、「scikit-learn」のような便利ツールで機械学習を利用したときの問題点をまとめると、以下のとおりです。

  1. 手法の選定ができない
    • 機械学習には様々な手法がありますが、数理的理解がないと、各手法の前提条件や構造がわからず、解決したい問題に適した手法をうまく選定できません。
  2. チューニングが手探りになる
    • 機械学習を使用する過程で、精度を向上させるためにチューニング(パラメータの調整)が必要となります。
    • 数理的理解がないと、パラメータの意味や結果に対する影響が分からず、調整が手さぐりになります。
  3. 相手に説明できない
    • 数理的理解がないと、成果物(「なぜその結果になったのか」「なぜこの手法が優れているのか」など)説明できません。
    • 論理的な妥当性を相手に説明できなければ、成果物の信頼性が乏しく、提案が通るのは難しいでしょう。
    • 仮に提案が採用されたとしても、精度だけで判断(ブラックボックス化)することとなり、実用性や安全性を見落とすリスクがあります。
    • 関係者(エンジニア、データサイエンティスト、顧客など)との会話が噛み合わず、誤った意思決定に繋がるリスクがあります。
  4. 新しい手法の理解ができない
    • 数理的理解がないと、数式ベースの説明が多い、最新技術に関する「論文」や「解説書」を正確に把握することが難しいです。機械学習の分野は進化が激しいため、新しい手法を常にウォッチし、正確に捉えることが重要です。

AIツール(ChatGPTなど)Pythonを使えば、数理的な理解がなくても機械学習は利用できますが、実務や研究等で使用するには数理的な理解を深めることも大切です。
例えば、サンプルコード②で使用している線形回帰モデルは「最小二乗法」を用いて「予測値と実測値の差(残差)」の二乗和を最小にするように学習します。

$$ \sum_{i=1}^{n} (y_i – (a x_i + b))^2 $$

「最小二乗法」を数理的に理解していると、「線形回帰モデルは、なぜ外れ値に弱いのか(外れ値の除去が必要なのか)」ということも論理的に解釈し、精度が悪くならないような上手な使い方ができます。

【数理的理解を深めると出来ること】
① scikit-learnなどのツールの出力結果を鵜呑みにせず、「このモデルはなぜこの結果を出したのか?」「この予測は信頼できるのか?」と批判的に検証できる
② 高精度化するためにデータを整理したり、問題解決に適した手法を選び直すなどが自分でできる
③ 「このモデルはこういう数理的根拠で選びました」と、他者に説明・説得できる(論理的に説明できる人は、意思決定の場にも呼ばれるようになります)

おすすめの学習方法(数理を避けすぎない)

機械学習を学ぶうえで数理的理解は重要ですが、「すべてを完璧に理解する」必要はありません。例えば以下のように、各手法のコアとなる数理を学ぶのが効率的です。

  1. まずは、Pythonライブラリ「scikit-learn」など、使いやすいサンプルコードを動かしてみる
    • 機械学習を実装するときの、大まかな流れ(データ作成→モデル構築→学習→予測→精度検証→チューニング)の感覚を掴みます。
  2. 結果に疑問をもつ
    • 「なぜこの精度?」「なぜこの手法が強い?」「なぜこのパラメータを調整したら結果が良くなる?」など、結果に疑問点をもつ。
  3. 各手法のコアとなる数理を学ぶ
    • 各手法の仕組みを理解するうえで必要な数理的な基礎知識(統計・線形代数など)を学ぶ。
    • 各手法の仕組みのコアを数理的に理解する。(例:回帰分析なら「最小二乗法」など)
    • サンプルコードを動かしたときの疑問点を数理的に理解する。(例:「なぜ回帰分析は外れ値の悪影響を受けやすいのか」など)

数理的な学習だけを行うと挫折しやすいですが、Pythonライブラリ「scikit-learn」の使い方と併せて学習することで理解が進みやすくなります。最初は難しく感じるかもしれませんが、数理的な理解が深まると、以下のようなことができるようになり、「AIを使う人材」としての価値を高めます。

近年、AIツールの進化により、コードの自動生成は驚くほど容易になりました。しかし、こうした時代だからこそ、数理的な理解を深め、AIに使われる側ではなく、使いこなす側として主体的に技術と向き合う姿勢が求められます。
AIツールを使うだけで完結する仕事」は、やがてAIに代替されていくでしょう。一方で、「論理的にAIツールを選定・調整できる仕事」は、今後ますます価値を高めていきます。
AI時代を生き抜くためには、ツールの操作にとどまらず、その背後にある数理的な仕組みや原理を理解することが不可欠です。使い方を覚えるだけで満足せず、理論を深く掘り下げる姿勢こそが、技術を真に使いこなす力へとつながります。
自動化されやすい仕事 AIに代替されにくい仕事
定型的なデータ入力・集計 問題設定・仮説構築・モデル設計
単純な予測・分類 モデルの選定・評価・改善
マニュアル通りの作業 創造的・戦略的な判断

以下ページでは、Pythonライブラリ「scikit-learn」の使い方を数理的な背景も含めて解説していますので、是非ご一読ください。

【Scikit-learn超入門】使い方をサンプルコード付きで解説
Pythonライブラリ「Scikit-learn」で機械学習を行う方法を入門者向けに解説します。
]]>
https://python.joho.info/scikit-learn/scikit-learn-mathematical-learning/feed/ 0 41481
【pipとは】使い方から応用例まで入門者向けに徹底解説 https://python.joho.info/tutorial/pip/ https://python.joho.info/tutorial/pip/#respond Wed, 16 Jul 2025 07:12:15 +0000 https://python.joho.info/?p=41371 pipとは?使い方から様々なオプションを活用した応用例までについて詳しく解説します。

pipって何?

pip(Python Package Installerの略。読み方は「ピップ」)は、Pythonのライブラリ(パッケージ)をインターネットから簡単にインストールしたり、更新・削除するためのコマンドラインツールです。スマホのアプリストアのように、Pythonの機能を追加する“拡張機能”を入れるイメージです。Python 3.4以降では標準で付属しており、特別な設定なしで使えます。

本ページでは、Python初心者でも理解できるよう、環境確認からインストールまで順を追って説明します。

pipの環境確認とインストール

① ターミナルもしくはコマンドを開いて以下のコマンドを実行し、pipがインストールされているか確認しましょう。

pip --version

【正常な出力例】

pip 23.3.1 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
もし「pipが見つかりません」と出たら、Pythonのインストールがうまくいっていない可能性があります。

② pipを使ってPythonライブラリ(パッケージ)をインストールする場合、以下のコマンドを実行します。

pip install ライブラリ名
例えば、HTTP通信を簡単に扱える「requests」ライブラリをインストールしたい場合、「pip install requests」と書いて実行します。

pipでよく行う操作

③ 以下のコマンドを実行すると、インストール済みのライブラリの一覧が表示されます。

pip list

④ 特定のバージョンをインストールするには、ライブラリ名の横に「==バージョン番号」を付けます。

pip install ライブラリ名==1.24.0

⑤ 不要になったライブラリは、以下のコマンドを実行することで削除できます。

pip uninstall ライブラリ名

サブコマンド

サブコマンドとは、pipに「何をしてほしいか」を指定する命令のことです。たとえば、pipに「ライブラリをインストールして」と指示するには、installというサブコマンドを使います。
pipは万能なツールですが、何をするかはサブコマンドで決まります。

pip サブコマンド [オプション] [対象]

例えば、requestsというライブラリをインストールしたい場合、以下のようにコマンドを書きます。

pip install requests
【ポイント】
pip → ツール本体
install → サブコマンド(ツールで何をするか)
requests → 対象(インストールしたいライブラリ)

よく使うサブコマンド一覧

pipでよく使うサブコマンドの一覧を以下にまとめました。

サブコマンド 説明 使用例
install パッケージをインストール pip install numpy
uninstall パッケージを削除 pip uninstall pandas
list インストール済み一覧表示 pip list
freeze バージョン付き一覧を出力 pip freeze > requirements.txt
show パッケージの詳細情報表示 pip show flask
check 依存関係の整合性を確認 pip check
download パッケージをダウンロード(インストールはしない) pip download requests
search パッケージを検索(※非推奨) pip search flask
config pipの設定を管理 pip config list
cache pipのキャッシュを操作 pip cache dir
debug pipの環境情報を表示 pip debug
help ヘルプを表示 pip help

オプション

オプションとは、サブコマンドの細かい動作を設定する“追加の指示”のことです。オプションはpipに限らず、LinuxのコマンドやGitなど、多くのツールで使われる基本概念です。 たとえば、「pip install requests」というコマンドは、pipに「requestsっていうライブラリをインストールして」と伝えているため、pipは「普通にインストール」します。 もし「最新版にアップデートして」「特定の古いバージョンでインストールして」など、細かい要望を追加したいとき、オプションを指定します。

以下は、オプションを指定せずに単にrequestsをインストールします。

pip install requests

以下は、オプション--upgradeを指定し、requestsを最新版にアップデートします。

pip install --upgrade requests
要素 意味
pip コマンド(何をするか)
install サブコマンド(何に対して何をするか)
–upgrade(オプション) どう動作してほしいかの追加指示

ちなみに、オプションは短縮形も用意されていることが多いです。pipでも例えば以下のような短縮形が存在します。

  • 短い形式(短縮)-r, -U, -v など
  • 長い形式(読みやすい)--requirement, --upgrade, --verbose など

つまり、「pip install –U requests」と書いて実行しても、「pip install –upgrade requests」と同じ動作を行います。

pip install の主要オプション一覧

オプション 説明 使用例
-r / --requirement ファイルから一括インストール pip install -r requirements.txt
-U / --upgrade 最新バージョンにアップグレード pip install -U numpy
--user ユーザー環境にインストール pip install --user pandas
--no-deps 依存パッケージをインストールしない pip install --no-deps flask
--pre プレリリース版も対象にする pip install --pre tensorflow
-i / --index-url インストール元URLを指定 pip install -i https://pypi.org/simple/ requests
--extra-index-url 追加のインデックスURLを指定 pip install --extra-index-url https://my.repo/simple mypkg
--no-cache-dir キャッシュを使わずにインストール pip install --no-cache-dir requests
-v / --verbose 詳細なログを表示 pip install -v pandas
-q / --quiet 出力を抑える pip install -q numpy
--proxy プロキシ経由でインストール pip install --proxy http://proxy.server:port flask
--dry-run 実際にはインストールせず依存解決のみ pip install --dry-run fastapi
--no-input 対話的な入力を無効化 pip install --no-input flask
--force-reinstall 再インストールを強制 pip install --force-reinstall pandas

応用例

仮想環境上にパッケージをインストール

以下のコマンドを使えば、仮想環境上にパッケージをインストールできます。

python -m venv myenv # 仮想環境の作成
myenv\Scripts\activate     # 仮想環境を有効化(Windows)
pip install flask # 仮想環境内にFlaskパッケージをインストール

別環境に一括インストール

① 自分のプロジェクトで使っているライブラリ一覧を保存します。

pip freeze > requirements.txt

② 前述で作成した一覧データを用いて、別環境に一括インストールします。

  pip install -r requirements.txt

練習問題

本ページで学んだ内容を定着させるとともに、「Python 3 エンジニア認定基礎試験」や「基本情報技術者試験」の対策にも役立つ練習問題を用意しましたので、チャレンジしてみてください。

【問題1】基本的なインストール(難易度★☆☆☆☆)

HTTP通信を扱うライブラリ「requests」を通常インストールする正しいコマンドを選びなさい。

A.

pip add requests

B.

pip install requests

C.

pip get requests

D.

pip setup requests

正解:B
解説:
・ パッケージのインストールは pip install パッケージ名 を用います。例えば pip install requests が正しいです。
addgetsetup は pip のサブコマンドとして存在しません。

【問題2】バージョン指定インストール(難易度★☆☆☆☆)

特定のバージョン 1.24.0 の numpy をインストールする正しいコマンドを選びなさい。

A.

pip install numpy==1.24.0

B.

pip install numpy=1.24.0

C.

pip install numpy:1.24.0

D.

pip install numpy --version 1.24.0

正解:A
解説:
・ バージョン指定は パッケージ名==バージョン番号 の形式を用います(例:pip install numpy==1.24.0)。
=:--version 指定はインストール対象バージョンの指定方法としては無効です。

【問題3】アップグレードのショートオプション(難易度★☆☆☆☆)

requests を最新にアップグレードする際のショートオプションを用いた正しいコマンドを選びなさい。

A.

pip install -U requests

B.

pip install -G requests

C.

pip install -L requests

D.

pip upgrade requests

正解:A
解説:
・ アップグレードは --upgrade またはショートの -U で指定します。
-G-L は該当する意味を持たず、pip upgrade というサブコマンドも存在しません。

【問題4】インストール済み一覧の表示(難易度★☆☆☆☆)

インストール済みパッケージの一覧を表示する正しいコマンドを選びなさい。

A.

pip show

B.

pip list

C.

pip freeze

D.

pip check

正解:B(用途によって C も可)
解説:
・ 一覧は基本的に pip list を使います。
pip freeze はバージョン固定形式(requirements 互換)で一覧を出力する用途に向いています。
pip show は個別パッケージ情報表示、pip check は依存関係整合性の確認です。

【問題5】requirements.txtの作成と利用(難易度★★☆☆☆)

requirements.txt を作成して別環境へ一括インストールする正しい手順を選びなさい。

A.

pip list > requirements.txt
pip install -r requirements.txt

B.

pip freeze > requirements.txt
pip install -r requirements.txt

C.

pip show all > requirements.txt
pip install --all requirements.txt

D.

pip config save requirements.txt
pip install --config requirements.txt

正解:B
解説:
・ エクスポートは pip freeze > requirements.txt を用い、インストールは pip install -r requirements.txt を使います。
pip list は表示形式が requirements と互換ではないため、再現性のある一括インストールには不適です。

【問題6】アンインストール(難易度★☆☆☆☆)

不要になった pandas を削除する正しいコマンドを選びなさい。

A.

pip remove pandas

B.

pip uninstall pandas

C.

pip delete pandas

D.

pip purge pandas

正解:B
解説:
・ 削除は pip uninstall パッケージ名 を用います。
removedeletepurge といったサブコマンドは pip では提供されていません。

【問題7】プレリリース版のインストール(難易度★★☆☆☆)

tensorflow のプレリリース版も候補に含めてインストール対象にする適切なオプションはどれか。

A.

pip install tensorflow --beta

B.

pip install tensorflow --pre

C.

pip install tensorflow --dev

D.

pip install tensorflow --snapshot

正解:B
解説:
・ プレリリース(pre-release)版も対象にするには --pre を指定します。
--beta--dev--snapshot は pip 標準のオプションではありません。

【問題8】インデックスURLの指定(難易度★★☆☆☆)

PyPI 以外のインデックス URL を指定して requests をインストールする正しいコマンドを選びなさい。

A.

pip install requests --index-url https://pypi.org/simple/

B.

pip install -i https://pypi.org/simple/ requests

C.

pip install --url https://pypi.org/simple/ requests

D.

pip install requests --source https://pypi.org/simple/

正解:B(A も可)
解説:
・ インデックス URL は -i または --index-url で指定できます。
・ 位置は pip install の後にオプション→パッケージの順でも、パッケージ→オプションの順でも機能しますが、一般的には A/B のようにオプションを先に書く形が多いです。
--url--source はインデックス指定のオプションではありません。

【問題9】キャッシュを使わないインストール(難易度★★☆☆☆)

キャッシュを使わずに requests をインストールする正しいコマンドを選びなさい。

A.

pip install requests --no-cache

B.

pip install --no-cache-dir requests

C.

pip install requests --nocache

D.

pip install -N requests

正解:B
解説:
・ キャッシュ不使用は --no-cache-dir を指定します。
--no-cache--nocache-N などのオプションは pip で定義されていません。

【問題10】依存関係の整合性確認(難易度★☆☆☆☆)

インストール済みパッケージの依存関係の整合性をチェックする正しいコマンドを選びなさい。

A.

pip verify

B.

pip check

C.

pip audit

D.

pip inspect

正解:B
解説:
・ 依存関係の整合性確認は pip check を使用します。
・ 他の選択肢は pip の標準サブコマンドとして用意されていません。

関連ページ(もっと学びたい人へ)

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...
]]>
https://python.joho.info/tutorial/pip/feed/ 0 41371