はじめに
仕事で簡単な分析をする際に、いちいちコード書いて分析するのが面倒なので、Streamlitというライブラリを用いて少しずつアプリ開発をしていこうと思う。
実装した機能
今回はStreamlitでどのようなことができるのかを知りたかったので、ChatGPTに「アンケートデータを簡単に可視化できるようなアプリを作って」という依頼をし、出てきたコードをそのまま実行した。
コード内で実装した機能は以下である。
①csvデータのアップロード
②データのプレビュー
③グラフ(ヒストグラム/棒グラフ/折れ線グラフ)
④散布図
⑤ヒートマップ
実装したコード
import streamlit as st
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
st.title("データ可視化")
uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type="csv")
if uploaded_file:
df = pd.read_csv(uploaded_file)
st.subheader("データのプレビュー")
st.dataframe(df)
# 数値型カラムだけ抽出
numeric_cols = df.select_dtypes(include='number').columns.tolist()
st.subheader("グラフ")
col1 = st.selectbox("カラムの選択", numeric_cols)
chart_type = st.radio("グラフの種類", ['ヒストグラム', '棒グラフ', '折れ線グラフ'])
if chart_type == 'ヒストグラム':
fig1 = sns.histplot(df[col1], kde=True).figure
st.pyplot(fig1)
elif chart_type == '棒グラフ':
fig2 = sns.countplot(x=col1, data=df).figure
st.pyplot(fig2)
elif chart_type == '折れ線グラフ':
st.line_chart(df[col1])
st.subheader("散布図")
x_var = st.selectbox("X軸を選択", numeric_cols, key="x_var")
y_var = st.selectbox("Y軸を選択", numeric_cols, key="y_var")
if x_var and y_var:
fig3, ax3 = plt.subplots()
sns.scatterplot(x=df[x_var], y=df[y_var], hue=df.get("性別"), ax=ax3)
st.pyplot(fig3)
st.subheader("ヒートマップ")
corr = df[numeric_cols].corr()
fig4, ax4 = plt.subplots()
sns.heatmap(corr, annot=True, cmap="coolwarm", ax=ax4)
st.pyplot(fig4)
else:
st.info("まずはCSVファイルをアップロードしてください。")
感想
Streamlitへの分析結果の渡し方は理解しないといけなさそうだが、簡単にwebアプリが実装できると分かってよかった。データ可視化はデータビジュアライゼーションに関する本なども参考にしながら、アップデートしていこうと思う。次回は、ビジュアライゼーションについて書くと思う。(多分)