2015年2月22日日曜日

astropy.coordinatesを用いた座標の取り扱い、その1 ― パッケージの概要

astropy.coordinatesを用いた天文学上の座標の扱いについてまとめて行きます。ここでは、python(x,y) 2.7.9.0とそれに付随してくるastropyを使用することを前提にしています。

天文学用のPythonパッケージであるastropyには、座標を扱うためのパッケージである coordinatesが含まれています。coordinatesを用いると、様々な座標の相互変換を簡単に行うことができます。まず最初は、coordinatesパッケージを使っておおよそどのようなことができるのか概要を見ていくことにします。

coordinatesを使うときに基本となるのが、SkyCoordというオブジェクトです。SkyCoordオブジェクトは、様々な座標表記に柔軟に対応しています。では、具体例を見て行きましょう。

まず、必要なパッケージを読み込みます。以下の例では、単位を扱うパッケージ unitsも使用するので、SkyCoordクラスと合わせて importしておきます。

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord

必要なパッケージを読み込んだら、SkyCoordオブジェクトを定義してみます。SkyCoordオブジェクトは同じ内容を様々な形式で定義することができます。以下の定義は全て同じ内容です。

>>> c = SkyCoord(ra=10.625*u.degree, dec=41.2*u.degree, frame='icrs')
>>> c = SkyCoord(10.625, 41.2, frame='icrs', unit='deg')
>>> c = SkyCoord('00h42m30s', '+41d12m00s', frame='icrs')
>>> c = SkyCoord('00h42.5m', '+41d12m', frame='icrs')
>>> c = SkyCoord('00 42 30 +41 12 00', frame='icrs', unit=(u.hourangle, u.deg))
>>> c = SkyCoord('00:42.5 +41:12', frame='icrs', unit=(u.hourangle, u.deg))

各定義を行った後で、実際に c の内容を表示し、全て同じ内容であることを確認しましょう。

>>> c
<SkyCoord (ICRS): (ra, dec) in deg (10.625, 41.2)>

上記のように、座標値は特に変数名を指定しなくても記述することができます。変数名を明示して値を記述するときは、赤経、赤緯は、ra、dec、銀経銀緯は、l、b で指定します。座標系の種類にデフォルト値は存在せず必ず値を指定しなくてはいけません(以下で見るように、異なる座標間の変換や比較を行わない場合は省略しても構いません)。座標系の種類も、変数を使わず指定できますが、変数を明示して指定する場合は、frame という変数名を用います。

数値を与えるときは単位を指定する必要があります。例えば、10.5*u.degree、+41d12m00s の様な感じです。単位の指定は astropy.unitsパッケージを用いて行います。
(astropy.unitsに関しては、ここ参照。)

赤道座標系(赤経、赤緯)を表すSkyCoordオブジェクトは、LongitudeオブジェクトとLatitudeオブジェクトから構成されており、個別に情報を取り出すことができます。LongitudeオブジェクトとLatitudeオブジェクは、角度を扱う Angleクラスの一種なので、下記の用例のように角度表示の方法を様々に変更することが可能です。

>>> c = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree)
>>> c.ra  
<Longitude 10.68458 deg>
>>> c.ra.hour  
0.7123053333333335
>>> c.ra.hms  
hms_tuple(h=0.0, m=42.0, s=44.299200000000525)
>>> c.dec  
<Latitude 41.26917 deg>
>>> c.dec.degree  
41.26917
>>> c.dec.radian  
0.7202828960652683

SkyCoordオブジェクトの値は、文字列として取り出すこともできます。文字列への変換は、to_sting() メソッドを用いて行います。

>>> c = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree)
>>> c.to_string('decimal')
'10.6846 41.2692'
>>> c.to_string('dms')
'10d41m04.488s 41d16m09.012s'
>>> c.to_string('hmsdms')
'00h42m44.2992s +41d16m09.012s'

to_string() メソッドでは、上記のフォーマット以外にも、LaTeX形式など様々なフォーマットを利用することができます。

>>> c.ra.to_string(decimal=True)
'10.6846'
>>> c.dec.to_string(format='latex')
'$41^\\circ16{}^\\prime09.012{}^{\\prime\\prime}$'
>>> msg = 'My coordinates are: ra="{0}"" dec="{1}"'
>>> msg.format(c.ra.to_string(sep=':'), c.dec.to_string(sep=':'))
'My coordinates are: ra="10:41:04.488"" dec="41:16:09.012"'

ここまでに示した例では、座標の変換や比較は行う必要がなかったので frameの指定は行いませんでしたが、基本的には SkyCoordオブジェクトを定義するときには frameの指定を行う必要があります。

>>> c_icrs = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree, frame='icrs')

frameの指定を含めてSkyCoordオブジェクトを定義すると、座標値を他の座標における値に変換することができるようになります。座標値の変換にはいくつかの方法がありますが、一番応用が利く方法は、transform_to メソッドを用いる方法です。

>>> from astropy.coordinates import FK5
>>> c_icrs.galactic  
<SkyCoord (Galactic): (l, b) in deg
    (121.174241811, -21.5728855724)>
>>> c_fk5 = c_icrs.transform_to('fk5')  # c_icrs.fk5 does the same thing
>>> c_fk5  
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    (10.6845915393, 41.2691714591)>
>>> c_fk5.transform_to(FK5(equinox='J1975'))  # precess to a different equinox  
<SkyCoord (FK5: equinox=J1975.000): (ra, dec) in deg
    (10.3420913461, 41.1323211229)>

transform_to メソッドを用いると、天体座標を AltAz座標系に変換することもできるので、例えば観測計画をたてるとき等にも SkyCoord オブジェクトを活用することができます。実際に SkyCoordオブジェクトを用いた観測計画の検討方法については機会をあらためて解説したいと思います。

SkyCoordは、Pythonの配列に対応しています。SkyCoordを用いて天体カタログなどの大量のデータを処理するときには、ループを用いて処理するよりも配列を用いて処理する方が遥かに高速です。

>>> SkyCoord(ra=[10, 11]*u.degree, dec=[41, -5]*u.degree)
<SkyCoord (ICRS): (ra, dec) in deg
    [(10.0, 41.0), (11.0, -5.0)]>

ここまでの例では球面座標を使用してきました。SkyCoordオブジェクトではデフォルトが球面座標なので特に明示的に定義は行いませんでした。SkyCoordオブジェクトでは、球面座標以外にも直交座標と円柱座標を使用することができます。球面座標以外の座標を用いる場合は、representation という変数に使用する座標の種類を明示的に定義する必要があります。

>>> c = SkyCoord(x=1, y=2, z=3, unit='kpc', frame='icrs', representation='cartesian')
>>> c
<SkyCoord (ICRS): (x, y, z) in kpc
    (1.0, 2.0, 3.0)>
>>> c.x, c.y, c.z
(<Quantity 1.0 kpc>, <Quantity 2.0 kpc>, <Quantity 3.0 kpc>)

>>> c.representation = 'cylindrical'
>>> c  
<SkyCoord (ICRS): (rho, phi, z) in (kpc, deg, kpc)
    (2.2360679775, 63.4349488229, 3.0)>
>>> c.phi
<Angle 63.434948... deg>
>>> c.phi.to(u.radian)
<Angle 1.107148... rad>

>>> c.representation = 'spherical'
>>> c  
<SkyCoord (ICRS): (ra, dec, distance) in (deg, deg, kpc)
    (63.4349488229, 53.3007747995, 3.74165738677)>

>>> c.representation = 'unitspherical'
>>> c  
<SkyCoord (ICRS): (ra, dec) in deg
    (63.4349488229, 53.3007747995)>

SkyCoordオブジェクトを用いると、2つの天体の間の角距離の計算や、天体カタログどうしのクロスチェックなどを簡単に行うことができます。天体カタログどうしのクロスチェックについては別の機会に解説したいと思います。

>>> c1 = SkyCoord(ra=10*u.degree, dec=9*u.degree, frame='icrs')
>>> c2 = SkyCoord(ra=11*u.degree, dec=10*u.degree, frame='fk5')
>>> c1.separation(c2)  # c1とc2の間の各距離を求めています。  
<Angle 1.4045335865905868 deg>

Skycoordオブジェクトでは、天体までの距離も指定することができます。距離原点は座標系にもよりますが、基本的に地球からの距離を与えます。距離を指定すると空間における位置が決まるので、天体の位置をデカルト座標で表示することが可能となります。

>>> from astropy.coordinates import Distance
>>> c = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree, distance=770*u.kpc)
>>> c.cartesian.x  
<Quantity 568.7128654235232 kpc>
>>> c.cartesian.y  
<Quantity 107.3008974042025 kpc>
>>> c.cartesian.z  
<Quantity 507.88994291875713 kpc>

天体までの距離を与えると、2天体間の空間的な距離を計算するなど、SkyCoordオブジェクトを用いて、さらに様々な計算ができるようになります。

>>> c1 = SkyCoord(ra=10*u.degree, dec=9*u.degree, distance=10*u.pc, frame='icrs')
>>> c2 = SkyCoord(ra=11*u.degree, dec=10*u.degree, distance=11.5*u.pc, frame='icrs')
>>> c1.separation_3d(c2)  
<Distance 1.5228602415117989 pc>

インターネットへ接続できる環境があれば、from_nameというメソッドを使うことによって座標情報をネットから(おそらくSIMBAD)から取得することができます。

>>> SkyCoord.from_name("M42")  
<SkyCoord (ICRS): (ra, dec) in deg
    (83.82208, -5.39111)>

from_nameは便利ですが正確な位置情報の提供を必ずしも保証するものではないので信用できる位置情報を用いいる必要がある場合は主導で位置情報を与えるほうが無難です。

2014年7月13日日曜日

【第5回】 Pythonの基本的な型: コンテナ、その3 (文字列の基本)

さて前回までリストについて見てきましたが(第3回、第4回)今回は同じくコンテナ型の代表格である「文字列」について見てゆきましょう。

Pythonで文字列を表す方法は以下のように四通りあります。

>>> s = 'Hello, how are you?'
>>> s = "Hi, what’s up"
>>> s = '''Hello, 
>>>           how are you''' 
>>> s = """Hi,
>>>        what’s up?"""

基本的には、「’」か「”」で文字列を囲うだけです。一重の場合は改行ができませんが「’’’」や「”””」のように三重に囲うと、文字列の途中で改行できます。

「’」と「”」は、文字列中に出てくる文字によって使い分けます。例えば、以下の様に、文中に「’」が出てくる場合は、「’」で文字列指定を行うとエラーの原因となります。

>>> 'Hello, what's up you?'
  File "", line 1
    'Hello, what's up you?'
                 ^
SyntaxError: invalid syntax

この場合、「”」を使うことでエラーを解消することができます。

>>> "Hello, what's up you?"
"Hello, what's up you?"

「’’’」や「”””」で囲むと、入力する文字列の途中に改行を入れることができます。改行は「/n」で表されます。(ちなみに、tab は「\t」で表されます。)

>>> '''Hello,
>>> How are you'''
'Hello,\nHow are you'

文字列はリストと同様にコンテナ型です。コンテナ型は第3回で説明したようにオブジェクトの集まりで、オブジェクトを操作することができます。文字列においてリストの各要素に相当するものが各文字ということになります。したがって、リストと全く同様、インデクス指定やスライス指定を行うことができます。以下例を見てゆきましょう。

インデクス指定:

>>> a = "hello"
>>> a[0]
'h'
>>> a[1]
'e'
>>> a[-1]
'o'

スライス指定:

>>> a = "hello, world!"
>>> a[3:6]
'lo,'
>>> a[2:10:2]
'lo o'
>>> a[::3]
'hl r!'

a[3:6]は、左から4番目から5番目の要素(文字列の場合は文字)を指定しています。a[2:10:2]は、2番めの文字から始まって、一つ置きに9文字目まで文字を取り出します。a[ : :3]は、最初から最後まで2つ置きに文字を取り出します。スライス構文の定義については第3回を参照してください。

複雑な記号などを扱いたいときは、クォーテーションの前に「u」をつけることで、ユニコードで文字を指定することもできます。

>>> u'Hello\u0020World !'
u'Hello World !'

\u0020 は、ユニコード値 0x0020 に相当するユニコードキャラクターを表します。0x0020 はスペースを表すので、Pythonはスペースに表示を置き換えてくれます。(ユニコードを使った文字の扱いに関するさらに詳しい情報はここ。)

次回は文字列の操作についてまとめます。

2014年7月12日土曜日

【第4回】 Pythonの基本的な型: コンテナ、その2 (リストの操作)

前回(第3回)では、コンテナのその1として、リスト、インデクス、スライスについてまとめました。今回は、コンテナのその2として、リストの要素のさらに詳しい操作方法を見てゆきましょう。

Pythonのリストの大変重要な性質として、「内容を変更できる」という点が挙げられます。(英語では mutable と言います。コンテナの中には後に紹介するように変更できないものもあります。)実際にどのように内容を変更するのか、例を見てみましょう。

>>> l = [1,2,3,4,5]
>>> l[0] = 28
>>> l
[28, 2, 3, 4, 5]
>>> l[2:4] = [3, 8]
>>> l
[28, 2, 3, 8, 5]

まず、一行目の入力で、l にリスト [1, 2, 3, 4, 5] を代入します。l[0] は前回説明したとおり、リスト l の一つ目の要素を表します。二つ目の入力で、l[0] = 28 とすると、一つ目の要素が 28 に置き換えられます。実際 l を表示してみると、一つ目の要素が置き換わっているのがわかります。

置き換えは、複数の要素に対して同時に行うこともできます。l [2:4} のスライスで表されるのは、前回学んだ通り、[3, 4] ですが、l[2:4] = [3, 8] とすることで、[3, 4] を [3, 8] に置き換えることができます。実際 l を表示してみると、3番目と4番目の要素が置き換わっているのが確認できます。

注: 同じ型を持つ数値データの集まりを扱うには、 numpy というモジュールが提供する array型を使うことがしばしばより効率的です。numpyについては後ほど詳しく取り上げます。

上記のような方法以外にもPythonにはリストを操作するためのさまざまな関数がデフォルトで組み込まれています。幾つか例を挙げてみましょう。まず、要素を追加するには次のように append を用います。

>>> l = [1, 2, 3, 4, 5]
>>> l.append(6)
>>> l
[1, 2, 3, 4, 5, 6]

l.append(6)とすることで、l の最後に新しい要素 6 が追加されます。リストの最後の要素削除するには pop() を用います。

>>> l.pop()
6
>>> l
[1, 2, 3, 4, 5]

複数の要素を一度に末尾に付け足すには extend() を用います。

>>> l.extend([6, 7])
>>> l
[1, 2, 3, 4, 5, 6, 7]

付け足した末尾2つの要素を取り除くには pop() を2回適用しても構いませんが、次のような方法もあります。

>>> l = l[:-2]
>>> l
[1, 2, 3, 4, 5]

l[:-2] は1番目の要素から最後から3番目までの要素を表すスライス表現です。つまり、l[:-2] は後ろ2つの要素が l から除かれたリストになるので、これを l に代入することで extend() で追加した2つの要素を削除することができます。

また、以下のように操作するとリストの要素を逆順に並べることができます。

>>> r = l[::-1]
>>> r
[5, 4, 3, 2, 1]

l[ : :-1] はスライスで step が -1 に指定されたものです。step を -1 にすることで最後尾の要素から逆順に一つづつ前に戻るという指示ができます。リストは + 演算子を使って結合することができます。

>>> r + l
[5, 4, 3, 2, 1, 1, 2, 3, 4, 5]

また、* 演算子を使うと、同じ内容を繰り返したリストを作ることができます。

>>> 2 * r
[5, 4, 3, 2, 1, 5, 4, 3, 2, 1]

sort() 関数を使うと、要素の数字を昇順に並べ直すことができます。先ほど逆順に並べた r をソートしてみましょう。

>>> r.sort()
>>> r
[1, 2, 3, 4, 5]

r.sort() のような書き方のプログラミングをオブジェクト指向プログラミングと呼びます。(オブジェクト指向プログラミングがどういうものかはここでは気にする必要はありません。) 今、r はリストなので、r に対しては、リストに対して有効なメソッドを適用することができます。iPythonシェルでは、r に対して有効な全メソッドを次のようにして表示することができます。

>>> l. # ここで tabキーをタイプ
 append count extend index insert pop remove reverse sort

メソッドを様々に駆使することでより効率的にリストの操作を行うことができます。ここで、全てのメソッドを紹介するわけにも行かないので、自分でいろいろ実験してみることをおすすめします。次回は、別のコンテナの例として、「文字列」についてまとめる予定です。

【第3回】 Pythonの基本的な型: コンテナ、その1 (リストの基本)

Pythonの型で重要なものの1つに「コンテナ」があります。コンテナというのは、オブジェクトというものの集合です。オブジェクトが何かというのは現時点では解りにくいかもしれませんが、例えば文字、数値などの場合もありますし、それ以外の場合もあります。

これからPythonを学習していく中で徐々にわかってくると思いますが、コンテナの扱いに慣れることがPythonを使いこなす上での肝となります。今回は、コンテナ型の初回として、コンテナ型の1つである「リスト」と、リストを操作する上で基本となる「インデクス」と「スライス」についてまとめてみます。

リストは順序つきのオブジェクトの集まりです。(順序付きというところが大切です。後に順序がつかないコンテナ型も登場します)。要素となるオブジェクトは異なる型を取ることができます。以下に例を示します。

>>> l = [1, 2, 3, 4, 5]
>>> type(l)
list

[1, 2, 3, 4, 5] がリストで、このリストを l に代入した上で type() で型を確認しています。リストは [ ] で括り、各要素はコンマで区切ります。

リストの中の要素を取り出したいときは、次のようにします。

>>> l[2]
3

l[2] をインデクス指定と呼びます。リストの中の要素には番号がふられており、番号を指定することで書く要素にアクセスすることができます。注意すべきなのは、インデクスの番号は 0, 1, 2, 3…、というように、0 から始まることです。上記の例の場合、l[2] なので、左から三番目の要素、つまり 3 が指定されます。

インデクスには負の数も使うことができます。以下の例を見てみましょう。

>>> l[-1]
5
>>> l[-2]
4

負号を付けると、右から何番目かを指定することができます。ただし、左からかぞえるときは、0, 1, 2, 3…、と 0 から数え始めましたが、右から数えるときは、-1, -2, -3…、と-1から始まることに注意してください。上記の例では、l[-1] は一番右、l[-2] は右から2番めの要素を表すので、5, 4 が指定されます。

インデクスを使うと、何番目から何番目の要素、というようにリストの一部分を指定できます。具体例で見てみましょう。

>>> l
[1, 2, 3, 4, 5]
>>> l[2:4]
[3, 4]

最初の入力行では確認のためリスト l の内容を表示しています。二つ目の入力行で範囲の指定をしています。この場合、3番目から4番目までの要素が指定されます。スライスの構文は、一般的には次のように書くことができます。

スライス構文: l[start:stop:step]

最初の start が範囲の最初の要素、stop が終わりの要素、step が増加量を表しています。step は省略すると 1 として扱われます。ここで覚えておきたいのは、部分を取り出す始めの要素が左から n番目のとき、start=n-1 となる一方で、終わりの要素が左から n 番目とすると、stop=n となることです。(この点、しばしば勘違いしてエラーの原因になりますのでしっかり覚えておきましょう。)

なぜこのような一見わかりにくそうな仕様になっているかというと、stop - start が取り出す要素の個数になるからです。ここでは解りにくいと思う方もいるかもしれませんが、Pythonでは要素の個数が分かりやすい方がプログラミングがやりやすいのでこのような仕様になっています。

以下、もう少しスライスの具体例を見てみましょう。

>>> l[3:]
[4, 5]
>>> l[:3]
[1, 2, 3]
>>> l[::2]
[1, 3, 5]

最初の入力 l[3:] は、start=3 で、stop と step が省略されています。この場合、範囲の最後は元のリストの最後までとなり、step は上述の通り 1 となります。

二つ目の入力 l[:3] は同様に、start=0, stop=3, step=1 と同義です。

三つ目の入力 l[::2] は、start と stop が省略されていて、step=2 です。この場合、元のリストの最初の要素から一つ置きに順次要素を取り出すことになります。 ここに上げた例以外にも、スライスは負の数を使った範囲指定もできますが、それはまた追々説明することにします。次回は、リストの操作の基本事項をまとめる予定です。

【第2回】 Pythonの基本的な型: 数値型

Pythonの変数にはいくつかの基本的な型があります。今回はそのうちの1つである「数値型」についてまとめます。数値型には以下の様なものがあります。

整数:

>>> 1 + 1
2
>>> a = 4

最後の行では、aに整数4を代入しています。


浮動小数点数:

>>> c = 2.1

小数点を入れて数値を書くと自動的に浮動小数点数となります。2.0の場合は、2.と省略して書くこともできます。上の例では、cに2.1という浮動小数点数を代入しています。


複素数:

>>> a = 1.5+0.5j
>>> a.real
1.5
>>> a.imag
0.5

複素数もPythonの組み込み型なので特別の配慮なしにいきなり使うことができます。虚数単位は数学では i ですが、Pythonでは j を用います。上の1行目で、a に複素数 1.5+0.5j を代入し、a.real で a の実部、a.imag で a の虚部を表示します。


ブール値:

>>> 3>4
False
>>> test=(3>4)
>>> test
False
>>> type(test)
bool

条件判断における真(true)か偽(false)をブール値と呼び、これも数値型の1つです。3>4 は偽なので、False と返ってきます。ブール値は文字列に代入することも可能です。上記の例では、test にFalse が代入されます。

type() を使うと型を調べることができます。上記の例では test にブール値が代入されているので、type(test) とすると bool と返ってきます。以下、type() の使用例をもう少し上げておきます。

>>> type(1)
int
>>> type(1.)
float
>>> type(1. + 0j)
complex
>>> a = 3
>>> type(a)
int


その他、数値型に関する基礎知識

数値型の種類は上記のとおりですが、さらに知っておいたほうが良い基礎知識を紹介します。

その(1) 基本的な演算子

一つ目は基本的な演算子(+, -, *, /, %)です。Python シェルは基本的な算術演算 +, -, *, /, % がそのまま使えるため以下の例のように電卓代わりに使うこともできます。

>>> 7 * 3.
21.0
>>> 2**10
1024
>>> 8 % 3
2

加減乗除は + - * / です。** と * を2つ続けるのは累乗を表します。上の例では$2^{10}$ということになります。% は剰余を表します。


その(2) 計算するときのコツ

3/2 を計算するとき、答えとして 1.5 を期待していると、以下の実行例のように、「オヤ?」という答えをPythonは返してきます。

>>> 3 / 2
1

これは、3 も 2 も整数なので答えも小数点以下が切り捨てられ整数で返ってくるためです。小数点以下を切り捨てないで完全に計算するためには以下のようにします。

>>> 3 / 2.
1.5

2の後にピリオドを付けることで期待した答えが得られます。3にピリオドをつけても同じ結果が得られますが、計算式中の1つの数値が浮動小数点型になれば他の数値も浮動小数点型として扱われるので省略してかまいません。

また、数値を a b c などの文字変数に代入した後に計算する場合は、float()  という関数を用いることで、以下の例のように整数を浮動小数に変換することができます。


>>> a = 3
>>> b = 2
>>> a / b
1
>>> a / float(b)
1.5

float() を単体で実行すると以下のようになります。

>>> float(1)
1.0

次回は、Pythonの重要な型の1つ「コンテナ」についてまとめます。

2014年7月10日木曜日

【第1回】 はじめに

このブログではPythonに関する知識、特に科学技術研究にPythonを利用する場合に必要な知識をまとめて行きます。

Pythonは汎用のプログラミング言語なので様々なことができるのですが、多くの優れた科学技術用のモジュールが無料で提供されているため、科学技術研究の道具として大変優れたプログラミング言語です。また他のプログラミング言語に比べて習得が容易であるところも魅力です。

これから科学技術系の研究者を目指す方が、これから一つだけプログラミング言語を学ぶとしたら間違いなくPythonが一番のおすすめです。

このブログでは基本的に科学技術研究に必要な知識に的を絞り、本当の基礎からPythonの利用方法をまとめて行こうと思っています。最初の数回は、科学技術研究系のモジュールを操作するのに必要な、Pythonの一般的な知識をまとめます。

このブログでは、当面、iPythonシェルの上で作業を行うことを仮定してます。(開発環境に関する知識もおいおいまとめようと思います。)

iPython環境を整えたら、プログラミング学習ではお馴染みの「Hello, world!」を表示してPythonが動いていることを確認してみましょう。(以下のPythonコードの表示では、>>>の行が入力部分、それ以外はiPythonシェルから返ってくる結果を示しています。)

>>> print "Hello, world!"
Hello, world!

うまく表示されたでしょうか? Hello, world!がうまく表示されたら、以下の入力例に従ってもう少しiPythonで遊んでみましょう。

>>> a = 3
>>> b = 2 * a
>>> type(b)
int
>>> print b
6
>>> a * b
18
>>> b = 'hello'
>>> type(b)
str
>>> b + b
'hellohello'
>>> 2 * b
'hellohello'

どうでしょうか、例の通りの答えが返ってきたでしょうか。次回からしばらくの間、Pythonの基本的な「型」について説明してゆきます。