远程Jupyter来实现Python气象聚类分析
- 2019 年 10 月 6 日
- 筆記
日常工作、学习中可能都会有小型工作站或者是服务器(云服务器)
供大家使用,而且使用Python的频率也挺高的,那么通常都会有可能个人电脑性能有限、存储空间或者内存有限的情形,那么我们Jupyter notebook就能够发挥很大的作用,特别是在公司、学校、或者单位局域网的环境下,远程的延迟相对较小,使用Jupyter来做Python数据处理和绘图实在是不错的选择。远程端负责计算,个人电脑仅仅是一个编辑器的作用。
对于一些云服务器,可能相应的端口管理会更加严格一些,但通过设置远程使用Jupyter基本都没有问题。其实,本文所提及的远程使用jupyter主要集中于Python的配置、安装、使用。各取所需,仅仅做简单推介,不做深入的探讨。后文以Kaggle的气象聚类分析
为例,实操一下如何远程Jupyter notebook使用Python的库来计算和绘图。
目标:安装Jupyter,配置服务端Jupyter,远程使用Jupyter,气象聚类分析。 工具:一台远程服务器、一台本地PC、Python3.x+基础包以及依赖的库、kaggle示例测试数据
1.安装Jupyter
回顾以往公众号的帖子,Python入门标配是安装Anaconda全家桶,如果是macOS或者Linux自身也会有预安装Python,替换掉!
,在你安装好Anaconda之后,再进行后续操作,别问我为什么!
使用conda: conda install -c conda-forge jupyterlab
使用pip:
pip install jupyterlab 上述步骤为远程端的配置安装,更加详细的内容请参考:链接[1]
2.配置Jupyter
配置文件所在路径
修改一个名为“upyter_notebook_config.py”的文件,这个文档位于home目录之下,不同的操作系统,它所处的位置稍有不同,大致如下:
• Windows: C:UsersUSERNAME.jupyterjupyter_notebook_config.py
• OS X: /Users/USERNAME/.jupyter/jupyter_notebook_config.py
• Linux: /home/USERNAME/.jupyter/jupyter_notebook_config.py
创建配置文件
如果你在上述路径下
没有找到这个配置文件,那么就需要在终端运行如下命令:
[jpnb@centos-7 ~]$ jupyter notebook --generate-config Writing default config to: /home/jpnb/.jupyter/jupyter_notebook_config.py
设置访问密码
[jpnb@centos-7 ~]$ jupyter notebook password Enter password: **** Verify password: **** [NotebookPasswordApp] Wrote hashed password to /home/jpnb/.jupyter/jupyter_notebook_config.json
下面我们还需要手动生成一个hash密码
。
可能你会问,为什么前面我们生成了一个Jupyter密码,这里还需生成一个hash密码呢?
原因很简单,如果你没有生成这么一个hash密码的话,那么每次通过浏览器远程访问Jupyter时,你都需要输入一次密码,这很繁琐!
但如果我们启用了这个hash密码,只需要首次远程访问Jupyter文档时,输入一次密码,在下次访问时,这个hash密码就好比一个钥匙(token),替我们打开密码之门,也就是免密码登录。
为了生成这个hash密码,我们需要在终端输入“ipython”(全部小写)命令,以进入IPython的交互shell。
然后在IPython中,依次输入如下代码:
In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
将hash密码添加到配置文件中
下面,我们把前面生成的hash密码,添加到前面生成的配置文件:jupyter_notebook_config.py
,
如前所述,这个文件就在我们家目录~/.jupyter
中。通过vim打开这个文件:
vim ~/.jupyter/jupyter_notebook_config.py
(Windows用户可以用诸如Notepad++等可视化效果更好的编辑器打开这个文件)。
在270行左右,找到c.NotebookApp.password
所在行,将如下代码:
#c.NotebookApp.password = ' '
前面的注释符号“#”去掉,然后将“=”右边的赋值,由空字符串’’,修改为前面生成的hash密码(注意,每个用户每次重新生成的hash值都是不同的):
c.NotebookApp.password = u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
这里,特别需要注意的是,hash密码字符串前面的那个u不可省略
。
编辑配置文件
在jupyter_notebook_config.py
中,除了添加前面提及的hash密码之外,还要修改如下部分代码(如果这些代码前有注释符号‘#’,则首先将其删除,表示启用这些设置):
将默认值False修改为True,表示允许外部访问,这个设置和下面IP设置,双重保障外部用户访问的可达性:
等号右边的‘localhost’(仅仅运行本地访问),修改为‘*’,表示允许所有IP皆可访问
c.NotebookApp.allow_remote_access = True
c.NotebookApp.ip='*'
禁止自动打开浏览器
c.NotebookApp.open_browser = False
设置一个固定的notebook服务会监听的IP端口(这里设置为9999),这个值可以任意,只要保证不和其他已经启用的端口号冲突即可。
c.NotebookApp.port = 9999
做完上述配置之后,保存文件并退出。
但此时修改的配置并没有生效,我们还需要在终端输入“jupyter notebook
”命令,这样确保Jupyter重新加载jupyter_notebook_config.py
,进而使得新配置起效。
放行Linux防火墙的端口(非必须,我的工作站就没有这一步!使用推荐默认端口也OK!)
Jupyter Notebook的设置已经接近尾声。但工作还没有做完。虽然我们开启了访问的端口,但Jupyter Notebook毕竟仅是Linux的一个应用程序,仅仅是它许可开放某个端口,这还不够。Linux还得有个“外交部”——防火墙,只有它许可开放,那才是真的开放。因此,下面的工作就是设置防火墙的端口开放。倘若开放某个端口(如9999),使用如下命令:
jpnb@centos-7 .jupyter]$ sudo firewall-cmd --zone=public --add-port=9999/tcp --permanent [sudo] jpnb 的密码:**** Success
如果我们开放的不是9999,则修改上述端口号即可。
同样,有了新设置,我们还需要重新启动防火墙,使之生效。使用下面的命令,即可达到重启防火墙的功效:
[jpnb@centos-7 .jupyter]$ sudo systemctl restart firewalld
3.远程Jupyter
“是骡子是马,拉出来溜溜”。
配置了半天,我们看看能不能访问远程的Jupyter文档呢。我们先通过“ifconfig”来查看一下本机IP,这个流程并不是必需的,它主要是要证明,下面Jupyter文档的访问不是本地完成的。
远程SSH登录Jupyter服务器
现在我们远程SSH登录Jupyter服务器(IP地址为192.168.31.176):
YHMacBookPro:~ yhilly$ ssh jpnb@192.168.31.176 jpnb@192.168.31.176's password: Last login: Thu May 2 14:20:19 2019 from 192.168.31.194
在登录之后,我们启动Jupyter服务器,并让这个服务器后台运行:
[jpnb@centos-7 ~]$ nohup jupyter notebook & [1] 18505 [jpnb@centos-7 ~]$ nohup: 忽略输入并把输出追加到"nohup.out"
这里简单解释一下nohup的含义,nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
nohup command &
使用&命令后,作业被提交到后台运行,当前控制台没有被占用,否则,一旦把当前终端关掉(退出帐户时),作业就会停止运行。
nohup命令可以在你退出帐户之后继续运行相应的进程。
本地个人PC开启远程Jupyter
然后,我们在地址栏中输入远程服务器的IP和端口号:“http://192.168.31.176:9999/”,如图所示:
Jupyter会提示我们输入先前设置的密码。一旦输入密码后,就可以在浏览器上看到运行的Jupyter文档,如图所示:
具体参考内容:链接[2]
4.气象聚类分析实例
Weather Data Clustering using K-Means Python notebook using data from minute_weather
Clustering with scikit-learn
详情链接:链接[3]
In this notebook, we will learn how to perform k-means lustering using scikit-learn in Python.We will use cluster analysis to generate a big picture model of the weather at a local station using a minute- graunlarity data. In this dataset, we have in the order of millions records. How do we create 12 clusters our of them?
References
[1]
链接.1: https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html [2]
链接.2: https://zhuanlan.zhihu.com/p/64524822 [3]
链接.3: https://www.kaggle.com/prakharrathi25/weather-data-clustering-using-k-means/data