こんな人にオススメ
pythonを新しく独学で学習したい。でもどういう考え方で進めていったらいいの?
わからない単語が出てきたら挫折しそう...
ということで、今回は執筆者が考える、独学でpythonをある程度出来るために考えていることについてお話する。まずはこれを勉強しましょうとかこの本がおすすめ、といったことではなく、あくまでもマインドの部分なのでそこは予めご了承ください。
pythonとは
「python」とはご存知の通りプログラミング言語の一つ。執筆者自身、python以外をろくに触ったことがないが、それでもpythonの文法は簡単だと思う。
例えばC言語で「Hello, World!
」という文字(言葉)を出力するには以下のコードを書く。
#include <stdio.h> int main(void){ printf("Hello, World!\\n"); return 0; }
Javaでは以下。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
JavaScriptでは以下。
document.writeln('Hello, World!');
一方でpythonでは以下。
print("Hello, World!")
圧倒的にpythonの方が簡単に書くことができる。その分pythonは動作が重かったりするが...
pythonと相性がいいもの
pythonと相性がいいものとして以下のようなものが挙げられる。
- 機械学習
- ディープラーニング
- 人工知能(AI)
- ゲーム・アプリケーション
- 自動データ処理
- Webスクレイピング
- ブロックチェーン
- データ処理・分析
などなど。イメージしやすいのが人工知能関連でpythonが覇権を握っている。執筆者自身としては最後のデータ処理・分析くらいしかできないが、それでも大量のデータをすぐに処理できるのでとても楽ができる。
例えば500行500列のExcelファイルを5ファイル用意し、全データのそれぞれのセルの平均をとって2次元化というときもExcelだとフリーズしかねないところをpythonだとものの数秒で終わらせてくれる。
pythonは今伸びている
オランダの会社「TIOBE Software」が発表した、プログラミング言語の人気を示すランキング「TIOBE Index」では、2021年5月時点でpythonは2位にランクイン。1位はC言語で3位はJava言語という結果となった。しかし、見てほしいのはpythonの伸びだ。
順調に人気を伸ばしていて2020年末にはJavaを超えた。他の言語も伸びているのかというとそういうわけではなく、例えば現状1位のCは減少傾向にある。色がpythonと同じだが、タイトルで判断していただければと思う。
3位のJavaも同様に減少傾向にある。
pythonの年収はまあまあ?
IT、テクノロジー人材のためのコミュニティ「TECH Street(テックストリート)」の発表した「2020年プログラミング言語別、年代別の平均年収ランキング」によれば、pythonは20, 30, 40, 50歳での年収は調査対象プログラミング言語の中では上位側に位置している。
しかし、劇的に上かといえばそういうことではない。ただ、先ほども書いたがpythonは伸びているし、世界的にも人材を欲しているようなので年収は伸びていくと思われる。
まあこのグラフは大雑把だ。
環境を整える
さて、ここからはpythonの独学について個人的に考えていたことを書いていく。
まずは環境を整えるところから。既に整えている方はすっ飛ばして構わない。
自分のPCのOSを知る
まずはpythonを動かしたい自分のPCのOSを知ることから始めた。なぜならコードのエラーを調べる時に困るから。
例えばMacではWindowsで言うが¥
マークの代わりにバックスラッシュ\
を使用したり、コマンドプロンプトではなくターミナルを使うなどの違いがある。
設定画面やPC名からすぐ分かるし、ロゴだけでも分かるかもしれない。ここではMacOSについて解説する。
(Macの場合)IntelかApple Siliconか
最新のMacbookはCPUが搭載されているかSoCが搭載されているかが異なる。
Macの画面の左上のリンゴマークから確認することが出来る。執筆者はM1でApple Silicon。
このIntelかApple Silicon問題は、pythonの入れ方に関わってくる。今はApple SiliconのMac発売からだいぶと時間が経ったから情報が多く出ているが、pythonのインストールでサイトで調べる時は、ここに注意しよう。
環境構築
pythonを使うための環境構築として基本的に必要なは以下のものがある。
- python本体(python2かpython3)
- エディタ(執筆者はVisual Studio Code)
- 起動させるやつ(執筆者はターミナル。Visual Studio Code内臓のものも使う)
python本体についてだが、例えばExcelを動かしたい時はExcelアプリを入れなくてはいけない。それと同じようにpythonも入れないといけない。まあ、pythonというアプリをクリックして起動してコードを...ということはせず、次のエディタにコードを書いて実行。その時に裏で勝手に動いているので実質的には入れたら終わり。
これについては上に書いたようにOSなどを注意しながら情報収集して入れてほしい。
エディタについては、コードを実際に書くために用意する。次に書く、「起動させるやつ」に直接書いても動くが記録が残せなかったり(出力の保存はできるが)、コードの文法(定数とか文字列とか)に色をつけてくれなかったり、入力補完をしてくれなかったりする。したがって、できるだけ色々な機能のついているエディタを用意するのが懸命だろう。
執筆者はMicrosoftが開発している「Visual Studio Code」を使用している。これはメジャーであり使いやすいのでおすすめ。カスタムもしやすく、色々なサイトがあるので問題が出てきた時にはすぐに解決しやすい。
最後に起動させるやつ、だが、これは単に名前がわからなかったからこう書いた。エディタでコードを書いてもそれはただ単に書いただけ。実際にはそれを動かすための命令を我々が下さないといけない。基本的にはMac標準の「ターミナル」を使用すればいい。
違う方法としては「Jupyter notebook」その派生系の「Jupyter lab」、Googleが提供するJupyter形式の「Google Colaboratory」そしてVisual Studio Codeに内蔵されているターミナルを使用する方法などがある。どれでコードを動かしても結果は変わらないので好みのものもを選べばいい。
他にも場合によっては必要になるアプリがあるが、それは使う時に入れたらいいと思う。例えば執筆者のよく使うpythonのライブラリ(ツール的な)plotly
で静止画を保存する際には「orca
」というアプリが必要になる。このplotly
の静止画保存の激闘については以下参照。
-
-
【plotly&orca】plotlyで静止画保存(orca)
続きを見る
とにかく調べる
環境設定が終わり、はじめの一歩「Hello World
」をprint
(出力のこと)出来たらプログラミングの世界のようこそだが、何かコードを書いて実行するたびにエラーが吐かれる。ここでは執筆者が独学で成長してきた際に学んだことについて書く。
どこでエラーが起きているのかを知る
まずエラーが吐かれたら時にはどこでエラーが吐かれているのかを知ろう。複雑なコードになればなるほど見つけにくかったり、関数の設計段階のコードに導かれたりすることもあるが、初めは自分のコードのどこでエラーが吐かれているのかを知る。例えば以下のコード。
import numpy as np a = np.arange(10) print(1) print(a1)
出力は以下。
# print(a1) # NameError: name 'a1' is not defined
明らかにprint(a1)
がエラーの原因であるとわかる。このエラー部分を見ずに「全然出来ない、どこがエラーかわからない」と嘆かないでほしい。そこに書いている。ここではa1
という変数が定義されていないというエラーだ。a
という変数は定義したがa1
は定義していないのでこう出る。
わからない単語を調べる
上で示した例のようにわかりやすいものであればすぐに対処できるが、以下の例のように知らない単語が出てきた場合は悶々と頭を抱えるだけ時間の無駄。
a = np.arange("10") # a = np.arange("10") # TypeError: unsupported operand type(s) for -: 'str' and 'int'
ここではstr
やint
という単語がわからないとしよう。ここで悶々となんだろうと考えても時間の無駄。さっさと調べるのがいい。調べる際には例えば
python strとは
というように初めに「python」とつけるのが必須。そうしないと他の言語のstr
があればその結果も出てきてしまうから。もちろん最後にpythonと入れてもいいが、検索単語の順番は検索結果に影響を及ぼすのでその点には注意しよう。ちなみにstr
は文字列という意味。
エラーコードで調べる
先程のa = np.arange("10")
のエラーでstr
とint
を調べたけど結局何がいけなかったのかわからないときは、エラーコード自体で調べるのが大切。例えば上の例だと、
TypeError: unsupported operand type(s) for -: 'str' and 'int'
とそのまんま調べる。そうすると多くの検索結果が出てくる。ここでビビるのが、ほとんどの検索結果が英語であるということ。そりゃ世界的に見れば日本語なんて少数民族なんだから仕方がない。ただ翻訳機能やコード部分を見れば大体何が言いたいのかがわかる。
今回の問題だとstr
を入れるとダメっぽいということがわかる。ということで"10"
の部分を10
に置き換えるとすんなりとコードが通る。
また、検索時には似たような検索結果も多数表示されるので、
"TypeError: unsupported operand type(s) for -: 'str' and 'int'"
ダブルクォーテーションでくくると検索時にこの検索単語に完全一致した結果のみが表示される。
トライ&エラー
エラーが吐かれて調べるがそれでも解決しないとき。新しい内容(例えばlist
とかfor
とか)を学ぶとき。まずはトライ&エラーをしよう。
エラーが吐かれまくる
エラーを修正してもどんどんエラーが出る場合は、まずエラーコードを見る。原因を見つけ修正する。それでも他の部分でエラーが出るなら、原因を見つけて修正するのサイクルを根気よく繰り返すしかない。
その時に重要なのは根本原因をしっかりと頭に入れておくこと。毎回毎回調べるようでは時間の無駄。完全に全文覚える必要はないと思うが、エラーのある程度の意味は覚えておくほうがいい。
新しい内容を学ぶ
新しい書き方や文法などを学ぶ際には、まずはサイトや本の内容を全部コピペする。そして動かしてみる。そうすれば何かしらのエラーや出力が出てくる。それから何が起きているのかを考える。
もちろんシステムにダメージを与えたり、下手に画像が保存されるコードが書かれているのであれば慎重になったり、保存部分だけコメントアウトしたりする必要はある。
それでもまずはトライ&エラーの精神で色々と試してみる。試さずに頭の中で考えてもなかなか進まない。まずは行動、コーディング。
違う書き方を学ぶ
ある程度書き方がわかって色々なコードを書いて慣れたら、次は違う書き方にチャレンジしてみる。例えば以下の例。
dct1 = {'a': 10, 'b': 20, 'c': [1, 2, 3]} dct2 = dict(a=10, b=20, c=[1, 2, 3]) print(dct1) # {'a': 10, 'b': 20, 'c': [1, 2, 3]} print(dct2) # {'a': 10, 'b': 20, 'c': [1, 2, 3]}
dct1
もdct2
も同じように辞書型の配列の書き方。それでも書き方が異なれば見た目も変わる。また、dct1
では可能な書き方がdct2
での書き方では許されない場合もある。
dct3 = {1: 10} print(dct3) # {1: 10} dct4 = dict(1=10) # dct4 = dict(1=10) # ^ # SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
この例だと、dct3
ではkeys
として1
を指定できるがdct4
では指定できない。dict()
では文字列かつ一続きの単語(keys1
とかkeeeey
とか。keys 1
とか空白はだめ)しかkeys
に指定できない。
このように色々な書き方を学ぶことで新たな発見があったりもっと早く動かしたりもできるので、調べてみると良いだろう。
見やすさを考える
最後に見やすさ。自分の独りよがりにコードを書いたとしても構造がわかりにくかったり、他の人や未来の自分が見てわからなかったら意味がない。その場限りのコードではなく、いつでも利用可能なコードを作成しよう。
例えば以下のコード。
dct_ng = {'a': {'A1': 10, 'A2': [1, 2, 3, 4, 5]}, 'b': 20, 'c': [1, 2, 3], 'd': dict(d1=10, d2='ddd')} dct_ok = { 'a': { 'A1': 10, 'A2': [1, 2, 3, 4, 5] }, 'b': 20, 'c': [1, 2, 3], 'd': dict( d1=10, d2='ddd' ) }
このdct_ng
だと1行に全ての内容を詰め込んでいる。これだと読みにくいし、ネスト(入れ子)の構造もわかりにくい。さらに、PEP8というpythonの規約にも反する文字数だ。
PEP8については以下参照。
-
-
【PEP8&flake8】pythonにおけるPEP8とflake8
続きを見る
一方でdct_ok
ではdict
を改行して要素ごとに並列に並べている。こうすることでどの要素がどの要素と同じ階層に存在するのかがわかりやすい。
このように、見やすさを考えると構造がわかりやすかったり、他の人、未来の自分が見てもわかりやすくなる.
pythonから始まるプログラミング
個人的にはpythonは簡単な部類のプログラミング言語と思っている。本当に苦手意識があるならまずはpythonを学んで、ある程度構造が分かれば他の言語にも手を出して見てはいかがだろうか。
簡単にでもプログラミングを学ぶことは今の時代、考え方や話を繋げるためにも必須なのかなと思う。
関連記事
-
-
【PEP8&flake8】pythonにおけるPEP8とflake8
続きを見る