カテゴリー

当サイトはアフィリエイトプログラムによる収益を得ています〈景品表示法に基づく表記です)

Python基礎

【python&独学】独学である程度pythonを習得するマインド

2021年5月14日

こんな人にオススメ

pythonを新しく独学で学習したい。でもどういう考え方で進めていったらいいの?

わからない単語が出てきたら挫折しそう...

ということで、今回は執筆者が考える、独学でpythonをある程度出来るために考えていることについてお話する。まずはこれを勉強しましょうとかこの本がおすすめ、といったことではなく、あくまでもマインドの部分なのでそこは予めご了承ください。

運営者のメガネです。YouTubeTwitterInstagramも運営中。自己紹介お問い合わせページあります。

運営者メガネ

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でグラフを静止画として保存する際に出るポップアップ
【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'

ここではstrintという単語がわからないとしよう。ここで悶々となんだろうと考えても時間の無駄。さっさと調べるのがいい。調べる際には例えば

python strとは

というように初めに「python」とつけるのが必須。そうしないと他の言語のstrがあればその結果も出てきてしまうから。もちろん最後にpythonと入れてもいいが、検索単語の順番は検索結果に影響を及ぼすのでその点には注意しよう。ちなみにstrは文字列という意味。

エラーコードで調べる

先程のa = np.arange("10")のエラーでstrintを調べたけど結局何がいけなかったのかわからないときは、エラーコード自体で調べるのが大切。例えば上の例だと、

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]}

dct1dct2も同じように辞書型の配列の書き方。それでも書き方が異なれば見た目も変わる。また、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

続きを見る

ガジェット

2023/9/18

【デスクツアー2022下半期】モノは少なく、でも効率的に Desk Updating #0

今回はガジェットブロガーなのにデスク環境を構築していない執筆者の ...

ライフハック

2023/9/16

【Audible vs YouTube Premium】耳で聴く音声学習コンテンツを比較

ワイヤレスイヤホンが普及し耳で学習することへのハードルが格段に下 ...

完全ワイヤレスイヤホン(TWS)

2023/9/18

【SENNHEISER MOMENTUM True Wireless 3レビュー】全てが整ったイヤホン

今回は高音質・高機能なSENNHEISERのフラグシップ完全ワイヤレスイヤホン「SENNH ...

ライフハック

2023/3/11

【YouTube Premiumとは】メリットしかないから全員入れ

今回はYouTube Premiumを実際に使ってみてどうなのか、どんなメリット/デメリット ...

マウス

2023/8/17

【Logicool MX ERGOレビュー】疲れない作業効率重視トラックボールマウス

こんな人におすすめ トラックボールマウスの王道Logicool MX ERGOが気になるけどऩ ...

ベストバイ

2023/9/18

【ベストバイ2022】今年買って良かったモノのトップ10

2022年ベストバイ この1年を振り返って執筆者は何を買ったのか。ガジェッ& ...

スマホ

2023/1/15

【楽天モバイル×povo2.0の併用】月1,000円の保険付きデュアルSIM運用

こんな人におすすめ 楽天モバイルとpovo2.0のデュアルSIM運用って実際のとこ ...

マウス

2023/9/16

【Logicool MX ERGO vs MX Master 3】ERGOをメインにした決定的な理由

こんな疑問・お悩みを持っている人におすすめ 執筆者はLogicoolのハイエンӠ ...

macOSアプリケーション

2022/9/30

【Chrome拡張機能】便利で効率的に作業できるおすすめの拡張機能を18個紹介する

こんな人におすすめ Chromeの拡張機能を入れたいけど、調べても同じような ...

macOSアプリケーション

2023/5/3

【Automator活用術】Macで生産性を上げる作業の自動化術

今回はMacに標準でインストールされているアプリ「Automator」を使ってできる ...

Pythonを学びたいけど独学できる時間なんてない人へのすゝめ

執筆者は大学の研究室・大学院にて独学でPythonを習得した。

でも社会人になったら独学で行うには時間も体力もなくて大変だ。

時間がない社会人だからこそプロの教えを乞うのが効率的。

ここでは色んなタイプに合ったプログラミングスクールの紹介をする。

  • この記事を書いた人

メガネ

Webエンジニア駆け出し。独学のPythonで天文学系の大学院を修了。常時金欠のガジェット好きでM2 Pro MacBook Pro(30万円) x Galaxy S22 Ultra(17万円)使いの狂人。自己紹介と半生→変わって楽しいの繰り返しレビュー依頼など→お問い合わせ運営者情報、TwitterX@m_ten_pa、 YouTube@megatenpa、 Threads@megatenpa

-Python基礎
-,