Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Opalで使える37のライブラリ

Avatar for MIKIO KUBO MIKIO KUBO
October 12, 2025

Google Opalで使える37のライブラリ

Avatar for MIKIO KUBO

MIKIO KUBO

October 12, 2025
Tweet

More Decks by MIKIO KUBO

Other Decks in Programming

Transcript

  1. 1. はじめに:Python エコシステムの力 Python パッケージとは? 再利用可能なコードのツールボックス .py ファイル(モジュール)を含むディレクトリ pip install

    でインストールし、 import で利用可能 なぜエコシステムが重要なのか? 「車輪の再発明」を避ける データサイエンス、機械学習、自動化など多様な分野で活躍 世界中のコミュニティが開発・維持 → 協力と革新 2
  2. Python 科学技術計算スタックの階層構造 Seaborn (高レベルな統計可視化) matplotlib と pandas 上に構築 Pandas /

    Matplotlib / SciPy (データ操作 / 可視化 / 高度な計算) numpy 上に構築 NumPy (高速な数値計算) C言語で書かれたパフォーマンス層 この階層構造が、 使いやすさと 高性能を両立させています。 4
  3. NumPy: コード例 import numpy as np # リストから1次元配列を作成 my_array =

    np.array([1, 2, 3, 4]) # ベクトル化された演算(すべての要素を2倍する) doubled_array = my_array * 2 print(f"2倍された配列: {doubled_array}") # [2 4 6 8] 6
  4. 2. Pandas: データ操作と分析の達人 概要: データ操作と分析のためのライブラリ。 DataFrame が中心。 重要性: 表形式データ(CSV, Excel,

    SQL等)を直感的に扱える データの前処理(クリーニング、変換)に不可欠 主な機能: データの読み書き データの選択、フィルタリング、変換 欠損データの処理、グループ化、結合 7
  5. Pandas: コード例 import pandas as pd data = {'Name': ['Alice',

    'Bob', 'Charlie'], 'Age': [25, 30, 35]} df = pd.DataFrame(data) # 30歳より年上の人々を選択 older_people = df[df['Age'] > 30] print(older_people) 8
  6. SciPy: コード例 ( 画像のぼかし) from scipy import misc, ndimage import

    matplotlib.pyplot as plt # scikit-imageやimageioの使用が推奨されます import imageio.v3 as iio face = iio.imread('imageio:camera.png') # ガウシアンフィルタを適用 blurred_face = ndimage.gaussian_filter(face, sigma=3) plt.imshow(blurred_face, cmap=plt.cm.gray) plt.show() 10
  7. Matplotlib: コード例 import matplotlib.pyplot as plt x = [1, 2,

    3, 4] y = [2, 4, 1, 5] plt.plot(x, y) plt.title("Simple Line Plot") plt.show() 12
  8. Seaborn: コード例 import seaborn as sns import matplotlib.pyplot as plt

    tips = sns.load_dataset("tips") # 回帰直線付きの散布図を作成 sns.lmplot(x="total_bill", y="tip", data=tips) plt.show() 14
  9. Matplotlib vs Seaborn 比較表 特徴 Matplotlib Seaborn 主な用途 基本的で汎用的な描画 高レベルな統計データの可視化

    抽象度 低レベル(細かい制御が可 能) 高レベル(複雑なプロットを簡素 化) 構文 より冗長になることがある より簡潔 データ入 力 NumPy配列やリストに最適 PandasのDataFrameに最適化 デフォル ト 機能的だが、カスタマイズが 必要 美しいテーマとカラーパレット 使用場面 完全な制御が必要な場合 迅速なデータ探索と美しい統計プロ 15
  10. Scikit-learn: コード例 ( 簡単な分類) from sklearn.model_selection import train_test_split from sklearn.neighbors

    import KNeighborsClassifier from sklearn.datasets import load_iris X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y) knn = KNeighborsClassifier().fit(X_train, y_train) print(f"モデルの正解率: {knn.score(X_test, y_test):.2f}") 19
  11. 7. TensorFlow: ディープラーニングの原動力 概要: Google製の、特にディープラーニングのための大規模機械学習ライブラ リ 重要性: 大規模なモデルの構築と展開のための包括的なエコシステム CPU, GPU,

    TPUで実行可能。研究と本番の両方に適応 主な機能: ニューラルネットワークの構築と訓練(高レベルAPIのKerasが便利) TensorBoard による訓練プロセスの可視化 様々なデバイスへのモデル展開 20
  12. TensorFlow: コード例 ( 簡単なNN) import tensorflow as tf mnist =

    tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy') # model.fit(x_train, y_train, epochs=5) # 訓練は時間がかかる 21
  13. Joblib: コード例 ( 並列ループ) from joblib import Parallel, delayed import

    time def slow_square(i): time.sleep(0.1) return i * i # 4つのCPUコアでループを並列実行 results = Parallel(n_jobs=4)(delayed(slow_square)(i) for i in range(10)) print(f"結果: {results}") # [0, 1, 4, ..., 81] 23
  14. ドキュメント操作: 適材適所の哲学 明確な分離: 操作ライブラリ ( 例: PyPDF2): 既存のファイルを変更 生成ライブラリ (

    例: fpdf, ReportLab): ファイルをゼロから作成 トレードオフ: シンプルさ ( 例: fpdf): 手軽で素早く作成 制御力 ( 例: ReportLab): ピクセル単位の精密なレイアウト **「何をしたいのか?」**によって、使うべきライブラリが決まります。 25
  15. PyPDF2: コード例 (PDF の結合) import PyPDF2 # 'doc1.pdf'と'doc2.pdf'があると仮定 merger =

    PyPDF2.PdfWriter() # for pdf in ['doc1.pdf', 'doc2.pdf']: # merger.append(pdf) # merger.write('merged.pdf') # merger.close() 27
  16. ReportLab: コード例 from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter

    c = canvas.Canvas("simple_report.pdf", pagesize=letter) c.drawString(72, 800, "Hello, World!") c.save() 29
  17. fpdf: コード例 from fpdf import FPDF pdf = FPDF() pdf.add_page()

    pdf.set_font("Arial", size=16) pdf.cell(200, 10, txt="Hello, World!", ln=True, align="C") pdf.output("simple_fpdf.pdf") 31
  18. PyLaTeX: コード例 from pylatex import Document, Section # LaTeXのインストールが必要です doc

    = Document() with doc.create(Section('A Section')): doc.append('Some text.') # doc.generate_pdf('pylatex_example', clean_tex=False) 33
  19. PDF ライブラリ選択ガイド 特徴 PyPDF2 fpdf ReportLab PyLaTeX タスク 既存PDFの 操作

    PDFの 生成 PDFの 生成 PDFの 生成 複雑さ 簡単~中級 簡単 複雑 中級 (LaTeX知識 要) 最適用 途 分割、結合、抽 出 シンプルなレポ ート 精密なレイアウ ト 学術論文、数式 主な特 徴 既存ファイルを 扱う 学びやすい 詳細な制御 出版品質の組版 34
  20. 13. python-docx: Word ドキュメント自動化 概要: Microsoft Word (.docx) ファイルを作成・更新するライブラリ 重要性:

    データベースからのレポート生成などを自動化 既存のテンプレートへのデータ流し込みも可能 主な機能: 段落、見出し、表、画像の追加と書式設定 35
  21. python-docx: コード例 from docx import Document document = Document() document.add_heading('My

    Automated Document', level=1) document.add_paragraph('This is a paragraph.') document.save('demo.docx') 36
  22. 14. python-pptx: PowerPoint 自動生成 概要: PowerPoint (.pptx) ファイルを作成・更新するライブラリ 重要性: 分析結果など動的なデータからプレゼンテーションを自動生成

    週次報告などの定型業務に最適 主な機能: スライドの追加、テキストの入力 画像、表、図形、グラフの追加 37
  23. python-pptx: コード例 from pptx import Presentation prs = Presentation() title_slide_layout

    = prs.slide_layouts[0] slide = prs.slides.add_slide(title_slide_layout) title = slide.shapes.title title.text = "Hello, World!" prs.save('test.pptx') 38
  24. 15. openpyxl: 最新Excel ツールキット ( 読み書き) 概要: 最新のExcel (.xlsx) ファイルを読み書きするライブラリ

    重要性: 最新Excelファイルを扱う際の標準ライブラリ Excelがインストールされていなくても動作 主な機能: ワークブック、シートの作成 データの読み書き、数式やスタイルの適用 グラフや画像の挿入 39
  25. openpyxl: コード例 import openpyxl wb = openpyxl.Workbook() sheet = wb.active

    sheet['A1'] = 'Product' sheet['B1'] = 'Sales' sheet.append(['Keyboard', 120]) wb.save('sales_report.xlsx') 40
  26. 16. xlrd: 旧式Excel リーダー ( 読み込み専用) 概要: 旧式のExcel (.xls) ファイルからデータを読み込むライブラリ

    重要性: openpyxl が扱えない古い .xls 形式のデータを抽出する際に必要 注意: 最新版は .xls ファイル のみをサポート 主な機能: .xls ワークブックを開き、シートにアクセス セルからデータを読み込む 41
  27. xlrd: コード例 import xlrd # 'legacy_data.xls' があると仮定 # try: #

    workbook = xlrd.open_workbook('legacy_data.xls') # sheet = workbook.sheet_by_index(0) # cell_value = sheet.cell_value(rowx=0, colx=0) # print(cell_value) # except FileNotFoundError: # print("'legacy_data.xls'が見つかりません。") 42
  28. Excel ライブラリ選択ガイド 特徴 openpyxl xlrd ファイ ル形式 最新のExcel ( .xlsx

    ) 旧式のExcel ( .xls のみ) 機能 読み込み と 書き込み 読み込み専用 使用場 面 最新のExcelファイルに関わる あらゆるタスク 古い .xls ファイルからデータを抽出 する必要がある場合 43
  29. ビジュアルデータ処理の役割分担 Pillow: 基本的な画像操作 (PythonらしいシンプルなAPI) opencv-python: 高度なコンピュータビジョン (高性能なC++ベース) imageio: 汎用的なI/O (多様なファイル形式を抽象化)

    geopandas: 地理空間分析 (PandasのAPIを地図データに拡張) これらはパイプラインを形成します。例えば imageio で読み込み、 Pillow で編集 し、 matplotlib で表示する、といった連携が可能です。 45
  30. Pillow: コード例 ( リサイズ) from PIL import Image # try:

    # with Image.open("my_image.jpg") as img: # img.thumbnail((200, 200)) # img.save("thumbnail.jpg") # except FileNotFoundError: # print("my_image.jpgが見つかりません。") 47
  31. opencv-python: コード例 ( グレースケール変換) import cv2 # img = cv.imread('my_image.jpg')

    # if img is not None: # gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # cv.imwrite('grayscale_image.jpg', gray_img) # else: # print("画像を読み込めませんでした。") 49
  32. Pillow vs opencv-python 比較表 特徴 Pillow opencv-python 主な用途 基本的な画像の 操作

    高度な コンピュータビジョン 範囲 リサイズ、回転、フィルタ 物体検出、顔認識、追跡 パフォーマンス 軽量でオフライン向き 高性能、リアルタイム向き 使いやすさ 非常に簡単、Pythonic 学習曲線が急、C++風 例えるなら フォトエディタ (MSペイント) ロボットの「目」 50
  33. 19. imageio: 汎用的な画像・動画I/O 概要: 多様な画像・動画データを読み書きするための統一インターフェース 重要性: imread() / imwrite() だけで様々な形式を扱え、コードが綺麗になる

    データをNumPy配列として返すため、科学技術計算スタックと相性抜群 主な機能: 画像、動画、GIFのフレームを読み込み NumPy配列から動画やGIFを作成 51
  34. imageio: コード例 (GIF 作成) import imageio.v3 as iio import numpy

    as np frames = [] for i in range(10): frame = np.zeros((100, 100, 3), dtype=np.uint8) frame[:, i*10:(i*10)+10, 0] = 255 # 動く赤い帯 frames.append(frame) iio.imwrite('moving_band.gif', frames, duration=100, loop=0) 52
  35. contourpy: コード例 (Matplotlib 経由) import matplotlib.pyplot as plt import numpy

    as np x = np.arange(-3.0, 3.0, 0.1) y = np.arange(-2.0, 2.0, 0.1) X, Y = np.meshgrid(x, y) Z = np.exp(-X**2 - Y**2) # Matplotlibはこの呼び出しで内部的にcontourpyを使用 plt.contour(X, Y, Z) plt.show() 54
  36. geopandas: コード例 import geopandas as gpd import matplotlib.pyplot as plt

    # Geopandasのサンプルデータセットを使用 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world.plot(column='continent', legend=True) plt.title('World Map') plt.show() 56
  37. Python エコシステムの深さ このセクションのライブラリは、エコシステムの成熟度を示しています。 言語改善: attrs , toolz データ検証: jsonschema ,

    protobuf 複雑な解析: lxml , pyparsing 専門分野: sympy , chess , jinja2 ほぼ全てのプログラミング問題に対し、専門的なツールが存在します。 58
  38. attrs: コード例 import attr @attr.s(auto_attribs=True) class Point: x: float y:

    float # __init__と__repr__は自動生成! p = Point(1.0, 2.0) print(p) # 出力: Point(x=1.0, y=2.0) 60
  39. toolz: コード例 from toolz import groupby, compose # 最初の文字で単語をグループ化 words

    = ['apple', 'banana', 'apricot'] print(dict(groupby(lambda w: w[0], words))) # {'a': ['apple', 'apricot'], 'b': ['banana']} # 関数を合成 add_one_then_double = compose(lambda x: x * 2, lambda x: x + 1) print(add_one_then_double(5)) # 出力: 12 ( (5+1)*2 ) 62
  40. lxml: コード例 from lxml import html html_content = "<html><body><h1>Welcome</h1></body></html>" tree

    = html.fromstring(html_content) # XPathを使用して<h1>タグのテキストを抽出 header_text = tree.xpath('//h1/text()') print(f"Header: {header_text}") # ['Welcome'] 64
  41. jsonschema: コード例 from jsonschema import validate, ValidationError schema = {

    "type": "object", "properties": {"name": {"type": "string"}}, "required": ["name"] } try: validate(instance={"name": "Alice"}, schema=schema) print("検証OK") validate(instance={"age": 30}, schema=schema) except ValidationError as e: print(f"検証NG: {e.message}") # 'name' is a required property 66
  42. protobuf: コード例 ( コンセプト) # person_pb2は `protoc` コマンドで生成 # import

    person_pb2 # person = person_pb2.Person() # person.name = "John Doe" # serialized_data = person.SerializeToString() 68
  43. pyparsing: コード例 from pyparsing import Word, alphas # 文法: (英単語)

    + "," + (英単語) + "!" grammar = Word(alphas) + "," + Word(alphas) + "!" result = grammar.parse_string("Hello, World!") print(list(result)) # ['Hello', ',', 'World', '!'] 70
  44. jinja2: コード例 from jinja2 import Template # `{{ name }}`

    がプレースホルダ template = Template("Hello, {{ name }}!") output = template.render(name="World") print(output) # Hello, World! 72
  45. packaging: コード例 from packaging.version import parse v1 = parse("1.2.3") v2

    = parse("1.10.0") print(f"{v2} > {v1} は? {v2 > v1}") # True 74
  46. 30. six: Python 2 と3 の互換性ブリッジ 概要: Python 2と3の間の構文の違いを吸収する互換性ライブラリ 重要性:

    かつては両方のバージョンで動くコードを書くのに不可欠だった 現在は多くの古いライブラリで後方互換性のために残っている 75
  47. 31. sympy: Python での記号数学 ( 代数) ️ 概要: 記号計算(コンピュータ代数)のためのライブラリ 重要性:

    sqrt(8) を 2.828... ではなく 2*sqrt(2) として正確に扱う 方程式の求解、微分・積分を記号的に行える 76
  48. sympy: コード例 from sympy import symbols, Eq, solve x =

    symbols('x') # 'x'を記号として定義 equation = Eq(x**2 - 4, 0) # x^2 - 4 = 0 solutions = solve(equation, x) print(f"解は: {solutions}") # [-2, 2] 77
  49. chess: コード例 import chess board = chess.Board() board.push_san("e4") # "e4"を指す

    board.push_san("e5") print(board) # r n b q k b n r # p p p p . p p p # . . . . . . . . # . . . . p . . . # . . . . P . . . # . . . . . . . . # P P P P . P P P # R N B Q K B N R 81
  50. striprtf: コード例 from striprtf.striprtf import rtf_to_text rtf_content = "{\\rtf1\\ansi Hello

    \\b World\\b0.}" text = rtf_to_text(rtf_content) print(text) # "Hello World." 83
  51. tabulate: コード例 from tabulate import tabulate data = [["Alice", 28],

    ["Bob", 30]] headers = ["Name", "Age"] print(tabulate(data, headers=headers, tablefmt="grid")) # +-------+-----+ # | Name | Age | # +=======+=====+ # | Alice | 28 | # +-------+-----+ # | Bob | 30 | # +-------+-----+ 85
  52. 36 & 37. xlwt: 旧式Excel ライター 概要: 旧式のExcelファイル ( .xls

    ) を 書き込むためのライブラリ 重要性: xlrd (読み込み)と対になる存在 最新の .xlsx には openpyxl が推奨されるが、古い .xls 形式で出力する 要件がある場合に必要 86
  53. xlwt: コード例 import xlwt workbook = xlwt.Workbook() sheet = workbook.add_sheet('My

    Sheet') sheet.write(0, 0, 'Hello, World!') # workbook.save('example.xls') 87
  54. 学習ロードマップ案 あなたの目標 が... スターターパック ( 最初に学ぶ べき) 次のステップ ( 次に探求すべ

    き) データ分析と可 視化 numpy , pandas , matplotlib , seaborn openpyxl , geopandas , scipy 機械学習とAI numpy , pandas , scikit- learn tensorflow , joblib , opencv-python オフィス業務自 動化 pandas , openpyxl , python- docx PyPDF2 , ReportLab , jinja2 Web スクレイピ ング lxml pyparsing , striprtf 89