-
PythonとWord2Vecによる単語埋め込み(Word Embedding)の実装入門
単語埋め込み(Word Embedding)とは単語埋め込み(Word Embedding)は、単語を実数値のベクトルへマッピングするための言語モデリング手法です。多次元のベクトル空間上に単語やフレーズを表現することで、意味が近い単語同士が空間的にも近く配置されるようになります。この技術により、コンピュータが単語の「意味」を数値的に扱えるようになり、自然言語処理のさまざまなタスクの基盤となっています。単語埋め込みは、ニューラルネットワーク、共起行列、確率モデルなど、複数のアプローチによって生成することが可能です。Word2Vecの仕組みWord2Vecは、単語埋め込みを生成するためのモデル群で
-
Pythonのpython-docxモジュールでWord文書を操作する方法
Word文書は、3つのオブジェクト階層で構成された書式付きテキストを含んでいます。最下層が「Run」オブジェクト、中間層が「Paragraph(段落)」オブジェクト、そして最上位層が「Document(文書)」オブジェクトです。そのため、通常のテキストエディタではこれらのWord文書を扱うことができません。しかし、Pythonのpython-docxモジュールを使えば、プログラムから自由にWord文書を作成・編集できます。python-docxの導入手順まず、サードパーティ製モジュールであるpython-docxをインストールします。pipコマンドで「pip install python-do
-
Python Kivyでボタンを作成・操作する方法【サンプルコード付き】
Kivyは、プラットフォームに依存しないPython製のGUIツールキットです。Android、iOS、Linux、Windowsなどさまざまな環境で動作するため、「一度コードを書けば複数のプラットフォームで実行できる」という大きなメリットがあります。主にAndroidアプリ開発向けに利用されますが、デスクトップアプリケーションの開発にも十分活用できます。 KivyにおけるButton(ボタン)は、押下時(クリックやタッチして離したとき)に特定のアクションを実行できるLabelの一種です。ボタンの裏側に関数(コールバック)を紐づけたり、見た目を自由にカスタマイズしたりすることも可能です。 ボタ
-
Python PandasとXlsxWriterでExcelファイルを操作する方法
PythonのPandasは、データ分析向けのライブラリです。小規模から大規模なデータセットまで読み込み、フィルタリングや並べ替えなどの加工を行い、Excelをはじめとするさまざまな形式で出力することができます。PandasがExcelファイルに書き込む際には、内部でXlsxWriterモジュールが利用されます。XlsxWriterは、XLSX形式のファイルを作成するためのPythonモジュールです。テキスト・数値・数式を複数のワークシートに書き込めるほか、書式設定、画像の挿入、グラフ作成、ページ設定、オートフィルタ、条件付き書式など、多彩な機能をサポートしています。サンプルコード:DataF
-
Python×MatplotlibでPNG画像を自在に操作する方法|擬似カラー・カラーバー・補間処理のコード例
Matplotlibは、Pythonで配列の2Dプロットを行うための強力な可視化ライブラリです。NumPy配列を基盤として構築されたマルチプラットフォーム対応のデータ可視化ライブラリであり、より広範なSciPyスタックとの連携を想定して設計されています。本記事では、MatplotlibとPIL(Pillow)を組み合わせてPNG画像を操作する具体的な手法を、擬似カラーの適用、カラーバーの表示、画像のリサイズ、補間処理の4つのステップに分けて解説します。1. 擬似カラー(Pseudocolor)の適用グレースケール画像や単一チャンネルのデータに対してカラーマップを適用すると、値の違いを色の変化と
-
Python入門:複数のファイルデータを1つのマスターファイルに書き込む方法
ファイル操作は、あらゆるWebアプリケーションにおいて欠かせない重要な処理です。Pythonには、ファイルの作成・読み取り・更新・削除を行うための関数が数多く用意されています。既存のファイルに書き込みを行う場合は、open() 関数にモードを指定するパラメータを追加する必要があります。a(Append/追記モード) — ファイルの末尾にデータを追加しますw(Write/上書きモード) — 既存の内容をすべて消去して上書きします実装例:複数のファイルを1つのマスターファイルに統合する以下の例では、指定したディレクトリ内にある複数のテキストファイルを読み込み、その内容を1つのマスターファイル(ma
-
Pythonのopenpyxlモジュールを使ったExcelファイルへの書き込み方法
openpyxlは、Excelファイル(拡張子がxlsx / xlsm / xltx / xltmのもの)を読み書きするためのPythonライブラリです。openpyxlモジュールを使うことで、PythonプログラムからExcelファイルを読み取ったり、内容を変更したりすることができます。 たとえば、数千行に及ぶデータの中から条件に合致する一部の情報だけを取り出し、小さな修正を加えたいような場面を想像してみてください。openpyxlモジュールを活用すれば、こうした作業を非常に効率的かつ簡単に自動化できます。 openpyxlのインストール openpyxlは標準ライブラリではないため、使用前
-
【Python】行列の異なる行から指定した合計になるペアをすべて検索する方法
問題の概要ユニークな要素で構成される行列(マトリックス)と目標の合計値が与えられたとき、合計がその値と一致するすべてのペアを行列から見つけます。ただし、ペアを構成する2つの要素は、必ず異なる行から取得する必要があります。たとえば、次のような入力が与えられたとします。24356987101114121311516sum = 13 の場合、出力は次のようになります。[(4, 9), (5, 8), (2, 11), (3, 10), (12, 1)]アルゴリズムの手順この問題は、各行をあらかじめソートしておき、行の組み合わせごとにツーポインター法を用いて合計が一致するペアを効率よく探索します。手順
-
Pythonで2つの異なるBST(二分探索木)から指定した合計値となるペアを検索する方法
2つの二分探索木(BST)とある合計値が与えられたとき、その合計値に一致するペアを探します。ただし、各ペアの要素は異なるBSTに属している必要があります。例として、sum = 12 が与えられた場合を考えてみましょう。この場合、出力は [(6, 6), (7, 5), (9, 3)] となります。解法のアプローチこの問題は、以下の手順で効率的に解くことができます。各木を中順走査(in-order traversal)して、昇順にソートされたリストを作成します。1つ目のリストは先頭(最小値)から、2つ目のリストは末尾(最大値)から両端ポインタ方式で走査します。2つの要素の合計が目標値と等しければ
-
Pythonで二分木の各レベルの葉ノードの合計値の積を求める方法
問題の概要 二分木(バイナリツリー)が与えられたとき、以下の操作を実行することを考えます。 各レベルについて、そのレベルに葉ノードが存在する場合はすべての葉ノードの値の合計を求めます。葉ノードが存在しないレベルは無視します。 求めたすべての合計値の積を計算して返します。 例えば、次のような二分木が入力として与えられた場合を考えてみましょう。 この場合、出力は 270 になります。最初の2つのレベルには葉ノードが存在しません。第3レベルには葉ノードが1つだけあり、その値は 9 です。最後のレベルには 2、12、5、11 という4つの葉ノードがあります。したがって、結果は 9 × (2 +
-
Pythonで連絡先リストから同一人物の連絡先を検索する方法
問題の概要ユーザー名、メールアドレス、電話番号を任意の順序で保持する連絡先のリストがあるとします。このリストの中から「同一人物」に紐づく連絡先(同じ人が複数の異なる連絡先情報を持っているケース)を見つけ出し、同一の連絡先どうしをまとめて返すことを考えます。この問題を解くうえで、次の2つのポイントを押さえておく必要があります。各連絡先は、ユーザー名・メールアドレス・電話番号という3つのフィールドを、どのような順序で格納していても構いません。2つの連絡先は、ユーザー名・メールアドレス・電話番号のいずれか1つでも一致していれば「同じ」とみなすものとします。たとえば、入力が以下のような場合を考えてみま
-
Pythonで銀行の警備員からの最短距離を求める方法(BFS活用)
問題の概要 「O」「G」「W」の3種類の文字で構成されたマトリックス(二次元グリッド)を考えてみましょう。「O」は通路(開放スペース)、「G」は警備員、「W」は壁を表しています。この課題では、すべての「O」を、最も近い警備員からの最短距離に置き換えます。移動の際に壁は通過できません。最終的な出力では、警備員のセルは0、壁のセルは-1として表示されます。 入力例 OOOOGOOOWOOWOOOGWWWOOOOOG 出力例 33210233-111-14320-1-1-1112210 解法のアプローチ:マルチソースBFS この問題は、すべての警備員を起点として同時に探索を開始する「マルチソースBF
-
Pythonで2つの配列から合計が等しい部分配列を検索する方法
問題概要 大きさNの2つの配列PとQがあり、それぞれ1からNまでの数値を含んでいると仮定します。この問題では、与えられた2つの配列から合計が等しくなる部分配列(サブ配列)を見つけ出し、そのインデックスを返す必要があります。解が存在しない場合は-1を返します。 例えば、入力が以下の場合を考えてみましょう。 P = [2, 3, 4, 5, 6] Q = [9, 3, 2, 6, 5] この場合の出力は「最初の配列のインデックス:0, 1, 2」「2番目の配列のインデックス:0」となります。これは、P[0..2] = 2 + 3 + 4 = 9 と Q[0] = 9 の合計が一致しているためで
-
PythonでビットごとANDとORの合計が最大になる部分列の組み合わせを求める方法
問題の概要 n個の要素からなる配列が与えられたとき、その配列から2つの部分列を選びます(2つの部分列は同じものでも異なるものでも構いません)。そして、1つ目の部分列の全要素のビットごとのAND(論理積)の値と、2つ目の部分列の全要素のビットごとのOR(論理和)の値を足し合わせた合計が最大になるようにします。 例えば、入力が A = {4, 6, 7, 2} の場合、出力は 14 になります。これは、要素「7」だけを選ぶことで最大のAND値である7が得られ、すべての要素(4 | 6 | 7 | 2)= 7 を選ぶことで最大のOR値である7が得られるためです。したがって、結果は 7 + 7 = 1
-
Pythonですべての母音を含み子音を含まない部分文字列を検索する方法
問題の概要小文字のアルファベットのみで構成された文字列が与えられたとします。この文字列から、5つの母音(a、e、i、o、u)をすべて少なくとも1回ずつ含み、かつ子音を一切含まない部分文字列をすべて見つけ出すのが今回の課題です。例えば、入力として helloworldaeiouaiunicestring が与えられた場合、出力は次の7つの部分文字列になります。aeiouaeiouaaeiouaiaeiouaiueiouaeiouaieiouaiuこれらはいずれも母音だけで構成されており、かつ a・e・i・o・u の5種類すべてが含まれている点に注目してください。解決のためのアルゴリズムこの問題は
-
Pythonで指定セルの行・列を除いたマトリックス内の全要素の合計を求める方法
2次元マトリックス(行列)と複数のセルインデックスが与えられたとき、それぞれのセルインデックスについて「その行と列に含まれる要素を除外した残りの全要素の合計」を計算する問題を考えてみましょう。セルインデックスは (i, j) の形式で表されます。ここで i は行番号、j は列番号を意味します。つまり、各セルインデックス (i, j) ごとに、i 行目および j 列目に存在する要素をすべて取り除き、それ以外の要素の合計を求めることになります。入力例たとえば、次のような3×3のマトリックスが与えられたとします。223457643このとき、セルインデックスが [(0, 0), (1, 1), (0,
-
Pythonで最初の文字列の最小インデックスに存在する2番目の文字列の文字を検索する方法
2つの文字列 str と patt があるとします。この課題では、str の中で最も小さいインデックス(先頭に近い位置)に現れる patt 内の文字を特定します。もし patt のどの文字も str に存在しない場合は、-1 を返します。 たとえば、入力が str = helloworld、patt = wor の場合、出力は o になります。これは w がインデックス 5、o がインデックス 4、r がインデックス 7 に存在しており、その中で最も小さいインデックスを持つのが o だからです。 アルゴリズムの手順 この問題は、次の手順で解くことができます。 外側のループで、変数 i を 0
-
Pythonで指定された3つの頂点から長方形の4番目の頂点の座標を求める方法
Q × P のサイズのグリッドを考えてみましょう。このグリッドには、ちょうど3つのアスタリスク「*」が含まれており、その他のセルはすべてドット「.」で埋められています。「*」は長方形の頂点を表しています。ここでの課題は、欠けている4番目の頂点の座標を見つけることです。なお、座標は1始まりのインデックス(1-based indexing)として扱います。 たとえば、入力が grid = [*.., ..., *.*] の場合、出力は (1, 3) になります。これが求める、欠けている頂点の座標です。 アプローチ:行と列の出現回数を数える この問題は、各行・各列に含まれる「*」の個数に着目するこ
-
Pythonで文字列に含まれる回文部分文字列の数を求める方法
すべて小文字(ASCII文字)からなる文字列が与えられたとき、その文字列に含まれる連続する回文部分文字列をすべて見つけ、その総数を求めることを考えます。 たとえば、入力が「level」の場合、出力は 7 になります。「level」「eve」「l」「e」「v」「e」「l」の7つの部分文字列が回文として該当するためです。 解決のための手順 この問題は、次の手順に従って解くことができます。 N := 26(英小文字の種類数)とする n := 文字列 str の長さとする sum := 0 として初期化する my_map := サイズ N のリストを作成し、すべての要素を 0 で初期化する i を
-
Pythonで「bird」に並べ替えられる長さ4の部分文字列の個数を求める方法
すべて小文字で構成された文字列 S が与えられます。このとき、文字を並べ替えると bird という単語になる長さ4の部分文字列が、文字列全体にいくつ含まれているかを求めます。たとえば、入力が birdb の場合、出力は 2 になります。これは、先頭の「bird」と2文字目以降の「irdb」の2つの部分文字列が、それぞれ並べ替えることで bird を作れるためです。解法の考え方この問題は、次の手順で解きます。カウンタ変数 cnt を 0 で初期化します。i を 0 から len(s) - 3 まで動かし、長さ4の部分文字列の開始位置を順番に調べます。各開始位置について、b・i・r・d の出現回数