こんにちは。IT/経済ジャーナリストで投資家の渡辺です。
Pythonでは、プログラムの土台となる仕組み、たとえばwhileやforの繰り返しとかif文とか、基本的な機能だけがPythonプログラムの本体にあります。
それ以外は、拡張ライブラリというさまざまな機能を持った「部品」を、使いたいときに物置から引っ張り出してきて使う、という感じです。
実際は、いくつもの関連する「部品」が集まった「部品群」なので、「パッケージ」と呼ばれることがあります。
ところがPythonでは科学計算、統計処理、Webネットワーキング、果てはAI(人工知能)のベースとなる機械学習まで、さまざまな強力なパッケージが「物置」に置かれています。
この強力なライブラリが用意されていて、けっこう複雑なことがわりと手軽に実現できることが、最近Pythonの人気が急上昇している理由でもあります。
この記事の目次
数学ライブラリを使ってみよう
ライブラリにはいろいろな種類がありますが、すでにPyCharmをインストールした時に、主要なものは一緒にインストールされています。
PyCharmの画面左上の「File」メニューから「Default Settings」を選択します。
設定用のウィンドウが出てくるので、そこで「Project Interpretter」を選びます。
以下の画面のように、PyCharmにインストールされているライブラリ(部品)が山ほど出てきます。
プログラミングの基本的な作り方やお作法を学んだあとは、1)どこにどういうライブラリがあるのか、2)どういう機能があるのか、3)どういう手順でその機能を利用できるのかを学んでいくと、だんだん本格的なアプリを作っていくことが可能になってきます。
数値計算ライブラリNumPyを使ってみる
統計処理やゲーム、科学技術などのプログラミングでよく使われる、数値計算ライブラリNumPyを使ってみましょう。
まず物置にある部品、つまりライブラリを使いたい場合は、import文を使って取り込みます。
import numpy as np
これはそのままで、「ライブラリnumpyをnpという名前で取り込む」という意味です。
プログラムの中では、このnpに対して、参照したり指示することで、必要な機能を引き出していきます。
たとえば、数値計算ということで、円周率π(パイ)が、このライブラリにはあらかじめ設定されています。
この部品にはすでに “np” という名前を付けています。
円周率πについては、”pi” という名前で登録されています。
ということで、以下のように “.”(ピリオド)で区切って表現します。
np.pi
このままでは人間には分からないので、print文で出力させます。
print(np.pi)
上のimport文とこのprint文の2行だけで、円周率πが表示されます。
これで半径から円周の長さ、円の面積、球の表面積や体積が計算できます。
NumPyの乱数関数でサイコロを作ってみる
これだけでは物足りないので、次はNumPyの乱数関数を使ってみます。
乱数(ランダム)とは規則性のない数字のことで、クジとかサイコロ、占いとかゲームの敵キャラの動きとか、いろいろなアプリで利用されています。
Numpyライブラリの中に、randomという部品があります。
これが乱数機能を持っています。
rand()関数で0以上1未満の乱数を発生させる
いくつか関数がありますが、まずはrand()関数を覚えてください。
この関数は、0以上から1未満までの範囲で、つまり小数として0.xxxxという数字をランダムに発生させてくれます。
先ほど、このプログラムではNumPyライブラリは、npという名前で扱うことを決めました。
また乱数を使うには、NumPyライブラリ群の中にあるrandomというモジュールに中に用意されているrand()関数を使います。
先ほどのpiと同じように、”.”(ピリオド)で区切って以下のように指定します。
np.random.rand()
これを先ほどのπの表示と同様に、print文で表示させてみてください。
print(np.random.rand())
ついでに、1回だけの表示だと乱数の様子が分かりにくいので、for文で10回繰り返して、それぞれランダムな小数が出ているか確認してみてください。
for i in range(10):
print(np.random.rand())
乱数なんで毎回結果は変わるものですが、小さくて0.00xxx、大きいと0.8xxxとか0.9xxxということで、確かに0以上1未満の範囲でランダムに数字が作られています。
int()関数で整数化してサイコロに
とはいえ、この小数のままではサイコロになりません。
サイコロにするには、1)1から6までの範囲で乱数を発生させること、2)整数にすることが必要です。
まず1から6の範囲ですが、rand()関数のままだと0から1未満なので、6倍します。
そうすると、0.00xxxの場合は6倍してもあまり大きくならないので0.0xxxくらいの数字になります。
次に一番大きくても0.99xxxなので、6倍すると5.9xxxくらいになります。
小数部分は切り捨てたいので、小数以下のケタを切り捨てて整数化するint()関数を使います。
その場合、少ない場合、たとえば0.00xxxの時には0になります。
逆に大きい場合、5.9xxxの時には、小数部分が切り取られて、5になります。
つまり6倍してint()関数に入れると、0〜5の数字が得られるわけです。
ということは、この結果に+1すれば、1〜6の数字が得られ、電子サイコロになりました。
最後にコードで表記してみます。
np.random.rand()
これを6倍して、int()関数で小数を切り捨て、+1すると、こうなります。
int(np.random.rand())+1
先ほどの10回繰り返すコードに置き換えてみてください。
for i in range(10):
print(int(np.random.rand()*6)+1)
ちゃんとサイコロになっていますね。
<今日の要約ノート>
Pythonには、便利な機能を提供する部品群=ライブラリが用意されていて、いろいろなアプリがわりと短いコードで作れる。数値計算にはNumPyというモジュールが用意されている。この中のrandomモジュールにあるrand()関数を使えば、乱数が得られる。この関数だけでは0から1の間の小数だが、何倍かしてint()関数で小数部分を切り捨てれば、サイコロができる。
コメント
[…] ・ライブラリの乱数を利用してサイコロを作ってみる […]