Mpld3: PatchCollection-TypeError : array ([1.])๋Š” JSON ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 10์›” 13์ผ  ยท  17์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mpld3/mpld3

ํŒจ์น˜ ์ปฌ๋ ‰์…˜์˜ ์ผ๋ถ€ ํŒจ์น˜ ํ”Œ๋กฏ์œผ๋กœ .html์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
" https://matplotlib.org/examples/api/patch_collection.html "์—์„œ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ 

๋ˆ„๊ตฐ๊ฐ€ ๋„์™€ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ,

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "ttt.py", ์ค„ 55,
htmlfil.write (mpld3.fig_to_html (๊ทธ๋ฆผ))
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/mpld3/_display.py", ์ค„ 251, fig_to_html
figure_json = json.dumps (figure_json, cls = NumpyEncoder),
๋คํ”„์—์žˆ๋Š” ํŒŒ์ผ "/usr/lib/python2.7/json/__init__.py", 250 ํ–‰
sort_keys = sort_keys, ** kw) .encode (obj)
ํŒŒ์ผ "/usr/lib/python2.7/json/encoder.py", 207 ํ–‰, ์ธ์ฝ”๋”ฉ
์ฒญํฌ = self.iterencode (o, _one_shot = True)
iterencode์˜ ํŒŒ์ผ "/usr/lib/python2.7/json/encoder.py", 270 ํ–‰
return _iterencode (o, 0)
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/mpld3/_display.py", ๋ผ์ธ 138, ๊ธฐ๋ณธ๊ฐ’
return json.JSONEncoder.default (self, obj)
ํŒŒ์ผ "/usr/lib/python2.7/json/encoder.py", 184 ํ–‰, ๊ธฐ๋ณธ๊ฐ’
๋ฐœ์ƒ TypeError (repr (o) + "is not JSON serializable")
TypeError : array ([1.])๋Š” JSON ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

bug innext

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋น„์Šทํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. matplotlib.collections.pathcollection ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ถฉ๋ถ„ํžˆ ์‚ญ์ œํ•˜์ง€ ์•Š์•„ ๋งŽ์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ numpy ์ธ์Šคํ„ด์Šค ํ˜•ํƒœ๋กœ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ mpld3๋Š” ์ด๋Ÿฌํ•œ numpy ์ธ์Šคํ„ด์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•ด "NumpyEncoder"์— ์˜์กดํ•˜๋ฉฐ array ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚˜์—ด๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์ฝ”๋”๊ฐ€ ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์น˜๋‹ค:
_display.py

class NumpyEncoder(json.JSONEncoder):
    """ Special json encoder for numpy types """
    def default(self, obj):
        if isinstance(obj, (numpy.int_, numpy.intc, numpy.intp, numpy.int8,
            numpy.int16, numpy.int32, numpy.int64, numpy.uint8,
            numpy.uint16,numpy.uint32, numpy.uint64)):
            return int(obj)
        elif isinstance(obj, (numpy.float_, numpy.float16, numpy.float32, 
            numpy.float64)):
            return float(obj)
        elif isinstance(obj,(numpy.ndarray,)): #### This is the fix
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)

๋ชจ๋“  17 ๋Œ“๊ธ€

๋น„์Šทํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. matplotlib.collections.pathcollection ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ถฉ๋ถ„ํžˆ ์‚ญ์ œํ•˜์ง€ ์•Š์•„ ๋งŽ์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ numpy ์ธ์Šคํ„ด์Šค ํ˜•ํƒœ๋กœ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ mpld3๋Š” ์ด๋Ÿฌํ•œ numpy ์ธ์Šคํ„ด์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•ด "NumpyEncoder"์— ์˜์กดํ•˜๋ฉฐ array ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‚˜์—ด๋˜์ง€ ์•Š์œผ๋ฉด ์ธ์ฝ”๋”๊ฐ€ ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์น˜๋‹ค:
_display.py

class NumpyEncoder(json.JSONEncoder):
    """ Special json encoder for numpy types """
    def default(self, obj):
        if isinstance(obj, (numpy.int_, numpy.intc, numpy.intp, numpy.int8,
            numpy.int16, numpy.int32, numpy.int64, numpy.uint8,
            numpy.uint16,numpy.uint32, numpy.uint64)):
            return int(obj)
        elif isinstance(obj, (numpy.float_, numpy.float16, numpy.float32, 
            numpy.float64)):
            return float(obj)
        elif isinstance(obj,(numpy.ndarray,)): #### This is the fix
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ท€ํ•˜์˜ ์ˆ˜์ •์œผ๋กœ ๋‚ด save_html ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฐ์ ๋„๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ "๋ฐฐ์—ด์ด JSON ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ html์ด ์•„๋‹™๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์ด ์žˆ๊ณ  ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @shouldsee !

๋ˆ„๊ตฐ๊ฐ€ ์ƒ์„ฑํ•˜๋ฉด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž๋™ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ํ†ต๊ณผํ•˜๋ฉด ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ!

์ œ์•ˆ ๋œ ์ˆ˜์ • ์‚ฌํ•ญ๋„ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

javadba๋Š” ์ปค๋ฐ‹์—์„œ PR์„ ๋งŒ๋“ค์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ณต์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ž…๋‹ˆ๋‹ค
matplotlib==2.2.2 mpld3==0.3

๋‚ด ํ”„๋กœ๊ทธ๋žจ์—์„œ mpld3._display.NumpyEncoder๋ฅผ ๋ฎ์–ด ์จ์„œ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

#mpld3 hack
class NumpyEncoder(json.JSONEncoder):
    def default(self, obj):
        import numpy as np
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)
from mpld3 import _display
_display.NumpyEncoder = NumpyEncoder

์•„์ง ์ด์— ๋Œ€ํ•œ ํ”„๋กœ๋•์…˜ ์ˆ˜์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ? Python ํ”„๋กœ์ ํŠธ์— mpld3๋ฅผ ๋„์ž…ํ–ˆ๋Š”๋ฐ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฐฐ!

์ด ์ˆ˜์ •์€ master์—์„œ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ 2 ๋…„ ๋™์•ˆ mpl3d๊ฐ€ ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€๋˜์ง€ ์•Š๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฒƒ์ด ์–ธ์ œ / ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ...

mpld3 ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด
๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
pip install git+git://github.com/mpld3/mpld3@master#egg=mpld3

๋˜๋Š” ์ถ”๊ฐ€
git+git://github.com/mpld3/mpld3@master#egg=mpld3 ์„ requirements.txt ํŒŒ์ผ์— ์ถ”๊ฐ€

@aflaxman @jakevdp ์•„๋งˆ๋„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š์Œ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€ ๋‚ด๊ธฐ ์œ„ํ•ด์ด ์ €์žฅ์†Œ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://help.github.com/articles/archiving-a-github-repository/

๋‚˜๋Š” bokeh/bkcharts ์ด๊ฒƒ์„ํ–ˆ๋‹ค

@cliffckerr ์™€ ํšŒ์‚ฌ๋Š”์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€ํ™œ์‹œํ‚ฌ ๊ณ„ํš์ž…๋‹ˆ๋‹ค! ๊ทธ๊ฒƒ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ์•„์นด์ด๋น™์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” mpld3 + Django์˜ ๋‚ ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ด๋–ค ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด๊ฑธ ์‚ด๋ ค ๋‘์„ธ์š”!

๋‚ด iPhone์—์„œ ๋ณด๋ƒ„

2018 ๋…„ 7 ์›” 14 ์ผ 00:01์— Abraham Flaxman < [email protected] [email protected] >์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@cliffckerr https://github.com/cliffckerr ์™€ ํšŒ์‚ฌ๋Š”์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€ํ™œ์‹œํ‚ฌ ๊ณ„ํš์ž…๋‹ˆ๋‹ค! ๊ทธ๊ฒƒ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ์•„์นด์ด๋น™์ด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/mpld3/mpld3/issues/434#issuecomment-404974279 ์—์„œ ๋ณด๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/AHqXbA3CO- ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฝ”๋“œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž๋‹ค. ๋‚ด ํ•„์š”์— ์™„๋ฒฝํ•˜๊ฒŒ ๋“ค๋ ธ๋‹ค.
๊ฑด๋ฐฐ, ๋งˆํฌ.

@addinall @aflaxman @bryevdv ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ๋˜ ์‚ด๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ํฌํฌ (https://github.com/optimamodel/mpld3)์—์„œ ์ž‘์—… ์ค‘์ด์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ์•ˆ์ •๋˜๋ฉด ์—ฌ๊ธฐ๋กœ ๋‹ค์‹œ ๋ณ‘ํ•ฉ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘

fig_to_dict ()์—์„œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๋œ dict๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ธ์ฝ”๋”๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด ํฌํ•จ ๋œ ndarray๋กœ ์ธํ•ด json์œผ๋กœ ์ง๋ ฌํ™” ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‚ด๋ถ€ NumpyEncoder ํด๋ž˜์Šค ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด.

from mpld3._display import NumpyEncoder
json.dumps(mpld3.fig_to_dict(fig), cls=NumpyEncoder)

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ž…๋‹ˆ๋‹ค
matplotlib==2.2.2 mpld3==0.3

๋‚ด ํ”„๋กœ๊ทธ๋žจ์—์„œ mpld3._display.NumpyEncoder๋ฅผ ๋ฎ์–ด ์จ์„œ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

#mpld3 hack
class NumpyEncoder(json.JSONEncoder):
    def default(self, obj):
        import numpy as np
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)
from mpld3 import _display
_display.NumpyEncoder = NumpyEncoder

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ž…๋‹ˆ๋‹ค
matplotlib==2.2.2 mpld3==0.3

๋‚ด ํ”„๋กœ๊ทธ๋žจ์—์„œ mpld3._display.NumpyEncoder๋ฅผ ๋ฎ์–ด ์จ์„œ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

#mpld3 hack
class NumpyEncoder(json.JSONEncoder):
    def default(self, obj):
        import numpy as np
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)
from mpld3 import _display
_display.NumpyEncoder = NumpyEncoder

๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
๋‹น์‹ ์€ ์ฒœ์žฌ์ž…๋‹ˆ๋‹ค!
์ €๋Š” ํŒŒ์ด์ฌ์— ๋Œ€ํ•ด ๊ฑฐ์˜ ์•Œ์ง€ ๋ชปํ•ด์„œ ์ง์ ‘ ๊ณ ์น  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰