Pythonで最初に知っておきたかったことのまとめ【初心者向け】

f:id:karaage:20171225113630p:plain:w480

Pythonで最初に知っておきたかったこと

 最近、PC(Mac/Linux)やRaspberry PiでPythonを使ってプログラムを組むことが多くなってきました。長く使っていると、多少はPythonのことが分かってきて、色々便利な機能なども知ることができます。その中でも「これ、もっと早くに知りたかった…」というものが結構あったりするので、一度そういったものをまとめて紹介しようと思います。

 Pythonをこれから始める初心者の方の参考になればよいなと思います。環境はMac/Linux(Raspberry Pi)を想定していますが、それ以外の環境の方でも参考になるかとは思います。

環境セットアップ

 最初は環境構築です。PC(Mac/Linux)だと、仮想環境を使うのを個人的にはオススメします。以下記事参照下さい。

 「俺はとにかくPythonで機械学習をやりたいんだー!」という人は、下記の記事の通りコピペしていけば、比較的簡単に機械学習に必要な環境を揃えられると思います。

 Windowsに関しては、手元に環境がないので詳しく分からないです(申し訳ありません)。以下のサイトの記事とかが分かりやすくて参考になるかもしれません。

WindowsでPythonを使って『機械学習』を学ぶための環境構築 — blog ドキュメント

 仮想環境に関しては、後から導入しても問題ないので、最初よく分からなければ、デフォルトの環境でやってみて、慣れてから仮想環境を導入という形でもよいとは思います。

 Raspberry Piの場合は、仮想環境は使わずSDカード毎に個々の環境を作ることにしています。Raspberry Piでのセットアップに関しては、以下記事などが参照になるかと思います。

 どうしても環境構築が難しい、時間が無いという方は、Google ColaboratoryというGoogleの無料のクラウドサービスを使用する方法もあります。詳しくは以下参照下さい。

エディタ

 使用するエディタは基本的に好きなものを使えばよいと思いますが、特に拘りないなら今はVS Code(Visual Studio Code)が手軽に設定できて、人気もあるのでオススメです。VS Codeに関しては、Zennというサービスで無料の電子書籍をリリースしていますので、詳しくは以下のリンク先を参照下さい。

 VS Codeは手軽に強力なデバッグ機能を使えるのも利点です。VS Codeを使ったデバッグに関しても、上記の電子書籍の中で触れています。

インデントのルール

 Pythonで最初にとまどうのが、インデントでブロックを区切るということ。ここらへんは、他のプログラミング言語の経験ある人は、一番戸惑うところかもしれませんね。特に、ルールも以下のように中々いい加減です。

1.インデント幅は1でも2でも7でもいい 何でもいい 2.コード全体で一つのインデント幅に固定されてるわけじゃなく、ブロックごとに統一されてればいい

 インデントはスペース4文字分と鉄の掟(PEP 8 後述します)で決まっています。実は、TensorFlowを使う場合だと、見やすくするためにインデントはスペース2文字分が推奨されていたりと例外はあるのですが、まずはスペース4文字分が基本と覚えておきましょう。

ライブラリのバージョン情報の管理

 Pythonを使うとき、色々なライブラリを使うことが多いと思います(むしろ、とあるライブラリを使いたいがためにPythonを使う人も多いと思います)。その際に重要になっているのが、自分の環境にどのようなバージョンのライブラリがインストールされているかです。

 実は、pipがインストールされていれば、以下コマンドで簡単に表示することができます。

$ pip freeze 

 実行すると、以下のようにずらずらとインストールされているライブラリとバージョンが表示されます。

alabaster==0.7.10
anaconda-client==1.6.3
anaconda-navigator==1.6.2
anaconda-project==0.6.0
appnope==0.1.0
...

 以下のようにリダイレクトすると、ファイルに書き出すことができます。

$ pip freeze > requirements.txt 

 逆に、以下コマンドでファイルを読み込むことで、ファイルに書かれたライブラリとバージョン指定して一気にインストールすることが可能です。

$ pip install -r requirements.txt

 Pythonのプログラムや、対話モード、Jupyter Notebook内でバージョン確認したい場合は、以下コマンドでパッケージのリストを取得できます。

import pkg_resources
for dist in pkg_resources.working_set:
    print(dist.project_name, dist.version)

 例えば、Jupyter Notebook内で、特定のパッケージのバージョンを表示させたい。というような場合は、以下のように書くことができます。

import pkg_resources
pkglist = ['numpy', 'scikit-learn', 'pandas']
for dist in pkg_resources.working_set:
    if dist.project_name in pkglist:
        print(dist.project_name, dist.version)

 例えば、上記コードを実行すると、以下のように表示されます。

numpy 1.12.1
pandas 0.20.1
scikit-learn 0.18.1

 ちなみにPython自身のバージョンを取得したい場合は以下です。

import platform
print("python " + platform.python_version())

ファイル名には先頭に数字を使ったりハイフン(-)を使用してはならない

 これはハイフン使ったファイル(ex:sample-library.py)をインポートしようとしてはまりました。sample_library.pyといったようにアンダースコアを使うようにしましょう。後からファイル名を変えるのは面倒なので、最初に知っておきたかったなと思いました。

 また、Pythonではアンダースコア('_')の使い方は結構重要で奥が深いです。以下など参考になります。よく分からないアンダースコアの使い方が出てきたら調べておくと理解が深まります(私もよく忘れます)。

Pythonは_(アンダースコア)の使い方を理解するだけでプロフェッショナルになれる - Qiita

ライブラリと同じファイル名をつけない

 ライブラリと同じ名前をつけるとインポートエラーになります。意外にやりがちなので注意しましょう。

モジュールのインポートを理解する

 モジュールのインポートと聞くと、最初は難しく、インポート関係でエラーが起こるとパニックになってしまいがち(自分だけ?)ですが、実はpythonのインポートの仕組みは非常に簡単です。

 例えばmodule.pyという、以下のような簡単なファイルを作成したとします。

value = 100

def hello_world():
    print("hello world")

 あとは、Pythonの対話モードで、以下のように上記のファイルの変数や、関数を以下のように呼び出せるのです。

>>> import module
>>> module.value
100
>>> module.hello_world()
hello world

 fromとかimportとかも、最初はややこしく思えますが、一度解説読めばすんなり理解できると思います。以下サイトの記事などが分かりやすいと思います。

【Python入門】import・fromでモジュールを読み込む方法 | プログラミング教育ナビ

 より詳しく知りたい場合は、以下記事が参考になりました。

Pythonのimportについてまとめる - Qiita

 自分でライブラリまでつくってしまいたい場合は、以下記事参照ください。

Pythonで自分だけのクソライブラリを作る方法

Pythonでファイル操作

 Pythonでファイル操作できる方法も、標準機能で色々あるので知っておくと何かと役にたつでしょう。以下が良くまとまっていました。

ファイル操作でよく使うモジュール[os,shutil,glob] - Qiita

他のプログラムを呼び出す方法

 subprocessを使うことで、他のプログラムを呼び出せます。標準機能では難しいようなファイル操作をする場合や、シェルスクリプトを使わないで済ませたいときなどに活用できます。os.systemを使う方法もあるのですが、こちらの方がナウい(死語)らしいです。

 例えば、以下のように使います。

import subprocess
cmd = "pwd"
subprocess.call(cmd, shell=True)

 ただ、互換性は失われる(Winowsだと動かないとか)ので注意下さい。

Pythonのコードを対話モードで読み込む

 以下で対話モードでファイルを読み込めます。

$ python -i <filename>

 例えば、上記のmodule.pyを使う場合

$ python -i module.py

 で対話モードに入り、以下のように関数を呼出せたりします。

>>> hello_world()
hello world

 たまーにこれに助けられます。

Jupyter Notebookを活用する

 Jupyter Notebookは、技術ノート・技術メモが作れるPythonのツールです。簡単に言うと、丁寧なコメントや、実行結果をノートとして保存できるツールなのですが、それ以上のパワーを秘めています。Jupyter Notebookの概略は以下サイトの記事を参照ください。

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma

 Jupyter Notebookの活用方法やテクニックは、以下サイトの記事がとても分かりやすく参考になります。

【Day-6】ゼロからJupyterの達人に!使い方の総まとめ。 - プロクラシスト

Jupyter notebook (iPython Notebook)を使う時に気をつけるべき10個のこと - MyEnigma

PEPを読む

 Pythonにある程度慣れてきたら、PEP(Python Enhancement Proposal)と呼ばれるPythonのガイド集的なものに一度目を通しておくと良いと思います。特に重要なのはスタイルガイド(ソースコードの買い方の決まり)を定義しているPEP 8でしょうか。自動でPEP 8の規約をチェックしてくれるツールもありますが、読むことで命名規則やルールの考え方等、ツールチェックだけでは得られない学びもあります。以下に日本語訳があります。

はじめに — pep8-ja 1.0 ドキュメント

 あとは、Pythonの哲学(?)を示してるPEP 20(ZEN of Python)も有名ですね。1分で読める上に結構有名ですので、一度は読んでおくと良いでしょう。以下でPEP 20が表示されるというイースター・エッグも知ることができます(笑)

>>> import this

 PEPの原文は以下です。

PEP 0 -- Index of Python Enhancement Proposals (PEPs) | Python.org

 PEP 8の日本語訳は以下となります。

はじめに — pep8-ja 1.0 ドキュメント

その他参考になる情報

 以下記事は、色々なTipsに満ち満ちています。特にargparseのところは参考になりました。

pythonで小さなツールを作る時のtips - Qiita

 ほけきよ(id:imslotter)さんのガチひとりアドベントカレンダーです。Python、機械学習(ディープラーニング)に興味ある方は全記事必見の内容です。

ひとりでデータ分析ガチ勉 Advent Calendar 2017 - Adventar

 Pythonの限らず重要な、命名規則に関しては以下記事が参考になります。

プログラミングでよく使う英単語のまとめ【随時更新】 - Qiita

Pythonの便利なライブラリを使ってツールを自作してみる

 プログラム上達の近道は、まずは作ってみることですね。といっても、実際自分が使えるようなものじゃないとなかなかテンションあがりませんよね。てっとり早くPythonで便利なツールを作りたいと思ったら、色々なライブラリを活用するのが近道です。ライブラリがあるのに、同じものを時間かけて作ってしまったらもったい無いですよね(勉強目的なら良いですが)。というわけで、私がよく使うライブラリや、実際に作ったツールなどをいくつか紹介します。

ツイッター投稿(twython)

 twitterに投稿するライブラリ何種類かあるのですが、私はこれを使うことが多いです。使用例は以下記事参照下さい。

Raspberry Piで温度・湿度・気圧を定期的にツイートするbotを作った - karaage. [からあげ]

データ分析・可視化(pandas/matplotlib)

 例えばcsvファイルを読み込んで、グラフを書きたいといったときは、pandasとmatplotlibの出番です。具体例は以下記事参照下さい。

Python/pandas/matplotlibを使ってcsvファイルを読み込んで素敵なグラフを描く方法(Mac/Raspberry Pi) - karaage. [からあげ]

画像処理関係(OpenCV/PIL)

 画像処理といえばOpenCVですね。Pythonからも簡単に使うことができます。以下記事参照下さい。

PythonでOpenCV・PILを使った画像処理をするときの環境設定方法 - karaage. [からあげ]

機械学習関係(scikit-learn/TensorFlow/Chainer)

 scikit-learnやディープラーニング関係(TensorFlow/Chainer等)に関しては、環境セットアップのところでも紹介した以下記事を参照下さい。

Pythonで機械学習をするための環境を雑にセットアップする方法(Jupyter notebook環境、ディープラーニング環境含む)on Mac/Linux - karaage. [からあげ]

 Pythonでの機械学習だと、ほけきよ(id:imslotter)さんの以下記事もめちゃめちゃ参考になります。

Pythonでゼロから機械学習/データ分析を学ぶためのサイトマップ - プロクラシスト

スクレイピング(beautiful soup)

 スクレイピングにも、多数のライブラリがあります。以下はbeautiful soupというライブラリで画像を収集する例です。

スクレイピング初心者がpythonでかわいい猫ちゃん画像をコマンド一発でネットから収集してみた - karaage. [からあげ]

天気予報・Googleカレンダー取得(google-api-python-client)

 天気予報や、Googleカレンダー情報の取得も可能です。

天気予報情報・Googleカレンダーの予定をpythonで取得する方法 on Raspberry Pi/Mac - karaage. [からあげ]

その他のライブラリ

 他にも以下のサイトに多くの有名なPythonのライブラリがありますので、自分で作る前にざっと見てみると車輪の発明をしなくて済むかもしれません。

GitHub - vinta/awesome-python: A curated list of awesome Python frameworks, libraries, software and resources

無料のPython学習教材

 Pythonは教育用に使われることが多いこともあり、ネット上に多くの無料教材が公開されています。実際私も、Pythonに関しては書籍よりネットでの公開情報に助けられることが多いです。私の知っている無料の学習情報をいくつかご紹介します。

Pythonのテキスト

 大学の先生が無料で公開されているテキスト。素晴らしいです。

Pythonのテキスト作りました - Qiita

京都大学公開のテキスト

 京都大学が公開しているPythonのテキストです。情報科学のテキストとして、とても素晴らしい内容になっています。

Kyoto University Research Information Repository: プログラミング演習 Python 2019

Python ヒッチハイク・ガイド

 PythonヒッチハイクガイドというWeb公開資料です。

Python ヒッチハイク・ガイド — The Hitchhiker's Guide to Python

 中身に関しては、以下の要約記事がまとまっていて参考になります。

Pythonヒッチハイクガイドを読んで学んだこと - MyEnigma

ThinkPython:How to Think Like a Computer Scientist

 こちらも無料のWeb公開資料です。感謝。

ThinkPython(日本語)

ThinkPython(英語)

Python Data Science Handbook

 英語ですが、Pythonでデータサイエンスをするための基礎が詰まったテキストが無料で公開されています。

Python Data Science Handbook | Python Data Science Handbook

 機械学習のサンプルだと、以下のGitHubのリポジトリにあるJupyter Notebookも非常に良さそうです。

GitHub - tirthajyoti/Machine-Learning-with-Python: Practice and tutorial-style notebooks covering wide variety of machine learning techniques

Real Python(英語)

 無料のPythonチュートリアルです。英語ですが、非常に分かりやすい内容です。Youtubeチャンネルもあります。

Python Tutorials – Real Python

https://www.youtube.com/channel/UCI0vQvr9aFn27yR6Ej6n5UA/

市販の書籍・有料note

 お金を出しても良い人は、市販の書籍を買うのが効率的だと思います。

 私が読んだ中でよかった本を、以下の記事にまとめていますので、よければ参考にしてみてください。

 また、手前味噌にはなりますが、機械学習を学ぶチュートリアルの有料noteを作成しています。もし機械学習・ディープラーニングに興味ある方は、一度ご覧になってみて下さい。

まとめ

 Pythonの初心者向けに、早く知っておくと良さそうなことをまとめてみました。Pythonは比較的初心者でも書きやすい言語と思いますが、学べば学ぶほど、知っておくと便利なことがたくさん出てくる味わい深い言語です。

 中級への手がかりになりそうな情報を、本記事の参考リンクや関連記事に並べていますので、更に深く理解をしたい人は参考にしながら自己学習をすすめてみると良いと思います。私も勉強中ですので、一緒に頑張りましょう!

書籍の宣伝「からあげ先生のとにかく楽しいAI自作教室」

 AIの初心者向け本「からあげ先生のとにかく楽しいAI自作教室」を執筆しました。Google Colaboratoryを使って、実際に動かしながらAIを学べる本になっています。

 文系でAI素人の私の妻も、実践できて理解を深められるような、初学者向けの内容になっています。以下に紹介記事を書いています。Pythonの基礎を理解して、次はAIを学んでみたいと思っている方は是非ごらんください。

参考リンク

Python中級者への道しるべ - Qiita

Pythonでこんなことできちゃうんです - Qiita

個人的に思うPythonのハマり所と要点 - Qiita

pythonのインデント - studylog/北の雲

Pythonスクリプト実行後に対話的に操作したい - 唯物是真 @Scaled_Wurm

データサイエンティストが知っておくといいpythonコーディングの知識 - Kysmo’s Tech Blog

知っているようで意外と知らなかったPython小ネタ集 | DevelopersIO

nkmk note

Pythonの学び方と,読むべき本を体系化しました2018〜初心者から上級者まで - Lean Baseball

【保存版・初心者向け】僕が本気でオススメするPythonと機械学習の良書12選 - Qiita

AIエンジニアが気をつけたいPython実装のノウハウ・コツまとめ - Qiita

【Python】Pythonicなコードの書き方🐍 - Qiita

20 Python Tips and Tricks for New Python Developers

デバッグ時はprintではなく、Icecreamを使うと便利 - Qiita

無料で読める、東大/京大の「Python教科書」電子書籍:AI・機械学習の無料電子書籍 - @IT

関連記事

変更履歴

  • 2021/07/05 自作ライブラリの作り方へのリンクを追記
  • 2021/01/17 微修正を実施
  • 2020/02/19 京都大学のテキストへのリンクを追記・おすすめの市販本まとめ記事へのリンク追記
  • 2019/11/05 まとめを修正・参考サイト追加
  • 2019/03/01 参考サイトにReal Python追加
  • 2019/02/20 VS Codeでのデバッグに関して追記
  • 2019/01/04 環境構築・エディタ・有料note・関連記事に関して追加
  • 2018/12/13 参考リンク追加