<?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>Python &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/category/tools/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://uxmeetsdata.com</link>
	<description>UXとデータによる価値創発メディア</description>
	<lastBuildDate>Mon, 03 Jun 2024 07:01:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<item>
		<title>ColabではじめるPython #04</title>
		<link>https://uxmeetsdata.com/colab-python-04/</link>
				<pubDate>Sun, 17 Feb 2019 11:52:41 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Colab]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1998</guid>
				<description><![CDATA[条件分岐はif文のみ。 Pythonの基本的な構文に、条件分岐と繰り返しがあります。これは他のプログラミング言...<p class="more-link"><a href="https://uxmeetsdata.com/colab-python-04/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python.png" alt="" class="wp-image-3468" width="480" height="243"/></figure></div>



<h2><strong>条件分岐はif文のみ。</strong></h2>



<p>Pythonの基本的な構文に、<strong>条件分岐</strong>と<strong>繰り返し</strong>があります。これは他のプログラミング言語でもほぼ共通して存在するものです。</p>



<p><strong>条件分岐（Conditional Branch）</strong>とは、条件により処理を分岐させることをといい、<strong>if文</strong>を用います。C/C++などに存在するswitch文はPythonには存在しません。一般的に、<strong>分岐が少ない場合はif文</strong>、<strong>分岐が多い場合はswitch文</strong>を使うことが多いですが、Pythonではすべてif文で記述します。switch文は分岐をシンプルに表現できますが、Pythonでは<strong>辞書</strong>を使ってif文をシンプルに表現できます。</p>



<p>if文は以下のフォーマットで記述します。elif文はいくつでも入れることができます。</p>



<pre class="wp-block-preformatted">if <em>条件式1</em>:<br>    <em>条件式1が真の場合の処理</em><br>elif <em>条件式2</em>:<br>    <em>条件式1が偽で条件式2が真の場合の処理</em><br>else:<br>    <em>すべての条件式が偽の場合の処理</em></pre>



<p>if文のサンプルコードは以下のとおりです。</p>



<script src="https://gist.github.com/crosshack/aaef1bc595fb4052fce237ce4481702d.js"></script>



<p>なお、条件式は「x == 1」のように記述しますが、この「==（等しい）」を<strong>比較演算子</strong>といい、他には「!=（異なる）」「&gt;（大なり）」「&lt;（小なり）」などがあります。また、複数の条件式を「and（論理積）」「or（論理和）」などの<strong>論理演算子</strong>で組み合わせることが可能です。</p>



<p>条件と処理を添字と値で表現できる場合は「dict = {1:&#8221;A&#8221;, 2:&#8221;B&#8221;, 3:&#8221;C&#8221;}」のような辞書を定義することで「if x in dict: print( dict[ x ] )」のようなシンプルな構文で記述することができます。ここでの「in」は<strong>in演算子</strong>といい「<em>変数</em> in <em>イテラブルオブジェクト</em>」のフォーマットで記述することで、リストやタプルなどの<strong>イテラブルオブジェクト</strong>（要素を順番に取り出すことのできるオブジェクト）から順に要素を取り出して変数に代入します。</p>



<p>またif文は、条件式を<strong>ヘッダ（Header）</strong>、条件式にひもづく処理を<strong>スイート（Suite）</strong>とする二つの部分に分けられます。このようなヘッダとスイートの組合せからなる構文を<strong>複合文 </strong>といいます。</p>



<p>Pythonでは、複合文の<strong>ヘッダの行末のコロン「:」</strong>と<strong>スイートの各行の行頭のインデント（スペースまたはタブ）</strong>の記述が必須となります。また、同じ複合文内のインデント量は揃える必要があります。こういった記述ルールを守らないと実行時にエラーとなるわけですが、この厳格なルールがPythonの可読性を高める要因のひとつになっています。</p>



<h2><strong>繰り返しはfor文またはwhile文。</strong></h2>



<p><strong>繰り返し（Loop）</strong>は、同じ処理を自動的に複数回実行することをいい、<strong>for文</strong>または<strong>while文</strong>を用います。</p>



<p>for文は以下のフォーマットで記述し、リストやタプルなどのイテラブルオブジェクトから順に要素を取り出して変数に代入し、<strong>要素の数だけ処理を繰り返し実行</strong>します。ここでの「in」は前述のif文と同様のin演算子です。</p>



<pre class="wp-block-preformatted">for <em>変数</em> in <em>イテラブルオブジェクト</em>:<br><em>&nbsp; 処理</em></pre>



<p>while文は以下のフォーマットで記述し、<strong>条件式が真の場合に処理を繰り返し実行</strong>します。</p>



<pre class="wp-block-preformatted">while <em>条件式</em>:<br>  <em>条件式が真の場合の処理</em></pre>



<p>なお、for文もwhile文も複合文となるため、前述のヘッダとスイートの記述ルールを守る必要があります。サンプルコードは以下のとおりです。</p>



<script src="https://gist.github.com/crosshack/38672e62c0a26d1bde66e28e1ddd6eb1.js"></script>



<p>また、Python特有の記述方法に<strong>リスト内包表記</strong>があり、for文を以下のフォーマットで記述します。</p>



<pre class="wp-block-preformatted"><em>変数Y</em> = [ <em>処理</em> for <em>変数X</em> in <em>イテラブルオブジェクト</em> ]</pre>



<p>リスト内包表記でのfor文のサンプルコードは以下のとおりです。</p>



<script src="https://gist.github.com/crosshack/86c922eb8c4733267ab5ae1c8ca88248.js"></script>



<p>リスト内包表記を使うことで、for文で繰り返し処理をした出力をそのままリスト型の変数に代入することが可能となります。また、記述が非常にシンプルになるため、Pythonの可読性を高める要因のひとつになっています。</p>



<h2><strong>強力な拡張モジュール。</strong></h2>



<p>さて、ここまではPythonの基本機能の説明でしたが、Pythonには<strong>NumPy</strong>・<strong>Pandas</strong>・<strong>scikit-learn</strong>など数多くの<strong>強力なデータサイエンス向け拡張モジュール</strong>があり、それらの機能を利用することで生産性は飛躍的に向上します。</p>



<p>利用するには、モジュールの読み込みが必要で、以下のフォーマットで記述します。なお、モジュール名には任意の別名をつけることができます。また、モジュール内の特定のクラスのみをインポートすることも可能です。</p>



<pre class="wp-block-preformatted">import <em>モジュール名</em> as <em>別名</em><br>from <em>モジュール名</em> import <em>クラス名</em></pre>



<p>試しにNumPyとPandasを使ってみます。以下の例のように、NumPyは「np」、Pandasは「pd」という別名をつけることが一般的です。</p>



<script src="https://gist.github.com/crosshack/a3b7c1c0b3f71c5edb727d6b830378f9.js"></script>



<p>最後に、データサイエンスでよく利用する拡張モジュールをいくつかご紹介しておきます。いろいろなウェブサイトやGitHubでサンプルコードが提供されているので、それに倣えばある程度は実装できるかと思います。ただ、これまでに説明した基本機能をしっかりと把握していないと、細かいところで必ずつまづきます。何事も基礎が大切ということですね。</p>



<table>
<tr style="color: #fff; background-color: #000;">
<td style="width: 100px;">モジュール名</td>
<td style="width: 200px;">概要</td>
</tr>
<tr>
<td style="background-color: #eee;">NumPy</td>
<td style="text-align:left;"><ul>
  <li>数値計算用</li>
  <li>配列や行列の演算を高速に実行可能</li>
  <li>高速なC言語で実装</li>
</ul></td>
</tr>
<tr>
<td style="background-color: #eee;">Pandas</td>
<td style="text-align:left;"><ul>
  <li>データ解析用</li>
  <li>行列や時系列データの扱いに優れるデータフレームを提供</li>
  <li>速度が必要な部分はC言語などで実装</li>
</ul></td>
</tr>
<tr>
<td style="background-color: #eee;">scikit-learn</td>
<td style="text-align:left;"><ul>
  <li>機械学習用</li>
  <li>SVMやK平均法など回帰・分類に関するあらゆるアルゴリズムを提供</li>
  <li>いくつかのコアアルゴリズムは高速なCythonで実装</li>
</ul></td>
</tr>
<tr>
<td style="background-color: #eee;">matplotlib</td>
<td style="text-align:left;"><ul>
  <li>グラフ描画用</li>
  <li>散布図や箱ひげ図などあらゆるグラフを描画可能</li>
</ul></td>
</tr>
<tr>
<td style="background-color: #eee;">Seaborn</td>
<td style="text-align:left;"><ul>
  <li>グラフ描画用</li>
  <li>matplotlibをさらに拡張したモジュールで、より簡単に美しいグラフを描画可能</li>
</ul></td>
</tr>
</table>
]]></content:encoded>
										</item>
	<item>
		<title>ColabではじめるPython #03</title>
		<link>https://uxmeetsdata.com/colab-python-03/</link>
				<pubDate>Sat, 16 Feb 2019 06:52:24 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Colab]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1945</guid>
				<description><![CDATA[リストは配列。 Pythonには基本的なデータ構造として、リスト・タプル・辞書があります。他のプログラミング言...<p class="more-link"><a href="https://uxmeetsdata.com/colab-python-03/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python.png" alt="" class="wp-image-3468" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>リストは配列。</strong></h2>



<p>Pythonには基本的なデータ構造として、<strong>リスト</strong>・<strong>タプル</strong>・<strong>辞書</strong>があります。他のプログラミング言語でいうと、リストとタプルは配列、辞書は連想配列にあたります。配列は、<strong>同じ型の複数の値（Value）を、添字（Key）と一つの変数により管理する仕組み</strong>のことで、<strong>添字が0から始まる連続する整数</strong>の場合を<strong>配列（Array）</strong>、<strong>添字が任意の数値や文字列</strong>の場合を<strong>連想配列（Associative Array）</strong>といいます。</p>



<p><strong>リスト（List）</strong>は、添字に0から始まる連続する整数をもつ配列です。以下の例の「list = [ 1, 3, 5, 7 ]」ように、<strong>括弧「[]」で括られた中にカンマ「,」区切りで値を指定し、変数に代入する</strong>ことで作成します。値は数値と文字列のいずれも許容されます。ちなみに「u&#8217;東京都&#8217;」のように、文字列の前に「u」とありますが、これはマルチバイト文字をユニコード指定する場合に用います。</p>



<script src="https://gist.github.com/crosshack/2caf4e27670910b64c7e21a204f252fe.js"></script>



<p>なお、添字は0からの連続する整数が自動で割り振られるため指定はしません。また、ほとんどのプログラム言語では、配列の添字は0から開始しますが、例外としてR言語の配列の添字は1から開始するため注意が必要です。</p>



<p>リストの中の値を参照するには「list[0]」のように<strong>変数[添字]</strong>の形で指定します。ここでは「list[0], list[1]&#8230;」のように列記していますが、添字が連続する整数であるという特性を活かして、for文やwhile文などの繰り返し文を使って自動化できます。こちらについては次回の記事で説明します。</p>



<p>また「list[1:3]」のように、連続する添字の一部をスライス（切り出し）することもできます。この場合は、添字の1から3の直前（つまり2）までを切り出すという意味になります。</p>



<h2><strong>タプルはイミュータブルな配列。</strong></h2>



<p><strong>タプル（Tuple）</strong>は、リストと同じく添字に0から始まる連続する整数をもつ配列です。以下の例の「tuple = ( 1, 3, 5, 7 )」ように、<strong>括弧「()」で括られた中にカンマ「,」区切りで値を指定し、変数に代入する</strong>ことで作成します。タプルの中の値を参照するには「tuple[0]」のように<strong>変数[添字]</strong>の形で指定します。また「tuple[1:3]」のように、連続する添字の一部をスライス（切り出し）することもできます。</p>



<script src="https://gist.github.com/crosshack/24df515b5215d01dc0d2e2552c8a0c5a.js"></script>



<p>これだけみると、リストとの違いはありませんが、タプルには以下のような特徴があります。</p>



<ul><li>要素が追加・削除・変更ができない。</li><li>要素をくくる括弧は「()」を使用する。</li><li>使用メモリがリストに比べて小さい。</li><li>多くの場合でリストよりタプルの方が早く演算できる。</li></ul>



<p>ちなみに、要素の追加・削除・変更ができないことを<strong>イミュータブル（Immutable）</strong>といい、プログラムを共同開発する際に、変数の値を勝手に変えられないようにしたい場合に有用です。対して、リストは要素の追加・変更・削除が可能であり、<strong>ミュータブル（Mutable）</strong>といいます。また、リストとタプルはlist()関数とtuple()関数を使って相互に変換できます。</p>



<h2><strong>辞書はキーバリュー型データベース。</strong></h2>



<p><strong>辞書（Dictionary）</strong>は、添字に任意の数値または文字列を指定する連想配列です。以下の例の「dict = { 13:u&#8217;東京都&#8217;, 27:u&#8217;大阪府&#8217;, &#8230; }」のように、<strong>括弧「{}」で括られた中にカンマ「,」区切りでコロン「:」をはさむ形で添字と値を指定し、変数に代入する</strong>ことで作成します。添字と値ともに数値と文字列のいずれも許容されます。辞書の中の値を参照するには「dict[0]、dict[u&#8217;東京都&#8217;]」のように<strong>変数[添字]</strong>の形で指定します。添字に任意の数値や文字列を利用できるため、キーバリュー型のデータベースのような使い方ができます。</p>



<script src="https://gist.github.com/crosshack/61410b380c078b3b50e0c82763685f28.js"></script>



<p>このように、リスト・タプル・辞書にはそれぞれの特徴があるため、それらを理解した上で、用途に合わせて使い分けていく必要があります。</p>



<p>次回は「ColabではじめるPython」最終回、<strong>条件分岐</strong>と<strong>繰り返し</strong>について簡単に触れていきます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>ColabではじめるPython #02</title>
		<link>https://uxmeetsdata.com/colab-python-02/</link>
				<pubDate>Thu, 14 Feb 2019 07:51:10 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Colab]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1922</guid>
				<description><![CDATA[四則演算は算数と同じ。 簡単なPythonプログラミングをやってみます。まずはColabにアクセスしましょう。...<p class="more-link"><a href="https://uxmeetsdata.com/colab-python-02/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python.png" alt="" class="wp-image-3468" width="480" height="242"/></figure></div>



<h2><strong>四則演算は算数と同じ。</strong></h2>



<p>簡単なPythonプログラミングをやってみます。まずはColabにアクセスしましょう。なお、Colabの使い方は「<a href="https://uxmeetsdata.com/colab-python-01/">ColabではじめるPython #01</a>」を参照してください。ログインして、メインメニューの［ファイル］から［Python 3 の新しいノートブック］を選びます。</p>



<p>以下のように、加算・減算などの<strong>四則演算</strong>ができることがわかります。「+, -」などを<strong>代数演算子</strong>といいます。なお、除算は「/」を使いますが、小数点以下を切り捨てたい場合は「//」、剰余（あまり）を出したい場合は「%」を使います。</p>



<script src="https://gist.github.com/crosshack/77c1230151ab0b1ac4a4592f8d823ed5.js"></script>



<p>四則演算の計算の優先順位を確認しておきます。といいつつ、算数と同じです。加算・減算よりも乗算・除算が優先され、下記の「四則演算の優先順位１」のような計算結果になります。また、括弧でくくられた部分が優先され、下記の「四則演算の優先順位２」のような計算結果になります。</p>



<script src="https://gist.github.com/crosshack/26eef041f6f51b0364e7b4e7f5e37336.js"></script>



<h2><strong>変数と関数。</strong></h2>



<p>これまでの四則演算で記述していた「10」や「3」などは<strong>静的（Static）</strong>な値であり、これを<strong>定数（constant）</strong>といます。一方で、プログラミングでは<strong>動的（Dynamic）</strong>な値を計算することができ、その値を<strong>変数（Variable）</strong>といいます。</p>



<p>以下の例でいうと、xやyが変数です。また「x = 10、x = &#8216;Hello, &#8216;」のように変数に値を入れることを<strong>代入</strong>といい、「=」を<strong>代入演算子</strong>といいます。変数に数値を代入して加算すると数値を加算した結果が、変数に文字列を代入して加算すると文字列を連結した結果が、それぞれ得られます。</p>



<script src="https://gist.github.com/crosshack/2d45171f931f17e8421237558863cdc9.js"></script>



<p>ちなみに print (<em>X</em>)は、入力値<em>X</em>の内容を出力するという<strong>関数</strong>です。関数とは、<strong>与えられた入力値で固有の処理を行い、その結果の出力値を返すプログラム</strong>のことです。与えられた入力値を<strong>引数</strong>、返された出力値を<strong>戻り値</strong>といいます。この場合の引数は「x + y」で、戻り値は「13」や「Hello, World!」です。また、print()関数のようにあらかじめ用意されているものもありますが、自分で任意に作ることもできます。あらかじめ用意された関数を集めたものを<strong>関数ライブラリ</strong>といいます。</p>



<h2><strong>オブジェクトとクラス。</strong></h2>



<p>Pythonはオブジェクト指向のプログラミング言語です。<strong>オブジェクト指向プログラミング</strong>は、プログラムを<strong>処理手順</strong>＝<strong>手続き（Procedure）</strong>ではなく、<strong>モノ</strong>＝<strong>オブジェクト（Object）</strong>とみなし、それぞれのオブジェクトに役割をもたせて分業するスタイルのプログラミング手法です。一方で、処理手順をもとにしたプログラミング手法を<strong>手続き型プログラミング</strong>といいます。</p>



<p>オブジェクトは、変数と関数から構成されます。クルマでたとえると、「エンジン・ハンドル・タイヤ」などが変数で、「エンジンを起動する・ハンドルの操作に合わせてタイヤを動かす」などが関数にあたります。</p>



<p>また、同じクルマを量産するためには設計図が必要ですが、オブジェクト指向プログラミングではその設計図を<strong>クラス（Class）</strong>といいます。そのクラスをもとに生成された各オブジェクトを<strong>インスタンス（Instance）</strong>といいます。また、クラスで定義された関数を<strong>メソッド（Method）</strong>といいます。</p>



<p>これらの概念や言葉はピンとこないかもしれません。また「Colab ではじめるPython」では深くは扱いません。しかしながら、Pythonプログラミングを進める上では必須のものになりますので、頭の片隅に入れておいてもらえればと思います。</p>



<p>次回は、<strong>リスト・タプル・辞書</strong>というデータ構造の概念について簡単に触れていきます。</p>
]]></content:encoded>
										</item>
	<item>
		<title>ColabではじめるPython #01</title>
		<link>https://uxmeetsdata.com/colab-python-01/</link>
				<pubDate>Wed, 13 Feb 2019 14:25:27 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Colab]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1815</guid>
				<description><![CDATA[インストールなしで、そのまま。 Pythonでデータサイエンスに入門したいけど敷居が高い、そう感じている方も多...<p class="more-link"><a href="https://uxmeetsdata.com/colab-python-01/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_python.png" alt="" class="wp-image-3468" width="480" height="242"/></figure></div>



<h2><strong>インストールなしで、そのまま。</strong></h2>



<p>Pythonでデータサイエンスに入門したいけど敷居が高い、そう感じている方も多いと思います。実は、<strong>Pythonは他のプログラミング言語と比べて学習コストが低い</strong>と言われています。文法がシンプルで、汎用性と可読性が高いことがその理由です。また、C/C++のような変数宣言やコンパイルも必要ありません。実際に使えばわかります。</p>



<p>とはいえ最初に立ちはだかる壁は環境準備です。本格的なプログラム開発を行う場合はPyCharmなどの<strong>統合開発環境（Integrated Development Environment：IDE）</strong>が便利ですが、手軽ではありません。Jupyter Notebookは<strong>ブラウザUIの対話式プログラム実行環境</strong>で、手軽に扱えるもののインストールが面倒です。Google Cloud Datalabは<strong>Jupyter NotebookベースのPython実行環境のクラウドサービス</strong>で、インストールなしで使うことができますが、利用料がかかるためトレーニングには向いていません。</p>



<p>そこでおすすめしたいのが <strong>Google Colab</strong>です。Google Colabは、Jupyter NotebookベースのフルマネージドなPython実行環境で、Googleが<strong>機械学習の教育や研究のために無償提供</strong>しているものです。利用するには、Google ColabのURLにアクセスし、<strong>Googleアカウントでログインする</strong>だけです。Googleアカウントをすでにお持ちであれば、すぐに始められます。</p>



<h2><strong>まずはお約束の「Hello, World!」</strong></h2>



<p>では、さっそくGoogle ColabでPythonをはじめてみましょう。<a href="https://colab.research.google.com/notebooks/welcome.ipynb">Google Colab</a>にアクセスしてみてください。検索エンジンで「Google Colab」と検索してもらっても結構です。すると、以下の画面が表示されるので、あとはご自身のGoogleアカウントでログインするだけです。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_1a.jpg" alt="" class="wp-image-3469" width="560" height="313"/></figure></div>



<p>ログインできたら、メインメニューの［ファイル］から［Python 3 の新しいノートブック］を選びます。表示される画面に、以下のような入力エリアがあるかと思います。ここにソースコードを記述して左端の［▶︎］ボタンをクリックするか、Macであれば［⌘+Enter］キー、Windowであれば［Ctrl+Enter］キーでプログラムを実行できます。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_colab_1b-1024x86.jpg" alt="" class="wp-image-3470" width="560" height="34"/></figure></div>



<p>ひとまず、お約束の「Hello, World!」を表示するプログラムを書いてみましょう。入力エリアに「print (&#8216;Hello, World!&#8217;)」と記述し、実行してみてください。以下のように「Hello, World!」が出力エリアに表示されるかと思います。</p>



<script src="https://gist.github.com/crosshack/1834293071d82fc3df64f285d474b5a6.js"></script>



<p>続けて、簡単な計算をしてみましょう。入力エリアに「1 + 1」と記述し、実行してみてください。以下のように「2」が出力エリアに表示されるかと思います。こんな具合に、とても手軽にPythonプログラミングを楽しむことができるわけです。</p>



<script src="https://gist.github.com/crosshack/43a7d6fc070ec4f4feddaf8fc3fc6f4b.js"></script>



<h2><strong>あくまでトレーニング用。</strong></h2>



<p>Pythonプログラミングの実践については次回以降にするとして、この記事の最後にGoogle Colabの特長と制約をまとめておきます。まず特長は以下のとおりです。</p>



<ul><li>インストール不要で、無料で利用可能。</li><li>ブラウザUIの対話式プログラム実行環境で非常に手軽。</li><li>クラウドの高性能なCPU・GPU・TPUを利用可能。</li><li>メジャーな機械学習系ライブラリがインストール済み。</li><li>GitHubおよびGistとの連携が簡単。</li></ul>



<p>一方で、いくつかの制約事項や欠点があります。あくまで教育・研究用の無償サービスであると考えたほうがよいでしょう。</p>



<ul><li>プログラム実行やデータ保存がパブリック領域でなされるため、秘匿性の高いデータを扱うことができない。</li><li>ノートブックのセッション切れが90分続くとインスタンスがシャットダウンされる。また、新しいインスタンスを起動してから12時間経過するとインスタンスがシャットダウンされる。</li><li>機械学習向け以外のライブラリが少ない。（ただし、追加インストールは可能）</li></ul>



<p>では次回以降で、Pythonプログラミングの実践に踏み込んで行きたいと思います。</p>
]]></content:encoded>
										</item>
	<item>
		<title>Python vs. R どっち？</title>
		<link>https://uxmeetsdata.com/python-vs-r/</link>
				<pubDate>Sat, 02 Feb 2019 05:48:51 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=884</guid>
				<description><![CDATA[データサイエンスは時間が命。 データサイエンスや統計のためのツールはたくさんありますが、その中でもPython...<p class="more-link"><a href="https://uxmeetsdata.com/python-vs-r/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_python_r.png" alt="" class="wp-image-6453" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_python_r.png 640w, https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_python_r-300x150.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<h2><strong>データサイエンスは時間が命。</strong></h2>



<p>データサイエンスや統計のためのツールはたくさんありますが、その中でも<strong>Python</strong>と<strong>R</strong>はその人気を二分していると言えるでしょう。これからデータサイエンスを始める方にとっては、どちらを選択すべきか悩ましいところです。</p>



<p>筆者はRから始めてPythonに移行した派です。理由は後述しますが、優劣ではなく、Pythonのほうが用途に適していたからです。それぞれの特徴を理解した上で、<strong>用途に合っている方を選択すればよい</strong>と思います。もしくは<strong>用途に合わせて使い分ける</strong>ことをおすすめします。</p>



<p>PythonもRも汎用的なプログラミング言語なので、自分でプログラムさえ書けば何でもできます。そう言ってしまえば、C/C++でもJavaでも何でもいいじゃないか、という話になりますが、実際そのとおりです。後述しますが、実行速度でいえばPythonよりもC/C++のほうが圧倒的に速いですし、NumPyやTensorFlowのようなC/C++で作られたPython用拡張モジュールも多数あります。</p>



<p>ツールを選択する上で重要な判断基準となるのは、何ができるかではなく、どれだけ効率的かという点です。<strong>データサイエンスは時間が命</strong>です。限りある時間を、数理モデルやアルゴリズムを考えたり、試行錯誤に使うためには、プログラミングや処理実行にかかる時間は可能なかぎり短縮すべきです。</p>



<p>データサイエンスや統計でPythonとRが選ばれているのは、どちらもこの領域における効率性が高いからです。ただ、そのポイントが異なるため、どちらを選択すべきかという話になります。</p>



<h2><strong>ビッグデータのPython、統計のR。</strong></h2>



<p>PythonとRの特徴を、効率性の観点から、いくつかの軸で比較します。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td>&nbsp;</td>
<td>Python</td>
<td>R</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム実行速度</td>
<td>遅い</td>
<td>非常に遅い</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム汎用性</td>
<td>高い</td>
<td>やや低い</td>
</tr>
<tr>
<td style="background-color: #eee;">プログラム可読性</td>
<td>高い</td>
<td>やや低い</td>
</tr>
<tr>
<td style="background-color: #eee;">ライブラリ・統計解析</td>
<td>豊富</td>
<td>非常に豊富</td>
</tr>
<tr style="height: 32px;">
<td style="background-color: #eee;">ライブラリ・機械学習</td>
<td>非常に豊富</td>
<td>豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">リファレンス・統計解析</td>
<td>豊富</td>
<td>非常に豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">リファレンス・機械学習</td>
<td>非常に豊富</td>
<td>豊富</td>
</tr>
<tr>
<td style="background-color: #eee;">クラウド実行環境</td>
<td>あり</td>
<td>なし</td>
</tr>
</table>



<p>Pythonの特徴をRとの比較で整理します。</p>



<ul><li><strong>実行速度は相対的に速い</strong>。</li><li>プログラミング言語としての完成度が高く、<strong>汎用性と可読性に優れる</strong></li><li>統計解析系のライブラリやリファレンスの豊富さはやや劣る</li><li><strong>機械学習系のライブラリやリファレンスが非常に充実している</strong>（scikit-learn、TensorFlow、PyTorchなど）</li><li><strong>クラウドでの実行環境が存在する</strong>（Google Cloud Datalab、Google Colabなど）</li></ul>



<p>この特徴の違いから、<strong>Pythonはビッグデータ解析や機械学習に</strong>、<strong>Rは統計解析に</strong>向いていることがわかります。とりわけビッグデータ解析では、<strong>クラウド実行環境の存在が重要</strong>で、筆者がPythonに移行した最大の理由はそれです。</p>



<p>ビッグデータ解析では、当然のことながら大量のデータを処理する必要があります。とくに<strong>ノンサンプリングでの分析が必要な場合、サンプリングによってデータ量を減らすことができない</strong>ため、大量データと向き合わざるを得ません。</p>



<p>まず何よりも、実行速度が求められます。PythonはRより相対的に速いとはいえ遅いことにはかわりませんし、どの言語を使おうが最終的にはコンピュータの処理速度に依存します。<strong>クラウドではCPUやGPUのスケールを自由にコントロールすることが可能</strong>です。</p>



<p>次に、データ連携の問題があります。データベース（Database：DB）との連携が必要で、とくに<strong>DBがクラウド上にある場合は、プログラム実行環境も同じクラウド上にあれば、シームレスな連携が可能</strong>になります。たとえば、DBがGoogle BigQueryであれば、Google Cloud DatalabというクラウドのPython実行環境からBigQueryに直接クエリを実行できます。これにより、<strong>データ準備（Data Preparation）</strong>をBigQueryでSQLにより行い、<strong>データマイニング（Data Mining）</strong><sup id="footnote_plugin_tooltip_1" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_1');">1)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_1"><a href="https://uxmeetsdata.com/data-mining/">再考するデータマイニング</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_1").tooltip({		tip: "#footnote_plugin_tooltip_text_1",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>や<strong>機械学習（Machine Learning）</strong><sup id="footnote_plugin_tooltip_2" class="footnote_plugin_tooltip_text" onclick="footnote_moveToAnchor('footnote_plugin_reference_2');">2)</sup><span class="footnote_tooltip" id="footnote_plugin_tooltip_text_2"><a href="https://uxmeetsdata.com/machine-learning/">いまさら聞けない機械学習</a></span><script type="text/javascript">	jQuery("#footnote_plugin_tooltip_2").tooltip({		tip: "#footnote_plugin_tooltip_text_2",		tipClass: "footnote_tooltip",		effect: "fade",		fadeOutSpeed: 100,		predelay: 400,		position: "top right",		relative: true,		offset: [10, 10]	});</script>をCloud DatalabでPythonにより行うといった役割分担が容易になります。</p>



<p>ちなみに、ベースとなっているJupyter NotebookはRに対応していますが、Google Cloud Datalabは、いまのところRには対応しておらず、Pythonのみの対応となっています。</p>



<h2><strong>PythonとRだけではない？</strong></h2>



<p>PythonとRで迷うようであれば、Pythonをおすすめします。前述の理由もそうですが、基本的にはRにできてPythonにできないことはほとんどありません。統計解析のライブラリやリファレンスについても、現在はRのほうが充実していますが、Pythonもかなり追いついて来ています。</p>



<p>さらにいうと、選択肢はPythonとRだけではありません。NumPyやTensorFlowのようなC/C++で作られたPython用拡張ライブラリがあることはお伝えしましたが、高速化の要求レベルによってはC/C++を使う必要があります。</p>



<p>C/C++とPythonの実行速度の違いの要因はいくつかありますが、その一つが変数宣言の違いです。<strong>C/C++は静的型付き言語で、変数宣言時に型の定義が必要</strong>ですが、<strong>Pythonは動的型付き言語で、型は自動的に決定</strong>されます。自動車でいうMTとATの違いのようなもので、動的型付き言語は自動であるがゆえに、プログラミングの作業負荷が軽減される反面、最適化の自由度が失われます。なお、PythonにC/C++の型を導入することで高速化した<strong>Cython</strong>という言語もあります。</p>



<p>また、<strong>Pythonの扱いやすさと、C/C++にせまる実行速度を兼ね備えた言語</strong>として、<strong>Julia</strong>が注目されています。発展途上であるため、ライブラリの充実度でPythonに劣りますが、外部ライブラリ連携でカバーできます。また、並列処理や分散コンピューティングが想定された設計で、実装しやすいという特長があります。</p>



<p>ちなみに、ブラウザUIの対話型プログラム実行環境であるJupyter Notebookは、かつてのiPython Notebookが改称されたものですが、その由来は「<strong>Ju</strong>lia + <strong>Pyt</strong>hon + <strong>R</strong>」で、PythonのみからJuliaとRにも拡張されたことを意味しています。</p>



<p>ビッグデータ解析領域でJuliaの普及が進めば、現在はPythonのみの対応であるGoogle Cloud Datalabも、Juliaに対応する可能性はあります。いまからデータサイエンスを始める方は、Juliaを選ぶのもひとつかもしれませんね。</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
