まるっとワーク

データ分析・電子工作など気になることを残していきます

Amazon Echo(Alexa)を喋らせる

f:id:toku_dango:20210425134042p:plain

Amazon Echoは、話をするようにAmazon Echoに話しかける or Amazon アプリから話すように指示をする等でないと喋ってくれないので、もう少し色々と喋らせる方法はないかと探していました。

本記事ではalexa_remote_controlを使用しますが、その他の方法としてはNode-redを使った方法もあるようです。
他の記事でも色々とまとめられているので、実用性を意識してまとめます。

Alexa-remote-controlのダウンロード

Alexa-remote-controlの「alexa-remote_control.sh」を適当なパスに保存する。

pi@rasberrypi: ~ $wget https://raw.githubuser.com/thorsten-gehrig/alexa-remote-control/master/alexa_remote_control.sh

github.com

Alexa-remote-controlを実行するために必要なライブラリをインストール

JSONツールが必要になるので、インストールする。

pi@rasberrypi: ~ $sudo apt-get install jq


Alexa-remote-controlの設定

alexa-remote-control.sh内に、以下項目の記載があるので、自身のAmazonアカウントに関する情報と必要な設定項目を入力する。

SET_EMAIL='' #Amazonアカウントにログインするためのemailアドレス
SET_PASSWORD='' #Amazonアカウントにログインするためのパスワード
SET_LANGUAGE='ja-JP'
SET_TTS_LOCALE='ja-JP'
SET_AMAZON=''amazon.co.jp 
SET_ALEXA='alexa.amazon.co.jp'


Alexa-remote-controlを使用する

パターン① コマンドラインで実行

pi@rasberrypi: ~ $ ./alexa_remote_control.sh -e "speak:おはよう"


パターン② pythonコード内で実行

import subprocess

cmd = ["./alexa_remote_control.sh", "-e", "speak:おはよう"]
res = subprocess.call(cmd)

Amazon Echoバイスが喋りだしたら成功ですね。"speak:"の後のワードを好きに変えていただければ、そのワードを喋ってくれます。
どちらの方法でも、実行の結果は同じになると思います。

その他コマンドについて

基本公式やalexa-remote-control.sh内にコマンドの詳細記載があるので不要と思いますが、参考まで。


特定の事柄を喋らせる

import subprocess

cmd = ["./alexa_remote_control.sh", "-e", "speak:おはよう"] #自由に設定したワードを喋らせる
cmd = ["./alexa_remote_control.sh", "-e", "weather"] #天気予報について
cmd = ["./alexa_remote_control.sh", "-e", "traffic"] #交通状況について
cmd = ["./alexa_remote_control.sh", "-e", "flashbriefing"] #最新ニュースについて
cmd = ["./alexa_remote_control.sh", "-e", "tellstory"] #適当な話について

res = subprocess.call(cmd)



指定の呼びかけに対する反応

import subprocess

cmd = ["./alexa_remote_control.sh", "-e", "textcommand:おはよう"] 
res = subprocess.call(cmd)


ラジオ再生

import subprocess

cmd = ["./alexa_remote_control.sh", "-r", "s8638"] #第3引数にラジオIDを入力する

res = subprocess.call(cmd)


まとめ

今回はAmazon Echoを喋らせる方法についてまとめました。
色々と組み合わせて、スマートホーム化を図りたいですね。

RasberryPi:セットアップ(日本語入力設定やLCDの設定について)

f:id:toku_dango:20210403224120p:plain

仕事でちょっとした試作が必要となり、手軽で持ち運びができるRasberryPiを使用しました。
ただ、いろいろと作業している中でGUIが起動しなくなる等、原因不明で初期化が必要になるケースも多かったので、その方法をまとめます。

RasberryPiでできること、初期設定方法はRasberry Pi公式URLで詳しく乗っているので割愛します。
本記事で記載の対象となるRasberryPiは、OS(Rasbian)が既にインストールされていることを前提とします。
projects.raspberrypi.org


※本記事で記載の方法を試した場合の保証は出来かねますので、ご自身の判断で実施ください。

開発環境について

【ハードウェア】
RasberryPi
microSDカード(OSインストール済み
USBキーボード
USBマウス
電源ケーブル
3.5インチLCD(液晶ディスプレイ)


目次

日本語入力の設定をする

iBusの言語入力メソッドとMozcという日本語入力エンジンを組み合わせて日本語入力ができるように設定します。
どちらもLinux環境では人気があるようです。

 **LXTerminal以下コードを実行。

$sudo apt install ibus-mozc #root権限にて実行


【インストール後の画面】
右上にひらがな入力を示していることが分かります。
f:id:toku_dango:20210410173451p:plain

LCDの設定をする

基本は以下(メーカーサイト)を見てインストールをいただければ問題ありませんが、本記事でも記載します。
www.lcdwiki.com

1.ドライバーのインストール

$sudo rm -rf LCD-show #対象ディレクトリフォルダの削除
$git clone https://github.com/goodtft/LCD-show.git
$chmod -R 755 LCD-show #アクセス特権の設定


2.LCD画面へ切り替え

$cd LCD-show
$sudo ./LCD35-show


HDMI画面に戻す場合は、以下を実行する。

$cd LCD-show
$sudo ./LCD-hdmi


3.タッチペンのキャリブレーション

$cd LCD-show
$sudo dpkg -i B xinput-calibrator_0.7.5-1_armhf.deb


※タッチペンでの動きが左右・上下逆の場合は、設定ファイルを修正する。

$sudo nano /etc/X11/xorg.conf.d/99-calibration.conf

上記を実行すると、ファイルの修正画面に移行するため、以下修正して保存する。
修正項目: [Option "SwapAces" "1"]という行を削除

メーカー公式ページで画面の設定変更方法も紹介されているのですが、
修正後に"起動時まっくろな画面+入力中のカーソルのみが表示され起動しない"等、問題も生じたので、実行は気を付けた方が良いかもしれません。
困ったときに役に立ったページのURLは以下です。
ラズパイに LCD をつける苦闘 - Qiita

まとめ

今回はRasberryPiを使う際のセットアップ方法をまとめました。
LinuxOSで分からないことはまだ多いので、勉強必要ですね。

Python:seabornを使ったグラフ作成まとめ

Pythonから利用できる可視化ライブラリ、Seabornのグラフの細かい設定
まとめました。
Seabornライブラリは、他の可視化ライブラリ Matplotlibと設定の仕方が違う所もあるので、たまに誤ってイライラしてしまいます・・
完全に自分用な感じもありますが記録を残します。

開発環境について

$wmic os get caption
>Microsoft Windows 10 Pro

$wmic os get osarchitecture
>64ビット

$python -V
Python 3.7.6

目次

グラフを作成する

1. Seabornをインストールする。

 以下コードを実行。

$pip install seaborn


2. データを用意する。

今回はサンプルとして、標準のデータセットirisを使用します。

iris = sns.load_dataset("iris")


3. グラフ(散布図)を描画する。

今回は2行2列の計4グラフを作成します。

 ①散布図
 ②カテゴリ別散布図
 ③折れ線グラフ
 ④散布図+線形回帰

fig, ((ax1, ax2),(ax3, ax4)) = plt.subplots(nrows=2,ncols=2,#グラフ個数の設定
                               figsize=(15, 15),#グラフサイズ設定
                               sharex=False,sharey=False)#グラフラベルの共有有無
sns.set_style("whitegrid") #グラフスタイルの設定
sns.despine(left=False, bottom=False)#軸の削除 Trueで削除

#散布図 (1行1列の設定)

sns.scatterplot(x="sepal_length", y="sepal_width",#対象ラベル選択
                marker="o", #マーカースタイルの設定
                s=30,#プロットサイズ設定
                color="green",#プロットカラー設定
                data=iris,#対象データ
                ax=ax1)


#カテゴリ別散布図 (1行2列の設定)
sns.scatterplot(x="sepal_length", y="sepal_width",#対象ラベル選択
                hue="species",#カテゴリごとに分けてプロット
                size="species",#カテゴリごとにプロットサイズを分ける
     sizes=(30, 100),#サイズの最小値と最大値を設定
                style="species",#カテゴリごとにプロットスタイルを変更する
                s=30,#プロットサイズ設定
                data=iris,#対象データ
                ax=ax2)

ax2.set(xlabel="sepal_length1", ylabel="sepal_width1",#軸ラベル名設定
        xlim=(4,8), ylim=(1,5),#軸レンジ設定
        xticks=[4, 5, 6, 7, 8], yticks=[1, 2, 3, 4, 5])#軸ラベル名設定

ax2.legend(loc='upper left',#凡例位置基準
           bbox_to_anchor=(0.8,1))#凡例位置設定

#折れ線グラフ (2行1列の設定)
sns.lineplot(x="sepal_length", y="sepal_width",#対象ラベル選択
             hue="species",#カテゴリごとに分けてプロット
             size="species", #カテゴリごとにプロットサイズを分ける
     sizes=(1, 3),#サイズの最小値と最大値を設定
             style="species",#カテゴリごとにプロットスタイルを変更する
             data=iris,#対象データ
             ax=ax3)

#散布図+線形回帰 (2行2列の設定)
sns.regplot(x="sepal_length", y="sepal_width",#対象ラベル選択
            marker=".", #マーカースタイルの設定
            scatter_kws={"s": 30},#マーカーサイズの設定
            color="green",#マーカーカラーの設定
            ci=None,#信頼区間の表示
            data=iris,#対象データ
            ax=ax4)

【描画されたグラフ】
f:id:toku_dango:20210403221017p:plain
  
”散布図”scatterplotは、"hue="で設定することでカテゴリ別に色分けすることが可能になります。
またscatterplotの中では、x,y軸の最大値、最小値の設定および、凡例の設定ができないため別途設定する必要があります。

まとめ

今回はSeabornを使ったグラフ作成方法についてまとめました。
可視化ライブラリMatplotlibと比較して、綺麗なグラフが書けるという良さがあるので、できる限り使用していきたいですね

Python:Plotlyを使って描画後に自由に動かせるグラフを作成する

f:id:toku_dango:20210321143714p:plain

Pythonから利用できる可視化ライブラリ、Plotlyの初歩的な使い方と細かい設定をまとめました。
Plotlyで作成したグラフは、描画後にグラフの軸を動かしたり拡大したり、プロットした点の座標(値)も示してくれるので、何回も描画し直す必要がないところが利点ですね。
※データ点が多すぎるとPCの性能によっては動きがカクカクするのでご注意ください。

この記事では紹介しませんが、Plotlyライブラリには種類があるようで、3Dプロットグラフが作成できるPlotly ExpressやDashというWebアプリケーションを使えるライブラリもあるようです。
※Plotly Expressで作成したグラフは、複数を並べて描画することができないので、並べて描画したい場合は使わない方が良いです。

グラフを作成する

1. plotlyをインストールする。

 以下コードを実行。

$pip install plotly


2. データを用意する。

今回はサンプルとして以下系列を用意します。

import numpy as np

t = np.linspace(0, 10, 100)
sin = np.sin(t)
cos = np.cos(t)


3. グラフ(散布図)を描画する。

「go.Figure()」内の引数の「data」に、グラフの種類(今回は散布図なので「go.Scatter()」とデータの配列を入れて、「fig.show()」でグラフを描画する。「go.Figure(data=[])」でデータを指定する方法のほかに、一度「go.Figure()」を作っておいて、「fig.add_trace()」と書く方法もあります。

import numpy as np
import plotly.graph_objects as go

t = np.linspace(0, 10, 100)
sin = np.sin(t)
fig = go.Figure(data=[go.Scatter(x=t, y=sin)]) 

#figの箇所についての別の書き方
#fig = go.Figure()
#fig.add_trace(go.Scatter(x=t, y=sin))

fig.show()


【描画されたグラフ】
f:id:toku_dango:20210321160018p:plain

ここで、「print(fig)」としてみると以下の通り出力されます。
出力結果を見るとどんな引数が必要なのかが分かるので、一度確認するのが良いかと思います。
「data」という引数以外に「layout」という引数があるのも分かりましたね。
詳細は公式ページ「ここ」に載っているのでぜひ参照ください。

print(fig)
>Figure({
    'data': [{'type': 'scatter',
              'x': array([ 0.        ,  0.1010101 ,  0.2020202 ,  0.3030303 ,  0.4040404 ,,,省略]),
              'y': array([ 0.        ,  0.10083842,  0.20064886,  0.2984138 ,  0.39313661,,,省略])}],
    'layout': {'template': '...'}


グラフのカスタマイズ

「go.Figure()」内の引数毎に設定項目と設定方法を説明していきます。
引数「data」で設定できる項目:グラフの種類やプロットの大きさ等のグラフに関すること
引数「layout」で設定できる項目:グラフのレンジ設定やタイトル、凡例などのレイアウトに関すること

グラフの設定について

グラフの種類によって若干設定項目が変わりますが、今回は散布図「go.Scatter」での代表的な設定項目を説明します。
サンプルコードは以下の通りで、「go.Figure()」内の「data」の引数をそれぞれ設定してあげることでグラフの設定ができます。

fig = go.Figure()
fig.add_trace(go.Scatter(x=t, y=sin, #対象データ
                         mode='lines+markers', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='green'), #折れ線の書式設定
                         marker=dict(symbol='circle', size=10, color='blue'),#散布図の書式設定
                         name="sin",
                         )) 
fig.add_trace(go.Scatter(x=t, y=cos, #対象データ
                         mode='lines', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='red'), #折れ線の書式設定
                         name="cos",
                         )) 
fig.show()

抜粋ですが、簡単な説明は以下の通り

オプション    説明
-mode	    lines+markers: 散布図+折れ線 / lines: 折れ線のみ / markers: 散布図のみ 
-line      折れ線の設定 width: ライン幅 / color: ライン色 
        (dict形式で渡す or 「line_width=」 のようにアンダースコアを挟んで渡す方法も問題ない) 
-marker	    散布図の設定 symbol: プロット形設定 / size: プロットサイズ /color: プロット色
        (dict形式で渡す or 「marker_symbol=」 のようにアンダースコアを挟んで渡す方法も問題ない) 


【描画されたグラフ】
f:id:toku_dango:20210321160113p:plain

また、上記のように設定した後に以下のようにコードを重ねることで、設定の上書きも可能。
「fig.update_traces」の引数に上記と同じ書き方で設定できます。

fig.update_traces(mode='lines+markers', line_color='blue', marker_size=15)



レイアウトの設定について

サンプルコードは以下の通りで、「go.Figure()」内の「layout」の引数をそれぞれ設定してあげることでグラフの設定ができます。コードをコピー/修正いただければ、好きな設定に変更できるのではないでしょうか。
細かい仕様は以下を参照ください。

plotly.com

fig = go.Figure()
fig.add_trace(go.Scatter(x=t, y=sin, #対象データ
                         mode='lines+markers', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='green'), #折れ線の書式設定
                         marker=dict(symbol='circle', size=10, color='blue'),
                         name='sin'))
fig.add_trace(go.Scatter(x=t, y=cos, #対象データ
                         mode='lines+markers', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='orange'), #折れ線の書式設定
                         marker=dict(symbol='circle', size=10, color='red'),
                         name='cos'))

fig.update_layout(template='seaborn',#テーマ
                  autosize=False, width=1200, height=700,#グラフサイズ
                  margin=dict(l=100, r=100, b=200, t=100, pad=10, autoexpand=False),#余白幅
                  title=dict(text="Subplots", font_size=30, font_color='green'), #グラフタイトル書式
                  legend=dict(title_text="legend",#凡例書式
       orientation="h",yanchor="bottom",y=1.02,xanchor="right",x=1, #凡例位置の設定
                  bgcolor='lightgrey', font_color='red'),#凡例色の設定
                  paper_bgcolor="White",#背景色
                  xaxis=dict(range=[0,10],#グラフの範囲 横軸
                             rangeslider=dict(autorange=True),#range sliderを表示 横軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 横軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 横軸
                             title=dict(text='time', font_size=20),#グラフの軸ラベル書式 横軸
                             tickfont=dict(color='black', size=20)),#グラフの軸目盛り書式 横軸
                  yaxis=dict(range=[-1,1],#グラフの範囲 縦軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 縦軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 縦軸
                             title=dict(text='value', font_size=20),#グラフの軸ラベル書式 縦軸
                             tickfont=dict(color='black', size=20)))#グラフの軸目盛り書式 横軸
fig.show()

※サンプルコードは、コードがごちゃごちゃするのを避けるため、「fig.update_layout」を使ってレイアウトを調整しています。このオプションも「fig.update_traces」と同じように設定の上書きができるできます。

【描画されたグラフ】
f:id:toku_dango:20210321162131p:plain

複数グラフの並列描画

Plotlyの「make_subplots」モジュールを使って「fig」を作り、上記と同じように「data」「layout」をグラフごとに設定してあげることで描画することができます。
「data」については、「row」「col」の指定が追加で必要です。
「layout」については、グラフ軸は1グラフ目が「xaxis」「yaxis」、2グラフ目が「xaxis2」「yaxis2」に該当するようです。

from plotly.subplots import make_subplots
fig = make_subplots(rows=1, cols=2)
fig.add_trace(go.Scatter(x=t, y=sin, #対象データ
                         mode='lines+markers', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='green'), #折れ線の書式設定
                         marker=dict(symbol='circle', size=10, color='blue'),
                         name='sin'), row=1, col=1)
fig.add_trace(go.Scatter(x=t, y=cos, #対象データ
                         mode='lines+markers', #散布図+折れ線 散布図だけの場合はmarkers, 折れ線だけの場合はlines
                         line=dict(width=2, color='orange'), #折れ線の書式設定
                         marker=dict(symbol='circle', size=10, color='red'),
                         name='cos'), row=1, col=2)

fig.update_layout(template='seaborn',#テーマ
                  autosize=False, width=1200, height=700,#グラフサイズ
                  margin=dict(l=100, r=100, b=200, t=100, pad=10, autoexpand=False),#余白幅
                  title=dict(text="Subplots", font_size=30, font_color='green'), #グラフタイトル書式
                  legend=dict(title_text="legend", #凡例書式
     orientation="h",yanchor="bottom",y=1.02,xanchor="right",x=1, #凡例位置の設定
                  bgcolor='lightgrey', font_color='red'),#凡例色の設定
                  paper_bgcolor="White",#背景色
                  xaxis=dict(range=[0,10],#グラフの範囲 横軸
                             rangeslider=dict(autorange=True),#range sliderを表示 横軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 横軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 横軸
                             title=dict(text='time', font_size=20),#グラフの軸ラベル書式 横軸
                             tickfont=dict(color='black', size=20)),#グラフの軸目盛り書式 横軸
                  yaxis=dict(range=[-1,1],#グラフの範囲 縦軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 縦軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 縦軸
                             title=dict(text='value', font_size=20),#グラフの軸ラベル書式 縦軸
                             tickfont=dict(color='black', size=20)),#グラフの軸目盛り書式 横軸
                  xaxis2=dict(range=[0,10],#グラフの範囲 横軸
                             rangeslider=dict(autorange=True),#range sliderを表示 横軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 横軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 横軸
                             title=dict(text='time', font_size=20),#グラフの軸ラベル書式 横軸
                             tickfont=dict(color='black', size=20)),#グラフの軸目盛り書式 横軸
                  yaxis2=dict(range=[-1,1],#グラフの範囲 縦軸
                             linewidth=1, mirror=True, linecolor='black',#グラフの枠設定 縦軸
                             showgrid=True, gridwidth=1, gridcolor='black',#グラフのグリッド設定 横軸
                             zeroline=True, zerolinewidth=1, zerolinecolor='LightPink',#グラフの0ライングリッド設定 縦軸
                             title=dict(text='value', font_size=20),#グラフの軸ラベル書式 縦軸
                             tickfont=dict(color='black', size=20)))#グラフの軸目盛り書式 横軸
fig.show()


【描画されたグラフ】
f:id:toku_dango:20210321163116p:plain

まとめ

今回はPlotlyを使ったグラフ作成方法についてまとめました。
データ数が多くない限り、いろいろと動かすことができるPlotlyのグラフは使い勝手が良いかなと思います。
設定方法に困ったら、「print(fig)」をして引数設定を見ることも重要ですね。

JupyterNotebookの背景色やフォントを変更したい

Webブラウザ上でソフトウェアを開発できる環境「Jupyter Notebook」、
デフォルトの設定だと、画面が白く長時間見るとちかちかするので変更してみました。
【デフォルトの状態】
f:id:toku_dango:20210307214934p:plain

今回は背景色やフォントを変更できる方法をまとめます。


目次

JupyterNotebookの背景色を変更する。

-モジュール jupyterthemesを使って変更します。
JupyterNotebookはブラウザ上で動くため、HTMLのスタイル設定であるCSS(スタイルシート)を変更することで調整できるのですが、簡単にいろいろと変更できるjupyterthemesモジュールを使います。

1. jupyterthemesをインストール

 以下コードを実行。

$pip install jupyterthemes

 

2. 利用したいテーマを選定

以下コードを実行すると、テーマの一覧を確認できます。

$jt -l

Available Themes:
   chesterish
   grade3
   gruvboxd
   gruvboxl
   monokai
   oceans16
   onedork
   solarizedd
   solarizedl

「jupyterthemes」をインストールすると「jt」コマンドが使えるようになります。
 

3. jtコマンドを用いてテーマを変更

テーマの適用は jt -t [テーマ名]で実行します。

$jt -t chesterish -T -N

→「chesterish」の部分を好きなテーマ名に変更して実行すると、そのテーマに変わる。

各テーマ見本

chestrish

f:id:toku_dango:20210308194918p:plain

grade3

f:id:toku_dango:20210308195035p:plain

gruvboxd

f:id:toku_dango:20210308195100p:plain

monokai

f:id:toku_dango:20210308195119p:plain

oceans16

f:id:toku_dango:20210308195140p:plain

sokarizedd

f:id:toku_dango:20210308195201p:plain

細かい設定について

詳細はここに記載されているが、以下コマンドが存在する。

$ jt  [-h] [-l] [-t THEME] [-f MONOFONT] [-fs MONOSIZE] [-nf NBFONT]
    [-nfs NBFONTSIZE] [-tf TCFONT] [-tfs TCFONTSIZE] [-dfs DFFONTSIZE]
    [-m MARGINS] [-cursw CURSORWIDTH] [-cursc CURSORCOLOR] [-vim]
    [-cellw CELLWIDTH] [-lineh LINEHEIGHT] [-altp] [-altmd] [-altout]
    [-P] [-T] [-N] [-r] [-dfonts]


抜粋ですが、簡単な説明は以下の通り。

オプション    説明
-h	    ヘルプ表示
-l	    適用可能テーマ一覧表示
-t themename	テーマ適用
-f fontname	ソースコードセルのフォント
-fs n	    ソースコードセルのフォントサイズ
-cellw     セル長
-T	    ノートページにツールバーを表示
-N	    ノートページにファイル名を表示


適用イメージとしては以下のような感じで、コマンドは続きで書いて一度に実行することが可能です。

$ jt -t monokai -f inconsolata -N -T -fs 11 -cellw 90%


上記適用結果
f:id:toku_dango:20210308204544p:plain
→説明省きましたが、フォント設定やセル長も調整できるので大変楽ですね。

困ったこと(ツールバーが消えて困った) / 解決方法

jupyter themesでテーマを変更したら、ツールバーが消えて困るということがありました。
もし同じ問題が起きた場合は、以下の通り対応してみてください。

試したこと①: jupyter themesのオプションで設定変更

以下の通りコードを実行する。
※ただし、私の環境では以下の通りツールバーを表示する設定に変更してもツールバーが出てきませんでした。

$ jt -T
試したこと②: ノートブック上でツールバーを表示させる設定に変更

f:id:toku_dango:20210308205730p:plain
→Toggle Toolbarを選択
この順番で対応してツールバーが出てきました。

まとめ

今回はJupyterNotebookの背景色やフォント等を変更する方法についてまとめました。
CSSファイルを自身で調整して設定を変更することもできますが、モジュールを使うことで色々な設定を簡単に変更できますね。

開発環境について

Windows10 64bit
Anaconda 4.9.2
Python 3.7.6
jupyter-notebook 6.0.3

JupyterNotebookのセル幅を変更したい

Webブラウザ上でソフトウェアを開発できる環境「Jupyter Notebook」、
デフォルトの設定だと、以下画像のようにウィンドウサイズに対して、コードを書く等の横幅が少し狭いのですよね。

このセル幅を調整できる方法をまとめます。

 f:id:toku_dango:20210228191727p:plain
→現在の状態では、狭くてコードが書ききれない・・画像も大きく表示させることができない・・

目次

JupyterNotebookのセル幅を変更する方法

JupyterNotebookはブラウザ上で動くため、HTMLのスタイル設定であるCSS(スタイルシート)を変更することで調整できます。
簡単な方法として2つを紹介します。

  • CSSファイルを作成する方法
  • NotebookからIPython.displayを用いる方法

CSSファイルを作成する方法

HTMLのスタイルを決めるCSSファイルを設定してあげることで見栄えの変更する方法です。
この方法を一度実行すると、設定が上書きされる為、継続して決めた設定でNotebookを使うことが可能です。

1. custom.cssファイルを作成

 JupyterNotebookは、Homeディレクトリ以下の「.jupyter」に設定用フォルダがあります。

~.jupyter"フォルダ以下に「custom」フォルダを作成し、「custom.css」を作成/格納することで設定を適用させることができます。

~/.jupyter/custom/custom.css

→フォルダ/ファイルを作成する
 
custom.cssには以下を入力して保存する。

.container { width:90% !important; }

→今回は、ウィンドウサイズに対して90%程度の大きさに設定します。
 「!important」をつけてあげないと、設定したCSSファイルの設定が優先されないようなので、必ずつけましょう。

2.JupyterNotebookを再起動

設定後にJupyterNotebookを再起動すると、良い感じに広がりました。

f:id:toku_dango:20210228194427p:plain
 

NotebookからIPython.displayを用いる方法

IPython.displayを使うことで、CSSの設定の上書きが可能となります。
この方法は、既に表示されているNotebookで実行/設定上書きするので、同じ設定を使いたい場合もNotebookを開く毎に実行する必要があります。

1. Notebook上で対応するコードを実行

notebook上で以下コードを実行します。

from IPython.core.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>")) #notebookの横幅を変更

→90%の部分を変更すると好みの長さに調整できます。
※この方法でも上の画像と同じように幅が広がります

まとめ

今回はJupyterNotebookのセル幅を変更する方法についてまとめました。
notebookはWebブラウザ上で動くので、HTMLの見栄え設定ができるCSSファイルを調整すれば良いということが分かりましたね。
もちろんセル幅だけでなくいろいろと調整できるのですが、今回初めての投稿なのでこんなもんで・・次も備忘録としてまとめていきます。