Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use graphs in a Jupyter notebook? #1

Closed
dfrankow opened this issue May 7, 2019 · 19 comments
Closed

Use graphs in a Jupyter notebook? #1

dfrankow opened this issue May 7, 2019 · 19 comments

Comments

@dfrankow
Copy link

dfrankow commented May 7, 2019

Thanks for this library.

I'm following along with the README.md and got to:

from interpret import show

ebm_global = ebm.explain_global()
show(ebm_global)

When I run that in my Jupyter notebook I get: RuntimeError: Could not find open port.

Maybe it's trying to run a web server from a notebook?

Can I just make the individual graphs in the notebook? How?

I see functions in interpret.visual.plot, but I'm having a bit of trouble finding the right objects to pass to it.

@dfrankow
Copy link
Author

dfrankow commented May 7, 2019

I think I answered my question.

Looks like ebm_global.visualize() returns a Plotly figure.

But, when I try to plot it, there is an error saying I need a Plotly account:

import plotly.plotly as plotly_py
plotly_py.iplot(ebm_global.visualize())
Aw, snap! We didn't get a username with your request.

Don't have an account? https://plot.ly/api_signup

I made an account, and started reading the docs. The getting-started section said to init with

import plotly 
plotly.tools.set_credentials_file(username='username', api_key='api_key')

where the API key is at https://plot.ly/settings/api.

Then I could display the plot.

@dfrankow
Copy link
Author

dfrankow commented May 7, 2019

So I think I'm good.

@dfrankow dfrankow closed this as completed May 7, 2019
@dfrankow
Copy link
Author

dfrankow commented May 7, 2019

However, for my regression example that just shows a feature-importance graph, which is different from the learned score function in your graph. So, it would be useful to list out which graphs can be generated this way, and how. I'll keep digging.

@dfrankow dfrankow reopened this May 7, 2019
@dfrankow
Copy link
Author

dfrankow commented May 7, 2019

Looks like I can get at features with the 'key' parameter of visualize, e.g.,

plotly_py.iplot(ebm_global.visualize(0))

@interpret-ml
Copy link
Collaborator

interpret-ml commented May 7, 2019

Hi @dfrankow, thanks for the issue! We're just about to introduce a few new API changes that should make this easier in our next release. One, we'll let you specify a port in the show method, so that you can pick your own port that you know is open. Second, we'll introduce a new function that doesn't spin up the local web-server, and directly uses plotly to visualize it. For now, here are a few notes:

visualize() does return a plotly object, and you can use plotly.offline so that you don't need an api key. And yes, if you pass in a key to visualize() , you can get a specific graph back out!

If you run this code at the top of your notebook:

from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

you can then use "iplot(plotly_figure)" in your notebook to get a direct plotly graph. We'll have a nicer API around this soon!

@dfrankow
Copy link
Author

dfrankow commented May 7, 2019

Magic, thank you!

@dfrankow dfrankow closed this as completed May 7, 2019
@seantma
Copy link

seantma commented May 13, 2019

@interpret-ml Thanks for this update. I had a similar error with 127.0.0.1 refused to connect where show(ebm_global) gives me a blank page. I'm assuming this is related to the ports open or not issue.

image

@interpret-ml
Copy link
Collaborator

interpret-ml commented May 14, 2019

Hi Everyone,

Our latest fix (in master and on PyPi -- v0.1.0) should now address this problem. To set a specific ip/port pair, you can use the following new functions before you call show():

from interpret import set_show_addr, get_show_addr

set_show_addr(('127.0.0.1', 7001))

show(explanation)  # Will run on 127.0.0.1 at port 7001

set_show_addr takes in a tuple of (ip address, port number), and will have future visualizations run off of the specified port. get_show_addr returns the current ip/port pair being used by the package.

Re-opening this issue to enable discussion around this. If anyone else is having problems with the new method, please reply here or react to this comment. Thanks!

@interpret-ml interpret-ml reopened this May 14, 2019
@huangwei2013
Copy link

I tried to run without Jupyter.

when
`

ebm_global = ebm.explain_global()
..
set_show_addr(( '{PUBLIC_IP}', 7001))
..
show(ebm_global)
`

cannot visit my public IP by browser (error by ERR_CONNECTION_TIMED_OUT ).
And I tried 127.0.0.1 and visit by wget , only get html with "loading..."

@p9anand
Copy link

p9anand commented May 15, 2019

got following error while setting ipaddress and host on aws Sagemaker.
Screenshot 2019-05-15 at 5 40 31 PM

@interpret-ml
Copy link
Collaborator

@huangwei2013 Thanks for reporting this! We tried on both Ubuntu and Windows machines, and public IP addresses seemed to bind fine for us. Is there a chance it's a port forwarding/firewall issue?

Regarding wget: wget will only return a static html page, and won't execute the Javascript which is required for our visualizations.



One note of caution for anyone reading this: accessing the ip address/port directly at root (ex: http://127.0.0.1:7777) currently does not work. All visualizations are hosted at a designated URL path (ex: http://127.0.0.1:7777/123456). Console prints should have the full URL, and we're looking into making this more accessible.

@interpret-ml
Copy link
Collaborator

@p9anand This issue might be a bit more difficult to reproduce since it's on a specific environment, which we don't have immediate access to. It might take a bit longer to debug, but we're looking into it and we'll keep you in the loop.

@huangwei2013
Copy link

iptables is clean

sysinfo:(vm from Aliyun)
Linux version 3.10.0-957.12.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Apr 29 14:59:59 UTC 2019

output for ‘show(ebm_global)’:
{'text/html': '\n <iframe src="http://127.0.0.1:7001/139629491858848/" width=100% height=800 frameBorder="0"></iframe>\n '}

@interpret-ml
Copy link
Collaborator

Just to confirm, when you load this url in a browser (src of the iframe in the show method): http://127.0.0.1:7001/139629491858848/

You get a page that says "Loading..." which doesn't update further?

@huangwei2013
Copy link

I run on a server without GUI,so just visit by wget . No sure of what will happen later ...

@huangwei2013
Copy link

Thx @BrainMiner , I get the pic

@interpret-ml
Copy link
Collaborator

@huangwei2013 can you try the following to verify that there are no firewalls between the machine with InterpretML and the machine with the browser.

On the server:

mkdir testweb
cd testweb
echo '<html><body>Hello World!</body></html>' > index.html
python -m http.server 7009

On the client, go to:
http://{server_ip_address}:7009/

If you don't see "Hello World", then most likely there is a firewall somewhere along the chain between the machines.

@huangwei2013
Copy link

@interpret-ml
the code you suggest works fine, confirmed its not about firewall.
I may do some test later and will report here if anything found.
let's close the issue and go forward now. :)

@ved93
Copy link

ved93 commented May 22, 2019

I have used above methods but issue still persists. It shows blank running after below commands

import plotly
plotly.tools.set_credentials_file(username='veduc', api_key='uKWNikrzEpZvJv8H45Q6')

from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

from interpret import set_show_addr, get_show_addr
set_show_addr(('172.32.30.160', 8000))
get_show_addr()
marginal = Marginal().explain_data(X_train, y_train, name = 'Train Data')
show(marginal)

Am I doing anything wrong?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

6 participants