前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >远程Jupyter来实现Python气象聚类分析

远程Jupyter来实现Python气象聚类分析

作者头像
MeteoAI
发布2019-09-24 13:05:44
2.1K0
发布2019-09-24 13:05:44
举报
文章被收录于专栏:MeteoAI

日常工作、学习中可能都会有小型工作站或者是服务器(云服务器)供大家使用,而且使用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:\Users\USERNAME\.jupyter\jupyter_notebook_config.py

OS X: /Users/USERNAME/.jupyter/jupyter_notebook_config.py

Linux: /home/USERNAME/.jupyter/jupyter_notebook_config.py

创建配置文件

如果你在上述路径下没有找到这个配置文件,那么就需要在终端运行如下命令:

代码语言:javascript
复制
[jpnb@centos-7 ~]$ jupyter notebook --generate-config
Writing default config to: /home/jpnb/.jupyter/jupyter_notebook_config.py

‍设置访问密码

代码语言:javascript
复制
[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中,依次输入如下代码:

代码语言:javascript
复制
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打开这个文件:

代码语言:javascript
复制
vim ~/.jupyter/jupyter_notebook_config.py

(Windows用户可以用诸如Notepad++等可视化效果更好的编辑器打开这个文件)。

在270行左右,找到c.NotebookApp.password 所在行,将如下代码:

代码语言:javascript
复制
#c.NotebookApp.password = ' '

前面的注释符号“#”去掉,然后将“=”右边的赋值,由空字符串’’,修改为前面生成的hash密码(注意,每个用户每次重新生成的hash值都是不同的):

代码语言:javascript
复制
c.NotebookApp.password = u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

这里,特别需要注意的是,hash密码字符串前面的那个u不可省略

编辑配置文件

jupyter_notebook_config.py 中,除了添加前面提及的hash密码之外,还要修改如下部分代码(如果这些代码前有注释符号‘#’,则首先将其删除,表示启用这些设置):

将默认值False修改为True,表示允许外部访问,这个设置和下面IP设置,双重保障外部用户访问的可达性:

等号右边的‘localhost’(仅仅运行本地访问),修改为‘*’,表示允许所有IP皆可访问

代码语言:javascript
复制
c.NotebookApp.allow_remote_access = True
代码语言:javascript
复制
c.NotebookApp.ip='*'

禁止自动打开浏览器

代码语言:javascript
复制
c.NotebookApp.open_browser = False

设置一个固定的notebook服务会监听的IP端口(这里设置为9999),这个值可以任意,只要保证不和其他已经启用的端口号冲突即可。

代码语言:javascript
复制
c.NotebookApp.port = 9999

做完上述配置之后,保存文件并退出。

但此时修改的配置并没有生效,我们还需要在终端输入“jupyter notebook”命令,这样确保Jupyter重新加载jupyter_notebook_config.py,进而使得新配置起效。

放行Linux防火墙的端口(非必须,我的工作站就没有这一步!使用推荐默认端口也OK!)

Jupyter Notebook的设置已经接近尾声。但工作还没有做完。虽然我们开启了访问的端口,但Jupyter Notebook毕竟仅是Linux的一个应用程序,仅仅是它许可开放某个端口,这还不够。Linux还得有个“外交部”——防火墙,只有它许可开放,那才是真的开放。因此,下面的工作就是设置防火墙的端口开放。倘若开放某个端口(如9999),使用如下命令:

代码语言:javascript
复制
jpnb@centos-7 .jupyter]$ sudo firewall-cmd --zone=public --add-port=9999/tcp --permanent
[sudo] jpnb 的密码:****
Success

如果我们开放的不是9999,则修改上述端口号即可。

同样,有了新设置,我们还需要重新启动防火墙,使之生效。使用下面的命令,即可达到重启防火墙的功效:

代码语言:javascript
复制
[jpnb@centos-7 .jupyter]$ sudo systemctl restart firewalld

3.远程Jupyter

“是骡子是马,拉出来溜溜”。

配置了半天,我们看看能不能访问远程的Jupyter文档呢。我们先通过“ifconfig”来查看一下本机IP,这个流程并不是必需的,它主要是要证明,下面Jupyter文档的访问不是本地完成的。

远程SSH登录Jupyter服务器

现在我们远程SSH登录Jupyter服务器(IP地址为192.168.31.176):

代码语言:javascript
复制
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服务器,并让这个服务器后台运行:

代码语言:javascript
复制
[jpnb@centos-7 ~]$ nohup jupyter notebook &
[1] 18505
[jpnb@centos-7 ~]$ nohup: 忽略输入并把输出追加到"nohup.out"

这里简单解释一下nohup的含义,nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

代码语言:javascript
复制
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]

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MeteoAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.安装Jupyter
  • 2.配置Jupyter
    • 配置文件所在路径
      • 创建配置文件
        • ‍设置访问密码
          • 将hash密码添加到配置文件中
            • 编辑配置文件
              • 放行Linux防火墙的端口(非必须,我的工作站就没有这一步!使用推荐默认端口也OK!)
              • 3.远程Jupyter
                • 远程SSH登录Jupyter服务器
                  • 本地个人PC开启远程Jupyter
                  • 4.气象聚类分析实例
                    • References
                    相关产品与服务
                    云服务器
                    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档