<?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>Data Science &#8211; uxmeetsdata.com</title>
	<atom:link href="https://uxmeetsdata.com/tag/data-science/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>UX × Data もくもく会のお知らせ</title>
		<link>https://uxmeetsdata.com/mokumoku/</link>
				<pubDate>Thu, 30 May 2019 10:35:32 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[info]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX Design]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=9811</guid>
				<description><![CDATA[もくもく会、はじまる。 「UX × Data」をテーマとした”もくもく会“を、2019...<p class="more-link"><a href="https://uxmeetsdata.com/mokumoku/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>もくもく会、はじまる。</strong></h2>



<p>「<strong>UX × Data</strong>」をテーマとした&#8221;<strong>もくもく会</strong>&#8220;を、2019年7月より定期開催します。もくもく会なので、<strong>各自での自習を基本としたスキル向上</strong>が主な目的ですが、同時に「UX × Data」というテーマに関心や課題をもつ人の<strong>交流や協力の場</strong>にできればと考えています。また「UX × Data」で<strong>何らかの不便さや社会問題を解決できないか</strong>について息抜きがてら雑談し、アイデアの種が生まれたら、実現や事業化に向けた取り組みも検討します。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_mokumoku-e1559172928944.jpg" alt="" class="wp-image-9883" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_mokumoku-e1559172928944.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_mokumoku-e1559172928944-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>開催要項は下記のとおりで、各回の告知と募集は<strong><a href="https://techplay.jp/event/search?keyword=uxmeetsdata">TECH PLAY</a></strong>で随時行ないます。みなさまと&#8221;もくもく&#8221;できることを楽しみにしております。</p>



<center>
<input type="button" value="告知・募集［TECH PLAY］" onclick="window.open('https://techplay.jp/event/search?keyword=uxmeetsdata&amp;yet=1')">
</center>
<br>



<table>
<tbody>
<tr>
<td style="color: #fff; background-color: #000;">主題</td>
<td style="text-align:left;"><strong>UXデザインのためのデータ分析</strong>を”もくもく&#8221;と自習する</td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">目的</td>
<td style="text-align:left;"><ol>
  <li>UXデザインのためのデータ分析の<strong>スキル向上</strong></li>
  <li>UXとデータに関心をもつ人の<strong>ネットワーキング</strong></li>
  <li>不便さや社会問題を解決する<strong>アイデア創発と実現</strong></li>
</ol></td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">ルール</td>
<td style="text-align:left;"><ul>
  <li>各自で自習する</li>
  <li>教え合う、助け合う</li>
  <li>途中入室・退室は自由</li>
  <li>主催者から課題設定、実施は任意</li>
  <li>息抜きがてら雑談（アイデア創発）</li>
  <li>成果発表は不要</li>
</ul></td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">ツール</td>
<td style="text-align:left;"><ul>
  <li><strong>Google Cloud Datalab / Colab</strong>（Python）</li>
  <li><strong>Google BigQuery</strong>（DWH/SQL）</li>
  <li><strong>Tableau Desktop / Public</strong>（BI）</li>
</ul></td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">開催日時</td>
<td style="text-align:left;">毎月第1・第3木曜 19:00〜22:00<br>※都合により変更あり</td>
</tr>
<td style="color: #fff; background-color: #000;">タイムテーブル</td>
<td style="text-align:left;"><ul>
  <li>18:30｜開場</li>
  <li>19:00｜開始・課題設定</li>
  <li>19:15｜<strong>もくもくタイム</strong></li>
  <li>20:15｜もぐもぐタイム（雑談）</li>
  <li>20:30｜<strong>もくもくタイム</strong></li>
  <li>21:30｜もぐもぐタイム（振り返り）</li>
  <li>21:45｜終了・解散</li>
</ul></td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">会場</td>
<td style="text-align:left;"><a href="https://www.google.co.jp/maps/place/co-lab+%E6%B8%8B%E8%B0%B7%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88/@35.6625857,139.7030288,20z/data=!4m5!3m4!1s0x0:0xc8295b4bca4f6806!8m2!3d35.6627203!4d139.7032412" target="_blank" rel="noopener noreferrer">co-lab 渋谷キャスト</a><br>※都合により変更あり</td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">定員</td>
<td style="text-align:left;">7名</td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">会費</td>
<td style="text-align:left;">無料</td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">持ち物</td>
<td style="text-align:left;"><ul>
  <li>PC・書籍など”<strong>もくもく</strong>&#8220;に必要なもの</li>
  <li>菓子・飲物など&#8221;<strong>もぐもぐ</strong>&#8220;な差し入れ大歓迎</li>
</ul></td>
</tr>
<tr>
<td style="color: #fff; background-color: #000;">告知・募集</td>
<td style="text-align:left;"><a href="https://techplay.jp/event/search?keyword=uxmeetsdata&#038;yet=1" target="_blank" rel="noopener noreferrer"><strong>TECH PLAY</strong></a><br>※「uxmeetsdata」で検索</td>
</tr>
</tbody>
</table>



<center>
<input type="button" value="告知・募集［TECH PLAY］" onclick="window.open('https://techplay.jp/event/search?keyword=uxmeetsdata&amp;yet=1')">
</center>



<h2><strong>もくもく会って？</strong></h2>



<p><strong>もくもく会</strong>とは、カフェやシェアオフィスなどに集まり、<strong>各自もくもくと勉強したり作業したり本を読んだりするだけの会</strong>のことで、いわゆる勉強会とは違い、<strong>各自が主体的に取り組む</strong>ことで”話を聞いて勉強した気になっただけ”にならないのと、完全な独習とは違い、<strong>同じ関心や課題をもった仲間がいる</strong>ことで背中を押されたり、互いに教え合うことで知識を高められるという特徴があります。</p>
]]></content:encoded>
										</item>
	<item>
		<title>再考するエキスパートシステム</title>
		<link>https://uxmeetsdata.com/expert-system/</link>
				<pubDate>Thu, 02 May 2019 13:52:22 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Expert System]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=7331</guid>
				<description><![CDATA[専門家の能力を再現する。 最近はやや落ち着いた感がありますが、人工知能（Artificial Intellig...<p class="more-link"><a href="https://uxmeetsdata.com/expert-system/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>専門家の能力を再現する。</strong></h2>



<p>最近はやや落ち着いた感がありますが、<strong>人工知能（Artificial Intelligence：AI）</strong>あるいは<strong>機械学習（Machine Learning）</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/machine-learning/">いまさら聞けない機械学習</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>という言葉を聞かない日はないくらいにバズワード化しています。これは第三次AIブームと呼ばれ、その火付け役が機械学習の一種である<strong>深層学習（Deep Learning）</strong>であることはいうまでもありません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_expert-e1556702355148.jpg" alt="" class="wp-image-7517" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_expert-e1556702355148.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/05/xmd_expert-e1556702355148-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>第三次があるならば、当然ながら第二次AIブームも存在したわけですが、その中心にいたのがエキスパートシステムです。<strong>エキスパートシステム（Expert System）</strong>とは、専門知識を持たない素人でも、専門家と同じレベルの意思決定や問題解決ができるよう、その領域の専門知識をもとに専門家の能力を再現するシステムのことです。専門知識をルール化することから、<strong>ルールベースシステム（Rule-based System）</strong>とも呼ばれます。</p>



<p>筆者が大阪大学でAIの研究に関わっていた1990年代後半は、まさにこのエキスパートシステムを中心とした第二次AIブームが過ぎ去った後の、いわゆるAI冬の時代でした。しかしながら、その研究は粛々と続けられており、当時は大阪大学の助手であり、筆者の指導教官でもあった大澤幸生氏（現東京大学教授）により開発が進められていた、<strong>Index Navigator</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 rel="noreferrer noopener" href="https://jglobal.jst.go.jp/detail?JGLOBAL_ID=200902172699401525&amp;rel=0" target="_blank">ユーザの変化する興味を理解し表現する文献検索支援システムIndex Navigator</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>と呼ばれる、キーワードの関連性を表す<strong>知識ベース</strong>をもとに、<strong>推論エンジン</strong>を使ってユーザーの興味を入力キーワードから理解し、次のキーワード候補を提案することで文献検索を支援するシステムは、1998年の人工知能学会論文賞を受賞しました。</p>



<p>ところで、なぜ第二次AIブームは終わってしまったのでしょうか。それを理解するには、そもそもエキスパートシステムとは何か、そしてその欠点を知る必要があります。また、第三次AIブームの渦中で、エキスパートシステムはどのような状況にあり、さらに今後はどうなるのでしょうか。</p>



<p>深層学習のベースである<strong>多層ニューラルネットワーク（Deep Neural Networks：DNN）</strong>を用いた機械学習の発想は古くからあり、1979年に福島邦彦氏により発表されたネオコグニトロンでその原型が確立されています。しかしながら当時は、その技術を生かす大量データと膨大な計算を行う超高性能なコンピューターが存在せず、実用に至りませんでした。ところが、近年のビッグデータの普及とコンピューターの進化により、深層学習として具現化されたわけです。</p>



<p>2019年は5G・IoT元年になると言われています。AIをとりまく環境も大きく変わることでしょう。深層学習がそうであったように、エキスパートシステムが近年の技術革新により進化する可能性は十分にあります。ここで復習をかねて、再考してみたいと思います。</p>



<h2><strong>知識に基づく推論。</strong></h2>



<p>エキスパートシステムは、専門家の意思決定や問題解決の能力や手順を模倣するシステムであり、専門家のように<strong>知識に基づいた推論</strong>を行うことで、複雑な問題を解くよう設計されたものです。</p>



<p>通常のシステムでは、すべてのロジックをプログラムで構造化するのに対し、エキスパートシステムでは、<strong>知識と推論を分離</strong>して構造化するという特徴があり、それぞれの部分を<strong>知識ベース</strong>・<strong>推論エンジン</strong>といいます。</p>



<p><strong>知識ベース（Knowledge Base）</strong>は、専門知識をルールで表現した特殊なデータベースであり、「もしXならば、Yである」という自然言語の形式で記述されます。サッカーでたとえるならば「もしディフェンスが右に動けば、オフェンスは左に動く」というようなことです。<strong>推論エンジン（Inference Engine）</strong>は、エキスパートシステムの頭脳であり、知識ベースに記述された専門知識をもとに最適解を推論する仕組みのことです。</p>



<p>もともとエキスパートシステムは、スタンフォード大学のヒューリスティック・プログラミング・プロジェクトの研究者らにより1960年代に提唱されたもので、その一人でありエキスパートシステムの父といわれるエドワード・ファイゲンバウム氏らによる、Dendralという有機化学の知識をもとに未知の有機化合物を質量分析法で分析して特定するシステムがその起源です。</p>



<p>1980年代には、同氏が提唱したエキスパートシステムを扱う工学分野である知識工学をベースに研究開発が進み、多くの大企業が導入するなど実用に向けて大きく前進しました。これが<strong>第二次AIブーム</strong>です。多くの大学ではAI関連コースが開設され、日本では第五世代コンピュータの開発を目指す国家プロジェクトも発足しました。</p>



<p>しかしながらそのブームは1980年代とともに終了します。その理由は、エキスパートシステムが抱える以下の欠点によるものでした。</p>



<ul><li>専門家のあらゆる知識のルール化が必要で<strong>労力</strong>がかかる。</li><li>たくさんの知識を教えると<strong>矛盾</strong>が発生する。</li><li>知識として体系化しづらい<strong>例外</strong>が存在する。</li></ul>



<p>そもそもエキスパートシステムが求められる業種や職種の専門知識は複雑かつ多岐にわたります。また、相互に矛盾するものやルール化しづらい例外も多く、それらを包括する汎用的なロジックの表現は極めて難しいものです。</p>



<p>例えば、会計業務には明確なルールがあり、簿記の手順にしたがって作業をするだけなので、エキスパートシステムにより代替できると考えられていました。たしかに簿記の範囲であればルール化は容易ですが、決算書作成の段階では人間の判断が必要で、かつ会計基準が業種業態により異なるためルール化は非常に困難です。現在でも、簿記会計の自動化は可能であるものの会計監査の自動化は不可能であるといわれています。</p>



<p>専門知識のルール化を多層ニューラルネットワークで自動化する試みもされましたが、当時は前述のとおり、そのための大量データと膨大な計算を行う超高性能なコンピューターが存在せず、実現することはありませんでした。こうして失意のもと第二次AIブームは終焉を迎えたわけです。</p>



<h2><strong>エキスパートシステムの現在と未来。</strong></h2>



<p>では、エキスパートシステムの現状はどうなっているのでしょうか。すっかり廃れているのでしょうか。実は、そんなことはまったくありません。</p>



<p>第三次AIブームに便乗する形で、AI搭載を謳う製品やサービスが雨後の筍のごとく次々とリリースされています。その中でも、とりわけ画像処理関連のものの多くは深層学習をベースにしているようですが、それ以外ではエキスパートシステムをベースにしていることも多いように思われます。深層学習とは違い、明確にそれが謳われることがなく存在感が薄いだけで、実用化は確実に広がっています。</p>



<p>そもそも深層学習が具現化されたのは、ビッグデータの普及とコンピューターの進化によるものですが、その恩恵を受けたのはエキスパートシステムも同じです。従来環境では難しかった<strong>複雑な推論処理</strong>が可能となり、<strong>知識のルール化の自動化</strong>の可能性も高まっています。</p>



<p>また深層学習には、<strong>大量の学習データが必要である</strong>、<strong>導出されたモデルがブラックボックス化する</strong>などの欠点があります。さらに、エキスパートシステムにはない<strong>例外を学習できる</strong>という特長があるものの、その反面として<strong>過学習による汎化性能低下</strong>の問題があり、エキスパートシステムの欠点を克服して代替する存在には至っていません。</p>



<p>そのような背景もあり、いま現在において深層学習が実用化されているのは、大量の学習データを獲得しやすく、かつモデルを単純化しやすい画像処理などの一部の領域に限られており、エキスパートシステムの進化が期待されている領域は多く存在します。</p>



<p>そのひとつに、教育業界で注目されている適応学習があります。<strong>適応学習（Adaptive Learning）</strong>は、学習者一人ひとりの学習進捗度に最適化された学習方法と学習教材を選択して提案するためのロジック・システム・サービスなどを包括的に指し示す言葉です。とりわけ算数や数学は効率的に学習するための教育体系が確立されており、エキスパートシステムがもっとも得意とする領域と言えるでしょう。</p>



<p>ではスポーツはどうでしょうか。たとえばゴルフは教育体系が確立されており、かつ他者に影響を受けづらい競技であるため、エキスパートシステムを適用しやすい領域と言えます。</p>



<p>一方でサッカーは、対戦相手のみならずチームメンバーにも影響を受けるため、意思決定プロセスが複雑でルール化が難しく、適用しづらい領域と言えます。ただ、ボールを蹴る・止めるなどの基本技術については適用できそうです。実践技術においても「ディフェンシブサード右サイドでの一対一」や「アタッキングサード中央でのボール奪取」などの”局面”で因数分解できれば適用される可能性があります</p>



<p>また、スポーツには”動き”という自然言語での記述が難しい専門知識が存在します。しかしながらこれはモーションキャプチャーというセンシング技術の進化により克服されており、ゲームなどでプロサッカー選手の動きが再現されています。</p>



<p>さらに5GとIoTの普及により、”動き”などの自然言語記述が難しいものも含めた専門知識が世界中でルール化され、共有される可能性があります。それがWikipediaのように民主的にマネジメントされれば、エキスパートシステムは三つの欠点を克服し、さらなる実用化が進むかもしれません。</p>
]]></content:encoded>
										</item>
	<item>
		<title>いまさら聞けない因果推論</title>
		<link>https://uxmeetsdata.com/causal-inference/</link>
				<pubDate>Thu, 11 Apr 2019 12:57:24 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Causal Inference]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Growth Hack]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=5815</guid>
				<description><![CDATA[偏差値と収入に因果関係はあるか。 2019年3月、アメリカの名門大学への大規模な裏口入学が発覚し、大きな話題と...<p class="more-link"><a href="https://uxmeetsdata.com/causal-inference/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>偏差値と収入に因果関係はあるか。</strong></h2>



<p>2019年3月、アメリカの名門大学への大規模な裏口入学が発覚し、大きな話題となりました。<strong>当事者の多くは富裕層</strong>で、大企業の最高経営責任者や有名女優が含まれるとのことです。なお、入学先にはイェール大学・スタンフォード大学・ジョージタウン大学などが含まれますが、大学側の関与はないようです。</p>



<p>子どもを名門大学に入学させたい親の心理を考えると、ある問いが思い浮かびます。それは「<strong>偏差値の高い大学へ行けば収入は上がるのか</strong>」というものです。もっともこの事件においては、当事者の多くは富裕層であり、目的は収入ではなく名誉かもしれません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_causal-e1554853178448.jpg" alt="" class="wp-image-5489" width="480" height="240" srcset="https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_causal-e1554853178448.jpg 640w, https://uxmeetsdata.com/wp-content/uploads/2019/04/xmd_causal-e1554853178448-300x150.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure></div>



<p>この問いに対し、多くの人が「はい」と答えるのではないでしょうか。確かに富裕層には高学歴な人が多いように思います。しかしながら、経済学の有力な研究は、これを否定しています。それでも多くの人が「はい」と答えるのは、<strong>相関関係</strong>と<strong>因果関係</strong>を混同しているからに他なりません。</p>



<p><strong>相関関係（Correlation）</strong>とは、二つの事象に何らかの関係があることをいい、<strong>因果関係</strong>と<strong>疑似相関</strong>に大別されます。二つの事象の<strong>片方が原因となって、もう片方が結果として生じた</strong>場合、事象間に<strong>因果関係（Causation）</strong>があるといいます。一方で、原因と結果の関係ではない場合は<strong>疑似相関（Spurious Correlation）</strong>と呼ばれます。</p>



<p>そして、<strong>二つの事象間に因果関係があるかどうか</strong>を明らかにするための考え方や手法を<strong>因果推論（Causal Inference）</strong>といいます。聞きなれない言葉なので「いまさら聞けない」というタイトルはやや不適切ですが、実はビジネスの現場でも、<strong>グロースハック（Growth Hack）</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/growth-hack/">いまさら聞けないグロースハック</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>カイゼン（Kaizen）</strong>の領域で、<strong>A/Bテスト</strong>という形で広く使われています。</p>



<h2><strong>第三の要因はないか。</strong></h2>



<p>事象Xが原因で、事象Yが結果であるという因果関係の存在を確認するためには、三つのチェックポイントがあります。</p>



<ol><li><strong>偶然の一致</strong>ではないか</li><li><strong>逆の因果関係</strong>ではないか（事象Yが原因で、事象Xが結果ではないか）</li><li><strong>第三の要因</strong>は存在しないか（第三の事象Zが、事象Xと事象Yの原因ではないか）</li></ol>



<p>「<strong>地球温暖化が進むと、海賊の数が減る</strong>」これはパロディ宗教である空飛ぶスパゲッティ・モンスター教が、相関関係と因果関係の混同を風刺するのに用いた例です。統計的な一致が見られたとしても、因果関係があるとは思えません。これは<strong>偶然の一致</strong>であり、<strong>見せかけの相関</strong>と呼ばれます。</p>



<p>「<strong>警察官の多い地域では、犯罪も多い傾向にある</strong>」と言われています。しかしながら、警察官が多いことが原因で、犯罪発生件数が多いという結果を引き起こすとは考えづらいでしょう。むしろ犯罪が多い危険な地域であるがゆえに、警察官を多く配置していると考えるべきです。これは<strong>逆の因果関係</strong>と呼ばれます。</p>



<p>「<strong>体力がある子どもは学力が高い</strong>」と言われています。では、子どもに運動させることが学力向上につながると考えてよいでしょうか。もちろん、体力がつくことで長時間の勉強に耐えられるなどの効果があるかもしれません。ただ、学力向上にはもっと効率的な手段があるでしょう。むしろ体力にも学力にも影響を及ぼしている<strong>第三の要因</strong>があるように思えます。例えば「<strong>親の教育熱心さ</strong>」などがそれです。これは<strong>交絡因子（Confounding Factor）</strong>と呼ばれます。</p>



<p>では冒頭の問い「偏差値の高い大学へ行けば収入は上がるのか」についてはどうでしょうか。まず何らかの関係があることは間違いないため、偶然の一致ではないでしょう。また多くの人は大学卒業後に働き始めるため、逆の因果関係があるとも思えません。では第三の要因はどうでしょうか。「<strong>潜在能力の高さ</strong>」が、偏差値の高い大学に行く力と、高い収入を得る力の両方を生み出しているとは考えられないでしょうか。</p>



<h2><strong>反事実との比較による証明。</strong></h2>



<p>二つの事象間に因果関係があることを証明する手法に、<strong>事実と反事実の比較</strong>があります。<strong>反事実（Counterfactual）</strong>とは、その事象が発生しなかった場合のことです。そして、原因の事象Xが発生したという<strong>事実における結果の事象Y</strong>と、原因の事象Xが発生しなかったという<strong>反事実における結果の事象Y’</strong>を比較し、<strong>有意差（Significantly Different）﻿</strong>が見られる場合に因果関係があると結論づけます。この場合の<strong>有意差</strong>とは、事象Yと事象Y&#8217;の間の統計的に偶然とはいえない差のことで、それを<strong>因果効果（Causal Effect）</strong>といいます。また、事実と反事実の比較により因果関係を説明することを<strong>反事実モデル（Counterfactual Model）</strong>といいます。</p>



<p>反事実モデルの代表的な手法に、<strong>ランダム化比較実験（Randomized Controlled Trial：RCT）</strong>があります。たとえば新薬の臨床試験において、病気のネズミを無作為に二つのグループに分け、片方のグループにのみ投薬したとしましょう。そこで投薬したグループのほうが治癒率が高ければ、因果効果があると言えます。なお、投薬したグループを<strong>介入群（Intervention Group）</strong>、投薬しなかったグループを<strong>対照群（Control Group）</strong>といいます。またランダム化比較実験は、ビジネスの世界では<strong>A/Bテスト</strong>と呼ばれています。</p>



<p>ところで、二つのグループを無作為に分けたのはなぜでしょうか。それは比較する二つのグループの間に<strong>介入した事実以外の違い</strong>が存在すると、違いを生んだ原因がどちらであるかを説明できなくなるからです。</p>



<p>ランダム化比較実験には極めて高い証明力があるものの、実験ができない場合には適用できません。実験には時間やコストもかかります。実験対象となる人や企業を人為的に無作為に分けることは簡単ではありません。介入群と対照群に不公平があれば反発も起こるでしょう。前述の臨床試験には倫理的な問題もあります。</p>



<p>実験ができない場合は、すでにあるデータを用いる他ありません。なお、実験で獲得したデータを<strong>実験データ（Experimental Data）</strong>と呼ぶのに対し、日常の活動から獲得したデータを<strong>観察データ（Observational Data）</strong>といいます。すなわち、観察データを用いて反事実モデルを実施することになります。それには<strong>観察データ内に原因と考えられる事象の反事実が存在する</strong>必要があります。</p>



<p>たとえば、新商品の案内メールをすべての顧客に送信したはずが、メール配信システムの障害で<strong>一部の顧客に送信されていなかった</strong>とします。これは観察データ内に反事実が偶然発生している状態であり、送信された顧客と送信されなかった顧客の購買の結果を比較することで因果推論が可能です。この状態を<strong>自然実験（Natural Experiment）</strong>といいます。</p>



<p>しかしながら、自然実験の状態が都合よく発生するわけではなく、またそれを観察データから見つけることも容易ではありません。そこで、観察データと統計手法を用いて、あたかもランダム化比較実験を実施しているような状態を作り出す、<strong>疑似実験（Quasi Experiment）</strong>という考え方があります。統計手法には、<strong>差の差分析</strong>・<strong>操作変数法</strong>・<strong>回帰不連続デザイン</strong>などがありますが、ここでは<strong>マッチング法</strong>による疑似実験のアプローチを紹介します。</p>



<p><strong>マッチング法</strong>とは、介入群によく似たペアを対照群から選び出すことにより、<strong>介入した事実以外の違い</strong>を排除することで、二つのグループを比較可能にする手法です。そして冒頭の問い「<strong>偏差値の高い大学へ行けば収入は上がるのか</strong>」を、この手法で否定したのが、プリンストン大学のアラン・クルーガーらによる研究です。</p>



<p>クルーガーらは、それぞれの学生がどの大学に合格し、どの大学に不合格だったかのデータを用いてマッチング法を実施しました。たとえば、大学Aと大学Bには合格したが、大学Cには不合格だった二人がいたとすると、この二人はよく似たペアと言えます。そのうちの一人は<strong>偏差値の高い大学A</strong>に、もう一人は<strong>立地のよい大学B</strong>に進学した場合、この二人を比較すれば、偏差値の高い大学へ行くことによる将来の収入への因果効果を推定できることになります。</p>



<p>この研究の結果、偏差値の高い大学Aに進学した学生のグループ（介入群）と、偏差値の低い大学Bに進学した学生のグループ（対照群）の間で、<strong>大学卒業後の収入に有意差が見られない</strong>ことがわかりました。多くの人が「偏差値の高い大学へ行けば収入は上がる」と信じていたことが否定されたわけです。</p>



<p>このように、因果推論を駆使すれば、二つの事象間の因果関係の有無を明らかにすることができ、相関関係との混同や思い込みから解放されます。</p>



<p>最後に、この記事を書くにあたり、中室牧子氏・津川友介氏による著書『<a rel="noreferrer noopener" aria-label="「原因と結果」の経済学―データから真実を見抜く思考法 (新しいタブで開く)" href="https://www.amazon.co.jp/dp/447803947X" target="_blank">「原因と結果」の経済学―データから真実を見抜く思考法</a>』を参考にさせていただいたことをお伝えします。因果推論を詳しく知りたい方には大変お薦めです。</p>
]]></content:encoded>
										</item>
	<item>
		<title>再考するデータマイニング</title>
		<link>https://uxmeetsdata.com/data-mining/</link>
				<pubDate>Fri, 01 Mar 2019 09:09:59 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=2546</guid>
				<description><![CDATA[おむつとビール。 データマイニング（Data Mining）は、統計学や人工知能（Artificial Int...<p class="more-link"><a href="https://uxmeetsdata.com/data-mining/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>おむつとビール。</strong></h2>



<p><strong>データマイニング（Data Mining）</strong>は、統計学や人工知能（Artificial Intelligence：AI）などの手法を使って大量のデータから知識を取り出す技術のことで、文字通り知識を<strong>採掘（Mining）</strong>するイメージです。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_mining-e1553916376199.jpg" alt="" class="wp-image-3484" width="480" height="245"/></figure></div>



<p>このデータマイニングという技術や言葉が普及するきっかけになったのが、有名な<strong>「おむつとビール」</strong>の話です。1992年に大手スーパーマーケットチェーンのOsco DrugsがPOSデータを分析したところ、<strong>おむつとビールが併売されることが多い</strong>ことがわかりました。このような併売傾向を分析する技術を、買い物かごにみたてて<strong>バスケット分析（Basket Analysis）</strong>といい、事象間の相関の強さを分析する技術である<strong>アソシエーション分析（Association Analysis）</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/association-howto-01/">アソシエーション分析入門</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>の、マーケティング領域における代表的な実用例となっています。</p>



<p>同じくマーケティング領域においては、1to1マーケティングとよばれる、数百万人の顧客をいくつかのセグメント（似た者同士）に細分化し、それぞれのセグメントに対して個別にマーケティング施策を行うことで、ビジネス成果を最大化するアプローチがありますが、このセグメントの分類手法として、教師なし機会学習の代表手法でもある<strong>クラスタリング（Clustering）</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>がよく用いられます。</p>



<p>データマイニングの手法や技術の多くは、機械学習と一致します。ビッグデータ化にともなう機械学習の進化は、すなわち<strong>データマイニングの進化</strong>を意味します。一方で、<strong>データマイニングという言葉の盛り上がり</strong>は、かつて2000年代中頃にあったものより鎮静化しているように思います。それはなぜなのでしょうか。そして今後はどうなるのでしょうか。再考してみたいと思います。</p>



<h2><strong>データマイニングへの期待と失望。</strong></h2>



<p>データマイニングのもつ価値は、前述の「おむつとビール」の話に代表されるように、<strong>想像もしていなかった知識を発掘する</strong>ことにあります。まさか、おむつとビールがよく併売されるとは思わないからです。このことが、<strong>データマイニングの期待を高める</strong>ことになるわけですが、<strong>同時に期待を裏切る</strong>ことにもなります。</p>



<p>期待を裏切るポイントは大きく二つあります。ひとつは、想像もしない知識が発掘されたとして、<strong>実際の施策に展開しづらいことが多い</strong>こと。もうひとつは、結果として<strong>想像の範囲内の知識しか得られないことが多い</strong>ことです。</p>



<p>前者については、これも「おむつとビール」が典型例です。おむつとビールが併売されることがわかったとして、実際に同じ売り場に置くわけにはいきません。もっとも、おむつ売り場とビール売り場の動線上に、さらに併売傾向が見られる商品をうまく配置する、などの施策につながる可能性はあります。</p>



<p>やっかいなのは後者で、そもそもデータの中に想像もしない知識が埋もれているという保証はありませんし、あったとして、大量のデータからそれを拾い上げるのは非常に困難です。分析結果に何らかの知識が隠されていたとしても、<strong>結局それを解釈するのは人間</strong>であり、そこには深い経験と膨大な労力がかかります。魔法の杖のように自動的に知識がもたらされるという幻想をいだいていると、必ず期待を裏切られることになります。このことが、データマイニングという言葉の盛り上がりを鎮静化させた要因です。</p>



<h2><strong>重要なのはスパイラルモデル。</strong></h2>



<p>データ分析には大きく、<strong>検証的アプローチ</strong>と<strong>発見的アプローチ</strong>の二つのアプローチがあります。検証的アプローチとは、<strong>あらかじめ存在する仮説が正しいかを検証する</strong>ことで、例えば、あるコンテンツXの閲覧とある商品Yの購入に因果関係があるのではないか、という仮説を、実証実験などで検証するアプローチがこれです。この仮説検証を繰り返すことで分析精度が上がるわけですが、欠点が二つあります。ひとつは、もともとの<strong>仮説の精度が低いと、仮説検証に膨大なコストがかかる</strong>こと。もうひとつは、<strong>想像の範囲内の仮説しか立てられない</strong>ことです。</p>



<p>この検証的アプローチの欠点を補うのに、発見的アプローチが有効となります。発見的アプローチにより、<strong>比較的精度の高い仮説を抽出</strong>できたり、<strong>想像の範囲を超える仮説を発見</strong>できることがあります。つまり、この二つのアプローチは、どちらをとるべきか、ではなく補完関係にあり、行き来しながら<strong>スパイラルモデル</strong>を描くことで、効率的に分析精度を高めることができます。そして、この<strong>発見的アプローチに有効な手法こそがデータマイニング</strong>なのです。</p>



<p>ビッグデータ化により、<strong>大量であることはもちろん、多様なデータが収集可能</strong>となりました。その中で、一部の人間の経験や能力に頼った仮説設定は、本当に重要な要素を見逃す危険性を高めてしまうでしょう。そこで<strong>データマイニングは有益なヒントを与えてくれる</strong>可能性があります。かつてデータマイニングに幻想と失望をいだいたのであれば、その観点で見直してみるのはいかがでしょうか。</p>
]]></content:encoded>
										</item>
	<item>
		<title>再考するビッグデータ</title>
		<link>https://uxmeetsdata.com/big-data/</link>
				<pubDate>Wed, 27 Feb 2019 14:52:38 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=2409</guid>
				<description><![CDATA[ビッグデータにまつわる素朴な疑問。 ビッグデータ（Big Data）という言葉は2013年に流行して以来、広く...<p class="more-link"><a href="https://uxmeetsdata.com/big-data/" class="themebutton3">Read More</a></p>]]></description>
								<content:encoded><![CDATA[<h2><strong>ビッグデータにまつわる素朴な疑問。</strong></h2>



<p><strong>ビッグデータ（Big Data）</strong>という言葉は2013年に流行して以来、広く使われています。日々大量のデータが生産されており、5GとIoTの普及でさらに加速することが予想されます。また時を同じくして、<strong>人工知能（Artificial Intelligence：AI）</strong>や<strong>深層学習（Deep Learning）</strong>の技術が世間を賑わすようになりました。深層学習は大量の教師データを必要とする学習技術であり、ビッグデータの存在が実現に向かわせたと言っても過言ではありません。</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://uxmeetsdata.com/wp-content/uploads/2019/03/xmd_bigdata-e1553913392647.jpg" alt="" class="wp-image-3482" width="480" height="237"/></figure></div>



<p>ところで、<strong>ビッグデータとは何</strong>でしょうか。文字通り大きなデータのことでしょうか。だとして、<strong>大きなデータとはどういうもの</strong>でしょうか。また、<strong>大きなことの意味は何</strong>でしょうか。逆に、<strong>スモールデータとは何</strong>でしょうか。それらの<strong>意味は時代とともに変化する</strong>のでしょうか。いろいろな素朴な疑問が湧いてきます。ブームから5年以上が経過し、5GとIoTによる変化の兆しが見え隠れする今、再考してみようと思います。</p>



<p>まずビッグデータの意味ですが、大量データであることはもちろんのこと、実はそれだけではありません。IT用語辞典には以下のようにあります。</p>



<blockquote class="wp-block-quote is-style-default"><p>ビッグデータとは、従来のデータベース管理システムなどでは記録や保管、解析が難しいような<strong>巨大なデータ群</strong>。明確な定義があるわけではなく、企業向け情報システムメーカーのマーケティング用語として多用されている。<br>多くの場合、ビッグデータとは単に量が多いだけでなく、<strong>様々な種類・形式が含まれる非構造化データ・非定型的データ</strong>であり、さらに、日々膨大に生成・記録される時系列性・リアルタイム性のあるようなものを指すことが多い。今までは管理しきれないため見過ごされてきたそのようなデータ群を記録・保管して即座に解析することで、ビジネスや社会に有用な知見を得たり、これまでにないような<strong>新たな仕組みやシステム</strong>を産み出す可能性が高まるとされている。</p><cite><a rel="noreferrer noopener" aria-label="IT用語辞典｜ビッグデータ
 (新しいタブで開く)" href="http://e-words.jp/w/ビッグデータ.html" target="_blank">IT用語辞典｜ビッグデータ</a><br></cite></blockquote>



<p>どうやら量以外にも、種類や形式がごった煮状態で整理整頓されていないという意味も含まれているようです。逆にいえば、世の中のデータの多くは種類や形式がバラバラで整理整頓されておらず、<strong>量を求めると必然的にごった煮状態になる</strong>ということです。</p>



<h2><strong>分散処理技術の進化による後押し。</strong></h2>



<p>整理されていなければ、データ分析は困難になります。ではデータ生成に関するルールを作ればよいのでは、ということになり、実際に標準化の動きもありますが、容易ではありません。そこで重要になるのが、<strong>データを分析可能な状態に整える作業や、それを自動化する技術</strong>です。それを<strong>データ準備（Data Preparation）</strong>といいますが、いま現在でも発展途上にある領域です。</p>



<p>深層学習は非常に注目され、かつ進化している学習技術ですが、大量の教師データを必要とするため、データ量がボトルネックになりがちです。そもそもどうやってデータを獲得するのかという問題があり、<strong>データ流通（Data Trading）</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-trading/">データ流通って？</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>などのソリューションが検討されていますが、よしんば集めたところで分析不可能なデータが大量にあってもどうしようもありません。データ準備は非常にやっかいな問題で、深層学習を代表とするビッグデータを活用したデータ分析や機械学習の発展を阻害する大きな要因のひとつになっています。</p>



<p>一方で、整理されていたとしても、大量のデータを高速に処理できなければ実用には向きません。ただ、これについてはコンピューターの性能向上と、<strong>Hadoopを代表とする分散処理技術の進化</strong>が実現を後押ししています。Hadoopは、大量のデータを複数のマシンで分散処理できるオープンソースのプラットフォームで、ペタバイト級の非構造化データ（テキストや画像など）の超高速処理を可能にしました。逆にいえば、Hadoopの登場がビッグデータ活用の推進に拍車をかけたといえます。</p>



<h2><strong>大きいことはいいことか？</strong></h2>



<p>ビッグデータの意味や、その活用が進んだ背景はわかりましたが、そもそも<strong>データが大量であることの意味</strong>はどこにあるのでしょうか。大きいことはいいことなのでしょうか。</p>



<p>ビッグデータがもたらした最大の価値は、<strong>深層学習を代表とする機械学習の進化</strong>でしょう。また、マーケティング領域では、1to1マーケティングとよばれる、数百万人の顧客をいくつかのセグメント（似た者同士）に細分化し、それぞれのセグメントに対して個別にマーケティング施策を行うことで、ビジネス成果を最大化するアプローチがありますが、それには<strong>大量データのノンサンプリングでの分析が必要となり、ビッグデータの分析技術や、ビッグデータそのものがもたらす意味は大きい</strong>と言えます。</p>



<p>一方で、ビッグデータは<strong>購入・転送・計算などのあらゆる面で膨大なコスト</strong>がかかります。また、大量であるがゆえに本当に重要なデータが埋もれてしまうリスクもあります。ビッグデータを活用した機械学習は、<strong>導出された予測モデルのメカニズムがブラックボックス化して説明しづらくなる</strong>という欠点があることは、「<a href="https://uxmeetsdata.com/ux-modeling/">UXモデリングって？</a>」でも触れたとおりです。</p>



<p>そこで、最近注目されているのが、<strong>スモールデータ（Small Data）</strong>です。「<a href="https://uxmeetsdata.com/sparse-modeling/">スパースモデリング って？</a>」でも取り上げたとおり、<strong>物事の本質的な特徴を決定づける要素はわずかである</strong>という性質があります。それをスパース性といいますが、その要素をうまく取り出すことができれば、必ずしも大量である必要はないわけです。そして、データが少量であれば、重要なデータが埋もれることもありません。また、コストも最小限に抑えることができます。</p>



<p>ただし、もとのデータに著しい偏りがあると、本質をとらえるのに重要な要素を獲得することはできません。つまり、大量であることよりも、<strong>多様であるという意味でのビッグデータは極めて重要</strong>であり、5GとIoTの普及により、今後はその期待がさらに高まるのではないかと考えられます。</p>
]]></content:encoded>
										</item>
	<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>BigQuery vs. Redshift どっち？</title>
		<link>https://uxmeetsdata.com/bigquery-vs-redshift/</link>
				<pubDate>Thu, 07 Feb 2019 09:58:20 +0000</pubDate>
		<dc:creator><![CDATA[Atsushi Sugawa]]></dc:creator>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Data Science]]></category>
		<category><![CDATA[DWH]]></category>

		<guid isPermaLink="false">https://uxmeetsdata.com/?p=1274</guid>
				<description><![CDATA[セルフサービスなDWH。 データウェアハウス（Data Warehouse：DWH）は、直訳すれば「データの倉...<p class="more-link"><a href="https://uxmeetsdata.com/bigquery-vs-redshift/" 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_bq_rs.png" alt="" class="wp-image-3462" width="480" height="243"/></figure></div>



<h2><strong>セルフサービスなDWH。</strong></h2>



<p><strong>データウェアハウス（Data Warehouse：DWH）</strong>は、直訳すれば「データの倉庫」で、データベース（Database：DB）の一種ですが、過去すべての時系列データを要約せずにそのまま保持し続ける、文字通り倉庫のような役割から、区別してそう呼ばれています。</p>



<p>また、DWHはデータを活用した意思決定に利用されることから、<strong>ビジネスインテリジェンス（Business Intelligence：BI）</strong>のひとつに位置付けられます。BIは経営・会計・情報処理などの用語で、企業などの組織のデータを収集・分析・可視化することで、ビジネスの意思決定に役立てる手法や技術のことを言います。</p>



<p>DWHを利用するのは<strong>商品開発やマーケティングなどの部門</strong>ですが、基幹データを扱うことから、管理するのは<strong>情報システム部門</strong>であることがほとんどです。管理部門がDWHのデータ設計と実装を行い、分析可能な状態にして利用部門に提供するのが一般的な役割分担です。一方で、利用部門が分析を進める中で、データ構造を変更したいという要求がうまれるものの、自分たちでそれを実施できないため、分析や意思決定のスピードが上がらないこともよくあります。</p>



<p>そこで、利用部門が管理部門に頼ることなく、自分たちでデータの分析・可視化に必要な環境を構築するセルフサービスBIという考え方が生まれました。その中でも、とりわけDWHに特化したクラウドサービスとして、いま人気を二分しているのが、<strong>Google BigQuery</strong>（以下、BigQuery）と<strong>Amazon Redshift</strong>（以下、Redshift）です。</p>



<h2><strong>ツールのBigQuery、基盤のRedshift。</strong></h2>



<p>BigQueryとRedshiftはそれぞれ<strong>クラウドコンピューティングサービス</strong>である<strong>GCP（Google Cloud Platform）</strong>と<strong>AWS（Amazon Web Services）</strong>の一部であり、フルマネージドなDWHです。GCPとAWSはよく比較されますが、サービスラインナップ<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 rel="noreferrer noopener" href="https://www.apps-gcp.com/gcp-aws-service-correspondence-comparison/" target="_blank">GCP・AWSサービス比較表</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>としては同質化が進んでおり、いま現在はほぼ横並びといえます。</p>



<p>ただ、AWSがECサイトのAmazon.comの<strong>インフラのシェアリング</strong>を、GCPがGoogleの各種<strong>アプリケーションのエンジンのシェアリング</strong>をそれぞれルーツとしているため、それが特徴の違いを生んでいます。</p>



<p>サービス拡張の経緯にもそれは現れていて、IaaSについてはAWSは当初からAmazon EC2（Elastic Compute Cloud）として提供していましたが、GCPのGCE（Google Compute Engine）はかなり後発です。一方で、PaaSについてはGCPのGAE（Google App Engine）が先行しています。</p>



<p>また、導入されるケースの違いにも特徴があり、レガシーなインフラの置き換えには、インフラの導入実績が豊富なAWSが、ビッグデータ基盤の構築には、深層学習（Deep Learning）などの先進的なアプリケーションが充実したGCPが、それぞれ選ばれる傾向にあるように思います。</p>



<p>この特徴の違いがBigQueryとRedshiftにも引き継がれていて、GCPの一部であるBigQueryはアドホック分析のための<strong>分析ツール</strong>、AWSの一部であるRedshiftは既存のDWHを置き換えてセルフサービス化する<strong>分析基盤</strong>の性格が強いといえます。</p>



<h2><strong>用途に合わせた選択を。</strong></h2>



<p>BigQueryとRedshiftを、諸元レベルで比較してみます。</p>



<table style="table-layout: fixed; width: 100%;">
<tr style="color: #fff; background-color: #000;">
<td>&nbsp;</td>
<td>BigQuery</td>
<td>Redshift</td>
</tr>
<tr>
<td style="background-color: #eee;">SQL</td>
<td>標準SQL</td>
<td>標準SQL</td>
</tr>
<tr>
<td style="background-color: #eee;">データ格納方式</td>
<td>列指向</td>
<td>列指向</td>
</tr>
<tr>
<td style="background-color: #eee;">インデックス</td>
<td>なし</td>
<td>あり<br>※インターリーブインデックス</td>
</tr>
<tr>
<td style="background-color: #eee;">パーティション</td>
<td>あり<br>※日付分割テーブル</td>
<td>なし</td>
</tr>
<tr>
<td style="background-color: #eee;">マルチバイト文字対応（テーブル名・カラム名）</td>
<td>なし</td>
<td>あり</td>
</tr>
<tr>
<td style="background-color: #eee;">クエリ実行環境</td>
<td>ブラウザUI</td>
<td>コマンドライン<br>※GUIツールは別途必要</td>
</tr>
<tr>
<td style="background-color: #eee;">直接連携可能なストレージ</td>
<td>GCS（Gooble Cloud Storage）, Google Drive</td>
<td>Amazon S3（Simple Storage Service）</td>
</tr>
<tr>
<td style="background-color: #eee;">入力データフォーマット</td>
<td>Avro, JSON, CSV, Parquet, ORC</td>
<td>CSV/TSV, Avro, JSON</td>
</tr>
<tr>
<td style="background-color: #eee;">出力データフォーマット</td>
<td>Avro, JSON, CSV</td>
<td>CSV/TSV</td>
</tr>
<tr>
<td style="background-color: #eee;">基本的な課金体系</td>
<td>クエリ課金<br>※定額プランあり</td>
<td>時間課金<br>※クエリ課金プランあり</td>
</tr>
<tr>
<td style="background-color: #eee;">時間課金の料金</td>
<td>−</td>
<td>0.314USD〜/H<br>※東京リージョン</td>
</tr>
<tr>
<td style="background-color: #eee;">クエリ課金の料金</td>
<td>8.55USD/TB<br>※東京リージョン</td>
<td>5USD/TB<br>※Amazon Redshift Spectrum</td>
</tr>
</table>



<p>BigQueryの特徴をRedshiftとの比較で整理してみます。</p>



<ul><li>Redshiftと同じく、<strong>標準SQL</strong>に対応。</li><li>Redshiftと同じく<strong>、大量データの集計に優れた列指向の格納方式</strong>を採用。</li><li>テーブル名・カラム名の<strong>マルチバイト文字は非対応</strong>。</li><li>ブラウザUIのクエリ実行環境を装備。</li><li>課金体系は、時間課金ではなく<strong>クエリ課金</strong>。（データスキャン量による従量課金）</li></ul>



<p>BigQueryとRedshiftの共通点としては、<strong>標準SQLに対応した列指向DB</strong>であるということ。これにより、一般的なRDBと同様のSQLで、大量データの集計に優れた列指向DBとしてデータの操作が可能です。</p>



<p>BigQueryの特長は、<strong>ブラウザUI</strong>でクエリ実行が可能なのと、時間課金ではなく<strong>クエリ課金</strong>（クエリ時のデータスキャン量による従量課金）であるため、手軽にアドホック分析を行う分析ツールとして採用しやすいという点です。</p>



<p>一方で、時間課金ではないために<strong>コストを見積もりづらい</strong>のと、テーブル名・カラム名の<strong>マルチバイト文字は非対応</strong>という欠点があるため、既存のDWHの置き換えには不向きであり、その場合はRedshiftのほうが採用しやすいでしょう。</p>



<p>ちなみにAWSには、ブラウザGUIのクエリ実行環境を備え、クエリ課金であるAmazon Athenaという、BigQueryと似たサービスもあるので、AWSユーザーは用途に合わせて選択することが可能です。ただしSQL互換エンジンのPrestoを採用しており、関数の体系が異なるため注意が必要です。</p>



<p>このようにBigQueryとRedshiftは、同じセルフサービスDWHでも特徴がかなり異なるので、用途に合わせて選んでもらえればよいと思います。</p>
]]></content:encoded>
										</item>
	</channel>
</rss>
