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

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

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