返回介绍

10.4 发布数据

发布于 2024-01-27 21:43:11 字数 12514 浏览 0 评论 0 收藏 0

你已经花费了时间研究、探索和展示数据,现在想要通过网络分享报告给全世界。当你准备在网络上发布数据时,首先应该确定数据是否能够被公开访问。

 如果你的展示包含私密的数据或者数据只与你的公司相关(专利数据),你应该在一个受密码保护的网站上发布它,或者在内网发布。

如果你想要和世界分享数据,通过诸多网络平台之一来发布不会有问题。在这一节里,我们会介绍如何在易于使用的免费博客平台或者你自己的网站上发布数据。

10.4.1 使用可用站点

许多网站被设计用来发布数据,以迎合类似你这样的想要分享报告或想法并将它们简单地发布到网络上的作者和研究者。下面是一些较好的选择。

01. Medium

在 Medium(https://medium.com/)上,你可以创建一个账户,开始写自己的文章,轻松地嵌入评论、引用、图片和图表。因为这是一个社交媒体平台,所以其他的 Medium 用户可以推荐你的文章,分享它,标记它,同时关注你之后的文章。

 使用一个类似 Medium 的托管站点让你能够专注于写作和报告,不用花时间去琢磨如何搭建和维护你自己的网站。

Medium 团队维护了一些很好的图表工具,包括 Charted.co(https://github.com/mikesall/charted),它使用简单的 CSV 或 TSV 文件来渲染一个交互图表。在写作本书时,它们还没有实现直接嵌入这些图表到文章中的能力,但是很有可能会添加这个功能。

Medium 使得将不同种类的社交媒体、视频、照片和其他媒介嵌入文章很容易(https://medium.com/@Medium/embed-videos-tweets-music-and-more-into-your-medium-stories-3b5c09c116e8#.w5e3j4n9v)。你可以通过阅读 Medium 每月最受欢迎的文章(https://medium.com/top-100/)来获得很多很棒的关于讲故事的想法。

 建议阅读和搜索你主题领域的 Medium 博文,同这一主题的其他作者联系,来了解他们是如何讲故事的。

Medium 是在社交网络上写作并将你的想法分享给世界的很好方式。但是如果你想要运行自己的博客呢?继续阅读下面关于搭建和运行网站的选择。

02. 快速上手的网站:WordPress、Squarespace

如果想要对布局和内容有更多的控制,你可以在 Squarespace(http://www.squarespace.com/)或 WordPress(https://wordpress.com/)上搭建自己的博客。这两个平台给了你一个免费(WordPress)或者廉价(Squarespace)的被维护的站点,让你可以自定义站点的外观和风格。你可以设置一个域名,这样你的文章会挂载在自己的 URL 下。

大多数虚拟主机提供商为 WordPress 开发了一键安装版本供你使用。你需要选择一个用户名和一些站点标题,并且确保有一个足够强大和安全的密码。在 WordPress 里,你有很多主题(https://wordpress.org/themes/browse/popular/)和插件(https://wordpress.org/plugins/browse/popular/)可以选择,来自定义网站的样式、风格和功能。为了保护站点,建议你安装一个流行的安全插件,并阅读 WordPress 关于安全的建议(http://codex.wordpress.org/Hardening_WordPress)。

使用 Squarespace,只需要注册一个账户,选择一个布局。你可以自定义相关联的社交媒体、域名,以及你是否想要有一个电商店铺。

一旦站点就绪,并且运行起来,添加内容是非常简单的。你会想要发布新的页面或文章,使用内置的编辑器添加文字和图片(或者,如果你正在使用 WordPress,可以安装额外的编辑器插件,支持更多的特性),之后发布内容。

 你可以让文章更容易被找到,方法是通过 SEO 花费一些时间来填充描述和关键词,来提高文章的可见度。WordPress 插件和 Squarespace 特性可以为每篇文章做到这些。

03. 自有博客

如果你运行着自己的网站或博客,你已经有了一个很棒的分享报告的平台。你需要确保可以适当地将视觉故事嵌入到网站中。生成的大多数图表可以很容易地嵌入到网站的 HTML 代码中。

如果你在使用除了 WordPress 或 Squarespace 以外的其他平台,可能需要研究在站点上如何分享图表、视频和照片。建议你联系平台的社区或创建者,或者阅读站点的指引和文档,来确定如何最好地嵌入图片、图表和交互式元素。

10.4.2 开源平台:创建一个新网站

我们已经提到了几个使用 Squarespace 和 WordPress 等免费或廉价平台创建和运行新站点的选项;但是如果你想要启动、运行和维护自己的站点,可以从众多伟大的开源平台中选择一个。

01. Ghost

Ghost 是一个很容易运行的平台(https://github.com/tryghost/Ghost)。Ghost 使用 Node.js(https://nodejs.org/),一个开源的 JavaScript 异步服务器;如果你对 JavaScript 很感兴趣,使用和学习它都很有趣。因为它是异步的,所以拥有很好的性能,能够处理大量的请求。 Ghost 还提供了搭建托管站点的能力(https://ghost.org/),与 WordPress 或 Squarespace 类似,收取一定的费用。

如果你想要挂载自己的 Ghost 博客,DigitalOcean 和 Ghost 合作提供了一个容易使用和安装的服务器镜像(https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-ghost-application),不用一个小时就可在你的服务器上创建和运行 Ghost 站点。如果这是你第一次搭建服务器,强烈建议使用这个方式,因为一些初始的工作已经替你完成。

如果你有自己的服务器,并且想要在其他的平台上从头开始安装 Ghost,Ghost 提供了一些教程(http://support.ghost.org/deploying-ghost/)。你需要执行以下主要步骤。

(1) 下载并安装最新的源代码。

(2)运行 node[建议你使用 nvm(https://github.com/creationix/nvm)]。

(3)使用 npm(node 版本的 pip)安装 node 依赖。

(4)运行 pm2(https://github.com/Unitech/pm2)来管理 Ghost 进程。

(5) 启动 nginx,使用网关与运行的 Ghost 进程通信。

(6) 开始写博客!

如果你遇到了问题,可以登入 Ghost 的 slack 频道(https://ghost.org/slack/),看看是否有人能够帮助你,或者在 Stack Overflow(http://stackoverflow.com/)上搜索更多相关的信息。

02. GitHub Pages和Jekyll

如果你使用 GitHub 托管代码,你也可以用它来托管自己的网站。GitHub Pages(https://pages.github.com/)是一个依靠 GitHub 运行的网站托管工具,让你可以灵活地部署,并能轻松创建内容。使用 GitHub Pages,你可以通过将静态内容提交到你的仓库,直接部署你的 GitHub 页面。如果你喜欢使用框架,可以使用 Jekyll(http://jekyllrb.com/),一个基于 Ruby 的静态页面生成器,它集成了 GitHub Pages。

Jekyll 的文档(http://jekyllrb.com/docs/home/)有一个说明性的概述,涵盖了如何在本地安装和运行 Jekyll,但是建议你阅读 Barry Clark 为 Smashing 杂志编写的文章(https://www.smashingmagazine.com/2014/08/build-blog-jekyll-github-pages/)。在这篇文章中,他阐述了如何复制(fork)一个已有仓库,运行自己的站点,以及修改 Jekyll 的设置和特性。如果你不想使用 Jekyll,但是仍然想使用 GitHub Pages,你可以使用库或者手动地生成静态的 HTML 文件,再将这些文件提交到 GitHub Pages 仓库。

 一个很容易使用的 Python HTML 生成器是 Pelican(https://github.com/getpelican/pelican),它可以接受 AsciiDoc、Markdown 或者 reStructuredText 格式的文件,并将它们转化为静态内容。它提供了简单的步骤来启动评论和访问分析,以及使用 GitHub Pages 的相当全面的介绍(http://docs.getpelican.com/en/latest/tips.html#publishing-to-github)。

还有很多其他的静态站点生成器,也还有很多关于如何将它们与 GitHub Pages 集成的文章。一个搭建 GitHub Pages 博客的选择是 Hexo(http://jdpaton.github.io/2012/11/05/setup-hexo/),它是一个基于 Node.js 的框架。Octopress(https://github.com/octopress/octopress)是另外一个很棒的选项,它基于 Jekyll 构建,所以你可以轻松地使用 GitHub Pages 和 Ruby 来发布和部署站点。

03. 一键部署

如果你坚持使用大型的博客工具或网站框架,比如 WordPress,DigitalOcean 有很多一键安装的包(https://www.digitalocean.com/features/one-click-apps/),让你能够在短时间内搭建自己的服务器,并安装所有必需的库和数据库。它同样提供了便捷的入门指引,描述了如何在 droplet2)上安装 WordPress(https://www.digitalocean.com/community/tutorials/how-to-use-the-wordpress-one-click-install-on-digitalocean)。

除了大型的虚拟主机提供者外,你同样可以在 Heroku(一个基于云的应用主机服务商,https://devcenter.heroku.com/start)上使用 Python、Ruby 和其他开源的平台。如果你正在使用或学习一个开源框架,可以使用 Heroku 来部署自己的网站;它提供了很棒的文档和技术支持。

无论你使用哪一个框架或解决方案,专注于用简单的方式在网络上发布内容或代码,是很重要的。选择一些简单直接的方案,并专注于恰当地向全世界展示、发布和分享内容。

2DigitalOcean 虚拟主机的别名。——译者注

10.4.3 Jupyter(曾名IPython notebook)

我们已经介绍了怎样分享你的发现,但是如果你还想分享代码、数据或者研究过程呢?根据听众的不同,分享代码并允许人们直接与其交互可能是很合适的。如果你准备分享给同事和同行,这是一个很好的展示你如何进行研究的方式。

Jupyter notebook(https://jupyter.org/,曾名 IPython notebook,http://ipython.org/notebook.html)是一个很好的分享 Python 代码和代码生成的图表的方式。这些 notebook 组合了易于使用的浏览器和 IPython 的交互特性。notebook 在迭代代码设计和数据探索中也非常有用。

 正在学习新的库或者使用新数据?在 Jupyter notebook 中保存你的工作。一旦完成了迭代并优化了代码,你可以将代码中重要的部分移动到仓库中,恰当地结构化、文档化,将这些东西综合在一起。

使 Jupyter 就绪并在本地运行它非常简单,只需运行这个命令:

pip install "ipython[notebook]"

要启动 notebook 服务器,运行:

ipython notebook

你看到的终端输出应该类似于:

[NotebookApp] Using MathJax from CDN: https://cdn.mathjax.org/mathjax/latest/MathJax.js
[NotebookApp] Terminals not available (error was No module named terminado)
[NotebookApp] Serving notebooks from local directory: /home/foo/my-python
[NotebookApp] 0 active kernels
[NotebookApp] The IPython Notebook is running at: http://localhost:8888/
[NotebookApp] Use Control-C to stop this server and shut down all kernels.
Created new window in existing browser session.

这是 notebook 服务器启动的过程。你会看到一个新的浏览器窗口(或 tab)打开一个空的 notebook。

根据运行 notebook 文件夹的不同,你可能会在浏览器中看到一些文件。notebook 服务器直接在当前文件夹中运行,并展示这个文件夹的内容。建议为 notebook 创建一个新的文件夹。为了创建新的文件夹而停止服务器,需在运行的终端中输入 Ctrl-C(Windows 和 Linux 上)或者 Cmd-C(Mac 上)。创建一个新的目录,切换目录到这个文件夹下,重新启动服务器,类似下面这样:

mkdir notebooks
cd notebooks/
ipython notebook

让我们通过创建一个新的 notebook 来使用 Jupyter。为了达到这个目的,点击 New 下拉菜单,选择 Notebooks 头部下的 Python 2。创建好新的 notebook 后,给它一个有用的名称。为此,点击 title 区域(这里当前应该为“Untitled”),输入一个新名称。为 notebook 命名会在将来节省你大量的搜索时间。

在 Jupyter 中,每一个文本区域被叫作单元。notebook 支持多种不同的单元类型。在顶部和代码间使用一些 Markdown(https://daringfireball.net/projects/markdown/syntax)单元来解释并给代码添加文档是一个很好的想法。图 10-6 展示了一个添加头部(header)的示例。

图 10-6:添加 Markdown 标题

要开始编写 Python,只需点击下一个可用的单元,然后输入即可。当你完成了编写的语句或函数后,敲击 Shift+Enter。代码会执行并出现一个新的单元,在这里你可以编写下一个 Python 代码。正如在图 10-7 和你自己的 notebook 中看到的那样,你可以看到在一个普通的 Python 解释器中会看到的所有输出。

图 10-7:在 Jupyter 中工作

有很多非常棒的 Jupyter(和 IPython)notebook 指南,但是一个很好的入手点可能是重新尝试一些本书中使用过的代码。

 建议组织你的 notebook,使其类似于你的仓库。你可能希望根目录下有一个包含数据的数据(data)文件夹,以及一个包含可导入 notebook 的脚本的工具(utils)文件夹。你的 notebook 就像另一个脚本,只是它是交互式的,并且在浏览器中。

用完 notebook,点击保存按钮(确保它创建一个新的检查点,这样可以更新你的文件)。

如果你在一个特定的 notebook 中完成了工作,但是仍在使用其他的 notebook,停止老的 notebook 进程是明智的选择。为此,选择服务器上的 Running 标签,并点击 Shutdown 按钮。当你对所有的 notebook 完成了编辑,保存它们并使用 Ctrl-C 或 Cmd-C 在运行 notebook 的终端停止服务器。

共享的Jupyter notebook

现在你已经熟悉 Jupyter notebook 的使用了,可以通过共享服务器上传并分享代码。这使得他人可通过普通网络(不仅是本地主机,例如前文在你的终端上运行的 notebook)访问你的 notebook。

有一些很棒的入门教程说明了如何使用 DigitalOcean(http://calebmadrigal.com/ipython-notebook-vps/)、Heroku(https://github.com/mietek/instant-ipython)、Amazon 网络服务(https://gist.github.com/iamatypeofwalrus/5183133)、Google DataLab(https://cloud.google.com/datalab/),或者你喜欢的任意服务器(http://ipython.org/ipython-doc/1/interactive/public_server.html#notebook-public-server),来搭建一个 notebook 服务器。

 记得在 notebook 服务器上使用安全密码,保证 notebook 只被有这个密码的人使用。这会确保服务器和数据安全。

建议你也为 Jupyter notebook 建立一个类似 Git(第 14 章再深入探索)这样的版本控制系统,这样你就有了 notebook 每天或每周的历史记录。通过这种方式,你可以恢复删除的东西,同时帮你保存和组织代码。

 如果你正在使用一个共享的 notebook 服务器,确保人们知道内核被中断(这在服务器重启或者有人终止或重启 notebook 内核时都会发生)时如何运行所有的代码。为了运行所有 notebook 代码,选择 notebook 工具栏中的 Cell 下拉菜单,然后点击 Run All 按钮。你也应该建议用户在完成工作后使用 Shutdown 终止 notebook,这样服务器上就没有无用的运行进程。

无论本地还是共享的 Jupyter notebook 都是展示数据和工作流的很好的工具。当你回顾数据探索和分析时,在本地运行它们将会非常有用。随着 Python 知识的增长,你可以将脚本迁移到 Python 3,同时运行 JupyterHub(https://github.com/jupyter/jupyterhub)。JupyterHub 就一个多用户的 notebook 服务器,运行着多种语言(包括 Python),当前正处在积极地开发中。

无论选择在 notebook 服务器还是开源平台上发布,你现在已经掌握了技能,能够分析如何以最佳方式展现和发布你的发现、数据和代码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文