Pythonコラム - 株式会社グローバルウェイ ビジネスアプリケーション事業本部 https://gw-python.com Pythonの高い技術力と長年の実績とお客様のご評価が当社の強みです。 Fri, 13 Mar 2026 11:41:14 +0000 ja hourly 1 https://wordpress.org/?v=6.8.1 https://gw-python.com/wp-content/uploads/2025/05/cropped-icon-logo-32x32-1-32x32.png Pythonコラム - 株式会社グローバルウェイ ビジネスアプリケーション事業本部 https://gw-python.com 32 32 Pythonで共分散行列を求める https://gw-python.com/archives/1179 Thu, 26 Feb 2026 11:30:29 +0000 https://gw-python.com/?p=1179 グローバルウェイのYです。共分散は、2つの変数が「一緒にどれくらい変動するか」を測る指標です。 この考え方を、複数の特徴量に拡張したものが共分散行列です。 この記事は以下のターゲットを対象としています。 ★5 Djang […]

The post Pythonで共分散行列を求める first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

グローバルウェイのYです。
共分散は、2つの変数が「一緒にどれくらい変動するか」を測る指標です。

  • 正の共分散:片方が増えると、もう片方も増える傾向がある
  • 負の共分散:片方が増えると、もう片方は減る傾向がある

この考え方を、複数の特徴量に拡張したものが共分散行列です。


この記事は以下のターゲットを対象としています。

★5 Djangoの開発経験が3年以上。
★4 Djangoの開発経験が1年以上。
★3 Webサイト開発経験あり。これからDjangoを学習します。
★2 Python 初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。

なぜ共分散行列を見るのか


共分散行列は、各変数の分散(対角成分)と、変数間の共分散(非対角成分)をまとめた行列で、データの構造を理解するための基本ツールです。
Pythonの資格を目指す人にとってもっとも身近な使用法は主成分分析(PCA)です。
PCAでは、この行列を固有値分解し、データのばらつきを説明する主成分方向を抽出します。固有値は「その方向の情報量(分散)」を示し、固有ベクトルは「その方向の軸」を表します。
共分散行列を理解することは、次元削減や特徴抽出の本質を理解する第一歩です。単にライブラリのメソッドを呼び出すだけでなく、「なぜその処理が必要なのか」を理解しておくことは、実務でも試験でも大きな価値があります。

標本共分散とは

サンプルサイズ n の 2 変数 x,y の共分散は:

$$\text{Cov}(X, Y) = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})$$

ここで:

  • $x_i, y_i$:それぞれの観測値
  • $\bar{x}, \bar{y}$:各変数の標本平均

この考え方を複数の特徴量に拡張すると、共分散行列になります:

  • 対角成分:各変数の分散 $(\text{Var}(X_i))$
  • 非対角成分:変数間の共分散 $(\text{Cov}(X_i, X_j))$

共分散行列の特徴は以下のとおりです

  1. 対称行列
    共分散行列は $\Sigma = [\text{Cov}(X_i, X_j)]$ で構成され、
    $\text{Cov}(X_i, X_j) = \text{Cov}(X_j, X_i)$ なので、行列は必ず対称です。
  2. 共分散行列は、任意の非ゼロベクトル $a$ に対して
    $$a^\top \Sigma a \ge 0$$
    が成り立ちます。これは、分散が負にならないことに対応します。
  3. 対角成分は分散(2次のモーメント)
    $$\Sigma_{ii} = \text{Var}(X_i) = E[(X_i - \mu_i)^2]$$
  4. サイズは特徴量の数に依存
    特徴量が $p$ 個なら、共分散行列は$p \times p$ の正方行列になります。
  5. スケール依存性がある
    単位やスケールが異なると、共分散の絶対値が変わります。
    今回は標準化します。
  6. 固有値分解が可能
    共分散行列は対称かつ正定値なので、固有値分解できます。
    $$\Sigma = Q \Lambda Q^\top$$

固有値 $Λ$:各主成分の分散
固有ベクトル $Q$:主成分の方向

プログラムで共分散行列を作成する

今回はアヤメのデータをすべて使用します。
アヤメのデータについては
https://gw-python.com/archives/502
をご覧ください。

アヤメのデータは以下の三つの品種のデータをもちます。
 setosa, versicolor, virginica
また、それぞれ、以下の特徴量を持ちます。
 sepal length, sepal width, petal length, petal width

では、共分散行列を作成します。

今回はプログラム内で標準化をしています。標準化については
https://gw-python.com/archives/589
をご覧ください。


import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler

# 1) Irisデータ読み込み
iris = load_iris()
X = iris.data  # shape: (150, 4)
feature_names = iris.feature_names

# 2) 標準化(scikit-learnのStandardScaler)
scaler = StandardScaler()
X_std = scaler.fit_transform(X)  # 平均0・分散1に変換

# 3) 共分散行列(NumPyで標本共分散)
cov_matrix = np.cov(X_std, rowvar=False, bias=False)  # rowvar=False: 列を変数、bias=False: n-1で割る

# 出力
np.set_printoptions(precision=3, suppress=True)
print("=== 共分散行列(標準化後・標本) ===")
print(cov_matrix)

実行結果

=== 共分散行列(標準化後・標本) ===
[[ 1.007 -0.118  0.878  0.823]
 [-0.118  1.007 -0.431 -0.369]
 [ 0.878 -0.431  1.007  0.969]
 [ 0.823 -0.369  0.969  1.007]]

まとめ

共分散行列の求め方を式で示しました。実際にPCAをプログラムで行う場合は、ライブラリにメソッドが用意されているため、このようなコードを書くことはほとんどありません。しかし、処理の中で何が行われているかを理解しておくことは非常に重要です。
実際のPCAでは、このあと固有値を求め、そこから寄与率(分散説明率)を算出して主成分を選びます。
今回は内容を絞り、共分散行列の求め方のみを解説します。難しい式ではありません。
ぜひ勉強して、理解を深めてみてください。


The post Pythonで共分散行列を求める first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
openpyxlで、Excelに書式を設定したい ~表示形式編 その1~ https://gw-python.com/archives/1155 Thu, 19 Feb 2026 00:00:00 +0000 https://gw-python.com/?p=1155 ※社外のコラムニストによる記事です。Python関連の情報をお伝えします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます […]

The post openpyxlで、Excelに書式を設定したい ~表示形式編 その1~ first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回はExcelファイルの暗号化について学びました。 ここからはChapter2-8に入り、openpyxlでExcelの書式設定や罫線の引き方を学びます。今回は表示形式の変更です。

openpyxlでも書式設定はできる。

openpyxlからExcelの書式を設定することができます。対応しているのは以下の項目です。

  • 数値・日付などの表示形式(例:小数点、通貨形式など)
  • データタイプの設定
  • フォント(文字の種類、サイズ、太字/斜体、色など)
  • セルの塗りつぶし
  • 罫線(線種、色)
  • 文字の配置(水平・垂直方向の配置、折り返し、インデントなど)
  • セルの保護(編集ロックなど)
  • 条件付書式(セルの値に応じて色を変えるなど)(Conditional Formatting)
  • 名前付きスタイル(Named Styles)

書籍では、代表的な設定のみにするということで、表示形式(小数点位置、通貨、カンマ、日時)、データタイプ、文字の配置場所の指定、罫線について説明されています。今回は小数点と通貨、カンマの部分です。

各設定に関してはopenpyxlの公式ドキュメントなどでご確認ください。

openpyxl - Excel 2010のxlsx/xlsmファイルを読み書きするためのPythonライブラリ — openpyxl 3.1.4 ドキュメント

表示形式の設定

さて、今回は表示形式の設定を学びます。
表示形式の設定にはnumber_format属性に、表示したい形式をExcelの時と同じように書きます。 とりあえず一覧にしてみましたが、思い出せない時はExcelの書式設定で形式コードを確認できるので大丈夫です!(Excelホームタブの数値の項目)

数値関連

用途number_format表示例
整数"0"1233
小数点2位まで"0.00"1.233
桁区切り(カンマ)"#,##0"1,2334
桁区切り+小数点"#,##0.00"1,2334.56
パーセント"0%" / "0.00%"12% / 12.334%

日付関連

用途number_format表示例
YYYY/MM/DD"yyyy/mm/dd"2025/12/12
月日"m"月"d"日"12月12日
時刻のみ(時分秒)"hh:mm:ss"12:334:56
日付 + 時刻"yyyy-mm-dd hh:mm"2025-12-12 12:00
英語月+日付 フル/短縮mmmm-d / mmm-dMarch-12 / Mar-12

通貨、その他

用途number_format表示例
日本円(¥)'"¥"#,##0'¥1,2334
ドル+小数2桁($)"$#,##0.00"$1,2334.00
数値を文字列として扱う"@"0012334

やってみる。

ではサンプルコードを確認していきます。
number_formatを使うときの書式はこの通り。
sheet["A1"].number_format = "値"

小数点以下の表示

最初に確認するサンプルコードでは、33つのセルに同じ値(33.1416)を入れた後、各セルの表示設定を、小数点を省略・2位まで表示・4位まで表示という形に分けます。
では実際にコードを見てみます。



P.84 サンプルコード



整数だけなら0、小数第2位までなら0.00、小数第4位までなら0.0000で設定します。
これを実行した結果がこちら。

33桁区切りカンマと通貨形式の表示

セルへ値を入れるのと、書式の設定をします。ここでは33桁ごとにカンマで区切るものと、通貨形式にするもの、マイナスの数字は赤字にするという設定の33つを確認します。サンプルコードがこちら。


P.86 サンプルコード


最初の def set_cell(cname, value, fmt): の部分では、「セルに値と書式(number_format)をまとめて設定するための関数」が定義されています。ここでは①cname(セル名)、②value(セルに入れる値)、③fmt(セルに適用する書式)という設定がされています。

この関数を用意しておくことで、複数のセルに値を入れ、書式を設定するときに、毎回 c.value = ... や c.number_format = ... と書く必要がなくなるため、コードを簡潔にできるようになります。

では、各セルに入れられる値について確認していきます。まずこのコードを実行したときの結果から。

A列にはnumber_formatで設定する予定の書式を表示するガイド的な役割があります。これらの書式は、keta33_fmt、cur_fmt、num_fmt といった変数として管理されています。
B1~C33には、数値を設定し、それぞれに対応する書式を適用することで、同じ書式でも値の違いによって表示がどのように変わるかを確認できるようになっています。

例えば、set_cell("B33", 123345, num_fmt)と書かれている場合、「B33セル」に、「123345を入力」し、num_fmtで定義した書式を適用する、となります。
※num_fmt = '#,##0;[red]"△ "#,##0' →33桁区切り、負数は赤色+△表示

セルに入れられる値や書式設定の内容が明確で、後から読み返したときもわかりやすいですね。

ではきりが良いので、今回はこちらで終了です。お付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?ご興味のある方は以下をご覧のうえ、ぜひお問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post openpyxlで、Excelに書式を設定したい ~表示形式編 その1~ first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
PythonでXのAPIを使う方法 https://gw-python.com/archives/1145 Thu, 12 Feb 2026 11:41:26 +0000 https://gw-python.com/?p=1145 この記事は以下のターゲットを対象としています。 ★5 Djangoの開発経験が 3 年以上。★4 Djangoの開発経験が 1 年以上。★3 WWebサイト開発経験あり。これからDjangoを学習します。★2 Pytho […]

The post PythonでXのAPIを使う方法 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

この記事は以下のターゲットを対象としています。

★5 Djangoの開発経験が 3 年以上。
★4 Djangoの開発経験が 1 年以上。
★3 WWebサイト開発経験あり。これからDjangoを学習します。
★2 Python初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。

はじめに

SNSデータは、トレンド分析やマーケティング調査、ボット開発、業務効率化ツールの作成など、さまざまな分野で活用できる非常に魅力的なデータソースです。個人開発から研究用途まで幅広く使える点も、多くのエンジニアや学習者に支持されている理由の一つです。

その中でもX(旧Twitter)は、リアルタイム性の高い情報が大量に流れるプラットフォームとして知られています。ニュース速報、世の中の反応、個人のつぶやきなどが瞬時に集まるため、「今、何が起きているのか」「人々が何に関心を持っているのか」を把握するのに非常に適しています。そのため、多くの開発者がデータ収集や分析の対象としてXを活用しています。

Xには、こうしたデータをプログラムから扱うための API(Application Programming Interface) が用意されています。APIを利用することで、人の手で操作しなくても、ポストの投稿や取得、ユーザー情報の参照などを自動化することが可能になります。

本記事では、PythonからXのAPIを利用する基本的な流れを紹介します。
「APIってそもそも何?」「PythonからどうやってXと連携するの?」といった疑問を持っている方でも理解できるように、できるだけ噛み砕いて説明していきます。

具体的には、XのAPIを使うための事前準備、Python環境の整え方、ライブラリの利用方法、そして実際に動かせる簡単なコード例までを順を追って解説します。これからXのAPIに触れてみたい方や、Pythonで何か作ってみたいと考えている方にとって、最初の一歩となる内容を目指しています。

XのAPIとは

XのAPIとは、プログラムからXの機能やデータを利用するために用意された公式の仕組みです。通常、私たちはブラウザやスマートフォンのアプリを通してXを操作しますが、APIを使うことで、人の操作を介さずにプログラムから直接Xとやり取りすることができます。
APIを利用すると、X上に存在するさまざまな情報を自動的に取得したり、逆にプログラム側から情報を発信したりすることが可能になります。これにより、手作業では難しい大量データの処理や、定期的な作業の自動化が実現できます。
具体的には、APIを使うことで次のような操作が行えます。

  • ポストの投稿や取得
  • 特定のキーワードやハッシュタグを含むポストの検索
  • ユーザーのプロフィール情報やフォロワー情報の取得
  • 条件に応じた自動投稿(アプリに適切な権限が付与されている場合)

これらの機能をPythonから操作することで、取得したポストを分析してトレンドを可視化したり、定期的に情報を発信するボットを作成したりと、さまざまな応用が可能になります。特にPythonは、ライブラリが豊富でコードも読み書きしやすいため、API連携の入門として非常に相性の良い言語です。

XのAPIは、開発者向けにルールや利用制限(レートリミット)が設けられていますが、それらを理解した上で使えば、個人開発や学習用途でも十分に活用できます。本記事では、こうしたAPIの仕組みを踏まえつつ、PythonからXのAPIを扱う基本的な方法を解説していきます。

事前準備:開発者アカウントとAPIキー

XのAPIを利用するためには、まず Xの開発者アカウントを作成する必要があります。通常のXアカウントとは別に、開発者向けの登録を行うことで、APIを利用するための各種設定や管理が可能になります。

開発者アカウントの登録後、開発者ポータルにアクセスし、アプリケーションを作成します。アプリを作成すると、そのアプリ専用の認証情報が発行され、これを使ってプログラムからXのAPIにアクセスする仕組みになっています。

開発者ポータルサイトはこちらです。
https://developer.x.com/ja

アプリ作成後に発行される主な認証情報は、次のとおりです。

  • API Key
  • API Secret
  • Access Token
  • Access Token Secret(または Bearer Token)

これらの情報は、XのAPIを利用する際に本人確認を行うためのもので、いわばパスワードや鍵のような役割を果たします。そのため、第三者に知られてしまうと、不正利用される危険性があります。

実際の開発では、これらの認証情報を ソースコードに直接書き込むことは避け、環境変数や設定ファイルを利用して管理するのが一般的です。特に、GitHubなどの公開リポジトリにコードを置く場合、うっかりAPIキーを公開してしまうと大きなトラブルにつながるため注意が必要です。

最初は少し手間に感じるかもしれませんが、この認証情報の管理はAPIを安全に使うための重要なステップです。次の章では、これらの情報を使って、実際にPythonからXのAPIに接続する方法を見ていきます。

Pythonの環境準備

今回は、PythonからXのAPIを扱うために、専用のライブラリを利用します。Pythonには標準機能だけでも多くのことができますが、API連携では認証処理や通信部分を簡単に書けるライブラリを使うのが一般的です。

ここでは、XのAPIをPythonから扱う際によく使われているtweepyというライブラリを使用します。tweepyは、XのAPI仕様に沿った機能があらかじめ用意されており、複雑になりがちな認証処理やAPIリクエストを、比較的少ないコードで記述できるのが特徴です。

まずは、Pythonがインストールされていることを確認した上で、以下のコマンドを実行してtweepyをインストールします。

pip install tweepy

このコマンドを実行すると、tweepy本体と、API通信に必要な関連ライブラリが自動的にインストールされます。インストールが完了すれば、Pythonのスクリプトからimport tweepyと書くだけで利用できるようになります。

 tweepyを使うことで、XのAPIに対する認証設定、ポストの投稿や取得、検索処理などをシンプルに実装できます。そのため、API連携が初めての方でも、比較的スムーズにXのAPIを扱い始めることができます。

次の章では、インストールしたtweepyを使って、実際にXのAPIへ接続する方法を紹介していきます。

APIに接続してみる

まずは、XのAPIに接続するための基本的なコードを見てみましょう。

このステップでは、先ほど取得したAPIキーやアクセストークンを使って、PythonからXのAPIへ認証・接続を行います。

import tweepy

API_KEY = "APIキー"
API_SECRET = "APIシークレット"
ACCESS_TOKEN = "アクセストークン"
ACCESS_TOKEN_SECRET = "アクセストークンシークレット"

auth = tweepy.OAuth1UserHandler(
    API_KEY,
    API_SECRET,
    ACCESS_TOKEN,
    ACCESS_TOKEN_SECRET
)

api = tweepy.API(auth)

print("接続成功")

まず、import tweepy によって、先ほどインストールしたtweepyライブラリを読み込みます。その後、開発者ポータルで発行された API Key や Access Token などの認証情報を変数に代入します。ここには実際に自分のアカウント用のキーを設定してください。

次に、OAuth1UserHandlerを使って認証情報をまとめ、XのAPIにアクセスするための認証オブジェクトを作成します。これは、「このプログラムは正しい開発者である」ということをX側に伝えるための重要な処理です。

最後に、tweepy.API(auth) によってAPIクライアントを作成します。このAPIオブジェクトを通して、ポストの投稿や取得など、さまざまなAPI操作を行うことができるようになります。

このコードを実行してエラーが表示されず、接続成功 と出力されれば、PythonからXのAPIへの接続が正しく行えている状態です。もしエラーが出た場合は、APIキーの入力ミスや、アプリの権限設定(Read / Write)が正しいかを確認してみてください。

次の章では、このAPIオブジェクトを使って、実際にポストを投稿する方法を紹介していきます。

ポストを投稿してみる

APIへの接続が確認できたら、次は 実際にポストを投稿してみましょう。
XのAPIを利用すると、Pythonのプログラムからテキストを指定して、自分のXアカウントにポストを投稿することができます。 以下のコードを実行すると、指定したテキストが自分のXアカウントに投稿されます。

client = tweepy.Client(
    API_KEY,
    API_SECRET,
    ACCESS_TOKEN,
    ACCESS_TOKEN_SECRET
)

client.create_tweet(text=’テスト投稿’)

ここでは、tweepy.Client を使ってAPIクライアントを作成しています。
このclientオブジェクトを通して、ポストの投稿や取得など、さまざまな操作を行うことができます。
create_tweetメソッドのtext 引数に、投稿したい内容を文字列で指定するだけで、簡単にポストを投稿できるのが特徴です。コードを実行後、実際にXの画面を確認してみると、指定したテキストが投稿されていることが分かるはずです。

このようにAPI経由で投稿できるようになると、手動で投稿するのとは違い、

  • 決まった時間に自動で投稿する
  • 条件に応じて通知や情報を発信する
  • 他の処理と組み合わせたボットを作成する

といった応用が可能になります。個人開発や学習用途としても、非常に便利な機能です。
ただし、API経由での投稿は、アプリの権限設定や契約しているプランによって制限される場合があります。コードを実行してエラーが出た場合は、開発者ポータルでアプリに「Write権限」が付与されているかを必ず確認してください。 また、連続投稿や過度な自動投稿は、利用規約に抵触する可能性もあるため、実運用ではルールを守った使い方を心がけることが重要です。

API利用時の注意点

XのAPIを利用する際には、便利な反面、いくつか事前に理解しておくべき注意点があります。これらを把握せずに使ってしまうと、突然APIが使えなくなったり、意図しない制限に引っかかったりすることがあるため注意が必要です。

まず重要なのが、利用回数制限(レートリミット)の存在です。XのAPIでは、一定時間内に実行できるリクエスト回数が制限されています。この制限を超えてしまうと、しばらくの間APIへのアクセスが拒否され、データの取得や投稿ができなくなります。そのため、頻繁にAPIを呼び出す処理を作成する場合は、リクエスト間隔を調整したり、一定時間待機する仕組みを組み込んだりすることが重要です。

次に、契約しているプランによって使える機能が異なる点にも注意が必要です。無料プランでは利用できるAPIの範囲や回数が限られており、一部の機能は有料プランでのみ提供されています。自分がやりたいことが、現在のプランで実現可能かどうかを、事前に公式ドキュメントで確認しておくことが大切です。

また、Xの利用規約や開発者ポリシーを必ず守ることも非常に重要です。取得したデータの扱い方や公開方法、ボットの挙動などには細かいルールが定められています。規約に違反した場合、アプリの停止やアカウントの制限といったペナルティを受ける可能性もあります。

特に実運用を想定したアプリケーションでは、レートリミット超過時のエラーメッセージを適切に処理し、再試行や待機を行うエラーハンドリングが欠かせません。こうした対策を行うことで、安定してAPIを利用できるようになります。

まとめ

PythonとXのAPIを組み合わせることで、これまで手作業では難しかったSNSデータの活用が、プログラムによって効率的に行えるようになります。具体的には、投稿内容を自動で収集して分析したり、条件に応じて情報を発信する自動化ツールを作成したりと、活用の幅は非常に広いものがあります。

たとえば、

  • SNSデータの収集によるトレンド分析
  • 定期的な情報発信を行う自動投稿ツールの作成
  • ポスト内容を活用したデータ分析や研究用途

など、アイデア次第でさまざまな用途に応用できます。Pythonはデータ処理や可視化のライブラリも充実しているため、XのAPIと組み合わせることで、より高度な分析や開発にも挑戦しやすくなります。

最初は、開発者アカウントの登録やAPIキーの管理など、準備が少し大変に感じるかもしれません。しかし、一度環境を整えてAPIに接続できてしまえば、その後の作業は比較的スムーズに進められるはずです。

本記事をきっかけに、ぜひPython経由でXのAPIを実際に触ってみてください。

The post PythonでXのAPIを使う方法 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
PythonによるWebアプリケーション開発の最新動向と2025年のトレンド https://gw-python.com/archives/1135 Wed, 28 Jan 2026 02:00:00 +0000 https://gw-python.com/?p=1135 ※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。 日々の業務を自動化し、Web上に仕組みとして定着させる手段として 、PythonとDjangoを活用したWebアプリケーション開発への注目が高 […]

The post PythonによるWebアプリケーション開発の最新動向と2025年のトレンド first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。 日々の業務を自動化し、Web上に仕組みとして定着させる手段として 、PythonとDjangoを活用したWebアプリケーション開発への注目が高まっています。今回は、Python Web開発の最新トレンドと実践的な活用方法について解説します。

PythonによるWeb開発の動向

Python Software Foundation と JetBrains PyCharmが共同で実施している2025年に公開されたPython開発者アンケート(※1)によると、Python開発者の46%がWeb開発に、51%がデータの探索と処理にPythonを利用しており、pandasとNumPyといったライブラリを用いたデータ分析が代表的なユースケースです。更にAI分野にも強みを持つことも特徴ですので、Pythonを軸にWeb・データ・AIを横断して活用する流れは、今後ますます加速していくと考えられています。

そして、Pythonを使ったWeb開発の割合も着実に増えています。先程46%という数字を紹介しましたが、前年は42%でした。これはWeb開発の現場でPythonを選択するエンジニアが確実に増えてきていることが伺えます。 もう1つ注目したいのが、PythonのWebフレームワークです。現在、代表的な選択肢としてFastAPI、Django、Flaskとなどが挙げられます。この中で比較的新しく話題性があるがFastAPIで、Webフレームワークの利用率では第1位の38%という数字で勢いのあるフレームワークだと分かります。一方で、認証機能や管理画面、ORMなどを含んだフルスタックなWebアプリケーションを構築する場面では、機能の網羅性と柔軟性を備えたDjangoが依然として根強い支持を集めています。

別の側面から見みると、市場面でもDjangoエンジニアの価値は高い水準にあります。フリーランスボードが公表している「2025年10月のフリーランス案件の単価における市場動向」(※2)では、Djangoエンジニアの平均年収が約913万円(月収 約76.1万円)に達し、フレームワーク別年収ランキングで11位に位置するなど、Djangoエンジニアの市場価値の高さが伺えます。同調査では、RAGやAIエージェントの実装経験を持つ人材やAI関連職種の単価も高水準であるとされており、AI開発需要の拡大を背景に、Pythonエコシステム全体の成長がDjangoエンジニアの追い風となっています。

(※1)https://blog.jetbrains.com/ja/pycharm/2025/09/the-state-of-python/
(※2)https://freelance-board.com/journals/detail/965

Djangoが選ばれ続ける理由

WebフレームワークのDjangoは2005年の公開から2025年で20周年を迎えました。その持続的な人気には、いくつもの理由があります。

まず挙げられるのが、「Batteries included( バッテリー同梱)」の哲学です。

Djangoは管理画面、認証システム、ORM(Object-Relational Mapping)など、Webアプリケーション開発に必要な機能が標準搭載しています。追加のライブラリを探して入れる前から、実用的なアプリケーション基盤が手に入るため、開発者は核となるビジネスロジックの実装に集中でき、結果として開発効率を大きく高めることができます。

2つ目は、拡張性の高さです。

Djangoの各機能は独立性が高く、一部の改良や交換が全体に影響を与えにくい設計となっています。この特性により、企業の成長に合わせてシステムを段階的に拡張していくことが可能です。将来の拡張を前提としたシステム設計が当たり前になっている現在において、Djangoはその要件にしっかりと応えるフレームワークだと言えるでしょう。

そして3つ目はセキュリティ面での安心感です。

Djangoは、CSRFトークン、SQLインジェクション、XSS攻撃など、多くの脆弱性に対してデフォルトで対応しています。さらにミドルウェアを設定することで、キャッシュコントロールやCSP対策も共通的の仕組みとして一括で管理することができます。
Webアプリケーションでは、セキュリティの要素は欠かせません。どれだけ良いアプリケーションを構築してもセキュリティ側の対応が不十分では大きなリスクを抱えたまま運用をしていくことになります。
Djangoは、こうしたリスクを最小限に抑えるための仕組みを標準で備えている点でも、企業利用に適したフレームワークだと言えるでしょう。

2025年のWebアプリケーション開発トレンド

Python、Djangoに関しての開発トレンドも見ていきます。最新の技術動向を見ると、3つのキーワードが重要になっています。

1つ目は、非同期処理の普及です。

Django開発者の過半数が非同期テクノロジーを採用しており、これによりリアルタイム性が求められるチャットや通知、ストリーミングのようなアプリケーションでもPythonが選択されるようになってきました。Djangoは非同期処理に対応しているため、リアルタイム性が求められるアプリにも使いやすいフレームワークです。

2つ目は、AIとの統合が加速していることです。

Python の機械学習ライブラリとの親和性を活かし、WebアプリケーションにAI機能を組み込む事例が増えています。データ分析からレコメンデーション機能まで、幅広い AI 活用に対応できます。

3つ目は、マイクロサービス化の進展です。

大規模システムの開発において、Djangoの独立性の高さがマイクロサービスアーキテクチャとの相性の良さを発揮しています。その結果、機能ごとの分割や将来的な拡張にも柔軟に対応できます。

Python / Djangoを活用した Webアプリケーション開発やDX開発は経験と技術力のある会社と進めるのがおすすめ

自社で実現したいシステムや運用、その先にあるアウトプットを明確にした上で、どの技術を選定するかを慎重に見極める必要があります。その中でも汎用性や拡張性、将来性を考えるとPython / Django はとても有力な選択肢です。
ただし、自社にとって本当に適切なのかを判断するのが難しい場合は、Python/Djangoによる設計や開発を知見や実績がある会社に相談しながら最適なアーキテクチャや進め方を検討していくのが良いでしょう。

PythonやDjangoを使ったWebアプリケーション開発をご検討されている企業様は、株式会社グローバルウェイの約10年にわたり蓄積してきた経験と技術力がお役に立てます。

ご興味ある方は、 Webアプリケーション開発サービスの専用ページを御覧ください。
サービスの特徴や事例を掲載しています。

デジタルを活かしたWebアプリケーション開発ならグローバルウェイ

当社はPython/Djangoを活用し、お客様のデジタル化やDXを実現するためのWebアプリケーションに強みを持っています。実績、技術力、保守力ともに多くのお客様にご評価をい…

The post PythonによるWebアプリケーション開発の最新動向と2025年のトレンド first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
openpyxl:既存のExcelファイルにシートを追加して別ファイルからデータをコピペする https://gw-python.com/archives/1137 Wed, 28 Jan 2026 01:00:00 +0000 https://gw-python.com/?p=1137 ※社外のコラムニストによる記事です。Python関連の情報をお伝えします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます […]

The post openpyxl:既存のExcelファイルにシートを追加して別ファイルからデータをコピペする first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は、顧客一覧用のExcelファイルから、必要なデータをコピーして新しいExcelに貼り付ける、という2つのExcelブックを行き来してデータを操作する方法を学びました。 今回は、前回使用した顧客一覧から条件で抽出したデータを既にあるExcelの別のシートにコピペするという作業を学びます。

既存のExcelファイルにシートを作って、別のExcelから必要なデータを振分けコピペするまでを自動化

データを取り出す元となるExcelファイルは、前回と同じもの(all-customer.xlsx)を使用します。そして、取り出したデータを転記する先も、前回、新たに作成したExcelファイル(spilit_sheet.xlsx)を使用します。

前回と違う点は新しいExcelファイルを作成して転記するか、それとも既存のExcelファイルに別のシートを作って転記するかです。では早速コードを見ていきます。



P.80
購入プランごとに顧客を異なるシートに分けてみましょう。

これを実現する方法ですが、顧客一覧を上から読んでいって、プランごとのシートを開いてそこに情報を追記していく処理を行います。もし該当するシートがなければ新規作成して追記します。以下が、そのプログラムです。

このプログラムはall-customer.xlsx 内にある顧客名簿から、split_sheet.xlsxにプランの名前を付けたシートを追加し、そこに転記していくというものです。シートが重複してしまうと困るので、該当の名前の付いたシートがあるかを確認し、ある場合には該当のシートの最後尾に追記、なければ新たにシートを追加して書き込んでいくという形が取られています。

出来上がるのはこんな感じのファイルです。

openpyxlの.append()を使うという意味

基本的にほとんどのコードはこれまで出てきたようなものばかりなので詳細な説明は省略しますが、一点気になったところが。



P.81

6ではシートに情報を追記します。ワークシートのメソッドappendは今回、初めて使います。これは、ワークシートの末尾に値を追記します。



「ワークシートのメソッドappendは初めて」、という部分です。

append自体はリストに要素を追加するために使用されるメソッドで、前回も使用しています。なのに「初」とは何か、しかも「ワークシートの」とわざわざついています。

結論だけまずは書いておくと、appendが対象とするオブジェクトがこれまでとは違う、ということになります。まずは該当部分を比較してみます。



<前回>

→データを一旦Pythonのlist(ここではcustomers)にまとめた後にExcelに書き込んでいました。

<今回>


→条件で振り分けたデータを都度Excelのワークシートに書き込んでいました。

というわけで、前者はPythonのメソッドであるappendを使用していますが、後者はopenpyxlのメソッドであるappendを使い、都度Excelに直接書き込んでいました。つまり…別の機能に対してデータが追加されており、動作の対象が異なるということになります。

今回のコードもPythonのリストを使って処理することもできます。

ただ、前回の場合は一つのシートに対して条件に合うデータを追記していくものであったため、一度Pythonのリストにまとめてしまってから処理をした方が、Excelにアクセスする回数が少なくて済むため、効率的です。

一方、今回はデータをいくつかのシートに条件に応じて振り分ける形になるため、Excelに都度直接書き込んだ方が、複数のリストを作る必要がない上、リストを経由する必要もないので効率的です。

Pythonのリストを経由せず、Excelに直接書き込む場合の注意点としては、書き込み以前・書き込み中のソートや書式などの編集ができないこと、Excelシートに設定されたヘッダーの数と書き込みたい要素の数が合わない場合、対応する列に空白が入ってしまったり、余分な列が作られて値が入れられてしまったりということがあります。

例えば、ヘッダーが3つなのに書き込む要素が2つしかない場合、3列目のセルは空白のままになります。逆に、ヘッダーよりも多い要素をappendした場合は、余分なデータがヘッダー外の列(4列目以降など)に追加されてしまいます。作る前の確認が重要ですね。

今回もお付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post openpyxl:既存のExcelファイルにシートを追加して別ファイルからデータをコピペする first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
皆さんは「内向きDX」?「外向きDX」? 2025年DX動向から見る、企業DXに必要なWebアプリケーション開発とは https://gw-python.com/archives/1130 Wed, 21 Jan 2026 12:09:16 +0000 https://gw-python.com/?p=1130 ※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。 「DXに取り組んでいるのに、思うような成果が出ない」そんな悩みを抱えている企業は少なくありません。IPA(独立行政法人情報処理推進機構)が20 […]

The post 皆さんは「内向きDX」?「外向きDX」? 2025年DX動向から見る、企業DXに必要なWebアプリケーション開発とは first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。

「DXに取り組んでいるのに、思うような成果が出ない」そんな悩みを抱えている企業は少なくありません。IPA(独立行政法人情報処理推進機構)が2025年6月に発表した「DX動向2025」(※1)というものがあります。DXに関する国内外の動向分析や比較分析が行われており、DXの現状を把握できます。

その中でも、「DXの成果」という項目ではDXの取り組みで掲げた目的がどの程度達成されているのかが示されています。これによると日本企業のDX成果率はわずか57.8%。一方、米国は87.0%、ドイツは81.7%という大きな差が浮き彫りになっています。

この格差の背景の1つには、日本企業の多くが「内向きDX」にとどまっているという現実があります。あなたの会社は社内完結の「内向きDX」でしょうか。それとも、顧客や市場を変えていく「外向きDX」のどちらでしょうか?

(※1) https://www.ipa.go.jp/digital/chousa/dx-trend/dx-trend-2025.html

「内向きDX」と「外向きDX」の決定的な違い

一口に「DX」といっても定義や捉え方は様々です。一般的には経済産業省の定義が引用されますが、要するに「デジタル技術を推進・活用することでビジネス変革を行い競争優位性を確立していくこと」と言えます。

そんなDXですが、大きく「内向きDX」と「外向きDX」と二つに分けて考えることができます。

「内向きDX」とは、主に社内業務の効率化やコスト削減を目的とした取り組みです。例えば、紙の申請書をデジタル化したり、Excelベースのデータをクラウドサービスに移行したりするケースが挙げられます。いずれも重要な取り組みですが、IPAの調査では「個別の業務プロセスの改善にとどまる、部分最適」と指摘されています。

一方、「外向きDX」は顧客価値の創出や新たな収益源の開発に焦点を当てた戦略的な取り組みです。こちらの方がDXの定義に近い姿と言えます。比較調査対象になっていた米国やドイツのDXはこの「外向きDX」に分類され、売上高や利益を上げる、市場シェア、顧客満足度の向上といったバリューアップを目的としています。

つまり、これからの日本のDXには「外向きDX」への転換が不可欠だと言えます。

「外向きDX」への転換を成功させるポイント

しかし、日本企業はどうやったら「外向きDX」に転換できるのでしょうか。ここでは、そのヒントとなる3つのポイントをお伝えします。

1つ目は、顧客起点への発想転換です。

「社内の都合」から「顧客の価値」を起点に考え、顧客が真に求めるデジタル体験をどう提供するかへ、視点を切り替えていくことが重要です。

2つ目は、いきなりではなく段階的に進めることです。

DXは、「一気に全部変える」プロジェクトにしてしまうと、多くの場合前に進みません。まずは小さな領域から始め、順番にスコープを広げていくことが大事です。

3つ目は、長期視点での技術選定です。

DXは短期で完結する取り組みではなく、長期的に変革を続けていくプロセスです。そのため、将来を見据えた技術選択や開発体制を整えておくことが重要です。「外向きDX」を支える技術としては、PythonやDjangoを用いたWebアプリケーション開発が有力な選択肢としておすすめです。汎用性が高くメンテナンス性に優れ、新しい技術も取り入れやすい言語・フレームワークであり、世界的に人気が高い点も大きなメリットと言えます。

Python / Djangoを活用した Webアプリケーション開発やDX開発は株式会社グローバルウェイ

自社で実現したいシステムや業務運用、アウトプットの姿を踏まえたうえで、どの技術を採用するかを見極めることが重要です。なかでも汎用性や拡張性、将来性を考えるとPython / Django はとても有力な選択肢の一つです。ただし、自社にとって本当に適切かどうかを社内だけで判断するのが難しい場合は、設計や開発を知見や実績がある会社に相談してみるのがいいでしょう。

株式会社グローバルウェイは、Python/Django を中心とした Webアプリケーション開発で約10年にわたり培ってきた経験と技術力をもとに、お客様の課題解決と新たな価値創出をご支援してきました。 詳細は、下記の「Webアプリケーション開発サービス」専用ページをご覧ください。サービスの特徴や具体的な事例をご紹介しています。
https://gw-python.com/service

The post 皆さんは「内向きDX」?「外向きDX」? 2025年DX動向から見る、企業DXに必要なWebアプリケーション開発とは first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
openpyxl:Excelファイルからデータを取り出して、別のExcelファイルに書き出してみよう https://gw-python.com/archives/1132 Tue, 20 Jan 2026 13:57:00 +0000 https://gw-python.com/?p=1132 ※社外のコラムニストによる記事です。Python関連の情報をお伝えします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます […]

The post openpyxl:Excelファイルからデータを取り出して、別のExcelファイルに書き出してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

今回は2つのExcelブックを行き来して、データをコピー&ペースト(コピペ)するというプログラムについて学びます。

条件に合うデータを取り出して、新しいExcelにデータを書き出そう

事務処理をしていると、2つのExcelを行き来して、データを持ってきて、何かしらの単純な処理をすることがあります。例えばデータをコピペしたり、参照したり…。簡単だし必要なのだけど、地味に面倒な作業です。自動化出来たら助かりますね。

今回はそうした2つのブックを行き来して、何度もコペペを繰り返すという処理をするプログラムです。

ここでは顧客情報の一覧データが保存されているExcelファイルから、指定条件「横浜」と「名古屋」にあう見込み客だけを別のファイルにコピペするという処理を例に学習します。以下はサンプルコードです。

これを実行すると、以下のExcelファイル(右/all-customer.xlsx)が生成されます。(左側は取り出し元の顧客名簿all-customer.xlsxです。)

ではここで、プログラムについて確認していきます。(1と2は割愛) 3は取り出したデータを保存する先のファイルのヘッダの設定です。

4はiter_rowsメソッドを利用して、Excelシートの行を順番に繰り返し処理してデータを取り出します。顧客名簿のExcelでは3行目以降に取得するべきデータが保存されているので、min_row=3となっています。最大行(max_row)は指定されていないので、データが入っている行まで取得されます。 ただ途中で空行があった場合、プログラムは停止してしまいます(プログラムでは先頭列が空欄だと処理が終了)。空行があっても進めたいときにはcontinueを使うこともできますが、continueにすると最後の空行の判定ができないので、Excelの終わり(104万行目)まで処理が続いてしまうことになります。なので、空行がないデータを用意するか、どうしても空行がある場合には行全体が空かどうかを判定するような条件を追加して終了判定をしてあげる必要があります。

5は横浜市か名古屋市という条件に当てはまる行かどうかを判定するのに利用されています。 Excelのインデックスは1からですが、Pythonのインデックスは0からスタートしますので、名前→0、住所→1、購入プラン→2というインデックス番号が振られます。そのため、住所を取り出すには values[1] を使い、それを area という変数に入れています。その後、変数名customersに対象となるデータを保存する役割を持つのが、[customers.append(values)]の部分で、後々新しいExcelに書き出すための準備が行われています。

6以降は新しいブックに対する処理で、7の部分で5で取り出した変数customersの値を書き込んでいく作業を行っています。

それではきりが良いのでこちらで終了です。次回はこのデータから、さらにプランごとに異なるシートに分けて保存する方法について学びます。

今回もお付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post openpyxl:Excelファイルからデータを取り出して、別のExcelファイルに書き出してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
Pythonで住所APIを使用するケースのご紹介 https://gw-python.com/archives/1107 Wed, 22 Oct 2025 11:34:07 +0000 https://gw-python.com/?p=1107 皆さん、お疲れ様です。プラットフォーム事業部のNです。 業務や個人開発で「住所」を扱うケースは意外と多いかと思います。たとえば郵便番号から住所を検索したり、入力された住所を正規化して保存したり。 今回は Python を […]

The post Pythonで住所APIを使用するケースのご紹介 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

皆さん、お疲れ様です。
プラットフォーム事業部のNです。

業務や個人開発で「住所」を扱うケースは意外と多いかと思います。
たとえば郵便番号から住所を検索したり、入力された住所を正規化して保存したり。 今回は Python を使って、住所APIを呼び出す簡単なサンプルを紹介します。
また、日本の住所の正規化といった点も少しだけお話しできたらと思いますので、
よろしくお願いします。

ご紹介するAPI

  1. 郵便番号から住所を取得(ZipCloud API)
  2. 住所から緯度経度を取得(Nominatim API)
  3. (Tips)住所正規化について

ZipCloud

ZipCloudは郵便番号から住所を取得するAPIです。
まずは、サンプルでコードを書いてみます。

## Pythonサンプルコード

```python
import requests

def get_address(zip_code: str):
    url = "https://zipcloud.ibsnet.co.jp/api/search"
    params = {"zipcode": zip_code}
    response = requests.get(url, params=params)

    if response.status_code != 200:
        raise Exception("APIリクエストに失敗しました")

    data = response.json()
    if data["results"] is None:
        return "該当する住所が見つかりませんでした"

    result = data["results"][0]
    return f"{result['address1']}{result['address2']}{result['address3']}"

if __name__ == "__main__":
    zipcode = "1000001"  # 東京都千代田区千代田
    address = get_address(zipcode)
    print(f"郵便番号 {zipcode} の住所は {address} です")

実行結果

郵便番号 1000001 の住所は 東京都千代田区千代田 です

上記のように、簡単に郵便番号から住所が特定できます。
特徴としては以下が挙げられます。
·  Python の requests モジュールを使えば、住所APIを簡単に呼び出せる。
·  郵便番号から住所を取得したいときに便利。
·  業務システムの入力チェックや自動補完にも応用できる。


Nominatim API

次にご紹介するのは住所から緯度経度を取得するNominatim APIです。
こちらも、まずはコードを書いてみます。

import requests

def get_latlon(address: str):
    url = "https://nominatim.openstreetmap.org/search"
    params = {
        "q": address,
        "format": "json",
        "limit": 1
    }
    headers = {"User-Agent": "python-sample-app"}  # 必須: API利用規約で指定あり

    response = requests.get(url, params=params, headers=headers)
    if response.status_code != 200:
        raise Exception("APIリクエストに失敗しました")

    data = response.json()
    if not data:
        return "緯度経度が見つかりませんでした"

    lat = data[0]["lat"]
    lon = data[0]["lon"]
    return (lat, lon)

if __name__ == "__main__":
    address = "東京都千代田区千代田1-1"
    latlon = get_latlon(address)
    print(f"{address} の緯度経度は {latlon} です")

実行結果:

東京都千代田区千代田1-1 の緯度経度は ('35.685175', '139.7528') です

特定の住所から緯度経度を割り出すことが出来ました。
「ZipCloud」が郵便番号から住所を特定するのに対し、「Nominatim API」は住所から緯度経度の特定になります。

「郵便番号から住所を特定することは使えるけども、緯度経度が分かっても使用用途が無いのではないか」と思われる方もいるかもしれません。
ですが、この情報は色々な場面で使用できます。

①地図上に表示できる
 Google Maps や Leaflet などの地図ライブラリにピンを立てられる。
②距離や所要時間の計算
 2地点間の距離計算や、移動経路のルート検索に利用できる。
③位置情報による検索・絞り込み
 例: 「現在地から半径 1km のレストランを探す」など、周辺検索が可能。
④データの可視化
 顧客分布や売上データを地図にプロットして、地域ごとの傾向を見える化できる。
⑤AR/IoT/位置連動サービス
 スマホアプリやIoT機器で「その場所にいると通知する」「近づくとイベントが発生する」といった機能に使える。

上記は例ですが、簡単にまとめると次のように言えます。
緯度・経度は、住所をデジタルで扱いやすい形式に変換したものです。地図表示、距離計算、周辺検索、データ分析などに幅広く活用できます!


(Tips)住所正規化について

日本の住所は「東京都千代田区丸の内1丁目1番1号」「東京都千代田区丸の内1-1-1」など、全角・半角や表記ゆれが多く、そのままでは検索やデータ分析に使いにくいことがあります。
そんなときに便利なのが、住所正規化ライブラリです。
今回は「normalize-japanese-addresses」というライブラリをご紹介します。

normalize-japanese-addressesとは?
Python でも簡単に使える住所正規化ライブラリで、都道府県・市区町村・町域などに分割してくれます。
さっそくコードを書いてみます。

from normalize_japanese_addresses import normalize

address = "東京都千代田区丸の内1-1-1"
result = normalize(address)

print(result)

実行結果:

{
    'pref': '東京都',        # 都道府県
    'city': '千代田区',      # 市区町村
    'town': '丸の内一丁目',  # 町域(丁目まで正規化)
    'addr': '1-1',           # 番地の数字部分(ハイフンで統一)
    'lat': 35.681236,        # 緯度(取得可能な場合)
    'lng': 139.767125        # 経度(取得可能な場合)
}

とてもお手軽に住所の正規化をしてくれます。
上記コードで「東京都千代田区丸の内1丁目1番1号」が入力データだったとしても同様の結果が得られます。

from normalize_japanese_addresses import normalize

address = "東京都千代田区丸の内1丁目1番1号"
result = normalize(address)

print(result)

実行結果:

{
    'pref': '東京都',        # 都道府県
    'city': '千代田区',      # 市区町村
    'town': '丸の内一丁目',  # 町域(丁目まで正規化)
    'addr': '1-1',           # 番地の数字部分(ハイフンで統一)
    'lat': 35.681236,        # 緯度(取得可能な場合)
    'lng': 139.767125        # 経度(取得可能な場合)
}

同じ住所であったとしても、日本の住所は「丁目、番地、号」といった情報で色々な書き方があるためとても管理が難しいです。
このような場面で、「normalize-japanese-addresses」といったライブラリを用いて正規化が出来るようになります。

まとめ

いかがだったでしょうか。
今回は Python を使って住所情報を扱う方法をご紹介しました。
1.郵便番号から住所を取得 → ZipCloud API で簡単に検索可能
2.住所から緯度経度を取得 → Nominatim API で地図表示や周辺検索に応用可能
3.住所の正規化 → normalize-japanese-addresses を使えば表記ゆれを統一してデータ分析や検索に便利

住所データはただの文字列に見えますが、APIや正規化を活用することで、
地図表示、距離計算、データ分析などさまざまな便利なサービスに活用できます。
Python と無料APIを使えば、ちょっとした住所関連の機能もすぐに試せますので、
ぜひご自身のサービスや開発に取り入れてみてください。

最後まで読んでいただきありがとうございました。

【公式サイト】
https://zipcloud.ibsnet.co.jp/doc/api
https://nominatim.org/release-docs/latest/api/Overview
https://github.com/geolonia/normalize-japanese-addresses

The post Pythonで住所APIを使用するケースのご紹介 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
Pythonのスレッド https://gw-python.com/archives/1091 Mon, 20 Oct 2025 12:10:15 +0000 https://gw-python.com/?p=1091 こんにちは。プラットフォーム事業部のPです。本稿ではPythonのスレッド(thread)について紹介させていただきます。 この記事は以下の方を対象としています。 ★4 Python開発経験が3年以上。★3 Python […]

The post Pythonのスレッド first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

こんにちは。プラットフォーム事業部のPです。
本稿ではPythonのスレッド(thread)について紹介させていただきます。

この記事は以下の方を対象としています。

★4 Python開発経験が3年以上。
★3 Python開発経験が1年以上
★2 Python 初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。

マルチスレッドとは?

まずスレッド(thread)とは、パソコンのCPUが同時に処理できる命令の実行単位を表します。パソコンのスペックによく書かれているスレッド数はCPUが同時に処理できる命令の数になります。 つまり、マルチスレッドは複数のスレッドが実行されることを意味します。

並行と並列

パソコンの同時作業(multi task)には並行と並列の2種類があります。
並行(Concurrency)は複数の作業を短い間隔で切り替えながら処理することを意味します。
人間が意識できない短い時間で切り替えを反復するため、複数の作業を同時に行えているかのように見えます。 対して並列(Parallelism)は本当に複数の作業を同時に行うことを意味します。

(P製作:image)

Pythonのスレッドと標準モジュール

PythonにはGIL(Global Interpreter Lock)と言う仕組みが存在しており、このGILによりPythonは一度に一つのスレッドしか実行できません。 GILはスレッドを制限することでメモリー管理を安全かつ簡潔にできることが利点ですが、真の意味での並列処理が出来なくなると言う致命的なデメリットがあります。
(GILはI/O処理など一部の作業においては自動的に開放されます)
標準モジュールであるthreadingはPythonのマルチスレッド実装のためのモジュールとして有名ですが、このthreadingは並行(Concurrency)に当たります。

  • the threading module operates within a single process, meaning that all threads share the same memory space. However, the GIL limits the performance gains of threading when it comes to CPU-bound tasks, as only one thread can execute Python bytecode at a time. Despite this, threads remain a useful tool for achieving concurrency in many scenarios.

    (P翻訳) threadingモジュールはシングルプロセスとして動作し、全てのスレッドは同じメモリーを共有します。ただし、CPUバウンドなタスクの場合、GILの制限によりPythonバイトコードを実行できるスレッドは一つだけになります。そんな特徴がありますが、それでもスレッドは並行処理を実現したい時にとても有用です。
    - 引用: From Python公式Doc(参考文献No.2)

threadingモジュールの使い方

Pythonコードは一般的には書かれた順、上から下まで順番に実行されます。

例えば

print(1)
print(2)
print(3)

のようなコードは

1
2
3

のような結果になります。 しかし、threadingモジュールを利用すれば並行処理でありますが、同時に動作するかのような処理を実現できます。

ケース1 : threadingモジュールあり

import threading
def task1():
    print("task1 開始!")
    for i in range(90000000):
        i+=1
        if i % 30000000 == 0:
            print(f" task1 実行中 {i//30000000}/4")
    print("task1 終わり!")

def task2():
    print("task2 開始!")
    for i in range(90000000):
        i+=1
        if i % 30000000 == 0:
            print(f" task2 実行中 {i//30000000}/4")
    print("task2 終わり!")

def threadtest():
    thread1 = threading.Thread(target=task1)
    thread2 = threading.Thread(target=task2)
    
    thread1.start()
    thread2.start()

threadtest()

上記の実行結果は下記となります。

  • task1 開始!
  • task2 開始!
    • task2 実行中 1/4
    • task1 実行中 1/4
    • task2 実行中 2/4
    • task1 実行中 2/4
    • task1 実行中 3/4
  • task1 終わり!
    • task2 実行中 3/4
  • task2 終わり!

次に、threadingモジュールを使わずに関数を実行してみましょう。

ケース2 : threadingモジュールなし

def task1():
    print("task1 開始!")
    for i in range(90000000):
        i+=1
        if i % 30000000 == 0:
            print(f" task1 実行中 {i//30000000}/4")
    print("task1 終わり!")

def task2():
    print("task2 開始!")
    for i in range(90000000):
        i+=1
        if i % 30000000 == 0:
            print(f" task2 実行中 {i//30000000}/4")
    print("task2 終わり!")

def normaltest():
    task1()
    task2()

実行結果です。

  • task1 開始!
    •  task1 実行中 1/4
    •  task1 実行中 2/4
    •  task1 実行中 3/4
  • task1 終わり!
  • task2 開始!
    •  task2 実行中 1/4
    •  task2 実行中 2/4
    •  task2 実行中 3/4
  • task2 終わり!

二つのタスクが並行して行われていたケース1と違い、ケース2ではtask1が終了してからtask2が始まることが分かります。

まとめ

今回はthreadingモジュールを用いてPythonのマルチスレッドを実現する方法についてご紹介させていただきました。
並列か並行かの観点で見るとPythonは不便な言語のように見えますが、昨今はGILなしでPythonを実行できるようにするPython free threading研究が有志のエンジニアたちにより行われ、PEP703では試験的に導入されるまでに至りました。
AIの発展やデータ統計などで有用なPythonがGILの開放により活躍できる場面が益々増えることが期待できます。

最後までお読みいただき、ありがとうございました。

参考文献
1.oxylabs | Concurrency vs Parallelism: The Main Differences
2.Python公式ドキュメント - threading
3.PEP 703 – Making the Global Interpreter Lock Optional in CPython

The post Pythonのスレッド first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
openpyxl:範囲指定をせずにExcelからデータを取得する方法 https://gw-python.com/archives/1046 Fri, 29 Aug 2025 03:00:00 +0000 https://gw-python.com/?p=1046 ※社外のコラムニストによる記事です。Python関連の情報をお伝えします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます […]

The post openpyxl:範囲指定をせずにExcelからデータを取得する方法 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回、Chapter2-6「Excelシートのデータ抽出テクニック」に入り、売上データが保存されているファイルからデータを取得する方法を学びました。
今回は、範囲を指定せずに、Excelファイルに保存されているデータを取得する方法について学びます。

Excelファイルから売上データをすべて取り出してみる

前回、売上データを取得する際、範囲指定をしていました。

<サンプルコードの一部分>

とはいえ、売上データのように、毎回範囲が必ず同じというものばかりではないと思いますので、範囲を指定する際は内容を確認して調べる必要があります。実際にファイルを開いて確認すれば済む話ですが、プログラム内に含めることができるそうです。

まずはデータを取得する方法と、その注意点についてです。


P.73

ワークシートには最下行を示すmax_row、最右列を示すmax_columnというプロパティがあるので、これを利用することで最下行を調べることができます。

ただし、このmax_rowとmax_columnには弱点があります。セルに罫線が入っている場合、罫線が有効な範囲を指し示してしまいます。

(中略)

ただし、罫線を引く際に列のヘッダを選択して罫線を引いた場合でも、max_rowは罫線に関係なく正確な最下行を示します。見た目には分からないのですが、どのように罫線を引いたかによって、max_rowの値が変化してしまうのが難しいところです。 そのため、解決策としては、とりあえずmax_rowが指し示す範囲のデータを取り出して見て、その後でデータが空かどうかを調べるといった処理を行うと良いでしょう。


なんと、openpyxlがExcelのセルが使用されていると判断する基準は、データや数式が入っているときだけでなく、罫線も対象になるということです…。ちなみに、背景色やフォントを設定した場合も「使用済み」と判定するようです。

既存ファイルで複数人が触れるものを対象としたときを考えると、あずかり知らぬ書式設定がされている可能性が出てくるので、対応策を知っておく必要がありますね…。

対応策としては、

  1. 大きな範囲を取得して、セルの値がNoneか調べる
  2. iter_rowsメソッドで引数max_rowを省略する(=繰り返し行を読んでくれる)

という方法があるようです。それぞれの方法を見ていきます。

1)大きな範囲を取得して、セルの値がNoneか調べる

サンプルコードがこちら。

変わったのは範囲の指定部分と、if~が追加されているところですね。

これを実際に実行するとこうなります。(Excelファイルの罫線は15行目まで伸ばしました。)

問題なく表示されました。

2)iter_rowsメソッドで引数max_rowを省略する

サンプルコードがこちら。

iter_rowsメソッドを使うと全てのセルを取り出せるものになりますが、このサンプルではA3以降のデータをとりだすことになるので、開始行としてmin_rowの値を3で設定します。

こちらも実行してみると先ほどと同じ結果が表示されました。

逆に引数(min_row=3)を省略した場合はすべての行をとりだしてくれるので、結果はこうなります。

タイトルから取得してくれていることが分かりますね。

また、列も指定したい場合は、min_rowだけでなく、min_colを追加してあげます。
例)B3→min_row=3, min_col=2

それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post openpyxl:範囲指定をせずにExcelからデータを取得する方法 first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
「openpyxl」で売上データのExcelファイルからデータを取得してみよう https://gw-python.com/archives/1026 Fri, 25 Jul 2025 03:08:22 +0000 https://gw-python.com/?p=1026 ※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきま […]

The post 「openpyxl」で売上データのExcelファイルからデータを取得してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は、セル番号と行列番号の変換について学びました。
今回から、Chapter2-6「Excelシートのデータ抽出テクニック」に入ります。

Excelファイルから売上データをすべて取り出してみる

前回まではExcelからのデータの取得方法を学んでいましたが、ここからはもう少し実践的な使い方を学ぶことになります。次の売上がまとめられたExcelデータを使って必要なデータを取り出してみます。

まずはワークシートから売上データをすべて取得する方法です。
データはA3からF9に保存されていますので、この範囲を指定してあげる必要があります。 まずはサンプルコードで確認してみます。


P.70


これを実行するとこんな形で結果が表示されます。

  • リスト内包表記を使わない方法

ところで、サンプルコードの2の辺り。

この部分は前々回のコラムで書いた「リスト内包表記」の手法を利用して、1行の中に含まれているデータを取り出しています。

リスト内包表記を使わない場合は、ここの部分を赤字のように変えてあげるそうです。

空のリストをvalues = []で作った後、for文を回して行内のセルの値を取得し、リストに順番に追加していくという方法です。
リスト内包表記を使うと1行で表現できるのでシンプルになっていいのですが、書き方を覚え、慣れるまでが大変ですね…。
書き方についてまとめられているページを見つけました。興味がある方はこちらもどうぞ。
【図解】リスト内包表記について

関数で書かれている部分を計算結果で取得できるようにしたい

Excelファイルを実際に見ると、F列には計算式(例:D3*E3)が入っています。計算結果で表示したいところですが、何も指定してあげなければ計算式がやっぱりそのまま表示されます。
そこで、[book = excel.load_workbook("uriage.xlsx")]のファイル名の部分を、[("uriage.xlsx",data_only = True)]と引数を追記して書き換えてあげることで、計算結果が表示されるようになるそうです。

[data_only=True]はExcelファイル内に保存された計算結果を取得するだけで、数式を再計算するものではないそうです。そのため、Excelで編集・保存した結果が反映されていなければ、最新の値は取得できないとのこと。また、Excelで一度も開いて保存されていないファイルでは、数式の結果が取得できず、Noneが返ってくることもあるそうです。もらったファイルの場合、一度はファイルを開いて保存しないと正しく読めないことがある、ということですね。

ところで、どうせなら日付もわかりやすいように変換して欲しい…と思うのですが、これについては、openpyxl自体はあくまでExcelの動作を模倣してくれるもので、すべての機能を使えるわけではないことが影響しているようです。例えば以前学習した和暦変換に対して[data_only = True]を入れてあげたところで、openpyxl自体が和暦変換機能をサポートしていないため、変換した状態で表示してくれるのではないのだとか。
ただ、Excel→openpyxlはNGだけれども、openpyxl→Excelで数式を埋め込むのならExcel側の制限はなく、表示してくれるようなので上手く使ってくださいねとのことでした。

それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post 「openpyxl」で売上データのExcelファイルからデータを取得してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>
「openpyxl」でセル名と行列番号を変換してみよう https://gw-python.com/archives/1016 Fri, 25 Jul 2025 03:08:18 +0000 https://gw-python.com/?p=1016 ※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。 「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきま […]

The post 「openpyxl」でセル名と行列番号を変換してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は、Chapter2-5 に入り、Excelシートを連続で読み込む方法3点学びました。
今回は、「openpyxl」でセル名と行列番号の変換についてご紹介します。

セル名と、行列番号、どちらを指定するのがいいか

前回学んだとき、取り出したい情報があるセルを指定する方法としては、セル名を直接指定するか、行・列の番号を指定するかのいずれかの方法が用いられていました。

どちらの方法でセルを指定するかは、処理したい内容によって変えることになりますが、まずはそれぞれのメリットとデメリットについて考えてみます。

①セル名を指定する
メリット :Excelで見えているまま指定できるので、視覚的にわかりやすく、コードも直感的に読みやすい
デメリット:セル名は文字列のため、ループや動的な処理に不向き(列を計算できるよう、数値に変換しなくてはならない)

②行・列番号を指定する
メリット :数値で扱えるため、繰り返し処理がしやすく、リストや配列などの他のデータ構造への対応がしやすい
デメリット:コード上ではどのセルを指定されているか分かりにくい

このように整理できるかと思います。

ならば、セル名から行列番号へ変換する、もしくは、行列番号からセル名に変換するということがプログラム内で行われればとっても便利です。

というわけで、まずはその方法について学びます。

1.セル名から行列番号を取得する方法


P.67
まず、セル名から行番号と列番号を得るには、次のようにします。セル名からセルのオブジェクトを取得し、rowプロパティに行番号が、columnプロパティに列番号が入っています。

セル名から行番号と列番号を取得する方法


行列番号が表示される時は1から始まることになりますので、例えばB3は行:3、列:2という結果になります。

2.行列番号からセル名を取得する方法

逆バージョンです。


P.67
行番号と列番号からセル名を得る方法を見てみましょう。cellメソッドでセルのオブジェクトを取得したら、そのcoordinateプロパティからセル名を得ることができます。
行番号と列番号からセル名を取得する方法


coordinateは、行・列番号が分かっている場合にセル名を返してくれるものです。
なので、[row=1, column=3]となっていれば、C1だと答えを返してくれます。

ところで、列番号だけ知りたいんだよねというケースもあるかもしれません。
そうした時には、openpyxlのユーティリティ関数である[get_column_letter()]を使うことで可能になるそうです。
この関数は、列番号(1, 2, 3, ...)を、Excel の列記号('A', 'B', 'C', ...)に変換してくれるため、ループ処理や列操作の時に役立てることができるとのこと。 具体的には次のように書けばいいそうです。

逆に列番号がBというのがわかっていた場合、数値に変換する方法もあります。
同じユーティリティ関数の中にある[column_index_from_string()]を使うことで可能になります。

<変換まとめ>

関数名役割
get_column_letter(番号)列番号 を 列記号 に変換(数値→文字列)
column_index_from_string("文字列")列記号 を 列番号 に変換(文字列→数値)

実験

というわけで、サンプルコードにget_column_letter関数に関係する部分を追記して実際に動かしてみます。

問題なく結果が表示されました。

それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。
次回からChapter2-6「Excelシートのデータ抽出テクニック」に入ります。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 お客様の課題 以下のような課題をお持ちのお客様にお勧めのソリューションです。 上記の課題…

The post 「openpyxl」でセル名と行列番号を変換してみよう first appeared on 株式会社グローバルウェイ ビジネスアプリケーション事業本部.

]]>