TowardsDataScience 博客中文翻译 2020(五百一十二)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何使用 Geoviews 在 Python 中创建 Choropleth 地图

原文:https://towardsdatascience.com/how-to-visualize-data-on-top-of-a-map-in-python-using-the-geoviews-library-part-2-e61a48ee6c3d?source=collection_archive---------13-----------------------

使用 Python 和 Geoviews 多边形绘制交互式 Choropleth 地图

在另一篇文章中,我们学习了如何使用geoviews.Points方法创建一个代表地图上特定坐标的点的绘图。我们还使用了geoviews.tile_sources来获得一张地图,我们可以使用它作为我们的基础图层来绘制点。由于我没有找到使用 Geoviews 进行 choropleth 绘图的指南,所以我决定写这个简短的教程。

最终结果会是这样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

出于本教程的目的,我们将使用 Geoviews 库通过 choropleth 地图绘制一个图表来可视化欧洲国家的经济自由度指数

你可以在探索标签下下载你自己选择的任何地区和年份的数据集。

首先,我们需要导入将要使用的库和方法。

import pandas as pd
import geopandas as gpd
import geoviews as gv
import geoviews.tile_sources as gvts
from geoviews import opts
gv.extension('bokeh')

如果我们阅读从遗产网站得到的 T2 文件,我们会看到这样的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了理解我们所看到的,数字越高,一个国家在自由方面的得分越高。如你所见,每个类别都有一个分数,这些分数加起来就是overall score。因此,没有必要进入每个类别的细节,所以我们将在本教程中只使用overall score

从现在开始,我们将该数据帧称为ef_df。数据框几乎是完美的。为了更好地理解和解决我发现的一些字符串的问题,我将只添加两行代码。

ef_df = ef_df.rename(columns={'name':'country'})
ef_df['country'] = ef_df['country'].apply(lambda x: x.strip())

现在我们准备继续下一个元素,创建一个 choropleth 地图。那是一个形状文件 ( )。shp ),包含我们感兴趣的国家的边界(实际上是形状)。

我真的不知道是否有更好的 shapefiles,但你可以在网上自由搜索和找到它们。我要用的那个可以从 NaturalEarthData 网站下载。

我们可以使用Geopandas读取 shapefile,并将该数据帧命名为shapes_df

shapes_df = gpd.read_file('C:/.../your_directory/ne_50m_admin_0_countries.shp', driver='ESRI Shapefile')

shapes_df出发,我们只需要 3 列:ADMINTYPEgeometry
geometry列非常重要,因为它包含地理信息,即国家形状。因此,我们将运行下面的代码行。

shapes_df = shapes_df[['ADMIN', 'TYPE', 'geometry']]

现在shapes_df会是这个样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我所说的,我不知道网上是否有更好的 shapefile,但在这一个中,我们还必须运行以下行来更正一些国家名称,以便与ef_df数据帧上的国家名称相匹配。

shapes_df = shapes_df.replace({'Czechia': 'Czech Republic',
                               'Republic of Serbia':'Serbia'})

现在我们终于可以将这两个数据帧合并成一个了。从ef_df开始,我们将仅保留countryindex yearoverall score列,并且仅针对index year = 2019。

merged_df = gpd.GeoDataFrame(\
            pd.merge(\
            ef_df[ef_df['index year']==2019][['country','index
                year', 'overall score']], shapes_df,
                left_on='country', right_on='ADMIN'))

merged_df会是这样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们继续之前,请运行类似的程序,确保geometry数据类型是多边形或多多边形。

merged_df['geometry'].geom_type.value_counts()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只是为了确保

现在,我们准备使用geoviews.Polygons方法绘制我们的 choropleth 图。首先,让我们将底图分配给poly``gv.Polygonscarto

polys = gv.Polygons(merged_df, vdims=['country', 'overall score']).\
   opts(color='overall score', cmap='reds_r', colorbar=True,\
      width=1000, height=600, tools=['hover', 'tap'], alpha=0.7,\
      hover_line_color='black',line_color='black',\
      hover_fill_color=None, hover_fill_alpha=0.5,\
      xaxis=None,yaxis=None)carto = gvts.CartoDark.opts(alpha=0.6)

现在如果我们一起运行它们:

polys * carto

我们得到了我们的地图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以清楚地看到哪些国家在经济上被认为是更自由的(浅色),哪些不是(深色)。

好处:使用 Geoviews 我们可以将更多的地块合并成一个。

为了向您展示这一点,我将使用一个包含国家首都及其各自地理位置(即纬度和经度)的数据集。我在这里找到了数据集。我将称之为capitals_df.

经过一些清理和合并,我们得到了这个样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们可以使用在之前的帖子中看到的gv.Points方法,并将其分配给points.

points = gv.Points(capitals_df, ['longitude', 'latitude'],\
    ['capital']).opts(
        opts.Points(width=1000, height=600, alpha=0.8,\
            tools='hover'],\
            xaxis=None, yaxis=None, color='white',\
            size=7))

最后,我们将运行下面的命令。

polys * carto * points

我们会得到合并后的图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

今天到此为止。希望你觉得有用。下次见!

你可以通过点击这里在 LinkedIn 上找到我。

如何使用 Power BI 可视化数据?

原文:https://towardsdatascience.com/how-to-visualize-data-using-power-bi-9ec1413e976e?source=collection_archive---------11-----------------------

使用 Microsoft Power BI 获得商业智能洞察。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卢卡斯·布拉塞克在 Unsplash 上的照片

什么是数据可视化?

随着技术革命,数据从昂贵、难以查找和收集到丰富、廉价但难以理解。使用传统软件存储、理解和分析越来越大的数据量非常困难。然而,作为个人或组织,所有这些数据的好坏取决于我们能从中获得什么。这就是大数据发挥作用的地方。大数据用于预测分析、分析用户行为或其他数据分析流程,以给数据带来价值。然而,由于缺乏知识,这方面的原始细节仍然不确定。数据可视化有助于解决这个问题。

数据可视化是将数据转换为图表、图像、图形甚至视频的过程,这些数据可以解释数字,并让我们从中获得洞察力。

来自 giphy的托尼·巴贝尔

它使信息更加连贯,帮助我们从中创造价值,发现新模式,发现趋势。让我们举个例子:你如何向你的老板或客户解释 excel 电子表格中的大量数据行和列?创建相同数据的图表,如条形图、折线图、散点图等。这为原始数据赋予了意义和目的,现在您有了一个可视化的表示,您可以开始分析它并将其集成到您的业务中。这为许多企业和用户提供了清晰、可操作的计划洞察,让您始终保持领先地位。

什么是权力 BI?

Microsoft Power BI 是一个数据可视化工具,允许您快速连接数据,准备数据,并根据自己的喜好对数据建模。它使您能够将所有数据转换为实时交互式视觉效果,创建定制的实时业务视图仪表板,从而提取业务智能以增强决策。您可以可视化数据并分享见解。该工具允许您将自定义可视化嵌入到您的应用程序或网站中,连接到数百个数据源,如 excel、google analytics、实时数据的物联网设备等。它将一切与您现有的专业环境方便地融合在一起,使您能够获得分析和报告功能。您可以发布这些报告,因此允许所有用户利用最新的信息。

你可以在这里阅读更多关于 Power BI 的内容。

现在,让我们使用 Power BI 并创建数据的基本可视化。

安装和设置

下面列出了几种安装 Power BI 的方法:

  1. 打开 Microsoft store,搜索 Power BI,然后单击 get 按钮安装它。
  2. 您可以访问 Power BI 桌面下载页面并选择免费下载选项。
  3. 或者,您也可以通过登录并点击屏幕右上角的下载按钮,从 Power BI service 网站免费下载 Power BI Desktop。

安装 Power BI Desktop 后,您现在可以访问 Power BI 服务网站并登录您的帐户。如果您还没有注册,您可以向下滚动,使用您的学生或工作电子邮件地址免费注册。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

或者,如果您没有学生或工作电子邮件地址,您可以通过点击此处注册一个微软试用帐户。

安装 Power BI Desktop 后,让我们启动应用程序并探索应用程序的主要组件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

字段:您可以在这里查看导入的数据及其字段。

**可视化:**此窗格由不同的视觉效果组成,您可以利用这些视觉效果来显示数据的独特可视化效果。

**发布:**使您能够将您的数据模型发布到您的 Power BI 工作区。

**获取数据:**允许您以 excel 文件、text/csv、xml 等格式导入数据。我们也可以从微软 Azure 或其他在线服务如谷歌分析、GitHub 等获取数据。

准备数据

如前所述,“获取数据”选项允许您从不同的平台导入各种大小的数据。你可以从 这里 下载本教程的所有必要材料。

打开名为“SalesData.xlsx”的 excel 文件,从窗口左侧选择库存数据表,然后单击转换数据。这将把您带到超级查询编辑器。超级查询编辑器允许您浏览和转换数据。

太好了!现在我们已经加载了数据,让我们开始清理它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

当我们查看库存数据文件时,我们注意到的第一件事是文件中的第一行以及第 9 列和第 10 列有空值。这样的值会降低我们模型的整体性能,所以让我们来清理一下。您可以通过分别选择“删除行”和“删除列”选项来删除行和列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

一旦我们这样做了,我们可能会注意到数据的第一行实际上由我们的列名组成。因此,让我们通过选择“使用第一行作为标题选项”来改变这一点。

在超级查询编辑器中,单击“主页”部分左上角的“关闭并应用”,以确保我们的更改得到应用。

您甚至可以通过单击窗口左侧的数据视图图标来轻松更改列的数据类型。

清理我们的数据可能是一个漫长而乏味的过程。上面提到的是处理有一些明显异常的数据的一些基本方法,但是还有更多。在本教程的最后,你会发现我用来理解和学习 Power BI 及其功能的参考资料。

为了这个教程,我上传了一个“随时可用”的文件,名为“PowerBI Tutorial.pbix”。请参考上面的链接。一旦加载完毕,我们就可以开始有趣的部分了——可视化我们的数据。

创建报告

在本教程中,我们将学习创建一些图表,并了解如何分析数据。

可视化:

条形图: 现在我们的数据已经加载,我们可以在屏幕右侧的字段窗格中查看它。我们可以从 visualization 窗格中选择所需的可视化,然后返回到 fields 窗格选择我们想要分析的数据。让我们从分析我们库存中的产品及其销售开始。选择平均现有库存( ) 、销售额 ( )、销售额( )、销售额()和类别字段。

祝贺您在 Power BI 中创建了第一个图表!

此条形图比较了每个类别的平均库存总额和销售总额。然而,研究这个问题的一个合理的方法是比较我们库存的平均值和每个类别的平均销售额。我们可以通过在可视化窗格中将它的值从 Sum 改为 Average 来实现这一点。

使用相同的逻辑和字段,您可以从 visualization 窗格中拖放不同类型的条形图,并以堆积条形图、堆积柱形图、簇状条形图等形式显示数据,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

折线图: 让我们用折线图来可视化我们的数据。从“可视化”窗格中选择折线图,并从“字段”窗格中的地理数据中选择“销售”字段。将周 ID 拖放到可视化窗格的轴部分,如下面的视频所示。这向我们显示了相对于周 ID 的销售额。此外,我们还可以通过比较库存和销售额来了解产品的可用性。为此,请将“平均库存”字段拖放到可视化字段中的次轴部分。您也可以单击图表,然后从可视化窗格将其更改为面积图或堆叠面积图。

饼图/圆环图: 饼图是众所周知的,但是当显示大量数据时,建议不要使用饼图,因为很难识别类别之间的微小差异。例如:清楚地确定哪个类别占用更多的面积。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

要创建饼图/圆环图,请选择饼图/圆环图可视化和适当的类别来显示数据,如下所示。

地图: 你还可以用一张地图查看你在不同地方的销售情况。从可视化窗格中选择地球仪图标。现在选择所需的类别,即州 ID 和销售额。在分析一些类别时,图例非常有用。使用图例,我们还可以通过将类别字段拖放到图例部分来查看该州每个类别的销售额,如下所示。

关键绩效指标: 关键绩效指标(KPI)是衡量公司绩效并评估其成功与否的指标。我们可以使用 visualization 窗格中的 card 或 gauge 选项在 Power BI 中显示这一点。使用 KPI 选项时,我们需要将周 ID 拖动到可视化窗格中的趋势轴上,以便查看 KPI 值背后的每周趋势。

**删除图表:**要删除图表,只需点击并按 delete 键。

**添加新页面:**要添加新页面,点击窗口底部的“+”图标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

现在我们已经学会了如何可视化我们的数据,我们可以整合一切,并制作一个仪表板。

创建仪表板

要制作仪表板,请将我们到目前为止创建的所有可视化效果复制粘贴到同一个页面上,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这基本上就是我们的仪表板。要创建此仪表板的移动视图,请单击“视图”按钮并选择“移动布局”。一旦你做到了这一点,你就可以随心所欲地将你的可视化效果拖放到手机屏幕上。

定制

现在我们的仪表板已经准备好了,我们可以通过浏览 visualization 窗格的 Format 部分中的各种可用选项来配置我们的可视化。

Power BI 中的 r 和 Python

在 Power BI 中包含 Python 和 R 是微软所做的最伟大的事情之一。Power BI 现在是使用不同库和机器学习包进行数据可视化的一站式平台。它允许您在不修改基础工具的情况下重塑数据。

用功率 BI 积分 R

r 是一种用于统计计算和图形的语言和环境。我们可以使用 Power BI 中的 R 来分析我们的数据,以获得所需的结果。

**需求:**你需要在你的系统中安装 RR studio 以及其他必要的包和库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

**设置:**点击 Power BI 窗口左上角的文件,选择“选项和设置”。转到 Options 下的 R scripting 选项,确保列出了包含 R 的文件夹的正确路径,并且检测到了 R studio IDE,如下图所示

使用 R 脚本可视化数据: R 为数据分析和可视化提供了一个惊人的平台。它允许您甚至在开始数据分析之前就将数据可视化。下面是一个数据可视化的例子,通过使用 R 脚本显示我们的销售频率。

集成 Python 和 Power BI

Python 经常使用 matplotlib、Seaborn、Gleam、Plotly 等库进行数据可视化。Power BI 是一个我们可以集成和增强 Python 可视化的平台。

需求: 安装 Python 以及您将在系统中需要的其他必要的库和包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**设置:**点击 Power BI 桌面左上角的文件,进入选项和设置部分的选项下的 Python 脚本。确保 Python 主目录设置为 Python 在系统中的安装位置,如下图所示。

使用 Python 脚本可视化数据: Python 已经被用于数据可视化很多年了。像 matplotlib 这样的库有助于理解数据。虽然,当谈到快速方便地创建美观的图表时,Python 不是很有用。然而,当我们集成 Python 和 Power BI 时,我们获得了出版物质量的图表。下面的视频向我们展示了一个使用 Python 显示与周 ID 相关的销售额的实例。

保存和发布

让我们回到我们的仪表板。现在我们已经有了一个可以发布的仪表板。

  • 保存你的工作:进入 Power BI 桌面窗口左上角的“文件”,点击保存。您也可以使用“Ctrl + S”快捷键来保存您的工作。您还可以将您的作品导出为 PDF 或 Power BI 模板。
  • **发布:**进入 Power BI 桌面窗口左上角文件下的发布部分,点击“发布到 Power BI”。选择您的工作空间。点击“在 PowerBI 中打开 PowerBI Tutorial.pbix ”,在工作区查看您的报告。现在,您可以与其他人共享您的报告,也可以在您的工作区中编辑它。

结论

恭喜你完成了本教程!现在,您已经学习了 Power BI 中数据可视化的基础知识。在本教程中,我只介绍了几种类型的可视化,但是在 Power BI 中还有更多类型的可视化可供您探索。发挥创造力,以自己的方式可视化您的数据。

感谢你阅读我的文章,希望你喜欢。

参考文献:

[1] Udemy,“微软认证:数据分析师助理 Power BI”:https://www.udemy.com/share/1035gaBEISdFxVQ3s=/

[2]微软的 Power BI 文档:https://docs . Microsoft . com/en-us/Power-BI/fundamentals/desktop-getting-started

如何用 Python 可视化数据中的隐藏关系 NBA 助攻分析

原文:https://towardsdatascience.com/how-to-visualize-hidden-relationships-in-data-with-python-analysing-nba-assists-e480de59db50?source=collection_archive---------8-----------------------

使用交互式快照、气泡图和桑基图操纵和可视化数据,通过 Plotly 获得洞察力(代码和数据在我的 GitLab repo 中)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据分析的一个非常基本的目标是理解数据中的关系。从简单的 Excel 图表到从事机器学习的数据科学家,这在每个分析层面都是如此。无论是预测一个值(回归)还是识别一个类型(分类),目标都是发现输入和输出之间关系的本质。

正如你们中的一些人所知,我一直在修补篮球数据分析。我一直在研究的一个问题是,一个特定的统计数据,一个“辅助”,总体上表明了一个团队的什么。在这篇文章中,我分享了我的一些分析和输出,用来深入了解这种辅助其他绩效指标之间的关系。

尽管这个例子是专门针对篮球的,但一般的过程和可视化应该适用于其他领域,适用于他们自己的数据集。关于篮球的讨论也只是有限的,只是在解读结果的背景下,所以不要让领域知识的匮乏太让你担心。

我在我的git lab repo here(basketball _ assists目录)中包含了这个的代码,所以请随意下载并使用它/对它进行改进。

在开始之前

数据

我将代码和数据包含在我的 repo 中,所以如果您愿意,您应该能够通过下载/克隆 repo 来轻松地跟进。

包装

我假设您熟悉 python。即使你相对较新,这个教程也不应该太难。

你需要pandasplotlystatsmodels。用一个简单的pip install [PACKAGE_NAME]安装每一个(在您的虚拟环境中)。

问题:助攻…有帮助吗?

在篮球比赛中,如果队友的一次传球导致得分。因此,从定义上来说,助攻只是抓住了球员得分的机会。

所以,我想回答的问题是这样的:助攻好不好?

助攻能捕捉到一个球队获得好的得分机会的频率吗?数据告诉了我们什么?(注:有些 现代统计学 已经开始捕捉‘潜在’助攻只是为了这个目的,对于这个讨论忽略它。)

让我们开始吧。我首先回顾了投篮命中率与助攻的关系。在我们开始之前,也许简单回顾一下背景会更方便。

概述

在之前的文章中,我讨论了使用 Plotly 生成拍摄图。在其中,我们生成了图表,利用球场上的彩色六边形来显示射门位置、频率和准确度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在该图中,标记位置显示了击球位置、与频率相对应的大小以及与该区域的击球准确度相对应的颜色(球场被划分为区块或“区域”以消除差异)。

我做了一些小的改动,但是在这里包含了代码和底层函数,所以您不必重新创建它们。(一如既往,我还包括了本文中使用的所有数据文件。)

我们能在地板上绘制类似的辅助率吗?

制图辅助费率

令人欣慰的是,这可以很容易地完成,同时循环大部分代码,并用由assisted_shots / total_made_shots计算的辅助百分比来代替投篮命中率。

我已经预先计算过了,所以您可以简单地加载数据并运行以下程序:

这会产生:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NBA 投篮排行榜——由助攻率着色

真有意思!助攻率在角落最高(大约 95%),在篮筐周围相当低,特别是当我们开始远离篮筐时,助攻率下降到大约 40%。

但这并不能真正说明相关性。事实上,并排观察会发现这些比率是反比相关的(请看下文)。具有最高精度的区域实际上具有最低的绘制辅助率。这是因果关系吗?助攻对球队不好吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是否说明了逆相关?还是我们忽略了其他因素?

无论从直觉上还是逻辑上,这似乎都不成立。视觉效果有误导性。原因是这些精度比辅助率更能影响射击位置。如果我们不看联盟范围的数据,而是看单个球队的数据,看看助攻率的变化对球队投篮命中率有什么影响?

散点图有助于理解精确度与辅助率的关系

为了进行这种分析,我们需要来自各个团队的数据。Basketball-reference.com 通过收集球队、球员和比赛的统计数据让这变得非常容易。由于我们将处理 18-19 赛季的投篮数据,我从篮球参考这里收集了球队数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2018/2019 赛季球队每 100 分统计(basketball-reference.com)

在使用统计数据时,重要的是针对给定的目标或背景使用正确的数据。我在这里使用了每 100 分的控球统计数据来标准化球队速度的影响,这可能会稍微扭曲我们的数据(虽然不是真的,因为我们在看比率)。

散点图很简单,在我看来,它仍然是获得数据和任何相关性的最好方法之一。让我们就这么做吧,标绘准确性(投篮命中率%)对每 100 次助攻,这捕捉到了以助攻结束的控球率的%。

提醒一下,我们使用 Plotly Express 中的 scatter function,其中的语法基本上是传递一个数据帧,各种参数作为与该数据帧中的列名匹配的字符串传递。

所以px.scatter(per100_df, x=’AST’, y=’FG%’让 Plotly 知道 X 数据应该来自‘AST’列,Y 来自‘FG %’列。其余的就不言自明了。

我们还使用 Plotly 在这里添加了一条趋势线。(这就是statsmodels包装的目的。),有一条简单的线性趋势线(点击这里了解更多信息)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可视化精确度和辅助之间的相互关系

哇,这看起来像是助攻/100 和投篮命中率之间的一个很好的关联图。从直觉上看,这也是明智的。因为球的移动速度比防守者快,好的传球能更好地找到当时防守不严密的球员。所以,一个记录更多助攻的球队提供更多好机会是有道理的。

(如果你想知道表示 100 分的颜色,那是因为离群值(you 印第安纳)比其他人投了更多/更少的 3 分。)

如果我们进一步深入细节,查看数据,在法庭上分成不同的区域,会怎么样?

将数据细分为区域

还记得我们说过法庭被分成了几个区域吗?在这个分析中,我们使用简化的区域,这些区域主要基于距离,忽略了方向。

所以,法庭被分成七个区域,或者说地带,就像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的分析中定义的射击区域

通过将每一次投篮分配到这些区域中的一个,可以进行与上面相同的分析,以查看助攻在每个区域中的影响。由于团队数据不容易提供这个集合,我们将操纵数据框架并自己创建它。

从单个镜头的数据库开始,我已经用一个区域对每个镜头进行了编码,我们创建了一个数据帧,其中每行对每个队的一个区域的信息进行编码。

在这里,我循环遍历每个团队名称,按区域整理它们的数据,并通过在区域名称内再次循环,将每个区域的每个数据分配给一个新条目。每个条目都作为一个字典对象保存到一个列表中,然后被转换成一个数据帧。(如果你不确定发生了什么,这里有 熊猫的文档。groupby 方法,以及 熊猫。DataFrame 功能。)

这些数据现在可以绘制出来了——这是我之前准备的,使用了:fig = px.scatter(flat_summary_df, x=’assist_pct’, y=’shots_pct’, color=’zone_name’, hover_name=’teamname’)和一点格式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

投篮命中率与助攻,按区域。

每组彩笔包括 30 个图形,每个队一个。你自己看看吧。这些标记中的许多组并没有表现出太多的相关性,但是一些明显地表现出相关性。其他一些事情也很突出/

我们现在称之为“中距离”投篮的红色和绿色轨迹显示,他们的助攻百分比最低。这可能是因为它们相对不受欢迎,因此犯罪不是为这里设计的,因此它们通常是后备选项。

紫色角落的 3 分是最理想的投篮之一,所以他们有很高的助攻率是有道理的。

底部一组 30 多英尺的照片非常分散——但考虑到它们来自最远的距离,它不会显得太不协调。由于这些投篮的低命中率,我们预计结果会有更大的差异,而且这些球队中的一些平均起来会更频繁地远距离投球。

但是从内部拍摄的照片显示了很好的线性度,可能在弯道 3 也是如此。为了更好看。实际上,让我们把它们都分离出来,单独看一下。

此外,我们将根据球队名称给他们上色,并根据每个区域的射门频率来调整大小。这样,我们也可以看到一个队从每个区域投篮的频率。

到目前为止,您(希望)已经熟悉了 Plotly Express 的’scatter’功能。由于使用了 facet 特性并进行修改,所以这有一点不同,所以让我们一步步来。

参数facet_col指定应该使用哪个类别变量来分隔这些图形,以及facet_col_wrap一列中有多少子情节。

通常,在这些图形中,您会为子图形使用相同的轴范围,以允许图形之间更公平的比较,因为改变比例会导致视觉上的误解。

然而,我们已经从整体上看了上面的数据。此外,我发现缩放通过将数据聚集在一起模糊了对数据的理解。

因此引入了update_xaxisupdate_yaxis方法来取消轴对齐。当我们这样做时,我要确保每个轴都显示在图上,以避免误解。生成的图表如下所示*(对图表进行调整,但请记住,在轴不共享但可能被误解的情况下,您应该小心对齐图表)*:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

射击精度与助攻,由支线剧情中的区域。

显然,一些区域在助攻百分比和投篮命中率之间显示出比其他区域更好的相关性。这可能说明了几件事:

一个是助攻可以帮助创造好的投篮,第二个是当我们离篮筐越远,射手的能力就成为更大的因素。

在篮筐周围,简单地创造好机会可以让球员轻松上篮和扣篮。这种影响随着距离的增加而减小,但是我们可以看到在 3 秒角时增加辅助速度的影响。

然而,当我们看到规则 3s 时,这种影响是微小的,长 3s 分布看起来像一个经典的随机分布,这里显示的是零相关。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

维基百科关于分布形状&相关系数的入门

我们能回到过去,看看篮球场上的数据吗?是的,我们可以。

通过拍摄图表进行关联

请记住,我们不能获得一个伟大的想法之间的投篮命中率和助攻以上。这是因为我们只是在观察绝对值,而不是一个变化对另一个变化的影响。

如果我们针对一些球队在球场上的相对助攻率和联盟平均值绘制相对准确度的图表会怎么样?

在我以前的文章中,我们看到了如何通过从相对值(球队数据)中减去基础值(联盟数据)来绘制相对准确度。在这里,我们简单地对‘ass_perc_by_hex’做同样的事情。为了避免重复,我在这里省略了代码——如果你想看完整版,可以看看我的 git repo。

绘制相对于助攻率的准确性图表,作为相对于联盟平均水平的相对值,我们为勇士和骑士生成了以下图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相对精度与辅助率,GSW 18-19

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相对精度与辅助率,CLE 18-19

看一下内部的统计数据,和弯角,我们在上面看到了相关性相对较好。在这里仍然如此。

离篮筐越远,随机性的作用越大,球员能力的影响也越大,而不仅仅是在正确的地点和正确的情况下得到球。因此,这种相关性较弱,尽管它似乎仍然存在。

(为了让外线投篮更加稳定,必须对球员的能力进行标准化处理。)

最后,我想想象一下这些帮助来自哪里。我们将深入研究一些(喜欢 Plotly )所谓的平行类别图,这类似于流量图,或桑基图。

ParCat / Sankey 图

这些图最初被设计用来显示流动,例如液体或材料的流动。因此,他们很擅长展示关系。每一个篮筐都与投篮的球员、协助比赛的球员(有时甚至没有)以及投篮的位置有关。

使用 Plotly 很容易生成人造镜头的平行类别图:

teamname = 'HOU'
team_df = shots_df[shots_df.team == teamname]# Simple ParCat plot
fig = px.parallel_categories(team_df[team_df.shot_made == 1], dimensions=['player', 'shot_zone', 'assist'],
                color_continuous_scale=px.colors.sequential.Inferno,
                labels={'player':'Shooter', 'shot_zone':'Shot location', 'assist':'Assist (if any)'})
fig.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的第一个平行分类图

这看起来令人印象深刻,但很难看出发生了什么。也许我们应该通过计数来组织左侧和右侧,并根据射门是否被辅助来给条形着色。

要按计数对数据帧进行排序,我们可以使用 pandas 的pd.factorize函数,提取计数,按计数排序,然后根据行顺序创建一个新的数据帧。

i, r = pd.factorize(makes_df['assist'])
a = np.argsort(np.bincount(i)[i], kind='mergesort')
makes_df = makes_df.iloc[a]

颜色可以用任何一种 Plotly Express 来分配,虽然我是用常规的plotly.graph_objects来分配。

除了格式化对象之外,代码的主要部分如下(完整函数& call 见 repo):

现在为几个玩家绘制这些,作为例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克林特·卡佩拉在 2018-19 赛季的投篮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

詹姆斯·哈登在 2018-19 赛季的投篮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克莱·汤普森在 2018-19 赛季的投篮

我们可以立即看到球员的投篮有多少被助攻,他们喜欢从哪里投篮,他们在每个区域的投篮有多少被助攻,以及他们最有成效的合作伙伴在哪里。

上面的图表立即向你展示了卡佩拉的投篮有多少被助攻,以及哈登在卡佩拉的得分中发挥了多大的作用。

接下来的两张图表显示,尽管哈登和克莱·汤普森都是不可思议的射手,但他们的得分风格却大相径庭。汤普森的大部分投篮来自传球,而哈登几乎所有的投篮都是绝对创造的。

该图表可以扩展到显示整个团队:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

休斯顿火箭队在 2018-19 赛季的所有投篮

在 18-19 的火箭队,哈登和克里斯·保罗(在某种程度上还有奥斯汀·里弗斯)是唯一一个创造自己投篮机会的人。火箭队的大多数中距离投篮都是独立完成的,即使在这种复杂的布局下,卡佩拉-哈登的联系也是显而易见的。

正如你所看到的,我们已经在几个图表中发现了很多 NBA 各种统计数据之间的关系。作为一个额外的好处,Plotly 的交互性意味着您可以简单地悬停在数据点上并获得进一步的见解,这可能不容易获得,或者需要创建额外的图表或注释。

尽管这个例子与篮球数据有关,但我毫不怀疑这些例子同样适用于其他运动或任何其他数据集。这里的重点是调查各种数据列之间的关系的性质,这些图表使我们能够做到这一点,而无需构建或训练复杂的模型。

请下载数据和代码,玩一玩,用你自己的数据集构建类似的东西。我很想听听你的经历或评论!

如果你喜欢这个,比如说👋/在 twitter 上关注,或关注更新。我还写了一篇关于用 Plotly 可视化篮球数据的文章,如果你以前没有读过,这可能对本文有所帮助。

[## 用 Plotly 实现交互式篮球数据可视化

用 hexbin shot 图表分析体育数据,用 Plotly 和 Plotly Express 分析气泡图(源代码&我自己的数据…

towardsdatascience.com](/interactive-basketball-data-visualizations-with-plotly-8c6916aaa59e)

这是我最喜欢的数据可视化书籍:

[## 用这些书创建有影响力的数据可视化

如果没有交流,好的分析没有什么意义。数据可视化会有所帮助。以下是我对…的建议

towardsdatascience.com](/create-impactful-data-visualizations-with-these-books-ca9fbfecfde5)

如何使用 Plotly 和 R 可视化高频金融数据

原文:https://towardsdatascience.com/how-to-visualize-high-frequency-financial-data-using-plotly-and-r-97171ae84be1?source=collection_archive---------36-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由尼克·钟Unsplash 拍摄

关于如何使用 Plotly 软件包从真实资产数据创建烛台图表的分步指南。

在本文中,我将展示如何使用 Plotly 软件包,通过 r 可视化高频率的金融数据。为了执行分析和开发交易算法,有必要以非常高的频率获取数据,以便能够采取快速而准确的行动,最大限度地提高交易中获得的利润。

今天,在美国证券交易所进行的超过 40%的操作是由机器人进行的,这些机器人被编程来分析市场,并根据市场指标进行买卖。今天我们将学习如何从被日内交易者广泛使用的名为“迷你指数”的巴西资产数据中创建蜡烛图。

收集数据

有几种方法可以从交易所收集高频数据。但是今天,由于我们不会实时分析数据,我们将使用 Metatrader 收集数据,这是一个用于进行自由交易的工具,可以进行资产的购买和出售。

第一步是打开工具并选择我们想要从中收集数据的资产。在我们的例子中,现在是 6 月,该月的迷你指数资产是 WINM20。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Metatrader 快照—按作者分类的图片

选择资产后,我们选择图表的时间框架。请选择一分钟的时间,以便我们可以在几秒钟内收集数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Metatrader 快照上的时间范围—按作者分类的图像

之后,点击文件并保存。资产数据将保存在中。csv 格式。
准备就绪,数据采集完成!我们去数据处理吧!

导入和分析数据

我使用 R,一种强大的免费统计编程语言,以及一些图形库来执行我的分析。打开 RStudio 后,我创建了一个. RScript 文件。

我们从导入必要的库开始

library(plotly) #para plotar os gráficos
library(xts) #para trabalhar com dados de séries temporais
library(tidyverse) #jeito magnífico de trabalhar com dados

然后,我们导入名为“WINM20M1.csv”的资产数据

data <- read.csv("WINM20M1.csv", header = FALSE, sep = ",", fileEncoding = "UTF-16LE", dec = ".")head(data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快照—数据。框架—作者提供的图像

我们看到七个还没有名字的变量。因此,我们使用 OHLC 标准(开盘、盘高、盘低、收盘)创建一个带有变量名称的向量,并将该向量赋给 data.frame 列的名称。

colnames_ <- c("Date", "Open", "High", "Low", "Close", "Tick", "Volume")

colnames(data) <- colnames_head(data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快照-数据帧-作者提供的图像

既然我们已经对数据进行了适当的重命名,我们需要将变量 Date 的类型改为 Date。但是在改变它之前,我们必须改变字符串来替换“.”按照“-”号。

data$Date <- gsub("\\.", "-", data$Date)data$Date <- as.POSIXct(data$Date)head(data)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快照-数据帧-作者提供的图像

好了,现在是数据可视化。

可视化数据

最后,为了可视化数据,我们使用了 Plotly 库,它非常适合这种类型的任务。首先,我们创建一个 fig 变量来存储我们的图表。我将只用最后 20 分钟,这样视觉效果不会太密集

fig <- tail(data, 20) %>%
  plot_ly(x = ~Date, type = "candlestick",
          open = ~Open, close = ~Close,
          high = ~High, low = ~Low)
fig <- fig %>% layout(title = "Candles de Mini Ídice")fig

瞧啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

plotly-R-股票市场-快照-作者图片

问题或意见,请联系!抱抱!不要忘记订阅我们的时事通讯,接收有关数据科学、数学和金融的每周内容。

如何用 Python Plotly 可视化交互式 3D 网络

原文:https://towardsdatascience.com/how-to-visualize-interactive-3d-network-with-python-plotly-4ef6989d83cc?source=collection_archive---------26-----------------------

关于 Google Colab — 2020 更新版

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 JJ 英Unsplash

在这个数据的黄金时代,数据素养是最受欢迎的技能之一。每家公司都在试图收集更多的数据,数据集现在很容易(而且越来越容易)在线提供给公众,各种软件正在以巨大的速度产生数据。

由于这种现象,可视化和理解所有这些数据的能力(数据素养)现在是一种无价的技能。根据《哈佛商业评论》的焦点小组研究,人们缺乏的两项技能是:

-创建易于理解的可视化效果,以便领导了解结果

-讲述一个故事,帮助决策者看到全局,并根据分析结果采取行动

在本指南中,我将使用 Google Colab 演示如何从头开始设置和创建您自己的 Python 脚本,以便您可以可视化您自己的 3D 网络。如果你对 Plotly 提供的内容有兴趣,请查看这些链接——链接链接

本指南改编自 Plotly 的官方指南。我对该指南所做的更改:

  • 修正了一些给我错误的代码
  • 从指南中删除了一些不必要的冗长代码,以便于理解

这些就是我认为写一个新的 2020 更新版本可能会有帮助的原因(这里是 Google Colab 链接)。这是最终的可视化效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Les Mis 数据集来自链接,Gif 由作者创建

我强烈建议查看数据集,这样我们就知道 json 数据是什么样子的。在数据科学项目中,您可能会遇到的最常见的错误/缺陷之一是在处理数据之前没有将数据整理成正确的形状或形式。

如果你想写一些快速脚本,我强烈推荐使用 Google Collab。已经安装了许多公共库,所以您可以直接导入它们。对于需要安装的库/包,只需使用!pip 命令并运行它来获得这些库,如下所示:

!pip install python-igraph!pip install chart_studio

成功安装后,我们现在将导入库,然后查看导入的数据:

第 13-15 行与他们的官方指南略有不同,因为当我试图遵循他们的指南时,我得到了错误,所以我使用了 urllib.request.urlopen。

print(data.keys()) //returns dict_keys([‘nodes’, ‘links’])

我们将打印数据键,只是为了显示数据对象的键是什么样子。

print(N) //returns 77
...
print(data['nodes'][0]) //returns {‘name’: ‘Myriel’, ‘group’: 1}

有 77 个节点,我们将打印第一个节点,看看它是什么样子。

数据集的快速解释—因此每个节点都有一个“名称”标签,并属于某个“组”(不同的组用不同的颜色表示)。链接就像从“源”到“目标”的每个节点之间的边,具有特定的值。

接下来,我们将使用 kk 布局创建图形,然后准备 Xn、Yn、Zn 和 Xe、Ye、Ze。

印刷品:

IGRAPH U--- 77 254 -- 
+ edges:  
  0 --  1  2  3  4  5  6  7  8  9 11  
  1 --  0  
  2 --  0  3 11  
  3 --  0  2 11
...

注意:写…是为了替换剩余节点的长列表

[[-0.547629032126533, 3.63383245493983, 2.9142413409773], [0.9167084013128767, 4.0198261702945475, 4.588913666431853], [-0.6094374124799637, 3.772671804410202, 1.7708885944486699]] 
[(1, 0), (2, 0), (3, 0)] 
['Myriel', 'Napoleon', 'Mlle.Baptistine'] [1, 1, 1] [0.9167084013128767, -0.547629032126533, None] 
[4.0198261702945475, 3.63383245493983, None] 
[4.588913666431853, 2.9142413409773, None]

我花了一段时间才弄明白为什么我们必须在第 31–33 行的边上添加 None。事实证明,这是因为如果我们不传递 None,Plotly 将在其他两个轨迹之间连接第三个轨迹(线)。要了解更多,请查看这个链接

最后,我们绘制节点和边的散点图,然后显示下图:

结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Les Mis 数据集来自链接,Gif 由作者创建

本教程到此为止,感谢您的阅读和…

快乐的数据可视化!ʕ•́ᴥ•̀ʔっ

如何可视化 KPI 进度—包含 3 个衡量指标的项目符号图

原文:https://towardsdatascience.com/how-to-visualize-kpi-progress-bullet-graph-with-3-measures-ed40598643e7?source=collection_archive---------16-----------------------

Tableau 分步指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kiril Yunakov 的公共画面页面。

答几个月前,我受命为我的团队创建一个新的仪表板,目的是查看几个关键绩效指标与我们的计划和预测相比的状况。这就是我如何找到项目符号图表类型,并为我们的业务案例做了一些修改。我相信,特别是如果你是一个 Tableau 的新用户,通过这篇教程你将能够学习和理解 Tableau 的基本原理,以及如何快速调整你的可视化效果。

为什么这个项目符号图有点特别?

简而言之,因为它允许您从 3 个角度(3 种不同的度量)比较特定的维度:

  • 实际表现(你已经完成了多少)
  • 计划/目标绩效(你需要完成多少)
  • 预测

此外,在 Tableau 中,默认情况下您可以 而不是 从预定义的选项中构建这样一个图表,因为它们只允许您使用 2 个指标,而在我们的示例中,我们需要 3 个指标(实际、计划&预测绩效)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 Tableau 的“演示”菜单中。

使用此自定义项目符号图,您可以回答一些业务问题:

  1. 到今天为止,根据计划,我们进展如何?
  2. 如果我们保持同样的速度,月底我们会在哪里结束?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kiril Yunakov 的公共画面页面。

步骤 1: 数据角力

这可能是关于教程最关键的一步。根据您的数据,您可能需要首先透视您的数据集。这是一个重要的步骤,因为它将允许您对您的每个 KPI*(营业额/新客户/成本)使用所有 3 个衡量指标(实际/计划/预测)*,并基本上将其应用于项目符号图。以下是我将使用的数据集示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样本数据集

2.将数据导入 Tableau

只需打开 Tableau 并连接到您的数据源。在我的例子中,它是一个简单的 csv 文件,如上所示。

3.添加测量和尺寸

选择 #actual 尺寸,并通过拖放将其放置到柱架上。对**#预测和重复同样的操作,对【ABC】测量名称**进行操作,但对行货架进行操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.创建一个双轴图形

选择列架上的任何药丸(在我的情况下为 #forecast ),并从下拉菜单中选择双轴选项。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.将图表类型更改为条形图

从“标记”卡的“全部”下,选择“酒吧”。这将把图形的类型变成条形图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.切换#实际药丸和#预测药丸

通过这一步,您将看到列/行货架上药丸的顺序有多重要。目前,#预测测量显示在**#实际测量上方。这是因为它在#实际**药丸的右边。为了反转它们,我们只需将# 实际的药丸拖放到列架的右侧。当你看到一个橙色的小三角形后,把它放在那里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.更改条形大小

我们现在有了**#实际测量值和#预测值**,但是为了查看它,我们需要改变条形的大小。从标记卡中选择**总和(实际)**字段,并从尺寸选项中向左拖动滑块。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.同步轴

右键单击任意轴(在我的例子中是**#预测**)并选择同步轴

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.添加#plan measure 作为参考行

#plan measure 从数据窗格中拖放到 SUM(actual) 的标记卡中,并放入 Detail 选项中。这使您可以在不直接影响项目符号图视图的情况下使用这种方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从分析窗格中,将参考线选项拖放到条形图视图上,并确保将其放置在每个单元格的字段上,每个总和(实际)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,将出现一个窗口,并从选项中选择:

  • 值—选择总和(计划),计算总和
  • 线条——将颜色改为黑色,并使其更粗一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.创建计算字段—#实际到计划

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从分析菜单中选择创建一个计算字段*(或右键单击数据窗格并从中选择)*。给它一个合适的名字,并使用截图所示的计算。通过该字段,我们现在可以看到作为一个比率,我们完成了多少计划。

然后在标签选项的总和(实际)下拉菜单下,将*#实际到计划**测量拖放到标记卡*。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

11.创建计算字段—#预测至计划

与上一步相同,唯一不同的是您需要在详细信息选项的**总和(预测)**下拉菜单下的标记卡中拖放新字段。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12.创建计算字段—状态

通过这一步,您可以更容易地确定哪个 KPI 已经步入正轨,哪个 KPI 需要更多关注。右键单击数据窗格,创建计算字段并使用以下代码:

IF [forecast to plan] > 1.2 then “Over Plan”
ELSEIF [forecast to plan] < 0.8 then “Behind Plan”
ELSE “On Plan”
END

创建后,您可以将字段拖放到总和(预测)下拉菜单中的标记卡上的颜色选项中。我们稍后会调整颜色。

13.添加摘要框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了添加汇总框,您需要在标记卡的总和(预测)下拉菜单中添加一些指标。拖拽#实际和**#计划。**

然后右键单击视图中的任意预测条,并选择注释 > 标记…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只保留实际计划预测到计划的措施。对所有其他度量名称(成本/新客户)重复相同的步骤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

14.格式化

  • 右键点击两个轴,取消显示标题
  • 右键单击标题工作表 1 ,并将其重命名为 KPIs 进度。
  • 右击测量名称并选择隐藏行的字段标签。
  • 右击**#实际到计划测量,默认属性,格式数字- >百分比带 0 位小数。重复#预测到计划**测量的步骤。
  • 标记卡中选择总和(实际),并选择标签选项。从字体选项中设置校准中间和颜色为白色。
  • 标记卡中选择 SUM(forecast) ,并选择 Color 选项,为不同的状态应用合适的颜色。
  • 右击其中一个摘要框,选择格式,将底纹改为。对其他盒子重复该步骤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终可视化。基里尔·尤纳科夫的公开画面页面。

要下载最终的 Tableau 工作簿,请访问我的公共 Tableau 页面。

如果你觉得这篇文章有用,你不同意其中的一些观点,有问题或建议,请不要犹豫,在下面给我留言。非常感谢您的反馈!

LinkedIn:圭纳科夫

如何用图论可视化社交网络

原文:https://towardsdatascience.com/how-to-visualize-social-network-with-graph-theory-4b2dc0c8a99f?source=collection_archive---------15-----------------------

找出《权力的游戏》中的影响者

动机

读完 G. R. R .马丁的《冰之歌与被解雇》系列的书,作为《权力的游戏》的忠实粉丝,你可能会好奇谁是维斯特洛最有影响力的人。或者你知道艾德·史塔克和蓝道·塔利是有联系的,但不太清楚它们到底是如何联系的。他们是由第三人还是第四人联系在一起的?如果能把网络形象化,是不是很棒?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由威廉·克劳斯Unsplash 上拍摄

作为数据爱好者,您决定搜索相关数据进行分析。幸运的是,你找到了乔治·r·r·马丁《冰与火之歌》的人物互动网络数据。这是多么令人兴奋啊!但是数据包含节点和边的列表。它们到底是什么意思,你应该从哪里开始?别担心。我支持你。让我们来理解什么是图,以及图如何帮助我们理解社交网络。

什么是图?

图是包含个顶点(或节点)和的结构,每一对相关的顶点称为一条边。这些边可以是有向的或无向的。定向意味着一个方向。人 A 可能喜欢人 B,但是人 B 可能不喜欢人 A。如果 A 和 B 握手,那也意味着 B 和 A 握手

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有六个顶点和七条边的图。检索自维基百科

有了图的结构,它可以用来有效地可视化社会网络。想知道团队中成员的影响者?我们可以立即看到拥有最多连接(边)的人(节点)是影响者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

微软检索

太好了!我们知道为什么图表在可视化网络方面是有用的。让我们看看如何创建图表,并使用它来可视化《权力的游戏》中的角色网络!

探索数据

我把几本书的多个数据合并成两个文件:节点数据‘ASOIAF_nodes.csv’,和边数据‘ASOIAF_edges.csv’.你可以在这里找到数据

import pandas as pdnodes = pd.read_csv('ASOIAF_nodes.csv')
nodes = nodes['Id']
num_nodes = nodes.shape[0]
nodes

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

酷!所以我们在变量node.中有一个字符列表,总共有 276 个节点(字符)。现在让我们探索边缘。在‘ASOIAF_edges.csv’文件中,还有关于权重(交互次数)和图的种类(无向)的信息。但是因为我们只关心连接,所以我们使用前两列

edges = pd.read_csv('ASOIAF_edges.csv',usecols=[0,1] )
edges

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总共有 683 个连接!哇哦。在整个系列中建立了许多联系。但是我们如何把这些数据做成图表呢?我们可以认为:

  • 每个字符作为一个顶点
  • 两个相连的顶点作为一条边

现在我们已经准备好可视化网络了!

用 Graphviz 可视化图形

Graphviz 是一个用于绘制图形的 Python 接口。要安装它,请运行

$ pip install graphviz

通过实例化一个新的Digraph对象来创建一个图

from graphviz import Digraphdot = Digraph(comment='VIP graph')

让我们想象前十个节点

nodes_G = []
for node in edges[:10]['Source']:
    if node not in nodes_G:
        nodes_G.append(node)
for node in edges[:10]['Target']:
    if node not in nodes_G:
        nodes_G.append(node)

向图中添加节点和边

dot = Digraph(comment='VIP graph')for i in range(len(nodes_G)):
    dot.node(nodes_G[i])for i in range(len(edges[:10])):
    edge = edges.iloc[i]
    dot.edge(edge['Source'], edge['Target'])

视觉化:

dot.render('VIP-graph_10.gv', view=True)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不错!我们可以在图表中清楚地看到角色之间的互动。但是把整个网络可视化怎么样?当然,我们可以这样做。但是我们应该预料到这个系列的 5 章中的角色网络将会是巨大的

dot = Digraph(comment='VIP graph')for i in range(num_nodes):
    dot.node(nodes[i])for i in range(len(edges)):
    edge = edges.iloc[i]
    dot.edge(edge['Source'], edge['Target'])dot.render('VIP-graph.gv', view=True)

表演时间到了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里找到这张 Gif 图片

酷!有了图,我们可以有效地将网络形象化。但是我们能创建自己的图形类吗?

创建图表

首先创建顶点(节点)类。我们希望顶点类有什么属性和方法?嗯。添加连接(addNeighbor),知道当前节点与哪些节点连接(getConnections),找出节点名称(getId,连接强度如何(getWeight)

用图形的一些基本方法创建一个图形类:

结论

恭喜你!在本文中,您已经学习了什么是图,以及如何使用图来可视化社交网络。那么你能用这些知识做什么呢?也许查阅本文中的数据创作的人物图你很好奇去分析他们的关系

或者,如果你根本不是《权力的游戏》的粉丝,你可以分析你关心的其他社交网络的数据,如 Twitter、脸书,以分析你和你的朋友或粉丝之间的网络。你将练习使用图表以及理解你和你朋友的关系。你是直接认识他们还是通过与他人的联系认识他们的?这将是如此迷人的知道!

你可以在我的 Github 里找到这篇文章的代码。在我的笔记本上,我还讲述了如何用深度优先搜索遍历断开的节点,用广度优先搜索找到两个字符之间的距离**。**

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上与我联系。

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 凸包:包装数据的创新方法

如何利用包装算法实现数据可视化

towardsdatascience.com](/convex-hull-an-innovative-approach-to-gift-wrap-your-data-899992881efc) [## 如何用 Altair 创建交互式剧情

在 5 行简单的 Python 代码中利用您的数据分析

towardsdatascience.com](/how-to-create-interactive-and-elegant-plot-with-altair-8dd87a890f2a) [## 什么是卓越的图形以及如何创建它

作为一名数据科学家,了解如何制作重要的图表至关重要

towardsdatascience.com](/what-graphical-excellence-is-and-how-to-create-it-db02043e0b37) [## 当生活不给你喘息的机会,如何学习数据科学

我努力为数据科学贡献时间。但是发现新的策略使我能够提高我的学习速度和…

towardsdatascience.com](/how-to-learn-data-science-when-life-does-not-give-you-a-break-a26a6ea328fd)

如何在 Scala 中可视化 Spark 数据帧

原文:https://towardsdatascience.com/how-to-visualize-spark-dataframe-in-scala-b793265b6c6b?source=collection_archive---------26-----------------------

您只需要 Scala 的更好的可视化体验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scala 中的数据可视化火花(作者)

数据集的可视化是探索数据并向最终用户提供有意义信息的一种令人信服的方式。借助 Spark DataFrame,大规模数据处理从未像当前堆栈那样自然。对于用 Python 写代码的人来说,有很多可视化选项可以选择;PySpark 工程师可能不关心数据可视化。然而,对于用 Scala 编写 Spark 的人来说,没有多少开源选项可用。

对于 Scala 数据框架可视化中的 Spark,如果你在谷歌上搜索“Spark In Scala data frame Visualization”,一个选项列表与供应商或商业解决方案密切相关。如果你正在使用数据块,函数display很方便。如果您使用的是 HDInsight Spark,则可以使用内置可视化功能。如果你正在使用 Zeppelin(开源),可视化按钮可以使它变得简单。但是,如果你没有上面提到的任何一个环境,还想使用 Jupyter Notebook 这样的开源,那么数据可视化在这里也不是不可能完成的任务。幸运的是,有定制的函数,库可以使这个过程变得简单。在这篇文章中,我们将只为 Scala 探索更好的可视化体验。

Jupyter 笔记本更好的“展示”体验

在 Spark 中,控制台中的一个简单可视化是 显示功能show 函数将 DataFrame 中的一些记录(默认为 20 行)显示为表格形式。 show 功能的默认行为是启用截断,如果长度超过 20 个字符,则不会显示值。通过这种方式,您可以让所有内容都显示正确。有时,您可能希望禁用截断以查看单元格中的更多内容。那么你的数据显示可能会很混乱,因为它不会排队,它变得难以阅读。

下面的例子中我们有一个名为extremely_long_str的列,我们故意设置它来观察单元格内扩展内容的行为。在这种情况下,show 函数的格式不会很好。

import spark.implicits._
val columns = Seq(“language”,”users_count”, “extremely_long_str”)val data = Seq((“Java”, “20000”,”Short Text”), (“Python”, “100000”,”Medium Text, Medium Text, Medium Text”), (“Scala”, “3000”,”Extremely Long Text, Extremely Long Text, Extremely Long Text, Extremely Long Text, Extremely Long Text,Extremely Long Text,Extremely Long Text, Extremely Long Text, Extremely Long Text, Extremely Long Text, Extremely Long Text, Extremely Long Text,Extremely Long Text,Extremely Long Text”))val rdd = spark.sparkContext.parallelize(data)
val df = spark.createDataFrame(rdd).toDF(columns:_*)df.show(false)

一旦您执行了下面的代码,它将显示下面几行。我们可以认识到一个超长的记录不适合一行。如果你有几百行,阅读起来会很困难,因为一个单元格内的上下文会分成多行。随着 turncate 的关闭,长上下文破坏了格式良好的 show 函数。你可能会注意到阅读起来很麻烦,如果你有像这样的多列布局,那就更麻烦了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认显示不截断(按作者)

在 Jupyter 笔记本中,修复对齐问题。我们可以应用 HTML 来显示内容,而不是使用 show 函数。HTML 在这里会灵活得多,它可以管理单元格合并,这样它在多行中会显示得更漂亮,这里的输出读起来更舒服。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

showHTML()函数(作者)

要完成这项工作,你只需要安装一个 Jupyter 笔记本内核,名为杏仁(Jupyter 的一个 Scala 内核),并实现一个定制的功能。要在 Jupyter 笔记本中安装杏仁内核,可以按照的说明进行操作。

Aivean 为此在 Github 上发布了一个很有用的函数,一旦添加了 helper 函数,就可以调用df.showHTML(10, 300)函数,该函数生成一个包含 DataFrame 结果的 HTML 代码块 wrap,并显示十行,每个单元格 300 个字符。它现在在 Jupyter 笔记本上看起来好多了,如上图所示。要添加的函数如下所示:

// Credit to Aiveanimplicit class RichDF(val ds:DataFrame) {
    def showHTML(limit:Int = 20, truncate: Int = 20) = {
        import xml.Utility.escape
        val data = ds.take(limit)
        val header = ds.schema.fieldNames.toSeq        
        val rows: Seq[Seq[String]] = data.map { row =>
          row.toSeq.map { cell =>
            val str = cell match {
              case null => "null"
              case binary: Array[Byte] => binary.map("%02X".format(_)).mkString("[", " ", "]")
              case array: Array[_] => array.mkString("[", ", ", "]")
              case seq: Seq[_] => seq.mkString("[", ", ", "]")
              case _ => cell.toString
            }
            if (truncate > 0 && str.length > truncate) {
              // do not show ellipses for strings shorter than 4 characters.
              if (truncate < 4) str.substring(0, truncate)
              else str.substring(0, truncate - 3) + "..."
            } else {
              str
            }
          }: Seq[String]
        }publish.html(s""" <table>
                <tr>
                 ${header.map(h => s"<th>${escape(h)}</th>").mkString}
                </tr>
                ${rows.map { row =>
                  s"<tr>${row.map{c => s"<td>${escape(c)}</td>" }.mkString}</tr>"
                }.mkString}
            </table>
        """)        
    }
}

在 Scala-Vegas(VEGA+Scala)中制作漂亮的剧情

Vegas 是一个用于声明性统计数据可视化的 Scala API。它与 Scala 以及 Apache Spark 和 Apache Flink 等现代数据框架集成得很好。因为 Vegas 是声明性的,所以我们需要做的就是定义数据源并传递关于如何显示图表的参数,而不需要显式地写下更多的额外代码。

首先,您需要添加以下两个依赖项

import $ivy.`org.vegas-viz:vegas_2.11:0.3.11`
import $ivy.`org.vegas-viz:vegas-spark_2.11:0.3.11`

因为我们有一个之前定义的 Spark 数据帧,所以我们可以重用它。一旦定义了数据帧,剩下的就是将withDataFrame指向 Spark 数据帧,因此 Vegas 知道如何将 Spark 数据帧解析为数据源。为了美观地展示图表,您可能希望对 x 轴进行排序,否则绘图将按语言名称进行排序和显示,这是默认行为。

import vegas._
import vegas.render.WindowRenderer._
import vegas.sparkExt._Vegas(“Language Usage”)
 .withDataFrame(df)
 .mark(Bar) // Change to .mark(Area)
 .encodeX(“language”, Nom, sortField=Sort(“users_count”, AggOps.Mean))
 .encodeY(“users_count”, Quant)
 .show

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拉斯维加斯酒吧阴谋(作者)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

维加斯地区图(作者)

使用 Plotly 作为替代

Vegas 是一个非常好用的库,它可以与 Scala 和 Spark 无缝协作。虽然拉斯维加斯的情节看起来很酷,但你可能不仅仅局限于一个可视化选项。此外,您可能希望有一个更具交互性的图表模式。 Plotly 在这里可能是正确的选择。Plotly 是另一个出色的数据可视化框架,它已经在 Python 和 JavaScript 中得到了广泛应用。为了让 Plotly 与 Scala 和 Spark 一起工作,我们需要更多地重塑我们的数据,因为 Plotly 目前不直接支持 Spark 数据帧。

首先,你需要为 Jupyter 实验室安装 plotly-scala

jupyter labextension install @jupyterlab/plotly-extension

然后,您需要将 DataFrame 更改为 RDD 并收集,以强制将数据收集到驱动程序节点。为了避免向驱动程序接收太多的数据,在 Spark driver 上收集数据之前,您需要过滤或聚合接近最终结果的数据集,并且不要依赖可视化框架来执行数据转换。

val (x, y) = df.collect.map(r=>(r(0).toString, r(1).toString.toInt)).toList.unzip
Bar(x, y).plot()

Plotly 的一个更精致的特性是它的图表比 Vegas 创建的图表更具交互性。您可以悬停在条形图上并查看数据值,或者选择右上角的选项,如放大/缩小,以满足您的要求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 Scala 编程(作者)

最终想法

尽管 Scala 中有一些数据可视化选项,但仍然有可能构建令人印象深刻且富有创意的图表来通过数据交流信息。对于用 Scala 为 Spark 编写代码的人来说,通过额外的转换,我们仍然可以利用一些开源库来可视化 Scala 中的数据。希望这篇文章能介绍一些如何在 Scala 中可视化 Spark DataFrame 的思路,帮助你获得更好的 Scala 可视化体验。

希望这个故事对你有帮助。本文是我的工程&数据科学系列的部分,目前包括以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

赵承志

数据工程和数据科学故事

View list47 stories外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你也可以 订阅我的新文章 或者成为 推荐媒介会员 可以无限制访问媒介上的所有故事。

如果有问题/评论,请不要犹豫,写下这个故事的评论或者通过 LinkedinTwitter 直接联系我

如何直观地解释任何基于 CNN 的模型

原文:https://towardsdatascience.com/how-to-visually-explain-any-cnn-based-models-80e0975ce57?source=collection_archive---------12-----------------------

理解并实现引导 Grad CAM,为任何基于 CNN 的模型直观地解释类别区分可视化

CNN 深度学习模型——它为什么解释它所解释的东西?

深度学习模型现在能够给出非常高的准确度。在图像分类、对象检测、语义分割、图像字幕或视觉问答中大规模采用计算机视觉算法的最关键部分是理解 CNN 模型为什么解释它们所解释的内容。

CNN 模型的可解释性或可解释性是建立信任和采用信任的关键

只有当我们理解了为什么模型不能识别一个类或一个对象时,我们才能集中精力解决模型的失败。更好的可解释或可解释的深度学习模型将帮助人类建立信任,并导致更高的采用率。

一个好的可解释或可理解的模型应该突出图像中的细粒度细节,以直观地解释为什么模型预测了一个类。

有几种方法可以解释 CNN 模型,比如

  • 导向反向传播 可视化图像中的精细细节。它的前提是:神经元就像特定图像特征的检测器,所以当反向传播时,梯度、负梯度被设置为零以突出图像中重要的像素。
  • 类别激活图(CAM)是类别鉴别的,它定位图像的类别或类别。CAM 要求要素地图直接位于预测图层之前。 CAM 因此适用于在预测层之前对卷积映射执行全局平均池的 CNN 架构,因此不适用于其他计算机视觉算法。
  • Grad CAM 可视化具有类区分性并定位相关图像区域**,但不会像导向反向传播一样突出精细像素的重要性**;然而,与 CAM 不同的是, Grad CAM 适用于任何 CNN 架构。

引导式 Grad CAM 结合了 Grad CAM 和引导式反向传播的优点,Grad CAM 具有类别区分能力,可定位相关图像区域,而引导式反向传播可将负梯度设置为零的图像的梯度可视化,从而在通过 ReLU 层反向传播时突出显示图像中的导入像素。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由作者生成的代码:比较不同的技术来解释 CNN

导向梯度加权类激活图(导向梯度凸轮)具有类区分性,并突出显示图像的细粒度重要区域,用于任何 CNN 架构的高分辨率预测。

制导 Grad CAM 高级工作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像通过 CNN 网络前向传播,生成特征图,然后应用特定于任务的网络来获得类别的分数。

不同类型的任务可以是图像分类、图像字幕、物体检测、视觉问答等。

**所需类别的梯度设置为 1,**所有其他类别的梯度设置为零。这样做是为了获得类别区分定位图。

关于激活的梯度被反向传播,直到最后的卷积层;这抓住了重要的特征。前向激活图和反向传播梯度的加权组合后跟随一个 ReLU,以获得梯度凸轮定位(蓝色热图),该定位解释了模型为做出特定决策而查看的特征。

应用引导反向传播来计算梯度,然后将负梯度和反向传播归零。

最后一步,将 Grad CAM 热图与导向反向传播进行逐点相乘,以获得导向 Grad-CAM 可视化这些可视化现在具有类别区分性,并以高分辨率定位相关图像区域。

梯度凸轮、导向反向传播和导向梯度凸轮在 TensorFlow 中的实现

在下面的代码中,我们将通过 VGG19 模型的 Conv 层向前传播图像。

非负梯度被反向传播到感兴趣的校正卷积特征图。然后,将这些梯度组合起来计算粗略的 Grad-CAM 定位,表示图像中的特征,模型在图像中寻找这些特征以做出特定的决定。

最后,我们应用梯度 CAM 热图与引导反向传播的逐点乘法来获得引导梯度 CAM 可视化,其既是高分辨率的又是概念特定的或类别判别式的。

# Import the required libraraies
**import cv2
import tensorflow as tf
import tensorflow.keras.backend as K
import numpy as np
from skimage.transform import resize
import matplotlib.pyplot as plt
%matplotlib inline**#Setting the image apth and the last conv layer for VGG19
**IMAGE_PATH = 'cat_and_dog1.jpg'
LAYER_NAME='block5_conv4'**#Load the image
**img = tf.keras.preprocessing.image.load_img(IMAGE_PATH, target_size=(224, 224))**# Displaying the original image
**plt.axis("off")
plt.imshow(img)
plt.show()** # Preprocess the image using vgg19 preprocess function
**img =  tf.keras.preprocessing.image.img_to_array(img)
x = np.expand_dims(img, axis=0)
preprocessed_input = tf.keras.applications.vgg19.preprocess_input(x)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原象

我们在 Imagenet 数据集上使用 VGG19 迁移学习模型。

#Create the transfer learned model
**model = tf.keras.applications.vgg19.VGG19(weights='imagenet', include_top=True)**

我们从 VGG19 传输学习模型直到最后一个卷积层创建一个模型。Conv 层保留了当我们在深度学习 CNN 模型中应用全连接层时丢失的空间信息。

'''create a model till  last convolutional layers to have the best compromise between high-level semantics and detailed spatial
information'''
**gb_model = tf.keras.models.Model(
    inputs = [model.inputs],    
    outputs = [model.get_layer(LAYER_NAME).output]
)**
**layer_dict = [layer for layer in gb_model.layers[1:] if hasattr(layer,'activation')]**

通过应用 @tf 覆盖 ReLU 的渐变。custom_gradient 允许对梯度进行细粒度控制,以便反向传播非负梯度,从而获得更有效或数值稳定的梯度。

[**@tf**](http://twitter.com/tf)**.custom_gradient
def guidedRelu(x):
  def grad(dy):
    return tf.cast(dy>0,"float32") * tf.cast(x>0, "float32") * dy
  return tf.nn.relu(x), grad**

将引导式 ReLU 应用于所有重新激活的 Conv 图层

**for layer in layer_dict:
  if layer.activation == tf.keras.activations.relu:
    layer.activation = guidedRelu**

使用梯度带记录前向传递的预处理输入图像,这将有助于计算后向传递的梯度。使用 GradientTape 对象捕捉最后一个 Conv 图层上的渐变。

这里,我们找到了目标类分数相对于最后一个卷积层的特征图的梯度

**with tf.GradientTape() as tape:
 inputs = tf.cast(preprocessed_input, tf.float32)
 tape.watch(inputs)
 outputs = gb_model(inputs)[0]****grads = tape.gradient(outputs,inputs)[0]**

Grad 分类激活图(Grad CAM)

对梯度进行空间平均,其中每个条目是特定要素地图通道上梯度的平均强度。根据梯度重要性建立一个有权重的过滤器图。结果是最终的类别区分显著图。

**weights = tf.reduce_mean(grads, axis=(0, 1))
grad_cam = np.ones(outputs.shape[0: 2], dtype = np.float32)
for i, w in enumerate(weights):
    grad_cam += w * outputs[:, :, i]**

用最大强度值
除热图的每个强度值,以标准化热图,使所有值落在 0 和 1 之间,并在图像上绘制渐变类别激活图

**grad_cam_img = cv2.resize(grad_cam.numpy(), (224, 224))
grad_cam_img = np.maximum(grad_cam_img, 0)
heatmap = (grad_cam_img - grad_cam_img.min()) / (grad_cam_img.max() - grad_cam_img.min())****grad_cam_img = cv2.applyColorMap(np.uint8(255*heatmap), cv2.COLORMAP_JET)****output_image = cv2.addWeighted(cv2.cvtColor(img.astype('uint8'), cv2.COLOR_RGB2BGR), 0.5, grad_cam_img, 1, 0)** **plt.imshow(output_image)
plt.axis("off");
plt.show()**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Grad CAM

导向反向传播

使用引导反向传播来捕捉神经元检测到的像素,而不是抑制神经元的像素。导向反向传播计算目标输出相对于输入的梯度,其中负梯度在通过 ReLU 层反向传播时被抑制

#Visualizing the guided back prop
**guided_back_prop =grads****gb_viz = np.dstack((
            guided_back_prop[:, :, 0],
            guided_back_prop[:, :, 1],
            guided_back_prop[:, :, 2],
        ))       
gb_viz -= np.min(gb_viz)
gb_viz /= gb_viz.max()

imgplot = plt.imshow(gb_viz)
plt.axis("off")
plt.show()**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

导向反向传播

导向梯度类激活图(导向梯度凸轮)

导向梯度 CAM 通过逐元素乘法结合了梯度 CAM 和导向反向传播的最佳方面。制导 Grad CAM 的可视化既具有高分辨率,又具有类别区分能力

**guided_cam = np.maximum(grad_cam, 0)
guided_cam = guided_cam / np.max(guided_cam) # scale 0 to 1.0
guided_cam = resize(guided_cam, (224,224), preserve_range=True)**#pointwise multiplcation of guided backprop and grad CAM **
gd_gb = np.dstack((
        guided_back_prop[:, :, 0] * guided_cam,
        guided_back_prop[:, :, 1] * guided_cam,
        guided_back_prop[:, :, 2] * guided_cam,
    ))****imgplot = plt.imshow(gd_gb)
plt.axis("off")
plt.show()**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

制导 Grad CAM

可视化突出显示了耳朵、鼻子、狗的身体和它的爪子的像素,模型看起来要对狗和猫的特征进行预测,但没有突出显示。

结论:

制导 Grad CAM 具有类别识别能力,在突出显示精细像素细节的同时定位相关图像区域。使用引导 Grad CAM 的可视化有助于解释 CNN 模型在进行预测时看什么,从而解释为什么模型解释它所解释的内容,从而明确建立对深度学习模型的信任。

参考资料:

Grad-CAM:通过基于梯度的定位来自深度网络的视觉解释

https://www . si cara . ai/blog/2019-08-28-可解释性-深度学习-tensorflow

如何在酒吧琐事的最后一题下注

原文:https://towardsdatascience.com/how-to-wager-at-the-final-questions-in-bar-trivia-594a1d746bb2?source=collection_archive---------34-----------------------

什么时候下大注,什么时候下小注

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔治·巴科斯在 Unsplash 上的图片

几周前,我和我的朋友在镇上我们最喜欢的酒吧玩酒吧琐事。对于那些不知道的人来说,酒吧琐事是一种比赛,团队试图回答越来越难的琐事问题以获得分数。最后得分最多的队获胜。在游戏的最后一个问题中,各队在听到问题后可以下注 2、4、6、8 或 10 分。如果他们答对了,他们会把他们下注的点数加到他们的分数上。如果他们做错了,他们会损失一半。

到了最后一题,我和朋友们落后第一名队伍 5 分。我想我们已经想出了正确的答案,所以我想赌最多 10 分,但我的队友想更谨慎,而不是赌 8 分。第一名的队伍和我们正确地回答了问题,但是因为第一名的队伍下注 4 分,我们以一分之差结束了比赛!我突然想到,如果我们赌 10 分,我们就会赢一分。我想知道是否有一种方法可以证明下注 10 点是我们这种情况下的最佳赌注。

在这篇文章中,我将推导出一个酒吧琐事团队的最佳赌注,条件是他们与第一名团队之间的积分差异。在这个过程中,我们还会看到第一名队伍的最佳赌注是什么。在这个分析中,我将最优赌注定义为最大化团队获胜机会的赌注。我假设所有的团队都试图最大化这个概率。领先的团队是团队 2,假设他们答对问题的概率是 p2。另一个团队是团队 1,假设他们答对问题的概率是 p1。

有 5 种情况需要考虑,让我们开始吧!

第一组:第二组领先了 5-11 分

对于两个团队可以进行的每种下注组合,我已经计算了团队 1 获胜的概率,并且我已经在之前的表格中列出了它们。我应该说,这个特定的表格是针对第二组正好领先五个点的情况,但是我们在这种情况下得出的最优策略对于 6-11 的值是相同的。

例如,假设第二队在最后一个问题中下注 2 分。如果团队 1 下注 6 分,如果他们答对了问题而团队答错了,他们就能赢。这以概率 p1 * (1 — p2)发生。这解释了左上角表格第三行中的条目。如果团队 1 下注 8 分,如果他们答对了,团队 2 答错了,或者两个团队都答对了,他们就能赢。这意味着获胜的总概率是 p1 * (1-p2) + p1 * p2 = p1。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看表格,我们可以看到,无论团队 2 下注多少,团队 1 都通过下注 10 分来最大化他们的获胜概率。相反,团队 2 通过下注 6、8 或 10 分来最大化他们获胜的机会。

**策略:**第一队要赌 10 分。如果两个队都答对了,第二队应该下注第二队获胜所需的最少点数。在领先 5 个百分点的情况下,这将是 6 个百分点。

案例 2:第二队领先 4 分

在这种情况下,我重新计算了概率,并以与前一种情况相同的表格格式展示出来。与前一种情况类似,P1 *(1–p2)的值意味着团队 1 如果做对了就赢,团队 2 做错了就赢。p1 值意味着如果团队 1 答对了,团队 2 答错了,或者两个团队都答对了,那么团队 1 就赢了。我想解释一下(1–p2)的值,我们在前面的例子中没有看到。这对应于团队 1 做对的概率和团队 2 做错的概率以及两个团队都做错的概率:p1 * (1-p2) + (1-p1) * (1-p2) = (1-p2)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**策略:**在这种情况下没有优势策略。除了团队 2 下注 10 分之外,团队 1 在所有情况下都下注 10 分,以最大化他们获胜的机会。然而,当团队 2 下注 10 时下注 10 是次优的,仅仅因为团队 1 在他们弄错问题的情况下不能赢。如果第一组认为它能答对这个问题,它可能会下 10 英镑的赌注。

案例 3:第二队领先 3 分

就像案例 2 一样,这种情况有点棘手,因为团队 1 没有单一的策略可以用来最大化他们的获胜机会。如果团队 2 下注 2、4 或 6 分,那么团队 1 总是通过下注 10 分来最大化他们的机会。如果团队 2 下注 8 或 10 点,团队 1 总是通过下注 2 点来最大化他们的机会。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,团队 1 不能查看团队 2 的赌注,因此这不是一个可以在实践中使用的策略。也就是说,我认为团队 1 可以使用一个经验法则来提出一个好的赌注。这里的关键是要认识到,无论如何,如果团队 1 做对了,团队 2 做错了,团队 1 就会赢。换句话说,表格中的每个单元格都有 p1 * (1-p2)值。只是值为 p1 的单元格中多了一个 p1 * p2 项。带有(1-p2)的单元格中有一个额外的(1-p1) * (1-p2)项。

**策略:**团队 1 需要评估 p1 是否> (1-p1),即他们是否更有可能答对问题。如果他们认为他们能答对这个问题,他们应该下注 10 分,因为这样可以通过答对这个问题最大化他们获胜的机会。如果他们认为他们会错,他们应该赌 2 分。同样的经验法则也适用于团队 2。

案例 4:第二队领先 2 分

与前一种情况类似,对于团队 1 来说,不存在对团队 2 的所有下注都是最优的策略。我们可以看到,如果 p1 > (1-p2),那么下注 10 点对于所有情况都是最优的,除了当团队 2 下注 10 点时。如果(1-p2) > p1,那么下注 2 点对于所有情况都是最佳的,除了当团队 2 下注 2 或 4 时。由于团队 1 不知道 p2 或团队 2 的赌注,这不是一个可以在实践中使用的策略。然而,他们可以用 p1 的值来近似 p2 的值——毕竟,团队非常接近,所以他们有相似的琐事知识。通过这样做,我们恢复了与前一个案例相同的经验法则。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**策略:**如果 p1 > (1-p1),他们应该赌 10 点。否则,他们应该赌 2 分。同样的经验法则也适用于团队 2。

案例 5:第二队领先 1 分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**策略:这种情况和“涨 2”的情况非常相似。**如果 p1 > (1-p1),他们应该赌 10 点。否则,他们应该赌 2 分。同样的经验法则也适用于团队 2。

外卖食品

我认为最重要的一点是,你几乎应该总是下注最少或最多的点数。唯一不应该的情况是当你的球队领先至少 4 分的时候。当第一队仅领先 3 分或更少时,我们看到不可能为另一队所有可能的赌注提出一个占优势的策略。在这种情况下,团队应该评估他们是否有可能答对问题。如果是这样,他们应该下注最大点数。如果没有,它们应该是最小值。

这个结论表明,我的团队应该在几周前我们落后 5 分的时候下注 10 分。我迫不及待地想向我的团队展示这一点,并提高我们未来的机会!

如何在 8 分钟内完成网页抓取

原文:https://towardsdatascience.com/how-to-web-scrape-in-8-minutes-4a100a672397?source=collection_archive---------9-----------------------

我将向你展示如何在 8 分钟内成为一名 Python 网页抓取者

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯托弗·高尔摄于 Unsplash

你知道你现在读的是什么数据吗?对你来说,这可能只是几个词,但在后端,你在网上读到的一切都是可以被提取、分离和操作的数据。这就是 Web Scraper,我将向你展示如何在 8 分钟内成为一名 Web Scraper。

世界计量仪

Wordometers 是一个提供生活世界统计数据的网站,也是我们要刮的网站。具体来说,我们将收集表格中的世界人口数据(如下所示)。从表格中抓取数据是最常用的网络抓取形式之一,因为通常我们在表格中需要的数据是不可下载的。因此,我们让计算机在几秒钟内完成,而不是手动获取数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

美味的汤

我知道这是一个奇怪的名字,但 Beautiful Soup 是最强大的网络抓取库之一,在我看来也是最容易学习的,这就是为什么我们要使用它。但是首先我们必须安装它。

要在您的计算机上安装 Beautiful Soup,请进入您的 Anaconda 控制台(只需在任务栏中搜索),并分别键入每一行代码。

pip install beautifulsoup4 
pip install lxml
pip install requests

如果事情最终出错了,这里有一个文档的链接,它会告诉你问题是什么以及如何解决:美汤文档

Python 代码

现在我们已经完成了设置,我们终于可以开始编写代码来清理表格了。

我们首先导入刚刚安装的库和其他一些需要的库。

import requests
from bs4 import BeautifulSoup
import pandas as pd

然后,我们希望获得我们正在抓取数据的网站,为此,我们使用一个名为 requests.get() 的函数,当输入一个 url 时,我们就可以访问网站上的数据。

url = 'https://www.worldometers.info/world-population/'
requests.get(url)
page = requests.get(url)

要查看请求是否成功,在使用适当的 url 运行代码后,应该会弹出这个窗口。

Response [200]

相反,如果它说响应[404],这意味着它不能给你访问该网站,你不能抓取数据。

现在我们已经可以访问网站的数据,我们实际上必须去获取数据。为了做到这一点,我们使用了一个解析器,它将遍历网站的 HTML 代码,并给出网站上的所有数据。

解析器将抓取与网站上看到的所有数据相对应的后端数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

突出显示的蓝线是与网站上看到的人口文本相对应的 HTML 代码

这是我们将使用 Beautiful Soup 的地方,因为我们将使用它的“lxml”解析器。

soup = BeautifulSoup(page.text, 'lxml')

这个 soup 变量现在拥有了来自网站的所有数据。如果你输入 print(soup) 就可以看到这一点,因为会弹出这样的行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

目前我们在网站上有所有的数据,只是 HTML 格式的。所以现在我们必须分离 HTML 来得到我们想要的数据,也就是表中的数据。

超文本标记语言

要理解代码的下一部分,你必须对 HTML 格式有一个简单的了解。

HTML 使用标签来保存信息并确定它在站点上的位置。

例如,顶部的紫色文本表示 table 是一个标记,它下面的所有内容都是包含表内数据的其他标记。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要真正看到哪段 HTML 代码对应于页面上的一段特定数据,一个技巧是在站点的任何地方单击鼠标右键,然后按 inspect。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将打开网站的 HTML,在右边可以看到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这项功能只在谷歌浏览器中有效,但是在弹出的 HTML 框的左上角有一个类似这样的图标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当图标被按下时,你可以点击网站上的任何一条信息,与该条信息相对应的 HTML 将以蓝色突出显示,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

返回代码

现在我们对 HTML 格式有了一个简单的了解,我们将使用它来获取表中的标签。我们通过使用一个名为 find()的函数来做到这一点。 Find 将遍历 HTML,只返回您想要查找的 HTML。不言自明。

看上面的照片,我们看到我们想要的表对应于那个表标签和那个唯一的类名(每个表都有一个唯一的类名以区别于其他表)。为了获得 HTML 和表中的数据,我们编写…

table_data = soup.find('table', class_ = 'table table-striped table-bordered table-hover table-condensed table-list')

我们使用 soup.find,因为如果你还记得我们在 soup 变量中从站点中获取的所有 HTML。

现在,我们只有我们想要的 HTML 和数据,我们可以开始获取数据,并把它放在一个漂亮干净的数据框架中,类似于网站上的那个。

头球

首先,我们将编写一段代码来获取表格的列标题。这些标题有一个标签“th ”,你可以通过点击左上角的小图标看到它,就像我上面展示的那样,然后点击任何一个标题。

因为所有的头都有相同的标签,我们将遍历每个头,并把它添加到一个列表中。为此,我们将使用 find_all() 函数。就像 find()函数一样,它会找到你要找的东西,但现在它会返回它的所有情况。

这段代码看起来像这样…

headers = []
for i in table_data.find_all('th'):
    title = i.text
    headers.append(title)

headers 变量首先是一个空列表,我们将把它添加到。下一行是一个 for 循环,它将遍历所有带有“th”标签的数据。在这种情况下,只有标题具有“th”标签。这段数据将存储在 I 变量中,我们使用 i.text 将头转换成 python 中的字符串。最后,我们将标题添加到标题列表中。

最后,我们有了所有标题的列表,我们将开始通过编写来创建数据帧

df = pd.DataFrame(columns = headers)

这将创建一个空的 dataframe,用我们的标题列表作为列名。

身体

最后一步是获取表体。用于此目的的代码类似于获取头的代码。表格中的每一行对应一个“tr”标签。我们将再次使用 find_all()函数来获取表中所有的“tr”标记和行。这里的区别是我们将再次使用 find_all()函数。这是因为我们不能一次抓取整行。在“tr”标记内是“td”标记,它们实际上对应于行中的特定数据。这是我们需要得到的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们将在“td”标签上使用 find_all()函数来获取一行中的所有数据。

for j in table_data.find_all('tr'):
        row_data = j.find_all('td')

现在我们已经有了行中的数据,我们只需要把它放入一个列表中,下面的行将为我们完成这项工作。

row = [tr.text for tr in row_data]

最后,我们只需将行添加到数据帧中,就完成了。

length = len(df)
df.loc[length] = row

最后,我们创建了一个与网站上的表格完全相同的表格。

站点表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Web 抓取的表格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终代码:

Python A-Z Bootcamp 2023 中的网页抓取

如果你觉得这篇文章很有用,并且对学习网页抓取感兴趣,我有一个课程教你如何从完全的初学者到高级的网页抓取者,课程教你一步一步如何用它赚钱。

请点击下面的链接查看!

[## Python 课程中的网络抓取

介绍你准备好学习当今就业市场最受欢迎的技术技能之一了吗?这个 15 小时的训练营…

christopher-zita-24ef.mykajabi.com](https://christopher-zita-24ef.mykajabi.com/web-scraping-in-python-course)

如何赢得黑客马拉松 Tensorflow Lite 中的实时移动野火检测。

原文:https://towardsdatascience.com/how-to-win-a-hackathon-real-time-mobile-wildfire-detection-in-tensorflow-lite-b0ee838a4c18?source=collection_archive---------22-----------------------

深度学习的好处。

介绍

自 2010 年以来,黑客马拉松作为编码社区中的一种文化现象,已经获得了越来越多的关注。除了学生主导的活动,脸书、谷歌和微软等行业领袖都认识到了这类活动的效用,赞助或举办了自己的黑客马拉松。黑客马拉松将密集的编码和演示项目与除臭剂、零食和睡袋组成的网络相结合,为学生提供了在高度紧张的条件下评估他们解决方案构建能力的绝佳机会。

你甚至会学到处理压力的新方法。

从本质上来说,黑客马拉松是发展一家初创公司的流水线过程的一个缩影:你自己做研究,建立 MVP,并在长达 48 小时的过程中向观众进行推介。你会经历一些情绪波动,睡眠不足,但会学到很多在压力、逆境下工作的能力,以及实现想法的能力。特别是,这种挑战的团队导向是对一个人团队合作能力的有效测试:事实上,虽然专业黑客马拉松“团队”很常见,但学习与新队友合作是对企业工程环境的更现实的模拟。

但是考虑到黑客马拉松中可能有大量的团队,我们如何脱颖而出并创建一个获奖的参赛项目呢?当然,总有运气的成分在里面,但是我们确实可以控制一些关键的方面:

  • 新颖性 —你的解决方案的独创性水平。以前做过一千次吗?请注意,新颖性同样适用于应用程序和方法——在新的应用程序领域中经过实践检验的方法仍然可以是原创的解决方案。
  • 特异性 —您的解决方案如何应对挑战陈述?例如,喷水的人工智能机器人可能不是解决投资银行问题的最佳方案。
  • 执行——你的解决方案交付得如何?这包括演示以及演示和投球方面,后两者通常在较短的比赛中更为重要。记住,执行得好的坏主意总是胜过执行得不好的好主意。

为了在实践中说明这些观点,我们将回顾我们的获奖作品,即 48 小时新加坡 2018 年美国宇航局太空应用挑战赛的环境主题——Sammuta,一种野火管理的多模式早期检测解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,由于我们之前已经在 GradientCrescent 的一篇独立文章中介绍过投球和演示,我们在这里不会花太多时间。我们也不会讨论团队建设和其他人际交往技巧,而是将本文的重点放在解决方案本身。

用于早期野火检测的深度学习

在过去的一年里,澳大利亚 T4 的野火吸引了全世界的关注。超过 1500 万英亩的土地被烧焦,超过 100 种物种现在恐怕已经灭绝,这一事件悲惨地提醒人们人为气候变化的影响。

虽然本季火灾的确切原因仍有争议,但气候变化导致野火发生率加快,气温升高和大量干燥易燃物导致火药桶点火。加利福尼亚州是众所周知的野火中心,现在已经超越了“火灾季节”,成为一种全年现象,以前安全的地区,如瑞典,现在也开始出现野火。从 2017 年到 2018 年,已有超过 2330 亿美元用于野火相关活动。这些都是你应该在演讲中利用的事实,因为用情感背景来框定问题是让听众理解你的信息的关键。 这在我们之前关于投球的文章中已经详细讨论过了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

萨姆塔的开场幻灯片

我们对此问题的解决方案包括一个早期多模式野火检测模型,该模型包含三个关键部分:

  • 具有传输能力的廉价传感器网格充当粗略的热探测图。
  • 一种可编程的空中无人驾驶飞机,最小提升能力为 2 公斤,航程足以到达网格空间的任何一点。
  • 基于视觉的反应灵敏的野火探测系统。

这直观地呈现在下面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所有这些组件都可以从市场上购买,从而形成一个经济高效、可快速实施的解决方案。通过为每个社区使用一次性、坚固、廉价的检测地图,我们可以确保有效覆盖,同时保持经济和节能。对空中观察无人机进行编程,使其飞向跳闸传感器的特定坐标是很容易的,之前已经为搜索和救援服务 s 进行了演示。

然而,为了竞赛的目的,缩小有效演示组件的范围是很重要的。我们认为基于视觉的移动检测系统是最可行、最引人注目的解决方案。鉴于黑客马拉松的时间和资源限制,任何解决方案都必须满足以下标准:

  • 计算量小且响应迅速
  • 在一系列模拟野火上的高准确度(> 80%)
  • 易于实施,最好在 12 小时内。
  • 易于培训,便于维护和更新
  • 未来更新可能的在线学习兼容性

为了满足这些要求,我们决定利用迁移学习和 Tensorflow Lite 为 Android 设备训练一个实时移动 wildfire 分类器。

实施

我们最终针对 Android 设备的 Tensorflow Lite 实现,以及训练所需的 Python 脚本,可以在**GradientCrescent 资源库 中找到。 您需要将 Tensorflow (1.9 或更高版本)与 TOCO 转换器一起安装到您的工作空间中,以尝试重新训练过程。您还需要 Android Studio 来编译和构建最终版本。apk 文件,尽管我们在存储库中提供了一个副本。**

Tensorflow Lite 是一种压缩技术**,旨在将标准 Tensorflow 图形模型改编为轻量级、高响应的包,适合在轻量级上实现快速性能。这些应用包括适合半一次性应用的低端移动设备。它允许使用量化转换技术,其中模型的参数可以转换为 8 位格式,显示出在减少模型大小的同时改善了延迟。在推断时,这种数据被重新转换回其原始格式,从而对分类准确性产生最小的影响。**

我们已经在之前的文章的中讨论过迁移学习。本质上,迁移学习是指在新的数据集上对预先训练好的神经网络进行微调。这里的原则是旧类和新数据类中的特性是共享的,因此可以应用于新的目标类。虽然使用 Tensorflow 库重新训练预训练的 MobileNetV1 网络是一个简单的过程,我们可以通过脚本直接从终端执行迁移学习。

**首先,我们定义了一些类,以便进行再训练过程。出于演示的目的,我们进行了 Google 图片搜索,获得了大约 250 张关于野火、森林和三明治的图片(毕竟幽默不会伤害任何提交的图片)。我们的再训练脚本可以在脚本 "retrain.py ",由官方 Tensorflow 资源库修改而来。这个脚本可以从终端调用,对于初学者来说非常友好,因为不需要额外的脚本。

我们的最终模型采用了预训练的 MobileNetV1 架构,用于 224 x 224 分辨率的输入图像,具有 75%的量化。在此之前,我们对各种架构进行了广泛的测试,以便在毫秒级响应时间和分类准确性之间取得平衡。通常,体系结构越复杂,量化级别越低,模型的执行速度就越慢。

然后,我们用终端命令调用我们的再训练脚本,指定训练时间、特定的预训练模型架构、预处理参数以及我们的输入和输出目录:

python retrain.py --image_dir=C:\tensorflow_work\Firepics --output_graph=retrained_graph.pb --output_labels=retrained_labels.txt --bottleneck_dir=bottlenecks --learning_rate=0.0005 --testing_percentage=10 --validation_percentage=10 --train_batch_size=32 --validation_batch_size=-1 --flip_left_right True --random_scale=30 --random_brightness=30 --eval_step_interval=100 --how_many_training_steps=4000 --tfhub_module [https://tfhub.dev/google/imagenet/mobilenet_v1_075_224/quantops/feature_vector/1](https://tfhub.dev/google/imagenet/mobilenet_v1_075_224/quantops/feature_vector/1)

我们这里的重新训练模型是重新训练的图形输出,但是这还不是 Android 兼容的 Tensorflow Lite。tflite)文件。为了便于转换,我们必须首先使用 “freeze.py” 脚本冻结我们的图形文件,然后利用 TOCO 转换器通过另一个终端命令转换我们的文件:

python freeze_graph.py — input_graph=retrained_graph.pb — input_checkpoint=mobilenet_v1_0.5_224.ckpt.data-00000-of-00001 — input_binary=true — output_graph=/tmp/frozen_retrained_graph.pb — output_node_names=MobileNetV1/Predictions/Reshape_1tflite_convert — output_file=retrainedlite.tflite — graph_def_file=retrained_graph.pb — inference_type=QUANTIZED_UINT8 — input_arrays=input — output_arrays=MobilenetV1/Predictions/Reshape_1 \ — mean_values=224 — std_dev_values=127

转换完成后,我们将模型转移到 Android studio 中的 Android 平台。为了节省时间,我们在 Tensorflow 存储库中可用的演示应用程序的基础上构建了我们的解决方案。请注意,对应用程序、Android Studio 或 Java 的所有元素的解释超出了本教程的范围——我们将专注于构建我们的演示功能。

在一个简单的过程中,我们移动我们的 Tensorflow Lite 解决方案,包括标签和。tflite 模型文件,放入 Android Studio 项目中的“assets”资源目录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终模型,与标签和旧模型一起位于资产资源文件夹中。

然后,我们在 java 文件中指定模型和标签的名称。

@Override
protectedString getModelPath() {
  *// you can download this file from
  // https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip* return "retrained_graph.tflite";
}

@Override
protected String getLabelPath() {
  return "retrained_labels.txt";
}

然后,我们通过修改 camerafragment.xml 布局文件为我们的应用程序构建了一个新的外观布局:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们可以为我们的分类器创建一个阈值,我们在这里使用它来启动可视化祝酒词,但也可以用于最终产品中的通信应用程序。

public void splitCheck(String entry){
  String components[]  =entry.split(":");
  String mostlikely = components[0];
  String mostlikelyprob = components[1];
  resultString = mostlikely;
  resultProb = mostlikelyprob.substring(3,5);
  *//TODO managed to implement check every x seconds, DONE. Only choose the last two numbers, cast as int* if (Integer.*parseInt*(resultProb)>=65){
    match = mostlikely+ " detected";
    itemForCount = mostlikely;

  }else{
    match = "No match";
  }

然后,我们可以编译我们的解决方案并构建我们的。apk 文件,并将其传输到我们的 Android 设备上。

这是我们最终解决方案的现场演示。

凭借我们的演示和幻灯片,我们能够与一个由不同背景的陌生人组成的团队一起,经过大约 12 个小时的工作,在 NASA SpaceApps 挑战赛上获得第一名。您可以在下面观看我们的全球总决赛演示视频:

这就把这一小段总结成了 Tensorflow Lite。在我们的下一篇文章中,我们将通过展示强化学习在一个厄运健身房环境中的效用,来重新探索强化学习。

我们希望你喜欢这篇文章,也希望你看看其他许多涵盖人工智能应用和理论方面的文章。为了保持对 GradientCrescent 的最新更新,请考虑关注该出版物并关注我们的 Github 资源库。

如何在家工作—开发者版

原文:https://towardsdatascience.com/how-to-work-from-home-developers-edition-5bb4078cc6a3?source=collection_archive---------17-----------------------

面向开发人员的 5 种远程工作效率技巧

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据你所在的位置,在过去的几周/几个月里,政府建议/实施远程工作政策,试图减缓新冠肺炎的传播。虽然开发人员有一个在家工作的独特优势(WFH),因为远程工作是任何软件工程职位的额外津贴之一,但没有人预料到如此突然的疫情驱动的转变。加上拥挤的房子、即兴的家庭学校、各种干扰和相互竞争的要求,每个人都在努力提高效率,人们并没有像他们认为的那样做好准备。

对于许多技术专业人士来说,以前偶尔去 WFH 的奢侈已经变成了一种不确定性:

—这种情况会持续多久?
——我们要花多少时间、精力和金钱来建立一个永久性的家庭办公室?
—我们如何保持工作效率,尤其是在不得不应对社会剧变的时候?
——有限的办公室见面时间将如何影响我们的职业生涯?

是我们都会问的一些问题。

我将这些作为 WFH 开发人员多年来学到的 5 个关键策略以及任何开发人员的工具箱中都应该有的一系列生产力工具放在一起,以帮助您轻松过渡到远程工作,并在这些困难时期茁壮成长!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

礼貌: Instagram

➊:明智地选择你的办公室

这是你经常读到的,你应该努力争取的是一个独立的办公室(不受外界干扰),有大的桌面空间,可调节的皮椅,巨大的高清显示器,充足的自然光,有符合你个性风格的氛围。现实检查:

除非你住在豪宅里,否则这是不可能发生的!

但是,您仍然可以在设计家庭办公室时考虑提高工作效率和目标。

指定工作区

如果可能的话,尽量远离交通繁忙的生活区,在家里找一个安静的地方。不管你是住在一室公寓还是五居室的房子里——你的家不是为你的工作而建的**,所以只要你创造了一个适合你的空间,它就是完美的!自从搬到东京后,我不得不放弃我时尚的家庭办公室,不得不求助于我们卧室的一个角落来摆放我的新桌子。然而,这感觉和我们公寓的其他地方不一样,当我关上门时,我的丈夫和 4 岁的女儿知道我不能被打扰。**

这里要记住的一个重要方面是工作与生活的分离:我应对这一挑战的方法是只在工作时间使用我的办公桌——尽管我承认工作时间比我应该工作的时间长,但当我完成一天的工作时,我真的完成了!

“显示器-键盘-鼠标”三合一

如果你在笔记本电脑上工作,一定要有一个外接显示器,这样你就有了一个更大的屏幕(或者使用你的电视)。不用再眯着眼睛,笔记本电脑显示屏可以变成第二个屏幕,专门用来显示电子邮件、Slack 或吉拉,让您专注于完成工作。防眩光屏幕可以大大提高您的满意度,结合外部键盘和鼠标,您的新办公室设置可以真正接近模拟实际的桌面计算机体验。

人类工程学

用一把你可以一天坐 8 个多小时的椅子,让你的工作空间变得舒适。我只能说,我应该早 10 年做这件事!!!相信我,当你总是紧张地看着你的电脑屏幕或者揉着你疼痛的背时,成为一个专注且高效的开发人员真的很难。如果你不能及时得到一个,你可以考虑使用一个腰部支撑枕头,作为一个快速解决办法。

永远不要忽视你的姿势——当你看着你的电脑时,你的眼睛应该几乎与屏幕的顶部保持水平。如果显示器太低,你最终会伸长脖子或弯腰驼背。你也希望显示器离你的椅子有一臂之遥。

📌 **Pro Tips**:
⟶ Get control of your posture with [**this gadget**](https://www.uprightpose.com/en-gb/);
⟶ If your eyes suffer, [**f.lux**](https://justgetflux.com) makes the colour of your computer's display adapt to the time of day: warm at night and like sunlight during the day.

技术故障

没有什么比网络中断更让我害怕的了。依赖稳定的互联网连接是必不可少的,但在锁定期间,如果家中同时有多个互联网用户,连接会变得缓慢。使用检查它的速度,不要对任何不符合你需要的东西妥协。在我的情况下,速度很好,但必须得到一个中继器,以提高信号到我们的卧室。

为了内心的平静,有一个备份计划是谨慎的:一个移动热点设备,或允许网络共享的手机计划可以“救命”。当一切都失败时,拥有一个没有互联网连接也能完成的任务库将变得很方便:)

环境变化

如果可以的话,靠近窗户工作;它将真正改变你的办公环境。自然光的变化已被证明对健康有益,能够保持对户外的视线将使你保持警觉,促进你的创造性思维,并将成为灵感的来源。如果你有室内植物,把它们放在你的工作区或附近——这是一个把户外引入室内的好方法,肯定会增加你的创造力,减少压力。最后但同样重要的是,即使是最简单的触摸(想一想,一张镶框的照片)也能让你保持踏实和专注。
表白:我曾经对这些 ⬆️ 的想法嗤之以鼻,但它们真的有所作为!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

礼貌: GQ 日本

➋:管理分心

每个工作环境都有它的干扰。毫无疑问,每当你的注意力从手头的任务上转移开时,它可能会提高你的压力水平,使你保持生产力的能力更加困难。但是既然你已经找到了一种方法,可以不去理会那个声音很烦人的同事,你就能找到一种方法来克服你的新家带来的干扰。

沉默是金,是吗?

背景噪音是一个非常主观的话题,一些人喜欢绝对的安静来集中注意力,而另一些人发现安静会妨碍他们的工作效率,喜欢一点环境噪音。

当我进入创造性模式时,我不介意背景噪音的水平,但当我试图找到一个错误,理解复杂的技术概念或执行任何其他涉及深入思考的任务时,我根本不能容忍任何噪音。

随着声音级别的提高,您可以执行的任务的复杂性通常会降低。

以下是我的应对技巧:

——从源头上最小化:我丈夫和我对噪音的容忍度有不同的“接受标准”,所以我们创造了一个家庭办公室礼仪:早上我们分享我们的时间表,我们让彼此知道什么时候我们不被打扰。通过这种方式,80%的情况下噪音在源头被最小化🙃。对于剩下的 20%,如果有一个简单的解决方案就好了…

****—降噪:降噪耳机试图用声音对抗声音,用“大小相等、方向相反”的波形阻挡不想要的声音。花钱买一双像样的,你不会后悔的!我有这些索尼的——质量很好,戴起来非常舒服,即使戴很长时间也是如此!

****—噪音屏蔽:当噪音无法从源头上被阻止,或者无法用耳机消除时,我会求助于用其他不那么令人分心的声音来屏蔽它。虽然这是一个次优的解决方案,但它远比忍受假装忽视它的压力和分心要好。这些是我赖以生存的工具:

  • Focus@Will :他们提供经过科学设计的音乐,以增强你的注意力。它是基于订阅的,但你也可以在 Spotify、 Apple Music 或 YouTube 上找到它们。
  • :选择几个简单的环境,包括森林、雷雨、海浪、咖啡馆和火车轨道,打造你自己的声景。这是我默认的权宜应用,因为它对我有即时的舒缓作用。****
  • 双耳节拍:你可以在谷歌上随意搜索这个术语,这样你就能理解它是如何工作的,但基本上它就是两种频率略有不同的音调同时在不同的耳朵里播放的音乐。只需在您喜欢的音乐流媒体服务上寻找一个不错的播放列表。我喜欢这个
  • 流态 :混搭这个每日快讯推荐器乐专辑和当代古典、环境或电子音乐。

数字娱乐

电子邮件、吉拉通知、垃圾弹出窗口、日历提醒、虚拟会议、电话只是我们每天都会遇到的一些干扰。它们增强了上下文切换,并且扼杀了我们的性能。为了重新控制我的时间,我练习通知排毒……
你可以这样做:

  • 禁用所有桌面通知;
  • 如果不可行,根据 VIP 名单(如你的老板)或聊天室类型(如生产支持)对通知类型进行分类;
  • 在深入钻研一项复杂任务之前,使用“请勿打扰”模式;
  • 当你休息时,浏览阅读通知,只回复重要的请求,因为你可能会丢失当前任务的上下文。

媒体封锁

当我浏览互联网的时候,另一个让我不感兴趣的话题是广告。除了打扰和令人毛骨悚然,他们杂乱的屏幕,降低网络性能和转移我的注意力,大时间。 幽灵特工 在消灭他们方面做得很好。
当广告屏蔽还不够时,我会使用 文本模式 ,删除页面中的任何视觉内容(图片、视频等),让我专注于重要的内容:文本!

真正的问题不一定是注意力分散本身,而是注意力分散后的阶段——注意力分散会让你的精神进程脱轨长达 20 多分钟。即使你一天只分心几次,当你努力回到快乐的工作环境时,你损失的时间也是巨大的!

这很好地把我带到了下一部分…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

礼貌:爱德华多·弗洛里斯

专注成就➌:

流行的博客充斥着“改变游戏规则”的生产力技巧: 【番茄工作法】把事情做好帕累托原则 等等。我已经尝试了其中的一些,但是主要的问题是当你做一些像编程这样有创造性的事情时,它们并不完全适用。****

我将分享那些对我最有效的技巧,从保持专注到战胜拖延症和更好的时间管理:

纳普奇诺

是的——听起来确实是这样!我第一次接触这个术语是在伦敦参加一个研讨会的时候,丹尼尔·平克正在那里宣传他的新书《何时:完美时机的科学秘密》。我想试一试,结果是 a.m.a.z.i.n.g!事情是这样的:

当你觉得有点昏昏欲睡时(通常在午饭后),喝一杯咖啡,把闹钟调到 25 分钟,小睡一会儿。当闹钟响起时,咖啡因开始起作用,帮助你清醒地醒来;它“重置”你的生物钟,提高你的认知能力。听起来事与愿违,对吧?不是的!事后你真的会觉得更警醒!

****☕️⏰💤 You can download the full guide [**here**](https://www.danpink.com/wp-content/uploads/2017/12/nappuccino.pdf)!****

如果它很重要,就安排它

我用待办事项列表来保持条理,但对我个人来说,使用日历更有效。待办事项清单设定了不灵活的限制,并给出了“选择的悖论”,而日历通过不断提醒我截止日期来让我掌握工作。所以我所做的就是把我的待办事项列表作为一个待办事项列表,并把我的每日选择转移到日历中。一旦一项任务被列入日程表,它就是正式的——我承诺完成它。

我喜欢这种方法的原因是,它激励我将每天的日程安排建立在真实因素和时间限制的基础上。毕竟一天有 24 个小时……所以如果我的待办事项清单有一英里长,那就不可能完成所有的任务,它很快就会变得令人不知所措。

请记住以下几点:

  • 一旦你排满了日程,你需要诚实地说出你需要多少时间,然后根据你的空闲时间来安排时间。也使用一些缓冲/应急措施。
  • 为高度集中的活动,如编程或架构设计,增加延长的时间。
  • 划分主动和被动时间段。主动型的是你需要关注的重要任务(项目工作),而被动型的是为请求和打断留出时间,例如即兴会议/电话。
  • 第 30-60 分钟完成一些管理任务或回复邮件,例如,收集一份你需要完成的小任务清单,然后一次完成,这样你就不会打断一天中深入的工作。

一个额外的好处是,你不用把你的日历作为一张空白的石板留给别人填写,你可以控制什么时候完成工作!

如果你不优先考虑你的生活,别人会的!—格雷格·麦克欧文

时间管理洞察

跟踪你花在各种编程活动上的时间是很重要的。 Clockify 主要是一个工作时间追踪器,帮助你追踪你在项目上花费的时间,并收集显示你工作效率的数据。在吉拉很容易记录准确的时间,所以你的经理很高兴,可以根据你的速度更好地计划。当你认识到一项任务所花费的实际时间时,你还可以洞察你的生产力,并有助于提高你的评估技能。

有序的桌面

作为开发人员,研究一个主题是我们工作的一部分。我通常会在浏览器的几个窗口上打开几个选项卡,其中包含我的工作进展资源。随着 Outlook、WebEx、Visual Studio、Excel、SourceTree(还有很多)的出现,我的桌面变得太忙、太快了。为了让我的工作空间井然有序,我最喜欢的两个应用是 HazeOverMagnet 。如果你在 Mac 上工作,一定要看看它们!Windows 也有类似的功能。

最容易的方法

每击退一次诱惑,都要花费一些意志力点。简而言之:积极抵制吃巧克力棒的冲动比完全不吃巧克力更难。因此,你没有抵制诱惑,而是将它们从你的周围完全移走;没有诱惑,没有意志力的浪费。我的雇主在屏蔽大多数社交媒体网站方面做得很好,但我倾向于沉迷于科技新闻网站和媒体。我用的是 Chrome 的扩展软件 Timewarp ,它可以让你设置不同的重定向,以防你在工作期间访问一个没有效率的网站。你可以让这个插件把你重定向到一个更有效率的网站,给你看一句激励性的话,或者显示你在上面花的时间。

正确的方法可以让你每天都开心。诀窍是对你需要达到的目标要有意识!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

礼貌用语:安德里亚·尤奇尼

➍:报销您的通勤费用

在家工作的最大好处之一是你不必处理长时间的通勤。但是,除了被动的媒体消费或打盹到 8:59,像以前一样早地开始一天并专注于自我发展是非常有益的:你不仅可以保持良好的心理健康,还可以扩展你的知识并释放新的潜力。再说,“ 伟大的开发者从来不会停止学习 ”!请参考我那篇广受欢迎的文章,从中获得灵感和可操作的想法,来培养你卓越的专业技能:

****** [## 伟大的开发人员从不停止学习

it 专业人员培养持续学习心态的 7 种方法

towardsdatascience.com](/great-developers-never-stop-learning-77b9ce867eac)

**📌 Bonus Tip**: As a result of the prolonged remote working you may consider investing the substantial commuting cost saving to purchasing the pricey subscription of your favourite self-development site!

⛔️ 重要提示:你的通勤时间应该转化为你的“休息”时间,即脱离工作,拥有一些“你”的时间!尽管关注你的自我发展是至关重要的,但是当你需要睡到 8:59 的时候,不要感到内疚!******

➎:不要隐身

大多数开发人员喜欢减少与同事的接触,但这可能不利于团队凝聚力,并影响生产率和职业发展。应该从一开始就采用并遵循一个沟通策略,该策略规定团队应该多长时间检查一次,以及他们将如何相互传达任何变更或阻碍。定期召开会议(音频或视频)有助于弥合旧的/同处一地的工作方式和新的/远程的工作方式之间的差距,并使所有员工成为团队的一部分。

状态更新

让你的同事知道你什么时候不工作,这样当他们需要联系的时候就不会被晾在一边。礼貌的“马上回来”或“下班”状态更新可以设置正确的期望值,并有助于团队的工作流程。

例行的

当你在一家遵循每日例会(如晨会)和核心工作时间节奏的公司工作时,将你的日常工作与团队的日常工作同步以实现近乎无缝的协作是很好的。

会面时间

如果你想在办公室与同事面对面交谈,不要默认使用电子邮件或 Slack 拿起电话或进行视频通话。这将减少误解,打破在家工作可能带来的社会隔离。

****📌 **Pro Tips**: With video calling becoming the norm now, making sure that people can hear you and see you well is important.
⟶ Use high quality USB microphone (check [**this bad boy**](https://www.amazon.co.uk/Blue-Microphones-Snowball-Ice-Microphone/dp/B006DIA77E) out!);
⟶ Use headphones to prevent echo;
⟶ Sit facing a light source;
⟶ Wi-Fi is the mortal enemy of video calls - make sure your internet connection is decent and also close other competing applications.****

交流-交流-交流

在远程工作环境中,人们通常根据我们产出的数量、质量和及时性来评判我们。作为开发人员,我们的提交、拉请求或吉拉转换(开放、进行中、完成)都在为我们的工作说话,并提供了良好的透明度。但是你如何向你的开发负责人解释那个花了两个小时才发现的讨厌的错误,而且是一个…打印错误?—我们都去过!

  • 确保您与您的经理保持沟通渠道畅通;如果你曾经有定期的一对一,一定要坚持保持。如果你没有,那就马上安排吧。不仅仅是在办公室,并不是放松与老板关系的借口。他们持续的信任和宝贵的反馈对你的职业发展至关重要。****
  • 定期与你的直接下属沟通,但不要把这与微观管理混为一谈。检查实际上只是确保正在取得进展,并且每个人都有他们需要的资源!****

顺利度过长期远程工作的关键是清晰的沟通!

******A step too far?**
A friend of mine, who works in a technology startup, and his team are holding “mute” video gatherings, to simulate an office environment.They simply start a Zoom video call, put the audio on mute and get on with their work. They can all see each other and quickly judge if a colleague looks deep in thoughts (and hence make a judgement if they are interruptible) or away from their desk or in a call or even peek at their toddler who has come for a cuddle!I ❤️ this idea, but surely it is company culture dependent.****

文件

远程工作时,无法访问信息是最令人沮丧的因素之一,有时会成为完成工作的一大障碍。文档在这里非常重要——使用你公司的 wiki(例如 Confluence)来创建指导性文章,记录你的新杰作的技术设计,或者任何你认为你的团队会喜欢的东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

礼遇:基亚拉·吉利亚扎

甜蜜的家…工作!

尽管新冠肺炎加快了这一进程,但远程工作在过去几年一直呈上升趋势。我希望读完这个指南后,你会成为一名成功的远程开发者!

感谢阅读!

我定期在媒体上撰写关于领导力、技术&的数据——如果您想阅读我未来的帖子,请‘关注’我

如何在 Pandas 中使用 Excel 文件

原文:https://towardsdatascience.com/how-to-work-with-excel-files-in-pandas-c584abb67bfb?source=collection_archive---------0-----------------------

当您拥有 Excel 格式的数据时,需要知道一些有用的事情

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

背景图片由bongkarn thanyakij来自 像素

就我目前所见,CSV 似乎是数据科学家中最流行的存储数据的格式。这是可以理解的,它完成了工作,并且是一种非常简单的格式;在 Python 中,即使没有任何库,也可以用不到 10 行代码构建一个简单的 CSV 解析器。

但是您可能并不总能找到 CSV 格式的数据。有时,唯一可用的格式可能是 Excel 文件。比如,这个关于 ons.gov.uk 犯罪的数据集,只有 xlsx 格式;我将在下面的例子中使用的数据集。

读取 Excel 文件

将 Excel 文件读入 pandas 数据框的最简单方法是使用下面的函数(假设您使用了import pandas as pd):

df = pd.read_excel(‘path_to_excel_file’, sheet_name=’…’)

其中sheet_name可以是我们要读取的工作表的名称,它是索引,或者是我们要读取的所有工作表的列表;列表的元素可以混合:工作表名称或索引。如果我们想要所有的表,我们可以使用sheet_name=None。在我们希望读取更多工作表的情况下,它们将作为数据帧的字典返回。这种字典的关键字将是一个工作表的索引或名称,这取决于我们在sheet_name中如何指定;在sheet_name=None的情况下,键将是工作表名称。

现在,如果我们用它来读取我们的 Excel 文件,我们会得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没错,一个错误!事实证明,pandas 本身无法读取 Excel 文件,因此我们需要安装另一个 python 包来完成这项工作。

我们有两种选择:xlrdopenpyxl。包xlrd可以同时打开 Excel 2003(。xls)和 Excel 2007+(。xlsx)文件,而openpyxl只能打开 Excel 2007+(。xlsx)文件。因此,我们将安装xlrd,因为它可以打开两种格式:

pip install xlrd

现在,如果我们再次尝试读取相同的数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有用!

但是 Excel 文件可能会有点混乱。除了数据之外,在第一行和/或最后两行,他们可能有其他注释/解释。

要告诉 pandas 从特定的行开始读取 Excel 表,可以使用参数 header = 0-索引行从哪里开始读取。默认情况下,header=0,第一行用于给出数据框列的名称。

若要跳过工作表末尾的行,请使用 skipfooter =要跳过的行数。

例如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个稍微好一点。仍然有一些特定于该数据的问题。根据我们想要实现的目标,我们可能还需要以另一种方式重新排列数据值。但是在本文中,我们将只关注数据帧的读写。

除了上面的方法,另一种读取 Excel 文件的方法是使用一个pd.ExcelFile对象。这样的对象可以通过使用pd.ExcelFile(‘excel_file_path’)构造函数来构造。一个ExcelFile对象有几种用法。首先,它有一个.sheet_names属性,是打开的 Excel 文件中所有工作表名称的列表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,这个ExcelFile对象也有一个.parse()方法,可以用来从文件中解析一个工作表并返回一个数据帧。这个方法的第一个参数可以是我们想要解析的工作表的索引或者它的名字。其余参数与pd.read_excel()功能中的相同。

解析第二个工作表(索引 1)的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

…这里我们使用名称而不是索引来解析同一个工作表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ExcelFile s 也可以用在with … as …语句中,如果您想做一些更复杂的事情,比如只解析名称中有两个单词的工作表,您可以这样做:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样的事情你可以用pd.read_excel()代替.parse()的方法来做,就像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

…或者,如果您只是想要所有的纸张,您可以:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编写 Excel 文件

现在我们知道了如何读取 excel 文件,下一步我们还可以将数据框写入 excel 文件。我们可以通过使用数据帧方法.to_excel(‘path_to_excel_file’, sheet_name=’…’)来实现。

让我们首先创建一个用于写入 excel 文件的简单数据框:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们想把它写到一个 excel 文件中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

…我们得到了一个错误。

还是那句话,熊猫不能自己写 excel 文件;我们需要另外一个包装。我们的主要选择是:

  • xlwt —仅适用于 Excel 2003(.xls)文件;不支持追加模式
  • xlsxwriter —仅适用于 Excel 2007+(。xlsx)文件;不支持追加模式
  • openpyxl —仅适用于 Excel 2007+(。xlsx)文件;支持追加模式

如果我们想给老人写信。xls 格式,我们应该安装xlwt,因为它是唯一处理这些文件的。因为。xlsx 文件,我们将选择openpyxl,因为它也支持追加模式。

pip install xlwt openpyxl

现在,如果我们再次运行上面的代码,它的工作;创建了一个 excel 文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认情况下,pandas 还会将索引列与我们的列一起写入。要消除它,使用下面代码中的index=False:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

索引列现在不在那里:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们想写更多的表呢?如果我们想在前面的文件中添加第二页,你认为下面的代码可行吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

答案是。它只会用一张纸覆盖文件:sheet2。

要将更多的工作表写入 Excel 文件,我们需要使用如下所示的pd.ExcelWriter对象。首先,我们为 sheet2 创建另一个数据框,然后我们打开一个 Excel 文件作为ExcelWriter对象,我们在其中写入 2 个数据框:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们的 Excel 文件应该有 2 张。如果我们想在其中添加另一个工作表,我们需要在 append 模式下打开该文件,并运行与前面类似的代码。例如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的 Excel 文件现在有 3 张表,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Excel 公式

此时,您可能对 Excel 公式感到疑惑。他们怎么了?如何从有公式的文件中读取?怎么把它们写到 Excel 文件里?

嗯……好消息。这很容易。将公式写入 Excel 文件就像只写公式的字符串一样简单,这些字符串会被 Excel 自动解释为公式。

举个例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的代码生成的 Excel 文件是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果我们想读取一个包含公式的 Excel 文件,pandas 会将这些公式的结果读入数据框。

例如,让我们读取我们之前创建的文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有时,您需要手动保存 Excel 文件,这样才能工作,并且不会得到零而不是公式的结果(在执行上面的代码之前按 CTRL+S)。

下面是 Jupyter 笔记本的代码:

我希望这些信息对您有用,感谢您的阅读!

这篇文章也贴在我自己的网站这里。随便看看吧!

关于数据来源的一切

原文:https://towardsdatascience.com/how-to-work-with-someone-elses-data-6c45d467d7a2?source=collection_archive---------8-----------------------

非结构化数据、继承的数据、耗尽的数据、混淆的数据和其他小精灵

如果你正准备加入公民数据科学家的行列(一头扎进新冠肺炎的数据,也许?)关于数据来源,您应该知道一些事情…

数据出处:“谁收集的,为什么?”

社会被关于数据的扭曲预期所困扰,充斥着像*“数字不会说谎”**“在你给我看数据之前,这只是你的看法”(不,仍然是你的看法)和“我看了数据,所以现在我是知情的。”*

在每个孩子的一生中,总会有那么一段时间,他们必须认识到:牙仙不是真的。事情不会因为你有一些数字就奇迹般地解决。这些数字从何而来真的很重要。(有些孩子比这个发展里程碑晚了几十年。)

任何人都可以把一些电子涂鸦放在一个表格里,称之为数据。从你与科学联系的意义上来说,这并不意味着它是好的/真实的/有用的/有价值的。

即使数据集被仔细地收集,你确定你知道它在到达你的途中发生了什么吗?恶棍不会从你的梦数据集中删除不方便的行的唯一原因(“对你隐藏数据?我绝不会。这些都是离群值。”)或者在与你分享数据之前,以扭曲信息的方式聚集东西,这太容易了。(自重的小人更喜欢挑战。)

对来源进行推理的能力是数据素养的基本要求之一,所以让我们做一些区分:

  • 主要数据与继承(次要)数据
  • 采集数据对比排气数据
  • 结构化数据与非结构化数据
  • 原始数据对加工数据

然后总结它们的相对优点来完成这篇文章。

初级与次级

如果你(或你所在的团队)直接从现实世界中收集了的观察数据,你就在使用 原始数据 。换句话说,您可以控制如何记录和存储这些测量结果。

相反的是什么? 继承(次级)数据 是那些你从别人那里获得的数据。(例如,您可以在这里获得超过 2000 万个数据集。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继承的数据集就像继承的牙刷:使用它们是一种绝望的行为。如果可能的话,你总是更喜欢使用自己的数据集,因为二手数据集充满了陷阱。不幸的是,你可能没有这个选择。

如果你对我对继承数据集的深入研究感兴趣——包括如何使用它们的建议——在这里绕一个小弯。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

捕获与排放

捕获数据 是为了特定的分析目的而有意创建的,而排气数据是数字化/在线活动的副产品。 耗尽数据 通常发生在网站出于调试或数据收集等目的而非特定分析目的存储活动日志时。

捕获的数据是为数据科学专业人员用于特定目的而创建的,而排气数据则不是。

尾气数据可能是分析的宝库,但却是统计推断的噩梦。(我关于统计学和分析学的区别的文章是这里。)如果您正在进行谨慎的数据驱动的决策,如果可以选择,您会更喜欢捕获的数据。另一方面,如果你在寻找惊喜或希望激发原创想法的灵感,你可能想将目光投向捕捉到的数据集之外。

如果你习惯于处理为分析而创建的数据,你可能会觉得在这个乱七八糟的数据仙境中有些东西不太对劲…但你又不能确切地指出它。如果您习惯的所有惯例都被忽略,并且日志记录选择感觉有点古怪,原因很简单:这些数据集不是为您的眼球设计的。因此,如果尾气数据感觉像是需要额外清理和处理的垃圾,你也不应该感到惊讶。深呼吸,分配额外的时间给你的争吵。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结构化与非结构化

与此相关的是,我很难接受“非结构化数据”这个新名字,直到我意识到这只是商业世界重新发现一个非常古老的概念:一团糟。

你称之为非结构化数据的东西只是需要你把它结构化的数据。

如果我们迂腐的话,就没有非结构化数据这种东西(因为通过存储,它们必然被迫具有某种结构),但是让我大方一点。以下是该定义想要表达的意思:

  • 结构化数据被整齐地格式化,准备进行分析。
  • 非结构化数据 不是你想要的格式,它们强迫你把自己的结构放在上面。(想想巨魔留下的图片、邮件、音乐、视频、文字评论。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你称之为非结构化数据的东西只是需要你把它结构化的数据。迷因:来源

例如,您可能希望以漂亮的表格格式处理图像数据,但是您却发现一个文件夹中充满了各种不同扩展名和格式的图片。雪上加霜的是,你发现了一个文本文件,里面有各种网站上更多图片的链接。恶心恶心。

把东西存放得如此混乱需要一种特殊的天赋,这就是为什么你通常会发现背后的罪魁祸首是人类。至少像日志文件这样的机器生成的尾气数据有某种标准化的格式(即使是愚蠢的格式),这就是为什么我们称那些东西为半结构化数据。

一个分析师的垃圾是另一个分析师的财富。

把结构化数据想象成整洁的图书馆,把非结构化数据想象成混乱的阁楼,这不会伤害你。和数据一样,世界上图书馆的数量远远少于乱七八糟的藏书。(我可以从我的桌子上看到一个。)当然,旁观者清。您可能会发现图像数据从定义上来说是杂乱的,而我可能只会在它们以上述方式到达时才发现它们是杂乱的。一个分析师的垃圾是另一个分析师的宝藏。

非结构化数据“革命”背后的观点是,您对非标准数据格式的耐心可能会获得丰厚的回报。

对于非结构化数据,你唯一能做的就是分析。为了将它用于统计推断ML/AI ,你必须对它进行结构化。当您的数据从非结构化转向结构化时,您通常会侵蚀其中的一些信息,就像您在准备沙拉时扔掉洋葱的薄片一样。

由于非结构化数据在您使用它们时就变得结构化了,因此它们的真正“优势”是您一开始就拥有它们。如果企业必须让他们所有的数据都符合你的口味,他们可能会对所涉及的努力嗤之以鼻,懒得存储那么多数据。结果,你能接触到的数据挖掘的来源就少多了。

生的与加工的

说到清理, 原始数据 是采集后未被改动的数据,而 处理后的数据 是被清理和/或转换的数据。换句话说,原始数据以原始形式到达,没有被陌生人篡改。原始数据几乎总是需要一点爱(阅读:清洁工的工作)才能变得有用。

你可能认为这意味着处理过的数据优于原始数据…但这是一个陷阱!因为数据科学专业人员编写代码来处理他们的数据(参见“非破坏性编辑”),真正优越的选择是原始数据和处理代码。如果您正在共享数据,这是最好的方法(除非有法律/隐私原因需要在处理过程中隐藏一些数据,或者原始数据集非常庞大)。

真正优越的选择是伴随处理代码的原始数据。

让自己脱离电子表格并编写代码来为自己做数据工作,可以确保在清理过程中不会破坏任何信息,并允许您改变主意,比如说,像剪掉一些有问题的代码一样容易地去除离群值或进行类别聚合。

如果我们要细化,那么让我们命名一些种类的处理过的数据:

  • 转换后的数据 —信息被改变,从而无法重建
  • 聚合数据 —原始的信息内容在观察值上折叠
  • 混淆数据 —信息被有意隐藏(例如通过删除或噪声注入)
  • 礼貌数据 —嗯?

最后一个是我喜欢做的半开玩笑的区分。只要在转换/聚合过程中没有丢失任何信息,我不反对接收一个格式良好的原始数据集的礼貌版本(具有良好的文档和有意义的变量名)。例如,如果你要给我发送数据,并且你知道我喜欢用千克而不是磅,那么用我觉得更容易使用的 weight_kg 列替换你那令人困惑的 wlb 列是礼貌的;这比给我发送原始数据稍微好一点。但是如果你用二进制列替换 wlb 是超重的*,你将向我发送不礼貌的处理过的数据。那是因为你不必要地破坏了原始数据中的一些信息…谁说我会同意你对超重的定义?*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择数据集

原始数据至高无上…如果你负担得起的话。如果你要使用其他人的数据,最好使用原始的/礼貌的数据,除非他们的领域专长远远超过你。如果你问的问题与最初的收集者感兴趣的问题相同,那么捕获的数据更有优势。如果你想从尚未有人想到的方向中获得灵感,排气数据可能是一个更好的选择(因为捕获的数据更有可能给你留下与原始收集者相似的结论)。快速总结:

主要数据优势:对质量的控制。
次要数据优势:省时省钱。

抓取数据优势:统计推断和决策。
穷尽数据优势:激发原创想法。

结构化数据优势:需要清理的少。
非结构化数据优势:有些东西不会以其他方式存储。

Raw 数据优势:几乎一切。
处理过的数据优势:应对海量原始数据集。

使用他人数据的建议

在这里继续阅读第 2 部分…

感谢阅读!人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?用这个表格联系。

如何使用他人的数据

原文:https://towardsdatascience.com/how-to-work-with-someone-elses-data-f33485d79ed4?source=collection_archive---------18-----------------------

处理继承数据指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义

如果你(或你所在的团队)直接从现实世界中收集了的观察结果,那么你就在使用的原始数据。换句话说,您可以控制如何记录和存储这些测量结果。

相反的是什么? 继承(次级)数据 是你从别人那里获得的那些数据。(例如,您可以在这里获得超过 2000 万个数据集。)

想要其他相关术语的定义吗?在我的主文 上找到它们的数据出处 。(你正在读第二部分。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

买家当心

继承的数据集就像继承的牙刷:使用它们是一种绝望的行为。如果可能的话,你总是喜欢用你自己的。不幸的是,你可能没有这个选择。收集原始数据可能非常昂贵。

收集自己的数据是一种奢侈,不是每个人都能负担得起的。

虽然原始数据带有一股让人想起手工奶酪的优越感,但任何坚持认为你没有利用继承数据的价值的人都应该检查一下他们的特权。个人(以及没有强大数据传统的公司或某个领域的新来者)可能没有资源独自收集数据,特别是当项目需要非常大的数据集或专业技能/设备时。例如,不是每个人都能负担得起在生物安全等级高的实验室环境中进行病原体测量。

有时候你唯一的选择就是尽量利用别人的数据。

但是,如果你被迫使用其他人的数据,如果事情没有像你希望的那样发展,不要感到惊讶。不能保证继承的数据能满足你的需求……(而且,牙仙也不是真的。)

购买者请注意:不能保证继承的数据能满足您的需求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仅仅因为有人卖给你一个标有“晚餐用品”的包装,并不意味着你可以用它做一顿美味的晚餐。如果里面只装了一堆卫生纸呢?小心使用继承的数据;它可能不适合你的需要。

下面是我喜欢的 R.A .费舍尔的一句话:

“在一个实验完成后咨询统计学家往往只是要求他进行一次事后检查。他也许可以说实验死于什么。”

这也适用于您继承的数据集——它的收集在您到达现场之前就已完成,因此它不是为满足您的需求而设计的。就你的预期目的而言,它可能已经过时了,你最多只能从中挤出一次尸检。我希望你已经绕着太阳走了足够多的路程,不要让这个激怒你。

继承的数据更容易获得,但更难信任。

如果你正处于抗议的边缘,认为有一些数据总比没有数据好,那就用“噪音”/谎言/干扰”来代替“数据,然后再试试你的句子。质量就是一切,如果您没有自己收集数据集,您就无法控制测量的内容和(可能更重要的)遗漏的内容。有些数据只比没有数据好倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当您被迫处理继承的数据时,您有五个主要问题需要担心:

  • 目的 —收集数据集的目的是否与您的目的相似?
  • 能力 —你相信收集数据的团队能够胜任测量工作吗?
  • 议程 —你相信数据集不会被其作者的偏见和议程所污染吗?(不要太快相信!)
  • 清晰 —是否有清晰的文档来防止你误解数据集的内容?
  • 处理 —你确定数据集没有被转换、扭曲或篡改吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用他人数据的建议

您应该如何处理继承的数据?就像你接触到的任何数据集一样,你的第一个动作,习惯——本能!—应该是 SYDD 。(“拆分你那该死的数据。”将任何未指定用于探索的数据放在安全的地方。**

证明文件

接下来,寻找关于继承数据集如何产生的文档是至关重要的。如果可能的话,试着找出并联系负责数据收集的罪犯,诶,项目成员,找出他们到底做了什么,并问他们澄清问题。如果与最初的团队协商是不可能的(或者如果他们忘记了他们做了什么),你将被迫依赖书面文档。(看到了吗?这也是为什么好的文档如此重要的另一个理由。)

如果你是一名分析师(不做统计推断),你可以采取一种轻量级的方法:找出有多少文档存在,有多详细,对数据质量是否值得你的时间投入进行一次直觉检查,然后只在你通常的探索性数据分析需要时使用文档( EDA )。然而,如果你认为你发现了足以激励决策者的东西,彻底检查文档,以确保你没有陷入明显的红鲱鱼。

如果你正在做 ML/AI ,你可以采取类似的方法,在粗略浏览文档之后,使用继承的数据进行训练,但是——看在上帝的份上!— 仔细验证根据您自己的原始数据测试您的模型。如果你没有彻底检查原始数据的表现,那就不算数。你对自己和他人都是一种威胁。请不要发射。

统计学家不会轻易放过任何事情。如果您正在从事一个数据驱动的决策项目,那么在处理继承的数据之前,您必须彻底了解文档。这听起来非常无聊,但这是你为了安全地使用不是你自己创建的数据而必须付出的代价。具体来说,确保您编写了自己的文档,详细说明了您对采样过程、潜在偏差以及生成您所继承的数据的实际操作的理解。

数据质量

当您研读文档时,请查找变量名的确切含义,并请一位分析师朋友帮助您做一些 EDA 工作,以确保数据不会完全混乱。例如,应该为正的事物没有负值,没有无差异的列,没有重复,没有矛盾,等等。如果你不确定要注意什么,你可能想从标准健康检查中查找一些关于数据质量的关键词:

是否涵盖了正确的主题?

  • 目的
  • 有用
  • 关联
  • 相似性
  • 综合性

是否存在准入障碍?

  • 有效性
  • 易接近
  • 清楚
  • 储存;储备

你能相信消息来源吗?

  • 能力
  • 可靠性
  • 可靠性
  • 议程
  • 偏见

你能相信你所看到的吗?

  • 准确(性)
  • 一致性
  • 有效期
  • 独特性
  • 处理

你能相信你看不见的东西吗?

  • 完全
  • 一致性
  • 及时
  • 潜伏

假设和警告

非常重要的一点是,你不要做出过早的假设——仅仅因为某样东西被称为“重量”并不意味着它就是你所认为的那样。它可以是 SI 单位或重要性权重或其他任何东西——人们将最糟糕的标签放在他们的数据集中,特别是如果他们在创建这些标签时没有考虑到其他数据科学家。

不要做不成熟的假设。

另外,不要相信任何人!即使文档中说“重量”是指以千克为单位的重量,也要记住抄写错误和其他测量错误是一回事。例如,如果该列声称包含权重,您可能会问自己:是否使用了秤?(或者只是眼球?我哪里知道?)尺度有多精确?有不止一个音阶吗?它们被仔细校准了吗?测量人员训练有素吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我自己量一下,谢谢。图片:来源

*当您在文档中回答这些问题时,您会惊讶地发现“*这是什么#$%@呢?”“这在现实生活中是如何实现的?”你能得到好的、精确的答案的问题。

这意味着你必须放弃吗?你可以继续……保持适当的谨慎和谦逊。

这意味着你必须放弃吗?不。你可以继续…带着适当的谨慎和谦逊。每次你发现一个问题,你都会义不容辞地对你被迫做出的关于在数据收集过程中到底发生了什么的猜测大加赞赏。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你会在以下事情上花费大量无聊的时间:

  • 陈述你被迫做出的假设。
  • 写下要包括在你最终报告附录中的警告注释。
  • 写下注意事项,警告决策者(和你的其他读者)由于潜在的数据问题,研究的结论需要降级。

你欠读者和决策者的道歉程度取决于你对类似数据的经验和专业知识。

简单地说:你对收集数据的真实环境了解得越多,你的假设就越不可信,你就越不需要在听众面前卑躬屈膝。

如果你是该领域的专家——例如,如果你是一名与流行病学家一起工作的经验丰富的生物统计学家,你比我更有资格对新冠肺炎数据集收集过程中发生的事情做出合理的假设。如果我厚颜无耻地在没有经验丰富的主题专家支持的情况下钻研这些数据,我将欠我自己和我的观众一份对我的无知的评估(以书面形式!)之后再继续。

“由于我们的项目团队没有参与规划研究或数据收集,我们可能遗漏了关键的背景,从而导致我们的结论无效。”

除了写下软化结论的笔记,每个有自尊的作者都应该记得附上这样一个总括性的继承数据警告:“由于我们的项目团队没有参与规划研究或数据收集,我们有可能遗漏了关键的上下文,从而导致我们的结论无效。”**

这与完美主义无关。试图用数据稍微增加你(不完美的)理解是完全合理的。只是不要忘记承认你有多少不知道的。

这与完美主义无关。试图用数据稍微增加你(不完美的)理解是完全合理的。请记住,多学一点并不等于什么都知道…不要忘记承认你有多少不知道。如果你做不到这一点,你会把任何信任你的人直接带下悬崖。

谦逊可能是媒体断奶的注意力持续时间的罗嗦,但过度自信的替代方案更糟糕。

感谢阅读!人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

喜欢作者?与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值