In [1]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
In [2]:
data = {'City': ['Tokyo','Osaka','Nagoya','Okinawa'],
'Temperature': [25.0,28.2,27.3,30.9],
'Humidity': [44,42,np.nan,62]}
cities = DataFrame(data)
cities
Out[2]:
In [3]:
cities.as_matrix()
Out[3]:
In [4]:
cities['City'].as_matrix()
Out[4]:
In [5]:
face = ['king','queen','jack','ten','nine','eight',
'seven','six','five','four','three','two','ace']
suit = ['spades', 'clubs', 'diamonds', 'hearts']
value = range(13,0,-1)
deck = DataFrame({'face': np.tile(face,4),
'suit': np.repeat(suit,13),
'value': np.tile(value,4)})
deck.head()
Out[5]:
permutation 関数で、index の順番をランダムにシャッフルします。
In [6]:
np.random.permutation(deck.index)
Out[6]:
ランダムにシャッフルした index を用いて行を並べ替えます。
In [7]:
deck = deck.reindex(np.random.permutation(deck.index))
deck.head()
Out[7]:
reset_index メソッドで index に通し番号を付け直します。
In [8]:
deck = deck.reset_index(drop=True)
deck.head()
Out[8]:
3回分のランダムウォークのデータを並べた DataFrame を作成します。
In [9]:
result = DataFrame()
for c in range(3):
y = 0
t = []
for delta in np.random.normal(loc=0.0, scale=1.0, size=100):
y += delta
t.append(y)
result['Trial %d' % c] = t
result.head()
Out[9]:
DataFrame の polot メソッドでグラフを描きます。
In [10]:
result.plot(title='Random walk')
Out[10]:
次の関数 coin_game は、所持金と掛け金を引数に渡すと、1/2の確率で掛け金の分だけ所持金が増減した値が返ります。
In [11]:
from numpy.random import randint
def coin_game(money, bet):
coin = randint(2)
if coin == 0:
money += bet
else:
money -= bet
return money
次は、1000円の所持金において、100円を賭けた場合の結果を示します。
In [12]:
money = 1000
money = coin_game(money, 100)
money
Out[12]:
(1) 所持金1000円からスタートして、所持金の50%を賭け続けた場合の所持金の変化をリスト trial に格納してください。(全部で100回繰り返します。)
(2) (1)の処理を3回繰り返して、それぞれの結果を列(trial0, trial1, trial2)とするDataFrameを作成して、変数 df に格納してください。また、その結果をグラフ表示してください。
(3) 関数 coin_game を修正して、1/2の確率で「掛け金の分だけ所持金が増加する」もしくは「掛け金の半分だけ所持金が減少」ようにしてください。修正後の関数名は stock_game とします。(これは、掛け金の分だけ株を購入したところ、1/2の確率が株価が倍、もしくは、半分になる状況をシュミレーションしています。)
(4) (3)の関数を用いて、(2)と同様のグラフを作成してください。