import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
def rand_walk(data_func,title,rows=5,cols=4,start=1100,seeds=10,length=500000):
    fig=plt.figure(figsize=(20,20))
    plt.suptitle(title,fontsize=24)
    for s in range(seeds):
        np.random.seed(start+s)
        data = data_func(length)
        print('seed: %d, mean:%f, std:%f'%(start+s,data.mean(),data.std()))
        ax = plt.subplot(rows,cols,s*2+1)
        ax.plot(data.cumsum())
        ax.plot([0,length],[0,0])
        ax.set_title('rand-walk 1D (seed=%d)'%(start+s))
        if len(data.value_counts())>2:
            data=(data.diff()>0).astype(int)*2-1     #normalize data to -1,1
        x=data[data.index[data.index%2==0]].cumsum() # even rows for up/dn
        y=data[data.index[data.index%2==1]].cumsum() # odd rows for left/right
        ax = plt.subplot(rows,cols,s*2+2)
        ax.plot(x,y,'.',c='C2',lw=1)
        ax.set_title('rand-walk 2D (seed=%d)'%(start+s))
    plt.show()

rand_walk(lambda x:pd.Series(np.random.randint(2, size=x)*2-1),"rand-walk with 'discrete uniform' distribution")
rand_walk(lambda x:pd.Series(np.random.randn(x)),"rand-walk with 'standard normal' distribution")
