2017-01-15 9 views
0

私はpandas DataFrameにデータを持っています。私は日数を選択できるインタラクティブなboxplotを作成したいのですが、それぞれのカテゴリの値のボックスプロットをプロットします。列「カテゴリー」pandasとJupyterノートブックを使用したインタラクティブなboxplot

これは私のコード/データは、これまでに次のようになります。

import numpy as np 
import pandas as pd 

categories=('A','B','C') 

data = { 
      'days':  np.random.randint(120, size=100), 
      'category': np.random.choice(categories, 100), 
      'value':  100.0 * np.random.random_sample(100) 
     } 

df = pd.DataFrame(data) 

print(df) 

    category days  value 
0   A  4 77.383981 
1   A 31 63.011934 
2   A  5 1.165061 
3   C 59 23.588979 
4   A 57 14.906734 
5   C 106 33.366634 
6   A 29 90.658570 
7   B 25 16.137490 
8   A 118 34.526302 
9   C 76 4.111797 
10  A 11 30.195917 
..  ... ...  ... 
90  A 64 37.529774 
91  A 76 3.771360 
92  C 112 93.948775 
93  C 14 34.855189 
94  B 64 83.106007 
95  A 10 78.346319 
96  B 86 66.645889 
97  A 46 12.969012 
98  C 29 57.925427 
99  A 59 34.526146 

[100 rows x 3 columns] 

私は日の選択/指定された数のために(カテゴリーのそれぞれの値の箱ひげ図を作成したいです)、異なるカテゴリはX軸に沿ってプロットされています。

パンダ(またはmatplotlib)を使ってどうすればいいですか?

+0

(1)あなたはに多くを行くことができます「インタラクティブなプロット」はどういう意味でしょうか?私が見ているように、jupyterはすでにかなりインタラクティブなので、新しい値を持つセルを呼び出すと別のプロットが作成されます。 (2)日数とは何ですか? '42'のような単一の値ですか?どのように日数を選択したいですか? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest:(1)Jupyterでこの機能を初めて見たのは、このビデオを見て:https://www.youtube.com/watch?v=ZrRpN_IrcBA(概念は24:50周りに導入されました)。 (2)日数は整数です。インタラクティブウィジェットを使用すると、ドロップダウンボックスから値を選択できます。 –

+0

これは、質問に含める情報の一部だったでしょう。このドロップダウンボックスを実装する方法については、更新された回答を参照してください。 – ImportanceOfBeingErnest

答えて

2

単純にデータフレームを日数でフィルタリングし、それぞれのボックスプロットをプロットすることができます。

numer_of_days = 42 
df_filtered= df.loc[df['days'] < numer_of_days] # use operators like ==, >=, <, etc. 
df_filtered[["category", "value"]].boxplot(by="category", return_type='axes') 

enter image description here


ドロップダウンフィールドを得るために、あなたはどのあなたがその特定の日のためのデータフレームをプロット機能を提供するために、 ipywidgets.interact()機能を使用することができます。 (以下では、私は、ドロップダウンが実際にそれらのうちの一日を選択するための理にかなっているように、12日目の数を制限。)

import numpy as np 
import pandas as pd 
from ipywidgets import interact 
%matplotlib notebook 

categories=('A','B','C') 

data = { 
      'days':  np.random.randint(12, size=100), 
      'category': np.random.choice(categories, 100), 
      'value':  100.0 * np.random.random_sample(100) 
     } 

df = pd.DataFrame(data) 

def select_days(number_of_days): 
    df_filtered= df.loc[df['days'] == int(number_of_days)] 
    ax = df_filtered[["category", "value"]].boxplot(by="category", return_type='axes') 
    ax["value"].set_title("Day " + number_of_days) 
    print df_filtered 

days = [str(day) for day in np.arange(12)] 

interact(select_days, number_of_days=days) 

enter image description here

関連する問題