

# マジックコマンドを使用する
<a name="notebooks-spark-magics"></a>

マジックコマンド、またはマジックは、ノートブックのセルで実行できる特別なコマンドです。例えば、`%env` はノートブックセッションの環境変数を表示します。Athena は IPython 6.0.3 のマジック関数をサポートしています。

このセクションでは、Athena for Apache Spark 用の主要なマジックコマンドをいくつか取り上げて説明します。
+  Athena のマジックコマンドのリストを表示するには、ノートブックのセルでコマンド **%lsmagic** を実行します。
+ Athena ノートブックでマジックを使ってグラフを作成する方法については、[マジックを使用してデータグラフを作成する](notebooks-spark-magics-graphs.md) を参照してください。
+ その他のマジックコマンドの詳細については、IPython ドキュメントの「[組み込みマジックコマンド](https://ipython.readthedocs.io/en/stable/interactive/magics.html)」を参照してください。

**注記**  
現在、`%pip` コマンドを実行すると失敗します。これは既知の問題です。

**Topics**
+ [セルマジック](notebooks-spark-magics-cell-magics.md)
+ [ラインマジック](notebooks-spark-magics-line-magics.md)
+ [グラフマジック](notebooks-spark-magics-graphs.md)

# セルマジックを使用する
<a name="notebooks-spark-magics-cell-magics"></a>

数行にまたがって書かれたマジックでは、その前に二重パーセント記号 (`%%`) が付き、セルマジック関数またはセルマジックと呼ばれます。

## %%sql
<a name="notebooks-spark-magics-sql"></a>

このセルマジックを使用することで、Spark SQL ステートメントで修飾する必要なく、直接 SQL ステートメントを実行することができます。また、このコマンドは、返されたデータフレームで `.show()` を黙示的に呼び出すことで出力も表示します。

![\[%%sql の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-1.png)


この `%%sql` コマンドは、自動的に列出力を 20 文字で切り捨てます。現在、この設定は構成されていません。この制限を回避するには、次の完全な構文を使用し、それに応じて `show` メソッドのパラメーターを変更してください。

```
spark.sql("""YOUR_SQL""").show(n=number, truncate=number, vertical=bool)
```
+ **n** `int` (オプション)。出力する行数。
+ **truncate** — `bool` または`int` (オプション) — `true` の場合、20  文字を超える文字列を切り捨てます。1 より大きい数値を設定すると、長い文字列を指定した長さに切り詰め、セルを右詰めにします。
+ **vertical** — `bool` (オプション)。`true` の場合、出力の行が縦方向に (列値ごとに 1 行) 表示されます。

# ラインマジックを使用する
<a name="notebooks-spark-magics-line-magics"></a>

1 行に記述されているマジックは、先頭にパーセント記号 (`%`) が付き、ラインマジック関数またはラインマジックと呼ばれます。

## %help
<a name="notebooks-spark-magics-help"></a>

利用できるマジックコマンドの説明が表示されます。

![\[%help の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-2.png)


## %list\$1sessions
<a name="notebooks-spark-magics-list_sessions"></a>

ノートブックに関連するセッションを一覧表示します。各セッションの情報には、セッション ID、セッションステータス、セッションが開始および終了した日時が含まれます。

![\[%list_sessions の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-3.png)


## %session\$1id
<a name="notebooks-spark-magics-session_id"></a>

現在のセッション ID を取得します。

![\[session_id の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-4.png)


## %set\$1log\$1level
<a name="notebooks-spark-magics-set_log_level"></a>

指定されたログレベルを使用するように、ロガーを設定またはリセットします。使用できる値は `DEBUG`、`ERROR`、`FATAL`、`INFO`、`WARN`、`WARNING` のいずれかです。値は大文字にする必要があり、一重引用符または二重引用符で囲むことはできません。

![\[%set_log_level の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-5.png)


## %status
<a name="notebooks-spark-magics-status"></a>

現在のセッションについて説明します。出力には、セッション ID、セッション状態、ワークグループ名、PySpark エンジンバージョン、セッション開始時間が含まれます。このマジックコマンドは、セッションの詳細を取得するにあたりアクティブなセッションを必要とします。

ステータスに表示される可能性のある値は、以下のとおりです。

**CREATING** — セッションが開始されている状態です (リソースの取得を含む)。

**CREATED** — セッションが開始されました。

**IDLE** — セッションは計算を受け入れることができる状態にあります。

**BUSY** — セッションは別のタスクを処理中で、計算を受け入れることができません。

**TERMINATING** – セッションはシャットダウン処理の途中です。

**TERMINATED** – セッションとそのリソースはもう実行されていません。

**DEGRADED** — セッションには正常なコーディネーターがありません。

**FAILED** — 障害が発生したため、セッションとそのリソースは実行されなくなりました。

![\[%status の使用。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-6.png)


# マジックを使用してデータグラフを作成する
<a name="notebooks-spark-magics-graphs"></a>

このセクションに記載されているラインマジックは、特定タイプのデータのレンダリングや、グラフライブラリとの関連付けに特化したものです。

## %table
<a name="notebooks-spark-magics-graphs-table"></a>

`%table` マジックコマンドを使用して、データフレームデータをテーブル形式で表示できます。

次の例では、2 列 3 行のデータが含まれるデータフレームを作成し、データを表形式で表示しています。

![\[%table マジックコマンドを使用します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-graphs-1.png)


## %matplot
<a name="notebooks-spark-magics-graphs-matplot"></a>

[Matplotlib](https://matplotlib.org/) は Python で静的な視覚化、アニメーション化による視覚化、インタラクティブな視覚化を作成するための包括的なライブラリです。matplotlib ライブラリをノートブックセルにインポートした後、`%matplot` マジックコマンドを使用してグラフを作成することができます。

次の例では、matplotlib ライブラリをインポートして X Y 座標セットを作成し、その後 `%matplot` マジックコマンドを使用して点グラフを作成しています。

```
import matplotlib.pyplot as plt 
x=[3,4,5,6,7,8,9,10,11,12] 
y= [9,16,25,36,49,64,81,100,121,144] 
plt.plot(x,y) 
%matplot plt
```

![\[%matplot マジックコマンドを使用します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-graphs-2.png)


### matplotlib ライブラリと seaborn ライブラリを併用する
<a name="notebooks-spark-magics-graphs-using-the-matplotlib-and-seaborn-libraries-together"></a>

[Seaborn](https://seaborn.pydata.org/tutorial/introduction) は Python で統計グラフィックを作成するためのライブラリです。matplotlib 上に構築され、[pandas](https://pandas.pydata.org/) (Python データ分析) データ構造と密接に統合されます。`%matplot` マジックコマンドを使用して、seaborn データをレンダリングすることもできます。

次の例では、matplotlib ライブラリと seaborn ライブラリの両方を使用して、単純な棒グラフを作成しています。

```
import matplotlib.pyplot as plt 
import seaborn as sns 

x = ['A', 'B', 'C'] 
y = [1, 5, 3] 

sns.barplot(x, y) 
%matplot plt
```

![\[%matplot を使用して seaborn データをレンダリングします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-graphs-3.png)


## %plotly
<a name="notebooks-spark-magics-graphs-plotly"></a>

[Plotly](https://plotly.com/python/) は Python 用のオープンソースのグラフライブラリであり、インタラクティブなグラフを作成するために使用できます。`%ploty` マジックコマンドを使用して、ploty データをレンダリングすることができます。

次の例では、株価データに [StringIO](https://docs.python.org/3.13/library/io.html#io.StringIO)、plotly、pandas ライブラリを使用して、2015 年 2 月と 3 月の株式活動グラフを作成しています。

```
from io import StringIO 
csvString = """ 
Date,AAPL.Open,AAPL.High,AAPL.Low,AAPL.Close,AAPL.Volume,AAPL.Adjusted,dn,mavg,up,direction 
2015-02-17,127.489998,128.880005,126.919998,127.830002,63152400,122.905254,106.7410523,117.9276669,129.1142814,Increasing 
2015-02-18,127.629997,128.779999,127.449997,128.720001,44891700,123.760965,107.842423,118.9403335,130.0382439,Increasing 
2015-02-19,128.479996,129.029999,128.330002,128.449997,37362400,123.501363,108.8942449,119.8891668,130.8840887,Decreasing 
2015-02-20,128.619995,129.5,128.050003,129.5,48948400,124.510914,109.7854494,120.7635001,131.7415509,Increasing 
2015-02-23,130.020004,133,129.660004,133,70974100,127.876074,110.3725162,121.7201668,133.0678174,Increasing 
2015-02-24,132.940002,133.600006,131.169998,132.169998,69228100,127.078049,111.0948689,122.6648335,134.2347981,Decreasing 
2015-02-25,131.559998,131.600006,128.149994,128.789993,74711700,123.828261,113.2119183,123.6296667,134.0474151,Decreasing 
2015-02-26,128.789993,130.869995,126.610001,130.419998,91287500,125.395469,114.1652991,124.2823333,134.3993674,Increasing 
2015-02-27,130,130.570007,128.240005,128.460007,62014800,123.510987,114.9668484,124.8426669,134.7184854,Decreasing 
2015-03-02,129.25,130.279999,128.300003,129.089996,48096700,124.116706,115.8770904,125.4036668,134.9302432,Decreasing 
2015-03-03,128.960007,129.520004,128.089996,129.360001,37816300,124.376308,116.9535132,125.9551669,134.9568205,Increasing 
2015-03-04,129.100006,129.559998,128.320007,128.539993,31666300,123.587892,118.0874253,126.4730002,134.8585751,Decreasing 
2015-03-05,128.580002,128.75,125.760002,126.410004,56517100,121.539962,119.1048311,126.848667,134.5925029,Decreasing 
2015-03-06,128.399994,129.369995,126.260002,126.599998,72842100,121.722637,120.190797,127.2288335,134.26687,Decreasing 
2015-03-09,127.959999,129.570007,125.059998,127.139999,88528500,122.241834,121.6289771,127.631167,133.6333568,Decreasing 
2015-03-10,126.410004,127.220001,123.800003,124.510002,68856600,119.71316,123.1164763,127.9235004,132.7305246,Decreasing 
""" 
csvStringIO = StringIO(csvString) 
 
from io import StringIO 
import plotly.graph_objects as go 
import pandas as pd 
from datetime import datetime 
df = pd.read_csv(csvStringIO) 
fig = go.Figure(data=[go.Candlestick(x=df['Date'], 
open=df['AAPL.Open'], 
high=df['AAPL.High'], 
low=df['AAPL.Low'], 
close=df['AAPL.Close'])]) 
%plotly fig
```

![\[%ploty マジックコマンドを使用します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/notebooks-spark-magics-graphs-4.png)
