<?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>データサイエンス &#8211; 機械学習 入門コースの決定版!機械学習エンジニアを目指すならcodexa（コデクサ）</title>
	<atom:link href="https://www.codexa.net/category/data-science/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codexa.net</link>
	<description>毎日1400名以上のエンジニアが利用してる機械学習 入門コースの決定版！機械学習に必要な線形代数や統計基礎、Pythonライブラリなどの基礎コースも無料で公開中！</description>
	<lastBuildDate>Wed, 16 Jan 2019 02:27:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7.7</generator>

<image>
	<url>https://www.codexa.net/wp-content/uploads/2017/11/cropped-favicon-32x32.png</url>
	<title>データサイエンス &#8211; 機械学習 入門コースの決定版!機械学習エンジニアを目指すならcodexa（コデクサ）</title>
	<link>https://www.codexa.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>R言語とは？機械学習エンジニアが知っておくべきR言語の概要やPythonとの比較まとめ</title>
		<link>https://www.codexa.net/what-is-r/</link>
					<comments>https://www.codexa.net/what-is-r/#respond</comments>
		
		<dc:creator><![CDATA[codexaチーム]]></dc:creator>
		<pubDate>Mon, 02 Jul 2018 11:44:52 +0000</pubDate>
				<category><![CDATA[データサイエンス]]></category>
		<guid isPermaLink="false">https://www.codexa.net/?p=1587</guid>

					<description><![CDATA[&#160; 多くのエンジニアが「機械学習 = Python」というイメージをお持ちかも知れません。確かに日本国内では機械学習の実装にはPythonが圧倒的に使われているのも事実です。（参考：何故機械学習にPythonが [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>多くのエンジニアが「機械学習 = Python」というイメージをお持ちかも知れません。確かに日本国内では機械学習の実装にはPythonが圧倒的に使われているのも事実です。（参考：<a href="https://www.codexa.net/why-use-python-for-machine-learning/">何故機械学習にPythonが使われるのか？</a>）</p>
<p>機械学習の経験・レベルを積み上げる中で、接する頻度が増えるプログラミング言語の一つに「<strong>R言語（アール）</strong>」があります。アメリカの電気工学・電子工学技術の学会「<a href="https://www.ieee.org/">IEEE</a>」が毎年行なっているプログラミング言語の人気ランキング 2017年度版では<strong>R言語が総合で6位の結果（Pythonは1位）</strong>となりました。</p>
<p>本記事では機械学習においてPythonと肩を並べて人気の高い「R言語」について、<strong>機械学習の初心者が知っておくべき概要や特徴などを紹介</strong>したいと思います。</p>
<h3>R言語とは？</h3>
<p>R言語は、1995年に科学者ロス・イハカ氏とオークランド大学のロバート・ジェントルマンによって開発されました。S言語というプログラミング言語をベースにしたユーザーフレンドリーな<strong>データ解析・統計プログラミングとして開発</strong>され、1997年以降はR Development Core Teamにより開発が続けられています。</p>
<p>公開当初は<strong>主に学術や研究の分野で使われていましたが、最近では民間企業でも導入</strong>が進んでいます。</p>
<p>もともと統計解析言語として開発されたので、<strong>データ分析や統計解析に関しては他の言語と比べても群を抜いて優秀</strong>です。データを大きな労力を費やさずに解析する多くの機能がデフォルトで備わっています。</p>
<p>また、すでにPythonで機械学習を学んでいる方であれば欠かせないのが、<a href="https://www.codexa.net/numpy/">Numpy</a>や<a href="https://www.codexa.net/pandas/">Pandas</a>などの機械学習の実装の役に立つライブラリです。Pythonと同様に<strong>R言語も機械学習向けに用意されたパッケージ化された拡張機能が豊富</strong>に揃っているのも特徴の一つです。</p>
<h3>R言語のインストールと開発環境</h3>
<p>R言語はオープンソースですので誰でも無料で使うことができます。OS毎にインストール方法が異なりますが、下記の公式サイトよりインストーラーをダウンロードが可能です。</p>
<p>→ <a href="https://cran.ism.ac.jp/">R言語 公式</a></p>
<p>またR言語とセットでおすすめなのがRStudio（Rスタジオ）です。RStudioとはR言語用のIDE（総合開発環境）です。R言語を駆使している大半のエンジニアはRStudioとセットで使っています。</p>
<p>→ <a href="https://www.rstudio.com/">RStudio 公式</a></p>
<p>RStudioもオープンソースソフトウェアで無料で使用することが可能です。また参考までにですが、R言語単体でも簡単なエディタがデフォルトで含まれていますので、一先ず触ってみたいとお考えの方はR言語のみでも大丈夫かと思います。</p>
<div id="attachment_1595" style="width: 510px" class="wp-caption aligncenter"><img aria-describedby="caption-attachment-1595" loading="lazy" class="wp-image-1595 size-full" src="https://www.codexa.net/wp-content/uploads/2018/07/r_studio_interface_ex.png" alt="" width="500" height="443" srcset="https://www.codexa.net/wp-content/uploads/2018/07/r_studio_interface_ex.png 500w, https://www.codexa.net/wp-content/uploads/2018/07/r_studio_interface_ex-300x266.png 300w, https://www.codexa.net/wp-content/uploads/2018/07/r_studio_interface_ex-242x214.png 242w, https://www.codexa.net/wp-content/uploads/2018/07/r_studio_interface_ex-178x158.png 178w" sizes="(max-width: 500px) 100vw, 500px" /><p id="caption-attachment-1595" class="wp-caption-text">RStudioのインターフェース（引用：<a href="https://www.rstudio.com/products/RStudio/">公式サイト</a>）</p></div>
<h3>R言語の機械学習向けパッケージ</h3>
<div class="p-Widget jp-Cell jp-MarkdownCell jp-Notebook-cell jp-mod-rendered jp-mod-active jp-mod-selected">
<div class="p-Widget p-Panel jp-Cell-inputWrapper">
<div class="p-Widget jp-InputArea jp-Cell-inputArea">
<div class="p-Widget jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">機械学習をPythonで実装する場合、多くのケースでライブラリが使用されます。例えば計算を効率的に行うための<a href="https://www.codexa.net/numpy/">Numpy</a>や、データの可視化のための<a href="https://www.codexa.net/matplotlib/">Matplotlib</a>などが代表例です。</div>
</div>
</div>
</div>
<p>R言語ではライブラリとは呼ばれず「<strong>パッケージ</strong>」と呼ばれており、Pythonと同じく機械学習の処理の手助けをしてくれる多くのパッケージが存在します。中でも特に人気が高いパッケージをご紹介します。</p>
<h4>dplyer</h4>
<p>dplyer（読み：ディプライヤー）はデータフレームの操作に特化したパッケージです。Pythonの<a href="https://www.codexa.net/pandas/">Pandas</a>に類似したパッケージで、データの絞り込みやグルーピングなど大規模データの様々な操作を効率的に行うことが可能です。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1596" src="https://www.codexa.net/wp-content/uploads/2018/07/dplyer_logo.png" alt="" width="120" height="139"></p>
<h4>stringr</h4>
<p>stringr（読み：ストリンガー）はR言語で文字列操作を効率よく行うパッケージです。R言語にも標準で文字列操作を扱う関数は用意されていますが、文字列の置換やパターン認識、正規表現を利用した抽出などが簡単に行えます。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1598" src="https://www.codexa.net/wp-content/uploads/2018/07/stringr_logo.png" alt="" width="120" height="139"></p>
<h4>ggplot2</h4>
<p>ggplot2（読み：ジージープロットツー）はデータの可視化に役立つパッケージです。Pythonの<a href="https://www.codexa.net/matplotlib/">Matplotlib</a>と同様でデータの可視化をとても簡単に行うことが可能です。R言語にも標準でグラフ描写の機能が備わっていますが、ggplot2を利用することでより複雑なグラフの描写を行うことが可能です。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1597" src="https://www.codexa.net/wp-content/uploads/2018/07/ggplot2_logo.png" alt="" width="120" height="139"></p>
<h4>caret</h4>
<p>caret（読み：キャレット）は機械学習の様々なタスクをまとめたパッケージです。いわゆる「機械学習ライブラリ」と呼ばれる部類のものでPythonのScikit-learn（サイキット・ラーン）と似た役割を果たします。</p>
<p>caretは「<strong>C</strong>lassification <strong>A</strong>nd<strong> RE</strong>gression <strong>T</strong>raining」の頭文字を略したもので、機械学習のプロセスで必要となる様々なタスクを効率化してくれます。下記は一例ですが、caretを使って実行できるタスクの一例です。</p>
<ul>
<li>訓練データとテストデータの分割処理</li>
<li>データセットの前処理</li>
<li>特徴選択（参照：<a href="https://www.codexa.net/feature-selection-methods/">特徴選択とは？</a>）</li>
</ul>
<p>またcaretには多数の機械学習アルゴリズム/手法が組み込まれています。下記はその一例です。</p>
<ul>
<li>ランダムフォレスト（→ <a href="https://www.codexa.net/decision-tree-random-forest/">ランダムフォレスト入門</a>）</li>
<li>線形回帰（→ <a href="https://www.codexa.net/linear-regression-for-beginner/">線形回帰 入門</a>）</li>
<li>ロジスティック回帰（→ <a href="https://www.codexa.net/tutorial-logistic-regression-for-beginner/">ロジスティック回帰 入門</a>）</li>
<li>ニューラルネットワーク</li>
</ul>
<h3>R言語の特徴（メリット＆デメリット）</h3>
<p>プログラミング言語のメリット＆デメリットを一概に論ずることは出来ませんが、本セクションではR言語の特徴としまして、一般的に言われている利点と欠点を紹介します。</p>
<h4>パッケージが豊富</h4>
<p>R言語が人気な理由の一つとして、世界中の様々な人が開発したアルゴリズムを自分の手で試すことができます。統計などの分野の<strong>研究成果がそのままパッケージとして公表されることも珍しくなく、最先端の技術やアルゴリズムにも簡単にアクセスする</strong>ことができます。</p>
<h4>データ分析/可視化が得意</h4>
<p>機械学習エンジニアの中にはデータの分析/解析や可視化などはR言語で行なって、プロダクションへの実装はPythonで書き直す方々も多いです。R言語は特に大学や研究分野などで使われることが多いため、チーム内で共有する必要のないタスクは学生時代から使い慣れているR言語で行う方もいます。</p>
<h4>日本語でのリソースが乏しい</h4>
<p>日本では使っているエンジニアが限定的なため、R言語のリソースが他言語よりも圧倒的に少ないです。R言語で不明な点がある場合、<strong>大半は英語のドキュメントを紐解くか、海外のサイトを参照しながら解決</strong>しなくてはいけません。</p>
<h3>R言語とPythonを比較</h3>
<p>データサイエンティストの中では<strong>R言語とPythonの議論が頻繁に発生</strong>します。世界的に有名なデータサイエンスのブログ「<a href="https://www.kdnuggets.com/">KDnuggets</a>」では定期的にR言語とPythonの比較がトピックとしてあがります。</p>
<p>前述しましたが、<strong>R言語は統計解析に特化した言語なのに対してPythonは幅広い利用を目的とした汎用型の言語</strong>です。開発された目的が違うので、一概に2つのプログラミング言語の優越を比較するのは容易ではありませんが、本記事では3つのポイントに分けて比較をしてみましょう。</p>
<h4>習得の難易度を比較</h4>
<p>Pythonはプログラミング言語の中でも文法がシンプルなことで有名で、特に読みやすさが重視されており、<strong>初心者でも覚えやすい言語</strong>です。</p>
<p>一方で、R言語は習得の難易度が高めです。他言語でのプログラミング経験がないと文法を理解するのは簡単ではありません。書きやすさを重視して開発されたPythonと違い、R言語は統計学者が統計学を行うために開発されたので、プログラミングの初心者には優しくない言語と言えるでしょう。</p>
<h4>給料による比較</h4>
<p>海外のデータですのであくまで参考としてですが、「<a href="https://insights.dice.com/report/dice-tech-salary-survey-results-2014/">2014 Dice Tech Salary Survey</a>（2014年のテック業界給料調査）」によると、アメリカでのPythonプログラマーの平均給料は<strong>93,139ドル</strong>に対してR言語プログラマーの平均給料は<strong>115,531ドル</strong>というデータがあります。</p>
<p>こちらのデータですが、アメリカのテック業界で働く<strong>17,000名以上の回答を基にしたデータ</strong>ですので、それなりに全体的な傾向を表しているかと思います。R言語は専門性が高い言語ですので、給料も他言語と比べて高くなる傾向にあるようです。</p>
<h4>データの可視化・グラフ作成</h4>
<p>機械学習では、最初のデータ探索（参照：<a href="https://www.codexa.net/basic-exploratory-data-analysis-with-python/">探索的データ解析</a>）でデータセットを理解することが重要になってきますが、<strong>データの可視化ではR言語がPythonよりも優れている</strong>と言われています。大きな理由としてR言語には先ほど紹介した「ggplot2」に加えて「ggivis」「lattice」などのパッケージを使って統計データから簡単かつ高度なグラフ描写が可能です。</p>
<p>Pythonでもグラフ描写ライブラリ「matplotlib」や「Seaborn」などがありますが、より高度なデータ可視化はR言語が優れており、多くのデータサイエンティストがR言語を利用しているのも事実です。</p>
<h3>R言語を学ぶべき？</h3>
<p>機械学習を勉強したことがある方なら「Kaggle」をご存知かと思います。Kaggleとは機械学習エンジニア同士を繋げるプラットフォームです。世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い合ったりしています。（参照：<a href="https://www.codexa.net/what-is-kaggle/">Kaggleとは？機械学習初心者が知っておくべき使い方</a>）</p>
<p>Kaggleのサイト上ではさまざまな言語で書かれたコードが公開されていますが、<strong>コンペで上位に入賞する質の高いコードは、R言語で書かれていることが多いです。</strong></p>
<p>下のグラフはkaggleのカーネル（公開コード）でPythonとR言語が使われた頻度を示したものです。Kaggleによると<strong>2016年以前はデータサイエンティストの中で最も使われていたのはR言語</strong>でしたが、2016年を境にPythonが急激に伸びているとのことです。</p>
<div id="attachment_1600" style="width: 1034px" class="wp-caption aligncenter"><img aria-describedby="caption-attachment-1600" loading="lazy" class="wp-image-1600 size-large" src="https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data-1024x633.png" alt="" width="1024" height="633" srcset="https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data.png 1024w, https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data-300x185.png 300w, https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data-768x475.png 768w, https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data-304x188.png 304w, https://www.codexa.net/wp-content/uploads/2018/07/kaggle_monthly_data-256x158.png 256w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-1600" class="wp-caption-text">引用 &#8211; <a href="http://blog.kaggle.com/2017/01/05/your-year-on-kaggle-most-memorable-community-stats-from-2016/">Kaggle # of monthly kernels written</a></p></div>
<p>こちらのグラフで注目するべきは「<strong>R言語は使われ続けている</strong>」という点です。すでにKaggleに参加している方であれば経験があると思いますが、<strong>予測精度が優れている手法やデータ分析で役に立つコードの多くがR言語で公開されており、R言語を知らないために悔しい思いをしたことはありませんか？</strong></p>
<p>Pythonでも、とても役に立つカーネルは多数存在します。しかしR言語を習得することで、さらに有益なカーネルへのアクセスが増えることは間違いありません。</p>
<p>既に他のプログラミング言語を使える人もそうでない人も、<strong>R言語を学ぶことによって読めるコードの幅がぐっと広がります</strong>。また、特にアカデミックの世界では、R言語が主流なので、習得することによって<strong>最先端の機械学習の動向をいち早く知る</strong>ことができます。</p>
<h3>まとめ</h3>
<p>本記事ではR言語についてまとめてみました。機械学習をこれから勉強しようと考えている方は、Pythonを使って機械学習の勉強をすることをお勧めします。一通りの機械学習の初歩的な手法の理解が出来ましたら、次はR言語へ挑戦してみてはいかがでしょうか？</p>
<p>機械学習を始めようと考えている方は下記の無料コースもお勧めです。ぜひ、受講をお待ちしております。</p>
<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;機械学習 準備編 無料講座&nbsp;&nbsp;</span>
<ul>
<li><a href="https://www.codexa.net/numpy/">Numpy 入門</a></li>
<li><a href="https://www.codexa.net/matplotlib/">Matplotlib 入門</a></li>
<li><a href="https://www.codexa.net/pandas/">Pandas 入門</a></li>
<li><a href="https://www.codexa.net/linear-basics-2/">線形代数 入門</a></li>
<li><a href="https://www.codexa.net/statistics-for-machine-learning-first/">統計入門（前編）</a></li>
<li><a href="https://www.codexa.net/statistics-for-machine-learning-second/">統計入門（後編）</a></li>
<li><a href="https://www.codexa.net/linear-regression-for-beginner/">線形回帰 入門</a></li>
</ul>
<p>以上となります！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codexa.net/what-is-r/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【データサイエンティスト入門編】探索的データ解析（EDA）の基礎操作をPythonを使ってやってみよう</title>
		<link>https://www.codexa.net/basic-exploratory-data-analysis-with-python/</link>
					<comments>https://www.codexa.net/basic-exploratory-data-analysis-with-python/#comments</comments>
		
		<dc:creator><![CDATA[codexaチーム]]></dc:creator>
		<pubDate>Wed, 07 Mar 2018 03:53:01 +0000</pubDate>
				<category><![CDATA[データサイエンス]]></category>
		<guid isPermaLink="false">https://www.codexa.net/?p=1107</guid>

					<description><![CDATA[機械学習エンジニアやデータサイエンティストが、一番最初に行う作業をご存知でしょうか？会社や組織から課題を与えられた場合、最初に行うのが「探索的データ解析」と呼ばれる作業です。 探索的データ解析、英語ではExplanato [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>機械学習エンジニアやデータサイエンティストが、一番最初に行う作業をご存知でしょうか？会社や組織から課題を与えられた場合、最初に行うのが「<strong>探索的データ解析</strong>」と呼ばれる作業です。</p>
<p>探索的データ解析、英語ではExplanatory Data Analysis（略してEDA）とは、<strong>データの特徴を探求し、構造を理解することを目的としたデータサイエンスの最初の一歩</strong>です。</p>
<p>探索的データ解析は機械学習のタスクの一番最初のフェーズで、<strong>まずはデータに触れてみて、データを視覚化したり、データのパターンを探したり、特徴量やターゲットの関係性/相関性を感じるとる</strong>のが目的です。</p>
<p>より高度な機械学習のモデルの構築をしたり、難解な問題を解決する際には、特徴量エンジニアリング（英語でFeature Engineering）を必要することが多々あり、その際に深いデータの知識と理解が求められます。</p>
<p>問題を解決する前に、どのようなデータセットを扱っているのか、どのような状況にあるのかを、しっかりと理解するのが重要であり、「探索的データ解析（EDA）」はまさしくそれを目的とした作業となります。</p>
<p>今回のチュートリアルでは、<strong>データサイエンティスト入門として、探索的データ解析で頻繁に使われる基本的な関数などをご紹介</strong>させていただきます。利用するデータセットは、機械学習入門者であれば一度は目にしたことある「<strong>アヤメ（Iris Dataset）</strong>」のデータセットを使いましょう。</p>
<div id="attachment_1109" style="width: 650px" class="wp-caption aligncenter"><img aria-describedby="caption-attachment-1109" loading="lazy" class="wp-image-1109 size-full" src="https://www.codexa.net/wp-content/uploads/2018/03/iris-sample.jpg" alt="" width="640" height="427" srcset="https://www.codexa.net/wp-content/uploads/2018/03/iris-sample.jpg 640w, https://www.codexa.net/wp-content/uploads/2018/03/iris-sample-300x200.jpg 300w, https://www.codexa.net/wp-content/uploads/2018/03/iris-sample-304x203.jpg 304w, https://www.codexa.net/wp-content/uploads/2018/03/iris-sample-237x158.jpg 237w" sizes="(max-width: 640px) 100vw, 640px" /><p id="caption-attachment-1109" class="wp-caption-text">Irisは日本語でアヤメをさします。こちらの花です。</p></div>
<h3>なぜ探索的データ解析が重要なのか？</h3>
<p>データサイエンティストの仕事の多くは、当然ながら、何かしらのデータを使って行うことが多いわけです。長い間、親しんで使ったデータもあれば、全く見たことも触ったこともないデータも当然あります。</p>
<p>これらのデータに対して「仮説」を立てて、最終的に<strong>予測モデルを構築</strong>するのですが、そのプロセスにおいて「探索的データ解析」は重要な役割を持っています。</p>
<p>有名なドイツの哲学者「アルトゥル・ショーペンハウアー氏」の引用ですが、「<strong>金を探し求めている錬金術師達は、金よりも価値の高い多くのものを発見しました</strong>（意訳）」と残していますが、まさに探索的データ解析はデータサイエンティストにとって、<strong>データをより深く理解して「データよりも価値の高いもの」を見つけるための作業</strong>なのです。</p>
<div id="attachment_1110" style="width: 216px" class="wp-caption aligncenter"><img aria-describedby="caption-attachment-1110" loading="lazy" class="wp-image-1110 size-full" src="https://www.codexa.net/wp-content/uploads/2018/03/arthur-quote.jpg" alt="" width="206" height="245" srcset="https://www.codexa.net/wp-content/uploads/2018/03/arthur-quote.jpg 206w, https://www.codexa.net/wp-content/uploads/2018/03/arthur-quote-180x214.jpg 180w, https://www.codexa.net/wp-content/uploads/2018/03/arthur-quote-133x158.jpg 133w" sizes="(max-width: 206px) 100vw, 206px" /><p id="caption-attachment-1110" class="wp-caption-text">ドイツの著名な哲学者 アルトゥル・ショーペンハウアー氏</p></div>
<h3>探索的データ解析で使うツールとは？</h3>
<p>データ解析で使うツールですが、様々なツールが出回っていますが、本チュートリアルでは世界的にも標準的なPythonのライブラリである「<a href="https://www.codexa.net/pandas/">Pandas（パンダス）</a>」「<a href="https://www.codexa.net/matplotlib/">Matplotlib（マットプロットリブ）</a>」「<a href="https://www.codexa.net/numpy/">NumPy（ナンパイ）</a>」を使ってEDAを進めていきたいと思います。</p>
<p>簡単ではありますが、この基本的な3つのライブラリについて見ていきましょう。</p>
<h4>Pandasとは？</h4>
<p><img loading="lazy" class="aligncenter size-full wp-image-1111" src="https://www.codexa.net/wp-content/uploads/2018/03/pandas_logo.png" alt="" width="600" height="125" srcset="https://www.codexa.net/wp-content/uploads/2018/03/pandas_logo.png 600w, https://www.codexa.net/wp-content/uploads/2018/03/pandas_logo-300x63.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/pandas_logo-304x63.png 304w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<p>Pandas（読み方はパンダまたはパンダス）とは、オープンソースのPythonのライブラリです。機械学習エンジニアの中でも非常に人気が高く、大量なデータを高速かつ簡単に扱うのに優れているツールです。Pandasを使ったことがない方は、<a href="https://www.codexa.net/pandas/">Pandas入門コース（無料）</a>を是非ご参考ください。</p>
<h4>matplotlibとは？</h4>
<p><img loading="lazy" class="aligncenter size-full wp-image-1112" src="https://www.codexa.net/wp-content/uploads/2018/03/logo2.png" alt="" width="542" height="130" srcset="https://www.codexa.net/wp-content/uploads/2018/03/logo2.png 542w, https://www.codexa.net/wp-content/uploads/2018/03/logo2-300x72.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/logo2-304x73.png 304w" sizes="(max-width: 542px) 100vw, 542px" /></p>
<p>Matplotlib（読み方はマットプロットリブ）とは、同じく機械学習では頻繁に登場する、グラフを作成するオープンソースのライブラリです。今回の探索的データ解析でもグラフを多数使いますが、機械学習の作業においてグラフは非常に重要なツールです。ヒストグラムや散布図、その他にも様々な複雑なグラフがとても簡単に作成することが可能です。（参照：<a href="https://www.codexa.net/matplotlib/">Maplotlib入門コース（無料）</a>）</p>
<h4>NumPyとは？</h4>
<p><img loading="lazy" class="aligncenter size-full wp-image-1113" src="https://www.codexa.net/wp-content/uploads/2018/03/numpy-logo.jpg" alt="" width="400" height="171" srcset="https://www.codexa.net/wp-content/uploads/2018/03/numpy-logo.jpg 400w, https://www.codexa.net/wp-content/uploads/2018/03/numpy-logo-300x128.jpg 300w, https://www.codexa.net/wp-content/uploads/2018/03/numpy-logo-304x130.jpg 304w" sizes="(max-width: 400px) 100vw, 400px" /></p>
<p>機械学習界の大御所「Numpy（読み方ナンパイ）」です。こちらもオープンソースのPythonライブラリとなります。機械学習では複雑かつ膨大な線形代数の処理をすることが多数あり、そのような処理を、高速かつ効率的に行ってくれるツールです。</p>
<p>codexa（コデクサ）では、<a href="https://www.codexa.net/numpy/">Numpyの入門コース</a>、さらに<a href="https://www.codexa.net/linear-basics-2/">機械学習のための線形代数コース</a>を無料で公開しています。より詳しく使い方をマスターしたい方は、是非こちらのコースの受講をご検討ください。</p>
<h3>今回利用するアヤメのデータセットについて</h3>
<p>さて、今回の探索的データ解析の練習で使うデータセットですが、「Iris Dataset」を利用します。Kaggleにて無料会員登録後に、下記のURLからダウロードが可能です。（参照：<a href="https://www.codexa.net/what-is-kaggle/">Kaggleについて</a>）</p>
<p><a href="https://www.kaggle.com/uciml/iris">https://www.kaggle.com/uciml/iris</a></p>
<p>アヤメのデータセットですが、元々はフィッシャー氏の1936年の論文「The Use of Multiple Measurements in Taxonomix Problems」で提示されたデータセットで、<strong>機械学習の初心者が分類問題を練習する際に広く使われる、とても有名なデータセット</strong>です。</p>
<p>このデータセットの<strong>特徴量（説明変数）</strong>は、下記の4つの項目が含まれています。</p>
<ul>
<li>Sepal Length &#8211; がく片の長さ(cm)</li>
<li>Sepal Width &#8211; がく片の幅(cm)</li>
<li>Petal Length &#8211; 花弁の長さ(cm)</li>
<li>Petal Width &#8211; 花弁の幅(cm)</li>
</ul>
<p><img loading="lazy" class="wp-image-1114 size-full aligncenter" src="https://www.codexa.net/wp-content/uploads/2018/03/petal_sepal_label.png" alt="" width="427" height="354" srcset="https://www.codexa.net/wp-content/uploads/2018/03/petal_sepal_label.png 427w, https://www.codexa.net/wp-content/uploads/2018/03/petal_sepal_label-300x249.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/petal_sepal_label-258x214.png 258w, https://www.codexa.net/wp-content/uploads/2018/03/petal_sepal_label-191x158.png 191w" sizes="(max-width: 427px) 100vw, 427px" /></p>
<p>アヤメには下記の3つの種類があり、上記の4つの特徴量は、どの種類のアヤメに属するかを分類予測するために使われます。</p>
<ul>
<li>Iris-Setosa（アイリスセトサ）</li>
<li>Iris-Versicolor（アイリスバージカラー）</li>
<li>Iris-Virginica（アイリスバージニカ）</li>
</ul>
<p>データセットには上記の3種類のアヤメ毎に50の観測データが含まれています。つまり全体で150の観測データが含まれているデータセットです。</p>
<h3>探索的データ解析チュートリアル</h3>
<p>このデータセットを使ってデータ解析の初歩的な流れを、Pythonとライブラリを使いながらやってみましょう。本チュートリアルですが、<strong>Python 3.xを使っています</strong>。Python 2.xをお使いの方は、動かないコードがある可能性がありますので、Python 3.xへアップデートをお願いします。</p>
<p>また本チュートリアルは<strong>Jupyter Notebook</strong>を利用しています。こちらは必須ではありませんが、コードの編集が非常に簡単になります。まだ環境構築をされていない方は、<a href="http://jupyter.org/">こちら</a>をご参考にインストールをお勧めいたします。（必須ではありませんので、Python3.xが動く環境であれば問題ありません）</p>
<h4>必要ライブリーのインポート</h4>
<p>まずはPandas、Matplotlib、numpyの3つのライブラリのインポートをしましょう。<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;import関数&nbsp;</span>は必要なライブラリを読み込み、使えるようにしてくれます。また<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;import&nbsp;</span>に<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;as&nbsp;</span>と指定することで、そのライブラリを省略して呼び出すことが可能です。</p><pre class="crayon-plain-tag"># pandasを「pd」としてインポート
import pandas as pd 

# pandasの列最大表示数を指定
pd.options.display.max_columns = 32

# matplotlibを「plt」としてインポート
import matplotlib.pyplot as plt

# numpyを「np」としてインポート
import numpy as np 

# Jupyter notebookを使っている方はmatplotlibのインラインを設定
%matplotlib inline</pre><p>
<h4>データセットをデータフレームとしてインポート</h4>
<p>SQLやエクセル、CSVなどのファイルをPythonへ読み込む方法は多数ありますが、今回はpandasの<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;read_csv&nbsp;</span>という関数を使ってみましょう。<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;read_csv&nbsp;</span>ですが、その名の通りで主にCSVファイルを読み込む際に利用します。</p>
<p>下記のコードで、CSVファイルを読み込み、さらにpandasのデータフレーム形式へ変換します。「Iris.csv」のファイルの格納先が、Jupyter Notebook/Pythonの立ち上げのディレクトリと異なる場合は、下記の&#8217;Iris.csv&#8217;にディレクトリの指定もしてあげましょう。（同じディレクトリの場合は追記なしで問題ありません）</p><pre class="crayon-plain-tag"># CSVファイルをPandasのデータフレーム形式で読み込み
Iris = pd.read_csv('Iris.csv')</pre><p>
<h4>基本的なデータ探索</h4>
<p>まずは、最も基本的なデータ探索を行ってみましょう。基本的と言えど、データサイエンティストが初見のデータを扱うときは、ほとんどのケースで同様の確認を行います。</p>
<p>まずは<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;head()&nbsp;</span>を使って、データフレームの最初の5行を表示させてあげましょう。下の図のようにIrisのデータフレームの最初の5行が出力されるはずです。まずはデータフレームの最初の5行を表示させることで、このデータに何がどのように含まれているのかを、<strong>ざっくり</strong>と確認します。</p><pre class="crayon-plain-tag"># Irisのデータフレームの最初の5行を表示させる
Iris.head()</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1115" src="https://www.codexa.net/wp-content/uploads/2018/03/head_1.png" alt="" width="543" height="159" srcset="https://www.codexa.net/wp-content/uploads/2018/03/head_1.png 543w, https://www.codexa.net/wp-content/uploads/2018/03/head_1-300x88.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/head_1-304x89.png 304w" sizes="(max-width: 543px) 100vw, 543px" /></p>
<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;head()&nbsp;</span>と同様で頻繁に使われる関数に<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;tail()&nbsp;</span>があります。これは、逆に最後の5行を表示させるための関数です。これを実行してみると、下記のようにこのデータフレームは149行（ID150）まであると確認ができます。<br />
<pre class="crayon-plain-tag"># Irisのデータセットの最後の5行を表示する
Iris.tail()</pre>
<img loading="lazy" class="aligncenter size-full wp-image-1116" src="https://www.codexa.net/wp-content/uploads/2018/03/foot_1.png" alt="" width="571" height="170" srcset="https://www.codexa.net/wp-content/uploads/2018/03/foot_1.png 571w, https://www.codexa.net/wp-content/uploads/2018/03/foot_1-300x89.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/foot_1-304x91.png 304w" sizes="(max-width: 571px) 100vw, 571px" /></p>
<p>このhead()ですが、さらに数字を関数に入力することで、表示する行数も簡単に変更が可能です。5行だけだと、よくデータが分からないときは、行数を増やして確認をしてみましょう。</p><pre class="crayon-plain-tag"># 次は最初の8行を表示してみます
Iris.head(8)</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1117" src="https://www.codexa.net/wp-content/uploads/2018/03/head-eight.png" alt="" width="518" height="250" srcset="https://www.codexa.net/wp-content/uploads/2018/03/head-eight.png 518w, https://www.codexa.net/wp-content/uploads/2018/03/head-eight-300x145.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/head-eight-304x147.png 304w" sizes="(max-width: 518px) 100vw, 518px" /></p>
<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;head()&nbsp;</span>と<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;tail()&nbsp;</span>でこのエータフレームの大枠が確認できましたので、次は<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;describe()&nbsp;</span>を使ってみましょう。</p>
<p>describe()ですが、データセットの分散を非常に簡単かつ素早く確認をすることが可能です。口で説明するよりも、まずは実際に実行してみましょう。</p><pre class="crayon-plain-tag"># データセットの基本統計量を表示
Iris.describe()</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1118" src="https://www.codexa.net/wp-content/uploads/2018/03/describe_1.png" alt="" width="475" height="246" srcset="https://www.codexa.net/wp-content/uploads/2018/03/describe_1.png 475w, https://www.codexa.net/wp-content/uploads/2018/03/describe_1-300x155.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/describe_1-304x157.png 304w" sizes="(max-width: 475px) 100vw, 475px" /></p>
<p>このように、この関数を使うことで、データフレームのcount（データ数）やmean（平均）、さらにはstd（標準偏差）などを一発で確認をすることが可能です。（参照：<a href="https://www.codexa.net/statistics-for-machine-learning-first/">標準偏差やMeanなどに不安がある方は統計入門コースをご参照ください</a>）</p>
<p>また、データの分散を示す「min（最小値）」「25%〜75%」「max（最大値）」の確認も可能です。<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;describe()&nbsp;</span>を使うことで、この<strong>データがどのような分散をしているのかを確認</strong>できます。このようにデータの分散状況を確認して、場合によってはさらに詳細を調べていき、必要に応じて値の削除や代用など、データクレンジング（データを掃除する）したりします。</p>
<p>先述しましたが、このアヤメのデータセットでは上図のように４つの特徴量が与えらており、これらを学習して3種類のアヤメのどれに属するかを分類予測したい訳です。</p>
<p>となれば、やはり気になるのは、この特徴量とアヤメの各種類との関係性です。例えば、Iris-Setosa（アヤメの1種類）のがく片と花弁の長さに何か特徴はあるのか？などをデータをみて直感的に把握したいですよね。</p>
<p>では、実際にそのコードを書いてみましょう。</p><pre class="crayon-plain-tag"># アヤメの種類毎の特徴量のデータ分散を確認してみる
Irisdes= Iris.groupby(['Species'])
round(Irisdes.describe(),2)</pre><p>
<img loading="lazy" class="aligncenter size-large wp-image-1119" src="https://www.codexa.net/wp-content/uploads/2018/03/groupby-1024x129.png" alt="" width="1024" height="129" srcset="https://www.codexa.net/wp-content/uploads/2018/03/groupby-1024x129.png 1024w, https://www.codexa.net/wp-content/uploads/2018/03/groupby-300x38.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/groupby-768x97.png 768w, https://www.codexa.net/wp-content/uploads/2018/03/groupby-304x38.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/groupby.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>このように<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;groupby&nbsp;</span>を使うことで、とても簡単にデータを要約することが可能です。</p>
<p>ではアヤメの種類と特徴量の関係で何か特筆すべき特徴は見つかったでしょうか？上図は小さいので見辛いかもしれませんが、データを確認してみるとPetalLengthCM（花弁の長さ）を比較してみるとIris-Setosaの最小-最大値は1.0〜1.9cmなのに対して、Iris-versicolorの最小-最大値は3.0-5.1cmと大きく異なっているのが分かります。</p>
<p>機械学習でモデルフィッティングをする前でも、このように<strong>二つの種類のアヤメの花弁の長さには明確な違いがある</strong>のがわかる訳です。</p>
<p>次は<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;info()&nbsp;</span>を使ってみましょう。この関数は、データフレーム全体の情報を要約して表示してくれます。</p><pre class="crayon-plain-tag"># info()を使ってIrisデータフレームをみてみる
Iris.info()</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1120" src="https://www.codexa.net/wp-content/uploads/2018/03/info.png" alt="" width="300" height="169" srcset="https://www.codexa.net/wp-content/uploads/2018/03/info.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/info-280x158.png 280w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>このように、データフレームのカラム数や行数、さらには各カラムのデータタイプなどの情報が表示されます。新しいファイルを読み込んだ際は、<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;info()&nbsp;</span>を使ってデータフレームの全体を一目で把握することが可能です。</p>
<h3>カラムの値を確認する</h3>
<p>次に<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;unique()&nbsp;</span>と<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;value_counts()&nbsp;</span>を使っていきましょう。この2つの関数も初期のデータ探索でよく使われます。</p><pre class="crayon-plain-tag"># 特定のカラムのユニークな値を出力する
Iris.Species.unique()</pre><p>
array([&#8216;Iris-setosa&#8217;, &#8216;Iris-versicolor&#8217;, &#8216;Iris-virginica&#8217;], dtype=object)</p>
<p>上記の<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;unique()&nbsp;</span>のコードを動かしてみると解りやすいかと思いますが、このようにデータフレーム内のユニークな値のみを出力してくれます。今回は<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;Species&nbsp;</span>のカラムを指定したところ、先述した通り3種類のアヤメの種類がユニークな値として出てきました。</p>
<p>これは事前のデータの情報で知っていたことではありますが、実際にデータでそれを確認するのは重要な作業です。稀に聞いていた話と異なるデータが含まれる場合もあり、そのまま学習モデルの構築を進めるとドツボにハマるなんてことも・・（汗）</p>
<p>さて、次はvalue_counts()をやってみましょう。この関数はカラム内のデータのカウント数をまとめてくれます。実際に例をみた方が解りやすいかと思います。</p><pre class="crayon-plain-tag"># value_counts()でSpeciesのカラムの情報をみてみよう
Iris['Species'].value_counts()</pre><p>
Iris-setosa 50<br />
Iris-versicolor 50<br />
Iris-virginica 50<br />
Name: Species, dtype: int64</p>
<p>このようにSpeciesのカラムの各データをまとめて、テーブルを作成してくれます。これも冒頭のデータ説明の際に触れましたが、各種別に50個ずつのデータが入っていることが確認できますね。</p>
<p>データが小規模の場合は、確認するもの簡単な作業ではありますが、機械学習では100万、1000万と非常に規模のでかいデータを扱いますので、一手間でもデータを理解するという意味で、このような確認作業を行なった方が良いでしょう。</p>
<h3>カラムをデータフレームから削除する</h3>
<p>機械学習では頻繁に発生しますが、データセットの中から使うデータと使わないデータを判別して処理をしなくていけません。次は<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;drop()&nbsp;</span>を使って、実際にデータフレームから<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;Id&nbsp;</span>のカラムを削除してみましょう。</p><pre class="crayon-plain-tag"># データフレームからIdのカラムを削除する
Iris = Iris.drop(['Id'],axis=1)
Iris.head()</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1122" src="https://www.codexa.net/wp-content/uploads/2018/03/head2.png" alt="" width="520" height="164" srcset="https://www.codexa.net/wp-content/uploads/2018/03/head2.png 520w, https://www.codexa.net/wp-content/uploads/2018/03/head2-300x95.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/head2-304x96.png 304w" sizes="(max-width: 520px) 100vw, 520px" /></p>
<p>念のため<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;head()&nbsp;</span>で最初の5行を表示してみましたが、ご覧の通り<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;Id&nbsp;</span>のカラムが削除されているのが確認できます。</p>
<h3>データの可視化</h3>
<p>さて、ここからはデータの可視化をMatplotlibを使ってやってみましょう。上記のようにデータのテーブルを確認するのも重要ですが、グラフなどに可視化することで分かることも多々あります。実際に機械学習エンジニアの作業として、このようにデータをグラフ化して、そこから内容を紐解いていく作業も含まれます。</p>
<h4>ヒストグラム</h4>
<p>最初の可視化はヒストグラムを作ってみましょう。ヒストグラムは、データーの散らばり具合（分散）を把握するのに約立つグラフです。Matplotlibの<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;hist()&nbsp;</span>を使うと非常に簡単にヒストグラムを作成することが可能です。</p><pre class="crayon-plain-tag"># Irisのエータフレームのヒストグラムを作成
Iris.hist(bins=10, figsize=(20,15), color = 'teal')</pre><p>
<img loading="lazy" class="aligncenter size-large wp-image-1123" src="https://www.codexa.net/wp-content/uploads/2018/03/hist-1-1024x636.png" alt="" width="1024" height="636" srcset="https://www.codexa.net/wp-content/uploads/2018/03/hist-1-1024x636.png 1024w, https://www.codexa.net/wp-content/uploads/2018/03/hist-1-300x186.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/hist-1-768x477.png 768w, https://www.codexa.net/wp-content/uploads/2018/03/hist-1-304x189.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/hist-1-255x158.png 255w, https://www.codexa.net/wp-content/uploads/2018/03/hist-1.png 1115w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>上記のように各カラムのデータの分散を一目で把握することが可能です。例えばがく片の幅と長さですが、山が二つあるように見えますよね（Bimodal Curv -二項曲線）。データの数字だけをみていても解りにくいことが、このようにグラフを作ることで一目で把握できることもあります。</p>
<p>ヒストグラムなどの詳細は、<a href="https://www.codexa.net/statistics-for-machine-learning-first/">機械学習のための統計入門コース（前編）</a>にてカバーしています。不安がある方は、コースの受講をご検討ください！</p>
<h4>特徴量ごとに重ねたヒストグラムを作って確認</h4>
<p>上のヒストグラムですが、各カラムごとのヒストグラムでしたが、今度はよりデータの解析がしやすい形のヒストグラムを生成してみましょう。</p><pre class="crayon-plain-tag"># ヒストグラムを作成
fig = plt.figure(figsize=(25,10))

p1 = fig.add_subplot(2,2,1)
p1.hist(Iris.PetalLengthCm[Iris.Species == 'Iris-setosa'], bins=10, alpha = .4)
p1.hist(Iris.PetalLengthCm[Iris.Species == 'Iris-versicolor'], bins=10, alpha = .4)
p1.hist(Iris.PetalLengthCm[Iris.Species == 'Iris-virginica'], bins=10, alpha = .4)
plt.title('Petal Length Cm')
plt.xlabel('Cm Measurement')
plt.ylabel('Count')
labels = ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
plt.legend(labels)

p2 = fig.add_subplot(2,2,2)
p2.hist(Iris.PetalWidthCm[Iris.Species == 'Iris-setosa'], bins=10, alpha = .4)
p2.hist(Iris.PetalWidthCm[Iris.Species == 'Iris-versicolor'], bins=10, alpha = .4)
p2.hist(Iris.PetalWidthCm[Iris.Species == 'Iris-virginica'], bins=10, alpha = .4)
plt.title('Petal Width Cm')
plt.xlabel('Cm Measurement')
plt.ylabel('Count')
labels = ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
plt.legend(labels)

p3 = fig.add_subplot(2,2,3)
p3.hist(Iris.SepalLengthCm[Iris.Species == 'Iris-setosa'], bins=10, alpha = .4)
p3.hist(Iris.SepalLengthCm[Iris.Species == 'Iris-versicolor'], bins=10, alpha = .4)
p3.hist(Iris.SepalLengthCm[Iris.Species == 'Iris-virginica'], bins=10, alpha = .4)
plt.title('Sepal Length Cm')
plt.xlabel('Cm Measurement')
plt.ylabel('Count')
labels = ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
plt.legend(labels)

plt.title('Sepal Length Cm')
p4 = fig.add_subplot(2,2,4)
p4.hist(Iris.SepalWidthCm[Iris.Species == 'Iris-setosa'], bins=10, alpha = .4)
p4.hist(Iris.SepalWidthCm[Iris.Species == 'Iris-versicolor'], bins=10, alpha = .4)
p4.hist(Iris.SepalWidthCm[Iris.Species == 'Iris-virginica'], bins=10, alpha = .4)
plt.title('Sepal Width Cm')
plt.xlabel('Cm Measurement')
plt.ylabel('Count')
labels = ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
plt.legend(labels)

plt.subplots_adjust(wspace=.1, hspace=.3)
plt.show()</pre><p>
<img loading="lazy" class="aligncenter size-large wp-image-1124" src="https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-1024x548.png" alt="" width="1024" height="548" srcset="https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-1024x548.png 1024w, https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-300x161.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-768x411.png 768w, https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-304x163.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist-295x158.png 295w, https://www.codexa.net/wp-content/uploads/2018/03/stacked-hist.png 1130w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>ちゃんとグラフは描写されましたでしょうか？こちらですが、、コードを見ていただくと解りやすいかと思いますが、今度は各特徴量（がく片と花弁の長さ&amp;幅）をターゲットクラス（3種類のアヤメの種類）毎に分けて、重ねて表示させたヒストグラムとなります。</p>
<p>例えば、左端のPetalLengthCm（萼片の長さ）のグラフを見てみると、人間の目で見てもかなり明確に種別を判別できる傾向が出ているかと思います。グラフを作成するのは、時間がかかる作業ではありますが、このように後々、非常に役に立つ情報が見つかる可能性もありますので、手間ではありますが、初めて触るデータは時間をとってしっかりと可視化をしていきましょう。</p>
<h4>散布図（スキャタープロット）</h4>
<p>次は散布図を描写して見ましょう。先ほどのヒストグラムは一つの特徴量のデータの分布（散らばり具合）を確認するためのものでしたが、散布図では2つの特徴量の相関関係を可視化することが可能です。</p>
<p>では早速コードを実行して見ましょう。</p><pre class="crayon-plain-tag"># ヒストグラムと散布図の行列を作成
from pandas.plotting import scatter_matrix
x = scatter_matrix(Iris, alpha=1, figsize=(20, 10), diagonal='hist')</pre><p>
<img loading="lazy" class="aligncenter size-large wp-image-1125" src="https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat-1024x522.png" alt="" width="1024" height="522" srcset="https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat-1024x522.png 1024w, https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat-300x153.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat-768x392.png 768w, https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat-304x155.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/scatter-hist-mat.png 1167w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<p>たった一行のコードで、このように各特徴量も散布図のマトリックス（行列）が作成できてしまいます。Matplotlibがデータサイエンティストの人気のツールの理由が解りますね。</p>
<p>ヒストグラムは先ほど出した通りですが、今度は2つの特徴量での散布図が出ています。例えば、4段目の右から数えて3つ目の散布図を見てみましょう。こちらは、X軸が萼片の長さでY軸が萼片の幅の散布図です。当然といえば当然ですが、長さが大きくなればなるほど、幅も大きくなっているのが確認できます。散布図をみることで、この2つの特徴量には「強い正の線形関係」があることが把握できます。</p>
<h3>データフレームのフィルタリング</h3>
<p>次のセクションでは、様々な方法を使ってデータフレームのフィルタリングをやってみましょう。フィルタリングですが初歩的ではありますが、非常に重要かつパワフルなツールです。</p>
<p>データサイエンスの世界では、頻繁にデータテーブルにフィルターをかけて、ある特定の事柄について詳しくみていく作業が発生します。例えば、会社の全期間の売り上げデータの中から、毎年の三月のみ比較して分析するなどを考えてみると想像しやすいですよね。</p>
<p>では、実際にIrisのデータフレームを実例としてフィルタリングをやってみましょう。</p><pre class="crayon-plain-tag"># データフレームの行インデックスが6-20までを表示
Iris[6:20]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1126" src="https://www.codexa.net/wp-content/uploads/2018/03/6-20-filtered.png" alt="" width="521" height="411" srcset="https://www.codexa.net/wp-content/uploads/2018/03/6-20-filtered.png 521w, https://www.codexa.net/wp-content/uploads/2018/03/6-20-filtered-300x237.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/6-20-filtered-271x214.png 271w, https://www.codexa.net/wp-content/uploads/2018/03/6-20-filtered-200x158.png 200w" sizes="(max-width: 521px) 100vw, 521px" /></p>
<p>上記のコードでは、データフレームの行インデックスが6-20までのフィルタリングとなります。しっかりと、嬢のイメージのようなテーブルが出力されましたか？</p>
<p>次は少し応用編をやってみましょう。</p><pre class="crayon-plain-tag"># 行インデックス6-20の間で3等間隔にフィルター
Iris[6:20:3]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1127" src="https://www.codexa.net/wp-content/uploads/2018/03/filter-multiple.png" alt="" width="523" height="169" srcset="https://www.codexa.net/wp-content/uploads/2018/03/filter-multiple.png 523w, https://www.codexa.net/wp-content/uploads/2018/03/filter-multiple-300x97.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/filter-multiple-304x98.png 304w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>今度は行インデックス6-20のレンジ内で3等間隔にデータをフィルターしてみました。</p>
<p>次はアヤメの種類が「Iris-setosa」で最初の10行のデータを表示させてみましょう。</p><pre class="crayon-plain-tag"># カラムに値を指定してフィルタリング
Iris[Iris.Species == 'Iris-setosa'][0:10]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1128" src="https://www.codexa.net/wp-content/uploads/2018/03/setosa-filtered.png" alt="" width="523" height="306" srcset="https://www.codexa.net/wp-content/uploads/2018/03/setosa-filtered.png 523w, https://www.codexa.net/wp-content/uploads/2018/03/setosa-filtered-300x176.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/setosa-filtered-304x178.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/setosa-filtered-270x158.png 270w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>次はもっと細かく指定をしてデータを確認してみましょう。Pandasでは、複数のカラムの指定や、さらには条件を指定してフィルターをかけることも可能です。とても便利な機能で、よりデータの詳細部分を確認するのに頻繁に使いますので、これもやってみましょう。</p><pre class="crayon-plain-tag"># 2つのカラム＆条件指定をしてフィルタリング
Iris[(Iris.Species == 'Iris-setosa') &amp; (Iris.SepalLengthCm &gt; 5.5)]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1129" src="https://www.codexa.net/wp-content/uploads/2018/03/cond-filtered.png" alt="" width="528" height="112" srcset="https://www.codexa.net/wp-content/uploads/2018/03/cond-filtered.png 528w, https://www.codexa.net/wp-content/uploads/2018/03/cond-filtered-300x64.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/cond-filtered-304x64.png 304w" sizes="(max-width: 528px) 100vw, 528px" /></p>
<p>こちらは、「Iris-setosa」の「SepalLengthCm」が5.5より小さいデータを表示してみました。このように、特的の条件でどのようなデータがあるのかを把握するのは非常に重要なことです。</p>
<p>最後に「Species」と「SepalLengthCm」のみをフィルターしてみましょう。最初の10行のみを下記のコードでは表示させてます。</p><pre class="crayon-plain-tag"># カラムをSpeciesとSpealLengthCmのみ表示する
Iris[['Species','SepalLengthCm']][0:10]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1130" src="https://www.codexa.net/wp-content/uploads/2018/03/2columns.png" alt="" width="212" height="304" srcset="https://www.codexa.net/wp-content/uploads/2018/03/2columns.png 212w, https://www.codexa.net/wp-content/uploads/2018/03/2columns-209x300.png 209w, https://www.codexa.net/wp-content/uploads/2018/03/2columns-149x214.png 149w, https://www.codexa.net/wp-content/uploads/2018/03/2columns-110x158.png 110w" sizes="(max-width: 212px) 100vw, 212px" /></p>
<p>如何でしたか？ここで紹介したものは初歩的な操作のみですが、データ解析を行う際に頻繁に使われる機能です。全てを覚えるのは非効率ですが、基本的な操作方法を覚えておくと、よりスムーズにデータ解析を行うことができます。</p>
<h3>データフレームの順番の並び替え（ソート）</h3>
<p>次にデータの順番の並び替えも軽く触れておきましょう。常にとは言いませんが、データフレームの並び替えを行う場面も出てきます。機械学習でモデル訓練前にはデータフレームをランダムに並び替えをするのが一般的ですが、データ解析時には上昇順、下降順のような並び替えを行う場合もあります。</p><pre class="crayon-plain-tag"># 並び替え
Iris.sort_values('SepalLengthCm', axis=0, ascending=False)[0:10]</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1131" src="https://www.codexa.net/wp-content/uploads/2018/03/sorting-dataframe.png" alt="" width="532" height="297" srcset="https://www.codexa.net/wp-content/uploads/2018/03/sorting-dataframe.png 532w, https://www.codexa.net/wp-content/uploads/2018/03/sorting-dataframe-300x167.png 300w, https://www.codexa.net/wp-content/uploads/2018/03/sorting-dataframe-304x170.png 304w, https://www.codexa.net/wp-content/uploads/2018/03/sorting-dataframe-283x158.png 283w" sizes="(max-width: 532px) 100vw, 532px" /></p>
<p>こちらは「SepalLengthCM」のカラムの値に対して、下降順で並び替えを行いました。今回のデータは全データで150しかありませんので、あまり並び替えをしても意味を為さないですが、これがもっと大規模なデータになると、一定の条件でフィルターをして、さらに並び替えをするなどの処理を行いながらデータ解析を行うことがあります。</p>
<h3>外れ値の確認</h3>
<p>次はデータフレームの欠損について確認してみましょう。データセット内で<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;null&nbsp;</span>を探す場合は、<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;isnull()&nbsp;</span>の関数が非常に便利です。<span class="su-highlight" style="background:#fce6e6;color:#000000">&nbsp;null&nbsp;</span>とは空白、つまり欠損しているデータの事です。</p>
<p>機械学習で使うアルゴリズムなどのほとんどのケースで、データに欠損があると正常または全く動かすことができません。ですので、モデルの構築をする前にデータセットの欠損を探して、何かしらの値で代入したり、またはそのデータを削除したりする必要があります。</p>
<p>今回のアヤメのデータセットは学術的な利用もされている初歩的なデータセットなので、欠損などはありませんが…実際の仕事などで扱うデータには<strong>欠損が無いのがむしろ珍しい</strong>くらいです。</p>
<p>では、早速例題のデータセットで欠損を確認してみましょう。</p><pre class="crayon-plain-tag"># データフレームの欠損を確認
Iris.isnull().any()</pre><p>
<img loading="lazy" class="aligncenter size-full wp-image-1132" src="https://www.codexa.net/wp-content/uploads/2018/03/null-confirm.png" alt="" width="189" height="102" /></p>
<p>今回のデータセットでは欠損は確認できませんが、一般的には欠損があるのが普通です。欠損が見つかった場合、一番シンプルな処理方法としては、その欠損が含むデータを削除してしまうことです。</p>
<p>ただし、例えば今回のように比較的小さいデータセット（全件150）で、仮に3割に欠損が見つかってしまい、それを全て削除してしまうと、モデル訓練に使えるデータがそれだけ減ってしまう＝最終的な精度に大きな影響が出てしまいますよね。</p>
<p>そのような場合は、近似したデータの平均や中央値などを代入したり、他の計算で代入値を導き出したりします。欠損の扱いに関しては、また後日より詳しい記事でご紹介させて頂ければと思います！</p>
<h3>まとめ</h3>
<p>如何でしたでしょうか？今回は、データサイエンティスト入門として探索的データ解析（EDA）の初歩的な内容をまとめました。</p>
<p>次のステップとして、次はより実践的なデータを触りながら機械学習入門をしてみては如何でしょうか？1時間〜3時間程度で行える初心者向けチュートリアルを公開していますので、是非挑戦してみてください。</p>
<p><span style="text-decoration: underline;"><strong>初心者向けの機械学習入門チュートリアル</strong></span></p>
<p><a href="https://www.codexa.net/kaggle-titanic-beginner/">【Kaggle初心者入門編】タイタニック号で生き残るのは誰？</a><br />
<a href="https://www.codexa.net/amazon-sagemaker-tutorial-marketing-offers/">Amazon SageMakerを使って銀行定期預金の見込み顧客を予測【SageMaker ＋XGBoost 機械学習初心者チュートリアル】</a></p>
<p><span style="text-decoration: underline;"><strong>機械学習をすでに触ったことがある方はこちらもオススメ</strong></span></p>
<p><a href="https://www.codexa.net/cnn-mnist-keras-beginner/">初心者のための畳み込みニューラルネットワーク（MNISTデータセット + Kerasを使ってCNNを構築）</a></p>
<p>以上となります！最後までお付き合いくださいして、ありがとうございます。</p>
<p>codexa機械学習チーム ウィリアム</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codexa.net/basic-exploratory-data-analysis-with-python/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
