Mpld3: xticksを䜿甚する堎合の「TypeError***はJSONシリアル化可胜ではありたせん」

䜜成日 2014幎05月11日  Â·  29コメント  Â·  ゜ヌス: mpld3/mpld3

xticks匕数を䜿甚しおいるずきに、パンダプロットをいじっおいたずきに、この゚ラヌに遭遇したした。

抂念実蚌はここにありたす
http://nbviewer.ipython.org/gist/edvakf/a47a41ace10afbd891ff
http://pandas.pydata.org/pandas-docs/stable/visualization.htmlの倉曎

最も参考になるコメント

行を远加しおこれを修正したした

elif isinstance(obj, (numpy.ndarray,)):
        return obj.tolist()

/mpld3/_display.pyぞNumpyEncoder

党おのコメント29件

ああ- mplexporterはxticksがリストであるず誀っお想定しおいるようです。 それはバグです。

それたでの間、xticksを手動でリストに倉換するず、機胜するはずです。

実際にはそうではありたせん。 ぀たり、以䞋は問題なく機胜したす。

fig = plt.figure()
ax = fig.add_subplot(111, xticks=np.arange(11))
ax.plot([0, 10], [0, 10], '-k')
mpld3.show()

パンダはここでそのダニで奇劙なこずをしおいたす゚ラヌは2000がシリアル化できないこずを瀺しおいたす、これはクレむゞヌです。 パンダには、ある皮の組み蟌みのシリアル化できない浮動小数点型がありたすか

それは2000幎ではなく、幎です。 datetime地獄ぞようこそ。
2014幎6月19日線集 datetimeが問題であるずいうのは間違っおいたようです...

うヌん...どうすればいいのかわからない。 䜕かご意芋は

to_jsonでpandas to_jsonを䜿甚するのに圹立ちたすか

http://pandas.pydata.org/pandas-docs/dev/io.html#date -handling

パンダでto_jsonを䜿甚するのに圹立ちたすか

おそらく、しかしその埌、コヌド内の倚くのこずに察しおtry ... exceptステヌトメントを実行する必芁がありたす぀たり、倀がPandas倉数の堎合は、䞀方向に実行したす。それ以倖の堎合は別の方法で、javascript偎の軞ラベルがPandasが出力するこずを決定したJSON構造を凊理できるこずを確認したす。 非垞に壊れやすい゜リュヌションであり、メンテナンスの悪倢のように聞こえるので、そのレベルの耇雑さを远加したくありたせん。

そうですか。 これは、Pythonがナヌザヌ定矩クラスのjsonシリアル化メ゜ッドを公開できないこずに芁玄されたす。 この問題を解決できたす。

開いたたたにしおおく必芁がありたす...これを凊理するためのより良い方法があるかもしれたせん。 考えおおく。

ちょっず埅っおください。これはPython2.7でうたく機胜しおいるようです。 Python3の問題だけでしょうか

In [56]: matplotlib.__version__
Out[56]: '1.3.1'

In [57]: pandas.__version__
Out[57]: '0.13.1'

皆さんこんにちは、
関連するかどうかはわかりたせんが、この海のグラフをプロットしようずするず、同様の問題が発生したす http //www.stanford.edu/~mwaskom/software/seaborn/examples/many_facets.html

mpld3.fig_to_html(grid.fig, 'test.html')
/home/vagrant/graph/local/lib/python2.7/site-packages/mpld3/mplexporter/exporter.py:82: UserWarni ng: Blended transforms not yet supported. Zoom behavior may not work as expected.
  warnings.warn("Blended transforms not yet supported. "
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/vagrant/graph/local/lib/python2.7/site-packages/mpld3/_display.py", line 236, in fig_to_html
    figure_json=json.dumps(figure_json),
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: 0 is not JSON serializable

問題は、numpy.int64番号が内郚で䜿甚されおおり、これらはデフォルトでjsonシリアル化できないこずです。
これを凊理するためのjson.JSONEncoderを提䟛するために、ラむブラリにフックが必芁です。

アむデアの䜙地を提䟛するためだけに

同じ問題が発生したすが、mpld3を䜿甚するプロゞェクトで䜿甚しおいるプロゞェクトのバック゚ンドずしお䜿甚しおいるDjangoに接続しおいたす。

numpy配列をシリアル化しようずしたしたが、django 1.6を䜿甚するず、この゚ラヌが発生したした。 1.5にダりングレヌドしたしたが、動䜜したす。 その理由は、1.6以降ではjsonで、1.5以䞋ではPickle経由でシリアル化が行われるためです。

これが問題の可胜性を芋぀けるのに圹立぀こずを願っおいたす。

Med vennlig hilsen、
ゞェラルドデラリノァ゚スピノサ
HÞgskolelektor
HÞgskoleniGjÞvik
電子メヌルゞェラルド。 [email protected]
モヌビル+47950 13322

2014幎6月19日には、午埌04時56分で、lvasseur [email protected]曞きたした

皆さんこんにちは、
関連するかどうかはわかりたせんが、この海のグラフをプロットしようずするず、同様の問題が発生したす http //www.stanford.edu/~mwaskom/software/seaborn/examples/many_facets.html

mpld3.fig_to_htmlgrid.fig、 'test.html'
/home/vagrant/graph/local/lib/python2.7/site-packages/mpld3/mplexporter/exporter.py:82UserWarni ng混合倉換はただサポヌトされおいたせん。 ズヌム動䜜が期埅どおりに機胜しない堎合がありたす。
warnings.warn "ブレンドされた倉換はただサポヌトされおいたせん。"
トレヌスバック最埌の最埌の呌び出し
ファむル ""、1行目、
ファむル "/home/vagrant/graph/local/lib/python2.7/site-packages/mpld3/_display.py"、236行目、fig_to_html
figure_json = json.dumpsfigure_json、
ファむル「/usr/lib/python2.7/json/__init__.py」、231行目、ダンプ
return _default_encoder.encodeobj
ファむル "/usr/lib/python2.7/json/encoder.py"、行201、゚ンコヌド
チャンク= self.iterencodeo、_one_shot = True
iterencodeのファむル "/usr/lib/python2.7/json/encoder.py"、行264
return _iterencodeo、0
ファむル "/usr/lib/python2.7/json/encoder.py"、行178、デフォルト
TypeErrorrepro+ "はJSONシリアル化可胜ではありたせん"を発生させたす
TypeError0はJSONシリアル化可胜ではありたせん
問題は、numpy.int64番号が内郚で䜿甚されおおり、これらはデフォルトでjsonシリアル化できないこずです。
これを凊理するためのjson.JSONEncoderを提䟛するために、ラむブラリにフックが必芁です。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください。

ご参考たでに、

    from json import JSONEncoder
    class MyEncoder(JSONEncoder):
        def default(self, obj):
            if isinstance(obj, numpy.int64):
                return int(obj)
            return JSONEncoder.default(self, obj)

    return template.render(figid=json.dumps(figid),
                           d3_url=d3_url,
                           mpld3_url=mpld3_url,
                           figure_json=json.dumps(figure_json, cls=MyEncoder),
                           extra_css=extra_css,
                           extra_js=extra_js)

/mpld3/_display.pyの問題を解決したすfig_to_html

今は詊す時間がありたせんが、これは問題であり、解決策の正しい方向性であるように思われたす。 json.dumpドキュメントでは、 defaultオプションを䜿甚するず、わずかに軜量な゜リュヌションがあるず思いたすが、最終的には1行短くなる可胜性がありたす。 プルリク゚ストを実行する準備はできおいたすか

これはPR213で修正されるず思っおいたしたが、元の投皿のipythonノヌトブックがただ機胜しおいたせん。 他の誰かがそれを詊すこずができたすか

い぀か詊しおみたす

ただこれで混乱しおいたす...213が実際にここで䜕かを修正したかどうかはわかりたせん。 それなしでint64オブゞェクトをシリアル化するこずができたす...

これは解決されたしたか
私はfig_to_htmlパンダが生成した図を芋るこずができたせん私はTypeError: 0 is not JSON serializableを取埗したす。 図はうたく生成されたす。
plt.barを䜿甚しお再詊行したずきに、カスタム文字列でyticksを䜿甚した堎合にも゚ラヌが発生したす。

の解き方

わからない。 軞ラベルが敎数のシリアル化できないバヌゞョンであるこずに問題があるようです。 あなたが䜕かを理解した堎合は、私たちに知らせおください。

䜿甚するずこの゚ラヌが発生するこずを指摘したかっただけです

dates = df.Date.apply(lambda dt: dt.strftime('%B')[:3] + dt.strftime(' %d')).values
plt.xticks(x, dates, rotation='vertical')

しかし、ではありたせん

ax.set_xticklabels(dates, rotation='vertical')

お圹に立おれば。

線集さらに詳しく調べるず、埌者のバヌゞョンでぱラヌは発生したせんが、結果の図圢のxticksは実際には蚭定されたせん。

線集2私の悪い、ちょうど芋぀けたダニはサポヌトされおいたせん22。

FWIW、箱ひげ図を䜿甚するず、問題が再珟される可胜性がありたす。

import numpy as np, mpld3
np.random.seed(937)
data = np.random.lognormal(size=(37, 4), mean=1.5, sigma=1.75)
labels = list('ABCD')
fs = 10  # fontsize

fig, axes = plt.subplots(1, 1, figsize=(6, 6)) 
axes.boxplot(data, labels=labels)
axes.set_title('Default', fontsize=fs)

html_fig = mppld3.fig_to_html(fig)

具䜓的には、ここにpipfreezeのバヌゞョンがありたす

cycler==0.10.0
Jinja2==2.8
MarkupSafe==0.23
matplotlib==1.5.1
mpld3==0.2
numpy==1.10.4
pandas==0.17.1
ptyprocess==0.5.1
pyparsing==2.1.0
python-dateutil==2.5.0
pytz==2015.7
six==1.10.0
wheel==0.29.0

Python3.4.3の堎合。

@lvasseurによっお提案されたパッチは問題を修正しおいるようですが、それが解決策であるかどうかはわかりたせん。

元の䟋を機胜させるには、np.arange2000,2002,1の代わりに[floatxfor x in range2000,2002]を䜿甚したす。

関連するかどうかはわかりたせんが、この海のグラフをプロットしようずするず、同様の問題が発生したす http //www.stanford.edu/~mwaskom/software/seaborn/examples/many_facets.html

海の棒グラフの図にmtld3.display(fig)を詊しおいるずきに、同じ゚ラヌが発生したす。

TypeError0はJSONシリアル化可胜ではありたせん

誰でもmpld3で海のプロットをレンダリングできたすか

これは、デヌタ倀にnanがあるために発生するようです。 _display.py:243で壊れた
figure_json dictでnanをNoneに眮き換えるず、期埅どおりの出力が埗られたす。

線集䞊蚘は問題を解決しおいないようです私はデバッグむンタヌプリタヌでテストしおいたしたが、mpld3を䜿甚した堎合は機胜したせんでした。
したがっお、 sns.barplot()レンダリングは機胜したせんが、 plt.bar()レンダリング

行を远加しおこれを修正したした

elif isinstance(obj, (numpy.ndarray,)):
        return obj.tolist()

/mpld3/_display.pyぞNumpyEncoder

ありがずう@jaklingerこれは

@jaklinger 、こんにちは、あなたの提案に感謝したす、それは完璧に機胜したす 1぀だけ明確にしたかったのですが、numpy配列を蟞曞に倉換しお返そうずしたしたが、蟞曞に問題はありたせんでしたが、「float 32はjsonシリアル化できたせん」ずいう゚ラヌがスロヌされ、印刷しお確認したした。 tolistメ゜ッドを䜿甚するだけで、配列がPythonリストに倉換されたした。
前[100。 0。0。0。0。]
tolist付き[100.0、0.0、0.0、0.0、0.0]そしおそれは完党に戻りたした。
では、問題は正確には䜕でしたか よろしくお願いしたす。

@ padmaksha18あなたが䜕を意味するのか100

numpy配列を蟞曞に倉換したした

しかし芁するに numpyずpythonタむプは同じではありたせん float32はfloatず同じではありたせん; arrayはlistなどず同じではなく、 JSONEncoderクラスは 'ネむティブのpythonタむプのみを蚱可したす。 したがっお...この関数新しい修正を含むのポむントは、入力objをネむティブのpython盞圓するものに倉換するこずです。

@jaklinger こんにちはゞョ゚ル、どうもありがずう

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡