こんにちは、ゆーたろーです
私は、大手化学メーカー研究開発職から、機械学習エンジニアに転職した、異例の経歴を持っています!
そして、スクールなどにも通わず、プログラミングを独学で勉強しています
プログラミングを独学で勉強するのは難しいですよね
ネットや書籍にはたくさんの教材がありますが、正直どこから手をつければ良いのかもわかりません
私も、一つ前に進むたびにつまづき、ネットで調べて…の繰り返しです
そして、ネットでいろいろと調べているうちに、プログラミングに精通した人が作成した解説記事はたくさんヒットしますが、私のように何もわからないところからはじめ、超初心者目線で解説している記事は意外と少ないことがわかりました
ですので今回、私のように独学でプログラミング学習を進めている人に向けて、私が実際に使っている教材を紹介しつつ、それらを使った勉強の過程を、超初心者目線で解説していこうと思います
独学で勉強しているやつもいるんだな、と軽い気持ちでみていただければと思います(笑)
もし同じように独学で勉強している人がいれば、共感したり、コメントなどいただけると嬉しいです!
目次
独学でデータサイエンティストを目指すならこの教材から
独学でデータサイエンティストや機械学習エンジニアを目指すなら、まずはUdemyで下記の教材を受講することをお勧めします!
『【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座』
実際に私も受講しました!
動画形式のレッスンですので、書籍を読むよりも楽しく勉強ができます
そして、実際に手を動かしてコードを書く練習にもなります
初心者のうちは、いろいろな教材に手を出すよりも、まずこの教材を十分に理解できるまで繰り返すのが良いと思います!
まずはこの教材について、何回かにわたって、超初心者の私がつまづいたところなどを記事にしていきます
今回は、データ処理の大前提である、ライブラリの読み込みについてです
(見出しの()内の数字は、教材中のレッスン動画の番号を意味しています)
必要なライブラリを読み込む(28)
まず、データを扱うにあたり、はじめに必ず行う作業があります
それは、必要なライブラリの読み込みです
レッスン動画では、下記のように、’import’を使用してさまざまなライブラリを読み込んでいました
import glob
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
- import〜:「〜を読み込み」
- import〜as…:「〜を…として読み込み」
という意味らしいですね
…を指定することで、以後、…としてそのライブラリが使えるようになります
たとえば今回の場合、いちいち’pandas’と入力しなくても、’pd’と入力するだけでpandasを使用することができるようになります
これはやらなくても使用上は問題ないですが、入力が楽ですし、コードが見やすくなりますし、業界のデフォルトになっているようです
たぶん、これらのコードを暗記する必要はないと思います
おそらく毎回といっていいほど使うので、自然と覚えていくのだと思います
初心者の疑問①:ライブラリを読み込むとは?
初心者の私は、ライブラリとは何なのかすらわかりませんでした(笑)
ライブラリとは、便利なプログラムをひとまとめにした、まさに図書館のようなものです
ライブラリの中の便利なプログラムを使うことで、大量かつ複雑なデータの加工や解析を、初心者でも簡単に行うことができます
どんなライブラリがあるのかもわからなかったので、ひとまず今回登場したライブラリについてまとめました
ライブラリ(モジュール)名 | 特徴 | 略記例 |
---|---|---|
glob | 特定のファイルをまとめて取得 | – |
pandas | 多次元配列以外の数値計算も行う万能型 データの入出力や加工なども行える | pd |
numpy | 多次元配列を扱う数値計算に特化 数値計算の高速化、効率化 | np |
matplotlib.pyplot | データ分析結果の可視化(グラフの描画) | plt |
seaborn | ‘matplotlib’で得られるグラフをより美しく加工する | sns |
たしかに、多次元配列の計算やら、データ分析結果の可視化やら、一からコードを書きながら行っていては、かなりの時間がかかりそうですよね
ライブラリ、かなりありがたいです
初心者の疑問②:’glob’とは?
初心者の私は、’glob’の意味がわからず、ここでもつまずきました(笑)
‘glob’はライブラリではなく、モジュールと呼ばれるみたいです
データ処理の利便性を高めるといった観点では、ライブラリと似たようなものです
‘glob’を使うことで、特定のファイルをまとめて取得できるみたいです
(参考:https://www.tech-teacher.jp/blog/python-glob/)
レッスン動画では、trainファイルに格納された47個のcsvファイルを一括で取得する際に、この’glob’を使用していました
files = glob.glob(“train/*.csv”)
確かに47個を一つずつ取得するのに、47行ものコードを書いていては大変ですよね
‘glob’も、かなりありがたいです
初心者の疑問③:クラス、モジュール、パッケージ、ライブラリとは?
ここまできて、ライブラリとは別に、クラスやモジュール、パッケージと呼ばれるものもあることがわかりました
そして、その違いがわからずにつまづきました(笑)
クラス、モジュール、パッケージ、ライブラリの関係については、下の図がもっともわかりやすかったです
要は、包含関係にあるだけで、便利なプログラムという点では同じのようですね
たとえば、’numpy’モジュールの中には、’numpy.ndarray’と呼ばれるクラスがあります
この場合、’numpy’を読み込んでから’np.array’として実行することもできますし
import numpy as np
np.array([0,1,2])
‘numpy’から’array’を読み込んでおき、’array’として実行することもできます
from numpy import array
array([0,1,2])
クラス、モジュール、パッケージ、ライブラリは暗記する必要はありませんが、位置関係を把握しておくことで、データの扱いのバリエーションが広がりそうです
初心者の疑問④:’matplotlib’と’seaborn’の違いは?
‘matplotlib’を使用することで、データの可視化(グラフ化)ができるらしいです
さらに、‘seaborn’を使用することで、そのグラフをより美しく描画できるようです
結構違いますね
資料をつくるなら、右のほうが見栄えが良さそうです
ここで私は、’seaborn’でより綺麗なグラフを作れるなら、’matplotlib’を使いこなす理由はあるのか?、という、いかにも初心者的な疑問を持ちました(笑)
調べてみると、’seaborn’で事足りるのも事実ですが、’matplotlib’のほうが事例が多く調べやすかったり、簡単なグラフ作成は楽だったりと、‘matplotlib’を使用するメリットもあるようです
(参考:https://qiita.com/alchemist/items/544d45480ce9c1ca2c16, https://code-graffiti.com/seaborn-introduction-in-python/#toc3)
ここら辺は実際に使ってみないとわからないところだと思うので、これから勉強が必要そうです
初心者の疑問⑤:’%matplotlib inline‘とは?
ライブラリの読み込みと一緒に記述されている、’%matplotlib inline’についてもよくわかりません
先頭に’%’がつくものを、マジックコマンドと呼ぶらしいです
レッスン動画では、「jupyter lab上で’matplotlib’を動かすために必要」との説明がありました
そこで実際に、’%matplotlib inline’を記述しなかった場合と、記述した場合とで、どんな結果が返ってくるのか試してみました
‘%matplotlib’を記述しなかった場合 ‘%matplotlib’を記述した場合
あれ、’%matplotlib inline’を記述しなくても、グラフが描画できました
というか、どちらもほぼ同じ結果になりました
‘%matplotlib inline’を記述すると、グラフ上の文字列が削除されるという記事も見かけましたが、消えませんでした
いろいろと調べてみましたが、私には明確な答えは見つけられませんでした
とにかく、jupyter notebook環境を使用する場合は、‘%matplotlib inline’が必須らしいです
jupyter notebookもjupyter labも本質は同じと捉えていたのですが、間違っているのでしょうか
(参考:https://stackoverflow.com/questions/39449549/python-syntaxerror-invalid-syntax-matplotlib-inline/39449990, https://docs.pyq.jp/python/pydata/jupyter/matplotlib.html)
とにかく、‘matplotlib’でグラフを描画できない時は、‘%matplotlib inline’を記述してみるのが、第一の解決法かもしれませんね
おわりに
今回は長くなってしまったので、ここでおわりにします
次回は、ファイルの読み込みから、データの全体像の確認などについて解説したいと思います
私と同じような、超初心者の方々に参考になれば嬉しいです!