今回はプログラミング初心者が独学でPythonを学ぶために準備しておくことについて紹介する。どちらかというと道具というよりはマインド面をメインとする。
これからプログラミングを始めたいがいきなり高額なスクールは嫌だ。小さく始めたいという人は参考にしてほしい。
なお、本記事ではプログラミング・Pythonを学習するメリットを紹介したのちにPythonを学ぶ方法を紹介する。
プログラミングを学習するメリット
まずはプログラミング自体を学習するメリットを紹介する。以下に挙げた内容はプログラミング言語に共通するメリットだ。
- 問題解決能力の向上
- 解決のためにプログラミングを使うから
- アプローチ方法や効率性を考えられる
- 就職・転職に有利に
- 単純にスキルとしてプログラミングができると可能性が広がる
- 日本に足りないと言われるIT人材になれる
- 海外での就職も視野に入りやすい
- 自己表現の手段
- 自分のアイデアを自分の手で表現できる
- 情報収集スキルの向上
- ネット上に溢れる情報から必要なものを選択できる
- 的確な検索ワードを使えるようになる
- 英語のサイトに抵抗がなくなる
抽象的に見えるが、どれもこれからの社会を生きていくために重要なスキルだ。特に最後の情報収取スキルは一般的な日本人では高くないので、プログラミングを学ぶことで差をつけることができるだろう。
Pythonは汎用的なスキルとして使える
数あるプログラミングの中でPythonを学ぶメリットとして挙げられるのが汎用的なスキルを得ることができることだ。
例えばPythonが得意とすることには以下のようなものが挙げられる。
- AI開発
- 機械学習
- Webアプリケーション開発
- デスクトップアプリケーション開発
- IoTシステム開発
- ビックデータ解析
- Webスクレイピング
- IoTプロジェクトでの利用
- システムのログ解析
似たようなものもあるが、広い視点を持つと色々な分野で活躍するさせることができる。要するに汎用性が高いということだ。
広く浅く経験することで色々な分野である程度の知識・技能を持つことができるし、1つの分野に特化させることで他の分野の学習も簡単になる。
必要なライブラリが豊富
また、Pythonにはこれらの高い汎用性に応じて多様なライブラリが用意されている。これらを利用することで比較的簡単に実装することが可能だ。
例えば話題のAIチャットサービスの「ChatGPT」をPython上で実行するためのライブラリもいくつか存在する。
-
【PythonでChatGPT】話題のAI(人工知能)を簡単に試す(Google Colaboratoryもあり)
今回は2022年末にOpenAIがリリースし公開5日程度でユーザー数{ ...
続きを見る
これらのライブラリを活用することで簡単にプログラムを実装することができる。また、汎用的になればなるほどネット上に例文が多くあるので、これらも参考にしやすい。
Pythonはデータ解析にも強い
データ解析については私が大学生の時に学習した内容だから紹介するが、Pythonを使用してデータ解析をすることも簡単にできる。
例えばPythonを使用して大量のCSVファイルを読み込み、これらを1つのグラフに集約させるといったことも行なった。
当時のデータではないが、以下の記事のように短いコードでかなりクオリティの高いグラフを作成できる。
-
【Plotlyで散布図】go.Scatterのグラフの描き方まとめ
これからPloltyで動くグラフを作りたい、もっとグラフをキ ...
続きを見る
-
【Plotly&ボタン】updatemenusとbuttonsでボタン機能を追加
Plotlyはプロットしたデータを動かすことができるのが大き ...
続きを見る
また、私は大学生時代に天文学のデータ解析をしたが、この解析に必要な・便利なライブラリもかなりの数が用意されていた。
これらを組み合わせることで汎用的かつ楽に処理を実装することができる。
Pythonは比較的学習しやすい
Pythonはプログラミング言語の中でも比較的学習しやすい言語と言われている。例えばメジャーなC言語とJavaScript、PHP、そしてPythonで「Hellow, World!」を出力してみると以下のようになる。
#include <stdio.h>
int main(void){
printf("Hello, World!\\n");
return 0;
}
document.writeln('Hello, World!');
<?php
echo ”Hello, World!”;
?>
print("Hello, World!")
JavaScriptとPythonが1行で記述でき、さらにPythonの方が短く記述することができる。このように簡潔にコーディングができるので、初心者でも学習しやすい。
逆に言えばPythonに慣れすぎると他の言語の面倒さについていけなくなるかもしれないが、ここは実践あるのみ。学習初めのハードルを乗り越えればあとは経験と実践で賄える。
プログラミングをする・学ぶ目的を持つ
この目的を持つというのがPythonを学習する方法をしてかなり重要なことだ。私は意識して目的を持ったことはないが、振り返ると当時はちゃんとした目的があったと今になった思う。
はじめに方向を定める
学習のはじめに以下の5つの項目に答えてほしい。簡単なものでもいいが、できれば具体的にステップを分たりリストアップしながら挙げてほしい。
- 何をしたいのか
- なぜ学ぶのか
- 何を使うのか
- 必要なものは揃っているのか
- まずはじめに何を学ぶのか
具体的に私が大学生の研究室時代の内容を記しておく。当時はプログラミングのプの字も知らなかったが、簡単にはリストアップしていた。
- 何をしたいのか
- 1 Enterで5分かかるExcelの処理を効率的にしたい
- 複数のCSVファイルをグラフ化したい
- 作成したグラフを画像形式で保存したい
- なぜ学ぶのか
- データ解析・グラフ化に時間がかかるから
- 効率化できる(らしい)から
- 今後の大学の研究で使える(らしい)から
- 何を使うのか
- MacBook Air 2015
- Python
- 研究室の先輩
- 必要なものは揃っているのか
- PC・環境は研究室に入るときに揃っていた
- まずはじめに何を学ぶのか
- CSVファイルをPythonで読み込む方法
この例ではかなりざっくりと記載したが、本来はマインドマップなどを使って整理する方が見返したときにも振り返りやすいだろう。
とにかく、まずはじめに「目的」を持つことを重視してほしい。
目的がないと挫折しやすい
もちろん目的なしにPythonを学習しても問題ない。初めのうちは。
時間が経つにつれてモチベーションが下がった際にそのまま継続して学習できるかが分かれ道になる。意志力で継続できればいいが、それほど人間は強くない。すぐに挫折する。
目的を持ってその目的に沿ったステップごとの目標をクリアすることで、少しずつ学習してほしい。
目的は途中で変えてもOK
はじめに立てた目的を途中で変えるのはOKだと思う。というのも、はじめに立てた目標がそもそもPythonで実現しづらい可能性もあるからだ。
例えば処理速度が足りなかったり、もっと効率的かつ現場で使用している他の言語があったりなどだ。無理やり実装したところで他にで通用しなければあまり意味がない。
なので、当初の想定が根底から覆るようなことあった場合は軌道修正として目的を変えることは良いと思う。
目的を何度も変えるのはNG
ただし、すぐにできないとレッテルを貼って挫折するのはNG。これを繰り返してしまうと自分の楽な方向へどんどんと進んでしまい、最終的に挫折することになる。
そうならないためにも目的を変える条件はあらかじめ設定しておくと良い。例えば先ほど書いたように、一般的にはPythonが使われないなどだ。
目的を決め、それを達成する目標を確実にこなすことで、着実にあなたのスキルは向上するだろう。
目的がない時は課題を見つける
どうしても目的が見つからない・とりあえず学びたいと思うなら、日常生活にある課題を解決することを考えてほしい。
仕事の本質は誰かの課題を解決すること。これを自分にも当てはめるのだ。例えば以下。
- Excelのデータ分析で楽をしたい
- 毎日するルーティンを自動化したい
- ツイートの分析がしたい
日常生活にある「面倒」「楽をしたい」「効率的にならないかな」といったことをきっかけにPythonを学習することもおすすめだ。
1つ1つの内容は小さくすぐに完了するかもしれないが、これを積み重ねることで知識やスキルを身につけることができる。
必要に迫られるようにする
どうしてもモチベーションが下がりそう、という人は何か必要に迫られるようにするというのも1つの手だ。難しいかもしれないができる人は使ってほしい。
例えば以下のようなものが挙げられるだろう。
- プログラミングができないと卒業できない
- 学校の課題で必要
- 毎月○日のデータ取得日までに完成させたい
学生の例がわかりやすいし私も実際に大学に卒業するにはPythonが必要だったので学習した。
締め切りがない状態の独学では確実にモチベーションは下がってしまう。自分に裁量権があったとしても、締め切りを作成することは学習の大きな助けになる。
質問できる環境があることを知る
独学でYouTubeや書籍、このサイトを参考にしながら学習すると、いずれどこかでつまづくことがある。その時に自分で調べて解決できない場合は以下のような質問サイトを使うと良い。
自分の凝り固まった・知識不足な頭で考えても答えは出ない。他人に聞くことで一瞬で解決することも多々ある。
Yahoo!知恵袋
国内最大級の質問サイトで知っている人・使ったことがある人も多いだろう。メリット・デメリットは以下。
メリット
- 気軽に聞ける
- あらゆる質問が可能
デメリット
- コードブロックがないので見づらい
- エンジニア以外もよく見るので正確性に乏しい
- プログラミング以外の質問も多いので埋もれがち
特にコードブロックがなくコードがただの文字列で表示されるので、そのままだとかなり見づらいのが難点。スッと理解できず、毎回エディタにコピペする手間になる。
ただ、質問のハードルが一番低いので一度チャレンジしてもいいだろう。
teratail
ITエンジニアに特化した質問サイトで、回答率は85%をキープすることがほとんど。大体のプログラミング系の質問を解決できるのでおすすめだ。
メリット
- エンジニア専門サイト
- コードブロックや質問テンプレートあり
- 解答率が高め
デメリット
- 問題点やエラー文などをちゃんと送らないと指摘される
- たまに口調が強い人がいる
当たり前だが質問する際には専門的すぎる内容は抽象的に落とし込む必要がある。例えば以下のような質問は噛み砕いたほうがいいだろう。
「天文学の2D画像を作成→2次元配列をヒートマップにする」
また、調べればすぐに解決方法が見つかることも多々あるので「どこまで調べ」「何でつまづいているのか」を明確にした方がいい。
Qiita
メインはエンジニアの情報共有サイトなので質問機能としてはマイナーだ。なのでQiitaで質問するというよりもQiitaを活用して自分で問題を解決するといった方が有効だ。
また、個人の発信も多数ありかなりニッチな内容や同じ内容でも個々人で全く異なるアプローチもあるので、学習にはもってこいだ。
メリット
- あらゆる情報が載っている
- ニッチな方法も載っている
- 自己解決に最適
デメリット
- 一般人の投稿ではまとまっていないことも
- 質問機能はメジャーではない
Stack Overflow
Stack Overflowは英語のプログラミング質問サイトだ。英語が主体なので質問数は上で紹介したものとは桁違いの多く、回答数も桁違いだ。
英語が主体になるので英語で質問することになりハードルが高い。ただしQiita同様、情報収集としては情報量が多いのでかなりおすすめだ。
実際の質問に対する回答なので、問題に直面したときの自分に照らし合わせることもできる。
メリット
- 質問数・回答数・情報量が桁違い
- 質問サイトなので自分に照らし合わせられる
- 大手なので質問したら回答も多く来る
デメリット
- 英語で質問する必要がある
- 日本特有のローカルソフトウェアの質問には弱い
なお、日本語版のスタック・オーバーフローもあるが、こちらを参照するよりはteratailの方が質問しやすく回答も得られやすいような気がする。
SAMURAI TERAKOYA:オンラインスクール
SAMURAI TERAKOYAはサブスク型のプログラミングスクールで、独学に近い形態のスクールだ。独学に近いもののQ&A掲示板でいつでも相談・質問が可能でオンラインレッスンもできるので悩みを解決しやすい。
また、なんといっても月額¥2,980〜利用可能と、かなりリーズナブルな価格で受講できるのも魅力的だ。
独学に近いので自分の力で解決する力が求められるが、挑戦したい人やすでに言語を学習し、他の言語を新たに学びたい人におすすめだ。
SAMURAI TERAKOYAがおすすめな人
- 低価格で学習したい
- 自分の力で解決したい
- だが、質問・相談は気軽にしたい
- オンラインレッスンも受けたい
SAMURAI TERAKOYAは私もお世話になっているサイト「SAMURAI ENGINEER Blog」と同じ運営元なので、この点も安心材料となるだろう。
PyQ:Python特化の学習サイト
PyQはPythonに特化したプラットフォームで、こちらもプログラミングスクールというよりは独学に近いが一応現役のエンジニアが質問に答えてくれるので紹介する。
独学に近いということもあり価格はかなり抑えめで高いほうの「スタンダードプラン」でも¥8,130/月と破格。もはや1万円を切っている。
他の言語よりPythonを重点的に学びたいけど費用を抑えたい人におすすめだ。
PyQがおすすめな人
- Python特化で学びたい
- 独学寄りの学習がしたい
- でも質問は気軽にしたい
- 費用は抑えめで
入門コンテンツを無料で試せるので、一度お試ししてからプランに入るのも1つの手だ。
とにかく書いて実践する
一番重要なのはとにかくコードを書いて実践することだ。頭の中で延々と考えても前には進めない。実際にコードを書いて動かしてみないと実際の動作はわからない。
実は自分が思っていない場所でエラーになるかもしれない。想定外のエラーが起きるかもしれない。脳内で完結させず、とにかく実践あるのみだ。
ファーストステップに最適なコード例
とりあえず手を出してから目的を決めよう、という方は以下のコードを実行してほしい。時にエラーが出るかもしれないが、その時はエラー内容をコピーし検索してほしい。
自分で検索して原因を知り、解決することで着実に成長できるはずだ。
以下のコードはGoogle Colaboratoryを利用することで環境構築なしで実践できる。ぜひ試してほしい。
四則演算
まずは四則演算から。単純に見える四則演算でも整数と小数の違いや掛け算の書き方など、色々と考える部分は多い。
a = 3
b = 2
# 足し算
c = a + b
print(c)
# 引き算
d = a - b
print(d)
# 掛け算
e = a * b
print(e)
# 累乗
f = a ** b
print(f)
# 割り算
g = a / b
print(g)
# 切り捨ての割り算(Python3系)
h = a // b
print(h)
forループ
プログラミングでは同じ処理を繰り返すコードがある。そのうちの1つがこのfor
ループだ。これを使うことでコードを短く書くことができる。
以下ではtuple
配列のarr
をfor
ループで順番に出力している。tuple
や配列などの語句を調べるとさらに理解が深まる。
arr = (1, 2, 3, 5, 7)
for i in arr:
print(i)
if
の条件分岐
ある条件下でのみ処理をするのがif文で、これを使うことでもコードを短く実装することが可能だ。
以下の例では変数j
, k
が1
かどうかを判定している。
j = 2
k = 1
if j == 1:
print('jの値は1です')
if k == 1:
print('kの値は1です')
CSVファイルの読み込み
私がPythonを学んだ際にはじめにしたのがこのCSVファイルの読み込みだ。今思うとハードルの高いものからチャレンジしたが、これをクリアすればできることがかなり広がる。
ただし、CSVファイルの読み込みではエンコードやファイルの中身の形式によってはエラーが頻発することも多いので、エラーが出たらその都度調べて解決してほしい。
以下の例ではnumpy
とpandas
という2種類のライブラリを使用してそれぞれファイルを読み込んでみた。自分が理解しやすい方から使ってほしい。
example.csv
x | y |
---|---|
0 | 1 |
1 | 2 |
2 | 5 |
3 | 3 |
3 | 8 |
import numpy as np
import pandas as pd
csv_np = np.loadtxt('example.csv', delimiter=',', skiprows=1)
print(csv_np)
# [[0. 1.]
# [1. 2.]
# [2. 4.]
# [3. 3.]
# [4. 8.]]
csv_pd = pd.read_csv('example.csv')
print(csv_pd)
# x y
# 0 0 1
# 1 1 2
# 2 2 4
# 3 3 3
# 4 4 8
2Dグラフの作成
最後に読み込んだcsvファイルをグラフ化してみる。グラフ化の方法も多数あるが、ここではメジャーなmatplotlib.pyplot
を使用する。
numpy
, pandas
それぞれの方法を紹介するが、以下の方法以外の方法も多数存在する。調べる中でわかりやすいと感じるものから実践してほしい。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# numpyを使用する方法
csv_np = np.loadtxt('example.csv', delimiter=',', skiprows=1)
x = csv_np[:, 0]
y = csv_np[:, 1]
fig, ax = plt.subplots(1, 1)
ax.set_xlabel('x')
ax.plot(x, y, label='y')
ax.legend()
fig.savefig('numpy_csv.png')
# pandasを使用する方法
csv_pd = pd.read_csv('example.csv')
csv_pd.plot(x='x', y='y')
plt.savefig('pandas_csv')
まずは目的を持って挑戦する
今回はプログラミング初心者がPythonを学ぶために準備することを紹介した。準備せずともプログラミングを学ぶことは可能だ。しかしこれは非効率。
より効率的に学習するためにも本記事の内容を念頭に、プログラミングを学ぶ準備を進めてほしい。
なお、以下の記事では社会人がプログラミングを独学で学ぶことができるのかについて考察してみた。すでに社会人の人・これから社会人になる人はご覧いただきたい。
-
【Pythonを独学】社会人が1人で学習できるのか。結論、学べるが...
今回は社会人がプログラミング言語「Python」を独学で学習 ...
続きを見る
このサイトでは初心者でもPython、とりわけグラフ作成の特化したライブラリPlotly
を中心に紹介している。他の記事も参考にしてほしい。