こんばんは。takapy(@takapy0210)です。
今日はpythonの小ネタです。
サマリ
下記のように、headerを固定しながら一覧をスクロールすることができます。
手順
ipywidgetsのインストールとjupyterの設定
下記コマンドで設定を行います。
自分は普段jupyter lab
を使用しているので、下記コマンドを使用しましたが、jupyter notebook
を利用している方は、2つ目のコマンドは不要だと思います。
$ pip install ipywidgets $ jupyter labextension install @jupyter-widgets/jupyterlab-manager $ jupyter nbextension enable --py --sys-prefix widgetsnbextension
参照:
コード
今回はKaggleのTitanicデータセットを使って、ipywidgetsを使ってみます。
import pandas as pd import matplotlib.pyplot as plt %matplotlib inline # 読み込み train = pd.read_csv('train.csv')
ご存知の方も多いと思いますが、下記のようなデータになっています。
freeze_header
という関数を定義して、そこにデータフレームを渡します。
from ipywidgets import interact, IntSlider from IPython.display import display def freeze_header(df, num_rows=30, num_columns=10, step_rows=1, step_columns=1): @interact(last_row=IntSlider(min=min(num_rows, df.shape[0]), max=df.shape[0], step=step_rows, description='rows', readout=False, disabled=False, continuous_update=True, orientation='horizontal', slider_color='purple'), last_column=IntSlider(min=min(num_columns, df.shape[1]), max=df.shape[1], step=step_columns, description='columns', readout=False, disabled=False, continuous_update=True, orientation='horizontal', slider_color='purple')) def _freeze_header(last_row, last_column): display(df.iloc[max(0, last_row-num_rows):last_row, max(0, last_column-num_columns):last_column]) # headerを固定してデータを表示 freeze_header(df=train, num_rows=10, num_columns=20)
すると、下記のようにスライドバーが表示され、indexとheaderを固定しながら、上下左右にスクロースすることができます。
Titanicデータは、カラム数が多くないのであまり恩恵はありませんが、下記のようなデータセットの場合には少し恩恵がありそうです。
# 200 * 2000のデータフレームを生成 df = pd.DataFrame(pd.np.random.RandomState(seed=0).randint(low=0, high=100, size=[200, 2000])) # headerを固定してデータを表示 freeze_header(df=df, num_rows=10, num_columns=40)
最後に
データ分析する際に使用するデータは、行数や列数が膨大になることが多いと思います。
そんな中で、indexやheaderを固定してデータを傍観する際には役立つのではないでしょうか。