初めてパイソンを学習する方のためのサイトです。なるべくシンプルに解説して行きます。
一般的にPythonの実行は、PCのコマンドプロンプトから行いますが、ちょっと面倒ですよね。このため、ここではユーザーフレンドリーなグーグルコラボ(Google Colaboratory)を使った環境で実行しています。
※Windowsでコマンド(コマンドプロンプト)を起動するには、Windowsキー+Rキーを押して「ファイル名を指定して実行」ダイアログを開き、cmdと入力して「OK」をクリックする方法が最も一般的です。また、Windowsのスタートメニューの検索バーにcmdと入力し、「コマンドプロンプト」をクリックして起動することも可能です。
パイソンを勉強しようと思った個人的な理由
9月の終わり、ワードプレス記事の見出し順を上昇順に変えたい件があり、長い記事だったのでエディタ編集も大変でした。ChatGTPに聞いたら「Pythonで簡単にできるよ」と言われ飛びつきました。
Pythonのインストール
以下の手順で、Pythonのインストールを行います。
1.Python公式サイトから、Pythonパッケージをダウンロードします
2.ダウンロードしたパッケージをインストールします。
3.PowerShellでPythonを実行するときに必要となる、スクリプトの実行許可を設定します。
こちらからWindows用インストーラをダウンロードします。
最新版は3.13.7でした。詳しくはこちらのサイトなどを見てください。
グーグルコラボ
Google Colaboratory(Google Colab、コラボ)とは、Googleが提供する無料で利用できるオンラインのPython開発環境です。Webブラウザからアクセスし、コードの記述、実行、共有が行えます。インストール不要で、Webブラウザだけで利用できるため、新たに開発環境を構築する必要がありません。
グーグルコラボは、グーグルクロームにログインすれば、以下のサイトから入ることができます。https://colab.research.google.com/
また、グーグルコラボの詳しい使い方に関してはこちらのサイトなど参考にして下さい。
90分、12時間ルール
無料のグーグルコラボでは次のルールがあるので注意しましょう。
- 90分ルール: ユーザーの操作がない場合に適用されるアイドル状態のタイムアウトです。対策は一定時間ごとにノートブックの画面をリロードしたり、セルを操作したりして、アイドル状態と見なされないようにします。
- 12時間ルール: ユーザーが操作を続けていても、連続したセッションの最大時間が12時間を超えると、強制的にセッションが切断されます。対策は12時間経過する前に学習モデルをGoogleドライブ等に保存すること。
ファイル形式.ipynb
Pythonを学習していくと、拡張子が「.ipynb」のサンプルファイルが見かけられます。.ipynbとは、Jupyter Notebookで作成・保存されるファイル形式で、Pythonなどのコード、実行結果、テキスト(説明文)などをすべて1つのファイルにまとめられるのが特徴です。
ファイルの開き方
①Jupyter Notebookを起動して、ブラウザ上で .ipynb ファイルを開く。
②コマンドラインで jupyter notebook を実行し、対象のファイルを選択。
③Google ColabやVS Codeなどの対応エディタで直接開く。
Pythonの基礎
コードは小文字で書く?
Pythonでは、変数名や関数名は小文字で書くのが一般的ですが、大文字・小文字は区別されるため、Boolean型 (True, False) や文字列メソッド (upper(), lower()) など、決まった記述の仕方があります。コード全体で小文字と大文字の使い分けには一貫性を持たせることが重要です。
コードの indent
Pythonのコードにおけるインデント(字下げ)とは、コードのブロック(処理のまとまり)を視覚的に区切り、構造を明確にするための空白またはタブのことです。Pythonでは中括弧 {} の代わりにインデントがコードブロックの定義に使われるため、正確なインデントが必須であり、不適切なインデントは IndentationError というエラーを引き起こします。
IndentationError: expected an indented block after ‘for’ statement on line 1
インデントエラー: 1 行目の ‘for’ 文の後にインデントされたブロックが必要です
Print文
Python の print() 文(正確には関数)は、テキスト、数値、変数などの値を画面やファイルに出力するための組み込み関数です。主な使い方は print(出力したい内容) と関数形式で記述し、文字列の表示や変数の値の確認、デバッグなどに使われます。デフォルトでは出力の後に改行が追加されますが、end 引数で改行の有無や末尾に表示する文字を制御し、sep 引数で複数の値を区切る際の文字を指定できます。
演算
>加算や乗算などの四則演算を行ってみましょう。
print(5+3)
print(5-3)
print(5*6)
print(10/5) # 3系では割り算の結果が小数点になります。整数にしたい場合は/の代わりに、//と記述することで実現できます
print(10%5)
print(10**2) # **は冪乗(べきじょう)(累乗とも呼ぶ)の計算の時に利用します
変数
変数とは、データを入れる箱(入れ物)だと思ってください。変数に値を入れることを代入と呼びます。
Pythonは変数に代入したデータ型によって、自動的にデータ型が決定される言語です。
他の言語だと、整数とかテキストとか型宣言をしますが、Pythonでは不要です。
x = “hello world”
y = 42print(x)
print(y)y = 100 # 42から100に上書き
print(y*3.14)
データ型
Pythonに限らず、プログラミング言語にはデータの性質を表すデータ型というものがあります。
intは整数型、strは文字列型、floatは浮動小数点型などがあります。
他にリスト型、タプル型、辞書型などがあります。
イテラブル
イテラブルとは、for文などで要素を順次取り出せるオブジェクトのことで、リスト、文字列、`rangeオブジェクトなどが該当します。これらのイテラブルオブジェクトは、データ構造内の要素にアクセスし、繰り返し処理を行うことを可能にします。
各イテラブルオブジェクトの例
- リスト (List):複数のデータを順序付けて格納できるオブジェクトです。
例: [1, 2, 3] や [“apple”, “banana”] - 文字列 (String):文字の並びを表すイテラブルオブジェクトです。各文字を順次取り出せます。
例: “hello” - rangeオブジェクト (range object):数値のシーケンス(範囲)を生成するイテラブルオブジェクト
例: range(5) は 0, 1, 2, 3, 4 という数値を生成します。
関数とライブラリ
Pythonでは関数が特定の処理を行う基本的なコードの部品であり、ライブラリは関連する関数やクラスをまとめたプログラムの集まりです。ライブラリを使うことで、複雑な機能をゼロから作る手間を省き、効率的に開発を進めることができます。ライブラリは通常、import文を使ってプログラムに読み込んでから使用します。
関数(Function)
役割:特定の機能や処理をまとめて名前を付けたものです。例えば、`print()やlen()`のような組み込み関数は、特別な操作なしですぐに利用できます。
使用例:ある計算を繰り返し行う場合、その計算処理を関数として定義しておくと、コードの再利用性が高まります。
ライブラリ(Library)
役割:プログラムで利用できる関数やクラス、モジュール、パッケージなどの集まりを指します。これらをまとめて「ライブラリ」と呼びます。
メリット:数値計算、自然言語処理、データ解析など、自分で実装するのが難しい複雑な処理を、あらかじめ用意されたライブラリの機能を使うことで簡単に実現できます。
If文
if 文は条件分岐の設定です。「もし〇〇なら△△をする」といった処理をしたい時に使います。
具体的には「条件」と「条件が満たされた時の処理」で構成されています。
if文の基本形
if文のもっとも基本となる型は、ifのみの構文です。記述の仕方は以下のようになります。
if 条件式:
条件式が真(true)の場合に実行する処理
この場合、条件式は1つだけになるので、条件式がtrueにならない場合はなにも処理が実行されません。
次のサンプルコードでは、入力された値を参照し、1だった場合のみ「1です」と出力します。
value = int(input(‘1〜10の数を入力してください’))
if value == 1:
print(‘1です’)
if else の形
ifの条件式が偽(false)であった場合の処理を追加するには、if…elseの構文型を使用します。記述の仕方は以下のような形になります。
if 条件式:
条件式が真(true)の場合に実行する処理
else:
条件式が偽(false)の場合に実行する処理
それではサンプルを見てみましょう。次のサンプルコードでは、入力された値を参照し、1だった場合はifの処理が実行され「1です」と出力します。1でなかった場合はelseの処理が実行され「1ではありません」と出力します。
value = int(input(‘1〜10の数を入力してください’))
if value == 1:
print(‘1です’)
else:
print(‘1ではありません’)
for i in range文
1から10までの合計を計算する
total = 0
for i in range(1, 11):
total += i
print(total)「結果」55
- 初期化
total = 0
→ 変数 total を 0 で初期化します。ここに合計をどんどん足していきます。 - for文のループ
for i in range(1, 11):
→ range(1, 11) は 1から10までの整数 を順番に取り出します。
(Pythonのrangeは「開始値を含み、終了値を含まない」ので、11を指定すると10までになります)つまり、この部分では i が、1, 2, 3, 4, 5, 6, 7, 8, 9, 10と順番に代入されます。 - 合計を更新
total += i → total = total + i の省略形です。
毎回 i の値を total に足し込んでいきます。 - 結果を確認
ループが終わると total には 1から10までの合計 (55) が入っています。
print(total)
出力の値は 55です。
もっと短く書くなら sum 関数を使う
print(sum(range(1, 11))) # 出力: 55
Printを繰り返す
同じことを単純に繰り返します。
※print行にindentが必要?
for i in range(5):
print(i)「結果」0 1 2 3 4
for i in range文のinの意味は何か?
for i in range(…) の構文
Pythonのfor文はこういう形をしています:for 変数 in イテラブル:
変数 → ループごとに取り出される値を受け取る
in → 「〜の中から順番に取り出す」という意味
イテラブル → リスト、文字列、range など「順番に取り出せるもの」
つまり、for i in range(1, 11):は
「range(1, 11) の中から値を1つずつ取り出して、変数 i に入れる」という意味です。
なぜ「for range」ではないのか?
rangeは「数列を作る関数」ですが、それだけでは「繰り返し処理をする」にはなりません。
for文は 「inで指定された集まりから1つずつ取り出す」 という決まりで動いています。
たとえば:for x in [10, 20, 30]:
print(x)→ 出力は 10 20 30
ここでは range ではなくリスト [10, 20, 30] を使っていますが、同じように in を使って要素を順に取り出している のがわかります。
inのイメージ
in = 「…の中から」
for i in range(1, 11) = 「range(1, 11) の中から i を順番に取り出す」
だから、for range(…) だけでは 「どこから値を取り出すのか?」がない のでエラーになる。
for文は 「in イテラブル」 という形が必須
in は「その中から1つずつ取り出す」という意味
rangeは単に「数列を生成する関数」であり、in とセットにしてはじめてループ処理に使える
応用プログラム
PDFの操作を自動化
パイソンのライブラリの中から「PyMuPDF」を使ってPDFから文章を抽出したり、ページを加工してみたりします。
最初にPyMuPDFをインストールします。
!pip install PyMuPDF
読みとりに使用するテストデータは「ihoujin.pdf」を使います。
import pymupdfdoc = pymupdf.open(“ihoujin.pdf”)# ihoujin.pdfを読み取り、変数docに入れる
page = doc[0] # 1ページ目の情報を取得
text = page.get_text() # 1ページ目の文字を抽出して変数textに入れる
print(text)
「結果」
異邦人(イントロ、レフ3 回) 久保田早紀1978 年
子供たちが 空に向かい 両手を ひろげ
鳥や雲や 夢までも つかもうと している・・・
画像処理を自動化
画像加工のライブラリとして「Pillow」があります。画像の読み込み、編集、保存ができます。
読みとりに使用するテスト画像は「kantan-hp.png」(512px*512px)を使います。
最初にPllowをインストールする
!pip install pillow
画像を読み込む
from PIL import Imageimg = Image.open(“kantan-hp.png”)
画像サイズを取得する
width = img.size[0]height = img.size[1]print(f“画像の幅は{width}“)print(f“画像の高さは{height}“)
「結果」
画像の幅は512
画像の高さは512
画像をリサイズする
resized_width = int(width * 2) # 幅を2倍にしてint型
resized_height = int(height * 0.5) # 高さを0.5倍にしてint型
resized_img = img.resize((resized_width, resized_height))
resized_img.save(“resized.png”)
画像を反時計回りに90度回転する
グレースケールに変換する
加工した画像は左サイドバーのファイルに、新しい名前で保存されています。実際に使うには︙からダウンロードして使います。
Webスクレイピングで情報取得
スクレイピングとは、インターネット上に存在するWebサイトから、膨大な量の情報を集めてくることです。ここではテストからHTMLを取得するプログラミングを学習します。
RequestsライブラリでHTMLを取得します。
※コラボではRequestsは、最初からインストールされています。
テスト用のWebサイトからHTMLを取得します(https://k-hp.com/test)
RequestsライブラリでHTMLを取得
import requests# ライブラリを呼び出す
url = “https://k-hp.com/test”# テスト用サイトを定義
response = requests.get(url) # テスト用ページからHTMLを取得
response.encoding = “utf-8” # 文字エンコードをutf-8に指定
print(response.text) # 取得したHTMLを表示
Beautiful SoupライブラリでHTMLから情報を取り出す
※コラボではBeautiful Soupは、最初からインストールされています。
Beautiful Soupライブラリでh2タグの情報を取得
from bs4 import BeautifulSoup# bs4はバージョン4の意味
soup = BeautifulSoup(response.text, “html.parser”) # Beautiful SoupでHTMLを解析
h2 = soup.find(“h2”) # h2タグの情報を取り出す
print(h2.text)# 取得したh2タグのテキストを表示「結果」
君はロックを聴かない
全部のh2タグを取得する
h2_tags = soup.find_all(“h2”)# すべての<h2>タグを取得for i, h2 inenumerate(h2_tags, start=1):# 順に出力print(f“No.{i}: {h2.text}“)
「結果」
No.1: 君はロックを聴かない
No.2: 埃まみれ ドーナツ盤には
No.3: フツフツと鳴り出す青春の音
No.4: 僕の心臓のBGMは
No.5: 君はロックなんか聴かないと思いながら
No.6: 君がロックなんか聴かないこと知ってるけど
No.7: 君はロックなんか聴かないと思いながら
No.8:
テキストの並び順を変える
reモジュールは、正規表現を使って文字列のパターンマッチングを行うためのライブラリです。 これを使うことで、文字列の検索、置換、抽出が効率的に行えます。 match():文字列の先頭が正規表現に一致するか確認します。
HTML記事(article.html)の見出し順を上昇順に変えたい
import re#reモジュールを呼び出す
# 記事を保存したファイルとソート先ファイル
INPUT_FILE = “article.html”
OUTPUT_FILE = “article_sorted.html”# ファイルを読み込む
with open(INPUT_FILE, “r”, encoding=”utf-8″) as f:
content = f.read()# 見出し<h3>から次の<h3>までを「1話分」として抽出
pattern = re.compile(r'(<h3>第(\d+)話.*?</h3>.*?)(?=<h3>|$)’, re.DOTALL)
episodes = pattern.findall(content)# episodes は [(全体ブロック, “49”), (全体ブロック, “48”), …] の形になる
# 数字でソート
episodes_sorted = sorted(episodes, key=lambda x: int(x[1]))# 並び替えたテキストを連結
sorted_content = “\n\n”.join([ep[0] for ep in episodes_sorted])# ファイルに保存
with open(OUTPUT_FILE, “w”, encoding=”utf-8″) as f:
f.write(sorted_content)print(“並べ替え完了! 出力ファイル:”, OUTPUT_FILE)
「結果」
並べ替え完了! 出力ファイル: article_sorted.html
機械学習で写真の仕訳
画像生成のAIアプリを作成
会議要約プログラムの作成
コメント