Mojo🔥 - ダウンロードからHelloWorldまで
すごい早いと言われているMojo🔥というプログラミング言語がダウンロード可能になっていたで試してみます。
これまではプレリリース的な感じでクラウド版だけで利用できましたが、最近ダウンロードしてローカルで実行できるようになっていましたね。
現時点はLinux向けのみ公開とのことなので、WSL2上でのローカルダウンロード版のMojo🔥のセットアップ方法をまとめます。
環境
- WSL2
- Ubuntu 22.04
1. Modularアカウントの作成
Mojoの公式サイトへ行ってDownload Now
ボタンを押します。
するとアカウント作成を促されるので仕方なく作ります。
メールアドレスを入力して6桁のPIN認証をすれば完了するのですぐ終わりました。
2. ダウンロードとインストール
認証が終わるとダウンロード方法が説明されているページに自動的に切り替わるので、それを参考にMojoをインストールしていきます。
今回Windowsのブラウザでページを開いたのでWindows->WSL2->Ubuntu22.04上での実行が自動で表示されているみたいですね。
左下のSet up on Windows
のところはMac(Appleシリコン版)
とかMac(Intel版)
、Linux
にも切り替えられて、Intel版MacではDocker使って入れる方法が書かれていました。Appleシリコン版Macでは、Linuxじゃないのになぜかそのまま入れられるみたいな感じでした。
今回Windows版の方法に従ってやっていきますが、VSCodeやらMojoの拡張機能やらをインストールするように書かれているのはいったん無視して03. In the Ubuntu terminal, install the Modular CLI:
の
curl https://get.modular.com | \ MODULAR_AUTH=*************** \ sh -
を実行します。
3分ぐらい待つと↓が表示されてModular CLIのインストールが終わります。
__ __ _ _ | \/ | ___ __| |_ _| | __ _ _ __ | |\/| |/ _ \ / _` | | | | |/ _` | '__| | | | | (_) | (_| | |_| | | (_| | | |_| |_|\___/ \__,_|\__,_|_|\__,_|_| Welcome to the Modular CLI! For info about this tool, type "modular --help". To install Mojo🔥, type "modular install mojo". For Mojo documentation, see https://docs.modular.com/mojo. To chat on Discord, visit https://discord.gg/modular. To report issues, go to https://github.com/modularml/mojo/issues.
次に04. Install the Mojo SDK:
の
modular install mojo
を実行します。
5分ほど経つと↓のように怒られます
The virtual environment was not created successfully because ensurepip is not available. On Debian/Ubuntu systems, you need to install the python3-venv package using the following command. apt install python3.10-venv You may need to use sudo with that command. After installing the python3-venv package, recreate your virtual environment. Failing command: /home/ubuntu/.modular/pkg/packages.modular.com_mojo/venv/bin/python3 modular: error: failed to run python:
Pythonが必要なようです。まあそれはそうですね。Python3.10をインストールしてからやってみます。
sudo apt install python3.10-venv modular install mojo
さっきインストールしたときのごみが残っているようです。
modular: error: failure detected - please run `modular clean` and try again ========================== Failure Information: - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/liblldb.so.18.0.0git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/liblldb.so failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMojoJupyter.so.18git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMojoJupyter.so failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/liblldb.so.18.0.0git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/liblldb.so.18git failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/libKGENCompilerRTShared.so.18git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/libKGENCompilerRTShared.so failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMojoLLDB.so.18git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMojoLLDB.so failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/libLLCLRuntimeGlobals.so.18git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/libLLCLRuntimeGlobals.so failed: File exists - Creating symlink for /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMSupportGlobals.so.18git -> /home/****/.modular/pkg/packages.modular.com_mojo/lib/libMSupportGlobals.so failed: File exists ==========================
cleanしてから再度インストールします。(最初からPythonが入っている場合はこの操作は多分要らない)
modular clean modular install mojo
インストールできたっぽい。
🔥 Mojo installed! 🔥 Mojo's Python virtual environment created at /home/ubuntu/.modular/pkg/packages.modular.com_mojo/venv Now run the following commands if you are using bash: echo 'export MODULAR_HOME="/home/ubuntu/.modular"' >> ~/.bashrc echo 'export PATH="/home/ubuntu/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc source ~/.bashrc If you are using ZSH, run the following commands: echo 'export MODULAR_HOME="/home/ubuntu/.modular"' >> ~/.zshrc echo 'export PATH="/home/ubuntu/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc source ~/.zshrc Then enter 'mojo' to start the Mojo REPL. For tool help, enter 'mojo --help'. For more docs, see https://docs.modular.com/mojo.
環境変数を設定しろと書いてあるのでコピペして実行する。
echo 'export MODULAR_HOME="/home/ubuntu/.modular"' >> ~/.bashrc echo 'export PATH="/home/ubuntu/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
これでインストールは完了。
対話形式でHelloWorld
ターミナルでmojo
と打ち込む。
$ mojo Welcome to Mojo! 🔥 Expressions are delimited by a blank line. Type `:quit` to exit the REPL and `:mojo help` for further assistance. 1>
Pythonぽいですね。
1> print("Hello, world!") 2. Hello, world! 2>
print("Hello, world!")
と打って2回Enter押したらHello, world!
と表示されました。
2回押さなけらばならないのはなんかめんどくさいですし、表示されるまで若干時間かかりました。
処理が終わったら:quit
で脱出します。
2> :quit Process 14661 exited with status = 9 (0x00000009) killed $
なるほど。
スクリプトファイルからHelloWorld
Mojoのスクリプトファイルの拡張子は.mojo
か.🔥
だそうです。.🔥
はきもいのでhello.mojo
で作ります。
fn main(): print("Hello, world!")
ターミナルから実行します。
$ mojo hello.mojo Hello, world! $
なるほど。
まとめ
Ubuntuの環境さえ整っていれば、トータルで10分ぐらいでダウンロードからHelloWorldまで行けるので、簡単に使えるようになると思います。
暇だったら試してみるのもいいかもしれないですね。
Pythonのfoliumで簡単に地理情報を可視化できる
Pythonで地理情報を可視化できるfoliumというライブラリを見つけたので、ざっくりと使い方をまとめます。
実行環境
データの準備
最近暑かったので今回は気象庁の気温データを可視化してみます。
- 気温データ
気象庁(気象庁|過去の気象データ・ダウンロード)から各都道府県庁所在地の最高気温をとってきて↓みたいな感じに整形しておきます。
kion.csv
北海道 | 青森県 | 岩手県 | ... | 宮崎県 | 鹿児島県 | 沖縄県 | |
---|---|---|---|---|---|---|---|
2023/6/1 | 24.7 | 26.5 | 24.1 | ... | 21.1 | 24.4 | 26.6 |
2023/6/2 | 21.9 | 20.0 | 19.3 | ... | 23.4 | 27.9 | 26.5 |
... | ... | ... | ... | ... | ... | ... | ... |
- 都道府県コード
pref_code = { "北海道": 1, "青森県": 2, "岩手県": 3, ..., "宮崎県": 45, "鹿児島県": 46, "沖縄県": 47 }
- 都道府県のシェイプデータ
都道府県の形を地図上に描画するときの形状データです(多分)。 ↓のコマンドでダウンロードしておきます。
curl https://raw.githubusercontent.com/dataofjapan/land/master/japan.geojson > japan.geojson
- 都道府県庁所在地の緯度経度データ
各都道府県庁所在地の緯度経度が記録されているデータです。
latlon.csv
pref | lon | lat |
---|---|---|
北海道 | 141.3469444 | 43.06444444 |
青森県 | 140.74 | 40.82444444 |
岩手県 | 141.1527778 | 39.70361111 |
... | ... | ... |
地図を作成
必要なライブラリのインポート
import folium from folium.plugins import HeatMap import pandas as pd
コロプレス図を作る
まずは特定の日付の最高気温をコロプレス図(タイル形式でのヒートマップ)で描画してみます。
# 気温データの読み込みと都道府県コードへの変換 kion = pd.read_csv('kion.csv', index_col=0) kion.columns = map(lambda x: pref_code[x], kion.columns) # 描画対象の日付 date = '2023/8/1' # 地図の基準 m = folium.Map(location=[35, 135], zoom_start=5) m.choropleth( geo_data='japan.geojson', data=kion.loc[date].T.reset_index(), columns=kion.loc[date].T.reset_index().columns, key_on='feature.properties.id', threshold_scale=range(25,40), fill_color='YlOrRd', reset=True ) # 地図をhtml形式で出力 m.save(outfile='map.html')
出力されたHTMLをブラウザで表示するとこんな感じ。
地図データにはOpenStreetMapを使っているんですね。
HTML形式なので、ブラウザ上でスクロールやズームもできます。
茨城が涼しいんですね。
ヒートマップを作る
次に点データの値の大きさをヒートマップで表示します。 点座標は都道府県庁所在地、値の大きさはその日の最高気温にします。
# 描画対象の日付 date = '2023/8/1' # 緯度経度と最高気温を結合 latlon = pd.read_csv('latlon.csv', index_col=0) kion = pd.read_csv('kion.csv', index_col=0) kion = pd.concat([latlon, kion.T], axis=1).copy() kion = kion[['lat', 'lon', date]].values.tolist() # 地図の基準 m = folium.Map(location=[35, 135], zoom_start=5) hm = HeatMap( kion, radius=15, blur=5 ).add_to(m) hm.add_to(m) m.save(outfile='map.html')
東京や名古屋あたりが目立って暑そうに見えますが、都道府県庁所在地が密集しているせいですね。
動くヒートマップを作る
時系列で変化する点データを動かして可視化します。 ひとつ前のものと同じように点座標は都道府県庁所在地、値の大きさは最高気温にします。 そしてこれを日付変化で見られるようにします。
# 時系列の気温データの作成 latlon = pd.read_csv('latlon.csv', index_col=0) kion = pd.read_csv('kion.csv', index_col=0) / 40 latlon_kion = [ pd.concat([latlon[['lat', 'lon']], kion.loc[[date]].T], axis=1).values.tolist() for date in kion.index ] # 地図の基準 m = folium.Map(location=[35, 135], zoom_start=5) hm = folium.plugins.HeatMapWithTime( latlon_kion, index=kion.index.tolist(), auto_play=False, radius=16, max_opacity=1, gradient={0.1: 'blue', 0.25: 'lime', 0.5:'yellow',0.75: 'orange', 0.9:'red'} ) hm.add_to(m) m.save(outfile='map.html')
良い感じになりました。