機械学習 & ディープラーニング入門(Python編)[Lesson 5]

機械学習 & ディープラーニング入門(Python編)[Lesson 5]

データ型(ブール/数値/文字列) ― Python基礎文法入門

2019年2月14日

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回と次回は、値やデータの型を説明。今回はその前編として、bool型/int型/float型/str型を取り上げる。

一色政彦 デジタルアドバンテージ 一色 政彦

 前回はPython言語の基礎中の基礎とも言える「変数」と、Pythonの世界を構成する「オブジェクト」について解説した。今回は、基本的なデータの型である「bool型(ブール型)」「int型/float型(数値型)」「str型(文字列型)」について説明する。脚注や図、コードリストの番号は前回からの続き番号としている。

 本連載は、実際にライブラリ「TensorFlow」でディープラーニングのコードを書く流れに沿って、具体的にはLesson 1で掲載した図1-a/b/c/dのサンプルコードの順で、基礎文法が学んでいけるように目次を構成している。今回は、図1-b/d内の一部コードを取り上げる。

TensorFlowの公式チュートリアルのサンプルコード(2)
図1-b【再掲】 TensorFlowの公式チュートリアルのサンプルコード(2)
TensorFlowの公式チュートリアルのサンプルコード(4)
図1-d【再掲】 TensorFlowの公式チュートリアルのサンプルコード(4)

 今回、本稿で説明するのは、図1-b/d【再掲】における赤枠内のコードのみとなる。青枠内のコードは次回説明する。

 なお、本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。

 Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。

Google Colabで実行する
GitHubでソースコードを見る

Python言語の基礎文法

 それでは、bool型/int型/float型/str型を順に説明していこう。

データの型(基本編)

 変数には、前回Lesson 4で見たような「モジュール」だけでなく、「数値」「文章」「一覧データ」など、さまざまな値/データが代入できる。例えばリスト7は、前掲の図1-b/d内のサンプルコードの中にある「変数に対して何かを代入している行」(=冒頭で示した【再掲】画像の赤枠の内容)を抜き出して並べたものだ。

Python
# 変数への「数値」の代入
EPOCHS = 500

# 変数への「文字列値」の代入
color = 'blue'
#color = 'red'  # 同じデータ型なので説明省略
リスト7 変数への何らかの代入を行っているコード

 この例では、数値(500)と文字列値('blue')といいった値/データが変数に代入されている。この値/データの「種類」のことをtype)と呼ぶ。Python言語に標準で組み込まれている型(=組み込み型Built-in Types)には、主に以下のようなものがある(すべてではなく、今回紹介する分のみ)。

  • bool型: True(真)かFalse(偽)かの真偽値。ブール型
  • int型: 012-1-2といった整数値。数値型の一種
  • float型: 0.01.22.5-1.2-2.5といった小数点を含む実数値(=浮動小数点数と呼ぶ)。数値型の一種
  • str型: 'abc''012''あいう'といった、文章・テキストを形成する文字列(=文字の集合)値。文字列型

 それぞれ具体的なコードで示しながら説明していこう。

bool型(ブール型)

 bool型は、前掲のリスト7に示した「変数への代入」としては記述されていないが、データの型としては使用されているので(例えば図1-bにあるFalse)、やはり知っておく必要がある文法要素の一つだ。bool型の性質を理解するためにも、ここでは仮のサンプルコードで説明しておこう。

Python
is_a = True
is_b = False

is_b  # Falseと出力される
リスト7-1 変数の宣言と「真偽値」の代入を行うコード

 リスト7-1の「真偽値」の代入をイメージで表すと、図9-1のようになる。

変数への「真偽値」の代入、のイメージ
図9-1 変数への「真偽値」の代入、のイメージ

すでにお分かりのように、「変数への代入」のイメージは前回のLesson 4の図8-1で示したものとほぼ同じで、値部分が違っているだけである。本稿では以降も同じであるが、コードの意味を想像してもらいやすいように、すべて同じように絵を入れている。同じイメージだと気付いてもらえたのであれば、本稿にある以降の絵については読み飛ばしても構わない。

 リスト7-1では、変数is_aと変数is_bTrue(真=正しい)やFalse(偽=間違い)という値(略して「真偽値」)を設定(=代入)している。なお、この変数名のis_ais_bには特別な意味はなく、「aかどうか」「bかどうか」という意味でこのような変数を自作した。

int型/float型(数値型)

 int型は、前掲のリスト7のコードに含まれていた。その部分を抜き出したのがリスト7-2だ。

Python
EPOCHS = 500

EPOCHS  # 500と出力される
リスト7-2 変数の宣言と「整数値」の代入を行うコード
変数への「整数値」の代入、のイメージ
図9-2 変数への「整数値」の代入、のイメージ

 リスト7-2では、変数EPOCHS500という整数値を設定している。ちなみにEPOCHS(エポック)とは、機械学習/ディープラーニングの専門用語で、詳しくは『Playgroundで学ぶディープラーニング入門(座標点データ編)』(後日公開予定)で説明する。ここでは内容は分からなくとも「エポック(学習回数)を500回に設定した」という意味だと理解しておいてほしい。

 float型は、リスト7には含まれていないが、int型とほぼ同じと考えてよい。違いは、int型が整数のみを扱う型なのに対し、float型は実数(=整数も含めて、小数点が付く値)を扱う型である点だ。なお、float型の値は、厳密には「実数値」ではなく、プログラミング用語で浮動小数点数値と呼ぶ。浮動小数点数値とは、符号と指数と仮数を用いて表された実数値のことであるが、その内容を説明すると長くなってしまうので、ここでは説明を割愛する。「浮動小数点数値は、実数値と同等のもの」と考えておけば問題ない。

 機械学習/ディープラーニングでは、int型よりも、float型の方をよく使う。

 ここでも仮のサンプルコードで説明しておこう。

Python
float_variable = 123.456

float_variable  # 123.456と出力される
リスト7-3 変数の宣言と「浮動小数点数値」の代入を行うコード
変数への「浮動小数点数値」の代入、のイメージ
図9-3 変数への「浮動小数点数値」の代入、のイメージ

 リスト7-3では、変数float_variable123.456という数値を設定している。

str型(文字列型)

 str型のコード例は、次のとおり(リスト7からの一部抜粋)。

Python
color = 'blue'

color  # 'blue'と出力される
リスト7-4 変数の宣言と「文字列値」の代入を行うコード
変数への「文字列」の代入、のイメージ
図9-4 変数への「文字列」の代入、のイメージ

 リスト7-4では、変数color'blue'という文字列値(=文字がつらなったもの。例えば単語や文、文章など)を設定している。文字列は(基本的に)このように一重引用符('、シングルクォーテーション)で挟んで記述する。

 ちなみに、文字列の中に'を記述したい場合は、二重引用符("、ダブルクォーテーション)で挟んで記述すればよい(リスト7-5)。文字列は一重引用符だけでなく、二重引用符でも記述可能である。

Python
color = "b'lue"

color  # "b'lue"と出力される
リスト7-5 二重引用符による文字列の記述

「b'lue」という文字列になる。

 また、文字列の中に一重引用符と二重引用符の両方が登場する場合は、\'\"のように文字の前に\(=OS環境によってバックスラッシュか円マークで表示)を付ければよい(リスト7-6、併せて「【コラム】エスケープシーケンス」を参照)。

Python
color = 'b\'l"ue'

color  # 'b\'l"ue'と出力される
リスト7-6 文字列でエスケープシーケンスを使った例

「b'l"ue」という文字列になる。

【コラム】エスケープシーケンス

 \を前に付けた文字はエスケープシーケンスと呼ばれる特殊文字となる。Pythonでは、主に次のようなエスケープシーケンスが用意されている。改行は通常、\nを使えばよい。

エスケープシーケンス意味
\\バックスラッシュ(\)
\'一重引用符(')
\"二重引用符(")
\rLinuxの改行(CR:行頭復帰)
\nMacの改行(LF:次行移行)
\r\nWindowsの改行(CR+LF)
\tタブ文字
表1 文字列で使えるエスケープシーケンス

 str型である文字列に関しては、文字列の操作(検索や置換、大文字/小文字化、空白削除など)系の関数があり、特定の場面ではよく使うのですべて紹介したいところだが、本連載は「TensorFlowチュートリアルの読み書き」にフォーカスを当てており、それらについてはあまり出番がないようだったので割愛する。複数の変数の値から任意の文字列を作成できる文字列フォーマットについてはLesson 8で紹介する。

【コラム】変数などの命名規則について

 上記のコード例を読む中で、is_aのように_(アンダースコア)を使うことや、EPOCHSがすべて大文字であることに違和感を持ったかもしれない。本コラムでは、主に変数の名前などの命名規則(=名前付けのルール)について説明しよう。

 Python言語の原則的な命名規則(本コラム末尾のリンク先を参照)としては、アルファベット(主に英単語)と数字を組み合わせて好きな語句を作り、単語間を区切るときは_(アンダースコア、アンダーバー)を使うのが一般的だ。また、名前はすべて小文字でつづるのが一般的である。前掲のリスト7-1の変数名はそれにのっとって、is_ais_bと命名している。

 ちなみに、Lesson 7で説明する「関数」も同様の命名規則となる。例えば関数名をmy_function()のように命名する。

 また、変数EPOCHSは、すべて大文字にすることで、その変数が定数(後述)であることを明示している。定数constants)とは、「変わらない」変数のことで、一度、変数にデータ/値を代入したら二度と変えないようにしようね、というルールになっている。コードを書く側が「この変数は定数なので、再代入や中身の変更は不可ですよ」と明示しているわけである。

 もちろん、原則から外れる命名規則もあり、Lesson 11で説明する「クラス」とLesson 17で説明する「例外」がそれになる。ここで簡単に名前の例だけ挙げておくと、クラスMyCalssNameや例外MyExceptionNameのように、単語の先頭は大文字で書き、単語の区切りは(大文字で分かるので)何も入れない。先ほどの原則に従えばmy_calss_nameと命名すべきところが、クラスではMyCalssNameとなるわけである。

 なお、単語間ではなく、名前の先頭文字に_(アンダースコア1個)や__(アンダースコア2個)を使うこともできるが、そうした場合、それらの変数などは特別な意味・機能(具体的には「アクセス制限」などの機能)を持つことになる。詳しくはLesson 12で説明するので、現時点ではそのような命名をしないように気を付けてほしい。

 以上、命名規則についてまとめておこう。

  1. 原則的には、すべて小文字で書き、単語の区切りは_(アンダースコア)を使う
  2. 定数は、すべて大文字で書き、単語の区切りは_(アンダースコア)を使う
  3. この原則に当てはまらない法則: 「クラス」と「例外」は、単語の先頭は大文字で書き、単語の区切りは大文字で分かるので何も入れない

 初心者のうちは、この3つだけ覚えておけば十分だ。万が一、覚えていなくて命名規則から外れていても、コーディングするうえで実用上の問題は発生しないので、安心してほしい。一般的な命名規則はPEP 8というPython公式スタイルガイド日本語訳)に詳しく記載されているので、興味がある方は、本連載を読了した後ぐらいのタイミングで読んでみてほしい(繰り返すが、初心者はそこまで詳しく命名規則を学ぶ必要はない。Pythonに慣れて余裕が出てきてから読めばよい)。

つづく

 今回はデータ型の基本である「bool型(ブール型)」「int型/float型(数値型)」「str型(文字列型)」について説明した。次回は、続編としてコレクション(=複数の値をまとめて管理できるデータ型)の「list型(リスト型)」「tuple型(タプル型)」「dict型(辞書型)」を紹介する。

  • このエントリーをはてなブックマークに追加

※以下では、本稿の前後を合わせて5回分(第3回~第7回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載目次]を参照してください。

機械学習 & ディープラーニング入門(Python編)[Lesson 5]
3. コメント ― Python基礎文法入門、APIリファレンスの使い方

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回は、コードの中で頻繁に使われるコメント機能を説明。さらに、コーディング作業で常用するAPIリファレンスの使い方について紹介する。

2019年2月7日(木)
機械学習 & ディープラーニング入門(Python編)[Lesson 5]
4. 変数、オブジェクト ― Python基礎文法入門

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回は、プログラミングの基本中の基本である変数と、Pythonの世界を構成するオブジェクトについて説明する。

2019年2月13日(水)
機械学習 & ディープラーニング入門(Python編)[Lesson 5]
5. 【現在、表示中】≫ データ型(ブール/数値/文字列) ― Python基礎文法入門

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回と次回は、値やデータの型を説明。今回はその前編として、bool型/int型/float型/str型を取り上げる。

2019年2月14日(木)
機械学習 & ディープラーニング入門(Python編)[Lesson 5]
6. データ型(リスト/タプル/辞書/各種オブジェクト) ― Python基礎文法入門

Python言語の文法を、コードを書く流れに沿って説明していく連載。前回と今回は、値やデータの型を説明。今回はその後編として、list型/tuple型/dict型、それら以外のオブジェクトの型を取り上げる。

2019年2月18日(月)
機械学習 & ディープラーニング入門(Python編)[Lesson 5]
7. 関数 ― Python基礎文法入門

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回は、プログラム内の各処理を実現する関数について説明する。また、関連事項として、文字列フォーマット関数についても言及する。

2019年3月1日(金)
Deep Insider の SNS :

本コンテンツの目次

機械学習 & ディープラーニング入門(Python編)[Lesson 5]
機械学習 & ディープラーニング入門(Python編)[Lesson 5]

データ型(ブール/数値/文字列) ― Python基礎文法入門


本コンテンツに関連する重要用語