2014-12-25

SVM (Support Vector Machine) Regression

SVM (Support Vector Machine) Regression

Just tried SVM to regress.

Code


import numpy as np
import matplotlib.pyplot as plt
# y = sin(x) + noise
np.random.seed(1)
x = np.random.uniform(0, 2*np.pi,200)
y = np.sin(x) + np.random.normal(loc=0, scale=0.5, size=len(x))
# change the shape of x for scikit-learn
x = x.reshape((len(x),1))

from sklearn import svm
from sklearn import cross_validation
# take 20% for test and use 70% as training data
x_train, x_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.2)
# sort x_test and y_test to plota line graph
index = x_test.argsort(0).reshape(len(x_test))
x_test = x_test[index]
y_test = y_test[index]
# train a support vector machine
reg = svm.SVR(kernel='rbf', C=1).fit(x_train, y_train)
# the coefficient of determination R^2 of the prediction
print('The coefficient of determination R^2 is {0}'.format(reg.score(x_test, y_test)))
# plot
fig, ax = plt.subplots(1)
ax.plot(x_test, y_test, 'bo')
ax.plot(x_test, reg.predict(x_test), 'ro-', label='$R^2={0}$'.format(round(reg.score(x_test, y_test),2)))
ax.legend()
fig.savefig('SupportVectorRegression')
fig.show()

The coefficient of determination R^2 is 0.76986793941


Bibliography:


Visualizing the Stock Market

Visualizing the Stock Market


From 2010.1.1 to today.

Code


print(__doc__)

# Author: Gael Varoquaux gael.varoquaux@normalesup.org
# License: BSD 3 clause
# Naoki Watanabe edited on Decmber 25, 2014
import datetime

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import finance
from matplotlib.collections import LineCollection

from sklearn import cluster, covariance, manifold

###############################################################################
# Retrieve the data from Internet

# Choose a time period reasonnably calm (not too long ago so that we get
# high-tech firms, and before the 2008 crash)
d1 = datetime.datetime(2010, 1, 1)
d2 = datetime.datetime.today()

# kraft symbol has now changed from KFT to MDLZ in yahoo
symbol_dict = {
    'TOT': 'Total',
    'XOM': 'Exxon',
    'CVX': 'Chevron',
    'COP': 'ConocoPhillips',
    'VLO': 'Valero Energy',
    'MSFT': 'Microsoft',
    'IBM': 'IBM',
    'TWX': 'Time Warner',
    'CMCSA': 'Comcast',
    'CVC': 'Cablevision',
    'YHOO': 'Yahoo',
    'DELL': 'Dell',
    'HPQ': 'HP',
    'AMZN': 'Amazon',
    'TM': 'Toyota',
    'CAJ': 'Canon',
    'MTU': 'Mitsubishi',
    'SNE': 'Sony',
    'F': 'Ford',
    'HMC': 'Honda',
    'NAV': 'Navistar',
    'NOC': 'Northrop Grumman',
    'BA': 'Boeing',
    'KO': 'Coca Cola',
    'MMM': '3M',
    'MCD': 'Mc Donalds',
    'PEP': 'Pepsi',
    'MDLZ': 'Kraft Foods',
    'K': 'Kellogg',
    'UN': 'Unilever',
    'MAR': 'Marriott',
    'PG': 'Procter Gamble',
    'CL': 'Colgate-Palmolive',
    'GE': 'General Electrics',
    'WFC': 'Wells Fargo',
    'JPM': 'JPMorgan Chase',
    'AIG': 'AIG',
    'AXP': 'American express',
    'BAC': 'Bank of America',
    'GS': 'Goldman Sachs',
    'AAPL': 'Apple',
    'SAP': 'SAP',
    'CSCO': 'Cisco',
    'TXN': 'Texas instruments',
    'XRX': 'Xerox',
    'LMT': 'Lookheed Martin',
    'WMT': 'Wal-Mart',
    'WAG': 'Walgreen',
    'HD': 'Home Depot',
    'GSK': 'GlaxoSmithKline',
    'PFE': 'Pfizer',
    'SNY': 'Sanofi-Aventis',
    'NVS': 'Novartis',
    'KMB': 'Kimberly-Clark',
    'R': 'Ryder',
    'GD': 'General Dynamics',
    'RTN': 'Raytheon',
    'CVS': 'CVS',
    'CAT': 'Caterpillar',
    'DD': 'DuPont de Nemours'}

symbols, names = np.array(list(symbol_dict.items())).T
quotes=[]
for symbol in symbols:
    try:
        quotes.append(finance.quotes_historical_yahoo_ochl(symbol, d1, d2, asobject=True))
    except:
        print('Not Found {0}'.format(symbol))
#    quotes = [finance.quotes_historical_yahoo_ochl(symbol, d1, d2, asobject=True)
#          for symbol in symbols]
  
open = np.array([q.open for q in quotes]).astype(np.float)
close = np.array([q.close for q in quotes]).astype(np.float)

# The daily variations of the quotes are what carry most information
variation = close - open

###############################################################################
# Learn a graphical structure from the correlations
edge_model = covariance.GraphLassoCV()

# standardize the time series: using correlations rather than covariance
# is more efficient for structure recovery
X = variation.copy().T
X /= X.std(axis=0)
edge_model.fit(X)

###############################################################################
# Cluster using affinity propagation

_, labels = cluster.affinity_propagation(edge_model.covariance_)
n_labels = labels.max()

for i in range(n_labels + 1):
    print('Cluster %i: %s' % ((i + 1), ', '.join(names[labels == i])))

###############################################################################
# Find a low-dimension embedding for visualization: find the best position of
# the nodes (the stocks) on a 2D plane

# We use a dense eigen_solver to achieve reproducibility (arpack is
# initiated with random vectors that we don't control). In addition, we
# use a large number of neighbors to capture the large-scale structure.
node_position_model = manifold.LocallyLinearEmbedding(
    n_components=2, eigen_solver='dense', n_neighbors=6)

embedding = node_position_model.fit_transform(X.T).T

###############################################################################
# Visualization
plt.figure(1, facecolor='w', figsize=(10, 8))
plt.clf()
ax = plt.axes([0., 0., 1., 1.])
plt.axis('off')

# Display a graph of the partial correlations
partial_correlations = edge_model.precision_.copy()
d = 1 / np.sqrt(np.diag(partial_correlations))
partial_correlations *= d
partial_correlations *= d[:, np.newaxis]
non_zero = (np.abs(np.triu(partial_correlations, k=1)) > 0.02)

# Plot the nodes using the coordinates of our embedding
plt.scatter(embedding[0], embedding[1], s=100 * d ** 2, c=labels,
            cmap=plt.cm.spectral)

# Plot the edges
start_idx, end_idx = np.where(non_zero)
#a sequence of (*line0*, *line1*, *line2*), where::
#            linen = (x0, y0), (x1, y1), ... (xm, ym)
segments = [[embedding[:, start], embedding[:, stop]]
            for start, stop in zip(start_idx, end_idx)]
values = np.abs(partial_correlations[non_zero])
lc = LineCollection(segments,
                    zorder=0, cmap=plt.cm.hot_r,
                    norm=plt.Normalize(0, .7 * values.max()))
lc.set_array(values)
lc.set_linewidths(15 * values)
ax.add_collection(lc)

# Add a label to each node. The challenge here is that we want to
# position the labels to avoid overlap with other labels
for index, (name, label, (x, y)) in enumerate(
        zip(names, labels, embedding.T)):

    dx = x - embedding[0]
    dx[index] = 1
    dy = y - embedding[1]
    dy[index] = 1
    this_dx = dx[np.argmin(np.abs(dy))]
    this_dy = dy[np.argmin(np.abs(dx))]
    if this_dx > 0:
        horizontalalignment = 'left'
        x = x + .002
    else:
        horizontalalignment = 'right'
        x = x - .002
    if this_dy > 0:
        verticalalignment = 'bottom'
        y = y + .002
    else:
        verticalalignment = 'top'
        y = y - .002
    plt.text(x, y, name, size=10,
             horizontalalignment=horizontalalignment,
             verticalalignment=verticalalignment,
             bbox=dict(facecolor='w',
                       edgecolor=plt.cm.spectral(label / float(n_labels)),
                       alpha=.6))

plt.xlim(embedding[0].min() - .15 * embedding[0].ptp(),
         embedding[0].max() + .10 * embedding[0].ptp(),)
plt.ylim(embedding[1].min() - .03 * embedding[1].ptp(),
         embedding[1].max() + .03 * embedding[1].ptp())

plt.show()





Automatically created module for IPython interactive environment
Not Found DELL
Cluster 1: Total, Dell, Sanofi-Aventis, Amazon, Kellogg, Chevron, Home Depot
Cluster 2: JPMorgan Chase, Wal-Mart, Goldman Sachs, Wells Fargo, Ford, IBM
Cluster 3: Microsoft, Caterpillar
Cluster 4: Canon
Cluster 5: Exxon, Cablevision, Xerox, Kimberly-Clark
Cluster 6: Ryder, Kraft Foods, GlaxoSmithKline, Sony, Comcast, Colgate-Palmolive, American express
Cluster 7: Lookheed Martin, Pfizer, Yahoo, Unilever, Marriott, Time Warner, AIG, Honda, Pepsi, General Dynamics, Novartis, ConocoPhillips, Cisco, Walgreen, Coca Cola, DuPont de Nemours, Apple
Cluster 8: Navistar, Procter Gamble, Raytheon, General Electrics, Valero Energy, Northrop Grumman
Cluster 9: Mitsubishi, Texas instruments, SAP, 3M, Mc Donalds, CVS, Boeing, HP
Cluster 10: Toyota


Bibliography:


Forecast Stocks by Logistic Regression, Linear Discriminant Analyser and Quadratic Discriminant Analyser

Forecast Stocks by Logistic Regression, Linear Discriminant Analyser and Quadratic Discriminant Analyser

The below code is for python 3

import datetime
import numpy as np
import pandas as pd
import sklearn

from pandas.io.data import DataReader
from sklearn.linear_model import LogisticRegression
from sklearn.lda import LDA
from sklearn.qda import QDA

def create_lagged_series(symbol, start_date, end_date, lags=5):
    """This creates a pandas DataFrame that stores the percentage returns of the 
    adjusted closing value of a stock obtained from Yahoo Finance, along with 
    a number of lagged returns from the prior trading days (lags defaults to 5 days).
    Trading volume, as well as the Direction from the previous day, are also included."""

    # Obtain stock information from Yahoo Finance
    ts = DataReader(symbol, "yahoo", start_date-datetime.timedelta(days=365), end_date)

    # Create the new lagged DataFrame
    tslag = pd.DataFrame(index=ts.index)
    tslag["Today"] = ts["Adj Close"]
    tslag["Volume"] = ts["Volume"]

    # Create the shifted lag series of prior trading period close values
    for i in range(0,lags):
        tslag["Lag%s" % str(i+1)] = ts["Adj Close"].shift(i+1)

    # Create the returns DataFrame
    tsret = pd.DataFrame(index=tslag.index)
    tsret["Volume"] = tslag["Volume"]
    tsret["Today"] = tslag["Today"].pct_change()*100.0

    # If any of the values of percentage returns equal zero, set them to
    # a small number (stops issues with QDA model in scikit-learn)
    tsret['Today'] = [x if abs(x)>=0.0001 else 0.0001 for x in tsret['Today']]

    # Create the lagged percentage returns columns
    for i in range(0,lags):
        tsret["Lag%s" % str(i+1)] = tslag["Lag%s" % str(i+1)].pct_change()*100.0

    # Create the "Direction" column (+1 or -1) indicating an up/down day
    tsret["Direction"] = np.sign(tsret["Today"])
    tsret = tsret[tsret.index >= start_date]

    return tsret

def fit_model(name, model, X_train, y_train, X_test, pred):
    """Fits a classification model (for our purposes this is LR, LDA and QDA)
    using the training data, then makes a prediction and subsequent "hit rate"
    for the test data."""

    # Fit and predict the model on the training, and then test, data
    model.fit(X_train, y_train)
    pred[name] = model.predict(X_test)

    # Create a series with 1 being correct direction, 0 being wrong
    # and then calculate the hit rate based on the actual direction
    pred["%s_Correct" % name] = (1.0+pred[name]*pred["Actual"])/2.0
    hit_rate = np.mean(pred["%s_Correct" % name])
    print("%s: %.3f" % (name, hit_rate))
    
if __name__ == "__main__":
    # Create a lagged series of the S&P500 US stock market index
    snpret = create_lagged_series("^GSPC", datetime.datetime(2001,1,10), datetime.datetime(2014,12,24), lags=5)

    # Use the prior two days of returns as predictor values, with direction as the response
    X = snpret[["Lag1","Lag2"]]
    y = snpret["Direction"]

    # The test data is split into two parts: Before and after 1st Oct. 2014.
    start_test = datetime.datetime(2014,10,1)

    # Create training and test sets
    X_train = X[X.index < start_test]
    X_test = X[X.index >= start_test]
    y_train = y[y.index < start_test]
    y_test = y[y.index >= start_test]

    # Create prediction DataFrame
    pred = pd.DataFrame(index=y_test.index)
    pred["Actual"] = y_test
    
    # Create and fit the three models    
    print("Hit Rates:")
    models = [("LR", LogisticRegression()), ("LDA", LDA()), ("QDA", QDA())]
    for m in models:
        fit_model(m[0], m[1], X_train, y_train, X_test, pred)


Hit Rates:
LR: 0.576
LDA: 0.576
QDA: 0.593

With all training data in more than ten years, hit rates does not get better never crossing 60%.




Bibliography:


2014-12-24

Install Numpy, Schipy, Matplotlib and etc. on Amazon Linux AWS-ec2 for Python3

Installing NumPy, SciPy, Matplotlib, pandas, scikit-learn and pillow for Python 3.4 on Amazon Linux

You must always specify full paths for python3, pip3 and easy_install-3.4. You can tell a full path by the command, which <file or directory>
常にpython3, pip3, easy_install-3,4はフルパスを指定してください。whichコマンドでフルパスがわかります。

Always use pip3 to install for python 3.
Python 3にライブラリをインストールするには常にpip3を使うこと

About my AWS and Python

$ aws --version
aws-cli/1.6.6 Python/2.6.9 Linux/3.14.25-23.45.amzn1.x86_64

$ python3 --version
Python 3.4.2

Download and instal easy_install

$ cd /usr/local/src
$ sudo wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
$ which python3 # check the full path to python3
/usr/local/bin/python3
$ sudo /usr/local/bin/python3 ez_setup.py

Check easy_install for Python 3.4 installed

Insatall pip for python 3

$ which easy_install-3.4 # check the full path to easy_install 3.4
/usr/local/bin/easy_install-3.4

$ sudo /usr/local/bin/easy_install-3.4 pip

$ which pip3
/usr/local/bin/pip3
$ pip3 --version
pip 1.5.6 from /usr/local/lib/python3.4/site-packages (python 3.4)

Install NumPy for python 3

$ sudo /usr/local/bin/pip3 numpy
$ # also, sudo /usr/local/bin/easy_install-3.4 numpy works fine


Install LAPACK and BLAS

sudo yum install -y lapack-devel blas-devel

Install SciPy for python3

You may need install BLAS and LAPACK on your LINUX , not on  Python. So you do not need specify the python version)

$ sudo yum install blas-devel lapack-devel

$ sudo /usr/local/bin/pip3 scipy

when you fail with the error,
"virtual memory exhausted: Cannot allocate memory",
try the below

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
$ sudo /sbin/mkswap /var/swap.1
$ sudo /sbin/swapon /var/swap.1

$ sudo /usr/local/bin/pip3 scipy

$ sudo swapoff /var/swap.1
$ sudo rm /var/swap.1


Install Matplotlib

You will install freetype version 2.4 or more and png.

$ sudo apt-get install libpng-devel

$ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz
$ tar xzvf freetype-2.5.3.tar.gz
$ cd freetype-2.5.3
$ ./configure
$ make
$ sudo make install

$ /usr/local/bin/pip3 install matplotlib


Install PIL (Python Image Library)

$ sudo /usr/local/bin/pip3 install pillow

Install Pandas

$ sudo /usr/local/bin/pip3 install pandas 


Install scikit-Learn

$ sudo /usr/local/bin/pip3 install scikit-learn

Install SymPy

$ sudo /usr/local/bin/pip3 install sympy


Install PuLP

$ sudo /usr/local/bin/pip3 pulp

Install Beautiful Soup 4

$ sudo /usr/local/bin/pip3 install beautifulsoup4


Install lxml

$ sudo yum -y install libxslt-devel libxml2-devel gcc python-devel
$ sudo pip install lxml

Install twitter

$ sudo pip install twitter


Install oauth

$ sudo pip install aouth

Install iPython

$ sudo /usr/local/bin/pip3 ipython

Install boto

$ sudo /usr/local/bin/pip3 boto

Finally, check your libraries installed

$ /usr/local/bin/pip3 freeze
Pillow==2.6.1
PuLP==1.5.6
beautifulsoup4==4.3.2
boto==2.34.0
ipython==2.3.1
lxml==3.4.1
matplotlib==1.4.2
nose==1.3.4
numpy==1.9.1
oauth==1.0.1
pandas==0.15.2
pyparsing==2.0.3
python-dateutil==2.3
pytz==2014.10
scikit-learn==0.15.2
scipy==0.14.0
six==1.8.0
sympy==0.7.6
twitter==1.15.0



前回記事 (Previous article about installing python3 on Amazon Linux):

参考記事 Bibliography

2014-12-23

Cygwin on Windows8 でchmodが効かずssh鍵認証ができない

次のようなエラーが出てsshの鍵認証がうまくいかないとき

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for 'keyname.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: key_aws.pem
Permission denied (publickey).

鍵のpermissionが広すぎるので、自分のみ読み書きできる600に変更する必要がある
cygiwnのバグによって、ファイルやフォルダにグループが設定されていないと、パーミッションを変更できないので、

chgrp -R Users <file or directory>
chmod 600 <file or directory>

として、まずグループをUsersに変更してからパーミッションを変える。
ls -l
でパーミッションが変更されたか確認し、
ssh -i <key.pem> user@domain
で認証すると、今回はec2にログインできた。


       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

December 13-14, 2014 ドイツ ベルリン旅行

December 13-14, 2014

2014-12-18

ジュネーヴ Café du Soleil のチーズフォンデュ

本場ジュネーヴで食べるチーズフォンデュ

CERN出張最終日にはジュネーヴ郊外のチーズフォンデュを食べに行きました。ジュネーヴで食べるチーズフォンデュは二回目 (前回記事: ジュネーヴ Auberge de Savièse チーズ・フォンデュ)

今回は、調べた中で好評のCafé du Soleilへ行った。


Geneva駅からは10分ぐらいバスに乗る。街の中心部からは外れている。

Fondue au Fromage (チーズフォンデュ)を注文。飲み物はなし。まずバゲットが運ばれた。

割りと混むので予約した方がいいと聞いていたが、平日の昼下がりはスムーズに座れた。

国際会議に来ているらしき人たちが英語で話していた。カフェなので、お茶だけ飲んで帰る人も散見された。

 
10分ほど待つとチーズフォンデュが運ばれてきた。27.30CHF。

前回と違い、ワインやアルコールの香りは特にしなかった。

チーズがとてもとても柔らかかった。かき混ぜたら泡が立つかと思うほどだった。 溶けたチーズは弾力を失い、バゲットも容易に鍋底に沈んだ。

胡椒も合う。 バゲットは一度お代わりしたところで、チーズがなくなった。満腹になり、夕飯は要らなかった。

Bal-air駅から望むレマン湖にオブジェがあった。

  1. Café du Soleil

  2. カフェ
  3. 住所: Place du Petit-Saconnex 6, 1209 Genève
    営業時間:

    月曜日7時00分~0時00分
    火曜日7時00分~0時00分
    水曜日7時00分~0時00分
    木曜日7時00分~0時00分
    金曜日7時00分~0時00分
    土曜日10時00分~23時45分
    日曜日10時00分~23時00分
サイトTripAdvisor

Café du Soleilの行き方


Cornavin駅/Geneva駅前のバス停4番ホームからGardiolに乗り、Petit-Saconnexで降りる。約10分の乗車。
降りたら、坂を登ったところにお店が既に見えている。
Cornavin - (Bus no.3) - Petit-Saconnex

2014-12-11

孫正義という人

かっこいいね。ビジョンに向かって自分の人生を全うしようとしていて。なかなかそんな生き方できない。覚悟が座らない。自分がやるべきことだと思ってやれず、何となく就いた仕事や紹介されたものに乗っかって生きてたら時間が過ぎていくのだよな。

「下位10パーセントは自動で退学」 孫正義氏の後継者を争うサバイバルレース、ソフトバンクアカデミアの苛酷さ

2014-12-10

December 6-7, 2014 ハンガリー ブダペスト旅行, Budapest, Hungry

December 6-7, 2014 in ブダペスト
セーチェーニ温泉でチェスをする人々

Amazon Linux (AWS) ec2にPython3をインストール

Aamazon Web Service ec2 に Python3 をインストールする


何度もインストールが不完全に終わりましたが、やっとできた。
ec2にはデフォルトで 2.6.9 がインストールされています。
LINUXは初心者。
AWS (LINUX Server) にsshでログインした後の話です (WindowsOS使ってるのでcygwinで入りました)。
現在、最新のversionであるpython3.4.2をインストールしました。
今後のために覚書しておきます。
sudo は管理者権限でも実行コマンドです。これがないと Permission deniedが返ってきました。

コマンド

sudo wget http://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
sudo tar zxvf Python-3.4.2.tgz
cd Python-3.4.2
sudo ./configure
sudo yum install gcc
sudo make
sudo make install
export PATH=$PATH:/usr/local/bin/python3

できた

$ python3
Python 3.4.2 (default, Dec  9 2014, 18:54:09)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

2014-12-09

Windows7(64bit) C++コンパイラーを入れる

Pythonのモジュール、Cython, numba, MeCabなどのためにC++コンパイラーが必要だったのだが、難しすぎた。先週いっぱい使ったが不可能なのか。Pythonを64bitから32bitにインストールし直したが、うまくいかなかった。

Pythonコミュニティでも議論して様々に話されているが、結論が出ていなかったりする。
Visual Studio ExpressやSDKやService Pack1や、SP1の拡張版など、適切な順番と設定でインストールしなければならないらしく、またパスも設定しなければならないらしい。というのも、新たにインストールしたものが、既存の大事なファイルを消してしまったりするからだ。いくつかのページに書いてある通りに試したが、うまくいかない。やるたびに新しいエラーに出会う。

くっそー。諦めモード。

2014-12-04

フランスでチーズ・フォンデュ作った

チーズ・フォンデュを料理した



せっかくフランスにいるのだから、チーズ・フォンデュを作ってみることにした。チーズ溶かすだけだし、外で食べるより安いだろうし、ノウハウ身につけようということで。

2014-12-02

November 30, 2014 ベルギー ブリュッセル半日旅行記 (日帰りアムステルダムの後) brussels belgium

November 30, 2014
29日の早朝にジュネーヴを出て、朝7時頃にブリュッセル着いたが、すぐにアムステルダムに向かった。そして、夜中11時にアムステルダムから戻った。およそ無計画な旅行で、ホテルは取ってなかった。野宿するつもりだった。しかし、予想外の寒さだった。

ブリュッセル中央駅で泊まろうとしたら、0時45分にはゲート締めると駅員に言われた。駅付近のホテルは安くて1900EURO (2.8万円)もする。それでも凍え死ぬよりはマシかと思ったが、全て満室だった。

駅で19歳のシンガポール出身の女性バレリーナと話した。かっこよい人だった。16歳でロンドンにバレエ留学。飛び級して、周囲が大学に入る頃に大学を卒業。現在はコンテンポラリー・バレエをやっていると話していた。「バレエ学校というのは世界各地から生徒が来ている。だから私にはヨーロッパ各地に友達がいる。だからホテル泊まらなくても行く先々で友人の家に泊まれる。」と話していたが、よくわからなかった。バレエ学校の人はバレエ学校の近辺に住んでいるんじゃないのか。卒業生の友人のことだろうか。それにしても、国際感覚が豊かだ。すばらしい。彼女の生き様はバレエで世界のどこでも生きていけることを証明しているようだった。

夜中のブリュッセル。中央駅から歩いて5分ほどのBouse駅付近。

November 29, 2024 オランダ アムステルダム六時間旅行記 Amsterdam, Holland

November 29, 2024
ブリュッセル二日間の予定を変更して、一日目はブリュッセルから日帰りでアムステルダム来ることにした。

高速列車タリスだと1'53、70EUROでブリュッセルとアムステルダムを結ぶ。ブリュッセル空港のおばさんに安くしたいと話したら、タリスではないが片道2'30、往復50EUROほどで切符を手配してくれた。40分ぐらい列車時間がのびても構わなかった。

アムステルダム中央駅の隅っこでジャズ弾いてる青年がいた。

中央駅。 オランダは歩いて回れると聞いてたので、路面電車トラムにも乗らずに過ごした。街なかを散策するのも楽しい。

CERNレストラン2

最近は曇り空の元気のない天気が続く。CERNの食堂は夏にも書いた気がする: http://naokiwatanabe.blogspot.com/2014/09/cern_55.html
レストランは2つあり、いずれも今日の料理コーナーや、ベジタリアンメニュー、パスタ、ピザなども用意されてるが、8-12CHFもする。肉料理は15CHFなど。なので、行くときはビュッフェコーナーで安く済ませるよう努めてる。スイスフラン (CHF) は2014年12月1日現在で122円だ。

今日は、朝ごはんを食べそこねたので、来てみた。ちなみに、レストランは1と2の二箇所があるので、今日の昼に来たのはレストラン2。なので、タイトルが若干紛らわしい。レストラン記事2枚目なのか、レストラン2の記事なのか。前回の記事もレストラン2だったので。。


食堂の二階。一階にもパスタやピザなどある。写真の右側がビュッフェコーナー。


フランスの家庭料理っぽいものが並ぶ


サーモンとハムを多めにとった。グラム計算なのだが、これでだいたい8CHFだった。

2014-12-01

[Python] scikit-learn 機械学習入門

scikit-learnの超入門

チュートリアルの最初を理解するのに時間かかったので、覚書のためにも書いておく。

sklearnには既にサンプルとして、数字の認識のテスト問題と答えが入っている。
サンプルのSVM (Support Vector Machine) で学習させ、ペイントで雑に描いた下の数字を判断させる。

上の画像は9のつもりで描いた。最初は横長だったので、サイズを8x8 pixelsの正方形に変形した。歪になった。機械学習はこれをちゃんと9として判断してくれるだろうか。

コード

from sklearn import datasets
from sklearn improt svm
from PIL import Image
digits = datasets.load_digits()
clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(digits.data, digits.target)
img = Image.open(r'Path\to\Image.png')
rgb = list(img.getdata())
len(rgb) # 64
lum = [0.299*i[0]+0.587*i[1]+0.114*i[2] for i in rgb]
len(lum) # 64
clf.predict(lum) # array([1])

import numpy as np
import matplotlib.pyplot as plt
lum = np.array(lum)
lum.shape = 8,8
plt.imshow(lum)
plt.colorbar()
plt.show()


SVMの学習と予想

1-3行目はライブラリのimport。
4行目はscikit-learnにもとから入ってる数字群を呼び出した。
64の配列と、それに対応した数字が1797セット入っている。
もともと、上のような荒っぽい上のような画像と対応する数字(target)が1797セットある。画像の方は、8x8ピクセルあり、白黒なので、64ピクセルそれぞれの輝度0-16を一列に並べた、長さ64の配列が1797あることで1797枚の画像を表現している。
5行目はSVMを呼び出し。こんなのが出てくる。

 SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
6行目は、各成0-16,で長さ64の配列と、対応する数字のペア1797個を学習させてる。
7行目は画像ファイルを呼び出し。今回の画像は自分で描きました。
8行目は画像ファイルのrgbを呼び出した。rgbは、[(r, g, b), (r, g, b), ..., (r,g,b)]というように、各ピクセルごとにタプルになって読み込まれる。
9行目。縦横8ピクセルずつなので、64の長さです。それぞれ3タプルあります。
10行目はLuminosity = 0.299R + 0.587G + 0.114B の 公式に従って、各ピクセルの輝度を読み込む。今回は白黒画像なのでR=G=Bなのだが、汎用性や後学のため。
11行目はlumの長さ。8x8サイズの白黒画像の輝度が64個入ってます。
12行目は学習したSVMで読み込んだ画像の数字を認識。9ではなく1になってしまった。

輝度から画像を表示

16行目でlistをnumpy.arrayに変換
17行目で64の長さの配列を8 x 8サイズに折り曲げる
18行目でカラーマップ作成。引数にcmap = cm.Greys_rを持たせると、グレースケールのマップになる。
plt.imshow(lum, cmap = cm.Greys_r)
19行目はなくてもよいが、ないと画像横のバーが出てこない。

参考文献



2014-11-29

[Python]pandasで時系列解析 -- Appe株価取得 --

pandasによる時系列解析 -- 株価取得とプロット --

フリー統計ソフトRのようなpythonのライブラリpandasを使って、試しにApple Inc.の株価を取得してプロットした。


import datetime
import pandas as pd
import pandas.io.data
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import matplotlib as mpl
pd.__version__

yesterday = datetime.datetime.today() - datetime.timedelta(1)

# get Apple Inc. (AAPL)'s Stock history during January 1, 2004 to yesterday
aapl = pd.io.data.get_data_yahoo('AAPL',
                                 start=datetime.datetime(2004, 1, 1),
                                 end=datetime.datetime(yesterday.year, yesterday.month, yesterday.day))
mavg = pd.rolling_mean(aapl['Adj Close'], 30) # calculate a moving average for 30 days

# plot
fig, ax = plt.subplots(1)
fig.autofmt_xdate() #beautify x-ticks with rotating and aligning it
ax.plot(aapl.index, aapl['Adj Close'], label='AAPL')
ax.plot(mavg.index, mavg, label='MAVG')]
# or plot_date with fmt='-', not linestyle
#ax.plot_date(aapl.index, aapl['Adj Close'], fmt='-', label='AAPL')
#ax.plot_date(mavg.index, mavg, fmt='-', label='MAVG AAPL')
ax.grid(True)
ax.legend(framealpha=0) # set a legend and make it transparent
ax.set_title('Apple Inc. Stock')
fig.savefig('AAPLStock')
# or if just like to do interactively, without setting a fig and an ax object oriented
#aapl['Adj Close'].plot()
#mavg.plot()
plt.show()





今後行うこと

  • 機械学習にかけて未来予測
  • リアルタイム取得
  • 自動売買
  • FXレートのリアルタイム取得



参考文献

2014-11-28

【就活】ウェブテストの計算問題をプログラミングで解く

手作業で解くよりプログラムすぐに書いたほうが簡単なことも。制限時間ある中でもiPython使って対話的に動かす方が、紙とペンと電卓よりも早いことがある。

例題:80, 50, 10円切手が5枚ずつある。それぞれ0~5枚使って200円を作るには何通りか

 
for i in range(6):
     for j in range(6):
         for k in range(6):
             if 80*i+50*j+10*k==200:
                 print(i,j,k)

0 3 5
0 4 0
1 2 2
2 0 4
と返ってくる。
切手を使って作れる金額を片っ端から調べあげて200になるものを抜き出すと、
80, 50, 10円切手がそれぞれ0枚、3枚、5枚の場合から2枚、0枚、4枚の場合まで4通り。

例題: 5円玉と10円玉がある。枚数は合わせて40枚で、金額の合計は275円になる。5円玉は何枚か。


from sympy import *
x, y, z = symbols('x y z')
solve([x+y-40,5*x+10*y-275],[x,y])

{x: 25, y: 15}
と返ってくる。 x, yを5円玉、10円玉の枚数にした。solveの第一変数にある数式は、それぞれ0になるように書く。
sympyでは変数として使う文字をsymbolizeしておく必要がある。zは使わなかったが、後々使うかもしれないことを考慮して一緒にsymbolizeした。
この程度だと、頭で解くのも、紙に書くのも同じぐらいのスピードかもしれない。

あと、ウェブテストには変数の数が式の数より多い最適化問題もあるので、simplex methodもすぐ使えると便利なのかもしれない。そこまでいくと、頭で計算するかタイピングがどちらが早いかわからないけど。

2014-11-27

Skype家庭教師を再開します

スイスでもSkype家庭教師の仕事を始められることになった。


日本にいるときからSkypeの授業をしていた。友人が半年ほどまえに立ち上げたベンチャー企業だ。生徒一人あたり15分/日を毎日Skype通話して、勉強の進捗を確認する。勉強をどうやったらいいのかわからない生徒がたくさんいる。例えば、のんべんだらりと英単語を書き写したり、英文法に半年も計画したりする生徒がいる。そういうのを治していく。今の生徒は数十人いて、東大や医学部を目指している。

スイスは時差があるからダメだと社長に言われていたが、生徒からの熱烈な要望があって時差を考慮しつつ授業を再開することになった。うれしいね。

でも、簡単に学歴が武器になる教育産業にいつまでもしがみついていてはダメだから、嬉しい半面、大学入ったときから進歩してないような気もする。ただ、この仕事は、毎日人に指摘することで、自分が毎日やることやっていないと、とてもいたたまれなくなる。自分もがんばらなければという気になる。上に上がらないと。


2014-11-26

CERNまた来た

24e Novembre, 2014

ケーブル作業のために呼ばれたけど、僕が着いたときには終わってました。とりあえず、自分の研究進めることに。12月下旬に帰ります。

24日朝、成田にて。朝は本当にギリギリだった。最近、昼はまじめに授業受け、夜はバイトの生活だった。研究は全然進まないリズムになっていた。渡航の日はレポートを書いていたら9割ほど書いたとこで寝てしまい、起きたら出発二時間前。急いで擱筆した。急いで荷造りした。急いで向かった。

2014-11-15

古本の買い取り比較

古本の買い取り比較

古本を買い取ってもらった。本棚6段は売った。スーパーの段ボールには30冊ほどしか入らなかった。サイズは着払いなので気にしてなかったので、どのサイズで30冊なのか不明。

未使用の大学受験参考書が大部分を占めた。他、英語の学習書や大学の教養程度の専門書。

写真はイメージ。

専門書買い取りネット

 3,935円 (段ボール箱2箱で81冊、うちセンター必勝マニュアル9冊, 赤本と25ヶ年で6冊、鉄緑の過去問2冊).

振込氏名はギークス。一冊あたり50円。

鉄緑の過去問は数学、国語で4,000円/冊*2冊=8,000円だったので、その二冊でも81冊の買取価格の倍にもならない。

査定後に本人確認コードが届き、それをホームページで入力する必要がある。引っ越ししたくて売ってるのに、引っ越しが長引いて面倒なシステムだ。

2014-11-14

古着の買い取り比較

古着の買い取り比較

数社でノーブランドからブランドまで古着を買い取ってもらったので比較のために掲載した。ブランディアの買取詳細はページ下部に記した。

写真上は今回の取引には登場しない。たしかショートトレンチ裏地ドットは10万円だったか。

ブランディア

14,780円 (COMME des GARCONS HOMME PLUS 2010ss中心に17点うち2点破棄)
1,640円 (COMME des GARCONS HOMME PLUS のクロップドパンツとシャツパーカー)

初回は送付先の印字された伝票段ボール送ってもらう必要があって面倒だった。住所教えてくれれば書いて送るのに。伝票と一緒に本人確認コードが郵送され、査定後にそれをマイページで入力して本人確認する。ここは対応が非常に早かった。他では1周間以上かかったのに、到着の翌日には査定が出ていた。

詳細は下記に続く。

計画的偶発性のすすめ~キャリアプランや進路に迷うとき~

キャリアプランは思い通りにいかない

キャリアプランに悩むのは人間に共通でしょう。大学受験、就職活動、転職、夢、あこがれ、やりたいことが見つからないなど、様々な問題や時期があります。




2014-11-10

【Skypeを電話に代えて】誰からかかってきたかわからない

携帯が盗まれたので白ロムとSkypeで代用していたのだが、わりと不便が多い。

今日は、かかってきた電話番号が誰かわからないことについて。

2014-11-06

[Python] scikit-learn.datasetsが読み込めない ImportError: DLL load failed: The specified module could not be found.

Python3.4win32bitでsklearn.datasetsをimportできない


numpy, scipyがあるのに
import sklearn.datasets
が読み込めない。読み込もうとすると、次の文で終わるエラーログが吐き出される。

from scipy.linalg import _fblas

ImportError: DLL load failed: The specified module could not be found.

ここ読んで解決
error-importing-scipy-linalg-on-windows-python-3-3

ここ http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy-stack から
scipy-stackのインストーラーをダウンロードして実行するだけ。少し時間かかる。

2014-11-05

Galaxy SII wimax (android4.0.4) のroot化 

root化する理由


プレインストールのアプリが邪魔だったから。僕はスマートフォンでゲームもしない、
映画も観ない、本も読まない、ニュースも読まない、音楽も聞かない。デフォルトで入っているオリコンやGREEのアプリやニュース配信アプリなど、全く使ったことがなかった。容量を食うだけで邪魔だし、なくなっても他のアプリにも影響与えなさそうなので、前から消し去りたかった。そうすれば、不要なアプリの自動アップデートにも出会わず済むだろう(なぜか停止させてもGoogle MoviesやBooksはアップデートを始めることがあり困っていた)。

デフォルトアプリは挙動を停止させることはできるが、アンインストールさせる場合はパーミッションが必要だ。そこで、root権限で操作するため、スマートフォンをroot化した。windowsの「管理者として実行」やLinuxの"sudo"コマンドと違い、一度root化してしまえば、その後もずっとrootとして起動されるらしい。

機種やandroid versionによってroot化の手順は違い、またroot化できないものもあるので、そこは注意しないといけない。

参考にしたサイト

galaxyシリーズならほとんど同じようにできるらしい。Superuser-3.1.3-arm-signed.zipは"Superuser-3.1.3-arm-signed"で検索すれば一番上に.zipのURLが出てくる。ダウンロードしたSuperuser-3.1.3-arm-signed.zipをsdカードにうつすには、デフォルトの機能では不可能らしい。Yahoo!ファイルマネージャーを使った。パソコンにUSBで接続してもできるが、その方が手間かかるだろう。
  1. Superuser-3.1.3-arm-signed.zipをダウンロードしてsdカードに移動
  2. 再起動し、電源ボタン+音量アップボタン+ホームボタンを押しながらauマークが出るのを待つ
  3. recovery modeで起動するので、
  4. [音量ボタン下] を押して apply update from external storage にカーソル合わせ  [電源ボタン] 音量ボタンを上下して Superuser-3.1.3-arm-signed.zip にカーソル合わせ [電源ボタン] (external_sd直下にSuperuser-3.1.3-arm-signed.zipを移動していた場合)
  5. インストールが始まる (zipの解凍できるんだ)
  6. ../ を [電源ボタン] で選択し、前画面に戻り、
  7. reboot system now を[電源ボタン]で選ぶ。再起動が始まり、通常と同じように起動させる。
  8. アプリ一覧にSuperUserが追加されている (root化完了)
  9. Titanium Backupを起動すると、探索してSmartUserを探り当てるので、使用を許可する
androidのversion次第では、上記サイトのやり方ではないみたい。

アプリを凍結して様子見てからアンインストール

アプリのアンインストールは、不具合が怖いので、Freezeさせて動かなくして、数日様子を見てからuninstallするのがよさそう。
とりあえず、GREEのアプリは遂にアンインストールできました!わーい

AmazonEC2にPython3.4をインストール

Amazon ec2にPython3.4をインストール
今後のための覚書。デフォルトではec2にPython2.6がインストールされている。

2014-10-22

Skype番号通知がなされない

電話番号をSkypeに変えて

写真上: 日本がリストにない


wifi-ルーターとスカイプ番号050-で生活して一ヶ月弱、基本的には問題はないが、少し困ったことがある。発信者番号を通知できず、迷惑電話と間違えられ、電話出てもらえないことがある。とても不便。

2014-10-18

Python 33->34 Upgrade 移行

Python 3.3 を 3.4 に移行した



環境は Windows 8 (64bit) で installしていたPython は 3.3 (32bit)。問題があって、
u'test'.encode('ascii')
 と入力すると、asciiエンコーディングが欠損しているらしく、
 "LookupError: unknown encoding: ascii"
のような返事が返ってくる。このせいでpandasをinstallできない。そこで、この機会にpythonを3.3から3.4に移行してスッキリした。備忘録も兼ねて記録。

2014-10-02

Python アスキーアートを作った

追記: 続きでは、AAの横幅が半分になる問題を解決しました。joinを使うのをやめました。

先日CERNから帰ったばかりだが、さっそく宮崎出張。飛行機が早朝のため、成田空港で夜を明かす間、Python Image Library (PIL) を使ってアスキーアートを作りました。画像やフォントサイズの仕組みなど、いい勉強になった。
参考にしたのはこちらのサイト。お世話になりました。
from PIL import Image
import os

def image2ascii(input_image):
    from PIL import Image, ImageDraw, ImageFont
    w, h = input_image.size
    character, line = "", []
    fontsize = 10
    DIV = w//fontsize
    font = ImageFont.truetype("C:/Windows/Fonts/msgothic.ttc", fontsize, encoding="utf-8")
    input_pix = input_image.load()
    output_image = Image.new("RGBA", (w, h), (255,255,255))
    draw = ImageDraw.Draw(output_image)

    for y in range(0, h, fontsize):
        line = []
        for x in range(0, w, fontsize):
            r, g, b = input_pix[x, y]
            gray = r*0.2126 + g*0.7152 + b*0.0722
            if gray > 250:
                character = " "
            elif gray > 230:
                character = "`"
            elif gray > 200:
                character = ":"
            elif gray > 175:
                character = "*"
            elif gray > 150:
                character = "+"
            elif gray > 125:
                character = "#"
            elif gray > 50:
                character = "W"
            line.append(character)
        draw.text((0, y), "".join(line), font = font, fill="#000000")
        print("".join(line), end='\n')
    return output_image

if __name__ == "__main__":
    filename='Mona_Lisa.jpg'
    input_image = Image.open(filename)
    output_image = image2ascii(input_image)
    output_image.save(os.path.splitext(filename)[0]+'_AA.png')


2014-09-28

今度はお金盗まれた

飲み会の二次会でカバンの中の財布から万札が数枚抜き取られていた。
誰が犯人かなどわからず、お札には名前も書いてないので為す術がない。
人間の所有という概念はどこから来るのだろう。僕がルソーだったら、いよいよ私有財産の概念がいかに人間をダメにしたかつらつら書くところだった。
盗まれた携帯の機種変更や国内旅行に使うお金だった。
この世には、盗まれた携帯の為に工面したお金が盗まれるような災難があるのか。
この程度を気にしない、一兆、二兆円と数える大人になりたい。

2014-09-25

MeCab-Python導入

Python33にMeCab導入

MeCabは自然言語処理に使われる。作者が食べ物のメカブ好きなので名前がついた。
(追記2015年12月9日) 環境はPython 32bit。Python64bitへの導入は挫折しました。

手順

WindowsにPython33に導入するには、

  1. ここからmecab-0.996.exeをダウンロード、実行。文字コードはpythonデフォルトのutf-8にしないと後で再インストールすることになる。
  2. Python2系用のMeCab-Pythonをダウンロードする。
  3. setup.pyをPython3用、windows用に書き換える (下記参照)
  4. Python setup.py installをコマンドプロンプト、もしくは何かしらのターミナルで実行。
  5. そこで、 C:\Python33\Lib\site-packages 内に C:\Program Files (x86)\MeCab\bin\libmecab.dll をコピー。
参考文献にあるようなmecab.hに追記は必要なかった。

VISUAL STUDIO 2010 EXPRESS,
WINDOWS SDK (windows 7, 8用がそれぞれある)
の順番でインストールする必要あり

追記(Feb 2, 2015): 3では次のように書き換えた。
今回、MeCabがインストールされているのはProgram Files (x86)直下であった。

 
#!/usr/bin/env python
 
from distutils.core import setup,Extension,os

def cmd1(str):
    return os.popen(str).readlines()[0][:-1]

def cmd2(str):
    return cmd1(str).split() 

setup(name = "mecab-python",
        version = "0.996",
        py_modules=["MeCab"],
        ext_modules = [
                Extension("_MeCab",
                        ["MeCab_wrap.cxx",],
                        include_dirs=[r"C:\Program Files (x86)\MeCab\sdk"],
                        library_dirs=[r"C:\Program Files (x86)\MeCab\sdk"],
                        libraries=["libmecab"])
                        ])


これでimport MeCab -versionとすれば、インストールできたかどうか確認できる。

メカブのインストールフォルダにパスを通すと引用元には書いてあるが、その場合コマンドプロンプトからはimport MeCabができたが、Python IDLE上ではdllファイルが見つからないと言われた。

とりあえず使ってみる


import MeCab

m = MeCab.Tagger('-Ochasen')

print(m.parse('国境の長いトンネルを抜けるとそこは雪国だった'))
と入力すると

国境    コッキョウ      国境    名詞-一般
の      ノ      の      助詞-格助詞-一般
長い    ナガイ  長い    形容詞-自立     形容詞・アウオ段        基本形
トンネル        トンネル        トンネル        名詞-一般
を      ヲ      を      助詞-格助詞-一般
抜ける  ヌケル  抜ける  動詞-自立       一段    基本形
と      ト      と      助詞-接続助詞
そこ    ソコ    そこ    名詞-代名詞-一般
は      ハ      は      助詞-係助詞
雪国    ユキグニ        雪国    名詞-一般
だっ    ダッ    だ      助動詞  特殊・ダ        連用タ接続
た      タ      た      助動詞  特殊・タ        基本形
EOS


fatal error C1083: include ファイルを開けません。'mecab.h': No such file or directory

(February 1, 2015 追記)

Python 3.4にインストールしようとしたら、次のエラーを受け取った。カレントディレクトリをsetup.pyのあるところまで移動して、setup.pyを実行することで解決。どうやら、setup.pyはカレントディレクトリで動くようだ。
running install
running build
running build_py
running build_ext
building '_MeCab' extension
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.exe /c /nologo /Ox
 /MD /W3 /GS- /DNDEBUG "-IC:\Program Files\MeCab\sdk" -Ic:\Python_venv\include -
IC:\Python34\include -IC:\Python34\include /TpMeCab_wrap.cxx /Fobuild\temp.win32
-3.4\Release\MeCab_wrap.obj
MeCab_wrap.cxx(3052) : fatal error C1083: include ファイルを開けません。'mecab.h
': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN\\
cl.exe' failed with exit status 2

UnicodeDecodeError: 'utf-8' codec can't decode bytes

(February 2, 2015 追記)

setup.pyの中身が間違っていた。上記のコードを上書きしたところ、うまくインストールできた。pip freezeを見てもmecab-pythonが入っている。エラー内容は下記。

>>> m.parse('あ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".\MeCab.py", line 281, in parse
    def parse(self, *args): return _MeCab.Tagger_parse(self, *args)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: invalid co
ntinuation byte

インストールできた

MeCabを辞書utf-8にするのに注意してインストールし直し、再びpython setup.py installでpythonにインストールしたところ、動くようになりました。

チーズ STILTON スティルトン

STILTON スティルトン




イギリスの誇るスティルトン。エリザベス女王の大好物。三大ブルーチーズの一つ。食べ比べたところ、さっぱりしたゴルゴンゾーラと、強いフォックフォールの間に位置する印象。若干水分は少なく固めで、マーブルな青カビが特徴。雪印ホームページによると、

かつてロンドンから北上する幹線道路沿いにある町・スティルトンの旅館で旅人に販売されるようになり、そこからこのスティルトンが有名になったと言われています。
地元イギリスではクリスマスプレゼントとして、銀のポットに入れたスティルトンをクリスマスプディングと一緒に贈る慣わしがあります。- スティルトン(スチルトン) | チーズ豆辞典 | チーズ辞典 | チーズクラブ | 雪印メグミルク株式会社

ということで、日本のケンタッキーのようなものらしい。

2014-09-24

ジュネーヴ Auberge de Savièse フォンデュ・シノワーズ

Auberge de Savièse フォンデュ・シノワーズ (Chinese Fondue, Fondue au Chinois)

 スイスのしゃぶしゃぶ。ブイヨンスープに薄切り肉を浸し、数種類のソースで食べる。中国風という名前は勘違いから名付けられたらしい。昨日と同じくAuberge de Savièseへ向かった。




2014-09-23

ジュネーヴ Auberge de Savièse チーズ・フォンデュ

September 22, 2014

Auberge de Saviese の チーズフォンデュ (Cheese Fondues, Fondue Fromage)

レストランのホームページ: http://www.aubergedesaviese.ch/

ジュネーヴ中心駅Cornavinから迷わず歩いて10分以内のリーズナブルな人気店 Auberge de Saviese へチーズ・フォンデュを食べてきた。

September 22, 2014 国際連合ジュネーブ事務局 Palais des Nations

September 22, 2014 at Palais des Nations

国際連合のジュネーブ事務局へ行ってきた。

2014-09-22

チーズ GORGONZORA ゴルゴンゾーラ

GORGONZORA

ロックフォールにはまって、他のブルーチーズも試したく思い、三大ブルーチーズと称せられるうちの一つ、イタリアのゴルゴンゾーラを買ってみた。ロンバルディア州とピエモンテ州をまたがる地域で生産される。ドルチェ (甘口) とピカンテ (辛口) があるらしい。どちらを食べたのかはわからない。



他のチーズに比べても半額ほどの価格。11.75EUROS/kg = 1600円/kg。おなじみ、世界のチーズ専門店「オーダーチーズ・ドットコム」では8000円/kg。やはりフランスの四倍近い値段だ。最近、もはや自分がオーダーチーズ・ドットコムのまわしものみたいだが、違う。日本のチーズがネットショップですら、この値段ということに、みなに驚愕してほしいのだ。

味は、ブルーチーズという割に、とても控えめ。マイルド。ロックフォールに比べると、物足りない――僕は何でもロックフォールと比べては物足りないと言っている気がする――。なんて食べやすいんだろう。ブルーチーズ苦手な人も試してみるといい。他のものと食べ合わせても、味を損ないそうにはない。

日本にいるころはチーズなんか好きでもなく、消しゴムのようなプロセスチーズしか食べたことがなかった。スペンサー・ジョンソン「チーズはどこへ消えた?」の表紙にあるような穴ぼこチーズなんて写真すら見たことがなかった。こちらに来て、あまりに豊富な種類のチーズに圧倒された。ハマった。食の世界が広がった。食文化にボーダーなんてもったいない。日本の人にももっとチーズを試してみてほしいと思う。あー、日本にロンバルティア州やビエモンテ州が来日しないかなあ。

チーズ TOMME de SAVOI トム・ド・サヴォワ

TOMME de SAVOIE

これもスーパーでよく見かけるので買ってみたチーズ。



フランス東部サヴォア地方で作られる小型チーズ。調べると、クルミを初めとした木の実の香りがおいしいチーズなどと書いてあったが、全然わからなかった。ゴムみたいなチーズだった。セミハードはこういうものなのだろうか。ゴツゴツした皮はおいしくなかった。

チーズ BERGADER

BERGADER ベルガーダ・ブルー

イビサ島での昼食から。

Edelpilz (エーデルピルツ)とは青かびのことで、Bergader (べルガーダ) というブランド、商品名。ドイツのブルーチーズ。おいしかった。しょっぱかった。一気に食べるものじゃなかった。具合悪くなってしまった。手はびちゃびちゃになった。ロックフォールチーズよりも塩気が強いかもしれない。

チーズ ROQUEFORT ロックフォールチーズ

ROQUEFORT

フランスを代表するブルーチーズ。日本ではイタリアのゴルゴンゾーラ、イギリスのスティルトンと並び三大ブルーチーズを評されている。フランス西部のロックフォール洞窟で作られたものしかロックフォールとは呼べない。値段は手頃。1kgで14ユーロ程度、写真の大きさなら1ユーロと少しぐらい。ちなみに、最近は1ユーロ147円ぐらい。



非情に塩気が強く、ブルーチーズとしても風味も強い。初めて食べると、これは何かと思い戸惑う。そこで、少しずつ食べてみる。すると、だんだん慣れてくる。他のチーズでは刺激が足りなくなってる。こうしてハマった。ブルーチーズが今までよくわからなかったが、初めておいしいと思った。他のチーズも食べ比べたが、ロックフォールが優勝。今では一口食べると止まらず、一気に100gは食べてしまう。もはや感動的。フランス食文化に感服。さすが美食術が無形文化遺産に登録される国だ。

アルバムを掘り返したが、好んで食べていた割にこんな画像しかなかった。

日本では、やはり10倍ほどの値段+送料
http://www.order-cheese.com/order/501.html
高すぎる。泣いちゃう。

チーズ SAINT AGUR サンタギュール

SAINT AGUR

日本語ではサンタギュールと書くらしい。サンタギューじゃなくて語末のrは発音しちゃうのか。よくわからない。これは安価なブルーチーズ。


三大ブルーチーズに比べて、日本で食べ慣れているチーズの味がした。あまりしょっぱくない。ブルーチーズだが、食べやすい。ロックフォールにハマっている人には、物足りないかもしれない。と言いつつ、一気に全部食べてしまった。2ユーロしなかったと思う。300円もしない。日本で食べるにはと思って、楽天や直売を調べると、全くパッケージも同じものが送料抜きで1500円や2000円で売られている。


いやー、笑っちゃうね。君たち、高すぎ。全然事情は知らないが、これは「日本の農家を守るためチーズの関税が高い」ということなのか?帰国したらブルーチーズ高すぎてもう食べられないのか?食文化に国境があるのは悲しい。


チーズ SAINT MARCELLIN サン・マルスラン

Saint Marcellin


山羊のチーズ。サン・マルスラン。スーパーで安いから買ってみたが、有名なものらしい。ルイ11世が山で熊に襲われ、このチーズを食べて回復したのだとか。

シェーブルのような白さ。舌にざらつく。山羊らしい香りや風味があるが、嫌ではない。それでも、あまり好きではない。あまりたくさんは食べられないかもしれない。熟成するとスプーンですくえないくらい、とろけるらしい。

10分でパンを作る

帰国前に小麦粉が余って仕方ないので簡単なパンを作った。
小麦粉とオリーブオイルと水をコップに入れ、スプーンでかき混ぜて、90秒レンチン。



飲食店への商品持ち込みを批判する人への反論

持ち込み商品の反対意見について反反論がある。持ち込み商品については、それはマナー違反だからと言う人が多い。商品を持ち込んでいる客がいると、注意したところでバイト代の上がらないバイト、給料の上がらない正社員は注意をし、さらに周りの客でも注意をする人がいる。彼らにその理由を聞くと、「...