MQL5システムトレーダーの為のPython講座:第5回「データ型について」

Python
スポンサーリンク
スポンサーリンク

はじめに

前回は「変数」について解説しました↓

今回はプログラミング言語におけるデータ型という概念について解説していきます。

データ型とは

データ型とは、コンピュータが扱うデータの「種類」のことです。たとえば、「10」という数字と、「こんにちは」という文字では、コンピュータの中での扱われ方が違います。この違いを明確にするために「データ型」というものがあります。

Pythonでは、「この変数にはどんなデータを入れるか」をあらかじめ宣言する必要はありません。Pythonは、プログラムを書くだけで、自動的にそのデータが何なのかを判断してくれます。

# 数字を入れる
num = 10  

# 文字を入れる
text = "こんにちは"

上記のサンプルコードでは、変数「num」には数字の10が入っていて、「text」には文字で「こんにちは」が入っています。

データ型を調べるには?

「numやtextに入っているデータがどんな種類かを調べたい」と思ったら、typeという仕組みを使います。

typeは、変数に入っているデータが数字なのか文字なのかを教えてくれる便利な仕組みです。

次の例を見てみましょう。

# 数字を入れる
num = 10  

# 文字を入れる
text = "こんにちは"

# データ型を調べてみる
print(type(num))   # 結果は <class 'int'>(数字)
print(type(text))  # 結果は <class 'str'>(文字)

このプログラムを実行すると、次の結果が表示されます。

<class 'int'>
<class 'str'>

<class ‘int’> は、「このデータは数字(整数)」という意味です。

<class ‘str’> は、「このデータは文字(文字列)」という意味です。

typeは「このデータが何なのか」を教えてくれる、関数という仕組みの1つになります。

typeは、変数の中に何が入っているのかを調べたいときに使います。ただし、実行してもプログラムの動きには影響しません。「確認のため」に使うものだと思っておきましょう。

データ型を理解しておくと、プログラムが間違って動いてしまったり、エラーが出たりする原因を見つけやすくなります。

MQL5でのデータ型の例

Pythonと同じように、MQL5にもデータ型があります。ただし、MQL5では変数を使うときに「データ型」を明示的に指定する必要があります。たとえば、次のコードでは、整数型と文字列型の変数を使っています。

// 数値型と文字列型の例
void OnStart()
  {
   int num = 10;          // 整数型の変数
   string text = "こんにちは"; // 文字列型の変数
   
   // エキスパートログに出力
   Print("numの値: ", num);  // 結果: numの値: 10
   Print("textの値: ", text); // 結果: textの値: こんにちは
  }

上記サンプルコードでは、intが整数を表し、stringが文字列を表しています。MQL5では、変数を宣言する際にデータ型を明示する必要があります。Pythonのように自動で判断はされません。

  • int num = 10; は、「整数型変数numに10を代入する」という意味です。
  • string text = “こんにちは”; は、「文字列型の変数textに”こんにちは”を代入する」という意味です。
  • Print関数は、指定したデータを「エキスパートログ」に出力します。

MQL5データ型についてさらに詳しく知りたい方は下記の記事をご参照ください↓

動的型付け言語と静的型付け言語

プログラミング言語には、大きく分けて「動的型付け言語」と「静的型付け言語」の2種類があります。この違いを知っておくと、PythonMQL5を使うときの考え方が分かりやすくなります。


動的型付け言語とは?

Pythonは「動的型付け言語」と呼ばれる種類のプログラミング言語です。

動的型付け言語の特徴は、変数を使うときに「データ型」を明示的に指定しなくてもよいことです。Pythonは、変数に入れるデータを自動的に判断します。たとえば次のようなコードがあります。

# Pythonでは型を指定せずにデータを入れる
num = 10        # これは数字だと判断される
text = "こんにちは"  # これは文字だと判断される

Pythonは、「numには数字が入っている」「textには文字が入っている」と自動的に判断してくれます。このため、データ型について細かい指定をしなくてもコードが動きます。


静的型付け言語とは?

一方で、MQL5は「静的型付け言語」と呼ばれる種類です。

静的型付け言語では、変数を使うときに「これは数字を入れる変数」「これは文字を入れる変数」と明確に宣言する必要があります。たとえば、次のMQL5のコードを見てみましょう。

// MQL5では型を明示的に指定する
int num = 10;          // これは整数型の変数
string text = "こんにちは"; // これは文字列型の変数

ここで、「int」は「この変数には整数が入る」という意味を持ち、「string」は「この変数には文字列が入る」という意味です。

もしデータ型を間違えると、MQL5ではエラーが出てプログラムが動きません。たとえば、次のようなコードはエラーになります。

// 型が一致していない例(エラーが出る)
int num = "こんにちは"; // 数字型に文字列を入れているのでエラー

動的型付け言語と静的型付け言語の違い


動的型付け言語静的型付け言語にはそれぞれの利点があります。

Pythonは簡単に書き始められる反面、実行中に予期しないエラーが出ることもあります。

一方、MQL5のような静的型付け言語は、少し面倒ですがエラーを未然に防ぐことができます。

MQL5を使う場合は、データ型をしっかり理解して、正しい型を選ぶことが大切です。

Pythonの主要なデータ型

コンピュータでデータを扱うとき、「このデータは何の種類か」を区別することが大切です。

Pythonにはさまざまなデータ型がありますが、ここでは代表的なものを一つずつ詳しく説明していきます。これを理解すると、プログラムがどう動くかがより明確になります。


整数型(int型)

整数型(int型)は、小数点を含まない数字を扱うデータ型です。たとえば、10-5といった正の整数や負の整数がこれに該当します。

使用例

# 整数型の例
num = 42

# データ型を確認する
print(type(num))  # 出力: <class 'int'>

解説

  • numには42という整数が入っています。これはint型と判断されます。
  • 整数型は、個数、回数、インデックス(通し番号)など、小数点が不要なデータを扱うときに役立ちます。

浮動小数点型(float型)

浮動小数点型(float型)は、小数点を含む数字を扱うデータ型です。たとえば、3.14や-0.5といった正の小数や負の小数がこれに該当します。

使用例

# 浮動小数点型の例
pi = 3.1415

# データ型を確認する
print(type(pi))  # 出力: <class 'float'>

解説

  • piには3.1415という小数が入っています。これはfloat型と判断されます。
  • 浮動小数点型は、金額、測定値、比率など、より細かい数値を扱うときに便利です。

文字列型(str型)

文字列型(str型)は、文字や文章を扱うためのデータ型です。Pythonでは、文字列を作るときにシングルクォーテーション(')またはダブルクォーテーション(")で囲みます。どちらを使っても同じ意味ですが、統一感を持たせるためにどちらかに揃えるとよいでしょう。

使用例

# 文字列型の例
greeting = "こんにちは"

# データ型を確認する
print(type(greeting))  # 出力: <class 'str'>

解説

  • greetingには”こんにちは”という文字列が入っています。データ型str型です。
  • 文字列型は、文章、名前、説明文など、テキスト情報を扱うときに使います。

ブール型(bool型)

ブール型(bool型)は、True(真) または False(偽) のどちらかを持つデータ型です。主に「はい」「いいえ」のような判断をする際に使います。

使用例

# ブール型の例
is_greater = 10 > 5  # 10は5より大きいか?
is_smaller = 10 < 5  # 10は5より小さいか?

# データ型を確認する
print(type(is_greater))  # 出力: <class 'bool'>
print(is_greater)        # 出力: True
print(is_smaller)        # 出力: False

解説

  • 10 > 5は「10は5より大きい」という質問をしています。この場合、答えはTrueです。
  • 10 < 5は「10は5より小さい」という質問ですが、これは間違いなのでFalseになります。

ブール型は、条件分岐(プログラムに「もし○○ならば」という指示を出す)でよく使います。


リスト型(list型)

リスト型(list型)は、複数のデータを1つのまとまりとして扱うためのデータ型です。リストに含まれるデータは「要素」と呼ばれ、それぞれ順番がついています。この順番をインデックス(通し番号)と呼びます。

リストの記法

リストを作るには、データを角括弧([])で囲みます。データ同士はカンマ(,)で区切ります。

使用例

# リスト型の例
shopping_list = ["りんご", "バナナ", "オレンジ"]

# データ型を確認する
print(type(shopping_list))  # 出力: <class 'list'>
print(shopping_list[0])     # 出力: りんご(最初の要素)
print(shopping_list[1])     # 出力: バナナ(2番目の要素)

解説
リストは、複数のデータを順序よく管理するのに便利です。買い物リストや生徒名簿のような「まとまり」を扱うときに役立ちます。また、リスト内の要素インデックス番号(0から始まる番号)を使ってアクセスできます。

リストについての詳細は、次回の講座記事で解説しています↓


タプル型(tuple型)

タプル型(tuple型)は、リスト型によく似たデータ型ですが、一度作成したら中身を変更できないという特徴があります。データの順序が必要で、かつ変更されたくない場合に使用します。

タプルの記法

タプルを作るには、データを丸括弧(())で囲みます。データ同士はカンマ(,)で区切ります。

使用例

# タプル型の例
coordinates = (10.0, 20.0)

# データ型を確認する
print(type(coordinates))  # 出力: <class 'tuple'>
print(coordinates[0])     # 出力: 10.0

解説

  • タプル型は、変更する必要がないデータを扱うのに適しています。たとえば座標(x, y)や一定の設定値などに向いています。
  • リスト型とは異なり、要素を追加したり削除したりできません。

タプル型についての詳細は下記の記事をご参照ください。


辞書型(dict型)

辞書型(dict型)は、データを「キー」と「値」のペアで管理するデータ型です。キーを使って、それに対応する値を取り出します。リストと違って、順番に関係なくデータを管理できます。

辞書の記法

辞書を作るには、データを波括弧({})で囲みます。各データは「キー:値」のペアで記述し、ペア同士はカンマ(,)で区切ります。

使用例

# 辞書型の例
person = {"名前": "太郎", "年齢": 20, "職業": "学生"}

# データ型を確認する
print(type(person))       # 出力: <class 'dict'>
print(person["名前"])      # 出力: 太郎
print(person["職業"])      # 出力: 学生

解説
personという辞書型には、名前や年齢、職業が入っています。キー(例えば「名前」)を指定すると、その値(例えば「太郎」)を取り出せます。

辞書型は、情報をカテゴリごとに整理して管理したいときに便利です。


集合型(set型)

集合型(set型)は、データを「重複なし」で管理するためのデータ型です。同じ値が複数回入っても、自動的に1つにまとめられます。また、順序は関係ありません。

集合の記法

集合を作るには、データを波括弧({})で囲みます。データ同士はカンマ(,)で区切ります。

使用例

# 集合型の例
fruits = {"りんご", "バナナ", "りんご", "オレンジ"}

# データ型を確認する
print(type(fruits))  # 出力: <class 'set'>
print(fruits)        # 出力: {'りんご', 'オレンジ', 'バナナ'}

解説
fruitsには「りんご」が2回入っていますが、集合型では自動的に1つにまとめられています。集合型は、データの重複を避けたいときや、集合の計算(共通部分や差分)をしたいときに役立ちます。

特徴と用途

集合型は、次のような場合に役立ちます。

  • データの重複を防ぎたいとき
    重複がないリストを作りたい場合に、集合型を使うと便利です。
  • 集合演算を行いたいとき
    集合型には、共通部分(積集合)や片方だけのデータ(差集合)を求めるための演算が用意されています。

たとえば、次のように集合演算を行えます。

# 集合演算の例
set1 = {"りんご", "バナナ", "オレンジ"}
set2 = {"バナナ", "いちご", "オレンジ"}

# 共通部分(積集合)
print(set1 & set2)  # 出力: {'バナナ', 'オレンジ'}

# 差集合
print(set1 - set2)  # 出力: {'りんご'}

データ型の変換

Pythonでは、プログラムを書く中で異なるデータ型を扱うことがよくあります。たとえば、数値と文字列を結合したり、リストを文字列に変換したりする場面です。その際に必要なのが「データ型の変換」です。Pythonには、データ型を変換するための便利な組み込み関数が用意されています。


データ型を変換する方法

Pythonでは、以下のような組み込み関数を使ってデータ型を変換します。

文字列を数値に変換する

文字列に数字が含まれている場合、それを数値に変換して計算に使うことができます。Pythonでは、以下の2つの関数を使用します。

float: 文字列を浮動小数点型float型)に変換します。

int: 文字列を整数型int型)に変換します。

# 文字列を整数に変換
str_num = "42"
int_num = int(str_num)  # 整数型に変換

# 文字列を浮動小数点に変換
str_pi = "3.14"
float_pi = float(str_pi)  # 浮動小数点型に変換

# 確認
print(type(int_num))  # 出力: <class 'int'>
print(int_num)        # 出力: 42
print(type(float_pi)) # 出力: <class 'float'>
print(float_pi)       # 出力: 3.14

解説

  • int("42")は、文字列「42」を整数型に変換しています。
  • float("3.14")は、文字列「3.14」を浮動小数点型に変換しています。

注意点

  • 数字以外の文字列を変換しようとするとエラーになります。たとえば、int("abc")はエラーになります。
  • 浮動小数点型の文字列(例: "3.14")をintで変換するとエラーになります。その場合はまずfloat`に変換してください。

数値を文字列に変換する

数値を文字列に変換すると、他の文字列と結合したり、データを表示する際に便利です。Pythonでは、str関数を使って数値を文字列に変換します。

# 数値を文字列に変換
num = 42
num_str = str(num)

# 確認
print(type(num_str))  # 出力: <class 'str'>
print(num_str)        # 出力: "42"

文字列に変換した数値は、他の文字列と結合することができます。

# 文字列との結合
age = 25
message = "私は" + str(age) + "歳です。"
print(message)  # 出力: 私は25歳です。

解説

  • str(num)は、数値numを文字列に変換しています。
  • これにより、文字列同士を結合する+演算子で扱えるようになります。

リストやタプルを文字列に変換する

リストタプルを文字列に変換するには、strを使います。

# リストを文字列に変換
fruits = ["りんご", "バナナ", "オレンジ"]
fruits_str = str(fruits)

# 確認
print(type(fruits_str))  # 出力: <class 'str'>
print(fruits_str)        # 出力: "['りんご', 'バナナ', 'オレンジ']"

文字列に変換した結果は、そのまま出力や保存に使うことができます。


リストやタプルを他の型に変換する

リストタプルに変換したり、タプルリストに変換することができます。

タプルリストに変換する: list関数を使います。

リストタプルに変換する: tuple関数を使います。

# リストをタプルに変換
fruits_list = ["りんご", "バナナ", "オレンジ"]
fruits_tuple = tuple(fruits_list)

# タプルをリストに変換
fruits_list_again = list(fruits_tuple)

# 確認
print(type(fruits_tuple))      # 出力: <class 'tuple'>
print(fruits_tuple)            # 出力: ('りんご', 'バナナ', 'オレンジ')
print(type(fruits_list_again)) # 出力: <class 'list'>
print(fruits_list_again)       # 出力: ['りんご', 'バナナ', 'オレンジ']

解説

  • tupleは、リストタプルに変換します。データの変更が不要で、固定したい場合に便利です。
  • listは、タプルリストに変換します。データを変更する必要がある場合に便利です。


データ型の変換を正しく使えば、異なる型のデータを自由に操作できるようになります。次のセクションでは、データ型ごとの特有の機能について解説します。これを学べば、さらに効率よくデータを扱うことができるようになります。まとめ

この記事では、Pythonで扱うさまざまなデータ型について学び、それらをどのように確認し、必要に応じて変換するのかを詳しく解説しました。データ型はプログラムの基礎を支える重要な概念であり、それを正しく理解することは、エラーを減らし、効率的なプログラムを書くための第一歩です。


この記事のポイント

  1. Pythonの主要なデータ型
    • 数値型: 整数型int型)と浮動小数点型float型)を区別し、適切に使う。
    • 文字列型: テキストを扱い、他の文字列と結合したり加工するのに役立つ。
    • ブール型: 真(True)または偽(False)を表現し、条件分岐に活用する。
    • リスト: 複数のデータを順序よく管理し、柔軟な操作が可能。
    • タプル: 一度作成したら変更しないデータの管理に最適。
    • 辞書型: キーと値のペアでデータを整理し、カテゴリごとに情報を管理する。
    • 集合: データを重複なく整理し、集合演算を効率的に行う。
  2. データ型の確認方法
    • Pythontype関数を使うことで、変数やデータの種類を簡単に確認できる。
  3. データ型の変換
    • 数値を文字列に変換して結合したり、文字列を数値に変換して計算に利用する方法を学びました。
    • リストタプル集合、辞書を相互に変換することで、状況に応じたデータ操作が可能になる。

なぜデータ型を理解することが重要か?

プログラムが扱うデータは、適切なデータ型を選ぶことで、より簡潔でエラーの少ないコードになります。たとえば、金額計算では浮動小数点型、順序を持たないデータ管理には集合型を使うなど、目的に応じた型選びが求められます。

また、Python動的型付け言語であるため、コードを実行中に予期しないエラーが発生することがあります。データ型を正しく理解していれば、そのような問題を未然に防ぎ、プログラムの動作をより正確にコントロールできます。

次回は今回も紹介したリストというものについて、もう少し掘り下げて解説予定です。

今回は以上とさせて頂きます。最後までお読みいただきありがとうございました。

MQL5システムトレーダーの為のPython講座:第4回「変数について」

        →MQL5システムトレーダーの為のPython講座:第6回「リストについて」

タイトルとURLをコピーしました