<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programming | DL FreeTime</title>
	<atom:link href="https://www.ct-innovation.blog/dl-freetime/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.ct-innovation.blog/dl-freetime</link>
	<description>Start studying deep learning in my Free time</description>
	<lastBuildDate>Wed, 04 Jun 2025 02:58:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/cropped-cooltext289278806579247-32x32.png</url>
	<title>Programming | DL FreeTime</title>
	<link>https://www.ct-innovation.blog/dl-freetime</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【初心者向け】Rust言語とは？メモリ安全性で注目される次世代システムプログラミング言語の始め方</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/2949/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/2949/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Wed, 04 Jun 2025 02:58:00 +0000</pubDate>
				<category><![CDATA[Rust]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2949</guid>

					<description><![CDATA[プログラミングの世界では、パフォーマンスと安全性を両立させることは長年の課題でした。そんな中、2025年に最も注目を集めているのがRust言語です。Rustは最も急速に成長しているプログラミング言語として、現代のソフトウ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">プログラミングの世界では、パフォーマンスと安全性を両立させることは長年の課題でした。そんな中、<span class="marker">2025年に最も注目を集めているのがRust言語</span>です。Rustは最も急速に成長しているプログラミング言語として、現代のソフトウェア開発のルールを書き換えています 。本記事では、Rustとは何なのか、なぜこれほど人気なのか、そして中高生でも始められる学習方法まで、分かりやすく解説していきます。</p>



<h2 class="wp-block-heading">Rustとは何か？</h2>



<p class="wp-block-paragraph">Rustは、<span class="marker-blue">安全性、速度、並行性を重視したシステムプログラミング言語</span>です。2006年にMozillaの29歳のプログラマーであるGraydon Hoareが、故障したエレベーターに腹を立てて設計を始めた という興味深い起源を持っています。</p>



<p class="wp-block-paragraph">Rustは2003年に誕生し、2015年に最初にリリースされたシステムプログラミング言語で、パフォーマンス、信頼性、生産性を優先するよう設計されています 。現在の最新安定版は1.85.0（2025年2月17日リリース） となっており、継続的に改良が重ねられています。</p>



<p class="wp-block-paragraph">従来、プログラミングの世界では「速いけど危険な言語（C/C++）」と「安全だけど遅い言語（Python/Java）」という二極化が存在していました。Rustはこの常識を覆し、<span class="marker-under-blue">「速くて安全」という理想を実現した革新的な言語</span>なのです。</p>



<h2 class="wp-block-heading">Rustの基本情報</h2>



<h3 class="wp-block-heading">開発背景と理念</h3>



<p class="wp-block-paragraph">Rustの創始者であるGraydon Hoareは、Rustを「過去からの技術が、未来を自分自身から救うために来た」と表現しています 。彼は新しくて実験的なプログラミング言語を作るのではなく、実証済みのアイデアに基づいた堅実で信頼性の高い言語を構築することを目指しました。</p>



<h3 class="wp-block-heading">現在の利用状況</h3>



<p class="wp-block-paragraph">2025年の調査によると、過去12ヶ月間に2,267,000人の開発者がRustを使用し、709,000人がRustを主要言語として認識 しています。Stack Overflowの年次調査では、Rustは7年連続で最も「愛されている」プログラミング言語として評価 されており、開発者からの圧倒的な支持を得ています。</p>



<h3 class="wp-block-heading">主要な採用企業</h3>



<p class="wp-block-paragraph">Discord、Dropbox、Cloudflareなどの企業がRustを採用しており、Cloudflareは全インターネットトラフィックの20%以上をRustで処理 しています。Amazon、Google、Microsoftなどの主要テック企業もRustを本格的に採用し、積極的にRust開発者を採用 しています。</p>



<h2 class="wp-block-heading">Rustの詳細情報</h2>



<h3 class="wp-block-heading">メモリ安全性の仕組み</h3>



<p class="wp-block-paragraph">Rustの最大の特徴は、<span class="marker-blue">「所有権システム」</span>と呼ばれる独特なメモリ管理機能です。Rustは、ガベージコレクター（GC）を必要とせずに、コンパイル時にメモリ安全性を保証します 。これにより、以下のような問題を完全に回避できます：</p>



<ul class="wp-block-list">
<li>メモリリーク（メモリが適切に解放されない問題）</li>



<li>ダングリングポインタ（無効なメモリ領域を指すポインタ）</li>



<li>バッファオーバーフロー（配列の境界を超えた書き込み）</li>



<li>データ競合（複数のスレッドが同じデータに同時にアクセスする問題）</li>
</ul>



<h3 class="wp-block-heading">パフォーマンスの優位性</h3>



<p class="wp-block-paragraph">Rustのアプリケーションは、CやC++と同等の生のパフォーマンスを発揮でき、ゲーム開発、システムプログラミング、高頻度取引などの計算集約的なタスクに最適 です。Amazon Web Servicesの研究では、Rustベースのコードは同等のJavaプログラムの半分の電力で動作することが判明 しています。</p>



<h3 class="wp-block-heading">並行処理への対応</h3>



<p class="wp-block-paragraph">並行処理は現代ソフトウェアの重要な側面となっています。マルチコアプロセッサーと分散システムの登場により、安全で効率的な並行コードの作成は多くの開発者にとって挑戦 となっています。Rustの所有権システムは、この課題を言語レベルで解決し、安全な並行プログラムの作成を可能にします。</p>



<h2 class="wp-block-heading">Rustのメリットとデメリット</h2>



<h3 class="wp-block-heading">メリット</h3>



<p class="wp-block-paragraph"><strong>1. 卓越したメモリ安全性</strong></p>



<p class="wp-block-paragraph">Rustの最大の利点は「ボロー チェッカー」と呼ばれる仕組みです 。これにより、CやC++で頻発するメモリ関連のバグを完全に防ぐことができます。</p>



<p class="wp-block-paragraph"><strong>2. 高いパフォーマンス</strong></p>



<p class="wp-block-paragraph">Rustのゼロコスト抽象化により、高レベルなプログラミング構文が効率的な機械語にコンパイルされます 。これにより、コードの可読性を保ちながら最高のパフォーマンスを実現できます。</p>



<p class="wp-block-paragraph"><strong>3. 安全な並行処理</strong></p>



<p class="wp-block-paragraph">Rustの所有権システムにより、安全な並行コードの作成が簡素化され、Javaなどの言語と比べてより少ない手動作業で済みます 。</p>



<p class="wp-block-paragraph"><strong>4. 強力な型システム</strong></p>



<p class="wp-block-paragraph">Rustの強力で静的な型システムにより、多くのエラーがコンパイル時に捉えられ、実行時エラーの可能性が減り、全体的なコードの品質が向上します 。</p>



<p class="wp-block-paragraph"><strong>5. 活発なコミュニティ</strong></p>



<p class="wp-block-paragraph">Rustは、情熱的で活発なコミュニティを持つ繁栄するオープンソースプロジェクトです。これにより継続的な開発、豊富なライブラリとツール、優れたドキュメンテーションが促進されています 。</p>



<h3 class="wp-block-heading">デメリット</h3>



<p class="wp-block-paragraph"><strong>1. 急な学習曲線</strong></p>



<p class="wp-block-paragraph">ツールの隙間やRustの急な学習曲線などの課題が残っています 。Rustの所有権システムはC/C++と比べてより急な学習曲線を持ちます 。特に所有権、借用、ライフタイムの概念は初心者には理解が困難です。</p>



<p class="wp-block-paragraph"><strong>2. コンパイル時間</strong></p>



<p class="wp-block-paragraph">Rustはコンパイル時に多くの検証を行うため、他の言語と比べてコンパイル時間が長くなることがあります。ただし、Rust 2025 Editionでは30%のコンパイル時間改善 が実現されています。</p>



<p class="wp-block-paragraph"><strong>3. エコシステムの発展途上</strong></p>



<p class="wp-block-paragraph">企業は学習曲線と縮小されたエコシステムを考慮する必要があり、これが開発速度、採用コスト、市場投入時間に影響を与える可能性があります 。ただし、この状況は急速に改善されています。</p>



<p class="wp-block-paragraph"><strong>4. 冗長な構文</strong></p>



<p class="wp-block-paragraph">Rustは複数のパラダムをサポートするため学習することが多く、特に最初の段階で他の言語よりも冗長に感じることがあります 。</p>



<h2 class="wp-block-heading">Rustの使い方</h2>



<h3 class="wp-block-heading">インストール方法</h3>



<p class="wp-block-paragraph">Rustの導入は<span class="marker-blue">rustup</span>という公式ツールを使用することで簡単に行えます。</p>



<p class="wp-block-paragraph"><strong>Windows の場合：</strong></p>



<p class="wp-block-paragraph">公式Rustウェブサイトからインストーラーをダウンロードし、プログラムを実行して画面の指示に従います。Visual Studio C++ Build toolsのインストールが求められる場合があります 。</p>



<p class="wp-block-paragraph"><strong>Linux/macOS の場合：</strong></p>



<p class="wp-block-paragraph">ターミナルで以下のコマンドを実行し、画面の指示に従います ：</p>



<pre class="wp-block-code"><code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code></pre>



<h3 class="wp-block-heading">インストール確認</h3>



<p class="wp-block-paragraph">インストール後、rustcとcargoのバージョンを確認して正常にインストールされたかを検証します ：</p>



<pre class="wp-block-code"><code>rustc --version
cargo --version</code></pre>



<h3 class="wp-block-heading">最初のプログラム作成</h3>



<p class="wp-block-paragraph">Cargoを使って新しいプロジェクトを作成しましょう ：</p>



<pre class="wp-block-code"><code>cargo new hello_rust
cd hello_rust
cargo run</code></pre>



<p class="wp-block-paragraph">これで「Hello, world!」と表示されるプログラムが実行されます。</p>



<h3 class="wp-block-heading">推奨学習リソース</h3>



<p class="wp-block-paragraph">Rust学習には以下のリソースが推奨されます： </p>



<ul class="wp-block-list">
<li><strong>The Rust Programming Language（公式の本）</strong>：包括的なRust学習ガイド</li>



<li><strong>Rust by Example</strong>：コード例と練習問題を含むインタラクティブな本</li>



<li><strong>Rustlings</strong>：実践的な練習のための優れたリソース</li>



<li><strong>Let&#8217;s Get Rusty</strong>：初心者向けRustチュートリアルとプロジェクトのYouTubeチャンネル</li>
</ul>



<h3 class="wp-block-heading">開発環境の選択</h3>



<p class="wp-block-paragraph">コードエディタまたはIDE（統合開発環境）を選択する必要があります。Visual Studio CodeのRust拡張機能、IntelliJのRustプラグイン、またはRustRoverなどの専用RustIDEが人気 です。</p>



<h3 class="wp-block-heading">実際の活用分野</h3>



<p class="wp-block-paragraph">Rustは多様な用途に使用できます：システムプログラミング、Web開発（RocketやActixなどのフレームワーク）、コマンドラインツール、ゲーム開発など 。IoTデバイス、AI・機械学習の推論エンジン、ブロックチェーン技術でも活用 されています。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Rustは、従来のプログラミング言語が抱えていた「パフォーマンス vs 安全性」のトレードオフを解決した革新的な言語です。2025年に向けて、Rustは新興技術において重要な役割を果たす立場にあります 。</p>



<p class="wp-block-paragraph">学習曲線は確かに急ですが、献身と練習により、初心者でもRustをマスターし、その安全性とパフォーマンスの保証から恩恵を受けることができます 。Rustを学習することで得られるスキル（所有権と借用について慎重に考える、安全な並行コードを書く、強力な型システムを活用する）は、他のプログラミング文脈にも転用可能 です。</p>



<p class="wp-block-paragraph">重要なのは、小さなプロジェクトから始めて、自信を得るにつれて徐々に複雑さを増していくことです。Rustを完全に使いこなさなくても、学習プロセスで身につく原理とパターンは、あなたを全体的により良いプログラマーにしてくれるでしょう。</p>



<h2 class="wp-block-heading">最後に</h2>



<p class="wp-block-paragraph">2025年にRustを学習することは、システムプログラミングとその先の分野での機会を開く興奮に満ちた旅 です。現在の技術業界の動向を見ると、Rustのスキルを持つ開発者への需要は今後さらに高まっていくと予想されます。</p>



<p class="wp-block-paragraph">プログラミング初心者の方も、他の言語からの移行を考えている方も、Rustは挑戦する価値のある言語です。最初は難しく感じるかもしれませんが、Rustの活気あるコミュニティと堅固なエコシステムが継続的に前進を推し進めています ので、豊富なサポートとリソースを利用しながら学習を進めることができます。</p>



<p class="wp-block-paragraph">未来のソフトウェア開発において、安全で高性能なシステムを構築したいなら、今こそRustを学び始める絶好のタイミングです。一歩踏み出して、この革新的な言語の世界を探索してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/2949/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Mojo言語】とは？PythonとC++を融合したAI特化プログラミング言語を完全解説</title>
		<link>https://www.ct-innovation.blog/dl-freetime/ai/2944/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/ai/2944/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Tue, 03 Jun 2025 09:58:20 +0000</pubDate>
				<category><![CDATA[AI/MachineLearning]]></category>
		<category><![CDATA[Mojo]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2944</guid>

					<description><![CDATA[Mojoとは何か？ Mojoは、現在開発中の新しいプログラミング言語で、AI関連のシステムレベルコードを書くために設計されています。簡単に言えば、Pythonの使いやすさとC++の高性能を両立させた次世代の言語です。 こ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Mojoとは何か？</h2>



<p class="wp-block-paragraph">Mojoは、現在開発中の新しいプログラミング言語で、AI関連のシステムレベルコードを書くために設計されています。<strong>簡単に言えば、Pythonの使いやすさとC++の高性能を両立させた次世代の言語</strong>です。</p>



<p class="wp-block-paragraph">この言語は、Chris Lattner（Swiftプログラミング言語とLLVMの元アーキテクト）とTim Davis（元Google社員）によって設立されたModular Inc.が開発しています。Lattnerは、AppleのSwift言語やLLVMコンパイラ、MLIRなどを開発した、プログラミング言語界の著名な人物です。</p>



<p class="wp-block-paragraph">Mojoが注目される理由は、いわゆる「2つの言語問題」を解決しようとしている点にあります。従来のAI開発では、プロトタイプはPythonで作成するものの、本格運用時にはC++で書き直す必要がありました。Mojoは、この面倒なプロセスを不要にしようとしています。</p>



<h2 class="wp-block-heading">Mojoの基本情報</h2>



<h3 class="wp-block-heading">開発の経緯と現在の状況</h3>



<p class="wp-block-paragraph">Mojoの開発は2022年に開始され、2023年5月に初めて一般公開されました。最初はブラウザベースのプレイグラウンドのみでしたが、2023年9月にLinux版、10月にはmacOS版のローカルインストールが可能になりました。</p>



<p class="wp-block-paragraph">現在の状況：</p>



<ul class="wp-block-list">
<li><strong>利用可能環境</strong>: ブラウザ（Jupyter notebook）、Linux、macOS</li>



<li><strong>ライセンス</strong>: コンパイラは非公開、標準ライブラリはオープンソース</li>



<li><strong>今後の予定</strong>: 言語の成熟と共に完全オープンソース化を予定</li>
</ul>



<h3 class="wp-block-heading">技術的な基盤</h3>



<p class="wp-block-paragraph">Mojoの最大の特徴は、多くの言語が直接LLVMコンパイラフレームワークを使用するのに対し、MLIR（Multi-Level Intermediate Representation）コンパイラソフトウェアフレームワーク上に構築されている点です。</p>



<p class="wp-block-paragraph"><strong>MLIRの利点：</strong></p>



<ul class="wp-block-list">
<li>従来のLLVMでは利用できない高レベルなコンパイラパスを活用</li>



<li>CPUに加え、GPUなど多様なハードウェアへのコンパイルが可能</li>



<li>AIアプリケーションに最適化され、MojoはMLIRの「シンタックスシュガー」として機能</li>
</ul>



<h3 class="wp-block-heading">パフォーマンスの向上</h3>



<p class="wp-block-paragraph">Mojoの最も注目すべき特徴は、その実行速度です：</p>



<ul class="wp-block-list">
<li>PyPyが22倍、スカラーC++が5000倍高速な中、Mojo Langは35000倍の高速化を実現</li>



<li>最適化された条件下（Mandelbrotセット計算）では、Pythonより最大68,000倍の高速化</li>
</ul>



<p class="wp-block-paragraph"><strong>注意事項</strong>：これらの数値は特定の条件下でのベンチマーク結果であり、実際のアプリケーションでは結果が異なる場合があります。</p>



<h2 class="wp-block-heading">Mojoの詳細情報</h2>



<h3 class="wp-block-heading">Pythonとの互換性</h3>



<p class="wp-block-paragraph">MojoはPythonからの移行を容易にするよう設計されており、Pythonに似た構文を持ち、静的型推論機能があります。Pythonモジュールのインポートも可能です。ただし、Python 3とは完全な互換性がなく、globalキーワード、リスト・辞書の内包表記、クラスサポートなどは未実装です。</p>



<h3 class="wp-block-heading">新機能と性能向上のメカニズム</h3>



<p class="wp-block-paragraph"><strong>1. 強化された型システム</strong></p>



<p class="wp-block-paragraph">Mojoでは、letとvarキーワードを使用してMojo固有の変数を宣言できます。letは不変変数、varは可変変数を示します。</p>



<pre class="wp-block-code"><code>let immutable_value = 42    # 不変
var mutable_value = 100     # 可変</code></pre>



<p class="wp-block-paragraph"><strong>2. fn（関数）とstruct（構造体）の導入</strong></p>



<p class="wp-block-paragraph">Mojoは高性能な低レベルプログラミングを可能にする機能として、型付きでコンパイルされた関数を作成するfnと、メモリ最適化されたstructを提供しています。</p>



<pre class="wp-block-code"><code># 従来のPython式（def）
def python_style_function(x):
    return x * 2

# Mojo式高性能関数（fn）
fn high_performance_function(x: Int) -&gt; Int:
    return x * 2</code></pre>



<p class="wp-block-paragraph"><strong>3. SIMD（Single Instruction, Multiple Data）サポート</strong></p>



<p class="wp-block-paragraph">SIMDは単一命令で複数データを処理する組み込み型で、基盤ハードウェア上で並列実行されます。現代のプロセッサが持つこの機能を、Mojoでは簡単に活用できます。</p>



<p class="wp-block-paragraph"><strong>4. 並列処理機能</strong></p>



<p class="wp-block-paragraph">Mojoには組み込みのparallelize関数があり、コードのマルチスレッド化による大幅な高速化が可能です。Pythonでは実装が困難な並列処理も、Mojoなら簡単に利用できます。</p>



<h2 class="wp-block-heading">Mojoのメリットとデメリット</h2>



<h3 class="wp-block-heading">メリット</h3>



<p class="wp-block-paragraph"><strong>1. 学習コストの低さ</strong><br>
基本的にPythonの構文を使用するため、既存のPython知識を活用でき、新しい言語を一から学習する必要がありません。</p>



<p class="wp-block-paragraph"><strong>2. 段階的な性能向上</strong><br>
開発者は必要に応じて「fn」を使用することで、より高速な実行モードを選択できます。段階的な最適化により、初心者でも扱いやすい設計になっています。</p>



<p class="wp-block-paragraph"><strong>3. AI開発特化設計</strong><br>
C++やCUDAなど複雑な言語を使用せずに、高性能なAIプログラムの開発が可能です。</p>



<p class="wp-block-paragraph"><strong>4. ハードウェアの効率的活用</strong><br>
CUDAを使用せずにCPU+GPUでの高速実行が可能で、現代のハードウェアが持つ並列処理能力を最大限に活用できます。</p>



<p class="wp-block-paragraph"><strong>5. 統一開発環境</strong><br>
プロトタイプから本格運用まで、言語の切り替えが不要な統一された開発環境を提供します。</p>



<h3 class="wp-block-heading">デメリット</h3>



<p class="wp-block-paragraph"><strong>1. 言語の未成熟性</strong><br>
新しい言語のため、ライブラリやフレームワークの数が限られており、エコシステムは発展途上です。</p>



<p class="wp-block-paragraph"><strong>2. 限定的なコミュニティとリソース</strong><br>
成熟した言語と比較して豊富なエコシステムへのアクセスが限られており、サポートやチュートリアル、サードパーティリソースの発見が困難な場合があります。</p>



<p class="wp-block-paragraph"><strong>3. プラットフォームサポートの制限</strong><br>
現在LinuxとmacOSでのみ利用可能で、Windowsサポートは開発中です。</p>



<p class="wp-block-paragraph"><strong>4. 長期的な不確実性</strong><br>
開発中の言語のため、機能や仕様が変更される可能性があります。また、利用可能なドキュメントやリソースが限られています。</p>



<h2 class="wp-block-heading">Mojoの使い方</h2>



<h3 class="wp-block-heading">インストールと環境構築</h3>



<p class="wp-block-paragraph">現在、Mojoは以下の方法で利用できます：</p>



<p class="wp-block-paragraph"><strong>1. オンラインプレイグラウンド</strong></p>



<ul class="wp-block-list">
<li>ブラウザ上のJupyter notebookで即座に試用可能</li>



<li>インストール不要で基本機能を体験できる</li>
</ul>



<p class="wp-block-paragraph"><strong>2. ローカルインストール</strong></p>



<ul class="wp-block-list">
<li>Ubuntu Linux: 公式サイトからMojo SDKをダウンロード</li>



<li>macOS: 公式サイトからダウンロード可能</li>



<li>Windows: 近日対応予定</li>
</ul>



<h3 class="wp-block-heading">基本的なコードの記述方法</h3>



<p class="wp-block-paragraph"><strong>Pythonスタイルのコード（初心者向け）</strong></p>



<pre class="wp-block-code"><code># 通常のPythonライクなコード
def greet(name):
    print("Hello,", name, "!")

def main():
    greet("World")</code></pre>



<p class="wp-block-paragraph"><strong>Mojo最適化コード（中級者向け）</strong></p>



<pre class="wp-block-code"><code># 型指定による高性能化
fn fast_multiply(x: Int, y: Int) -&gt; Int:
    return x * y

# 不変・可変の明示的指定
fn calculate():
    let constant_value = 100  # 不変
    var counter = 0          # 可変
    
    for i in range(10):
        counter += fast_multiply(i, constant_value)
    
    print(counter)</code></pre>



<h3 class="wp-block-heading">学習リソース</h3>



<p class="wp-block-paragraph">Mojoには公式ドキュメントが整備されており、言語の構文、機能、各種AIフレームワークとの統合方法について詳しく解説されています。また、Coursera、Udemy、edXなどのプラットフォームでは、初心者から経験者まで対応したコースやチュートリアルが提供されています。</p>



<p class="wp-block-paragraph"><strong>推奨学習順序：</strong></p>



<ol class="wp-block-list">
<li><strong>基礎学習</strong>: Pythonの基本構文での慣れ親しみ</li>



<li><strong>型システム</strong>: `let`、`var`、`fn`の使用方法の習得</li>



<li><strong>パフォーマンス最適化</strong>: SIMD、並列処理の学習</li>



<li><strong>AI応用</strong>: 実際のAIプロジェクトへの適用</li>
</ol>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Mojoは、プログラミング言語界において革新的な存在となる可能性を秘めています。Pythonの使いやすさを保持しながら、最大68,000倍という驚異的な性能向上を実現し、AI開発における「2つの言語問題」の根本的解決を目指しています。</p>



<p class="wp-block-paragraph"><strong>Mojoの主な価値：</strong></p>



<ul class="wp-block-list">
<li><strong>学習容易性</strong>: Pythonの知識があれば即座に開始可能</li>



<li><strong>段階的最適化</strong>: 必要に応じた段階的な性能向上</li>



<li><strong>AI特化設計</strong>: 現代のAI開発に必要な機能の標準搭載</li>



<li><strong>ハードウェア活用</strong>: CPUとGPUの効率的な利用</li>
</ul>



<p class="wp-block-paragraph">ただし、発展途上の言語であることも事実です。エコシステムの成熟、コミュニティの拡大、より多くのプラットフォームへの対応など、解決すべき課題も存在します。</p>



<p class="wp-block-paragraph">それでも、早期採用者は言語の形成に貢献でき、実際にMojoのバージョン24.4リリース時には、多くの改善がユーザーコミュニティの貢献によるものでした。</p>



<h2 class="wp-block-heading">最後に</h2>



<p class="wp-block-paragraph">Mojoは単なる新しいプログラミング言語ではなく、AI時代における開発体験を根本的に変革する可能性を持った技術です。Chris LattnerとModularチームが目指すのは、開発者がAIの可能性を最大限に引き出せる環境の構築です。</p>



<p class="wp-block-paragraph">Mojoは今後のプログラミング学習において重要な選択肢の一つとなるでしょう。Pythonから始めて、必要に応じてMojoの高性能機能を学習する段階的アプローチは、プログラミング教育の新しいスタンダードとなる可能性があります。</p>



<p class="wp-block-paragraph">AI技術の重要性が増す将来を考慮すれば、Mojoのようなツールの早期習得は、確実に大きなアドバンテージとなります。まずは公式のプレイグラウンドで、Mojoの世界を体験してみることをお勧めします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>関連リンク：</strong></p>



<ul class="wp-block-list">
<li>公式サイト: <a rel="noopener" target="_blank" href="https://www.modular.com/mojo">https://www.modular.com/mojo</a></li>



<li>GitHub: <a rel="noopener" target="_blank" href="https://github.com/modular/modular">https://github.com/modular/modular</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/ai/2944/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ニューラルネットワーク: AIの基礎となる技術を解説</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2790/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2790/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Mon, 27 May 2024 16:07:09 +0000</pubDate>
				<category><![CDATA[AI/MachineLearning]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[PyTorch]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Keras]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[pytorch]]></category>
		<category><![CDATA[Tensorflow]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2790</guid>

					<description><![CDATA[ニューラルネットワークは、人工知能（AI）の根幹をなす技術の一つです。近年、機械学習や深層学習の発展に伴い、ニューラルネットワークはますます注目を集めています。本記事では、ニューラルネットワークの基本概念から歴史、数式、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ニューラルネットワークは、人工知能（AI）の根幹をなす技術の一つです。近年、機械学習や深層学習の発展に伴い、ニューラルネットワークはますます注目を集めています。本記事では、ニューラルネットワークの基本概念から歴史、数式、Pythonでの実装例まで、わかりやすく解説していきます。</p>



<h2 class="wp-block-heading">ニューラルネットワークとは</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://upload.wikimedia.org/wikipedia/commons/1/10/Blausen_0657_MultipolarNeuron.png" alt="" style="object-fit:contain;width:350px;height:200px"/></figure>
<cite><a rel="nofollow noopener" target="_blank" href="https://commons.wikimedia.org/wiki/File:Blausen_0657_MultipolarNeuron.png">Wikimedia Commons MultipolarNeuron</a></cite></blockquote>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://upload.wikimedia.org/wikipedia/commons/7/7d/Artificial_neuron-2.gif" alt="" style="object-fit:contain;width:350px;height:200px"/></figure>
<cite><a rel="nofollow noopener" target="_blank" href="https://commons.wikimedia.org/wiki/File:Artificial_neuron-2.gif">Wikimedia Commons Artificial neuron-2</a></cite></blockquote>
</div>
</div>



<p class="wp-block-paragraph">ニューラルネットワークは、人間の脳内にある神経細胞（ニューロン）のネットワークを数学的にモデル化したものです。複数の層（入力層、隠れ層、出力層）から構成され、各層のニューロン間が重みづけされた接続で結ばれています。この構造により、ニューラルネットワークは複雑な関数を学習し、パターン認識や予測などのタスクを実行できます。</p>



<h2 class="wp-block-heading">ニューラルネットワークの構成要素</h2>



<p class="wp-block-paragraph">ニューラルネットワークは、複数の層から構成されています。各層の役割と特徴について、詳しく見ていきましょう。</p>



<h3 class="wp-block-heading">入力層</h3>



<p class="wp-block-paragraph">入力層は、ニューラルネットワークにデータを入力する役割を担っています。入力層のニューロンの数は、入力データの次元数に対応します。例えば、28&#215;28ピクセルの画像を入力する場合、入力層のニューロンの数は784（=28&#215;28）になります。</p>



<h3 class="wp-block-heading">隠れ層</h3>



<p class="wp-block-paragraph">隠れ層は、入力層と出力層の間に位置する層です。隠れ層のニューロンは、入力層からの信号を受け取り、非線形変換を施して、出力層に信号を送ります。隠れ層の数とニューロンの数は、タスクの複雑さや用いるデータの特性に応じて設定します。</p>



<p class="wp-block-paragraph">隠れ層で用いられる活性化関数は、非線形性を導入するために重要な役割を果たします。代表的な活性化関数として、以下のようなものがあります。</p>



<ul class="wp-block-list">
<li>シグモイド関数：\(f(x) = \frac{1}{1 + e^{-x}}\)</li>



<li>tanh関数：\(f(x) = \frac{e^x &#8211; e^{-x}}{e^x + e^{-x}}\)</li>



<li>ReLU（Rectified Linear Unit）関数：\(f(x) = \max(0, x)\)</li>
</ul>



<p class="wp-block-paragraph">近年、ReLU関数が広く用いられています。ReLU関数は、勾配消失問題を緩和し、ニューラルネットワークの学習を高速化するという利点があります。</p>



<h3 class="wp-block-heading">出力層</h3>



<p class="wp-block-paragraph">出力層は、ニューラルネットワークの最終層であり、タスクに応じた出力を生成します。出力層のニューロンの数は、タスクの種類によって異なります。例えば、二値分類のタスクでは、出力層のニューロンの数は1になります。多クラス分類のタスクでは、出力層のニューロンの数はクラスの数に対応します。</p>



<p class="wp-block-paragraph">出力層で用いられる活性化関数は、タスクの種類によって異なります。二値分類では、シグモイド関数が用いられることが多いです。多クラス分類では、ソフトマックス関数が用いられることが多いです。ソフトマックス関数は、出力を確率分布に変換します。</p>



<h2 class="wp-block-heading">ニューラルネットワークの学習</h2>



<p class="wp-block-paragraph">ニューラルネットワークの学習は、教師あり学習の一種です。教師データ（入力データとそれに対応する正解ラベル）を用いて、ニューラルネットワークのパラメータ（重みとバイアス）を調整します。学習の目的は、教師データに対する予測誤差を最小化することです。</p>



<h3 class="wp-block-heading">誤差関数</h3>



<p class="wp-block-paragraph">ニューラルネットワークの学習では、予測値と正解ラベルの差を定量化する誤差関数を定義します。代表的な誤差関数として、以下のようなものがあります。</p>



<ul class="wp-block-list">
<li>平均二乗誤差（Mean Squared Error, MSE）：\(E = \frac{1}{2N}\sum_{i=1}^N(y_i &#8211; t_i)^2\)</li>



<li>クロスエントロピー誤差（Cross Entropy Error）：\(E = -\frac{1}{N}\sum_{i=1}^N\sum_{k=1}^Kt_{ik}\log y_{ik}\)</li>
</ul>



<p class="wp-block-paragraph">ここで、\(N\)はデータの数、\(y_i\)は予測値、\(t_i\)は正解ラベル、\(K\)はクラスの数です。</p>



<h3 class="wp-block-heading">最適化アルゴリズム</h3>



<p class="wp-block-paragraph">ニューラルネットワークの学習では、誤差関数を最小化するためのパラメータ更新を行います。パラメータ更新には、最適化アルゴリズムを用います。代表的な最適化アルゴリズムとして、以下のようなものがあります。</p>



<ul class="wp-block-list">
<li>確率的勾配降下法（Stochastic Gradient Descent, SGD）</li>



<li>モーメンタム法（Momentum）</li>



<li>AdaGrad（Adaptive Gradient）</li>



<li>Adam（Adaptive Moment Estimation）</li>
</ul>



<p class="wp-block-paragraph">これらの最適化アルゴリズムは、勾配降下法をベースとしながら、学習率の適応的な調整や、パラメータ更新の加速などの工夫を取り入れています。</p>



<h3 class="wp-block-heading">過学習の防止</h3>



<p class="wp-block-paragraph">ニューラルネットワークは、柔軟性が高く、表現力が豊かなモデルです。その一方で、訓練データに過剰に適合してしまう過学習（overfitting）が起こりやすいという問題があります。過学習を防止するために、以下のような手法が用いられます。</p>



<ul class="wp-block-list">
<li>正則化（Regularization）：パラメータの大きさにペナルティを課すことで、モデルの複雑さを制御します。L1正則化とL2正則化が代表的です。</li>



<li>ドロップアウト（Dropout）：学習時に、ランダムにニューロンを無効化することで、モデルの過剰な適合を防ぎます。</li>



<li>アーリーストッピング（Early Stopping）：検証データに対する誤差が増加に転じた時点で学習を打ち切ることで、過学習を防ぎます。</li>
</ul>



<h2 class="wp-block-heading">ニューラルネットワークの発展の歴史をより詳しく</h2>



<p class="wp-block-paragraph">ニューラルネットワークの歴史は、1940年代にさかのぼります。以下では、ニューラルネットワークの発展の主要なマイルストーンを詳しく見ていきます。</p>



<h3 class="wp-block-heading">1943年：McCulloch-Pittsニューロン</h3>



<p class="wp-block-paragraph">Warren McCullochとWalter Pittsは、1943年に「A Logical Calculus of the Ideas Immanent in Nervous Activity」という論文を発表し、ニューロンの数理モデルを提案しました。このモデルは、McCulloch-Pittsニューロンと呼ばれ、ニューラルネットワークの基礎となりました。</p>



<h3 class="wp-block-heading">1958年：パーセプトロン</h3>



<p class="wp-block-paragraph">Frank Rosenblattは、1958年に「The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain」という論文を発表し、パーセプトロンを開発しました。パーセプトロンは、単層のニューラルネットワークであり、線形分離可能な問題を学習することができました。</p>



<h3 class="wp-block-heading">1969年：パーセプトロンの限界</h3>



<p class="wp-block-paragraph">Marvin MinskyとSeymour Papertは、1969年に「Perceptrons」という本を出版し、パーセプトロンの限界を指摘しました。彼らは、パーセプトロンがXOR問題のような非線形分離問題を解けないことを示しました。この指摘により、ニューラルネットワークの研究は一時的に停滞しました。</p>



<h3 class="wp-block-heading">1986年：誤差逆伝播法</h3>



<p class="wp-block-paragraph">David RumelhartとGeoffrey Hintonらは、1986年に「Learning representations by back-propagating errors」という論文を発表し、誤差逆伝播法（バックプロパゲーション）を提案しました。誤差逆伝播法は、多層ニューラルネットワークの学習を可能にし、ニューラルネットワークの研究が再び活性化するきっかけとなりました。</p>



<h3 class="wp-block-heading">1989年：畳み込みニューラルネットワーク（CNN）</h3>



<p class="wp-block-paragraph">Yann LeCunらは、1989年に「Backpropagation Applied to Handwritten Zip Code Recognition」という論文を発表し、畳み込みニューラルネットワーク（CNN）を提案しました。CNNは、画像認識のタスクで高い性能を示し、現在に至るまで広く用いられています。</p>



<h3 class="wp-block-heading">1997年：長短期記憶（LSTM）</h3>



<p class="wp-block-paragraph">Sepp HochreiterとJürgen Schmidhuberは、1997年に「Long Short-Term Memory」という論文を発表し、長短期記憶（LSTM）を提案しました。LSTMは、リカレントニューラルネットワーク（RNN）の一種であり、長期的な依存関係を学習することができます。LSTMは、自然言語処理や時系列データ解析で広く用いられています。</p>



<h3 class="wp-block-heading">2006年：深層信念ネットワーク（DBN）</h3>



<p class="wp-block-paragraph">Geoffrey Hintonらは、2006年に「A fast learning algorithm for deep belief nets」という論文を発表し、深層信念ネットワーク（DBN）を提案しました。DBNは、複数の制限付きボルツマンマシン（RBM）を積層したモデルであり、事前学習とファインチューニングによって学習します。DBNは、深層学習の発展に大きく貢献しました。</p>



<h3 class="wp-block-heading">2012年：ImageNetの画像認識コンペティション</h3>



<p class="wp-block-paragraph">2012年に開催されたImageNetの画像認識コンペティションで、Geoffrey Hintonらが提案した深層畳み込みニューラルネットワーク（CNN）が高い精度を達成しました。このできごとを契機に、深層学習が脚光を浴び、ニューラルネットワークの研究が再び活性化しました。</p>



<h3 class="wp-block-heading">2017年：Transformer</h3>



<p class="wp-block-paragraph">Ashish Vaswaniらは、2017年に「Attention Is All You Need」という論文を発表し、Transformerを提案しました。Transformerは、自然言語処理のタスクで高い性能を示し、現在に至るまで広く用いられています。</p>



<p class="wp-block-paragraph">以上が、ニューラルネットワークの発展の主要なマイルストーンです。ニューラルネットワークの研究は、長い歴史を持ちながらも、現在も活発に行われており、今後のさらなる発展が期待されています。</p>



<h2 class="wp-block-heading">ニューラルネットワークの数式表現</h2>



<p class="wp-block-paragraph">ニューラルネットワークを数式で表現すると、以下のようになります。</p>



<p class="wp-block-paragraph">入力層のニューロンの出力を \(x_i\)、隠れ層のニューロンの出力を \(h_j\)、出力層のニューロンの出力を \(y_k\) とします。また、入力層から隠れ層への重みを \(w_{ij}\)、隠れ層から出力層への重みを \(w_{jk}\) とします。</p>



<p class="wp-block-paragraph">隠れ層のニューロンの出力は、以下の式で計算されます。</p>



<p class="wp-block-paragraph">$$h_j = f(\sum_i w_{ij} x_i + b_j)$$</p>



<p class="wp-block-paragraph">ここで、\(f\) は活性化関数、\(b_j\) はバイアス項です。</p>



<p class="wp-block-paragraph">出力層のニューロンの出力は、以下の式で計算されます。</p>



<p class="wp-block-paragraph">$$y_k = f(\sum_j w_{jk} h_j + b_k)$$</p>



<p class="wp-block-paragraph">ニューラルネットワークの学習では、教師データを用いて、重みとバイアスを調整します。代表的な学習アルゴリズムとして、誤差逆伝播法があります。</p>



<h2 class="wp-block-heading">Pythonでのニューラルネットワークの実装例</h2>



<p class="wp-block-paragraph">Pythonを使って、簡単なニューラルネットワークを実装してみましょう。基本的には、ライブラリを利用して実装を行います。</p>



<h3 class="wp-block-heading">Pytorchの場合</h3>



<pre class="wp-block-code python"><code><code>import torch
import torch.nn as nn
import torch.optim as optim

<em># ニューラルネットワークの定義</em>
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

<em># モデルの初期化</em>
model = Net()

<em># 損失関数とオプティマイザの定義</em>
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)

<em># 訓練ループ</em>
for epoch in range(10):
    for inputs, labels in train_loader:
        inputs = inputs.view(-1, 784)
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()</code></code></pre>



<h3 class="wp-block-heading">Tensorflowの場合</h3>



<pre class="wp-block-code python"><code><code>import tensorflow as tf

<em># ニューラルネットワークの定義</em>
model = tf.keras.Sequential(&#91;
    tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10)
])

<em># モデルのコンパイル</em>
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=&#91;'accuracy'])

<em># モデルの訓練</em>
model.fit(x_train, y_train, epochs=10, batch_size=32)</code></code></pre>



<h3 class="wp-block-heading">Kerasの場合</h3>



<pre class="wp-block-code python"><code><code>from tensorflow import keras

<em># ニューラルネットワークの定義</em>
model = keras.Sequential(&#91;
    keras.layers.Dense(128, activation='relu', input_shape=(784,)),
    keras.layers.Dense(10, activation='softmax')
])

<em># モデルのコンパイル</em>
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=&#91;'accuracy'])

<em># モデルの訓練</em>
model.fit(x_train, y_train, epochs=10, batch_size=32)</code></code></pre>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">ニューラルネットワークは、人工知能の基礎となる技術であり、近年の深層学習の発展に大きく貢献しています。本記事では、ニューラルネットワークの基本概念、歴史、数式表現、Pythonでの実装例について解説しました。ニューラルネットワークを理解することは、AIの原理を学ぶ上で重要な一歩となるでしょう。今後も、ニューラルネットワークの研究が進展し、より高度なAIが実現されることが期待されます。今大いに流行っている生成AIもこの技術の進化の賜物ですね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2790/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Seabornの応用：displotを使いこなす &#8211; 見やすく効果的な分布データの可視化（二変量）</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2514/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2514/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Wed, 10 Apr 2024 13:48:53 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[seaborn]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[displot]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[データ解析]]></category>
		<category><![CDATA[可視化]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2514</guid>

					<description><![CDATA[Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもdisplotは、分布データの視覚化に特化した非常に便利な機能です。本記事では、displotの中でも [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもdisplotは、分布データの視覚化に特化した非常に便利な機能です。本記事では、displotの中でも<span class="marker-under-blue">二変量</span>での可視化について解説していきます。</p>



<p class="wp-block-paragraph"><span class="marker-under">単変量</span>での描画については以前の記事を参照してください。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a target="_blank" href="https://www.ct-innovation.blog/dl-freetime/programming/python/2450/" title="Seabornの応用：displotを使いこなす - 見やすく効果的な分布データの可視化（単変量）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img fetchpriority="high" decoding="async" width="320" height="180" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-320x180.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-320x180.jpg 320w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-300x168.jpg 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-768x431.jpg 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-240x135.jpg 240w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-640x360.jpg 640w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123.jpg 780w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Seabornの応用：displotを使いこなす - 見やすく効果的な分布データの可視化（単変量）</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、Seabornのdisplotを使用してカテゴリデータを視覚化する方法について解説しました。displotを使うことで、データセット内の分布データを理解するのに役立ちます。データの可視化における重要性やSeabornのdisplotがその役割を果たす方法について述べ、読者がデータ解析や洞察を得る際にこの強力なツールを活用することの重要性を強調しました。読者がこの記事を通じてdisplotの基本的な使い方を理解し、さらに応用的なプロットの作成やデータ解析に活かすことができれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.ct-innovation.blog/dl-freetime" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.ct-innovation.blog</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.04.05</div></div></div></div></a>
</div>



<span id="more-2514"></span>



<h2 class="wp-block-heading">displotとは？</h2>



<p class="wp-block-paragraph">displotはSeabornライブラリの中で、2次元の分布を可視化するための便利な関数です。この関数は、ヒストグラムや密度曲線を描画することができ、それらを美しく見栄えの良いグラフにするためのオプションが多数用意されています。以下にdisplotの基本的な使い方と主要なパラメータについて説明します。</p>



<h3 class="wp-block-heading">2変量分布とは</h3>



<p class="wp-block-paragraph"> 2変量分布とは、2つの確率変数の同時分布を表したものです。単に2つのヒストグラムを並べるのではなく、2変数間の相関関係なども表現されます。</p>



<h2 class="wp-block-heading">displotの種類</h2>



<p class="wp-block-paragraph">分布プロットには、主に2つの種類があります。これに一つのオプションが追加できます。</p>



<ol class="wp-block-list">
<li>histplot() (with kind=&#8221;hist&#8221;; the default)</li>



<li>kdeplot() (with kind=&#8221;kde&#8221;)</li>
</ol>



<h2 class="wp-block-heading">データの準備</h2>



<p class="wp-block-paragraph">今回は、seabornでサンプルとして準備されているデータを呼び出して使用します。</p>



<pre class="wp-block-code python"><code>import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset("penguins")</code></pre>



<h3 class="wp-block-heading">すべてに共通の引数</h3>



<ul class="wp-block-list">
<li>data: プロットするデータのデータフレーム</li>



<li>x: x軸のカテゴリデータの列名</li>



<li>y: y軸のカテゴリデータの列名</li>
</ul>



<h2 class="wp-block-heading">histplot：<span class="marker-under">ヒストグラム</span></h2>



<h3 class="wp-block-heading">histplot()の実装</h3>



<p class="wp-block-paragraph">ヒストグラムは、データの値の出現頻度を高さで表すグラフです。横軸はデータの値を表し、縦軸は各区間の値の出現回数(密度や確率に変換することも可能)を表します。</p>



<ul class="wp-block-list">
<li>データを区間(ビン)に分割し、各ビンの値の出現回数をカウントします。</li>



<li>ビンの幅が狭いほど詳細な分布を捉えられますが、過度に狭いと雑音が目立ちます。</li>



<li>カウント数を色の濃さでヒートマップ的に表現します。</li>
</ul>



<p class="wp-block-paragraph">ヒストグラムは分布の概形をパッと見て把握できる直感的なグラフです。</p>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.displot(data, x="bill_length_mm", <strong><em>y="bill_depth_mm"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="484" height="483" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142407.png" alt="" class="wp-image-2566" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142407.png 484w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142407-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142407-150x150.png 150w" sizes="(max-width: 484px) 100vw, 484px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<h5 class="wp-block-heading">binwidth</h5>



<p class="wp-block-paragraph">データを区間(ビン)に分割するサイズを変更できる、ただしあまり幅を大きくとりすぎると特徴をうまく捉えられないので注意すること。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="bill_length_mm", y="bill_depth_mm",<strong><em> binwidth=(2, 2)</em></strong>)
sns.displot(data, x="bill_length_mm", y="bill_depth_mm",<strong><em> binwidth=(1, .5)</em></strong>)</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="485" height="482" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143046.png" alt="" class="wp-image-2570" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143046.png 485w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143046-300x298.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143046-150x150.png 150w" sizes="(max-width: 485px) 100vw, 485px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="485" height="485" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143132.png" alt="" class="wp-image-2571" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143132.png 485w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143132-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143132-150x150.png 150w" sizes="(max-width: 485px) 100vw, 485px" /></figure>
</div>
</div>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="bill_length_mm", y="bill_depth_mm", <strong><em>hue="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="609" height="485" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142421.png" alt="" class="wp-image-2567" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142421.png 609w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142421-300x239.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></figure>



<h5 class="wp-block-heading">col</h5>



<p class="wp-block-paragraph">各バーを重ねたり、積み重ねたりする代わりに、サブプロットとして別のグラフに分けて表示することも可能です。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", y="bill_depth_mm", <strong><em>col="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1484" height="489" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143416.png" alt="" class="wp-image-2572" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143416.png 1484w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143416-300x99.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143416-1024x337.png 1024w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-143416-768x253.png 768w" sizes="(max-width: 1484px) 100vw, 1484px" /></figure>



<p class="wp-block-paragraph">その他オプションによって、正規化することで観測を助ける方法もあります。</p>



<h2 class="wp-block-heading">kdeplot：<span class="marker-under">カーネル密度推定</span></h2>



<h3 class="wp-block-heading">kdeplot()の実装</h3>



<p class="wp-block-paragraph">密度曲線は、カーネル密度推定(Kernel Density Estimation: KDE)によってデータの確率密度関数を滑らかな曲線で描画します。</p>



<ul class="wp-block-list">
<li>カーネル関数を使って各データ点の周りに滑らかな曲線を重ね合わせ、密度曲線を推定します。</li>



<li>ヒストグラムに比べてビン幅の設定に左右されない滑らかな分布を表せます。</li>



<li>等高線は密度の<em>等比例</em>で描画されます。</li>
</ul>



<p class="wp-block-paragraph">密度曲線は連続的なデータ分布をなめらかに可視化できる利点があります。</p>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.displot(data, x="bill_length_mm", y="bill_depth_mm", <strong><em>kind="kde"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="484" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142437.png" alt="" class="wp-image-2568" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142437.png 484w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142437-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142437-150x150.png 150w" sizes="(max-width: 484px) 100vw, 484px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<p class="wp-block-paragraph">様々なオプションについては、histplotと同じのものが非常に多いので特に挙動が変わるもの独自のものにのみフォーカスすることにします。</p>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="bill_length_mm", y="bill_depth_mm", kind="kde",<strong><em> hue="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="609" height="487" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142534.png" alt="" class="wp-image-2569" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142534.png 609w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/04/スクリーンショット-2024-03-15-142534-300x240.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">displotは、データの分布を可視化するための強力なツールであり、様々な種類のグラフを簡単に作成できることがわかりました。適切に使用することで、データの特徴や傾向を把握し、洞察を得ることができます。</p>



<p class="wp-block-paragraph"><div class="product-item-box amazon-item-box no-icon product-item-error cf"><div><a rel="nofollow noopener" target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/4798055433/lightstry-22/">Amazonで詳細を見る</a></div></div></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2514/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Seabornの応用：displotを使いこなす &#8211; 見やすく効果的な分布データの可視化（単変量）</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2450/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2450/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Fri, 05 Apr 2024 08:56:33 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[seaborn]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[displot]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[データ解析]]></category>
		<category><![CDATA[可視化]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2450</guid>

					<description><![CDATA[Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもdisplotは、分布データの視覚化に特化した非常に便利な機能です。本記事では、displotの基本的 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもdisplotは、分布データの視覚化に特化した非常に便利な機能です。本記事では、displotの基本的な使い方から応用まで、実例を交えながら解説していきます。</p>



<p class="wp-block-paragraph">カテゴリデータの可視化についてはこちら</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_blank" href="https://www.ct-innovation.blog/dl-freetime/programming/python/2387/" title="Seabornの応用：catplotを使いこなす - 見やすく効果的なカテゴリデータの可視化" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="320" height="180" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-320x180.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-320x180.jpg 320w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-300x168.jpg 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-768x431.jpg 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-240x135.jpg 240w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123-640x360.jpg 640w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-133123.jpg 780w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Seabornの応用：catplotを使いこなす - 見やすく効果的なカテゴリデータの可視化</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、Seabornのcatplotを使用してカテゴリデータを視覚化する方法について解説しました。catplotを使うことで、データセット内のカテゴリごとのパターンや関係性を理解するのに役立ちます。データの可視化における重要性やSeabornのcatplotがその役割を果たす方法について述べ、読者がデータ解析や洞察を得る際にこの強力なツールを活用することの重要性を強調しました。読者がこの記事を通じてcatplotの基本的な使い方を理解し、さらに応用的なプロットの作成やデータ解析に活かすことができれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.ct-innovation.blog/dl-freetime" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.ct-innovation.blog</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.04.04</div></div></div></div></a>
</div>



<span id="more-2450"></span>



<h2 class="wp-block-heading">displotとは？</h2>



<p class="wp-block-paragraph">displotはSeabornライブラリの中で、1次元の分布を可視化するための便利な関数です。この関数は、ヒストグラムや密度曲線を描画することができ、それらを美しく見栄えの良いグラフにするためのオプションが多数用意されています。以下にdisplotの基本的な使い方と主要なパラメータについて説明します。</p>



<h2 class="wp-block-heading">displotの種類</h2>



<p class="wp-block-paragraph">分布プロットには、主に3つの種類があります。これに一つのオプションが追加できます。</p>



<ol class="wp-block-list">
<li>histplot() (with kind=&#8221;hist&#8221;; the default)</li>



<li>kdeplot() (with kind=&#8221;kde&#8221;)</li>



<li>ecdfplot() (with kind=&#8221;ecdf&#8221;)</li>
</ol>



<ul class="wp-block-list">
<li>rugplot() (with rug=True)</li>
</ul>



<h2 class="wp-block-heading">データの準備</h2>



<p class="wp-block-paragraph">今回は、seabornでサンプルとして準備されているデータを呼び出して使用します。</p>



<pre class="wp-block-code python"><code>import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset("penguins")</code></pre>



<h3 class="wp-block-heading">すべてに共通の引数</h3>



<ul class="wp-block-list">
<li>data: プロットするデータのデータフレーム</li>



<li>x: x軸のカテゴリデータの列名</li>



<li>rug: Trueを指定すると、x軸上にデータ点を小さな垂線で示します。</li>
</ul>



<h2 class="wp-block-heading">histplot：<span class="marker-under">ヒストグラム</span></h2>



<h3 class="wp-block-heading">histplot()の実装</h3>



<p class="wp-block-paragraph">ヒストグラムは、データの値の出現頻度を高さで表すグラフです。横軸はデータの値を表し、縦軸は各区間の値の出現回数(密度や確率に変換することも可能)を表します。</p>



<ul class="wp-block-list">
<li>データを区間(ビン)に分割し、各ビンの値の出現回数をカウントします。</li>



<li>ビンの幅が狭いほど詳細な分布を捉えられますが、過度に狭いと雑音が目立ちます。</li>



<li>ビン数が多すぎると分布の大まかな形を捉えにくくなります。</li>
</ul>



<p class="wp-block-paragraph">ヒストグラムは分布の概形をパッと見て把握できる直感的なグラフです。</p>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm")</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="489" height="488" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175417.png" alt="" class="wp-image-2502" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175417.png 489w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175417-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175417-150x150.png 150w" sizes="(max-width: 489px) 100vw, 489px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<h5 class="wp-block-heading">binwidth</h5>



<p class="wp-block-paragraph">データを区間(ビン)に分割するサイズを変更できる、ただしあまり幅を大きくとりすぎると特徴をうまく捉えられないので注意すること。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", <strong><em>binwidth=20</em></strong>)
sns.displot(data, x="flipper_length_mm", <strong><em>binwidth=3</em></strong>)</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="485" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180642.png" alt="" class="wp-image-2503" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180642.png 485w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180642-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180642-150x150.png 150w" sizes="(max-width: 485px) 100vw, 485px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="486" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180659.png" alt="" class="wp-image-2504" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180659.png 486w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180659-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-180659-150x150.png 150w" sizes="(max-width: 486px) 100vw, 486px" /></figure>
</div>
</div>



<h5 class="wp-block-heading">bins</h5>



<p class="wp-block-paragraph">データを区間(ビン)に分割する個数を変更できる、個数から幅を逆算される</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", <strong><em>bins=15</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="488" height="488" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181449.png" alt="" class="wp-image-2505" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181449.png 488w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181449-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181449-150x150.png 150w" sizes="(max-width: 488px) 100vw, 488px" /></figure>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", <strong><em>hue="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="613" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181818.png" alt="" class="wp-image-2506" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181818.png 613w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-181818-300x237.png 300w" sizes="(max-width: 613px) 100vw, 613px" /></figure>



<h5 class="wp-block-heading">multiple</h5>



<p class="wp-block-paragraph">各バーを重ねる代わりに、バーを「積み重ねる」こともできます。このプロットでは、アウトラインは、変数が1つだけのプロットと一致します。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", hue="species", <strong><em>multiple="stack"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="610" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182448.png" alt="" class="wp-image-2507" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182448.png 610w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182448-300x238.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></figure>



<h5 class="wp-block-heading">col</h5>



<p class="wp-block-paragraph">各バーを重ねたり、積み重ねたりする代わりに、サブプロットとして別のグラフに分けて表示することも可能です。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", <strong><em>col="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1485" height="487" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182845.png" alt="" class="wp-image-2508" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182845.png 1485w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182845-300x98.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182845-1024x336.png 1024w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-182845-768x252.png 768w" sizes="(max-width: 1485px) 100vw, 1485px" /></figure>



<p class="wp-block-paragraph">その他オプションによって、正規化することで観測を助ける方法もあります。</p>



<h2 class="wp-block-heading">kdeplot：<span class="marker-under">カーネル密度推定</span></h2>



<h3 class="wp-block-heading">kdeplot()の実装</h3>



<p class="wp-block-paragraph">密度曲線は、カーネル密度推定(Kernel Density Estimation: KDE)によってデータの確率密度関数を滑らかな曲線で描画します。</p>



<ul class="wp-block-list">
<li>カーネル関数を使って各データ点の周りに滑らかな曲線を重ね合わせ、密度曲線を推定します。</li>



<li>ヒストグラムに比べてビン幅の設定に左右されない滑らかな分布を表せます。</li>



<li>カーネルの種類やカーネル幅のパラメータによって曲線の形状が変わります。</li>
</ul>



<p class="wp-block-paragraph">密度曲線は連続的なデータ分布をなめらかに可視化できる利点があります。</p>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", <strong><em>kind="kde"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="487" height="483" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175430.png" alt="" class="wp-image-2500" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175430.png 487w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175430-300x298.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175430-150x150.png 150w" sizes="(max-width: 487px) 100vw, 487px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<p class="wp-block-paragraph">様々なオプションについては、histplotと同じのものが非常に多いので特に挙動が変わるもの独自のものにのみフォーカスすることにします。</p>



<h5 class="wp-block-heading"><strong><em>bw_adjust</em></strong></h5>



<p class="wp-block-paragraph">ヒストグラムのビン幅と同様に、KDEがデータを正確に表現できるかどうかは、平滑化帯域幅の選択に依存します。帯域幅を調整できます。やりすぎには気を付けましょう。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", kind="kde", <strong><em>bw_adjust=.25</em></strong>)
sns.displot(data, x="flipper_length_mm", kind="kde", <strong><em>bw_adjust=3</em></strong>)</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="490" height="490" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード.png" alt="" class="wp-image-2509" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード.png 490w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-150x150.png 150w" sizes="(max-width: 490px) 100vw, 490px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="489" height="489" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-1.png" alt="" class="wp-image-2510" style="width:400px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-1.png 489w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-1-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-1-150x150.png 150w" sizes="(max-width: 489px) 100vw, 489px" /></figure>
</div>
</div>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", kind="kde", <strong><em>hue="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="615" height="489" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-2.png" alt="" class="wp-image-2511" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-2.png 615w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-2-300x239.png 300w" sizes="(max-width: 615px) 100vw, 615px" /></figure>



<h2 class="wp-block-heading">ecdfplot：<span class="marker-under">累積分布関数</span></h2>



<h3 class="wp-block-heading">ecdfplot() の実装</h3>



<p class="wp-block-paragraph">累積分布関数(ECDF)は、データ点がその値以下になる割合(累積確率)を階段状のグラフで表します。</p>



<ul class="wp-block-list">
<li>データを小さい順に並び替え、各値の累積確率を計算してプロットします。</li>



<li>縦軸は累積確率(0から1)を表します。</li>



<li>データの上側と下側の確率を眺めることができます。</li>
</ul>



<p class="wp-block-paragraph">ECDFは、データの全体的な分布や特定の値を下回る確率を視覚的に把握するのに役立ちます。</p>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm",<strong><em> kind="ecdf"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="487" height="487" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175442.png" alt="" class="wp-image-2501" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175442.png 487w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175442-300x300.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-11-175442-150x150.png 150w" sizes="(max-width: 487px) 100vw, 487px" /></figure>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.displot(data, x="flipper_length_mm", kind="ecdf", <strong><em>hue="species"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="615" height="490" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-3.png" alt="" class="wp-image-2512" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-3.png 615w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/ダウンロード-3-300x239.png 300w" sizes="(max-width: 615px) 100vw, 615px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">displotは、データの分布を可視化するための強力なツールであり、様々な種類のグラフを簡単に作成できることがわかりました。適切に使用することで、データの特徴や傾向を把握し、洞察を得ることができます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2450/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Seabornの応用：catplotを使いこなす &#8211; 見やすく効果的なカテゴリデータの可視化</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2387/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2387/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Thu, 04 Apr 2024 08:36:06 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[seaborn]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[pairplot]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[データ解析]]></category>
		<category><![CDATA[可視化]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2387</guid>

					<description><![CDATA[Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもcatplotは、カテゴリデータの視覚化に特化した非常に便利な機能です。本記事では、catplotの基 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonのデータ可視化ライブラリSeabornは、データ分析の効率とわかりやすさを格段に高めてくれます。その中でもcatplotは、カテゴリデータの視覚化に特化した非常に便利な機能です。本記事では、catplotの基本的な使い方から応用まで、実例を交えながら解説していきます。</p>



<span id="more-2387"></span>



<h2 class="wp-block-heading">Catplotとは？</h2>



<p class="wp-block-paragraph">Catplotは、カテゴリ型の変数を含むデータセットの関係を可視化するためのSeabornの機能です。カテゴリ型の変数とは、離散的な値を持つ変数のことであり、性別や地域などが代表的な例です。Catplotは、カテゴリごとにデータを分析し、パターンや相関関係を可視化するのに役立ちます。</p>



<h2 class="wp-block-heading">Catplotの種類</h2>



<p class="wp-block-paragraph">カテゴリプロットでは、主に3つの種類があります。そこから表現方法の違いで細分化すると8種類となります。</p>



<ol class="wp-block-list">
<li>Categorical scatterplots：<span class="marker-under">散布図</span>
<ul class="wp-block-list">
<li>stripplot() (with kind=&#8221;strip&#8221;; the default)</li>



<li>swarmplot() (with kind=&#8221;swarm&#8221;)</li>
</ul>
</li>



<li>Categorical distribution plots：<span class="marker-under">分布図</span>
<ul class="wp-block-list">
<li>boxplot() (with kind=&#8221;box&#8221;)</li>



<li>boxenplot() (with kind=&#8221;boxen&#8221;)</li>



<li>violinplot() (with kind=&#8221;violin&#8221;)</li>
</ul>
</li>



<li>Categorical estimate plots：<span class="marker-under">推定プロット</span>
<ul class="wp-block-list">
<li>barplot() (with kind=&#8221;bar&#8221;)</li>



<li>countplot() (with kind=&#8221;count&#8221;)</li>



<li>pointplot() (with kind=&#8221;point&#8221;)</li>
</ul>
</li>
</ol>



<h2 class="wp-block-heading">データの準備</h2>



<p class="wp-block-paragraph">今回は、seabornでサンプルとして準備されているデータを呼び出して使用します。</p>



<pre class="wp-block-code python"><code>import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")</code></pre>



<h3 class="wp-block-heading">すべてに共通の引数</h3>



<ul class="wp-block-list">
<li>data: プロットするデータのデータフレーム</li>



<li>x: x軸のカテゴリデータの列名</li>



<li>y: y軸のデータの列名</li>



<li>row/col: 行列方向にプロットを小分けする変数の列名</li>
</ul>



<h2 class="wp-block-heading">Categorical scatterplots：<span class="marker-under">散布図</span></h2>



<h3 class="wp-block-heading">stripplot()の実装</h3>



<p class="wp-block-paragraph">Strip Plotは、カテゴリごとのデータの分布や個々のデータ点を視覚的に表現するのに役立ちます。</p>



<ol class="wp-block-list">
<li><strong>個々のデータ点の表示</strong>: 各データポイントがそのままプロットされ、その分布が視覚的にわかりやすくなります。これにより、データの分散や外れ値などを素早く把握することができます。</li>



<li><strong>カテゴリごとの比較</strong>: 異なるカテゴリに属するデータの分布を比較するのに適しています。カテゴリごとにデータポイントの密度や分布を比較することができます。</li>



<li><strong>Jittering（ジッタリング）</strong>: データポイントが重なる場合、ランダムなノイズを追加して、データの重なりを解消することができます。これにより、データの分布がより明確に表示されます。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code"><code>sns.catplot(x="day", y="total_bill", data=tips);</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="505" height="489" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-144148.png" alt="" class="wp-image-2388" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-144148.png 505w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-144148-300x290.png 300w" sizes="(max-width: 505px) 100vw, 505px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<h5 class="wp-block-heading">jitter</h5>



<p class="wp-block-paragraph">一つの軸に対してプロットする際の横（縦）方向のずれの値を設定できる箇所だが、Falseを置くことでずれをなくすことも可能</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", <strong><em>jitter=False</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="501" height="485" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-145805.png" alt="" class="wp-image-2390" style="width:499px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-145805.png 501w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-145805-300x290.png 300w" sizes="(max-width: 501px) 100vw, 501px" /></figure>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じて色分けを行うことができる。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", <strong><em>hue="sex"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="583" height="490" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150114.png" alt="" class="wp-image-2391" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150114.png 583w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150114-300x252.png 300w" sizes="(max-width: 583px) 100vw, 583px" /></figure>



<h5 class="wp-block-heading">dodge</h5>



<p class="wp-block-paragraph">上記のhueで色分けを行った場合に、そのカテゴリごとに軸を避けて描画できます。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", hue='sex', <strong><em>dodge=True</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="579" height="483" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150458.png" alt="" class="wp-image-2392" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150458.png 579w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-150458-300x250.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></figure>



<p class="wp-block-paragraph">これ以外にも今縦に積み上げているものをそのまま90度倒して横方向にするオプションに加え、プロットの色を指定したりサイズを指定することが可能です。</p>



<h3 class="wp-block-heading">swarmplot()の実装</h3>



<p class="wp-block-paragraph">Strip Plotと同様に、個々のデータポイントをプロットしますが、Swarm Plotではデータポイント同士が重ならないように配置されます。しばしば「ミツバチの群れ」と称されるような見た目にかわります。</p>



<ol class="wp-block-list">
<li><strong>個々のデータ点の表示</strong>: 各データポイントがそのままプロットされ、その分布が視覚的にわかりやすくなります。これにより、データの分散や外れ値などを素早く把握することができます。</li>



<li><strong>データポイントの重なり防止</strong>: データポイント同士が重ならないように配置されます。これにより、データポイントの密度や分布をより正確に理解することができます。</li>



<li><strong>カテゴリごとの比較</strong>: 異なるカテゴリに属するデータの分布を比較するのに適しています。カテゴリごとにデータポイントの密度や分布を比較することができます。</li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-3 sbs-line sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/cropped-図1-e1709253991344.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">あまりに多いデータセットには向いていないようです。公式がアナウンスしています。</p>
</div></div>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", hue="sex", <strong><em>kind="swarm"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="582" height="486" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-151310.png" alt="" class="wp-image-2393" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-151310.png 582w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-151310-300x251.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></figure>



<p class="wp-block-paragraph">様々なオプションについては、stripplotと同じのものが非常に多いので割愛します。</p>



<h2 class="wp-block-heading">Categorical distribution plots：<span class="marker-under">分布図</span></h2>



<h3 class="wp-block-heading">boxplot()の実装</h3>



<p class="wp-block-paragraph">データセットの中央値、四分位数、外れ値などの統計的特性を可視化するのに役立ちます。以下に、Box Plotの主な特徴と使用方法を説明します。</p>



<ol class="wp-block-list">
<li><strong>中央値と四分位範囲の表示</strong>: 箱の中央にはデータの中央値が表示され、箱の上下の端には第1四分位数（25パーセンタイル）と第3四分位数（75パーセンタイル）が表示されます。</li>



<li><strong>箱の高さ</strong>: 箱の高さは、データの第1四分位数から第3四分位数までの範囲であり、データの中央50%を表します。箱の高さが短いほどデータのばらつきが小さいことを意味します。</li>



<li><strong>ひげの表示</strong>: 箱の上下に延びる線（ひげ）は、データの範囲を表します。通常、ひげの長さは第1四分位数から1.5倍の四分位範囲と第3四分位数から1.5倍の四分位範囲の外にあるデータポイントまで伸びます。外れ値はひげの外側に単独で表示されます。</li>



<li><strong>外れ値の表示</strong>: 箱ひげ図は、データの中にある外れ値を視覚的に特定するのに役立ちます。外れ値は通常、ひげの外側に単独でプロットされます。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code"><code>sns.catplot(x="day", y="total_bill",<strong><em> kind="box"</em></strong>, data=tips)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="506" height="488" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160147.png" alt="" class="wp-image-2395" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160147.png 506w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160147-300x289.png 300w" sizes="(max-width: 506px) 100vw, 506px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<p class="wp-block-paragraph">様々なオプションについては、stripplotと同じのものが非常に多いので特に挙動が変わるもの独自のものにのみフォーカスすることにします。</p>



<h5 class="wp-block-heading">hue</h5>



<p class="wp-block-paragraph">ここに設定した列名のカテゴリに応じてそれぞれを箱ひげ図にして色分け描画できる。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", <strong><em>hue="smoker"</em></strong>, kind="box")</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="555" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160200.png" alt="" class="wp-image-2394" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160200.png 555w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-160200-300x262.png 300w" sizes="(max-width: 555px) 100vw, 555px" /></figure>



<h5 class="wp-block-heading">fill</h5>



<p class="wp-block-paragraph">塗りつぶしを行うかどうかを設定できます。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", hue="smoker", kind="box", <strong><em>fill=False</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="557" height="487" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-163315.png" alt="" class="wp-image-2397" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-163315.png 557w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-163315-300x262.png 300w" sizes="(max-width: 557px) 100vw, 557px" /></figure>



<h3 class="wp-block-heading">boxenplot()の実装</h3>



<p class="wp-block-paragraph">Boxen Plotは、データの分布や中央値、四分位数などの統計的特性を視覚的に表現するのに役立ちます。以下のような特徴があります。</p>



<ol class="wp-block-list">
<li><strong>拡張された箱ひげ図</strong>: 通常の箱ひげ図よりも多くの情報を提供します。特に、中央値や四分位数だけでなく、さらに深い統計情報を表示します。</li>



<li><strong>サブグループの可視化</strong>: データをサブグループに分割して比較する場合に便利です。これにより、異なるカテゴリや条件におけるデータの分布を比較することができます。</li>



<li><strong>データの密度の表示</strong>: データの分布に関する情報をより詳細に知ることができます。特に、データの密度が高い領域や外れ値が存在する領域を明確に表示します。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code"><code>sns.catplot(x="day", y="total_bill",<strong><em> kind="boxen"</em></strong>, data=tips)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="507" height="488" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-164337.png" alt="" class="wp-image-2398" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-164337.png 507w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-164337-300x289.png 300w" sizes="(max-width: 507px) 100vw, 507px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<p class="wp-block-paragraph">様々なオプションについては、stripplotと同じのものが非常に多いので特に挙動が変わるもの独自のものにのみフォーカスすることにします。</p>



<h5 class="wp-block-heading">saturation</h5>



<p class="wp-block-paragraph">グラフを描画する際に彩度を下げた方が見栄えがよくなることがよくあります、そういったとき、塗りつぶしの色を描画する元の彩度の比率で指定することができます。</p>



<pre class="wp-block-code python"><code>sns.catplot(x="day", y="total_bill", kind="boxen", data=tips, <strong><em>saturation=.2</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="503" height="490" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-171731.png" alt="" class="wp-image-2399" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-171731.png 503w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-171731-300x292.png 300w" sizes="(max-width: 503px) 100vw, 503px" /></figure>



<h3 class="wp-block-heading">violinplot() の実装</h3>



<p class="wp-block-paragraph">バイオリンプロットは、データの分布形状や中央値、四分位範囲などの統計的特性を視覚的に表現するのに役立ちます。以下に、Violin Plotの主な特徴と使用方法を説明します。</p>



<ol class="wp-block-list">
<li><strong>カーネル密度推定</strong>: バイオリンプロットは、各データセットのカーネル密度推定を行い、データの分布をなめらかな曲線で表現します。これにより、データの分布形状が視覚的に把握できます。</li>



<li><strong>中央値と四分位範囲の表示</strong>: バイオリンプロットには、中央値や四分位範囲などの要約統計量が含まれており、各データセットの中央値と四分位範囲を示します。</li>



<li><strong>データの密度</strong>: バイオリンプロットの幅は、各データセットの密度を表します。幅が広いほどデータが集中していることを示し、幅が狭いほどデータが分散していることを示します。</li>



<li><strong>分布の比較</strong>: 複数のデータセットを同時にプロットすることで、異なるグループ間のデータ分布を比較することができます。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code"><code>sns.catplot(data=tips, x="total_bill", y="day", hue="sex", <em><strong>kind="violin"</strong></em>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="575" height="483" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-182341.png" alt="" class="wp-image-2403" style="width:570px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-182341.png 575w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-182341-300x252.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></figure>



<h4 class="wp-block-heading">様々なオプション</h4>



<p class="wp-block-paragraph">様々なオプションについては、stripplotと同じのものが非常に多いので特に挙動が変わるもの独自のものにのみフォーカスすることにします。</p>



<h5 class="wp-block-heading">split</h5>



<p class="wp-block-paragraph">バイオリンを上下に「分割」することも可能で、先ほどの二つのバイオリンプロットの上側を男性、下側を女性にすることでスペースをより効率的に使用できます。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="total_bill", y="day", hue="sex", kind="violin", split=True)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="579" height="485" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-221843-e1709818254956.png" alt="" class="wp-image-2404" style="width:570px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-221843-e1709818254956.png 579w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-221843-e1709818254956-300x251.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></figure>



<h5 class="wp-block-heading">inner</h5>



<p class="wp-block-paragraph">ヴァイオリン内部のデータ表現を変更できます。デフォルトは「box」で箱ひげ図が描画される、「point」「stick」で各測定値にポイントやラインを描画が可能であり、「quart」で四分位数を表示できます。</p>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="total_bill", y="day", hue="sex", kind="violin", split=True, <strong><em>inner='stick'</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="582" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-223035.png" alt="" class="wp-image-2405" style="width:570px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-223035.png 582w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-223035-300x249.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></figure>



<h2 class="wp-block-heading">Categorical estimate plots：<span class="marker-under">推定プロット</span></h2>



<h3 class="wp-block-heading">barplot() の実装</h3>



<p class="wp-block-paragraph">Bar Plot（棒グラフ）は、カテゴリ別のデータを比較するために使用されるグラフィカルな手法です。カテゴリ別の数値データを棒状の縦棒で表現し、それらの高さを用いて相対的な値を比較します。以下に、Bar Plotの主な特徴と使用方法を説明します。</p>



<ol class="wp-block-list">
<li><strong>カテゴリ別の比較</strong>: Bar Plotは、異なるカテゴリのデータを簡単に比較できるようにします。例えば、商品カテゴリごとの売上や各月の売上など、カテゴリごとのデータを比較するのに適しています。</li>



<li><strong>相対的な大きさの視覚化</strong>: 棒の高さは、対応するカテゴリのデータの値を表します。高さが高いほど、そのカテゴリの値が大きいことを示します。</li>



<li><strong>複数の変数の比較</strong>: 複数のカテゴリや条件を含むデータセットの場合、複数の棒グラフを並べて表示することで、異なる条件やカテゴリ間の比較が容易になります。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill",<strong><em> kind="bar"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="498" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-225359.png" alt="" class="wp-image-2406" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-225359.png 498w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-225359-300x292.png 300w" sizes="(max-width: 498px) 100vw, 498px" /></figure>



<h3 class="wp-block-heading">countplot() の実装</h3>



<p class="wp-block-paragraph">Count Plotは、カテゴリごとのデータの出現回数を可視化するためのグラフです。各カテゴリに属するデータ点の数を棒グラフやヒストグラムの形式で表示し、カテゴリごとの頻度を比較します。主にカテゴリ型の変数の分布を理解するために使用されます。</p>



<ol class="wp-block-list">
<li><strong>カテゴリの頻度の比較</strong>: Count Plotは、異なるカテゴリのデータの出現回数を直感的に比較できるようにします。カテゴリごとの頻度の違いを視覚的に把握できます。</li>



<li><strong>データの集計と可視化</strong>: データセット内のカテゴリデータの出現回数を集計し、それを棒グラフやヒストグラムの形式で視覚化します。</li>



<li><strong>カテゴリ型変数の分析</strong>: 主にカテゴリ型の変数（例：性別、地域、カテゴリなど）の分布を分析するのに適しています。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", <strong><em>kind="count"</em></strong>)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="501" height="484" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231023.png" alt="" class="wp-image-2407" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231023.png 501w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231023-300x290.png 300w" sizes="(max-width: 501px) 100vw, 501px" /></figure>



<h3 class="wp-block-heading">pointplot() の実装</h3>



<p class="wp-block-paragraph">Point Plotは、カテゴリ変数と数値変数の関係を可視化するためのグラフです。各カテゴリの平均値や中央値などの集計値をポイントとしてプロットし、その間の信頼区間を線で表現します。Point Plotは、異なるカテゴリ間の数値の比較や傾向の把握に役立ちます。</p>



<ol class="wp-block-list">
<li><strong>カテゴリ間の数値比較</strong>: Point Plotは、カテゴリごとの数値の平均や中央値をポイントで示すことで、異なるカテゴリ間の数値の比較を容易にします。</li>



<li><strong>信頼区間の表示</strong>: ポイントの周りに表示される線は、信頼区間を表します。これにより、集計値のばらつきや統計的な信頼性を視覚的に評価できます。</li>



<li><strong>傾向の把握</strong>: カテゴリごとのポイントと信頼区間を比較することで、異なるカテゴリ間の傾向やパターンを把握するのに役立ちます。</li>
</ol>



<h4 class="wp-block-heading">最小コード</h4>



<pre class="wp-block-code python"><code>sns.catplot(data=tips, x="day", y="total_bill", <strong><em>kind="point"</em></strong>, hue="sex")</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="583" height="483" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231939.png" alt="" class="wp-image-2408" style="width:500px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231939.png 583w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-231939-300x249.png 300w" sizes="(max-width: 583px) 100vw, 583px" /></figure>



<h5 class="wp-block-heading">それぞれのスタイルを個別に変更する</h5>



<ol class="wp-block-list">
<li><strong>カラーマップの指定</strong>: paletteパラメータを使用して、辞書型で異なるカテゴリに対応する色を指定することができます。これにより、デフォルトの色以外の色を使用してプロットを作成できます。</li>



<li><strong>ラインスタイルの指定</strong>: linestylesパラメータを使用して、リスト型で異なるカテゴリに対応するラインのスタイルを指定することができます。</li>



<li><strong>マーカーの指定</strong>: markersパラメータを使用して、リスト型で異なるカテゴリに対応するマーカーを指定することができます。</li>
</ol>



<pre class="wp-block-code"><code>sns.catplot(
    data=tips, x="day", y="total_bill", kind="point", hue="sex",
<strong><em>    palette={"Male": "g", "Female": "m"},
    markers=&#91;"^", "o"], linestyles=&#91;"-", "--"]</em></strong>
)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="581" height="480" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-232341.png" alt="" class="wp-image-2409" style="width:580px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-232341.png 581w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/スクリーンショット-2024-03-07-232341-300x248.png 300w" sizes="(max-width: 581px) 100vw, 581px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Seabornのcatplotを使用することで、様々な種類のカテゴリデータを効果的に可視化することができます。散布図、分布図、推定プロットなど、さまざまな視覚化手法を使いこなし、データの特徴やパターンを理解しましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2387/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその３</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2434/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2434/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 06:16:52 +0000</pubDate>
				<category><![CDATA[AI/MachineLearning]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Chainer]]></category>
		<category><![CDATA[CNN]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ウォーリー]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2434</guid>

					<description><![CDATA[機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトとして「ウォーリーを探せ」の絵本に挑戦する構想を紹介します。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a target="_blank" href="https://www.ct-innovation.blog/dl-freetime/programming/python/2417/" title="畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその２" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="320" height="180" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-320x180.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-320x180.png 320w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-240x135.png 240w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその２</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、Pythonの機械学習ライブラリChainerを使って、人気絵本「ウォーリーを探せ」の主人公ウォーリーを自動認識するプロジェクトに挑戦します。画像認識の基礎から教師データの収集、モデル構築、学習プロセスまでを詳しく解説しています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.ct-innovation.blog/dl-freetime" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.ct-innovation.blog</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.02.09</div></div></div></div></a>
</div>



<span id="more-2434"></span>



<h2 class="wp-block-heading">検証用データの収集</h2>



<p class="wp-block-paragraph">まずは、正解データとして前回も利用した購入した本からウォーリーを再び探してデータを集めていきます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-3 sbs-line sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/cropped-図1-e1709253991344.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">あまりこの能力の向上はうれしくないですが…順調に私の探索能力が上がっていっており、早いとページを開いて数秒で見つけられるようになってきています。</p>
</div></div>



<p class="wp-block-paragraph">次に、不正解データを用意します。ここで正解と判断されたくないけど紛らわしいキャラクターを使ってみたいと思います。ウォーリーにはガールフレンドがいるんですが、これがそれなりに似ています。名前は「ウェンダ」というらしいです。見た目はこんな感じです。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="141" height="141" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171101171940.png" alt="" class="wp-image-2436"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>
</div>



<h2 class="wp-block-heading">プログラム実装</h2>



<pre class="wp-block-code python"><code>def return_result(data_input):
    model = cnn.MyCNN(2)
    serializers.load_npz("mymodel.npz", model)
    x = Variable(np.array(&#91;data_input], dtype=np.float32))
    y = model.forward(x)
    return y

def main():
    train_pathes = {'folder_path': '0'}
    for fil in train_pathes.keys():
        append_data(fil, train_pathes&#91;fil], 'train')
        N = len(x_train_data)
        x_train_data_np = np.array(x_train_data, dtype=np.float32)
        x_train_data_reshape = x_train_data_np.reshape(N, 1, 60, 60)
        x_train_data_reshape /= 255 # to 0-1
 
        for i in range(len(x_train_data_reshape)):
            data_input = x_train_data_reshape&#91;i]
            r_data = return_result(data_input)
            data = np.argmax(r_data.data)
            if data == 1:
                print(str(t_train_data&#91;i]) + 'はウォーリー')
            else:
                print(str(t_train_data&#91;i]) + 'は違う')</code></pre>



<h2 class="wp-block-heading">検証結果</h2>



<p class="wp-block-paragraph">以下のファイル群をプログラムにかけて結果を確認してみます。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="481" height="246" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171101172306.png" alt="" class="wp-image-2522" style="width:450px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171101172306.png 481w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171101172306-300x153.png 300w" sizes="(max-width: 481px) 100vw, 481px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="158" height="146" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171101172315.png" alt="" class="wp-image-2523" style="width:160px"/></figure>
</div>
</div>



<p class="wp-block-paragraph">ちゃんと判断してくれた！ひとまず成功ですね。よかった。とりあえずは第一関門は突破しました。次回は走査的に全体を探索していくプログラムを組んで実際にウォーリーを探していきます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2434/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその２</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2417/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2417/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Fri, 09 Feb 2024 01:39:31 +0000</pubDate>
				<category><![CDATA[AI/MachineLearning]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Chainer]]></category>
		<category><![CDATA[CNN]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ウォーリー]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2417</guid>

					<description><![CDATA[機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトとして「ウォーリーを探せ」の絵本に挑戦する構想を紹介します。</p>



<span id="more-2417"></span>



<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">前回の記事では、「ウォーリーを探せ」の主人公ウォーリーを自動認識するプロジェクトに挑戦することを決めました。今回は教師用データを集め、Chainerを用いたCNNの構築に挑戦します。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a target="_blank" href="https://www.ct-innovation.blog/dl-freetime/programming/python/279/" title="畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその１" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="320" height="180" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-320x180.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-320x180.jpg 320w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-240x135.jpg 240w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-640x360.jpg 640w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその１</div><div class="blogcard-snippet internal-blogcard-snippet">このブログ記事では、畳み込みニューラルネットワーク（CNN）について解説しています。初めに、CNNの基本的な概念について説明し、その後に実際の題材として、CNNを用いて「ウォーリーを探せ」の絵本のキャラクターを検出するプロジェクトに取り組む構想を紹介しています。また、題材選定の経緯や教師データの収集についても触れています。この記事を通じて、機械学習におけるCNNの応用や実践的な活用方法について興味を持つ読者に向けた情報提供を行っています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.ct-innovation.blog/dl-freetime" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.ct-innovation.blog</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.03.09</div></div></div></div></a>
</div>



<h2 class="wp-block-heading">教師データの収集</h2>



<p class="wp-block-paragraph"> 画像認識AIを学習させるには、教師データが必要不可欠です。ウォーリーの絵本から手作業で画像を切り抜き、約40枚のウォーリー画像と100枚の非ウォーリー画像を用意しました。</p>



<h3 class="wp-block-heading">問題その1：画質</h3>



<p class="wp-block-paragraph">購入した本がポケット版であったことから原本の1/4程度に縮小されているため、画質が粗いという課題が発生しました。後の学習プロセスで工夫することにしました。</p>



<h3 class="wp-block-heading">問題その2：ウォーリー作画問題</h3>



<p class="wp-block-paragraph">画像を切り抜きながら感じた大きな問題です。</p>



<p class="wp-block-paragraph">よく漫画とかで初期のころと最後の方で絵のタッチとかが変わることってあると思うのですが、それと似たような現象がウォーリーを探せにも起こっています。機械学習をさせる側にしては大きな問題です。参考に抜き出したデータをいくつか貼ります。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="133" height="176" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171027150642.png" alt="" class="wp-image-2428" style="width:auto;height:170px"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="140" height="149" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171027150657.png" alt="" class="wp-image-2429" style="width:auto;height:170px"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="157" height="144" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171027153714.png" alt="" class="wp-image-2430" style="width:auto;height:170px"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="50" height="51" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171026090425.png" alt="" class="wp-image-2431" style="width:auto;height:170px"/></figure>
</div>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-3 sbs-line sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/cropped-図1-e1709253991344.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">こう見るとこれらが全部ウォーリーだと判断して見つけられる人間の補完力に驚かせられます。</p>
</div></div>



<h2 class="wp-block-heading">ライブラリの選定とインストール</h2>



<p class="wp-block-paragraph">Chainerを用いて学習を実行しました。40エポックの学習で早い段階で収束が確認されましたが、実際の判別性能は次回のテストで確認する予定です。ただし、Chainerは開発をやめてしまったので今は利用は推奨されません。今なら、PyTorchなどを利用しましょう。</p>



<h2 class="wp-block-heading">CNN モデルの構築</h2>



<p class="wp-block-paragraph"> 畳み込みニューラルネットワーク(CNN)を使ってモデルを構築しました。6層のディープラーニングモデルを設計し、入力画像からウォーリーか否かを2値分類できるようにしています。</p>



<pre class="wp-block-code python"><code># coding=utf-8 
from chainer import Chain 
import chainer.links as L 
import chainer.functions as F 

class MyCNN(Chain):
    def __init__(self, n_out):
        super(MyCNN, self).__init__(
            conv1=L.Convolution2D(in_channels=1, out_channels=10, 　　　　　　　　　　　　　　
                                  ksize=5, stride=1, pad=2), 
            conv2=L.Convolution2D(in_channels=None, out_channels=20, 　
　　　　　　　　　　　　　　　　　ksize=5, stride=1, pad=2),
            l1=L.Linear(None, 500),
            l2=L.Linear(500, 500),
            l3=L.Linear(500, n_out)
        )
    def forward(self, x):
        h1 = self.conv1(x)
        h2 = self.conv2(h1)
        h3 = F.relu(self.l1(h2))
        h4 = F.relu(self.l2(h3))
        out = self.l3(h4)
        return out</code></pre>



<h2 class="wp-block-heading">学習とモデルの保存 </h2>



<p class="wp-block-paragraph">収集した教師データを使い、ミニバッチ学習による反復学習を実施しました。損失関数にはソフトマックス関数を使用し、40エポックで収束しました。学習済みモデルをファイルに保存しました。</p>



<pre class="wp-block-code python"><code>model = cnn.MyCNN(2) 
optimizer = optimizers.Adam() 
optimizer.setup(model) 
n_epoch = 40 
batch_size = 30 

for epoch in range(n_epoch):
    sum_loss = 0
    sum_accuracy = 0
    perm = np.random.permutation(N)
    for i in range(0, N, batch_size):
        x = Variable(data&#91;perm&#91;i:i+batch_size]]) 
        t = Variable(label_data&#91;perm&#91;i:i+batch_size]])
        y = model.forward(x) model.zerograds() 
        loss = F.softmax_cross_entropy(y, t) 
        acc = F.accuracy(y, t) 
        loss.backward() 
        optimizer.update()

serializers.save_npz("wally.npz", model)</code></pre>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="627" height="467" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171031171744.png" alt="" class="wp-image-2432" style="width:600px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171031171744.png 627w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/20171031171744-300x223.png 300w" sizes="(max-width: 627px) 100vw, 627px" /></figure>



<h2 class="wp-block-heading">次のステップ</h2>



<p class="wp-block-paragraph">次は収束したモデルを使って、実際にウォーリーの認識が可能かテストを行う予定です。プロジェクト全体を通して、機械学習の基礎からモデル構築、学習プロセスまで実践的に学ぶことができました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2417/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>畳み込みニューラルネットワーク（CNN）の魅力とウォーリーを探せプロジェクトその１</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/279/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/279/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Tue, 09 Mar 2021 01:06:00 +0000</pubDate>
				<category><![CDATA[AI/MachineLearning]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Chainer]]></category>
		<category><![CDATA[CNN]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ウォーリー]]></category>
		<guid isPermaLink="false">http://ct-innovation01.xyz/DL-Freetime/?p=279</guid>

					<description><![CDATA[機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク（CNN）は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトとして「ウォーリーを探せ」の絵本に挑戦する構想を紹介します。</p>



<span id="more-279"></span>



<h2 class="wp-block-heading">畳み込みニューラルネットワークの基礎</h2>



<p class="wp-block-paragraph">畳み込みニューラルネットワーク（Convolution Neural Network)は、画像分析を行うための機械学習手法の一つです。画像内のパターンを学習し、物体や顔などを認識することが可能です。また、最近では自然言語処理にも応用されています。</p>



<p class="wp-block-paragraph">CNNは主に「<span class="marker-under-blue">畳み込み</span>」と「<span class="marker-under-red">ニューラルネットワーク</span>」の処理から成り立っています。畳み込みは画像の特徴を抽出し、ニューラルネットワークはその特徴を分析します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="353" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1-1024x353.png" alt="" class="wp-image-2423" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1-1024x353.png 1024w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1-300x104.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1-768x265.png 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1-1536x530.png 1536w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-1.png 1663w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<cite>https://world4jason.gitbooks.io/research-log/content/deepLearning/CNN/Model%20&amp;%20ImgNet/lenet.html</cite></blockquote>



<h3 class="wp-block-heading"><strong>畳み込みとプーリング</strong></h3>



<p class="wp-block-paragraph">畳み込み処理は、画像から特徴を抽出する重要な工程です。この処理をさらに分割すると、「畳み込み」と「プーリング」という手法があります。畳み込みでは、画像全体を適当なサイズのフィルタで走査し、特徴を抽出します。プーリングは、画像サイズを縮小しつつ特徴を保持する処理です。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="780" height="269" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet.png" alt="" class="wp-image-2422" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet.png 780w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-300x103.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-768x265.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p class="wp-block-paragraph"><br>もう一度この図に戻ると、C1とC3と書いているところが<span class="marker-under-red"><span class="marker-under-blue">畳み込み</span></span>でS2とS4と書いているところが<span class="marker-under-red">プーリング</span>です。</p>



<h4 class="wp-block-heading">畳み込み</h4>



<p class="wp-block-paragraph"><span class="marker-under-red"><span class="marker-under-blue">畳み込み</span></span>は、元の画像から適当なサイズのフィルタを用いて<strong>特徴点を抽出する処理</strong>です。以下のようなことを行っています。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box">
<ul class="wp-block-list">
<li>元の画像の左上端にフィルタをかけて特徴を抽出する</li>



<li>画像全体を走査的にフィルタがスライドしながら繰り返す</li>



<li>走査後に特徴のみを抽出した新たな画像を作り上げる</li>



<li>フィルタの数だけ新たな画像が出力される</li>
</ul>
</div>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="319" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv1-1024x319.png" alt="" class="wp-image-2418" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv1-1024x319.png 1024w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv1-300x93.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv1-768x239.png 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv1.png 1072w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="780" height="274" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv4.png" alt="" class="wp-image-2419" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv4.png 780w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv4-300x105.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Conv4-768x270.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p class="wp-block-paragraph">画像で示していてわかりやすいサイトがあったのでこちらからお借りしました。しっかりビジュアライズされているので、中身まで理解したい方はぜひこちら見てください。</p>



<h4 class="wp-block-heading">プーリング</h4>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="780" height="269" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet.png" alt="" class="wp-image-2422" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet.png 780w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-300x103.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/lenet-768x265.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p class="wp-block-paragraph"><br>前章の<span class="marker-under-red"><span class="marker-under-blue">畳み込み</span></span>で、フィルタの数によって画像の枚数が増えます。最終的には『ニューラルネットワーク』を行い、分析をするのですがその際に入力するデータの数がどんどん増えてしまいます。これを防ぐために<span class="marker-under-red">プーリング</span>では特徴を残しつつ画像サイズを小さくする処理を行っています。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1012" height="336" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_1.png" alt="" class="wp-image-2421" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_1.png 1012w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_1-300x100.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_1-768x255.png 768w" sizes="(max-width: 1012px) 100vw, 1012px" /></figure>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1014" height="332" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_2.png" alt="" class="wp-image-2420" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_2.png 1014w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_2-300x98.png 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/03/CNN_Pooling_2-768x251.png 768w" sizes="(max-width: 1014px) 100vw, 1014px" /></figure>



<p class="wp-block-paragraph">先ほどと同じサイトから参照させていただきました。</p>



<h2 class="wp-block-heading">題材を探せ</h2>



<p class="wp-block-paragraph">CNNの優れた特性を活かし、楽しい題材を選びました。「ウォーリーを探せ」の絵本は、赤白のボーダーの服に帽子と眼鏡をつけたキャラクターを探す遊び絵本です。この楽しいテーマにCNNを適用し、「ウォーリー vs. AI」という無謀な挑戦を始めることにしました。</p>



<h3 class="wp-block-heading"><strong>ウォーリーを探せ</strong></h3>



<p class="wp-block-paragraph">1987年に発表されたこの絵本は、幅広い世代に親しまれています。ウォーリーを探す喜びは、誰もが体験したことがあるでしょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="768" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-1024x768.jpg" alt="" class="wp-image-2060" style="width:800px" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-1024x768.jpg 1024w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-300x225.jpg 300w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067-768x576.jpg 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2019/03/DSCF3067.jpg 780w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">そもそもこの本を知ってる人はどれぐらいいるのかなと思ってたら、少し前は（2017/10/24）しぶちかの広告にウォーリーいたし、テレビCMで物件探しのCMにも出ていたのである程度の知名度はあるようですね。</p>



<h2 class="wp-block-heading"><strong>アプローチ方法</strong></h2>



<p class="wp-block-paragraph">ウォーリーを探すためのアプローチとして、以下の二つの方法を検討しました。</p>



<ol class="wp-block-list">
<li><strong>CNNを用いた学習モデルの構築と画像の走査による検出</strong></li>



<li><strong>OpenCVを活用した物体検出によるウォーリーの捜索</strong></li>
</ol>



<p class="wp-block-paragraph">今回は、CNNの勉強のために一つ目のアプローチを採用することにしました。</p>



<h3 class="wp-block-heading"><strong>教師データの収集</strong></h3>



<p class="wp-block-paragraph">CNNの学習には正解の画像が必要ですが、インターネット上で適切な教師データを見つけることが難しいことがわかりました。そのため、TSUTAYAで絵本を購入し、自らウォーリーを探して写真を撮ることで教師用の画像を収集することにしました。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="768" height="1024" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171026201932.jpg" alt="" class="wp-image-167" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171026201932.jpg 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171026201932-225x300.jpg 225w" sizes="(max-width: 768px) 100vw, 768px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="768" height="1024" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171109142203.jpg" alt="" class="wp-image-169" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171109142203.jpg 768w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2018/06/20171109142203-225x300.jpg 225w" sizes="(max-width: 768px) 100vw, 768px" /></figure>
</div>
</div>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">機械学習の世界は、私たちに新たな挑戦を促します。CNNを使って「ウォーリーを探せ」のプロジェクトに取り組むことで、機械学習の基礎を学びながら楽しい時間を過ごすことができます。これからの記事で、プロジェクトの進捗や結果を共有していきます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/279/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>matplotlibの応用: グラフを複数配置する</title>
		<link>https://www.ct-innovation.blog/dl-freetime/programming/python/2222/</link>
					<comments>https://www.ct-innovation.blog/dl-freetime/programming/python/2222/#respond</comments>
		
		<dc:creator><![CDATA[Yuki]]></dc:creator>
		<pubDate>Thu, 14 Mar 2024 15:17:03 +0000</pubDate>
				<category><![CDATA[matplotlib]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[subplot]]></category>
		<category><![CDATA[可視化]]></category>
		<category><![CDATA[複数]]></category>
		<guid isPermaLink="false">https://www.ct-innovation.blog/dl-freetime/?p=2222</guid>

					<description><![CDATA[本記事では、Pythonのデータ可視化ライブラリであるmatplotlibのsubplot機能に焦点を当て、その基本的な使い方や応用例を解説します。subplotを使用することで、1つの図に複数のプロットを配置して、デー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">本記事では、Pythonのデータ可視化ライブラリであるmatplotlibのsubplot機能に焦点を当て、その基本的な使い方や応用例を解説します。subplotを使用することで、1つの図に複数のプロットを配置して、データの比較や関係性の可視化を容易に行うことができます。以下では、具体的なコード例を交えながら、subplotの使い方を詳しく解説します。</p>



<span id="more-2222"></span>



<h2 class="wp-block-heading">matplotlibとは</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像（各種ベクトル画像形式も含む）として保存することもできる（Wiki参照）</p>
<cite><a rel="noopener" target="_blank" href="https://ja.wikipedia.org/wiki/Matplotlib">matplotlib &#8211; Wikipedia</a></cite></blockquote>



<h2 class="wp-block-heading"><strong>subplotの基本的な使い方</strong></h2>



<p class="wp-block-paragraph">subplotを使用すると、1つの図内に複数のプロットを配置することができます。subplot関数は、行数、列数、およびプロットの位置を指定します。以下はその基本的な使い方です。</p>



<pre class="wp-block-code python"><code>import matplotlib.pyplot as plt

# 2x2のサブプロットを作成し、1番目のサブプロットにプロットします
plt.subplot(2, 2, 1)
plt.plot(&#91;1, 2, 3, 4], &#91;1, 4, 9, 16], 'ro')  # 'ro'は赤い点を意味します

# 2x2のサブプロットを作成し、2番目のサブプロットにプロットします
plt.subplot(2, 2, 2)
plt.plot(&#91;1, 2, 3, 4], &#91;1, 4, 9, 16], 'b-')  # 'b-'は青い線を意味します

# 2x2のサブプロットを作成し、3番目のサブプロットにプロットします
plt.subplot(2, 2, 3)
plt.plot(&#91;1, 2, 3, 4], &#91;1, 4, 9, 16], 'g^')  # 'g^'は緑色の三角形を意味します

# 2x2のサブプロットを作成し、4番目のサブプロットにプロットします
plt.subplot(2, 2, 4)
plt.plot(&#91;1, 2, 3, 4], &#91;1, 4, 9, 16], 'c--')  # 'c--'はシアンの点線を意味します

plt.show()</code></pre>



<p class="wp-block-paragraph">上記のコードでは、4つのサブプロットが2&#215;2の配置で作成され、それぞれに異なるプロットが表示されます。各subplot関数の引数は、行数、列数、およびプロットの位置を指定します。たとえば、subplot(2, 2, 1)は2行2列のグリッド内の1番目の位置を指定します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="540" height="406" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002048.png" alt="" class="wp-image-2223" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002048.png 540w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002048-300x226.png 300w" sizes="(max-width: 540px) 100vw, 540px" /></figure>



<p class="wp-block-paragraph">問題なくプロットされてます。</p>



<h2 class="wp-block-heading">応用：三つのグラフを上に一つ下に二つ並べたい</h2>



<p class="wp-block-paragraph">上下に2つのグラフを配置する場合は、2行1列のサブプロットを作成する必要があります。ただ、下の行は2つの列に分割する必要があります。以下は、そのようなレイアウトを実現するためのコード例です。</p>



<pre class="wp-block-code python"><code>import matplotlib.pyplot as plt
import numpy as np

# データを生成します
x = np.linspace(0, 2 * np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# サブプロットを作成します
plt.subplot(2, 2, <strong><em>(1, 2)</em></strong>)  # 上に1つのグラフを配置するため、2x2のレイアウトで1番目と2番目の位置を指定します
plt.plot(x, y1, 'r-', label='Sine')  # サイン関数のプロット
plt.legend()  # 凡例を表示します

plt.subplot(2, 2, 3)  # 下に2つのグラフを配置するため、2x2のレイアウトで3番目の位置を指定します
plt.plot(x, y2, 'b--', label='Cosine')  # コサイン関数のプロット
plt.legend()  # 凡例を表示します

plt.subplot(2, 2, 4)  # 下に2つのグラフを配置するため、2x2のレイアウトで4番目の位置を指定します
plt.plot(x, y3, 'g-.', label='Tangent')  # タンジェント関数のプロット
plt.legend()  # 凡例を表示します

plt.tight_layout()  # レイアウトを整えます
plt.show()</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="629" height="464" src="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002757.png" alt="" class="wp-image-2224" srcset="https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002757.png 629w, https://www.ct-innovation.blog/dl-freetime/wp-content/uploads/2024/02/スクリーンショット-2024-02-29-002757-300x221.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></figure>



<p class="wp-block-paragraph">subplot関数の引数には、行数、列数、およびプロットの位置を指定します。(1, 2)のように範囲を指定することで、複数の位置を1つのサブプロットとして扱うことができます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">本記事では、matplotlibのsubplot機能について解説しました。subplotを使用することで、1つの図に複数のプロットを配置して、データの比較や関係性の可視化を容易に行うことができます。subplotはデータ解析や可視化において非常に便利なツールであり、ぜひ活用してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.ct-innovation.blog/dl-freetime/programming/python/2222/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
