<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://mnogress.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://mnogress.github.io/" rel="alternate" type="text/html" /><updated>2026-02-24T01:10:27+00:00</updated><id>https://mnogress.github.io/feed.xml</id><title type="html">so-wi.com_blog</title><subtitle>Blog for Data Analysis and more..</subtitle><author><name>Author</name></author><entry><title type="html">カテゴリカルデータの個数、構成比率、トータル行を集計、整形する</title><link href="https://mnogress.github.io/reference/df_velue_counts_formatting/" rel="alternate" type="text/html" title="カテゴリカルデータの個数、構成比率、トータル行を集計、整形する" /><published>2026-01-21T00:00:00+00:00</published><updated>2026-01-21T11:00:00+00:00</updated><id>https://mnogress.github.io/reference/df_velue_counts_formatting</id><content type="html" xml:base="https://mnogress.github.io/reference/df_velue_counts_formatting/"><![CDATA[<p>カテゴリカルデータの個数、構成比率、トータル行を集計、整形する方法をまとめました。</p>

<p>データフレームの特定の列（例：部門）ごとに、❶件数（何件あるか）、❷構成比（全体のうち何%か）を出して、
後で加工しやすい「表（データフレーム）」の形にまと、ついでに合計（Total）行も付けるためのスクリプトをまとめました。
<!--more--></p>

<h4 id="サンプルコードの紹介">サンプルコードの紹介</h4>

<p>カテゴリカルデータのそれぞれの個数を大きい順に表示し、その構成比率とトータル行を追加した内容を
データフレームとして提供するスクリプトになります。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre><span class="c1"># 件数（count）と構成比（normalize=Trueで比率が出せる）
</span><span class="n">vc</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">col_name</span><span class="p">].</span><span class="nf">value_counts</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>         <span class="c1"># 件数
</span><span class="n">ratio</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">col_name</span><span class="p">].</span><span class="nf">value_counts</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">normalize</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>  <span class="c1"># 構成比
</span>
<span class="c1"># データフレーム化して結合
</span><span class="n">tab</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span>
    <span class="sh">'</span><span class="s">件数</span><span class="sh">'</span><span class="p">:</span> <span class="n">vc</span><span class="p">,</span>
    <span class="sh">'</span><span class="s">構成比</span><span class="sh">'</span><span class="p">:</span> <span class="n">ratio</span>
<span class="p">})</span>

<span class="c1"># 合計行（Total）を追加
</span><span class="n">tab</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="sh">'</span><span class="s">Total</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">件数</span><span class="sh">'</span><span class="p">]</span> <span class="o">=</span> <span class="n">tab</span><span class="p">[</span><span class="sh">'</span><span class="s">件数</span><span class="sh">'</span><span class="p">].</span><span class="nf">sum</span><span class="p">()</span>
<span class="n">tab</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="sh">'</span><span class="s">Total</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">構成比</span><span class="sh">'</span><span class="p">]</span> <span class="o">=</span> <span class="n">tab</span><span class="p">[</span><span class="sh">'</span><span class="s">構成比</span><span class="sh">'</span><span class="p">].</span><span class="nf">sum</span><span class="p">()</span>

<span class="c1"># 表示用フォーマット
</span><span class="n">format_dict</span> <span class="o">=</span> <span class="p">{</span><span class="sh">'</span><span class="s">構成比</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">{:.1%}</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">件数</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">{:n}</span><span class="sh">'</span><span class="p">}</span>
<span class="nf">display</span><span class="p">(</span><span class="n">tab</span><span class="p">.</span><span class="n">style</span><span class="p">.</span><span class="nf">format</span><span class="p">(</span><span class="n">format_dict</span><span class="p">))</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h4 id="サンプルデータフレーム">サンプルデータフレーム</h4>

<p>以下のとおり、サンプルデータフレームの集計結果をデータフレームとして得ることができます。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre><span class="c1"># 演習用のデータフレームを作成します。
</span><span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span> <span class="sh">'</span><span class="s">ID</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">01285679</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">01340788</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">02123782</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">10541976</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">12297411</span><span class="sh">'</span><span class="p">,</span> 
                             <span class="sh">'</span><span class="s">13299899</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">48144450</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">55339981</span><span class="sh">'</span><span class="p">],</span>
                   <span class="sh">'</span><span class="s">出身地</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">"</span><span class="s">東京都</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">山口県</span><span class="sh">"</span><span class="p">,</span><span class="sh">'</span><span class="s">大阪府</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">千葉県</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">東京都</span><span class="sh">'</span><span class="p">,</span>
                          <span class="sh">'</span><span class="s">埼玉県</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">千葉県</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">千葉県</span><span class="sh">'</span><span class="p">],</span>
                  <span class="sh">'</span><span class="s">部門</span><span class="sh">'</span><span class="p">:</span>   <span class="p">[</span><span class="sh">"</span><span class="s">首都圏営業部</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">関西支部</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">本部総務</span><span class="sh">"</span><span class="p">,</span>
                               <span class="sh">"</span><span class="s">研究開発</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">東北支部</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">北海道支部</span><span class="sh">"</span><span class="p">,</span>
                               <span class="sh">"</span><span class="s">首都圏営業部</span><span class="sh">"</span><span class="p">,</span><span class="sh">"</span><span class="s">研究開発</span><span class="sh">"</span><span class="p">]},</span>
                    <span class="n">index</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span><span class="mi">7</span><span class="p">])</span>
<span class="c1"># オリジナルのデータフレームを表示</span>
</pre></td></tr></tbody></table></code></pre></figure>

<div class="notice"><span style="font-size:1.15em;">
<p><strong>サンプルデータフレームを表示</strong>:</p>

<p><code style="background: #f5e964; font-size: 120%" class="language-plaintext highlighter-rouge">&gt;&gt; display(df)</code></p>

<p><img src="/images/fig_1.png" alt="image" height="300px" width="300px" /><br /></p>

<p>–&gt; 部門別に集計します。</p>
</span></div>

<h4 id="スクリプトの結果">スクリプトの結果</h4>

<div class="notice"><span style="font-size:1.15em;">
<p><strong>‘部門’で集計結果を表示</strong>:</p>

<p><code style="background: #f5e964; font-size: 120%" class="language-plaintext highlighter-rouge">&gt;&gt; format_dict = {'構成比': '{:.1%}', '件数' : '{:n}'}</code> <br /><code style="background: #f5e964; font-size: 120%" class="language-plaintext highlighter-rouge">&gt;&gt; display(tab.style.format(format_dict))</code></p>

<p><img src="/images/fig_2.png" alt="image" height="300px" width="300px" /><br /></p>

</span></div>]]></content><author><name>サイト作成者</name></author><category term="Reference" /><category term="Pandas" /><category term="Function" /><summary type="html"><![CDATA[カテゴリカルデータの個数、構成比率、トータル行を集計、整形する方法をまとめました。 データフレームの特定の列（例：部門）ごとに、❶件数（何件あるか）、❷構成比（全体のうち何%か）を出して、 後で加工しやすい「表（データフレーム）」の形にまと、ついでに合計（Total）行も付けるためのスクリプトをまとめました。]]></summary></entry><entry><title type="html">【Pandas】日付の新しい方を残す重複排除</title><link href="https://mnogress.github.io/reference/sort_drop_duplicate/" rel="alternate" type="text/html" title="【Pandas】日付の新しい方を残す重複排除" /><published>2025-10-20T00:00:00+00:00</published><updated>2025-10-20T15:23:00+00:00</updated><id>https://mnogress.github.io/reference/sort_drop_duplicate</id><content type="html" xml:base="https://mnogress.github.io/reference/sort_drop_duplicate/"><![CDATA[<p>日付の新しい方を残す重複排除やり方をまとめました。重複排除するルールとして、❶新しいものを残す。❷古い方を残す。といった一工夫が必要な場合があります。そのステップをまとめました。<!--more--> 概要は以下のとおりです。</p>
<div class="box33">
    <span class="box-title">概要</span>
    <ol>
      <li><strong>keep='first'</strong> でデータフレームを上から下へ重複チェックするとして、最初のものを残す</li>
      <li>新しいものが最初にチェックされるよう降順に並べ替える</li>
    </ol> 
</div>

<style>
.box33 {
    position: relative;
    margin: 2em 0;
    padding: 15px 10px 7px;
    border: solid 2px #0092ca;
    border-radius: 6px;
}
.box33 .box-title {
    position: absolute;
    display: inline-block;
    top:  -15px;
    left:  15px;
    padding: 0 9px;
    height: 35px;
    line-height: 35px;
    font-size: 20px;
    background: #0092ca;
    color: #ffffff;
    font-weight: bold;
    border-radius: 6px;
}
.box33 p {
    margin: 0; 
    padding: 1em;
    font-size: 1.2em;
}
.box33 li {
    margin: 0; 
    font-size: 1.05em;
}
</style>

<h4 id="step-1datetime-オブジェクトの確認">Step 1：datetime オブジェクトの確認</h4>

<p>日付の列でソートするには、その列がdatetime オブジェクトでなければなりません。まず、ソートする列のデータ型を確認します。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre><span class="c1"># データ型を確認する
</span>
<span class="n">df</span><span class="p">[</span><span class="sh">'</span><span class="s">date</span><span class="sh">'</span><span class="p">].</span><span class="n">dtypes</span>

<span class="o">&gt;&gt;</span> <span class="nf">dtype</span><span class="p">(</span><span class="sh">'</span><span class="s">&lt;M8[ns]</span><span class="sh">'</span><span class="p">)</span>  <span class="o">--&gt;</span> <span class="n">OK</span>
<span class="o">&gt;&gt;</span> <span class="nf">dtype</span><span class="p">(</span><span class="sh">'</span><span class="s">O</span><span class="sh">'</span><span class="p">)</span>  <span class="o">--------&gt;</span> <span class="n">NG</span>  <span class="n">datetime</span> <span class="n">型式にする必要ある</span>
<span class="o">&gt;&gt;</span> <span class="nf">dtype</span><span class="p">(</span><span class="sh">'</span><span class="s">int64</span><span class="sh">'</span><span class="p">)</span>  <span class="o">----&gt;</span> <span class="n">NG</span>  <span class="n">datetime</span> <span class="n">型式にする必要ある</span>
<span class="o">&gt;&gt;</span> <span class="nf">dtype</span><span class="p">(</span><span class="sh">'</span><span class="s">float64</span><span class="sh">'</span><span class="p">)</span> <span class="o">---&gt;</span> <span class="n">NG</span>  <span class="n">datetime</span> <span class="n">型式にする必要ある</span>
</pre></td></tr></tbody></table></code></pre></figure>

<p>NGの場合には、datetime オブジェクトにします。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="code"><pre><span class="c1"># データ型をdatetime にする
</span>
<span class="n">df</span><span class="p">[</span><span class="sh">'</span><span class="s">date</span><span class="sh">'</span><span class="p">]</span><span class="o">=</span><span class="n">pd</span><span class="p">.</span><span class="nf">to_datetime</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="sh">'</span><span class="s">date</span><span class="sh">'</span><span class="p">])</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h4 id="step-2新しい順に並び替える">Step 2：新しい順に並び替える</h4>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
</pre></td><td class="code"><pre><span class="c1"># ascending = False -&gt; 値の大きい順、日付けの新しい順　
</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">([</span><span class="sh">"</span><span class="s">date</span><span class="sh">"</span><span class="p">],</span> <span class="n">ascending</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
</pre></td></tr></tbody></table></code></pre></figure>

<p>列名<strong>date</strong>で新しい順に並び替えておく。</p>

<h4 id="ascending--false-降順-新しいものから古いもの"><em>ascending = False</em> » 降順 » 新しいものから古いもの</h4>

<div class="box33">
<span class="box-title">Point!</span>
<dl><strong>ascending の意味：上昇</strong>
<dt>ascending = True</dt> 
<dd>昇順　古いものから新しいものへ　小さいものから大きいものへ</dd>
<dt>ascending = False</dt>
<dd>降順　新しいものから古いものへ　大きいものから小さいものへ</dd>
</dl>
</div>

<h4 id="step-3列a例社員番号の重複排除の基準として新しいものを残す">Step 3：列A（例：社員番号）の重複排除の基準として新しいものを残す</h4>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="code"><pre><span class="c1"># 新しいものが最初にソートされているので、keep='first'とする
# inplace=True で上書きする
# 前後にdf.shapeで要素数をプリントし排除された数を把握する
</span>
<span class="nf">print</span><span class="p">(</span><span class="n">df</span><span class="p">.</span><span class="n">shape</span><span class="p">)</span>
<span class="n">df</span><span class="p">.</span><span class="nf">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="sh">'</span><span class="s">社員番号</span><span class="sh">'</span><span class="p">,</span> <span class="n">keep</span><span class="o">=</span><span class="sh">'</span><span class="s">first</span><span class="sh">'</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">df</span><span class="p">.</span><span class="n">shape</span><span class="p">)</span>
</pre></td></tr></tbody></table></code></pre></figure>]]></content><author><name>サイト作成者</name></author><category term="Reference" /><category term="Pandas" /><category term="Function" /><summary type="html"><![CDATA[日付の新しい方を残す重複排除やり方をまとめました。重複排除するルールとして、❶新しいものを残す。❷古い方を残す。といった一工夫が必要な場合があります。そのステップをまとめました。]]></summary></entry><entry><title type="html">DataFrame, ndarray, list の使い分けについて実用的に考える</title><link href="https://mnogress.github.io/python/python_ndarray_dataframe_conversion/" rel="alternate" type="text/html" title="DataFrame, ndarray, list の使い分けについて実用的に考える" /><published>2025-07-11T00:00:00+00:00</published><updated>2025-10-29T09:00:00+00:00</updated><id>https://mnogress.github.io/python/python_ndarray_dataframe_conversion</id><content type="html" xml:base="https://mnogress.github.io/python/python_ndarray_dataframe_conversion/"><![CDATA[<p>このブログではデータハンドリングの基本である、DataFrame, ndarray, list の形式変換について「DataFrame,  ndarray,  list の使い分けについて実用的に考える」という問いに対してブログにしました。</p>

<!--more-->

<p>データ分析をするデータセットはそのほとんどは、n行 ｘ ｍ列の２次元のデータです。２次元のデータを扱うためのデータ形式には、Pandas のデータフレーム、Numpyのndarray、Python標準の list が一般的です。それぞれの形式をその用途に合わせて変換します。</p>

<p>このブログでは、２次元のデータに絞って、以下の図をデータ分析の観点から使い方に合わせて変換できることを目標にしています。</p>

<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}

.custom-list-violet {
color: rgb(67, 31, 158);
font-size: 24px;
}

</style>

<h3 id="dataframe---ndarray---list-間のコンバージョン">DataFrame &lt;-&gt; ndarray &lt;-&gt; list 間のコンバージョン</h3>

<p><img src="/images/img/df_ndarray_list_conversion.png" alt="df_ndarray_list_conversion" height="600px" width="600px" /><br /></p>

<h3 id="pandas-dataframe-がデータセットを用意するツール">Pandas DataFrame がデータセットを用意するツール</h3>

<p>Pandasは、Pythonでのデータ分析ライブラリとして最も活⽤されているライブラリです。Pandas
はNumpyを基盤に、シリーズ（Series、１次元データ）とデータフレーム（DataFrame、二次元データ）という二つのデータ型を提供します。
データフレームは使いやすく、豊富な機能(メソッド）でデータ分析のための無くてはならないライブラリです。</p>

<div class="box33">
    <span class="box-title">DataFrameの使い道</span>
  <ol>  
<li>DataFrameはインデックス（index）やカラム（column）名を指定して、Excelのシートのようにデータセットを用意するために利用します</li>
 </ol>
</div>

<h3 id="数値計算に特化したnumpy-ndarray">数値計算に特化したNumpy ndarray</h3>

<p>Numpyを利⽤すると、Python標準のリスト型に⽐べて、多次元配列のデータを効率よく扱うことができます。また、Numpyは標準偏差や分散といった統計量を出⼒してくれる関数が⽤意されており、科学技術計算の基盤となっており、その延長線上で機械学習、ディープラーニングでも使われています。</p>

<p>Numpyには、ndarrayと呼ばれるデータ型が⽤意されています。 ndarrayは⼀⾒すると、Python標準のリスト型（list）と似ていますが、ベクトル計算のように、内部の要素それぞれを⼀括して計算します。</p>

<h3 id="ndarray-と-list-の計算の違い">ndarray と list の計算の違い</h3>

<p><img src="/images/img/ndarray_vs_list.png" alt="ndarray_vs_list" height="600px" width="600px" /><br /></p>

<div class="box33">
    <span class="box-title">ndarrayの使い道</span>
  <ol>  
<li>機械学習での学習用と検証用に分割したデータセットなど分析モデルの入出力形式です</li>
 </ol>
</div>

<p class="notice--danger"><strong>Pandas, Numpyとも「統計量」を算出するメソッドは多数提供されています。Pandas の方が使いやすく、見やすいという意見も多いです。</strong></p>

<h3 id="python標準の配列データの形式がlist">Python標準の配列データの形式がlist</h3>

<p>⼀つの変数に複数のデータを⼊れて扱う、配列データとして使うのが リスト型（list)です。したがって、Pythonプログラムの入出力の標準データ形式がlist ということになります。</p>

<div class="box33">
    <span class="box-title">listの使い道</span>
  <ol>  
<li>インデックス番号（添字と呼んだりします）で要素を指定することができる、Pyhtonプログラムの入出力データの標準的な配列形式です
</li>
 </ol>
</div>

<h3 id="まとめ">まとめ</h3>

<table class="table">
  <thead>
    <tr>
      <th style="text-align: left"> </th>
      <th style="text-align: left">DataFrame</th>
      <th style="text-align: left">ndarray</th>
      <th style="text-align: left">list</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">利用するライブラリ</td>
      <td style="text-align: left">Pandas</td>
      <td style="text-align: left">Numpy</td>
      <td style="text-align: left">Python標準</td>
    </tr>
    <tr>
      <td style="text-align: left">ラベルインデックス<br />(列、行に任意の名前を付けること)</td>
      <td style="text-align: left">可（列名、行名を指定してにデータの操作が可能）</td>
      <td style="text-align: left">不可(0から始まるインデックス番号で操作する)</td>
      <td style="text-align: left">不可(0から始まるインデックス番号で操作する)</td>
    </tr>
    <tr>
      <td style="text-align: left">特徴</td>
      <td style="text-align: left">使いやすい、メソッドが豊富</td>
      <td style="text-align: left">計算に特化した配列形式</td>
      <td style="text-align: left">tuple, dictionaryと並ぶ配列形式の一つ</td>
    </tr>
    <tr>
      <td style="text-align: left">目的</td>
      <td style="text-align: left">欠損値処理、標準化等の分析データの整形</td>
      <td style="text-align: left">機械学習、ディープラーニングの目的、説明変数等</td>
      <td style="text-align: left">Pythonプログラムのデータの入出力等</td>
    </tr>
  </tbody>
</table>]]></content><author><name>サイト作成者</name></author><category term="Python" /><category term="DataFrame" /><category term="ndarray" /><category term="list" /><summary type="html"><![CDATA[このブログではデータハンドリングの基本である、DataFrame, ndarray, list の形式変換について「DataFrame, ndarray, list の使い分けについて実用的に考える」という問いに対してブログにしました。]]></summary></entry><entry><title type="html">seaborn barplot の棒グラフに平均値のannotationをつける</title><link href="https://mnogress.github.io/python/seaborn_brplot_annotation/" rel="alternate" type="text/html" title="seaborn barplot の棒グラフに平均値のannotationをつける" /><published>2025-06-11T00:00:00+00:00</published><updated>2025-10-30T09:00:00+00:00</updated><id>https://mnogress.github.io/python/seaborn_brplot_annotation</id><content type="html" xml:base="https://mnogress.github.io/python/seaborn_brplot_annotation/"><![CDATA[<p><a href="https://seaborn.pydata.org" target="_blank">seaborn</a>は<a href="https://matplotlib.org" target="_blank">matplotlib</a>をベースにしたデータビジュアライゼーションライブラリです。countplot はカテゴリカルデータを集計から度数分布図までを一気に行なってくれる大変便利なツールです。</p>

<p><strong>barplot</strong> で棒グラフを作成し、各々のbarの値をannotationしたいと思います。Excelの代わりにseanborn でサクサク、グラフ化します。</p>

<!--more-->
<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}

.custom-list-violet {
color: rgb(67, 31, 158);
font-size: 24px;
}

</style>

<h3 id="サンプルデータセット">サンプルデータセット</h3>

<p class="notice--warning">１．日本語化した棒グラフを作成するためにデータセットを用意します。<br />
２．Kagle のHRデータを編集して使っています。HRデータのうち、<strong>Age</strong>,	<strong>EducationField</strong>,	<strong>TotalWorkingYears</strong>　<strong>MonthlyIncome</strong> の列をそれぞれ、「年齢」、「専攻」、「勤続年数」、「月収」と書き換えました。<br />
３．<strong>EducationField</strong>で含まれるカテゴリカルデータを日本語するとろまでは同じです。<br />
４．二次元データを作るために、「専攻」のカテゴリカルデータを軸に<strong>groupby</strong>メソッドでデータを集約します。<br />
５．<strong>groupby</strong>メソッドを使うと<strong>mean()</strong>平均値 や<strong>sum()</strong>トータルで各カテゴリー値を集約できますが、平均値で各カテゴリの値を集約したいと思います。</p>

<h3 id="groupby-での集約のイメージ">groupby での集約のイメージ</h3>

<p><img src="/images/img/seaborn_pic4.png" alt="groupby" height="600px" width="600px" /></p>

<h3 id="reset_indexでx軸y軸をcolumnに配置する">reset_index()でx軸、y軸をColumnに配置する</h3>

<p>seaborn の barplotを利用するためには、ｘ軸、y軸ともデータフレームのcolumn で指定する必要があります。　しかし、groupby で集約したカテゴリカルデータのcolumn
は、集約化されたデータフレームではラベルインデックスとして配置されています。　従って、reset_index()でカテゴリをcolumnに再配置させます。そのコードとデータフレームを図示しておきます。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
</pre></td><td class="code"><pre><span class="c1">#月収の列のみにする
</span><span class="n">df_gsum</span> <span class="o">=</span>  <span class="n">df_gsum</span><span class="p">.</span><span class="n">iloc</span><span class="p">[:,</span> <span class="p">[</span><span class="mi">2</span><span class="p">]]</span>

<span class="c1">#ラベルインデックスをreset_index()で列に配置する
</span><span class="n">df_gsum</span> <span class="o">=</span> <span class="n">df_gsum</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
</pre></td></tr></tbody></table></code></pre></figure>

<p><img src="/images/img/seaborn_pic5.png" alt="reset_index()" height="600px" width="600px" /></p>

<h3 id="python-コードの紹介">Python コードの紹介</h3>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
</pre></td><td class="code"><pre><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">import</span> <span class="n">seaborn</span> <span class="k">as</span> <span class="n">sns</span>
<span class="c1">#matplotlibのグラフをRetinaの高解像度で表示する
</span><span class="o">%</span><span class="n">config</span> <span class="n">InlineBackend</span><span class="p">.</span><span class="n">figure_formats</span> <span class="o">=</span> <span class="p">{</span><span class="sh">'</span><span class="s">png</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">retina</span><span class="sh">'</span><span class="p">}</span>
<span class="c1">#Jupyter Notebookの中で作図した画像を表示させる
</span><span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span>
<span class="c1">#matplotlib をインポートする
</span><span class="kn">import</span> <span class="n">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>

<span class="c1">#日本語タイトルのため、japanizeをインポートする
</span><span class="kn">import</span> <span class="n">japanize_matplotlib</span>
<span class="n">plt</span><span class="p">.</span><span class="n">rcParams</span><span class="p">[</span><span class="sh">'</span><span class="s">font.family</span><span class="sh">'</span><span class="p">]</span> <span class="o">=</span> <span class="sh">'</span><span class="s">IPAexGothic</span><span class="sh">'</span>

<span class="n">order</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">マーケティング</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">理工学</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">医薬、保健</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">人文科学</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">教育・人事</span><span class="sh">'</span><span class="p">,</span><span class="sh">'</span><span class="s">その他</span><span class="sh">'</span><span class="p">]</span>
<span class="n">title</span> <span class="o">=</span> <span class="sh">'</span><span class="s">専攻分野別平均月収</span><span class="sh">'</span>
<span class="n">y_name</span> <span class="o">=</span> <span class="sh">'</span><span class="s">月収</span><span class="sh">'</span>
<span class="n">x_name</span> <span class="o">=</span> <span class="sh">'</span><span class="s">専攻</span><span class="sh">'</span>
<span class="n">y_label</span> <span class="o">=</span> <span class="sh">'</span><span class="s">平均月収(US$)</span><span class="sh">'</span>

<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="nf">subplots</span><span class="p">(</span><span class="n">figsize</span> <span class="o">=</span><span class="p">(</span><span class="mi">9</span><span class="p">,</span><span class="mi">9</span><span class="p">))</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">sns</span><span class="p">.</span><span class="nf">barplot</span><span class="p">(</span><span class="n">x</span> <span class="o">=</span> <span class="n">x_name</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">y_name</span><span class="p">,</span>
                   <span class="n">data</span> <span class="o">=</span> <span class="n">df_gsum</span><span class="p">,</span> 
                   <span class="n">palette</span><span class="o">=</span><span class="sh">'</span><span class="s">pastel</span><span class="sh">'</span><span class="p">,</span>
                  <span class="n">order</span> <span class="o">=</span> <span class="n">order</span><span class="p">)</span>

<span class="n">plt</span><span class="p">.</span><span class="nf">title</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">,</span> <span class="n">fontweight</span><span class="o">=</span><span class="sh">'</span><span class="s">bold</span><span class="sh">'</span> <span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">xticks</span><span class="p">(</span><span class="n">rotation</span><span class="o">=</span><span class="mi">90</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">xlabel</span><span class="p">(</span><span class="n">x_name</span><span class="p">,</span> <span class="n">fontsize</span> <span class="o">=</span> <span class="mi">14</span><span class="p">,</span> <span class="n">fontweight</span><span class="o">=</span><span class="sh">'</span><span class="s">bold</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">ylabel</span><span class="p">(</span><span class="n">y_label</span><span class="p">,</span> <span class="n">fontsize</span> <span class="o">=</span> <span class="mi">14</span><span class="p">,</span> <span class="n">fontweight</span><span class="o">=</span><span class="sh">'</span><span class="s">bold</span><span class="sh">'</span><span class="p">)</span>

<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ax</span><span class="p">.</span><span class="n">patches</span><span class="p">:</span>
    <span class="n">ax</span><span class="p">.</span><span class="nf">annotate</span><span class="p">(</span><span class="nf">format</span><span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="nf">get_height</span><span class="p">(),</span> <span class="sh">'</span><span class="s">.2f</span><span class="sh">'</span><span class="p">),</span> 
                   <span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="nf">get_x</span><span class="p">()</span> <span class="o">+</span> <span class="n">p</span><span class="p">.</span><span class="nf">get_width</span><span class="p">()</span> <span class="o">/</span> <span class="mf">2.</span><span class="p">,</span> 
                    <span class="n">p</span><span class="p">.</span><span class="nf">get_height</span><span class="p">()),</span> 
                    <span class="n">ha</span> <span class="o">=</span> <span class="sh">'</span><span class="s">center</span><span class="sh">'</span><span class="p">,</span> 
                    <span class="n">va</span> <span class="o">=</span> <span class="sh">'</span><span class="s">center</span><span class="sh">'</span><span class="p">,</span> 
                    <span class="n">xytext</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span> 
                    <span class="n">textcoords</span> <span class="o">=</span> <span class="sh">'</span><span class="s">offset points</span><span class="sh">'</span><span class="p">,</span>
                    <span class="n">fontsize</span> <span class="o">=</span> <span class="mi">14</span><span class="p">,</span>
                    <span class="n">color</span> <span class="o">=</span> <span class="sh">'</span><span class="s">blue</span><span class="sh">'</span><span class="p">)</span>
</pre></td></tr></tbody></table></code></pre></figure>

<h3 id="小数点何位までの表示とするかの指定">小数点何位までの表示とするかの指定</h3>

<p>数字表記の肝心な点として小数点何位まで表記するかだと思います。　平均値のため、小数点第二位まで表記するようにしています。　以下の<strong>format( ‘.2f’)</strong>の部分がそれに相当します。</p>

<div class="box33">
    <span class="box-title">Point！</span>
  <ol>  
<li>format(p.get_height(), '.2f')</li>
<li>値pの小数点以下何位まで表記かを指定する　.2f = 小数点第二位</li>

 </ol>
</div>

<h3 id="度数分布図任意のカテゴリー順">度数分布図、任意のカテゴリー順</h3>

<p><span class="bleu">order = [‘マーケティング’, ‘理工学’, ‘医薬、保健’,’人文科学’,’教育・人事’,’その他’]</span>として
<span class="bleu">order = order</span>とすると、<span class="bleu">order</span>で指定した順に棒グラフが並びます。イメージは以下のとおりです。</p>

<p><img src="/images/img/seaborn_pic6.png" alt="月収平均" height="600px" width="600px" /></p>

<hr />]]></content><author><name>サイト作成者</name></author><category term="Python" /><category term="seaborn" /><category term="visualization" /><category term="Python" /><summary type="html"><![CDATA[seabornはmatplotlibをベースにしたデータビジュアライゼーションライブラリです。countplot はカテゴリカルデータを集計から度数分布図までを一気に行なってくれる大変便利なツールです。 barplot で棒グラフを作成し、各々のbarの値をannotationしたいと思います。Excelの代わりにseanborn でサクサク、グラフ化します。]]></summary></entry><entry><title type="html">WinPython でオフライン環境でPythonを使う</title><link href="https://mnogress.github.io/python/winpython_install/" rel="alternate" type="text/html" title="WinPython でオフライン環境でPythonを使う" /><published>2025-04-08T00:00:00+00:00</published><updated>2025-10-30T09:00:00+00:00</updated><id>https://mnogress.github.io/python/winpython_install</id><content type="html" xml:base="https://mnogress.github.io/python/winpython_install/"><![CDATA[<p>新製品のテストデータや人事情報など機微な情報を扱う場合、多くの企業ではデータ流出の懸念からインターネット接続のない、いわゆるクローズドネットワークやスタンドアロンPCでPythonを使うことも少なくありません。 WinPythonでオフライン環境のPython開発環境構築されている方は少なく無いと思います。
<!--more-->
このBlogではWinPythonでの定番モジュールの追加のTips をまとめました。</p>

<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}

.custom-list-violet {
color: rgb(67, 31, 158);
font-size: 24px;
}

</style>

<hr />

<h3 id="winpythonとは">WinPythonとは</h3>

<p>PythonおよびWindow 用のPython 処理系とNumpy, Pandas, Scikit-learn, Tensorflow、Matplotlib などの主要な Python パッケージを１つにまとめポータブルアプリケーションとしてパッケージ化したソフトウェアです。</p>

<p>管理者権限でのアプリケーション導入の必要がありません。自己解凍形式(exeファイル)でまとめられているパッケージをサイトよりダウンロードして解凍するだけで使うことができます。ポータブルアプリケーションとして自己完結しておりOSと隔離して稼働が可能です。</p>

<h3 id="インストールはzip解凍するだけ">インストールはZIP解凍するだけ</h3>

<p><a href="https://winpython.github.io/" target="_blank">WinPython</a> の最大の特徴は、自己解凍形式exeで圧縮されており好きなフォルダ配下でダブルクリックして解凍するだけの非常に簡単なインストールできてしまうところです。</p>

<p>不要となりアンインストールしたい時にはそのフォルダを削除するだけです。しかも、主要なパッケージが組み込まれているので　解凍すればすぐに使えます。オフライン条件下のPython開発環境には持って来いのソフトウェアと言えます。</p>

<p>利用可能なPythonのバージョンは、3.3から3.10までラインナップされていますので、プロジェクト等での標準バージョンに合わせてダウンロードして環境を構築できます。</p>

<p>460以上のパッケージが組み込まれており、以下の定番モジュールはすぐに使うことができます。<a href="https://github.com/winpython/winpython/blob/master/changelogs/WinPython-64bit-3.8.3.0.md" target="_blank">全リスト</a>はGitHubのレポジトリから確認することができます。</p>

<p><span class="bleu"><strong>WinPython64-3.8.30 (2020-02-May)</strong></span></p>

<table style="font-size:0.80em;">
  <thead>
    <tr>
      <th style="text-align: left">Name</th>
      <th style="text-align: left">Version</th>
      <th style="text-align: left">Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><a href="http://www.python.org/">Python</a></td>
      <td style="text-align: left">3.8.3</td>
      <td style="text-align: left">Python 標準パッケージ（いわゆるBase)</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/flask">flask</a></td>
      <td style="text-align: left">1.1.2</td>
      <td style="text-align: left">Web Applications フレームワーク</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/jupyter">jupyter</a></td>
      <td style="text-align: left">1.0.0</td>
      <td style="text-align: left">Jupyter notebook (説明不要ですね)</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/keras">keras</a></td>
      <td style="text-align: left">2.3.1</td>
      <td style="text-align: left">TensorFlow上で動くニューラルネットワークライブラリ</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/matplotlib">matplotlib</a></td>
      <td style="text-align: left">3.2.1</td>
      <td style="text-align: left">グラフ描画ライブラリ</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/numpy">numpy</a></td>
      <td style="text-align: left">1.18.4+mkl</td>
      <td style="text-align: left">NumPy （説明不要ですね）mkl付です。</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/pandas">pandas</a></td>
      <td style="text-align: left">1.0.3</td>
      <td style="text-align: left">Pandas （説明不要ですね）</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/pip">pip</a></td>
      <td style="text-align: left">20.1.1</td>
      <td style="text-align: left">Pythonパッケージインストールユーティリティ</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/scikit_learn">scikit_learn</a></td>
      <td style="text-align: left">0.23.1</td>
      <td style="text-align: left">機械学習ライブラリ</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/tensorflow_cpu">tensorflow_cpu</a></td>
      <td style="text-align: left">2.2.0</td>
      <td style="text-align: left">Google が公開したのDeep learning ライブラリ</td>
    </tr>
    <tr>
      <td style="text-align: left"><a href="https://pypi.org/project/xlrd">xlrd</a></td>
      <td style="text-align: left">1.2.0</td>
      <td style="text-align: left">Microsoft Excel 読み込み・書き込みライブラリ</td>
    </tr>
  </tbody>
</table>

<h3 id="オフライン環境でのライブラリの追加">オフライン環境でのライブラリの追加</h3>

<p>主要なパッケージも同梱されており、すぐに使えて便利そうですが、使い込んでいくうちに、「当然ある」と思うようなパッケージや日本語化ライブラリが入っておらず、追加でライブラリをインストールする必要がどうしても出てきます。</p>

<p>インターネット接続した環境であれば<strong>pip</strong>コマンドで必要なモジュール名を指定すれば、依存関係を解いた上でインストールも問題なく行えます。</p>

<p>オフライン環境ではどうでしょうか。以下の手順がおすすめです。</p>

<div class="box33">
    <span class="box-title">おすすめ手順</span>
  <ol>  
<li>インターネット接続した別のPC(オンラインPC)を用意する</li>
<li>オンラインPCから追加で必要はライブラリをダウンロードして、オフラインPCにUSB等で移動させておく</li>
<li>WinPython Control Panel から以下の動画のようにインストール</li>
 </ol>
</div>

<p class="notice--danger">サンプルとしてopenpyxlを使えるようにした際の動画を載せています。参考にしてください。
動画を見てお気づきのとおり、openpyxl以外にjdcal とet_xml を一緒にインストールしないとインストールができません。注意してください。</p>

<h3 id="サンプル動画--openpyxl---のインストール">サンプル動画　- openpyxl - のインストール</h3>
<p><img src="/images/img/04_19_winpython_openpyxl_install3ea464f4.autosave4.gif" alt="winpython_openpyxl" height="600px" width="600px" /></p>

<hr />

<h3 id="ひとこと">ひとこと</h3>

<p class="notice--warning">WinPython は解凍するだけですぐに使えるターンキーソリューションです。オフライン環境での構築には威力を発揮します。しかし、オンライン環境では気にしなかったモジュールの依存関係、目的のモジュールとバンドルしてインストールされるモジュール等の管理のためには、オフライン環境とは別に、オンラインテスト環境での事前準備が必須になるかと思います。</p>]]></content><author><name>サイト作成者</name></author><category term="Python" /><category term="WinPython" /><category term="openpyxl" /><category term="offline" /><summary type="html"><![CDATA[新製品のテストデータや人事情報など機微な情報を扱う場合、多くの企業ではデータ流出の懸念からインターネット接続のない、いわゆるクローズドネットワークやスタンドアロンPCでPythonを使うことも少なくありません。 WinPythonでオフライン環境のPython開発環境構築されている方は少なく無いと思います。]]></summary></entry><entry><title type="html">Python と SPSS® Modeler で XGBoost の特徴量選択を比較する</title><link href="https://mnogress.github.io/python/XGBoost_Python_vs_SPSS/" rel="alternate" type="text/html" title="Python と SPSS® Modeler で XGBoost の特徴量選択を比較する" /><published>2025-02-04T00:00:00+00:00</published><updated>2025-10-22T09:00:00+00:00</updated><id>https://mnogress.github.io/python/XGBoost_Python_vs_SPSS</id><content type="html" xml:base="https://mnogress.github.io/python/XGBoost_Python_vs_SPSS/"><![CDATA[<p>特徴量選択（feature selection）＝ 「どれを説明変数として使うか」は、データ分析では重要です。このBlogでは、特徴量選択についてXGBoostのアルゴリズムでSPSS® Modeler の特徴量選択とPython Scikit-Learnの結果を比較してみたいと思います。</p>

<!--more-->

<p>特徴量選択は、実際のところドメイン知識が大きな力を発揮するため、データサイエンスに精通しないがドメイン知識をもつ専門家にもっと、モデルを作成してもらうためIBM のSPSS® Modeler等の統計ソフトを大手企業、官公庁向の研究者やテータ分析担当者向けに導入が進んでいます。</p>

<p>SPSS® Modeler には、Python 固有のアルゴリズムを使用するためのノードが用意されています。XGBoost Tree© は、
ツリー モデルを基本モデルとして使用する勾配ブースティング・アルゴリズムを実装しており、Python で実装されています。</p>

<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}

.custom-list-violet {
color: rgb(67, 31, 158);
font-size: 24px;
}

</style>

<h3 id="前提pc環境">前提PC環境</h3>

<p>この記事で扱うPC環境は以下のとおりです。</p>

<table class="table">
  <thead>
    <tr>
      <th style="text-align: left">ソフトウエア</th>
      <th style="text-align: left">バージョン</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">SPSS Modeler</td>
      <td style="text-align: left">18.3  on Windows 10</td>
    </tr>
    <tr>
      <td style="text-align: left">XGBoost on Scikit-learn</td>
      <td style="text-align: left">1.4.0 on Python 3.8</td>
    </tr>
  </tbody>
</table>

<p>使うデータは<a href="https://scikit-learn.org/stable/datasets/real_world.html#california-housing-dataset" target="_blank">カリフォルニア住宅価格</a>です。Scikit-Learnの標準データセットです。</p>

<p>20640 rows × 9 columns　のサイズです。各々のカラムの意味は以下のとおりです。</p>

<nl>
  <li class="custom-list-violet">F0: (MedInc)median income in block- 収入の中央値</li> 
  <li class="custom-list-violet">F1: (HouseAge)median house age in block- 築年数の中央値</li> 
  <li class="custom-list-violet">F2: (AveRooms)average number of rooms- 平均部屋数</li>
  <li class="custom-list-violet">F3: (AveBedrms)average number of bedrooms-平均ベッドルーム数</li>
  <li class="custom-list-violet">F4: (Population)block population- 人口</li> 
  <li class="custom-list-violet">F5: (AveOccup)average house occupancy- 平均住宅占有率</li>
  <li class="custom-list-violet">F6: (Latitude)house block latitude- 家屋の緯度</li>
  <li class="custom-list-violet">F7:  (Longitude)house block longitude- ハウスブロックの経度</li>
</nl>
<p><br />
目的変数はカリフォルニア地区の住宅価格で単位は10万ドルです。データセット自体は1990年の米国国勢調査(U.S. census) のもので、一行に国勢調査で使われるブロックグループ単位で集計されています。ブロックグループは米国国勢調査において、最小の地理的な単位です。概ね、600～3,000人を一つのグループにしています。　<br /></p>

<p>世帯（household) は一つの住宅に居住する人数です。平均部屋数、ベッドルーム数はこの統計が世帯当たりで計算していますが、しばしばブロックグループ単位で計算すると「数世帯」と「多くの空き家」があるようなリゾート地では現実離れした大きな数字になる場合があります。それら大きな数字は外れ値としての処理が必要です。<br /></p>

<p><img src="/images/img/fig_0.png" alt="outliner" height="600px" width="600px" /><br /></p>

<p>外れ値の求め方には色々な方法があります。代表的な方法は以下の二つです。　いずれも、SPSS Modeler でサポートされています。</p>
<ol>
<li>平均から標準偏差のn倍(例：3倍）を範囲外とする</li>
<li>全体のnパーセンタイル（例：0.99)を超えるものを範囲外とする</li>
</ol>

<p>ここでは、方法2の 99パーセンタイルで平準化した場合の分布イメージを載せます。</p>

<p><img src="/images/img/fig_99.png" alt="percentail" height="600px" width="600px" /><br /></p>

<h3 id="ドメイン知識による次元削減">ドメイン知識による次元削減</h3>

<p>特徴量の抽出で重要なタスクはドメイン知識を持つ、データセット由来の業界知識・専門知識を持ついわゆる専門家からデータセットのカラムのうち、特徴量（説明変数）としては
適切で無いものを除外する事です。今回の不動産価格においてはその地理的座標は不要とのことなので、ブロックの地理的座標軸（経度:F6、緯度:F7）は除きます。</p>

<div class="box33">
    <span class="box-title">ドメイン知識</span>
  <ol>  
<li>説明変数のうちドメイン知識よりブロックの地理的座標軸（経度:F6、緯度:F7）は除きます。</li>
 </ol>
</div>

<h3 id="ドメイン知識で除かれる経度f6緯度f7のデータの影響を可視化">ドメイン知識で除かれる経度:F6、緯度:F7のデータの影響を可視化</h3>

<p>経度:F6、緯度:F7を除く前のXGBoostによるFeature Imporanceの計算をPythonで行ない、経度:F6、緯度:F7の影響を見ておく事とします。
Code は以下の通りです。　とても簡単なコードですね。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><span class="kn">from</span> <span class="n">sklearn.datasets</span> <span class="kn">import</span> <span class="n">fetch_california_housing</span>
<span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">import</span> <span class="n">seaborn</span> <span class="k">as</span> <span class="n">sns</span>
<span class="kn">import</span> <span class="n">xgboost</span> <span class="k">as</span> <span class="n">xgb</span>
<span class="kn">import</span> <span class="n">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span> 
<span class="kn">from</span> <span class="n">pylab</span> <span class="kn">import</span> <span class="n">rcParams</span>
<span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span>
<span class="n">rcParams</span><span class="p">[</span><span class="sh">'</span><span class="s">figure.figsize</span><span class="sh">'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">9</span><span class="p">,</span><span class="mi">6</span>

<span class="n">housing_array</span> <span class="o">=</span> <span class="nf">fetch_california_housing</span><span class="p">()</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">housing_array</span><span class="p">.</span><span class="n">data</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">housing_array</span><span class="p">.</span><span class="n">target</span>

<span class="n">xgb_model</span> <span class="o">=</span> <span class="n">xgb</span><span class="p">.</span><span class="nc">XGBRegressor</span><span class="p">()</span>
<span class="n">xgb_model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span></code></pre></figure>

<p>特徴量を可視化します。左の図のとおり、経度:F6、緯度:F7は計算上は、住宅価格の決定要因としては、収入に次ぐ要因となっています。
それらを除外して再計算した結果を右側に並べて見るとその影響がよく分かります。</p>

<p><img src="/images/img/fig_3.png" alt="feature_importance1" height="900px" width="900px" /><br /></p>

<h3 id="python-sciki-learn-vs-spss-modeler-特徴量計算を比較する">Python (Sciki-Learn) vs SPSS® Modeler 特徴量計算を比較する</h3>

<p>次に同じデータセットでSPSS® Modeler を使って計算します。　左がPythonで右がSPSS® Modeler での計算結果です。 計算結果に少しだけ、差異があります。
Python では：</p>
<nl>
<li class="custom-list-violet">F0: (MedInc)median income in block-収入の中央値</li>
<li class="custom-list-violet">F5: (AveOccup)average number of household members-平均世帯人数</li>
<li class="custom-list-violet">F2: (AveRooms)average number of rooms-平均部屋数</li>
</nl>
<p>と平均住宅占有率が２番目に大きな影響力があるとい結果でしたが</p>

<p>SPSS® Modeler では：</p>
<nl>
<li class="custom-list-violet">F0: (MedInc)median income in block-収入の中央値</li>
<li class="custom-list-violet">F2: (AveRooms)average number of rooms-平均部屋数</li>
<li class="custom-list-violet">F5: (AveOccup)average number of household members-平均世帯人数</li>
</nl>
<p>とPython では3番目の<strong>平均部屋数</strong>が２番目という結果でしたが、それ以外は同じ順位でした。</p>

<p><img src="/images/img/fig_5.png" alt="feature_importance1" height="900px" width="900px" /><br /></p>

<p><code style="background-color: #faf5d2; font-size: 0.95em" class="language-plaintext highlighter-rouge">＊SPSS® Modelerでは、Feature をF1から始めて作図されます。本ブログではPythonとの比較のため、Python と同じようにF0からに変更しています。</code></p>

<h3 id="spss-modeler-ストリームと設定">SPSS® Modeler ストリームと設定</h3>
<p>SPSS® Modeler 上でのストリームと設定の概要は以下のとおりです。</p>

<h3 id="ストリーム画面">ストリーム画面</h3>
<p><img src="/images/img/fig_6.png" alt="SPSS_Modeler1" height="600px" width="600px" /><br /></p>

<h3 id="データ型ノードの設定">データ型ノードの設定</h3>
<p><img src="/images/img/fig_7.png" alt="SPSS_Modeler1" height="600px" width="600px" /><br /></p>

<h3 id="xgboost-tree-pythonノードの作成オプション">XGBoost Tree Pythonノードの作成オプション</h3>
<p><img src="/images/img/fig_8.png" alt="SPSS_Modeler1" height="450px" width="450px" /><br /></p>

<div class="box33">
    <span class="box-title">カルフォルニアの住宅価格の決定要因</span>
  <ol>
<li>収入(お金に余裕があるかどうか)　＞　部屋数（家の広さ）＞　平均世帯人数（何人暮らしか）</li>
<li>築年数はさほど影響しない</li>
<li>計算に使用したアルゴリズム XGBoostにおいてPython, SPSS® ともほぼ同じ結論を導いている</li>
</ol>
</div>]]></content><author><name>サイト作成者</name></author><category term="Python" /><category term="Python" /><category term="SPSS Modeler" /><category term="XGBoost" /><summary type="html"><![CDATA[特徴量選択（feature selection）＝ 「どれを説明変数として使うか」は、データ分析では重要です。このBlogでは、特徴量選択についてXGBoostのアルゴリズムでSPSS® Modeler の特徴量選択とPython Scikit-Learnの結果を比較してみたいと思います。]]></summary></entry><entry><title type="html">イラレのアピアランスパネルを理解する</title><link href="https://mnogress.github.io/illustrator/illustrator_pannel_1/" rel="alternate" type="text/html" title="イラレのアピアランスパネルを理解する" /><published>2025-02-04T00:00:00+00:00</published><updated>2025-10-22T09:00:00+00:00</updated><id>https://mnogress.github.io/illustrator/illustrator_pannel_1</id><content type="html" xml:base="https://mnogress.github.io/illustrator/illustrator_pannel_1/"><![CDATA[<p>アピアランスパネルは、オブジェクトの実体は同じままで、見た目を変えるものです。修正に強く流用しやすいパーツを作るのに欠かせない機能を提供します。
同じ見た目を他のオブジェクトに展開して効率的にデザインの統一感を出すことができます。イラストレーターの数ある機能の中で押さえておくべアピアランス機能について深堀りします。<!--more--></p>

<hr />
<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}
</style>

<h3 id="アピアランスパネルとは見た目を変えるためのパネル">アピアランスパネルとは見た目を変えるためのパネル</h3>

<p>アピアランスパネルは、<strong>ウインドウ→アピアランス</strong>で出現します。</p>

<p>通常、一つのオブジェクトに対して
<span class="bleu">「塗り」</span>と<span class="bleu">「線」</span>
の設定をひとつずつ行うことができます。
アピアランスパネルを使うと、この一対の塗りと線の設定を複数設定し編集することができます。</p>

<p>アピアランスとは英語で外見とか見た目と訳されます。　すなわち、オブジェクトの実体（内面）は同じままで、見た目を変えるためのパネルということです。</p>

<p>イラストレーターでのアピアランスは 、<span class="bleu">「塗り」「線」,「効果」,「不透明度」</span>
の4つの属性から構成されています。アピアランスパネルでは４つすべての属性を操作できます。</p>

<p>以下の図では、</p>

<p><img src="/images/img/appearance_intro_2.png" alt="appearance_panel" height="600px" width="600px" /><br /></p>

<p>この図では、３層のアピアランスの構造になっています。上からパス、<span class="bleu">「線」,「塗」</span> りの順に重なっています。<br /></p>

<div class="box33">
    <span class="box-title">概要</span>
    <ol>
<li> パス＝オブジェクトに対してのアピアランスです。実際のオブジェクトは左の円です。</li>
<li>線には、<strong>イエロー(#FFFF00)</strong>で太さは<span class="bleu">3pt</span>のアピアランスがあたっています。　この部分だけ色が変わっていますが、線のアピアランスを選択しています。</li>
<li>塗りは、<strong>オレンジ(#C1272D)</strong>のアピアランスがかかっています</li>
<li>CSVファイルをデータフレームとして読み込むにあたり<strong>delimiter =","</strong> CSVファイルなのでカンマを区切り文字にします。　</li>
<li>アピアランスは、パス、線、塗それぞれにかけることが可能です。さらにグループ、サブレイヤー、レイヤのレベルまでアピアランスの
対象になることができます。</li>
   </ol>
</div>

<p>最も一般的なパス、線、塗に対するアピアランスについて研究します。</p>

<hr />

<h3 id="見た目が違うだけで図形は元のままだから修正に強い">見た目が違うだけで、図形は元のままだから修正に強い</h3>

<p><span class="bleu">「塗り」、「線」、「効果」</span>の各属性は追加して複数の属性を持つことができます。
特に、効果を使うとオブジェクトの形状を変えることなく効果があたり、見た目の形状を変えることができます。<br />
以下の動画では、パス、線、塗りにそれぞれ、ジグザグの効果をあてて、<strong>円からばくだん</strong> に見た目の形状を変えています。　
パス、線、塗り、それぞれのジグザグの「あて方」で効果がパス、線、塗りのそれぞれにあたる、そしてそれらが合わさるとはどういうことか、この例で理解できると思います。</p>

<p><img src="/images/img/%E3%82%B8%E3%82%B0%E3%82%B6%E3%82%B0%E3%82%A2%E3%83%94%E3%82%A2%E3%83%A9%E3%83%B3%E3%82%B90928_195e5c67ac.autosave1008.gif" alt="アピアランスをかける" height="100%" width="100%" /><br /></p>

<p>見た目が複雑になっても、オブジェクトは元の図形のままです。試しに「表示」メニューで「アウトライン」をすれば一目瞭然です。
このことが、アピアランスパネルの活用は修正に強く、流用しやすいパーツ作成のための必須ツールと言われる理由です。</p>

<h3 id="アピアランスの当たり方はそれぞれの重なり順で決まります">アピアランスの当たり方はそれぞれの重なり順で決まります</h3>

<p>新規線の追加とは実態となる線に対して、効果を重ねることです。　例えば、動画のケースで新規線を追加すると、線のアピアランスが複製され、黄色で2ptのアピアランスを２つ持つ線です。　複製されたアピアランスは一番上に追加されます。</p>

<p>二つアピアランスがあるこの線の下側のアピアランスの色を黄から青に変えても、
上のアピアランス（このケースでは黄色）が有効となり、青色とするアピアランスは見えません。</p>

<p>試しに、動画のように黄色のアピアランスの太さを2pt から 1pt に変えてみます。すると下の青色の線の半分が見えてきます。
重なりの半分が無くなり、下側のアピアランスが見えてきたということですね。</p>

<p>このように、アピアランスをかけた結果、どのように見えるかはアピアランスの重なり順で決まります。
したがって、アピアランスの順序によって同じ種類のアピアランスの集まりでも、見た目が変わります。</p>

<p><img src="/images/img/%E3%82%B8%E3%82%B0%E3%82%B6%E3%82%B0%E3%82%A2%E3%83%94%E3%82%A2%E3%83%A9%E3%83%B3%E3%82%B90928_195e5c67ac.autosave2.gif" alt="アピアランスの順番" height="600px" width="600px" /><br /></p>

<h3 id="グラフィックスタイルに登録すればアピアランスを別のオブジェクトに簡単に反映できます">グラフィックスタイルに登録すれば、アピアランスを別のオブジェクトに簡単に反映できます</h3>

<p>アピアランスをコピーする場合には「ウィンドウ」メニューから「グラフィックスタイル」のパネルを開きます。
そしてアピアランスパネルから作成したこのアピアランスをグラフィックスタイルのパネルにドラッグしていきます。 <br />
そうすることで、ここで設定したこのアピアランスを登録することができます。</p>

<p>選択されている図形に対して再度、アピアランスを１から設定するのではなく
「グラフィックスタイル」から選択することで同じアピアランスを別のオブジェクトに反映することができます。</p>

<p><img src="/images/img/graphic_style.gif" alt="アピアランスの順番" height="600px" width="600px" /><br /></p>

<h3 id="アピアランスの分割でオブジェクトの中身にも反映させます">アピアランスの分割でオブジェクトの中身にも反映させます</h3>

<p>「オブジェクト」メニューから「アピアランスを分割」を選択します。  すると、「アウトライン」で見ると
これまで、見た目だけのアピアランスが実際の図形として認識されています。 
ダイレクト選択ツールなどでこのオブジェクトを部分的に編集が可能になります。</p>

<p><img src="/images/img/%E3%82%A2%E3%83%94%E3%82%A2%E3%83%A9%E3%83%B3%E3%82%B9%E5%88%86%E5%89%B2.gif" alt="アピアランスの順番" height="600px" width="600px" /><br /></p>

<p>アピアランス分割前は、実体の図形への編集には限度がありました。 アピアランスを分割後には
今までのアピアランスは認識さないので、色を変える等のアピアランスの編集作業が簡単にできなくなってしまいます。</p>]]></content><author><name>サイト作成者</name></author><category term="illustrator" /><category term="illustrator" /><category term="appearance_pannel" /><category term="design" /><summary type="html"><![CDATA[アピアランスパネルは、オブジェクトの実体は同じままで、見た目を変えるものです。修正に強く流用しやすいパーツを作るのに欠かせない機能を提供します。 同じ見た目を他のオブジェクトに展開して効率的にデザインの統一感を出すことができます。イラストレーターの数ある機能の中で押さえておくべアピアランス機能について深堀りします。]]></summary></entry><entry><title type="html">アピアランスパネルで座布団を作成する</title><link href="https://mnogress.github.io/illustrator/illustrator_zabuton_basic/" rel="alternate" type="text/html" title="アピアランスパネルで座布団を作成する" /><published>2025-02-04T00:00:00+00:00</published><updated>2025-10-22T09:00:00+00:00</updated><id>https://mnogress.github.io/illustrator/illustrator_zabuton_basic</id><content type="html" xml:base="https://mnogress.github.io/illustrator/illustrator_zabuton_basic/"><![CDATA[<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}
.grand {
font-size: 1.20em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}
</style>

<p>テキストの背面に敷いた四角形や楕円形を「座布団」と呼んだりします。アピアランスとグラフィックスタイルで作成すると関単に文字に座布団を敷けます。
アピアランスパネルだけで作成する座布団の基本的な手順を覚え、それを応用すれば、文字に視覚的な効果のバリエーションが一気に広がります。<!--more--></p>

<h3 id="アピアランスで作成グラフィックスタイルで複製">アピアランスで作成、グラフィックスタイルで複製</h3>

<p>アピアランスパネルだけで座布団を作成し、アピアランスパネルの内容をグラフィックスタイルに登録すれば、簡単に他のオブジェクトにアピアランス反映することができます。以下の動画のように、文字を装飾するアピアランスをグラフィックスタイルに登録すれば、後は文字を入力し、グラフィックスタイルを適用するだけで、簡単に対象の文字に対して座布団を敷いてみたり、囲みをいれたり、反射文字に変更することができます。　</p>

<p>動画では、イラストレーターがデフォルトで提供している、グラデーションやお化けの装飾に変えるグラフィックスタイルの適用例も入れています。</p>

<p><img src="/images/img/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E6%A6%82%E8%A6%81.gif" alt="グラフィックスタイル概要" height="600px" width="600px" /><br /></p>

<h3 id="可変長と固定長座布団">可変長と固定長座布団</h3>

<p>動画では、座布団の大きさも文字の長さ（文字数）によって座布団も長くなる <strong>可変長</strong> の例を示しています。また、文字数によらず決まった長さの <strong>固定長</strong> 座布団も可能です。 いずれも座布団の真ん中に文字が乗っかる配置になります。座布団と言われる所以でしょうか。</p>

<h3 id="可変長座布団のアピアランスパネル">可変長座布団のアピアランスパネル</h3>

<p>可変長座布団のアピアランスパネルを解説します。　<strong>Hello World</strong> の文字に対して黄色の角丸長方形の座布団を敷くアピアランスパネルです。</p>

<p><img src="/images/img/appearance_zabuton1.png" alt="可変長座布団" height="600px" width="600px" /><br /></p>

<h3 id="字色と座布団のための2つの塗りを用意する">字色と座布団のための2つの「塗り」を用意する</h3>

<div class="box33">
    <span class="box-title">塗りのキホン</span>
    <ol>
<li>「線」はなし、「塗り」は<span class="bleu">ブルー(#2E3192)</span>が元々の文字の基本アピアランスです。　ここでの「塗り」が文字の色になります。</li>
<li>座布団となる二つ目の「塗り」<span class="bleu">黄色(#FCEE21)</span>を追加しています。　この「塗り」で座布団の色を決めています。</li>
<li>オブジェクトのアウトライン化と角丸長方形の効果を追加して座布団の形状や、文字の位置を調整しています。</li>
   </ol>
</div>

<p>角丸長方形の形状オプションを指定しています。<strong>オプション</strong> の項目の <strong>サイズ</strong>の <strong>(R) サイズ可変</strong> を指定して、
文字からどれだけ座布団の端を設けるかその値を指定しています。　各々サイズが実際の長方形の形状に該当するかは、図内のサイズで確認できます。</p>

<div class="box44">
    <span class="box-title">Attention!</span>
    <ol>
<li>このサンプルのアピアランスパネルでは、バウンディングボックスを表示させないようにするため、オブジェクトを選択していません。</li>
<li>実際のアピアランスパネルの操作では、必ずオブジェクトを選択しておく必要があります。その場合は、<strong>「テキスト」</strong>とアピアランスパネルの上部で表示します。</li>
</ol>
</div>

<p><img src="/images/img/appearance_zabuton2.png" alt="可変長座布団_2" height="600px" width="600px" /><br /></p>

<p>固定長の座布団の場合は、<strong>オプション</strong> の項目の <strong>サイズ</strong>で、<strong>(A)値を指定</strong></p>

<h3 id="ドロップシャドウで座布団の立体感を出す">ドロップシャドウで座布団の立体感を出す</h3>

<p>今回の座布団では、ごく薄く <strong>ドロップシャドウ</strong> の効果を与えて立体感を出すようにしています。　
その効果のあて具合は以下パネルのような内容です。</p>

<div class="box33">
    <span class="box-title">ポイント</span>
    <ol>
<li>テキスト内のオブジェクトを指定すると、テキストがやや上付きに位置しています。そのままだと座布団の上でもやや上付きになります</li>
<li>真ん中に自動的に位置合わせをするには、文字と長方形二つのオブジェクトのアウトライン化します。</li>
<li>アピアランスパネルで最初にアウトライン化の効果を追加し、テキストをアウトライン化したことにします。</li>
<li>効果の重ね順も大切なポイントです。角丸長方形の効果を当てる前に<strong>パスのアウトライン化</strong>をします。</li>
   </ol>
</div>

<h3 id="字に囲みを入れるアピアランスパネル">字に囲みを入れるアピアランスパネル</h3>

<p>黄色の「塗り」に太さの違う赤と青の「線」を二つ重ねて、黄色の文字に、赤い囲み（内側）と青い囲み（外側）をつけるアピアランスパネルの例を示します。</p>

<p>アピアランスのかかり方はパネルの上から下にかかりますので、内側に位置する赤い囲みの「線」<strong>4pt</strong>を上にしてその下に外側に位置する青い囲みの「線」
<strong>10pt</strong> の順にパネル上で効果をスタックしています。　</p>

<p>例えば、青の囲み線を赤の囲み線の上にパネル上で並べる（図中の<strong>２</strong>と<strong>３</strong>を逆にする）と、青が<strong>10pt</strong> と太いため、それに隠れて赤の囲みが見えなくなります。　パネルを重ねる順番で見え方が変わることがこのサンプルでよく理解できると思います。</p>

<p><img src="/images/img/appearance_zabuton4.png" alt="可変長座布団_4" height="600px" width="600px" /><br /></p>

<h3 id="反射文字が入るアピアランスパネル">反射文字が入るアピアランスパネル</h3>

<p>「塗り」がピンクに「線」がなしの文字をベースに、あたかもその文字を鏡面に置いたかのように、反射するさまをアピアランスパネルで表現します。
反射する文字のための「塗り」を追加し、その「塗り」に対して：</p>

<div class="box33">
    <span class="box-title">How To</span>
    <ol>
<li>変形効果で反射を表現用に<strong>垂直方向に縮小</strong>、<strong>移動</strong>、<strong>リフレクト</strong>させます</li>
<li> <strong>パスの自由変形</strong>で右45度に反射画像を曲げます</li>
<li>「塗り」も<strong>グラデーション効果</strong>で先に行くほど薄くさせています</li></ol>
</div>

<p><strong>垂直方向に縮小</strong>、<strong>移動</strong>、<strong>リフレクト</strong>、<strong>パスの自由変形</strong>の効果をあてるアピアランスパネルの例</p>

<p><img src="/images/img/appearance_zabuton5.png" alt="可変長座布団_5" height="600px" width="600px" /><br /></p>

<p><strong>グラデーション効果</strong> の効果をあてるアピアランスパネルの例</p>

<p><img src="/images/img/appearance_zabuton6.png" alt="可変長座布団_6" height="600px" width="600px" /><br /></p>

<h3 id="おまけリボンの形の座布団のアピアランスパネル">おまけ　リボンの形の座布団のアピアランスパネル</h3>

<p>おまけとして、リボンの形にした座布団のアピアランスパネルを紹介します。　</p>

<p><img src="/images/img/ribbon3_4x.png" alt="可変長座布団_7" height="600px" width="600px" /><br /></p>

<p><strong>１</strong>から<strong>５</strong>まで番号がふられている６つのパネルは、
リボンの先にあたる部分を表現する効果の詳細です。</p>

<p><img src="/images/img/appearance_zabuton7.png" alt="可変長座布団_7" height="600px" width="600px" /><br /></p>

<p>やや複雑なアピアランスパネルです。興味のある方はチャレンジしみてください。</p>]]></content><author><name>サイト作成者</name></author><category term="illustrator" /><category term="illustrator" /><category term="appearance_pannel" /><category term="design" /><summary type="html"><![CDATA[テキストの背面に敷いた四角形や楕円形を「座布団」と呼んだりします。アピアランスとグラフィックスタイルで作成すると関単に文字に座布団を敷けます。 アピアランスパネルだけで作成する座布団の基本的な手順を覚え、それを応用すれば、文字に視覚的な効果のバリエーションが一気に広がります。]]></summary></entry><entry><title type="html">Excelファイルの内容をKey Word検索する</title><link href="https://mnogress.github.io/reference/find_words_in_excel/" rel="alternate" type="text/html" title="Excelファイルの内容をKey Word検索する" /><published>2024-11-22T00:00:00+00:00</published><updated>2025-07-22T13:23:00+00:00</updated><id>https://mnogress.github.io/reference/find_words_in_excel</id><content type="html" xml:base="https://mnogress.github.io/reference/find_words_in_excel/"><![CDATA[<p>Excelファイルの内容をKey Word検索するPython Scriptをまとめました。 <!--more-->
フォルダ内のExcelファイルのタイトルではなく中身について検索するPython Script になります。</p>

<h4 id="if-検索文字-in-検索対象文字列-を理解する">if “検索文字” in “検索対象文字列” を理解する</h4>

<p>検索には、<strong>if “検索文字” in “検索対象文字列”</strong>の構文を使っています。
以下の例で理解できます。検索対象文字列に対して<strong>検索文字を含む部分検索</strong>が可能です。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="code"><pre><span class="k">if</span> <span class="sh">'</span><span class="s">リンゴ</span><span class="sh">'</span> <span class="ow">in</span> <span class="sh">'</span><span class="s">リンゴみかん</span><span class="sh">'</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Matched</span><span class="sh">'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">No Matched</span><span class="sh">"</span><span class="p">)</span>

<span class="o">&gt;&gt;&gt;</span> <span class="n">Matched</span>
<span class="c1"># 'リンゴみかん'の文字列には文字列'リンゴ'はある。</span>
</pre></td></tr></tbody></table></code></pre></figure>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="code"><pre><span class="k">if</span> <span class="sh">'</span><span class="s">リンゴみかん</span><span class="sh">'</span> <span class="ow">in</span> <span class="sh">'</span><span class="s">リンゴ</span><span class="sh">'</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Matched</span><span class="sh">'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">No Matched</span><span class="sh">"</span><span class="p">)</span>

<span class="o">&gt;&gt;&gt;</span> <span class="n">No</span> <span class="n">Matched</span>
<span class="c1"># 'リンゴ'の文字列には文字列'リンゴみかん'はない。</span>
</pre></td></tr></tbody></table></code></pre></figure>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre></td><td class="code"><pre><span class="k">if</span> <span class="sh">'</span><span class="s">リンゴみかん</span><span class="sh">'</span> <span class="ow">in</span> <span class="sh">'</span><span class="s">リンゴみかんレモン</span><span class="sh">'</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Matched</span><span class="sh">'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">No Matched</span><span class="sh">"</span><span class="p">)</span>

<span class="o">&gt;&gt;&gt;</span> <span class="n">Matched</span>
<span class="c1">#  'リンゴみかんレモン'の文字列には文字列'リンゴみかん'はある。</span>
</pre></td></tr></tbody></table></code></pre></figure>]]></content><author><name>サイト作成者</name></author><category term="Reference" /><summary type="html"><![CDATA[Excelファイルの内容をKey Word検索するPython Scriptをまとめました。]]></summary></entry><entry><title type="html">Docker for Windows でJupyter Notebook コンテナを起動させる</title><link href="https://mnogress.github.io/python/jupyter_docker/" rel="alternate" type="text/html" title="Docker for Windows でJupyter Notebook コンテナを起動させる" /><published>2024-11-09T00:00:00+00:00</published><updated>2025-10-29T09:00:00+00:00</updated><id>https://mnogress.github.io/python/-jupyter_docker</id><content type="html" xml:base="https://mnogress.github.io/python/jupyter_docker/"><![CDATA[<p>Docker 環境があると、ちょっとPythDon の勉強用の試しコード作成等や本来ならば個人のPCでやるべきようなことを仕事用などのPCを使う場合等、PCを汚したくない時にDocker環境の中にJupyter Notebook稼働環境を作ってPC環境から独立して使うことができます。</p>

<!--more-->

<style type="text/css">

table {
  display: block;
  margin-bottom: 1em;
  width: 100%;
  font-family: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
  font-size: 0.75em;
  border-collapse: collapse;
  overflow-x: auto;
}

table + table {
  margin-top: 1em;
}

thead {
  background-color: #e6e6fa;
  border-bottom: 2px solid #9b9b9d;
}

th {
  padding: 0.5em;
  font-weight: bold;
  text-align: start;
}

td {
  padding: 0.5em;
  border-bottom: 1px solid #9b9b9d;
}

tfoot {
  background-color: #afeeee;
  padding: 0.5em;
  border-top: 2px solid #9b9b9d;
  border-bottom: 2px solid #9b9b9d;
}

tr,
td,
th {
  vertical-align: middle;
}
_media screen and (max-width:1280px){
.p_table {width:100%;overflow:scroll;}
.p_table table {width:1153px;}
}
_media screen and (max-width:750px){
.resp_table {width:100% !important;}
.resp_table th ,.resp_table td{padding:10px !important;}
}
.rouge {
color: red;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.noir {
color: 1A818;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.bleu {
color: blue;
font-weight: normal;
font-family: inherit;
letter-spacing: inherit;
}
.petit {
font-size: 0.80em;
color: black;
font-family: inherit;
line-height: 1.1;
display: inline-block;
letter-spacing: inherit;
}

.custom-list-violet {
color: rgb(67, 31, 158);
font-size: 24px;
}

</style>

<p>この記事で扱うPC環境は以下のとおりです。</p>

<table class="table">
  <thead>
    <tr>
      <th style="text-align: left">仕様</th>
      <th style="text-align: left">内容</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">PCの仕様</td>
      <td style="text-align: left">Windows 10 Pro バージョン21H1　16GB RAM</td>
    </tr>
    <tr>
      <td style="text-align: left">Docker</td>
      <td style="text-align: left">Docker Desktop for Windows (version 20.10.8, build 3967b7d)</td>
    </tr>
    <tr>
      <td style="text-align: left">その他</td>
      <td style="text-align: left">VS Code 1.62.2</td>
    </tr>
  </tbody>
</table>

<p>Docker Dockerfile の中身は以下のとおりです。ファイルの設置先は、Jupyter Notebook のドキュメントルートとなる<strong>WORKDIR</strong> に設置します。</p>

<p><img src="/images/img/docker_1.png" alt="docker_1" height="600px" width="600px" /><br /></p>

<h3 id="チートシート">チートシート</h3>

<table style="font-size:0.70em;">
  <thead>
    <tr>
      <th style="text-align: left"><strong>コマンド</strong></th>
      <th style="text-align: left"><strong>用途</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left">FROM</td>
      <td style="text-align: left">ベースとなるイメージを指定します。  この例ではpython3.8-slim バージョンとしています。</td>
    </tr>
    <tr>
      <td style="text-align: left">WORKDIR</td>
      <td style="text-align: left">RUN, CMD等実行するコンテナプロセスのワークディレクトリを指定します。この例では、/docker_jupyter としています。</td>
    </tr>
    <tr>
      <td style="text-align: left">RUN</td>
      <td style="text-align: left">docker build 時に実行するコマンド  この例ではnumpy, pandas, jupyter notebook をインストールを指定しています</td>
    </tr>
    <tr>
      <td style="text-align: left">EXPOSE</td>
      <td style="text-align: left">Listen するポート番号を指定する環境変数です。  この例ではjupyter notebook の一般的な8888 を指定しています</td>
    </tr>
    <tr>
      <td style="text-align: left">CMD</td>
      <td style="text-align: left">docker run 時に実行するコマンド  この例ではjupyter notebookの起動オプションとしてjupyter notebook  –no-browser –port=8888 –ip=0.0.0.0 –allow-root　としています。</td>
    </tr>
    <tr>
      <td style="text-align: left">ノートブック起動オプション</td>
      <td style="text-align: left"><span class="bleu">–no-browser</span><br />    起動後にブラウザでノートブックを開かない。ログとして吐き出されるトークン付きURLをブラウザに直接貼り付けて開く必要があります。<br /><br /><span class="bleu">–allow-root</span><br />    ノートブックをrootユーザーから実行できるようにします。<br /><br /><span class="bleu">–ip=</span><Unicode><br />    ノートブックサーバが待ち受ける IP アドレス。<br />    Default: 'localhost‘<br />　0.0.0.0 とするとすべてのインターフェースで待ち受けることとなります。<br />　<br /><span class="bleu">--port=</span><Int><br />    ノートブックがリスンするポート番号(env: JUPYTER_PORT).<br />    Default: 8888</Int></Unicode></td>
    </tr>
  </tbody>
</table>

<h3 id="dockerイメージをdockerfileからビルドする">DockerイメージをDockerFileからビルドする</h3>

<p>Dockerfile で指定した<strong>WORKDIR</strong>と同じディレクトリを作成します。このディレクトリの直下にDockerfile を設置します。</p>

<p>コマンドプロンプトより<strong>docker build -t dev_jupyter . </strong>と入力します。<strong>dev_jupyter</strong>という名前のDockerイメージが作られます。後述する<strong>compose.yml</strong>でもコンテナが無い場合は、Dockerイメージは作成されますが、Dockerfileで記述した内容どおりイメージファイルが作成されることを確認したいので、まずは以下のとおりDockerfille を起動します。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><span class="n">PS</span> <span class="n">C</span><span class="p">:</span>\<span class="n">Users</span>\<span class="n">xxxx</span>\<span class="n">docker_jupyter</span><span class="o">&gt;</span> <span class="n">docker</span> <span class="n">build</span> <span class="o">-</span><span class="n">t</span> <span class="n">dev_jupyter</span> <span class="p">.</span> 
<span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="n">Building</span> <span class="mf">62.5</span><span class="nf">s </span><span class="p">(</span><span class="mi">10</span><span class="o">/</span><span class="mi">10</span><span class="p">)</span> <span class="n">FINISHED</span>
    <span class="n">省略</span>
 <span class="o">=&gt;</span> <span class="o">=&gt;</span> <span class="n">naming</span> <span class="n">to</span> <span class="n">docker</span><span class="p">.</span><span class="n">io</span><span class="o">/</span><span class="n">library</span><span class="o">/</span><span class="n">dev_jupyter</span> </code></pre></figure>

<p>入力した内容とその詳細は下図を参照してください。</p>

<p><img src="/images/img/docker_2.png" alt="docker_2" height="600px" width="600px" /><br /></p>

<p><strong>docker images</strong>とコマンド入力し、作成されたDocker イメージを確認します。添付のスクリーンショットのとおり作成されました。赤枠が今回作成したDockerイメージに相当します。</p>

<p><img src="/images/img/docker_3.png" alt="docker_3" height="600px" width="600px" /><br /></p>

<h3 id="コンテナを作成する">コンテナを作成する</h3>

<p>イメージを作成しただけではノートブックは使えません。ノートブックを使えるようにするため、コンテナを作成します。コマンドプロンプトから<code class="language-plaintext highlighter-rouge">RUN</code>コマンドで作成する方法とdocker-composeを使う方法を紹介します。</p>

<div class="box33">
    <span class="box-title">Point！</span>
  <ol>  
<li>コンテナが消滅してもプログラムなどのユーザデータはWindows PC上に保存できるようでJupyter NotebookのファイルをコンテナとPC間で共有できる</li>
<li>Windows標準のコマンドプロンプト-【方法1】</li>
<li>GitBashとdocker-composeを使う方法-【方法2】</li>
 </ol>
</div>

<h3 id="windows標準のコマンドプロンプトの方法">Windows標準のコマンドプロンプトの方法</h3>

<p>コマンドプロンプトからRUNコマンドを入力して、コンテナをすぐ使える起動状態で作成します。Windows版のDocker を使っています。
共有できるようにするため、volumeを定義します。</p>

<p class="notice--info"><strong>C:\Users\xxxx\docker_jupyter</strong>をコンテナとPCの共有ディレクトリとし、Pythonコード等をPCからエキスプローラで直接共有できるようにします。コマンドの詳細は下図のとおりです。
Windows標準のコマンドプロンプトからコマンド投入することを前提にしたコマンドフォーマットを紹介します。　</p>

<p><img src="/images/img/docker_6.png" alt="docker_6" height="600px" width="600px" /><br /></p>

<p class="notice--info">Windows標準のコマンドプロンプトからコマンド投入することを前提にしたコマンドフォーマットを紹介します。　</p>

<p><strong>docker container run -p 8888:8888  -v “%cd%”:/docker_jupyter  dev_jupyter</strong>
<br />
以下が実際のコマンド投入後のログになります。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><span class="n">C</span><span class="p">:</span>\<span class="n">Users</span>\<span class="n">xxxx</span>\<span class="n">docker_jupyter</span><span class="o">&gt;</span><span class="n">docker</span> <span class="n">images</span>
<span class="n">REPOSITORY</span>    <span class="n">TAG</span>       <span class="n">IMAGE</span> <span class="n">ID</span>       <span class="n">CREATED</span>        <span class="n">SIZE</span>
<span class="n">dev_jupyter</span>   <span class="n">latest</span>    <span class="n">xxx93b79b3</span>   <span class="mi">20</span> <span class="n">hours</span> <span class="n">ago</span>   <span class="mi">395</span><span class="n">MB</span>

<span class="n">C</span><span class="p">:</span>\<span class="n">Users</span>\<span class="n">xxxx</span>\<span class="n">docker_jupyter</span><span class="o">&gt;</span><span class="n">docker</span> <span class="n">container</span> <span class="n">run</span> <span class="o">-</span><span class="n">p</span> <span class="mi">8888</span><span class="p">:</span><span class="mi">8888</span>  <span class="o">-</span><span class="n">v</span> <span class="sh">"</span><span class="s">%cd%</span><span class="sh">"</span><span class="p">:</span><span class="o">/</span><span class="n">docker_jupyter</span>  <span class="n">dev_jupyter</span>
   
  <span class="o">&lt;&lt;</span> <span class="n">省略</span><span class="o">&gt;&gt;</span>
    
    <span class="n">To</span> <span class="n">access</span> <span class="n">the</span> <span class="n">notebook</span><span class="p">,</span> <span class="nb">open</span> <span class="n">this</span> <span class="nb">file</span> <span class="ow">in</span> <span class="n">a</span> <span class="n">browser</span><span class="p">:</span></code></pre></figure>

<p>起動オプションで指定したとおり、ノートブックはブラウザから自動的に起動しません。<strong>copy and paste one of these URLs:</strong>とあるURLをブラウザのURL指定部分にコピペすると、下図のとおりノートブックがコンテナを起動した際のカレントディレクトリを共有ディレクトリ（コンテナの外のDirectory）上に起動します。これらのファイルはDocker コンテナーからアクセスしJupyter Notebook が起動するだけでなく、PCからもエキスプローラでアクセスできるようになります。</p>

<p><img src="/images/img/docker_7.png" alt="docker_7" height="600px" width="600px" /><br /></p>

<h3 id="docker-compose-を使う方法">docker-compose を使う方法</h3>

<p><strong>docker-compose.yml</strong>というcompose ファイルをDockefile と同じディレクトリに配下に設置します。</p>

<p><img src="/images/img/docker_9.png" alt="docker_9" height="600px" width="600px" /><br /></p>

<p>docker-compose.ymlの中身は以下のとおりです。ここでは、volume の記述<strong>${PWD}</strong>が とlinux 用のbashで記述していますので、Windows コマンドプロンプトではなく、<a href="https://gitforwindows.org/">Git Bash</a> から<strong>docker-compose up</strong>コマンドを打つ必要があります。</p>

<p><img src="/images/img/docker_8.png" alt="docker_8" height="600px" width="600px" /><br /></p>

<p class="notice--danger">コンテナが無い場合は、Dockerfile を参照してキャッシュからイメージを再作成した上でコンテナを作成します。</p>

<figure class="highlight"><pre><code class="language-python" data-lang="python"><span class="err">$</span> <span class="n">docker</span><span class="o">-</span><span class="n">compose</span> <span class="n">up</span>
<span class="err">　　</span><span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="n">Building</span> <span class="mf">7.4</span><span class="nf">s </span><span class="p">(</span><span class="mi">8</span><span class="o">/</span><span class="mi">8</span><span class="p">)</span> <span class="n">FINISHED</span>
 <span class="err">　　</span><span class="o">=&gt;</span> <span class="p">[</span><span class="n">internal</span><span class="p">]</span> <span class="n">load</span> <span class="n">build</span> <span class="n">definition</span> <span class="k">from</span> <span class="n">Dockerfile</span> 

 <span class="o">&lt;&lt;</span> <span class="n">省略</span><span class="o">&gt;&gt;</span></code></pre></figure>]]></content><author><name>サイト作成者</name></author><category term="Python" /><category term="Docker" /><category term="Jupyter Notebook" /><category term="Windows" /><summary type="html"><![CDATA[Docker 環境があると、ちょっとPythDon の勉強用の試しコード作成等や本来ならば個人のPCでやるべきようなことを仕事用などのPCを使う場合等、PCを汚したくない時にDocker環境の中にJupyter Notebook稼働環境を作ってPC環境から独立して使うことができます。]]></summary></entry></feed>