📰

streamlitで気軽に実行出来るスプレッドシートMitoの備忘録(紹介)

2023/09/02に公開

streamlitで実装させるMitoの備忘録です。
画像と軽い説明付けてますので、初見の人でもMitoの特徴を理解頂けると思います。
あとstramlitなのでアプリとして気軽に実装出来ます。
データ処理してグラフ描いて…なんてする方はにとても便利と思います。

https://blog.streamlit.io/data-analysis-with-mito-a-powerful-spreadsheet-in-streamlit/
https://docs.trymito.io/mito-for-streamlit/streamlit-overview
Mitoは最近知ったのですが、使ってみて便利で驚きました。無料なのに某tableauみたいなことが出来ちゃうなと。更にAIがついててデータの編集が気軽に出来ちゃいます。
まだ使い始めでして気づきがあったら追記していきます。

スプレッドシートとグラフ

まず表示させるとこんな感じです。

グラフはこんな感じです。散布図以外にもヒストグラムとか折れ線とか色々表示できます。

細かく分類して表示することもできます。

デモ用コード

seabornからdataframeを持ってきています。
汎用版も記事の一番下ですが公開していますのでぜひ使ってみてください。

import streamlit as st
import seaborn as sns
import matplotlib.pyplot as plt
from mitosheet.streamlit.v1 import spreadsheet

st.header("MitoSheet Demo")

df = sns.load_dataset('tips')

# Display the dataframe in a Mito spreadsheet
final_dfs, code = spreadsheet(df)

# Display the final dataframes created by editing the Mito component
# This is a dictionary from dataframe name -> dataframe
st.write(final_dfs)

# Display the code that corresponds to the script
st.code(code)

以下で実行できます。

streamlit run XXX.py

備忘録

dataframeで出来るコマンドは大体できます。

ユニーク値の取得

df.unique()です。列名を右クリックして「View Unique Values」で表示できます。

チェックマークを外すとその値を弾くことが出来ます。
外れ値があった時なんかはすぐに値を除外出来て便利ですね。

統計データの表示

df.describe()です。列名を右クリックして「View Summary Stats」で表示できます。

dataをいじってもその都度結果を反映させてくれます。

欠損値の処理

列名を右クリックして「Fill NaN Values」です。欠損値の処理をしてくれます。
欠損地に変える数値は任意の数値だったり、平均値だったりを指定できます。

列の分割

列名を右クリックして「Split Text to Columns」です。
区切り文字を指定して列の分割を出来ます。区切り文字は自身で設定出来ます。

型の変更

列名をクリックして、Dtypeから簡単に変更できます。

  • bool True/False
  • int 数値(整数)
  • float 数値(小数点付き)
  • str 文字列
  • datetime 日付
  • timedelta 経過時間

Mito AI

MitoにはAIが内蔵しています。OpenAIのAPI keyを設定しているとMitoAIと会話出来ます。
API keyの設定無くても無料で100回までは使わせてくれるみたいです。
 
このAIは何でも出来るわけじゃなくて、上記にあげたようなdataframeに関連するコマンドであれば実行出来るみたいです。例えばグラフの描画なんかはpandasの範囲外なので出来ないです。

しかも結構ポンコツな印象可愛らしいです。同じコマンドでも出来ないと言われたり、意図していない動作をしたり…この辺はfine tuningとかで良くなっていくものと思います。

新しい列の作成

下の写真では"sex+smoker"という行を既存の"sex"行と"smoker"行から作ったのですが、結構雑なプロンプトでも作ってくれます。

相関係数の取得

df.corr()です。AIに「相関係数を計算して」と言います。

新規シートとしてdf.corr()を表示してくれました。

統計的な計算

計算もしてくれます。例えば統計的なデータが欲しくて平均値±3σを求めたい時とか


*何故か上手くいかなくてこのスクショを撮るため10分ほど格闘しました。
→別のプロンプトで安定的に出せるようになりました。

プロンプト「行がtotal_billとtip、列がmeam-3σ,mean,mean+3σの1個のdfを作成して」
新しく1個のdataframeとして作成しちゃうわけですね。これは他の計算にも流用できるかもしれません。
 
この他にも色々機能あります、使っていく中で随時更新させていきます。

任意のデータを分析出来るコード

MitoAIと会話したい場合はOpenAIのAPI Keyを設定してください。エクセルファイルかcsvファイルのみ読み込める設定にしています。

from mitosheet.streamlit.v1 import spreadsheet
import streamlit as st
import pandas as pd

if not hasattr(st.session_state, "df_mito"):
    st.session_state["df_mito"]= pd.DataFrame()

st.header("mitoを使ったデータ分析")
st.write("***mitoを使ったデータ分析が出来ます。お好きなファイルをアップロードしてください。***")
upload_file = st.file_uploader('分析したいファイルを選択してください', type=['csv', 'xlsx'])
if upload_file is not None:
    if upload_file.name.endswith("csv"):
        st.session_state.df_mito=pd.read_csv(upload_file)
    elif upload_file.name.endswith("xlsx"):
        st.session_state.df_mito=pd.read_excel(upload_file)
    final_df,code=spreadsheet(st.session_state.df_mito)

    st.write(final_df)
    st.code(code)

Discussion