Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。3Webアプリケーションとして公開しようFlaskでWebアプリケーションをつくろうまとめ参考資料Webアプリケーションとして公開しようFlaskでWebアプリケーションをつくろうそれでは、Instagramのユーザー名を入力するとそのユーザーの性別を推定するWebアプリケーションを作っていきましょう。アプリケーションのフローを確認します。推定に用いる特徴量ベクトル(タグ)のみ抽出、特徴量ベクトルの整理(識別期の作成時と同様に不要なタグの削除、タグの統合)整理された特徴量ベクトルを識別器に入力し、性別を推定このフローに沿ったWebアプリケーションを実装するためにFlaskというPython用Webアプリケーションフレームワークを用います。こちらを参考にFlaskをインストールしましょう。FlaskでWebサーバを構築する場合は、pythonファイルとテンプレートとしてのHTMLファイルが必要になります。今回のWebアプリケーションの構成は下図のようになっています。詳細は、こちらを参照してください。Webアプリケーションのソース構成まずFlaskが実行されるmain.pyとtemplates/index.htmlおよびtemplates/layout.htmlとの関係を見てみましょう。main.pyでは、Flaskを呼び出してGETリクエストとPOSTリクエストの場合分けなど、サーバの挙動を決めることができます。Flaskのrender_template関数で、変数を引数としてtemplates/index.htmlに渡して表示します。templates/内のindex.htmlとlayout.htmlを見てみましょう。index.htmlで、頭でlayout.htmlを呼び出しています。body部を宣言します。}}とすることで、main.pyの変数を表示することができます。Flask(Pythonファイル)とHTMLファイル間のやりとりそして、main.pyで整理された変数をlayout.htmlおよびindex.htmlできれいに表示していきましょう。Webアプリケーションとして公開する以上は、やはり見栄えも気になります。そこで、BootstrapというCSSフレームワークを使います。layout.htmlのhead部でCSSを読み込みます。BootstrapのCSSチュートリアルなどを参考にして、index.htmlでスタイルシートを呼び出します。index.htmlの11行目では、classを指定することでボタンのデザインをBootstrapから呼び出します。これで、HTMLテンプレートは完成です。次は、main.pyの処理を見てみましょう。main.pyはサーバの入出力などを制御しています。順に見ていきましょう。13~41行目:ユーザー名が入力され、受信後の処理(POST応答)を実行します。利用者からInstagramのユーザー名の入力を受け取り、そのユーザー名からそのユーザー情報を呼び出します。ユーザの特徴量部ベクトルを生成し、識別器で性別推定を行います。この部分が主になるのでコードを追って細かく見てみましょう。コード内に(1)~(6)まで番号を振った箇所について、説明します。#.........(6)(1)14~16行目:ユーザー名が空だった場合はエラーとなってしまいますの、エラー処理を実行します。入力されたユーザー名が空でない場合に、17~41行目のelse部の処理を実行します。(2)20~24行目:APIで取得したユーザー名やアイコンなどユーザーの基本的な情報を整理して、各変数に代入しています。(3)25~35行目:識別器をつくった際の処理と同様にタグを結合させるなどして、ユーザーの特徴量ベクトルを計算しています。(4)37、38行目:識別器ファイルclf.pklを読み込みます。(5)39行目:特徴量ベクトルを識別器に渡し、推定した値(0・1)を返します。この値は、index.html上で1ならばmale、0ならばfemaleと表示されるようにしています。(6)41行目:ユーザー情報や、推定結果などの各変数をFlaskのHTMLテンプレートに渡します。49~51行目でFlaskによるWebサーバーを起動します。このPythonファイルのメイン部です。APIのアクセストークンとAlchemyAPIのAPIキーをそれぞれOSの環境変数から読み込むsettings.pyが必要になります。main.py')し、そのUbuntuの5000番ポートにWindowsからアクセスしてみます。EC2やHerokuで実行して、ブラウザでアクセスすることも可能です。ユーザー名"yiori_s"を入力した時の結果画面まとめInstagramのユーザー名からそのユーザーが過去に投稿した写真を取得して、AlchemyAPIを用いてユーザーの特徴量ベクトルと計算して、作成したモデルによって性別推定を行うWebアプリケーションを開発しました。その際に、機械学習部分ではscikit-learn、Webアプリケーション部分ではFlaskを用いて開発を進めました。どちらも、今回の開発ではほんの一部の機能しか使っていませんが、それでもこれだけのアプリケーションを開発することができます。5日間という短い期間で初めて機械学習技術を活用したWebアプリケーションの開発を行いました。推定精度も見栄えもそれほど良いわけではありませんが、考えたものを一度形にすることで、「もっとこうしてみよう!」というアイデアが不思議と湧いてきて面白かったです。このアプリケーションのソースコードはすべて私のGitHubで公開していますので、参照してみてください。今回の開発および記事を書くにあたって参考にしたものを紹介させていただきます。『Pythonで機械学習アプリケーションの開発環境を構築する』や、scikit-learnで機械学習を始めるチュートリアルが書かれているscikit-learn-notebook、『機械学習を利用したアプリケーション開発をはじめよう(自習編)』などを参考にさせていただきました。大学院では教育工学を専門として学んでいますが、学部時代は情報系学部に所属し、データ分析やソフトウェアに興味があります。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。