ipython notebook 1.0からは、Markdownに表を書く機能が追加されました。 しかし、以降の文書にもまだ利用価値があると思いますので、このコンテンツは削除せずに残しておきます。
ipython notebookに付随しているMarkdownという軽量マークアップ言語には表を書く機能がついていません。
実は、拡張されたMarkdownの方言には表の機能があるのですが、ipython notebookは現時点ではこの機能を採用していないのです。
ところが、
markdownというpythonのモジュールを用いれば、データを簡単に表にすることができますので、紹介しましょう。
まずは、拡張されたMarkdownの紹介から。
column 0 | column 1 | column2 ------------- |---------------| --------- abc | 1 | 1 def | 2 | 4 ghi | 3 | 9
上のようなテキストを拡張されたMarkdownはhtmlに変換します。
<table> <thead> <tr> <th>column 0</th> <th>column 1</th> <th>column2</th> </tr> </thead> <tbody> <tr> <td>abc</td> <td>1</td> <td>1</td> </tr> <tr> <td>def</td> <td>2</td> <td>4</td> </tr> <tr> <td>ghi</td> <td>3</td> <td>9</td> </tr> </tbody> </table>
このセルを単純にMarkdownに変更すれば、Markdownがhtmlの表を認識して、以下のようになります。
column 0 | column 1 | column2 |
---|---|---|
abc | 1 | 1 |
def | 2 | 4 |
ghi | 3 | 9 |
それでは、markdownというモジュールを用いて実演しましょう。 まずは、上のようなテキストを下記のように、一旦ファイルに保存してから、変数に代入します。 先頭行はipythonの Cell Magic と呼ばれる機能で、ファイルにセルの内容を書き出します。
%%file tmp.txt
column 0 | column 1 | column2
------------- |---------------| ---------
abc | 1 | 1
def | 2 | 4
ghi | 3 | 9
Overwriting tmp.txt
f=open('tmp.txt')
text=f.read()
print text
column 0 | column 1 | column2 ------------- |---------------| --------- abc | 1 | 1 def | 2 | 4 ghi | 3 | 9
つぎに、makdownというモジュールを用いて、これをhtmlに変換します。
import markdown
html=markdown.markdown(text, ['tables'])
これで、htmlができました。これをipython notebookに表示するには、下記のようにします。
from IPython.core.display import HTML
HTML(html)
column 0 | column 1 | column2 |
---|---|---|
abc | 1 | 1 |
def | 2 | 4 |
ghi | 3 | 9 |
拡張されたMarkdownの表は書き方が簡単なので、以下のように、数値データを簡単に表にすることができます。
x=np.arange(0,360,5)
y=np.cos(x/180.0*np.pi)
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x47c4950>]
text="No. | "+r"$\theta$"+"(degree) | "+r"$\cos \theta$"+"\n"
text+="-|-|- \n"
for i,(_x,_y) in enumerate(zip(x,y)):
text+=str(i)+"|"+str(_x)+"|"+str(_y)+" \n"
html=markdown.markdown(text, ['tables'])
HTML(html)
No. | $\theta$(degree) | $\cos \theta$ |
---|---|---|
0 | 0 | 1.0 |
1 | 5 | 0.996194698092 |
2 | 10 | 0.984807753012 |
3 | 15 | 0.965925826289 |
4 | 20 | 0.939692620786 |
5 | 25 | 0.906307787037 |
6 | 30 | 0.866025403784 |
7 | 35 | 0.819152044289 |
8 | 40 | 0.766044443119 |
9 | 45 | 0.707106781187 |
10 | 50 | 0.642787609687 |
11 | 55 | 0.573576436351 |
12 | 60 | 0.5 |
13 | 65 | 0.422618261741 |
14 | 70 | 0.342020143326 |
15 | 75 | 0.258819045103 |
16 | 80 | 0.173648177667 |
17 | 85 | 0.0871557427477 |
18 | 90 | 6.12323399574e-17 |
19 | 95 | -0.0871557427477 |
20 | 100 | -0.173648177667 |
21 | 105 | -0.258819045103 |
22 | 110 | -0.342020143326 |
23 | 115 | -0.422618261741 |
24 | 120 | -0.5 |
25 | 125 | -0.573576436351 |
26 | 130 | -0.642787609687 |
27 | 135 | -0.707106781187 |
28 | 140 | -0.766044443119 |
29 | 145 | -0.819152044289 |
30 | 150 | -0.866025403784 |
31 | 155 | -0.906307787037 |
32 | 160 | -0.939692620786 |
33 | 165 | -0.965925826289 |
34 | 170 | -0.984807753012 |
35 | 175 | -0.996194698092 |
36 | 180 | -1.0 |
37 | 185 | -0.996194698092 |
38 | 190 | -0.984807753012 |
39 | 195 | -0.965925826289 |
40 | 200 | -0.939692620786 |
41 | 205 | -0.906307787037 |
42 | 210 | -0.866025403784 |
43 | 215 | -0.819152044289 |
44 | 220 | -0.766044443119 |
45 | 225 | -0.707106781187 |
46 | 230 | -0.642787609687 |
47 | 235 | -0.573576436351 |
48 | 240 | -0.5 |
49 | 245 | -0.422618261741 |
50 | 250 | -0.342020143326 |
51 | 255 | -0.258819045103 |
52 | 260 | -0.173648177667 |
53 | 265 | -0.0871557427477 |
54 | 270 | -1.83697019872e-16 |
55 | 275 | 0.0871557427477 |
56 | 280 | 0.173648177667 |
57 | 285 | 0.258819045103 |
58 | 290 | 0.342020143326 |
59 | 295 | 0.422618261741 |
60 | 300 | 0.5 |
61 | 305 | 0.573576436351 |
62 | 310 | 0.642787609687 |
63 | 315 | 0.707106781187 |
64 | 320 | 0.766044443119 |
65 | 325 | 0.819152044289 |
66 | 330 | 0.866025403784 |
67 | 335 | 0.906307787037 |
68 | 340 | 0.939692620786 |
69 | 345 | 0.965925826289 |
70 | 350 | 0.984807753012 |
71 | 355 | 0.996194698092 |
今回はデータを作りましたが、勿論、データファイルを開いて、表にしても便利でしょう。 作った表は表計算ソフトにそのまま貼り付けることもできるようなので、エクセルなどへのデータの簡易な引渡し方法にもなると思います。
蛇足ですが、表計算ソフト側からのデータの受け取りも試してみましょう。 下のセルは、表計算ソフトのデータをコピーして、セル上にペーストしたもので、一番上の行は手で入力したのもです。
%%file tmp.txt
No. θ (degree) cosθ
0 0 1
1 5 0.9961946981
2 10 0.984807753
3 15 0.9659258263
4 20 0.9396926208
5 25 0.906307787
Overwriting tmp.txt
data=np.loadtxt('tmp.txt',skiprows=1, delimiter='\t')
data
array([[ 0. , 0. , 1. ], [ 1. , 5. , 0.9961947 ], [ 2. , 10. , 0.98480775], [ 3. , 15. , 0.96592583], [ 4. , 20. , 0.93969262], [ 5. , 25. , 0.90630779]])
表計算ソフトからテキストファイルを出力するより、手軽な気がしませんか? 勿論、データ量が多い場合には適しませんが。