4 个必知的熊猫功能应用
用函数转换数据
对于数据科学家来说,Pandas 是一个必不可少的模块,尤其是对于 Pythonist 爱好者来说。它允许我们用几行代码来存储、探索和操作数据,从而使我们的生活变得更加轻松。但是,有时您希望使用函数来管理数据。出于这个原因,我试图写一篇文章向您介绍一些我们可以在函数中用于数据操作的属性。
下面是熊猫功能应用四大必看。
1 .管道()
熊猫鼓励我们使用方法链来操作我们的数据。如果你不知道什么是方法链接,让我用下面的例子给你演示一下。
import pandas as pd
import seaborn as snsmpg = sns.load_dataset('mpg')#Method Chaining
mpg.head().info()
方法链接是在同一行代码中执行的连续函数。我们使用链式方法来减少我们编写的行数,从而更快地执行函数。
如果我们想链接我们的函数呢?下面我们来看一个简单的例子。
#Function to extract the car first name and create a new column called car_first_namedef extract_car_first_name(df):
df['car_first_name'] = df['name'].str.split(' ').str.get(0)
return df#Function to add my_name after the car_first_name and create a new column called car_and_namedef add_car_my_name(df, my_name = None):
df['car_and_name'] = df['car_first_name'] + my_nameadd_car_my_name(extract_car_first_name(mpg), my_name = 'Cornellius')mpg.head()
正如我们所看到的,我们需要在另一个函数中执行我们的函数来产生结果。执行这些功能需要多长时间?
函数内函数的执行时间
执行一个功能代码中的一个功能需要 18ms。现在,让我向您介绍一个使用下面的pipe
属性的链接方法。
mpg.pipe(extract_car_first_name).pipe(add_car_my_name, my_name = 'Cornellius')
Pandas 对象中的方法链接需要使用pipe
属性。我们想要链接的每个函数都在pipe
属性中输入。我们可以看到结果类似于上面的例子。执行时间呢?
使用管道属性的方法链接的执行时间
使用pipe
属性进行方法链接只花了 6 毫秒。很清楚哪一个更快。看起来在执行时间上没有太大的不同,但是想象一下如果我们使用大数据。执行时间将发挥更大的作用。这就是为什么当我们对函数进行方法链接时,使用pipe
是明智的。
2 .应用()
之前我们讨论了整个数据集的链接方法,但是如果我们想按行或按列传播我们的函数呢?在这种情况下,我们可以使用apply
属性。让我用下面的例子来展示一下。
import numpy as np#Selecting only the numerical columns then applying mean function to each columnmpg.select_dtypes('number').apply(np.mean)
默认情况下,我们在apply
属性中输入的函数将被广播到每一列。结果是以列名作为索引、以函数返回值作为序列值的序列。
我们也可以创建自己的函数。事实上,这就是我们使用apply
属性的原因。这是因为我们可以实现函数来按列或行转换数据。让我给你看下面的例子。
#Creating a function that accepting the column and return each column mean divided by 2def mean_divided_by_2(col):
return (col.mean())/2mpg.select_dtypes('number').apply(mean_divided_by_2)
使用我自己的函数,我得到了每列平均值除以 2 的结果。如果您知道,我创建的函数接受一个名为 col 的参数,使用这个 col 参数,我通过使用mean
属性返回每一列的平均值。这意味着我们为apply
属性创建的函数将接受每列的一系列对象。这样,我们可以在自己的函数中使用任何一个系列方法。
行方式应用怎么样?是的,我们可以按行的方式将函数应用于数据集。下面让我用一个简单的例子来告诉你。
#Using print function and change the axis parameter to 1 in order for a row-wise applicationmpg.select_dtypes('number').apply(print, axis =1)
从结果中我们可以看到,我们正在打印每一行数据,其中每一行都被转换成一个 series 对象。序列索引是列名,序列值是每行中的值,序列名称是每行的索引名。
就像以前一样,我们可以创建自己的函数。下面让我给你看一个例子。
#Creating a classification function. If the mpg is below 18 and the model_year below 75 it would return Old-School, else it would return New-Schooldef mpg_classification(cols):
if cols['mpg'] <18 and cols['model_year'] <75:
return 'Old-School'
else:
return 'New-School'#Creating a new column called Classification by using the mpg_classification function input on apply attributempg['Classification'] = mpg.apply(mpg_classification, axis = 1)mpg.head()
如您所见,我们现在有了一个名为“分类”的新列。这些值基于我们在apply
属性中使用的 mpg_classification 函数。在行方式的情况下,我们在每一行中迭代,所以我们输入的函数在每一行中都被应用。每次迭代都是一个系列对象,由行值组成,索引是列名。在我上面的函数中,cols 参数将由每行的 series 对象填充;这就是为什么我在 cols 参数中指定了我使用的列(cols[‘mpg’]和 cols[‘model_year’])。
3.agg()
aggregation
或agg
允许以一种简洁的方式表达可能的多个聚合操作。对于不知道什么是聚合的人来说,让我用下面的例子来说明一下。
mpg.agg(np.mean)
使用一个函数的聚合类似于我们之前使用的apply
属性。它对每一列应用一个函数并产生一个系列对象。agg
的特别之处在于它可以实现多种功能。
#Instead of function, agg could receive the string of the basic statistic function. Additionaly, we could implement our own function here as well. If we have multiple function, we put it in the list.mpg.agg(['mean', 'std',mean_divided_by_2])
使用多个函数作为输入,我们得到一个数据框对象。agg
属性的伟大之处在于该函数只适用于有效对象。如果我们输入的函数不能接受某些数据类型,它将被忽略。
将 dictionary 对象传递给agg
属性允许我们指定哪个函数应用于哪个列。
#For example, I only use mpg and acceleration column. If we pass dictionary to the agg attribute, we need to specify the function we want to every column.mpg[['mpg', 'acceleration']].agg({'mpg': ['mean',mean_divided_by_2], 'acceleration': 'std'})
4.应用地图()
我们之前学习的所有属性都是基于整个数据集或列/行的。如果我们只想将函数应用于每个元素或值呢?在这种情况下,我们将使用applymap
属性。下面让我给你看一个例子。
#You could input a lambda function as well. Here I create a function to transform each value into string object and return the length of the stringmpg.applymap(lambda x: len(str(x)))
结果是一个数据框对象,其中我们输入到applymap
的函数被应用到数据集中的每个值。我们还为系列对象设置了map
属性,它相当于数据框的applymap
属性。
#Using map attribute on the series objectmpg['name'].apply(lambda x: len(str(x)))
结论
在本文中,我向您展示了四个熊猫函数应用程序,它们被证明在我们的日常数据科学工作中非常有用。它们是:
- 管
- 应用
- 集料
- 应用地图
希望有帮助!
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
成为优秀分析师可以做的 4 件非技术性的事情
不是你做什么,而是你怎么做
当谈到作为数据分析分析师的职业发展时,非技术或“软”技能可能在你的优先列表中相当低。毕竟,想到一个分析师职位,首先想到的是技术技能。你可能只是想利用你的技术技能来回答商业问题或制造产品,从而获得经验。你不会真的想做更多的事情。
然而,这个职位(或任何职位)对非技术性技能的需求也非常重要。作为一名分析师,您在组织的有效性中扮演着至关重要的角色。但是如果你不能有效地交流你的工作,或者问一些能引导你找到正确答案的问题,那么你会发现你的硬技能也会落后。
软技能很重要,不仅因为它们能帮助你更好地完成工作,还因为它们能帮助你推进职业发展。
在这篇文章中,我们将探讨成为一名有效的分析师可以做的 4 件非技术性的事情。这些东西将与你的技术能力相结合,使你成为最有效的分析师。
图片来自 Unsplash
1.有效沟通
我们将从对分析师来说可能是最重要的软技能——沟通开始。在你的技术能力之外,你可能会发现沟通是你做任何事情的基础。
无论是与他人分享你的工作,提出建议,还是仅仅出于尊重和友好,沟通对于融入任何工作环境都是必不可少的。作为一名分析师,这变得尤其重要,因为你的工作本质上是技术性的,所以知道如何向他人传达你的发现对于确保他们知道你所贡献的价值是非常重要的。
归根结底,人们希望和自己喜欢的人一起工作。真的就这么简单。融入一个组织有时和你的工作质量一样重要,而沟通是你融入的一个重要部分。
为了在职业生涯中前进,你需要尊重,你需要善良,你需要与他人合作愉快。
图片来自 Unsplash
2.解释你在做什么
分析师应该采取的下一个重要步骤是确保他们解释他们在做什么。你可以认为这是沟通技巧的一个分支。一个简单的事实是,大多数分析师所做的工作并不为组织中的其他人所理解。因此,一个好的分析师会尽最大努力让其他人知道他们在做什么,并确保详细记录他们的工作。
高效完成工作固然重要,但让你的同事和经理知道你在做什么也很重要。这会让人们对你的表现满意,也会增加你晋升的机会。
作为一名分析师,你的工作是技术性的。你的技能允许你解读别人无法解读的领域。然而,你的工作仍然意味着帮助组织实现某些目标,并朝着最终目标努力。这就是为什么你需要知道如何有效地向组织的其他部门分享你的发现。
有效的翻译意味着你需要知道如何把你做的复杂的事情用任何人都能理解的术语表达出来。
图片来自 Unsplash
3.开诚布公,乐于助人
作为一名分析师,您负责组织中其他人可能不了解的领域。人们可能会带着他们不知道如何回答的问题来找你。你必须开诚布公,乐于助人。即使答案对你来说很简单,你也应该始终确信你愿意以非居高临下的方式提供帮助。
分析师需要与组织中的其他人和谐地工作,而你愿意帮助他人解决他们的问题是这种和谐的主要部分。因此,以开放的心态对待任何问题,并认识到你在组织中的角色有时是帮助澄清困惑。
4.提问
在任何角色中,你能学会做的最重要的事情之一就是提问。通常,人们不敢问问题,因为他们觉得这代表他们不理解自己的任务,或者他们对自己的角色感到困惑。
现实情况是,任何经理最关心的是你能否正确完成工作。所以你需要学会,当你有一个你认为会决定你在某项任务上表现的问题时,不要犹豫。
当然,你不想成为问不必要的问题的人。减少你需要问的问题数量的一个好方法是认真听并做笔记。
携带笔记本是一个很好的策略,可以确保你记住所有重要的信息,同时也向你的同事和经理表明你在认真对待你的任务。一旦他们知道这一点,他们会非常乐意帮助你解决你可能有的任何问题。
结论
如你所见,作为一名分析师,软技能对你的职业发展非常重要。你可以认为沟通是你所有软技能的基础。知道如何有效地与他人沟通会提高你工作的各个方面。这将使其他人更有效地获得你的发现,并有助于整个组织。
掌握这些技能并使之成为习惯是很重要的。由于分析师职位的技术性质,许多人并不总是花足够的时间学习软技能。作为一名分析师,你应该每天花时间来提高这些技能。这可能需要走出你的舒适区,但是你会发现付出额外的努力是值得的。
4 熊猫功能重塑餐桌布局
根据你的需求改造你的熊猫桌
在处理数据时,有时您需要以您需要的方式转换您的表。这可能是因为您需要更清楚地查看您的数据,或者您需要将您的数据转换成更好的形式。
无论如何,本文将重点介绍四个不同的函数,您可以使用它们来转换您的 Pandas 数据框。让我们开始吧。
1 .排序值
简单而有用。这种优雅的方法是熊猫武器库中最有用的方法之一。仅仅从名字上,你就能猜出这个函数是做什么的。是的,这个函数根据特定列中的值对表进行排序。
让我用一个数据集的例子来说明。
import pandas as pd
import seaborn as sns#Loading dataset example
tips = sns.load_dataset('tips')
tips.head()
原始提示表
以上是我们的数据集示例。假设我想根据已排序的 total_bill 列重新调整我的表布局。我可以用下面的代码来做。
tips.sort_values('total_bill').head()
基于 total_bill 列的排序提示表
就像这样,我们根据 total_bill 列对表进行升序排序。如果您想基于大小列对列进行排序,然后以降序方式提示列,又会如何呢?用下面的代码也可以做到这一点。
#We put our columns in the list and input False value in the ascending parameter to change the sorting directiontips.sort_values(['size', 'tip'], ascending = False).head()
根据大小和提示列对表进行降序排序
现在我们首先按照 size 列对表进行排序,然后按照 tip 列降序排序。
2 .枢轴
Pivot 是一种基于列值从数据框重塑数据(生成“pivot”表)的方法。它使用指定索引/列中的唯一值来形成结果数据帧的轴。
我们所做的枢轴的另一个名称是**长到宽的桌子。**为了说明原因,让我们用 tips 数据集来尝试一下。
#I specify the as the column and the both total_bill and tip column as the valuetips.pivot(columns = 'sex', values = ['total_bill', 'tip'])
如您所见,我们现在将表布局更改为数据透视表。性别列中的前一个类现在变成了它们各自的列,并且在它们的位置上用数值填充了值。
NaN 值,因为在原始数据的该行中不存在任何值。例如,索引 0 在男性列中包含 NaN 发生这种情况是因为在行索引 0 中,性别值是女性。看下图就知道了。
3 .数据透视表 _ 表格
熊猫数据框对象中有一个方法。与 pivot 方法相比有什么不同?我们就试试吧。
tips.pivot_table(columns = 'sex', values = ['total_bill', 'tip'])
现在,结果与 pivot 方法相比明显不同。这是因为在 pivot_table 函数中,我们得到的不是包含每个数据值的行,而是聚合值。
默认情况下,聚合函数是 mean(平均值);这就是为什么在上面的数据透视表中,值是每个组合的平均值。
我们可以尝试在我们的数据透视表中有另外几个聚合函数。
tips.pivot_table(columns = 'sex', values = ['total_bill', 'tip'], aggfunc = ['mean', 'std', 'median'])
在上面的数据透视表中,我们添加了 mean 之外的另一个聚合函数;标准差和中位数。它创建了一个附加的多级数据透视表,其中包含聚合函数的所有值。
如果您想要创建一个更详细的分离和汇总值,我们可以用下面的代码来完成。
#Specificed the size column as the index and margins as True to get the total summarytips.pivot_table(columns = 'sex', values = ['total_bill', 'tip'], aggfunc = ['mean', 'std', 'median'], index = 'size',
margins = True)
上面我们得到了我们需要的详细的数据透视表。
4.熔化
熔化是枢轴功能的逆过程。在这个函数中,我们创建了一个从宽到长的表。或者换句话说,我们把桌子拆了。让我们试一下这个函数的功能。
tips.melt(id_vars = 'tip', value_vars = 'sex')
就这样,我们得到了融化的桌子。在上面的非透视表中,我们得到三列;提示、变量和值列。提示列是提示列的原始值,可变列值是原始列名,值列值是类类别或可变列值中的值。
结论
在本文中,我向您展示了四个熊猫函数来重塑表格布局:
- 排序值
- 在枢轴上转动
- 数据透视表 _ 表格
- 熔化
希望有帮助!
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
4 你应该知道的熊猫绘图功能
一些你可能从来不知道的熊猫的简单策划
艾萨克·史密斯在 Unsplash 上拍摄的照片
对于数据科学家来说,Pandas 是一个强大的软件包。我们使用熊猫有很多原因,例如数据争论、数据清理和数据操作。虽然,有一种关于熊猫包装的方法很少被提及,那就是数据绘制。
数据绘图,顾名思义,是将数据绘制成一些图形或图表以使数据可视化的过程。虽然我们有更好的可视化软件包,但是一些方法在熊猫绘图 API 中是可用的。
让我们来看看我选择的几个精选方法。
1.拉德维兹
RadViz 是一种将 N 维数据集可视化为 2D 图的方法。当我们拥有超过 3 维(特征)数据或更多数据时,问题是我们不能可视化它,但是 RadViz 允许它发生。
据 Pandas 称,radviz 允许我们将一个 N 维数据集投影到 2D 空间,其中每个维度的影响都可以被解释为所有维度重要性之间的平衡。用一个更简单的术语来说,这意味着我们可以用一种原始的方式把多维数据投射到 2D 空间。
让我们试着在一个样本数据集中使用这个函数。
#RadViz example
import pandas as pd
import seaborn as sns#To use the pd.plotting.radviz, you need a multidimensional data set with all numerical columns but one as the class column (should be categorical).mpg = sns.load_dataset('mpg')
**pd.plotting.radviz(mpg.drop(['name'], axis =1), 'origin')**
RadViz 结果
以上是 RadViz 函数的结果,但是你会如何解读这个情节呢?
因此,数据帧中的每个系列都表示为一个圆形上均匀分布的切片。只看上面的例子,有一个圆圈,上面有系列名称。
然后,根据每个系列的值,将每个数据点绘制在圆圈中。数据框中高度相关的系列更靠近单位圆。在本例中,我们可以看到日本和欧洲的汽车数据更接近车型年份,而美国汽车更接近排量。这意味着日本和欧洲汽车最有可能与年款相关,而美国汽车与排量相关。
如果你想了解更多关于 RadViz 的信息,你可以点击查看论文。
2.自举图
根据 Pandas 的说法, bootstrap plot 用于通过依赖替换随机抽样来估计统计数据的不确定性。更简单地说,通过替换(你可以多次采样相同的数据)对数据进行重采样,试图确定基础统计中的不确定性,如均值和中值。你可以在这里阅读更多关于 bootstrap 的信息。
boostrap_plot 函数将为给定大小的给定数量的样本生成均值、中值和中间范围统计的自举图。让我们通过一个示例数据集来尝试使用该函数。
例如,我有 mpg 数据集,并且已经有关于 mpg 特征数据的信息。
mpg['mpg'].describe()
我们可以看到平均每加仑跑 23.51 英里,中位数是 23 英里。虽然这只是真实世界数据的快照。总体中的值实际上是多少是未知的,这就是为什么我们可以用 bootstrap 方法来测量不确定性。
#bootstrap_plot examplepd.plotting.bootstrap_plot(mpg['mpg'],size = 50 , samples = 500)
以上是 bootstap_plot 函数的结果示例。请注意,结果可能与示例不同,因为它依赖于随机重采样。
我们可以在第一组图(第一行)中看到采样结果,其中 x 轴是重复,y 轴是统计数据。第二组是统计分布图(平均值、中间值和中间值)。
以平均值为例,大多数结果在 23 左右,但也可能在 22.5 到 25 之间(或多或少)。这在现实世界中设定了不确定性,即人口中的平均值可能在 22.5 和 25 之间。请注意,有一种方法可以通过取位置 2.5%和 97.5%分位数(95%置信)的值来估计不确定性,尽管这仍然取决于您的判断。
3.滞后 _ 绘图
滞后图是一个时间序列的散点图,同样的数据滞后。滞后本身是一个固定量的流逝时间;例如,滞后 1 是具有 1 天时间滞后的第 1 天(Y1)(Y1+1 或 Y2)。
滞后图用于检验时间序列数据是否随机,以及数据之间是否相关。随机数据不应该有任何可识别的模式,如线性。尽管如此,我们为什么要为随机性或相关性而烦恼呢?这是因为许多时间序列模型是基于线性回归的,并且一个假设是没有相关性(具体来说就是没有自相关)。
让我们用一个例子数据来试试。在这种情况下,我将使用一个名为 yahoo_historical 的特定包从 Yahoo Finance 中删除股票数据。
pip install yahoo_historical
有了这个包,我们可以废弃特定的股票数据历史。让我们试一试。
from yahoo_historical import Fetcher#We would scrap the Apple stock data. I would take the data between 1 January 2007 to 1 January 2017
data = Fetcher("AAPL", [2007,1,1], [2017,1,1])
apple_df = data.getHistorical()#Set the date as the index
apple_df['Date'] = pd.to_datetime(apple_df['Date'])
apple_df = apple_df.set_index('Date')
上面是我们以日期为索引的苹果股票数据集。我们可以尝试用一种简单的方法来绘制数据,以观察随时间变化的模式。
apple_df['Adj Close'].plot()
我们可以看到 Adj Close 随着时间的推移而增加,但数据本身是否显示出任何滞后模式?在这种情况下,我们将使用 lag_plot。
#Try lag 1 day
pd.plotting.lag_plot(apple_df['Adj Close'], lag = 1)
正如我们在上面的图中看到的,它几乎是线性的。这意味着每日的密切相关。这是意料之中的,因为股票的每日价格每天不会有太大的变化。
每周一次怎么样?让我们试着画出来
#The data only consist of work days, so one week is 5 dayspd.plotting.lag_plot(apple_df['Adj Close'], lag = 5)
我们可以看到模式类似于滞后 1 图。365 天怎么样?会有什么不同吗?
pd.plotting.lag_plot(apple_df['Adj Close'], lag = 365)
我们现在可以看到模式变得更加随机,尽管非线性模式仍然存在。
4.散布矩阵
scatter_matrix 顾名思义;它创建了一个散点图矩阵。我们马上用一个例子来试试。
import matplotlib.pyplot as plttips = sns.load_dataset('tips')
pd.plotting.scatter_matrix(tips, figsize = (8,8))
plt.show()
我们可以看到,scatter_matrix 函数自动检测传递给该函数的数据框中的数字特征,并创建散点图的矩阵。
在上面的示例中,两个数字特征之间绘制在一起以创建散点图(total_bill 和大小、total_bill 和小费以及小费和大小)。而对角线部分是数字特征的直方图。
这是一个简单的函数,但是足够强大,因为我们可以通过一行代码获得很多信息。
结论
在这里,我向你展示了 4 种不同的熊猫绘图功能,你应该知道,其中包括:
- 拉德维兹
- 自举图
- 滞后 _ 绘图
- 散布矩阵
希望有帮助!
如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。
如果您没有订阅为中等会员,请考虑通过我的推荐订阅。
大多数人不知道的 4 个熊猫戏法
PublicDomainPictures 在 Pixabay 拍摄的照片
熊猫的一些不常见但有趣的方法可以节省我们的时间
如果你是数据分析师或数据科学家,你一定知道 Python 中的 Pandas 库,它已经成为 Python 中数据角力/清理工具的标准。然而,熊猫有一些小技巧,我打赌你可能不知道所有的技巧。
在这篇文章中,我将分享一些我知道的熊猫技巧。我相信它们会加快我们的工作,有时会让我们的生活更轻松。现在我们应该开始了!
1.从剪贴板创建数据帧
好吧,你一定知道熊猫可以很容易的从 CSV,JSON 甚至直接从数据库中使用 SQLAlchemy 读取,但是你知道熊猫也可以从我们操作系统的剪贴板中读取吗?
假设我们有一个包含多个数据表的 Excel 文件。现在,我们希望用 Python 处理一个表中的部分数据。为了实现这一点,我们通常会做些什么?
- 从数据表中复制我们需要用 Python 处理的数据。
- 将其粘贴到另一个数据表中。
- 将当前工作表保存为 CSV 文件。
- 获取新 CSV 文件的路径。
- 转到 Python,使用
pd.read_csv('path/to/csv/file')
将文件读入 Pandas 数据框。
肯定有更简单的方法,那就是pd.read_clipboard()
。
- 复制您需要的数据区域。
- 去 Python,用
pd.read_clipboard()
。
如上图,多简单啊!如果您只是想将一些数据加载到 Pandas 中,则不需要有单独的 CSV 或 Excel 文件。
这个函数也有更多的技巧。例如,当我们有日期格式的数据时,它可能无法正确加载,如下所示。
诀窍是让熊猫知道哪一列是需要解析的日期格式。
df = pd.read_clipboard(parse_dates=['dob'])
2.使用测试方法生成虚拟数据
照片由 pszmajduch 在 Pixabay 上拍摄
有时我们可能想生成一些样本数据帧。最常见的方法可能是使用 NumPy 生成一个带有随机值的数组,然后从该数组生成数据帧。
我会说,如果我们需要数据具有某种分布,比如正态分布,我们就必须使用 Numpy。但是,很多时候我们可能并不关心数据是否正态分布,我们只是希望有一些数据可以随便玩玩。在这种情况下,有一种更简单的方法。即使用pandas.util.testing
包生成样本数据帧。
pd.util.testing.makeDataFrame()
数据框的索引将使用随机字符串生成。默认情况下,将有 30 行 4 列。
如果我们需要一定数量的行和列,我们可以将testing.N
定义为行数,将testing.K
定义为列数。
pd.util.testing.N = 10
pd.util.testing.K = 5
pd.util.testing.makeDataFrame()
3.将数据帧输出到压缩文件
你要知道我们可以很容易的将一个数据帧输出到一个文件中,比如df.to_csv()
、df.to_json()
等等。但有时,我们可能希望压缩文件以节省磁盘空间或用于其他目的。
举个例子,作为一个数据工程师,我确实满足了这样一个要求,就是把熊猫数据帧输出成 CSV 文件,传输到远程服务器。为了节省空间和带宽,文件需要在发送前压缩。
通常,典型的解决方案可能是在正在使用的调度工具(如 Airflow 或 Oozie)中增加一个步骤。但是我们知道我们可以直接让熊猫输出一个压缩文件。因此,解决方案会更简洁,步骤更少,也更简单。
让我们使用技巧№2 生成一个随机数据帧:)
pd.util.testing.N = 100000
pd.util.testing.K = 5
df = pd.util.testing.makeDataFrame()
在这种情况下,我们只需要一个数据框,其中的值完全不重要。
现在,让我们将数据帧保存到 CSV 文件中,并检查其大小。
import osdf.to_csv('sample.csv')os.path.getsize('sample.csv')
然后,我们可以测试将相同的数据帧输出到一个压缩文件中,并检查文件的大小。
df.to_csv('sample.csv.gz', compression='gzip')os.path.getsize('sample.csv.gz')
我们可以看到压缩后的文件不到正常 CSV 文件的一半。
请注意,这可能不是一个好例子,因为在我们的随机数据框中没有任何重复的值。在实践中,如果我们有任何分类值,压缩率可以非常高!
顺便说一句,也许你在想我要说的事情。可以,熊猫可以直接把压缩文件读回一个数据帧。不需要在文件系统中解压。
df = pd.read_csv('sample.csv.gz', compression='gzip', index_col=0)
我更喜欢用gzip
,因为它默认存在于大多数 Linux 系统中。熊猫也支持更多的压缩格式,比如“zip”和“bz2”。
4.从多列获取日期时间
相信你在熊猫里一定用过pd.to_datetime()
方法把某种字符串转换成 DateTime 格式。我们通常将这种方法与格式字符串一起使用,比如%Y%m%d
。
但是,有时我们可能会使用以下类型的数据框作为原始数据。
df = pd.DataFrame({
'year': np.arange(2000, 2012),
'month': np.arange(1, 13),
'day': np.arange(1, 13),
'value': np.random.randn(12)
})
在数据框中将年、月和日作为单独的列并不罕见。事实上,我们可以使用pd.to_dateframe()
一步将它们转换成日期时间列。
df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
多简单啊!
摘要
照片由 Engin_Akyurt 在 Pixabay 上拍摄
在本文中,我分享了一些我认为在 Python Pandas 库中非常有用的技巧。我会说,这些小技巧当然不是我们必须知道的要点。但是了解它们有时可以节省我们生活中的时间。
我会继续为 Python 寻找更多有趣的东西。请关注我的个人资料。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)
走向数据驱动文化的 4 个悖论
来源:娜塔莉亚·基塞列娃经由分析师的漫画 (CC BY-NC-ND)
构建数据驱动系统时,分析师需要具备哪些技能?
M 通过 KPI 管理企业,根据运营数据和预测做出决策,在人工智能的帮助下找到商业见解是每个经理和企业主的梦想。然而,构建这样一个系统并不容易——有一个完整的 IT 服务动物园,每个都需要支持。最终,一切都归结到人身上,那些知道如何“与机器交流”并将工作结果转化为商业语言的数据分析师。
将大数据转化为商业解决方案(一种信息产品)的过程包括几个阶段,需要不同人员的团队合作。甚至还有这样一个名词——数据驱动型组织。这是一家管理层根据分析做出决策的公司,而不仅仅是经验、意见或直觉。
为了成为这样的公司,仅仅雇佣一个顶尖的程序员团队或购买一个先进的 CRM 系统是不够的,你需要改变企业沟通的文化,了解这些过程的参与者的心理。
分析师不一定是一个职位,它是一个角色,最重要的是:许多员工参与管理报告的编写。但是,客户和经理经常从他们的分析师那里收到大量的表格和幻灯片,而不是适合决策的信息。
在我整合公司报告系统的 10 年中,我观察到许多期望与现实不符的情况,并在本文中进行了描述。这将有助于你了解你的公司在沟通方面存在哪些缺陷,以及如何消除你走向数据驱动文化的障碍。
3 种类型的分析师
处理数据和报告的人员可以分为三组:**分析师、图片人员和技术人员。**他们对数据、数据处理和结果有不同的角色、任务和要求。他们都使用不同的方法共同工作。这就是他们工作态度的矛盾之处。
- 分析师是寻找特定问题答案的金融专家、经济学家和营销专家。为此,他们进行研究,收集信息,并得出结论。他们的任务是分析数据,确定因果关系,研究各种因素对业务流程的影响。例如,一位经济学家确定了影响成本增长的因素,而一位网络分析师从搜索查询关键词中构建了网站的语义核心。
- 技术人员是数据库开发人员、数学家和数据科学专家。他们衍生信息处理算法,设计数据仓库,并自动生成报告。对他们来说重要的是系统是如何工作的,是什么影响了它,如何让这个过程不出错不中断,也就是创造一个完美的算法。
- 图片人制作最终产品,知道如何把表格变成清晰的图表、幻灯片甚至仪表盘。通常,他们不担任设计师的职位,而是了解业务需要什么并能为设计师和开发人员设定任务的经理。一个分析师也可以扮演一个形象化的角色,在可用性的类别中思考,并且有一种美感。
他们每个人都认为他们那部分工作是最重要的。分析师认为是寻找问题答案的过程,图片人认为是呈现的美感和可及性,技术人员认为是模型和算法。结果是对最终客户来说不明显的矛盾。
悖论 1。分析师不需要可视化
分析师的完美工具是 Excel 电子表格、OLAP 立方体或可以通过 Qlik 或 Power BI 连接的数据展示。对他们来说,结果是几个表或数组的交集。他们感到舒适和方便,他们理解他们。他们把一切都切成薄片,用细胞组织起来,这不是没有原因的。
简单的图表或演示幻灯片对分析师来说并不有趣,对他们来说,它们只是“美丽的图片”,如果不沉浸在上下文中,这些图片毫无用处。毕竟你总是可以钻研表格,刨根问底的。他们理解仪表板的价值,但使它们过于复杂,许多书签过滤器占据了屏幕的一半。
只有分析师才能理解的多过滤器仪表板
这是一个常见的问题—
分析师不知道如何授权访问信息。
他们为自己建立了不同的报告,他们将根据您的要求收集数据并准备必要的样本。但这样一来,它们自己就成了汇总表的构造者,封闭了自身的信息流。这样的员工会花半天时间创建相同的报告,只是从不同的角度,抱怨他们没有足够的时间进行分析。
悖论二。图片人不关心数据质量
我说的‘图片人’,指的是视觉思维发达的分析师,而不是设计师。他们塑造分析结果,在追求和谐和美学的过程中,信息的可靠性对他们来说变得无足轻重。那么一个喜欢图片的人可能会错过一些重要的细节,而这些细节是分析研究人员肯定会注意的。例如,在这个因素分析图中,颜色选择不正确。
实际工资总额偏离计划工资总额的因素
根据图表的想法,那些带负号的因素用红色表示,增加的用绿色表示。但是在这里我们分析工资超支的原因,减少、节约是好的,相反,费用的增加应该被标上红色。
但是画这幅图的人并没有注意上下文,因为这幅图本身看起来清晰而有逻辑。
悖论三。程序员不关心商业结果
数据科学家,机器学习者,这听起来很酷,但事实上这是数学家的职业,一个与算法打交道的程序员。对他们来说,技术方面很重要,机器学习的模型所描述的关系的性质,但如何进一步处理这些信息并不困扰他们。他们会为你建立一个理想员工职业能力的模型,但不会告诉你如何找到一个,如何管理它们。
我并不是批评开发人员关心数据库结构的完整性,而不是如何增加客户忠诚度。相反,我说的是这样一个事实,即期望从他们那里获得现成的商业发展解决方案是幼稚的。
如果可视化不是一种数据库通信方案,程序员也不会感兴趣。他们也不对数据质量负责。
他们的职责范围是稳定工作、系统性能和无错误。
不过,这也非常重要。
悖论 4。业务需要文本
在文章的开始,我谈到了三个角色,但是在这个过程中还有另一个参与者——业务客户,决策者。最令人惊讶的是,他们不关心可视化,分析研究的深度,或算法的可行性。
业务需要结论、明确定义的解决方案或策略选项,以及对结果的预测。理想情况下,他们需要一个坚实、清晰的文本,包含简单的句子,没有任何分词从句:什么价格将确保最大的销售量,为什么在这个特定项目上的投资会有回报。
当然,如果给一位高管提供一份分析报告的直截了当的文本,他们不会高兴。
他们需要文本、可视化和结论,都在一个屏幕上。
我开始看到越来越多的仪表板包含一个带有书面结论的模块,甚至还有自动从仪表板生成文本的双系统插件。
管理仪表板,带有一组书面结论
起初,我认为这样的需求是异想天开的,但是现在我承认这是有效性控制的一个额外阶段,在这个阶段,分析师可以理解结论。这不是关于从表格到图表的手工复制数据,而是关于理解偏离计划的原因,关于会议的准备。
下一步是什么?
因此,分析师寻找问题的答案并构建数据,图片人员创建和谐的图片,技术人员推导算法,并监控他们工作的连续性。企业等待简单明了的结论,以便做出具体的决策。
你不应该期望一个专家,即使他们和你有相同的观点和看法,来建立你的端到端的业务流程分析系统。这里你需要团队合作,人们互相补充,正确理解顾客的期望。
如果你从一个设计师那里订购了一个房子或公寓的项目,那么期望他们也会为交流设计一个布局是天真的。同样,去理发店时,你也不希望修指甲或背部按摩。虽然你可以在综合大楼里得到所有这些服务,但前者是在建筑公司,后者是在美容院。
你可以争辩说雇佣一整个团队的各种各样的分析师太贵了,从系统集成商那里订购一个项目甚至更贵。当然,如果您有一个简单的任务来优化当前流程或执行一个修饰性的报告刷新,那么您可以自行处理。只是不会是那种数字化转型,向数据驱动文化的过渡。
有一个选项,你可以在不增加人力资源的情况下得到结果。为了达到平衡,你必须让管理团队参与进来,让他们沉浸在操作活动、过程度量中,扮演技术人员的角色,或者至少是分析师、研究人员或图片人员。当主管成为首席分析师和数据驱动决策文化的领导者时,这是“最正确”的选择。
数据可视化的 4 大支柱:分布、关系、组合和比较
在 Unsplash 上由 Kelli Tungay 拍摄的照片
数据可视化的原理
几个世纪前,科学家们没有照相机来拍摄遥远的星系或显微镜下的微小细菌。绘画是交流观察、想法甚至理论的主要媒介。事实上,绘制抽象概念和物体的能力是科学家的一项基本技能(查看威廉·普莱费尔18 世纪的收藏)。
显示苏格兰进出口的条形图(威廉·普莱费尔:公共领域)
现在依然如此。我们不能拍摄分布变量或它们的相关性。相反,我们通过现代工具和技术,通过绘图和插图(也称为数据可视化)来传达它们。
数据集包含一个或多个变量,我们可以以多种方式可视化每个变量及其与其他变量的交互。选择哪种可视化取决于数据和我们想要交流的信息类型。然而,从根本上说,它们有四种不同的类型:
- 单变量的分布
- 两个变量之间的关系
- 单个或多个变量的组成
- 不同类别/个人之间的比较
在本文中,我将通过插图来分解数据可视化的这 4 个基石。
1)分配
统计学和数据科学中的一个重要概念是分布。分布一般指一个结果发生的概率。在 100 次抛硬币的分配中,有多少次是正面,多少次是反面?像这样的频率分布用直方图或曲线表示。
下面是游泳课上学生身高分布的示意图。x 轴显示不同的身高类别,y 轴显示每个类别的学生人数。
学生身高频率分布(图:作者)
这是一个频率分布。但还有另一种分布——更广为人知的是分散——它显示了一个变量相对于其中心趋势是如何分散/扩散的。
离差的一个经典表示是箱线图。
分解箱线图以显示变量值的离差
上面的箱线图代表了几年来周六飞机乘客数量的分布。这张图揭示了如此多的信息——周六乘客的平均/中值数量、最小值和最大值、异常值等等!
**2)**关系
树木在早年随着年龄的增长而长高。这是两个变量之间的关系——身高和年龄。
身高= f(年龄)
在另一个例子中,房子的价格取决于床的数量、浴室的数量、位置、面积等等。这是一个因变量和许多解释变量之间的关系。
价格= f(床位、浴室、位置、面积)
如果你只把数据集看成数字,就没有办法识别这些关系。但事实上,你可以,不需要进入复杂的统计分析,借助于一个好的可视化。
一个班学生年龄与身高的关系
**3)**比较
数据可视化的第三个基石是*比较。*这种可视化材料比较数据集内的多个变量或单个变量内的多个类别。
让我们来看看下面两张图片:
展示对比的视觉效果
左边的一个在条形图上比较了两组观察结果(科学家和律师)之间的变量(工资)。右边的面板也是一个比较图表——在这种情况下,比较两组(英国和加拿大)之间的变量(GDP ),但沿着时间维度。
**4)**作文
你听说过堆积条形图吗?但我相信你知道什么是饼状图。
这些图表的目的是以绝对数和标准化形式(如百分比)显示一个或多个变量的构成。
合成图是一些老派的可视化技术,现在的用例有限(你真的需要一个饼图来显示黄色 10%和红色 15%的合成吗?).尽管如此,有时他们能以一种视觉上的美感和熟悉的、复古的方式呈现信息。
合成图:堆积条形图(左)和饼图(右)
一锤定音
本文的目的是讨论数据可视化的四个基石:分布、关系、比较和组合。在学习可视化工具和技术之前,理解可视化的目的是什么以及你想要传达什么信息是很重要的。在以后的文章中,我将会写关于 python 和 R 编程语言中的特定工具,包括matplotlib
、seabon
和ggplot2
。敬请期待!
[注:除了作者绘制的第一幅图之外,所有图]
4 个预训练的 CNN 模型,用于具有迁移学习的计算机视觉
深度学习案例研究
使用最先进的预训练神经网络模型,通过迁移学习解决计算机视觉问题
在我们开始之前,如果你正在阅读这篇文章,我确信我们有着相似的兴趣,并且现在/将来会从事相似的行业。那么我们就通过 Linkedin 来连线吧!请不要犹豫发送联系请求!Orhan g . yaln—Linkedin
图一。迁移学习如何工作(图片由作者提供)
如果你一直在尝试建立高精度的机器学习模型;但从未尝试过迁移学习,这篇文章将改变你的生活。至少,它做到了我的!
我们大多数人已经尝试了几个机器学习教程来掌握神经网络的基础知识。这些教程非常有助于理解人工神经网络的基础知识,例如递归神经网络、卷积神经网络、 GANs 和自动编码器。但是,它们的主要功能是让您为现实世界的实现做好准备。
现在,如果你计划建立一个利用深度学习的人工智能系统,你要么(I)必须有非常大的培训预算和优秀的人工智能研究人员供你使用,要么(ii)必须从迁移学习中受益。
什么是迁移学习?
迁移学习是机器学习和人工智能的一个分支,旨在将从一个任务(源任务)获得的知识应用到一个不同但相似的任务(目标任务)。
例如,在学习维基百科文本分类时获得的知识可以用来解决法律文本分类问题。另一个例子是使用在学习分类汽车时获得的知识来识别天空中的鸟。正如你所看到的,这些例子之间是有联系的。我们没有在鸟类检测上使用文本分类模型。
总之,迁移学习是一个 让你不必重新发明轮子 并帮助你在很短的时间内构建人工智能应用的领域。
图二。不要重新发明轮子,转移现有的知识(照片由乔恩·卡塔赫纳在 Unsplash 上拍摄)
迁移学习的历史
为了展示迁移学习的力量,我们可以引用吴恩达的话:
迁移学习的历史可以追溯到 1993 年。在她的论文中,Lorien Pratt 打开了潘多拉的盒子,向世界展示了迁移学习的潜力。1997 年 7 月,《机器学习》杂志发表了一篇专刊进行转移学习的论文。随着该领域的发展,多任务学习等相关主题也被纳入迁移学习领域。学会学习是这方面的先驱书籍之一。今天,迁移学习是科技企业家构建新的人工智能解决方案和研究人员推动机器学习前沿的强大来源。
图 3。吴恩达对机器学习子领域商业成功的期望(图片由作者提供)
迁移学习是如何工作的?
实现迁移学习有三个要求:
- 由第三方开发开源预训练模型
- 改变模型的用途
- 针对问题的微调
开发一个开源的预训练模型
预训练模型是由其他人创建和训练的模型,用于解决与我们类似的问题。在实践中,有人几乎总是一个科技巨头或一群明星研究员。他们通常选择一个非常大的数据集作为他们的基础数据集,如 ImageNet 或维基百科语料库。然后,他们创建一个大型神经网络(例如,VGG19 有 143,667,240 个参数)来解决一个特定的问题(例如,这个问题是 VGG19 的图像分类)。当然,这种预先训练好的模型必须公开,以便我们可以利用这些模型并重新调整它们的用途。
改变模型的用途
在得到这些预先训练好的模型后,我们重新利用学到的知识,包括层次、特征、权重和偏差。有几种方法可以将预先训练好的模型加载到我们的环境中。最终,它只是一个包含相关信息的文件/文件夹。然而,深度学习库已经托管了许多这些预训练的模型,这使得它们更容易访问和方便:
您可以使用上面的来源之一来加载已训练的模型。它通常带有所有的层和权重,你可以随意编辑网络。
针对问题的微调
虽然目前的模型可能对我们的问题有效。由于以下两个原因,对预训练模型进行微调通常更好:
- 这样我们可以达到更高的精确度;
- 我们的微调模型可以以正确的格式生成输出。
一般来说,在神经网络中,底层和中间层通常表示一般特征,而顶层表示特定问题的特征。由于我们的新问题不同于原始问题,我们倾向于放弃顶层。通过针对我们的问题添加特定的层,我们可以实现更高的准确性。
放下顶层之后,我们需要放置我们自己的层,这样我们就可以得到我们想要的输出。例如,用 ImageNet 训练的模型可以分类多达 1000 个对象。如果我们试图对手写数字进行分类(例如, MNIST 分类),最终得到只有 10 个神经元的最终层可能会更好。
在我们将自定义层添加到预训练模型后,我们可以使用特殊的损失函数和优化器对其进行配置,并通过额外的训练进行微调。
要获得快速转移学习教程,您可以访问下面的帖子:
[## TensorFlow Hub & Magenta 在 5 分钟内实现快速神经风格转换
利用 Magenta 的任意图像风格化网络和深度学习,将梵高的独特风格转移到照片中
towardsdatascience.com](/fast-neural-style-transfer-in-5-minutes-with-tensorflow-hub-magenta-110b60431dcc)
计算机视觉的 4 个预训练模型
下面是四个预先训练好的网络,您可以使用它们来完成计算机视觉任务,例如图像生成、神经类型转移、图像分类、图像字幕、异常检测等:
- VGG19
- 第三版(谷歌网)
- ResNet50
- 效率网
让我们一个一个地深入研究它们。
VGG-19
VGG 是一个深度为 19 层的卷积神经网络。它是由牛津大学的卡伦·西蒙扬和安德鲁·齐泽曼在 2014 年构建和训练的,你可以访问他们在 2015 年发表的论文大规模图像识别的超深度卷积网络中的所有信息。VGG-19 网络也使用来自 ImageNet 数据库的超过一百万幅图像进行训练。当然,您可以导入带有 ImageNet 训练权重的模型。这个预先训练好的网络可以对多达 1000 个对象进行分类。该网络在 224×224 像素的彩色图像上被训练。以下是关于其尺寸和性能的简要信息:
- 大小: 549 MB
- Top-1: 准确率:71.3%
- **前五名:**准确率:90.0%
- **参数个数:**143667240
- 深度: 26
图 4。VGG-19 网络图(图由 Clifford K. Yang 和 Yufeng Zheng 在 ResearchGate 上提供)
第三版(谷歌网)
Inceptionv3 是一个具有 50 层深度的卷积神经网络。它是由谷歌构建和训练的,你可以访问论文上的所有信息,标题是“用卷积深入”。带有 ImageNet 权重的预训练版本的 Inceptionv3 可以对多达 1000 个对象进行分类。该网络的图像输入大小为 299x299 像素,大于 VGG19 网络。虽然 VGG19 在 2014 年的 ImageNet 比赛中获得亚军,但《盗梦空间》却获得了冠军。Inceptionv3 特性的简要总结如下:
- 大小: 92 MB
- Top-1: 准确率:77.9%
- **前五名:**准确率:93.7%
- **参数个数:**23851784
- 深度: 159
图 5。Inceptionv3 网络图(图由 Masoud Mahdianpari 、 Bahram Salehi 和 Mohammad Rezaee 在 ResearchGate 上提供)
ResNet50(剩余网络)
ResNet50 是一个深度为 50 层的卷积神经网络。它是由微软在 2015 年建立和训练的,你可以在他们题为[图像识别的深度剩余学习](http://Deep Residual Learning for Image Recognition)的论文中访问模型性能结果。该模型还在来自 ImageNet 数据库的超过 100 万幅图像上进行训练。就像 VGG-19 一样,它可以分类多达 1000 个物体,网络是在 224x224 像素的彩色图像上训练的。以下是关于其尺寸和性能的简要信息:
- 大小: 98 MB
- Top-1: 准确率:74.9%
- **前五名:**准确率:92.1%
- **参数个数:**25636712
如果您将 ResNet50 与 VGG19 进行比较,您会发现 ResNet50 实际上优于 VGG19,尽管它的复杂性更低。ResNet50 经过多次改进,您还可以获得更新的版本,如 ResNet101 、 ResNet152 、 ResNet50V2 、 ResNet101V2 、 ResNet152V2 。
图 6。ResNet50 网络的图解(图由马苏德·马赫迪安帕里、巴赫拉姆·萨利希和穆罕默德·雷扎伊在研究之门上提供)
效率网
EfficientNet 是一个最先进的卷积神经网络,由谷歌在 2019 年通过论文“ EfficientNet:反思卷积神经网络的模型缩放”进行训练并向公众发布。EfficientNet (B0 到 B7)有 8 个备选实现,即使是最简单的一个,EfficientNetB0 也很出色。它拥有 530 万个参数,实现了 77.1%的顶级精度性能。
图 7。EfficientNet 模型大小与 ImageNet 精度(由 Mingxing Tan 和 Quoc V. Le 在 Arxiv 上绘制)
EfficientNetB0 功能的简要概述如下:
- 大小: 29 MB
- **前 1 名:**准确率:77.1%
- 前五名:准确率:93.3%
- 参数个数:~ 530 万
- 深度: 159
计算机视觉问题的其他预训练模型
我们列出了四个一流的获奖卷积神经网络模型。然而,还有许多其他模式可用于迁移学习。以下是对这些模型的基准分析,这些模型都可以在 Keras 应用中找到。
表 1。预训练 CNN 模型的基准分析(作者列表)
结论
在一个我们可以轻松获得最先进的神经网络模型的世界里,试图用有限的资源建立自己的模型就像试图重新发明轮子一样。这毫无意义。
相反,尝试使用这些训练模型,考虑到您特定的计算机视觉任务,在顶部添加几个新层,然后进行训练。结果会比你从零开始建立的模型更成功。
订阅邮件列表获取完整代码
如果你想在 Google Colab 上获得完整的代码,并获得我的最新内容,请订阅邮件列表:✉️
喜欢这篇文章吗?
如果你喜欢这篇文章,可以考虑看看我的其他类似文章:
[## 使用 MNIST 数据集在 10 分钟内完成图像分类
towardsdatascience.com](/image-classification-in-10-minutes-with-mnist-dataset-54c35b77a38d) [## TensorFlow 和 VGG19 可以帮助您将照片转换成美丽的波普艺术作品
神经风格转移基于安迪沃霍尔的门罗双联画与预训练的计算机视觉网络 VGG19,转移…
towardsdatascience.com](/tensorflow-and-vgg19-can-help-you-convert-your-photos-into-beautiful-pop-art-pieces-c1abe87e7e01) [## 利用生成性对抗网络在 10 分钟内生成图像
使用无监督深度学习生成手写数字与深度卷积甘斯使用张量流和…
towardsdatascience.com](/image-generation-in-10-minutes-with-generative-adversarial-networks-c2afc56bfa3b) [## 伯特和拥抱脸 10 分钟情感分析
学习预训练的自然语言处理模型的基础,伯特,并建立一个使用 IMDB 电影评论的情感分类器…
towardsdatascience.com](/sentiment-analysis-in-10-minutes-with-bert-and-hugging-face-294e8a04b671)
每个数据科学家都应该知道的 4 个 Python AutoML 库
来源: Unsplash
让你的生活更轻松
自动机器学习,通常缩写为 AutoML,是一个新兴领域,其中建立机器学习模型以对数据建模的过程是自动化的。AutoML 有能力使建模变得更容易,更容易为每个人所接受。
如果您对查看 AutoML 感兴趣,这四个 Python 库是不错的选择。最后将提供一个比较。
1 |自动 sklearn
auto-sklearn
是一个自动化的机器学习工具包,它与社区中许多人熟悉的标准sklearn
接口无缝集成。随着贝叶斯优化等最新方法的使用,该库被构建为在可能的模型空间中导航,并学习推断特定配置是否将在给定任务中工作良好。
由马蒂亚斯·福雷尔等人创建的这个库的技术细节在一篇论文《高效和健壮的机器学习》中有所描述。福雷尔写道:
…我们引入了一个基于 scikit-learn 的强大的新 AutoML 系统(使用 15 个分类器、14 种特征预处理方法和 4 种数据预处理方法,产生了一个具有 110 个超参数的结构化假设空间)。
auto-sklearn
也许是开始使用 AutoML 的最好的库。除了发现数据集的数据准备和模型选择,它还从在类似数据集上表现良好的模型中学习。表现最好的模型聚集在一个集合中。
来源:高效健壮的自动化机器学习,2015。图片免费分享。
在高效的实现之上,auto-sklearn
需要最少的用户交互。用pip install auto-sklearn
安装库。
可以使用的主要类是AutoSklearnClassifier
和AutoSklearnRegressor
,它们分别操作分类和回归任务。两者都具有相同的用户指定参数,其中最重要的参数涉及时间约束和集合大小。
点击查看更多 AutoSklearn 文档。如果您遇到安装问题,请查看一些线程:安装 pyfyr 的问题,pyfyr的构建轮失败。
2 | TPOT
TPOT 是另一个自动化建模管道的 Python 库,更强调数据准备以及建模算法和模型超参数。它通过一种称为基于树的管道优化工具(TPOT)的基于进化树的结构来自动进行特征选择、预处理和构建,该工具可以自动设计和优化机器学习管道 (TPOT 纸)
来源:基于树的自动化数据科学管道优化工具评估,2016。图片免费分享。
程序或管道用树来表示。遗传程序选择和进化某些程序,以最大化每个自动化机器学习管道的最终结果。
正如佩德罗·多明戈斯所说,“拥有大量数据的愚蠢算法胜过拥有有限数据的聪明算法。”事实的确如此:TPOT 可以生成复杂的数据预处理管道。
潜在管道。来源: TPOT 文件。图片免费分享。
正如许多 AutoML 算法一样,TPOT 管道优化器可能需要几个小时才能产生很好的结果(除非数据集很小)。例如,你可以在 Kaggle commits 或 Google Colab 中运行这些长程序。
也许 TPOT 最好的特性是它将你的模型导出为 Python 代码文件,供以后使用。
点击查看 TPOT 文档。这个库提供了很多可定制性和深度特性。在此查看使用 TPOT 的示例,包括在没有任何深度学习的情况下,在 MNIST 数据集的子样本上实现了 98%的准确率——只有标准sklearn
模型。
3 |远视
HyperOpt 是一个用于贝叶斯优化的 Python 库,由 James Bergstra 开发。该库专为大规模优化具有数百个参数的模型而设计,明确用于优化机器学习管道,并提供跨几个内核和机器扩展优化过程的选项。
我们的方法是揭示如何从超参数计算性能度量(例如,验证示例的分类准确度)的基础表达式图,超参数不仅控制如何应用各个处理步骤,甚至控制包括哪些处理步骤。 -来源: 做模型搜索的科学:视觉架构的数百维超参数优化 。
然而,hyperpt很难直接使用,因为它技术性很强,需要仔细指定优化程序和参数。相反,建议使用 HyperOpt-sklearn,它是 HyperOpt 的一个包装器,包含了 sklearn 库。
具体来说,HyperOpt 非常关注进入特定模型的几十个超参数,尽管它支持预处理。考虑一个 HyperOpt-sklearn 搜索的结果,该结果导致没有预处理的梯度增强分类器:
构建 HyperOpt-sklearn 模型的文档可以在这里找到。它比 auto-sklearn 要复杂得多,也比 TPOT 多一点,但是如果超参数很重要的话,这可能是值得的。
4 | AutoKeras
神经网络和深度学习明显比标准的机器学习库更强大,因此更难以自动化。
- 使用 AutoKeras,神经架构搜索算法可以找到最佳架构,如一层中的神经元数量、层数、要合并哪些层、特定于层的参数,如过滤器大小或丢弃的神经元百分比等。搜索完成后,您可以将该模型用作普通的 TensorFlow/Keras 模型。
- 通过使用 AutoKeras,您可以构建一个包含嵌入和空间缩减等复杂元素的模型,否则那些仍在学习深度学习的人就不太容易获得这些元素。
- 当 AutoKeras 为您创建模型时,许多预处理(如矢量化或清理文本数据)都已为您完成并优化。
- 启动和训练搜索需要两行代码。AutoKeras 拥有一个类似 Keras 的界面,所以根本不难记忆和使用。
凭借对文本、图像和结构化数据的支持,以及面向初学者和寻求更多技术知识的人的界面,AutoKeras 使用进化的神经架构搜索方法来为您消除困难和歧义。
尽管运行 AutoKeras 需要很长时间,但有许多用户指定的参数可用于控制运行时间、探索的模型数量、搜索空间大小等。
考虑这个使用 AutoKeras 生成的文本分类任务的架构。
点击阅读关于在结构化、图像和文本数据上使用 AutoKeras 的教程。点击查看 AutoKeras 文档。
比较—我应该使用哪一个?
- 如果你优先考虑一个干净、简单的界面和相对快速的结果,使用
auto-sklearn
。另外:与sklearn
的自然集成,与常用的模型和方法一起工作,对时间有很多控制。 - 如果你优先考虑的是高精度,不考虑潜在的长训练时间,使用
TPOT
。强调高级预处理方法,通过将管道表示为树结构来实现。额外收获:为最佳模型输出 Python 代码。 - 如果您优先考虑的是高精度,而不考虑潜在的长训练时间,请使用
HyperOpt-sklearn
。强调模型的超参数优化,这可能是也可能不是有效的,取决于数据集和算法。 - 如果你的问题需要神经网络,使用
AutoKeras
(警告:不要高估它们的能力),特别是如果它以文本或图像的形式出现。训练确实需要很长时间,但是提供了广泛的措施来控制时间和搜索空间的大小。
感谢阅读!祝你一路顺风。😃
进行数据分析时要记住的 4 个问题
要成为一名高效的数据分析师,应该问自己什么问题,使用什么样的工具
安德里亚斯·克拉森在 Unsplash 上拍摄的照片
动机
前几天,我意识到我开始数据分析师工作的一周年即将到来。我真的很喜欢作为一名数据分析师工作,我很幸运在工作中被真正聪明的人包围着。我的许多同事对我养成的一些好习惯产生了非常直接的影响。
我决定花些时间写下一些我学到的并融入到日常工作中的“最佳实践”。特别是,我想 1)分享我在每个项目工作时问自己的一些问题,2)说出我为什么认为基于笔记本的工作流非常适合数据分析师。这篇文章更多的是反思而不是技术,但是我希望它能帮助你更好地处理数据。
那么,好的分析有哪些关键要素呢?
弗洛里安·伯杰在 Unsplash 上拍摄的照片
根据我的经验,我发现对以下问题回答“是”有助于确保你的分析朝着好的方向前进。
- 分析从开始到结束是否遵循逻辑流程?
- 是否有清晰的解释说明做出了什么假设以及为什么?
- 结果呈现的整齐吗?
- 是否有基于结果的行动呼吁?
奖金:
- 这种分析以后会很容易重现吗?
- 我可以轻松地与他人分享分析结果吗?
这些问题的重要性会根据分析的背景而有所不同,但是(特别是考虑到我是在用一把大刷子画画),它们应该为你的分析打下一个非常坚实的基础。
我发现像 Jupyter 或 Rmarkdown 这样的基于代码的笔记本是创建符合上述模型的分析的好工具。能够将代码、描述性文本和输出都包含在一个地方是非常强大的。当我更详细地研究以上每个问题时,就很容易明白为什么我是这些问题的超级粉丝了😃
分析从开始到结束是否遵循逻辑流程?
我是 OSEMN(发音为“awesome”)数据分析模型的忠实粉丝。翻译过来就是Ob ain, S crub, E xplore, M odel,i N terpret。以我的经验来看,这个模型提供了一个有效的大纲,可以快速地将想法转化为可操作的结果。笔记本非常适合实现 OSEMN 模型,因为您可以为每个步骤创建一个部分,从笔记本的顶部平滑地流向底部。
是否有清晰的解释说明做出了什么假设以及为什么?
我发现笔记本对于获取和擦洗步骤特别方便。使用 Rmarkdown 文件或 Rnotebooks,您可以包含直接从公司数据库中提取数据的 SQL 代码块。对于使用 Python 的 Jupyter 笔记本,我发现pyodbc
模块可以用来完成同样的事情。在您收集了原始数据集之后,就可以很容易地通过您所拥有的任何必要的清理功能来运行它。在这里使用笔记本的降价功能非常方便,因为您可以详细说明如何以及为什么选择格式化数据以便进行分析。这些简短的注释在以后再次回顾分析时也会派上用场。
结果呈现的整齐吗?
斯蒂芬·道森在 Unsplash 上拍摄的照片
一旦你的数据是干净的,你就可以完成剩下的步骤数据 E 探索, M 建模,以及 i N 解释结果。笔记本很棒,因为它允许你在代码中包含你的输出(如图表、图形、数据透视表、模型系数等)。您还可以使用 markdown 来补充视觉效果,提供您希望观众了解的具体见解。
根据受众的技术水平,将代码显示在视觉效果旁边可能是好的也可能是坏的。幸运的是,笔记本也允许显示或隐藏代码的灵活性。在 Rmarkdown 中,你所要做的就是在你想要排除的代码块的头中添加include=FALSE
(或者全局设置它来排除所有代码块)。在 Jupyter 中也可以进行代码隐藏,但是要简单得多。在这种情况下,我认为 Rmarkdown 有一点优势。
是否有基于结果的行动呼吁?
杰米·坦普尔顿在 Unsplash 上拍摄的照片
在我看来,这个问题经常被忽视,但是它确实区分了一个好的分析师和一个伟大的分析师。一个好的分析师可以快速处理数字,并将数据转化为可解释的东西,但一个伟大的分析师会采取额外的步骤,解释数据应该如何用于推动特定的商业决策。分析师通常不会对更大的商业决策做出最终决定。通常,他们的工作会交给发号施令的经理和主管。然而,由于分析师是接触数据最多的人,他们绝对不应该仅仅是把一个基本的幻灯片和一些图表交给他们的经理,然后就完事了。我真的相信分析师可以在工作场所产生比现在更大的影响。
N 如何回答奖金问题!这才是笔记本在我看来真正出彩的地方。
这种分析以后会很容易重现吗?
我感觉更多的时候,分析师会在某个时候被要求重温以前的分析,以验证以前的结果是否仍然保持一致,或者查看结果可能发生了什么变化。仅仅因为这个原因,就很难反驳笔记本。我发现能够打开一个旧的笔记本文件并重新运行它以获得更新的结果是一个不可思议的时间节省。它还保证您从第一次开始就保持所有相同的假设和数据清理过程。如果没有别的,这肯定比从旧的电子表格中复制公式和过滤器,然后重新创建所有重要的表格和图像要好(从经验上来说)。
我可以轻松地与他人分享分析结果吗?
用笔记本,绝对!鉴于整个分析包含在一个文件中,很容易与人分享。对于那些计算机上没有安装 R 或 python 的用户,结果可以输出到 pdf 或 HTML 文件。
结论
这绝不是数据分析最佳实践的详尽或权威列表。相反,它只是我发现有用的基本原则的汇编。鉴于我的经验非常有限,我很想听听你对数据分析的“最佳实践”有什么想法。欢迎在 LinkedIn 上与我联系,或者在评论中留下你的想法。感谢阅读!
AI/ML 不是新 SaaS 的 4 个理由?
人工智能被预测为云计算的顶级领域之一。然而,AIaaS 和 SaaS 有着天壤之别。
Denys Nevozhai 在 Unsplash 上拍摄的照片
*大家好,我将运行几个“远程人工智能/人工智能智囊团”,让人工智能/人工智能领域的人们交流思想并保持联系。如果你有兴趣,在这里注册以获得更多信息。
根据最近的 Gartner 调查,超过 40%的公司计划在今年年底部署人工智能解决方案。然而,高昂的基础设施成本和对 AI/ML 专业知识的需求让大多数组织望而生畏。这就是为什么 AIaaS (AI 即服务)或 MLaaS 开始出现的原因。
超过 40%的公司计划在今年年底部署人工智能解决方案— Gartner 。
由 Salesforce 推广的 SaaS 指的是一种授权模式,在这种模式下,软件被集中托管,供客户通过浏览器访问。SaaS 公司有时也会提供免费试用(免费增值)来鼓励采用。
不断增加的收入和不断降低的成本使得 SaaS 的商业模式更加可预测、有利可图和可扩展。因此,对于创业者和投资者来说,它都成为了一种极具吸引力的模式。
自 2004 年 Salesforce 上市以来,SaaS 已有 70 多家公司上市。平均而言,SaaS 公司的表现明显优于市场。SaaS 公司往往有更高的毛利润和更低的 R&D 费用,因为他们不需要支持多个版本或技术栈。
同样,AIaaS 允许公司利用现成的人工智能解决方案,而不是从头开始建立自己的团队和基础设施。AIaaS 通过最小化前期投资为用户提供了更好的可扩展性和灵活性。
人工智能将从 2019 年到 2023 年增加 5X。
人工智能爱好者还预计,AIaaS 商业模式可以帮助推动采用和盈利。Gartner 预测,从 2019 年到 2023 年,基于云的人工智能将增加 5X,这似乎证实了这一趋势。
从亚马逊和微软等科技巨头到初创公司,许多公司都开始提供 AIaaS,包括聊天机器人、数字助理、认知 API 和机器学习框架。利用这些服务可以简化复杂的过程,减轻部署人工智能的计算负担。
AIaaS 似乎是解决你所有问题的灵丹妙药。它实现了快速和节省成本的人工智能部署,因此公司不需要依赖目前到处都缺乏的内部人工智能专家。将模型托管在云中,这样它们可以利用更多的数据不断改进,这也带来了 ML 的最大好处。
然而,现实是,部署 AIaaS 比部署 SaaS 面临更多的挑战。原因如下。
比“垃圾进,垃圾出”更糟糕的是什么
在计算机科学中,垃圾输入,垃圾输出(或 GIGO)意味着即使有一个有效的系统,它的输出也只能和输入的信息一样好。这个概念似乎适用于 ML。没有高质量的数据,模型不会有好的表现。然而,这个概念几乎没有抓住 ML 中质量数据问题的严重性。
ML 模型从训练数据中学习,而不是被显式编程来执行任务。学习过程需要严格控制。训练集中的坏数据会污染整个结果池。即使您之后使用良好的数据训练模型,性能也可能无法恢复。这就像教育一样:我们不能简单地忘记我们被教导的东西。有缺陷的输入不仅会产生无意义的输出,还会破坏模型。
模糊线
AIaaS 依赖客户提供培训数据。但是客户并不总是知道如何生成合适的数据集。当系统表现不佳时,他们倾向于责怪模型。人工智能公司需要花大量时间教育用户并与用户一起工作,以建立数据管道并确保高质量的数据。
事实上,公司花费超过 80%的时间在数据工程上。即使有客户培训,AI 公司仍然需要(手动)验证所有来自客户的输入数据,以确保数据完整性。这就是 AIaaS 与 SaaS 显著不同的原因。
ML 模糊了客户和 ML 提供者之间的界限,使性能成为共同的责任。这不再是一个明确的 API 调用了。如果模型表现不佳,数据和模型一样难辞其咎。
水下藏着什么?
正如我在上一篇文章中提到的,模特培训只是冰山一角。大多数公司没有考虑到的是获取、清理、存储、聚合和标记数据集以及构建基础设施的隐性成本。
这就是为什么免费增值模式对人工智能初创公司不起作用,因为即使是 PoC(概念证明)也需要大量的数据收集和培训来证明价值。如上所述,这超过了工作的 80%。
SaaS 模式的美妙之处在于它的可扩展性和不断降低的成本,这并不真正适用于 ML。模型训练和推理都需要大量的计算。持续训练给计算带来更多挑战,进一步增加成本。
处理边缘案件
ML 并不完美。它可以帮助我们自动化大多数重复的任务,但几乎总是有需要人工干预的边缘情况。随着越来越多的 ML 系统在现场部署,我们看到越来越多的公司专注于鲁棒性指标,以最大限度地减少人为干预。
然而,至少在不久的将来,人类仍然被要求处于循环中。即使有正确设计的移交过程和接口,它仍然会影响整体的可伸缩性。
许多研究人员一直在解决 ML 的一般性问题。迁移学习和元学习取得了很大进展。然而,在我们能够完全解决通用性之前,可扩展性仍然是(狭义)人工智能的一个关键问题。我们必须仔细选择用例,并尽可能地专注于标准产品。
我们连线吧!如果你喜欢读这篇文章,请在这里订阅我的个人博客!
Bastiane Huang 是 OSARO 的产品经理,OSARO 是一家总部位于旧金山的初创公司,致力于打造人工智能定义的机器人。她曾在亚马逊的 Alexa 小组和哈佛商业评论以及该大学的未来工作倡议中工作。她写关于 ML、机器人和产品管理的文章。跟着她到这里 。
我选择 Plotly 作为我的主要可视化库的 4 个原因
把你的想象带到 21 世纪
选择一个完美的数据可视化平台可能很难,因为这在很大程度上取决于你最擅长哪种编程语言,或者你是否愿意使用编程语言来进行可视化——因为这不是强制性的。
在一个有如此多优秀绘图库的世界里——特别是对于 JavaScript 用户——今天我将向你解释为什么我选择了 Plotly 而不是其他任何东西。
这可能不是你会同意的事情,但是给我几分钟时间来通读这些论点——这是值得的。
在开始之前,我只想说,我没有以任何方式,形状或形式与 Plotly 背后的开发人员有任何关系,也没有参与开发。这篇文章纯粹基于的个人经验,旨在帮助你为你的项目选择一个完美的可视化库。
话虽如此,让我们进入你在这里的原因。
#1.是 Python
现在,只有当你已经了解 Python 时,你才会认为这是一个好处——但是既然你正在阅读一个数据科学博客,我想你也是。
Python 的语法清晰、干净、易于使用,Plotly 也不例外。看看生成一个简单的气泡图需要多少代码:
import plotly.graph_objects as go
fig = go.Figure(data=go.Scatter(
x=[1, 2, 3, 4],
y=[10, 11, 12, 13],
mode=’markers’,
marker=dict(size=[40, 60, 80, 100],
color=[0, 1, 2, 3])
))
fig.show()
运行此代码将生成一个视觉上吸引人的图表,如下所示:
来自文档
众所周知,我是 Python 语法的粉丝,但如果你不是,你仍然可以将 Plotly 与 R 和 JavaScript 一起使用。然而,让我们继续下一点。
#2.它是互动的
如果您遵循了第一点并执行了所提供的代码,那么您已经意识到 Plotly 中的可视化是交互式的。
照片由 Isaac Smith 在 Unsplash 上拍摄
如果您来自 JavaScript 背景,这可能对您来说不是一件大事,但是对于来自 Python 的任何人来说都是一件大事。通过Matplotlib
制作的可视化效果不是交互式的,默认情况下看起来比 Plotly 的可视化效果差很多。
你不需要指定你希望你的图表是交互式的,但是你可以调整鼠标悬停时的可见性。
在后面的文章中会有更多的介绍,在这个 Plotly 系列中还会有更多的介绍。
#3.清晰语法
您的 Plotly 图表将有一个Figure
对象,填充有:
Data
对象Layout
对象
正如您可能想到的,您将把制作图表的数据放在data
中,在layout
中,您将指定图表应该是什么样子。让我们看一个例子。
先来做几个进口:
import numpy as np
np.random.seed(42)
import plotly.offline as pyo
import plotly.graph_objs as go
现在让我们定义将进入图表的数据:
x = np.random.randint(1, 101, 100)
y = np.random.randint(1, 101, 100)data = [go.Scatter(
x=x,
y=y,
mode='markers',
)]
就是这样。这将根据 x 轴和 y 轴上的随机整数创建散点图。现在让我们定义布局:
layout = go.Layout(
title=’Plot title’,
xaxis=dict(title=’X-Axis’),
yaxis=dict(title=’Y-Axis’),
hovermode=’closest’
)
现在让我们把所有的东西都放到一个Figure
对象中,然后绘制它:
fig = go.Figure(data=data, layout=layout)
pyo.plot(fig)
如果你问我,这是数据可视化所能做到的最干净的了。如果您将这段代码放入一个单独的.py
脚本中并运行它,可视化将被保存为一个html
文件并自动在您的浏览器中打开:
不算太差,但是我们将在下面的文章中更深入地探讨样式。
#4.仪表板
如果你知道一些基本的 HTML 和 CSS,那么将多个图表合并到一个单一的、好看的仪表板中是非常容易的。
Plotly 图表可以与Dash
整合,这是一个构建网络应用的框架。
这里有一段来自官方文档:
Dash 基于 Flask、Plotly.js 和 React.js 编写,非常适合用纯 Python 构建具有高度自定义用户界面的数据可视化应用程序。它特别适合任何使用 Python 处理数据的人。
这个React
部分将把你的应用程序转变成一个单页应用程序,这意味着点击内容时不会有那些尴尬的刷新。所有这些都是在不了解任何网络开发的情况下完成的。太棒了。
我们现在不会深入仪表板开发,但是以后很少有文章会深入讨论它。
如果你迫不及待地想看看用Dash
能制作出什么,这里有官方的图库:
[## Dash 企业
Dash 企业
dash enterprise dash-gallery . plot ly . host](https://dash-gallery.plotly.host/Portal/)
在你走之前
我对查看表格数据非常满意。但是我工作的很大一部分是向他人展示调查结果和结论,每次展示图表都是一种有效得多的方法。
在接下来的一个月左右的时间里,我决定发表 10 篇左右的文章,这些文章将从上到下地详细介绍,确保数据可视化不会成为你未来痛苦的过程。
感谢阅读,敬请关注。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
你不应该成为数据科学家的 4 个理由
为什么数据科学工作可能不适合你
克里斯蒂安·埃尔富特在 Unsplash 上拍摄的照片
我相信你们大多数人都看过 HBR 的文章,“数据科学家:21 世纪最性感的工作”,他们不是唯一声称数据科学是所有工作的圣杯的人。
许多人似乎有这样一种错误的观念,即数据科学家的工作只包括日夜构建这些革命性的、复杂的、有影响力的机器学习模型,这是完全不正确的。
当你们中的许多人在寻找适合自己兴趣的职业时,或者对于那些正在寻找职业转换的人来说,你可能已经考虑过成为一名数据科学家。由于你可能只听说过数据科学的好的方面,我将给出数据科学工作不适合你的 4 个原因。
让我们开始吧!
1.你不喜欢在职业生涯中不断学习的想法。
数据科学是一个非常宽泛的术语,这意味着它对不同的公司意味着不同的东西,因此,不同的公司需要不同的技能组合。例如,一些公司需要机器学习知识,另一些公司需要实验设计和 A/B 测试,一些公司需要 Python 程序员,还有一些公司需要 R 程序员,等等。因此,你在一家公司发展的技能不一定能让你走完整个职业生涯。
最重要的是,数据科学是一项多学科的工作。人们期望你在编程、统计、数学、商业理解等方面有一定的知识水平,这意味着你在这些领域中的某一个领域总会有发展的空间。
最后,像科技中的一切一样,数据科学也在不断发展。例如,TensorFlow 是在 2015 年才创建的,现在,它是最受欢迎的技能之一。随着新技术的产生和不断完善,你也应该学习新技术。
2.你不喜欢“肮脏的工作”。
从事像构建机器学习模型这样有趣的工作只占数据科学家工作的一小部分——我认为不到一个人时间的 25%。
您的大量时间很可能会花在理解数据、数据来自哪里以及数据是如何被操纵的)以及准备数据(EDA、数据争论、特征工程等)上。).如果你没有开发一个好模型所需的数据,你将不得不开发管道来获得你需要的数据。
原因很简单。模型的性能受到用于创建模型的数据质量的限制。
“垃圾进,垃圾出。”
因此,如果你不愿意做“脏活”来研究机器学习模型,那么数据科学可能不是最好的选择。
3.你不喜欢与商业利益相关者持续谈判、沟通和教育的想法。
你必须会谈判。
作为数据科学家,你既是数据科学家,也是销售代表:
- 你必须向商业利益相关者推销你的想法和新的数据科学计划。
- 你也可能是那个不得不争取额外资源的人,比如新技术、更多劳动力、更多存储等等。
- 最后,您可能会发现自己不得不在时间和完美之间进行权衡——在某些情况下,您可能需要额外的一两周时间来提高模型的准确性,而您的业务利益相关者可能看不到增量改进的价值。
你必须是一个好的沟通者和教育者。
通常情况下,你会和那些不了解技术,也不了解你正在做的项目的利益相关者一起工作。因此,你的工作是以员工和利益相关者易于理解的方式沟通和教育他们。
同样,你还需要将你的数据科学项目分解成步骤。商业利益相关者关心进展,他们希望看到项目如何随着时间的推移而改进,而不是等待 5 个月的最终结果。因此,你有责任传达你的进展和结果。
4.你不认为自己是一个足智多谋的人。
说到数据科学,没有太多的牵手。在一天结束时完成工作是你的责任,如果你发现自己陷入困境,你需要随机应变,找到问题的答案。
如果你需要了解 XGBoost 是如何工作的,或者如何构建一个 API,你需要随机应变,观看 YouTube 视频,阅读文档,或者参加一个训练营。
此外,您还必须主动安排与相关利益相关者的会议,以了解更多关于业务问题、预期结果和相关指标的信息。
如果你不是那种足智多谋、积极主动、坚持不懈的人,那么数据科学可能不适合你。
感谢阅读!
虽然这是一篇固执己见的文章,但我希望这能对数据科学有所启发。在一天结束的时候,我仍然认为利远大于弊,但我认为这些都是值得思考和考虑的好点子。一如既往,我祝你在努力中好运!
不确定接下来要读什么?我为你挑选了另一篇文章:
到目前为止,我在数据科学之旅中学到的见解
towardsdatascience.com](/5-things-i-wish-i-knew-when-i-started-learning-data-science-24d6f9a2d1e0)
特伦斯·申
- 如果你喜欢这个, 在 Medium 上关注我 获取更多
- 关注我的Kaggle了解更多内容!
- 想要合作?让我们连线上LinkedIn
- 查看 我的免费数据科学资源 每周有新素材!
你永远无法完成在线数据科学课程的 4 个原因
这可能既不是你的自律,也不是你对这个主题的天赋。这可能会阻碍您的数据科学学习!
威廉·艾文在 Unsplash 上的照片
还记得您开始学习数据科学课程但从未完成的时候吗?或者上百次你做了完全相同的事情,但是用了你认为更“完美匹配”的课程,或者像数据科学家喜欢说的那样“更性感”?
不要慌!我们都经历过!不,这可能不是你的自律,也不是你对这个主题的天赋。
以下四个原因可能会阻止你完成在线课程并获得证书:
- 信息超载!信息过载!信息过载!
让我们现实一点,外面有大量的在线课程、数据科学课程、YouTube 视频、会议、播客和书籍,这可能会让人不知所措。几乎不可能知道从哪里开始最好!即使你做了,你也总是问自己:“我做了正确的决定吗?”,“这个课程对我来说是最好的吗?”当然还有价值百万的问题“我应该继续吗?”。
对于初学者,我有一个建议:一头扎进学习过程,不要想太多!如果你正在开始一个由知名大学、组织或公司提供的在线课程,你将有机会向该领域的专家学习基础知识。这总是一件好事。不要想太多。把基本的记下来。练习。练习。练习。继续前进。
如果你已经有了基础知识,请继续阅读!
2.归零地和“无聊”基础
一旦你掌握了基础知识,你自然会想把你的技能提升一个档次。所以你开始了另一门课程…只是在取得进展几分钟/几小时后就放弃了。
为什么会这样?
其实很简单。大多数课程是以线性方式设计的,因此最初的几个视频/讲座/章节侧重于确保学习者在引入更复杂的想法和概念之前已经掌握了先决技术。
但是你已经掌握了这些基础知识!你第一百次想听到的最后一件事是 Python 如何处理不同的数据类型!这些你已经知道了!
你很无聊。你关闭标签。剩下的就是历史了。
每次你开始一门新课程都从零开始并不是最好的方法。你需要不断接受挑战。我的两点意见是,如果你已经知道了,跳过它!接受挑战,不断学习新东西。每次你开始一门新的 Python 课程,你都不需要重新学习什么是变量或者 Python 如何存储变量!
3.信息的价值大大降低——行动的价值更大!
让我们面对现实吧。你在过去已经完成了一两门课程,你厌倦了让自己超负荷地学习更多的信息,却在一两个星期后忘记了如何使用它们。
在 2020 年,“知道”是远远不够的。反正要知道的东西太多了。用信息淹没你的“学习自我”可能是阻止你的原因。
你开始了一门新课程,但是你渴望应用你在以前的课程中学到的东西。被动地吸收新信息在这一点上只会让你厌烦。
马上停下来!拿起一个探索你感兴趣的主题的数据集,把你能记住的所有可能适用的东西应用到这个数据集上。此刻,你的数据科学技能有多基础或多高级并不重要。通过这样做,通过“现实核查”你实际上知道如何应用而不是你实际上知道什么,你可能会学到更多。
不要害怕独自面对数据集!犯错误,陷入困境,谷歌搜索,找到例子,从中学习,使它们更好,应用它们。重新开始,并申请更多!
4.你已经知道的和你需要知道的
这是一个有用的提示/练习,而不是你没有完成在线课程的原因。但是我觉得很有帮助!
照片由 Tachina Lee 在 Unsplash 上拍摄
找一张白纸。拿支笔。独自坐在办公桌前。关闭所有笔记本和书籍。在这个练习过程中,远离你的手机和笔记本电脑。
现在将这张纸分成 5 栏:统计学、Python 编程(或者你选择的另一种数据科学语言——你可以将它分成其他栏,也可以按库划分,如 pandas、Numpy、Matplotlib、Seaborn……)、机器学习、深度学习、数据技术(Tableau、Power BI、Spark 或者你试图添加到你的数据仓库中的任何东西!)
在每一栏中,记下你最近几周知道/学到的所有概念。想一想在这些类别中你能做的每一件事。把它写下来,同时思考你将如何实际应用它,它应该应用在哪里,在什么约束下。
看看你的单子!在你做这个练习的特定时刻,你现在才意识到自己的优势和劣势。这个列表告诉你确切的你已经知道的和适合应用的东西。这些应该是你已经知道如何和在哪里使用的东西。
这个列表缺少的是你还不知道的东西。从那里开始!挑选一本著名的数据科学书籍(网上有很多好的推荐)并查看目录!采取小步骤,逐一解决所有缺失的概念和技术。
每隔一周重做以上练习!这将帮助你现实地检查你的进步和什么是最重要的:也就是说,你知道如何应用和使用什么,而不是你在两年前的课程中学到的,但不知道如何或在哪里正确有效地使用。
我希望这有助于您重拾数据科学知识!祝你学习好运,记得确保并记住这个过程其实很有趣!
为数据科学面试做准备的 4 种资源
帮助您准备数据科学面试的在线资源
韦斯·希克斯在 Unsplash 上的照片
只是一点点关于我的旅程!我已经在数据科学领域工作了大约 10 年。我做过各种形式的数据科学家,比如商业分析、增长分析、营销分析和营销科学。这些天来,虽然我更倾向于产品,但我仍然定期采访数据科学家。
多年来,我收集了 4 个在线资源,它们总能帮助我准备数据科学面试。我想与你分享它们。
如果你更喜欢看内容而不是阅读,这里有视频。
数据科学面试技巧
首先,我们来了解一下数据科学的面试形式。
数据科学面试的形式
数据科学面试技巧的第一件事也是其中之一是了解面试中将涉及的不同类型的主题。
数据科学面试通常会涉及几个不同的主题。招聘人员应该告诉你面试会涉及哪些话题,面试的形式会是怎样的。
例如,你的第一次技术面试可能是通过视频会议。因此,你将与面试官共享一个屏幕,在那里你可以写并向他们展示你的代码。然后你的第二次面试可能是面对面的,你会遇到几个数据科学家,你会通过四到五个不同的面试官,涵盖四到五个不同的主题。了解所有这些话题是很重要的,这样你就可以做好充分的准备,在面试中取得成功。
数据科学面试中涵盖的四个主题
在很大程度上,数据科学访谈涵盖了四个主题。
- 编码
- 产品意识/商业案例
- 统计和概率
- 建模技术
第一个是编码。然后是产品意识或商业案例。第三个是统计学,也包括概率和基本定理。最后一个主题可能是建模,包括随机森林、梯度推进、K-means 聚类和其他几种常见的模型。
选择学习资源时要考虑的两件事
现在,我们已经介绍了这四个主题,并且知道了数据科学面试将涵盖的内容,是时候为面试做最后的准备了。
我在资源中寻找两样东西:
- 很多练习题
- 真实面试中的真实问题
我想尽可能多地练习一些问题,以强化面试中会涉及到的所有概念。第二件事是与面试和公司非常相关的练习题和面试问题。这就是我要找的。过去在面试中被问到的真正的问题,这就是我想要得到的。
马库斯·斯皮斯克在 Unsplash 上的照片
为数据科学面试做准备的四种在线资源
以下是我过去用来准备数据科学面试的四个在线资源。最后,我将向大家介绍一个额外的第五个。
1.作为学习平台的 Glassdoor
第一个在线资源是 Glassdoor。当我准备数据科学面试时,这是我最喜欢使用的平台之一。
上面的图像是玻璃门。我在脸书输入,从菜单中选择采访。如果我们向下滚动到页面的中间,我们会看到脸书不同职位的面试问题。当我们向下滚动时,我们会看到数据科学家、前端工程师、iOS 开发人员、软件工程师等职位。但是你也可以找到很多数据科学的面试问题。我喜欢的是,这些问题是在脸书数据科学面试中被问到的真实问题。他们尽可能的真实。
我真正喜欢的第二件事是,这些问题涵盖了我们上面讨论的所有主题。我做的另一件事是,如果我准备参加脸书大学的数据科学面试,除了在脸书输入和查看所有问题外,我还会搜索与脸书处于同一行业的其他公司。如果我更关心社交媒体公司,我可能会输入 Snapchat 或抖音。如果我想扩大一点范围,我可能会输入科技领域的其他公司。所以谷歌可能是另一个,LinkedIn 可能是另一个。所以你可以从 Glassdoor 获得许多面试问题和答案。
2.Brilliant.org 统计与概率奖
现在让我们来看看统计和概率。我用过一个叫 brilliant.org 的网站。它实际上是一个数学网站。他们还涵盖其他类型的主题,如计算机编程,计算机科学,定量金融等。但是我用这个来复习我的统计和概率。这也是脸书招聘人员推荐的一个网站,以获得统计和概率方面的额外实践。
在这个网站上,我从上面的菜单进入练习部分。有很多可以选择的。但我最关心的是概率选择,如下图所示。
如果我们去概率部分,我们有基本面和赌场概率。基本上,我想尽我所能去尝试。当我或多或少地钻研这些实践问题时,我就会知道它们是否会成为数据科学面试的一部分。
在 Brilliant 网站上,我推荐几个部分——概率、随机变量、统计测试和分布。
交叉检查你是否应该做这些问题的一个好方法是先上 Glassdoor。阅读那里的一些统计问题,然后看看这些概念是否能在 Brilliant 上找到。
这是我推荐的。这是提高你的统计和概率的在线资源。
3.学习建模技术的多种资源
现在,我们将检查专门用于建模机器学习模型的在线资源。我不一定要去一个地方学习机器学习模型或温习这些概念。
在面试中,我看到建模问题以两种方式出现:
- 理论
- 模型在项目中的应用
第一种方式是理论题。第二种方式是当你谈论你的项目时。他们间接地或直接地询问您关于您在那些项目中使用和实现的模型。
1。理论
您可以获得关于特定模型的问题,如随机森林、梯度增强、k-means 聚类,以及关于模型本身的问题。
你可能会问这样的问题:
你为什么会想使用这种模式?
您为什么不想使用这种模式?
如何用代码实现这个模型?
如何阅读这个模型的结果解读结果?
这些是你在建模时会遇到的大多数理论问题。
2。模型在项目中的应用
你可以谈论一个使用这些模型的项目。面试官可以越来越深入地挖掘项目本身和模型本身,并问你为什么选择该模型,或者你在开发模型时有哪些假设。
重点是,你需要了解关于机器学习模型的理论。你不需要知道所有的机器学习模型,只需要知道常见的模型。
我使用的一些在线资源:
我倾向于大量阅读博客。而’*走向数据科学’*是我经常去的一个热门网站。他们有很多关于机器学习模型的博客文章。
除了阅读这些博客文章来重温我的机器学习理论和理解之外,我还会尽可能多地去 YouTube 观看视频。我推荐几个频道,比如’*’ simpli learn ‘*和一个新人’ Data Professor’ 。他们经常谈论机器学习模型、理论和应用,这很重要。
除了关注其中的一些渠道,我还搜索机器学习模型,尽可能多地获取视频。
4.面试编码部分的 LeetCode
面试的编码部分,我以前用的在线平台叫’ LeetCode’ 。这实质上是一个为计算机科学家和软件开发人员准备面试而开发的平台。但是他们有一个很好的小数据库部分,在那里你可以练习你的 SQL。
如果你点击任何一个话题,你会看到一个练习题,你可以输入 SQL 代码,执行代码,它会输出一些东西。这是一个成熟的工作空间,也是一个实践 MySQL 查询的 IDE。
我喜欢这个平台的一点是,它有成百上千的练习 SQL 问题。我真的很擅长为面试本身提高我的 SQL 和编码技能。
我想对 LeetCode 说的一个缺点是,它是为软件开发人员量身定制的。这个平台上的许多问题只是帮助你更好地使用 SQL,但他们不会问数据科学类型的问题来处理数据。因此,我会去 Glassdoor,尝试为我面试的公司找到一些编码问题,然后了解这些编码问题中涵盖了哪些数据科学概念。如果我只是想练习 SQL,我会去 LeetCode,试着回答尽可能多的问题。
5.奖金— StrataScratch 为数据科学面试做准备
这是我在开始时向你们承诺的第五个在线资源:这是“StrataScratch”。这是一个为实现一件事而设计和构建的平台;帮助数据科学家准备面试。
这是一个为数据科学家搭建的平台。它将我之前提到的四种在线资源的最佳部分整合到一个平台中。
在 StrataScratch 上,我们有编码问题,您可以根据公司选择问题。您还可以根据您更熟悉 SQL 还是 Python 来选择问题。如果你想点击其中一个,你有问题,有提示,你可以看到解决方案以及其他用户的解决方案。
这些问题是来自数据科学面试的真实问题。你可以确定你所做的直接映射到数据科学面试。
现在,如果你去非编码问题,你有不同问题类型的技术问题。
你有概率、商业案例、产品感觉类型的问题、建模问题、统计、各种技术问题和系统设计,以及许多其他将在数据科学面试中测试的概念。
如果你点击这些问题中的一个,你会得到这个问题,一个能够评论和提供你的解决方案的编辑器,然后你会看到其他用户和他们的解决方案。
跨越编码和非编码问题,实际上 StrataScratch 上有超过一千个面试问题,这些问题是从真实的公司中提取出来供你练习的。
这是帮助你准备数据科学面试的五个在线平台。希望这有帮助。
最初发表于T5【https://www.stratascratch.com】。
每个数据科学家都应该知道的 4 个简单技巧。
机器学习技巧/窍门
这些技巧肯定会在任何项目中节省你的时间,并提高你的工作效率。
T 通过这篇文章,我们将了解一些简单的技巧,它们可以真正提高您的机器学习、人工智能或数据科学项目的生产率。📔
希望你喜欢!!😊
1。树木的可视化
在使用任何机器学习模型时,我们只知道哪个模型将适合数据集来解决特定问题,并且基于数据集,我们通过一些数学/逻辑推理来设置模型的参数。该模型工作完全正常,符合目的。但是没人关心黑盒里有什么。听起来没那么吸引人,对吧?对于任何一个树模型来说都不是。让我们看看如何可视化黑盒。
我们将导入一些必要的库来设置我们自己的任务!
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,plot_tree
from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
为此,我们将使用著名的葡萄酒数据集。将数据集加载到 Pandas 数据框中,并分离为预测变量和响应变量。
wine=load_wine()df = pd.DataFrame(data= np.c_[wine['data'], wine['target']],
columns= wine['feature_names'] + ['target'])X = df.drop('target',axis=1)
y = df["target"]features = df.columns[:-1].values.tolist()
将数据分成训练集和测试集,选择适当的模型并拟合该模型。
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state = 2020)model = DecisionTreeClassifier()distinguish between two thingsmodel.fit(X_train, y_train)
我们将使用 sklearn 的库。(导入 sklearn.tree.plot_tree )
plt.figure(figsize = (20, 10))
plot_tree(model, feature_names = features, filled = True)
来源:我的谷歌 Colab 笔记本
它告诉我们关于样本(元组的数量)、每个节点中的特征、节点的数量、我们制作树的标准(这里,默认情况下,我们使用基尼指数)。
更多细节和示例请参考文件。
**2。**在单个图中绘制 ROC 曲线
ROC ( 受试者操作特征)曲线告诉我们该模型在将班级分成两个或更多个班级方面有多好。更好的模型可以准确地区分两者或更多。然而,一个差的模型将很难在两者之间进行分离。更多细节请参考文章。
导入一些必需的库
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_roc_curve
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
为此,我们将使用乳腺癌数据集。将数据集加载到 Pandas 数据框中,并分离为预测变量和响应变量。
db=load_breast_cancer()
df = pd.DataFrame(data= np.c_[db['data'], db['target']])df=df.rename(columns={30:'target'})X = df.drop('target',axis=1)
y = df['target']
将数据分成训练集和测试集,选择适当的模型并拟合该模型。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)dt = DecisionTreeClassifier()
rf = RandomForestClassifier()dt.fit(X_train, y_train)
rf.fit(X_train, y_train)
使用sk learn . metrics . plot _ roc _ curve库显示图形。
disp = plot_roc_curve(dt, X_test, y_test)
plot_roc_curve(rf, X_test, y_test, ax = disp.ax_)
来源:我的谷歌 Colab 笔记本
我们可以看到两个分类器之间的 ROC 曲线以及 AUC 分数。随机森林分类器的 AUC 大于决策树分类器,因此随机森林分类器比决策树分类器更合适。
更多细节和示例请参考文档。
3。修剪决策树
当在某些数据集上训练决策树时,我们经常过度拟合训练集,因此我们的模型在测试集上的精度较低。这个问题可以通过修剪树的方法来解决。这种修剪过的树比没有修剪过的树表现更好。有不同的方法可以用来修剪树木。它们是后剪枝、前剪枝、成本复杂性剪枝,我们将对我们的模型使用成本复杂性剪枝。
DecisionTreeClassifier 提供了各种参数来防止树过度拟合。其中一个是成本复杂度参数,CCP _ 阿尔法 。CCP _ 阿尔法 的值越大,修剪的节点数越多。这里我们只展示了CCP _ 阿尔法 对正则化树的影响,以及如何根据验证分数选择一个CCP _ 阿尔法 。
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancerdb=load_breast_cancer()df = pd.DataFrame(data= np.c_[db['data'], db['target']])df=df.rename(columns={30:'target'})X = df.drop('target',axis=1)
y = df['target']
型号 1。(此处 Random_state 是为了再现性)
model = DecisionTreeClassifier(random_state = 2020)model.fit(X, y)score = cross_val_score(model, X, y, scoring = "accuracy")
print("Model 1 has {} nodes and score is {}".format(model.tree_.node_count, score.mean()))
型号 2 的CCP _ 阿尔法 值等于 0.01
model = DecisionTreeClassifier(ccp_alpha = 0.01, random_state = 2020)model.fit(X, y)score = cross_val_score(model, X, y, scoring = "accuracy")
print("Model 2 has {} nodes and score is {}".format(model.tree_.node_count, score.mean()))
来源:我的谷歌 Colab 笔记本
注意,分数上升了。修剪树木有很多好处,主要的好处是减少过度修剪。
更多细节和示例,请参考文档。
4.情节混乱矩阵
混淆矩阵,名字本身就包含了混淆在里面。为什么会这样呢?第一次理解时,这个问题的答案似乎令人困惑,但一旦你理解了,它肯定会帮助你对你的模型做出一个富有成效的决定。更多细节请参考文章。
注意:-在任何其他来源中,混淆矩阵的表示可以不同。
导入一些必要的库
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_confusion_matrix
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_digits
为此,我们将使用数字数据集。将数据集加载到 Pandas 数据框中,并分离为预测变量和响应变量。
db=load_digits()df = pd.DataFrame(data= np.c_[db['data'], db['target']])df=df.rename(columns={64:'target'})X = df.drop('target',axis=1)y = df['target']
将数据分成训练集和测试集,选择适当的模型并拟合该模型。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)model = LogisticRegression(random_state = 2020)model.fit(X_train, y_train)disp = plot_confusion_matrix(model, X_test, y_test, cmap = "Blues")
来源:我的谷歌 Colab 笔记本
更多细节和示例请参考文档。
我相信这个技巧对你会有用,你会从这篇文章中有所收获。直到那时快乐编码!。
当 Pandas 失败时,将 Word 和 PDF 数据导入 Python 的 4 种简单方法
导入非结构化文本/图像数据的实用指南
作为数据科学/分析团队的一员,您可能会遇到许多要在 Python 中导入和分析的文件类型。在理想世界中,我们所有的数据都驻留在基于云的数据库(例如 SQL、NoSQL)中,这些数据库易于查询和提取。然而,在现实世界中,我们很少得到整洁的表格数据。此外,如果我们需要额外的数据(结构化或非结构化的)来增强分析,我们将不可避免地使用不同格式的原始数据文件。
最近,我的团队开始了一个项目,作为第一步,包括将原始数据文件整合成格式。csv,。xlsx,。pdf,。docx、和。doc 。我的第一反应:威武 熊猫 !其中当然处理了*。csv* 和*。xlsx* ,但是关于*。pdf* 和*。docx* ,我们将不得不探索超越 熊猫 的可能性。
在这篇博客中,我将分享我的技巧和诀窍,以帮助您轻松地导入 PDF 和 Word 文档(到 Python 中),以防它出现在您自己的工作中,尤其是在您的 NLP 自然语言处理项目中。所有样本数据文件都可以公开访问,文件副本以及相应的下载链接可以在 my Github repo 中找到。
作为最常用的文档工具之一,MS Word 经常是人们编写和共享文本的首选。对于带有。 docx 扩展,Python 模块docx是一个得心应手的工具,下面展示如何导入*。docx* 段落只有 2 行代码,
现在让我们打印出输出信息,
docx 返回的信息和示例段落
正如我们所看到的,返回的是一个字符串/句子的列表,因此我们可以利用字符串处理技术和正则表达式来获取文本数据以备进一步分析(例如,NLP)。
2。win 32 com→用 MS Word 工作。doc 文件
尽管很容易使用,python-docx 模块不能接受老化的 T2。doc 分机,信不信由你,。doc 文件仍然是许多利益相关者的首选文字处理器(尽管有*)。docx* 已经存在十多年了)。如果在这种情况下,转换文件类型不是一个选项,我们可以求助于win32 com . client包中的几个技巧。
基本技术是首先启动一个 Word 应用程序作为活动文档,然后读取 Python 中的内容/段落。下面定义的函数 docReader()展示了如何(并且完全烘焙的代码片段链接到这里),
运行这个函数后,我们应该会看到与第 1 部分相同的输出。两个小技巧: (1)我们设置字。Visible = False 隐藏物理文件,这样所有的处理工作都在后台完成;(2)参数 doc_file_name 需要完整的文件路径,而不仅仅是文件名。否则,函数文档。Open()不会识别文件,即使将工作目录设置为当前文件夹。
加入我们的 YouTube 社区🎦 【数据与 Kat 谈判】 😄
现在,让我们来看看 PDF 文件,
3。 **Pdfminer(代替 pypdf F2)→使用 PDF 文本
说到在 Python 中处理 PDF 文件,大家熟知的模块py PDF 2大概会是包括我自己在内的大部分分析师最初的尝试。因此,我使用 PyPDF2 (完整代码可在我的 Github repo 中获得)对其进行编码,这给出了文本输出,如下所示。
嗯,显然这看起来不对,因为所有的空格都不见了!没有合适的空格,我们就无法正确解析字符串。
事实上,这个例子揭示了 PyPDF2 中的函数 extractText()的一个警告:它对于包含复杂文本或不可打印的空格字符的 PDF 执行得不好。因此,让我们切换到 pdfminer 并探索如何将这个 pdf 文本导入,
现在,输出看起来好多了,可以用文本挖掘技术轻松清理,
4。Pdf 2 image+Pytesseract→处理 PDF 扫描图像
对于数据科学家来说更复杂的是(当然), pdf 可以(并且经常)由扫描图像代替文本文档创建;因此,它们不能被 pdf 阅读器呈现为纯文本,不管它们被组织得多么整齐。
在这种情况下,我发现的最佳技术是首先显式地提取图像,然后用 Python 读取和解析这些图像。我们将用模块pdf 2 image和pytesract来实现这个想法。 如果后者听起来比较陌生,那么pytesserac是 Python 的 OCR 光学字符识别工具,可以识别和读取图像中嵌入的文字。现在,这是基本功能,
在输出中,您应该会看到如下所示的扫描图像文本:
PREFACE In 1939 the Yorkshire Parish Register Society, of which the Parish Register Section of the Yorkshire Archaeological Society is the successor (the publications having been issued in numerical sequence without any break) published as its Volume No. 108 the entries in the Register of Wensley Parish Church from 1538 to 1700 inclusive. These entries comprised the first 110 pages (and a few lines of p. 111) of the oldest register at Wensley.
任务完成!另外,您现在还知道了如何从图像中提取数据,即pytesserac模块中的 image_to_string()。
**注意:**要使 宇宙魔方 模块成功运行,您可能需要执行额外的配置步骤,包括安装 poppler 和 宇宙魔方 包。同样,请在 my Github 这里随意抓取更健壮的实现和详细的配置列表。
最后,Greg Horton 提到了一个数据科学笑话,他在文章中谈到了数据争论中的 80-20 法则:
数据科学家花 80%的时间处理数据准备问题,另外 20%的时间抱怨处理数据准备问题需要多长时间。
通过经历从 Word 和 PDF 文件中抓取文本的不同方式,我希望这个博客可以让你的 80%变得更容易/不那么无聊,这样你就不会拔头发,也可以减少另外 20%,这样你就可以花更多的时间阅读有趣的中等文章。
最后提示:一旦完成了对文件的处理,关闭连接以便其他应用程序可以访问该文件总是一个好的编码实践。这就是为什么你在上面每个函数的末尾看到了close()
方法。😃
想要更多的数据科学和编程技巧?使用 我的链接 注册 Medium,获得我所有内容的完全访问权限。
还订阅我新创建的 YouTube 频道 《数据与吉谈》
喜欢这个博客吗?这是另一个你可能喜欢的数据科学博客:
* [## 每个数据科学家都应该知道的 6 个 SQL 技巧
提高分析效率的 SQL 技巧
towardsdatascience.com](/6-sql-tricks-every-data-scientist-should-know-f84be499aea5)*
提升数据科学项目的 4 种软件开发技术
让您的项目更清晰、更高效、更专业
软件开发是开发人员和程序员设计、编写、记录和测试代码的过程。无论您使用什么编程语言,或者您的目标应用领域是什么,遵循良好软件开发的特定指导方针对于构建高质量、可维护的项目是必不可少的。
数据科学项目——可能比其他类型的软件项目更多——应该以可维护性的心态来构建。这是因为,在大多数数据科学项目中,数据不是恒定的,而是频繁更新的。此外,任何数据科学项目都期望它具有可扩展性和抗崩溃性。它应该不受数据中任何错误的影响。
因为在数据科学项目中,代码的每一个部分都是为适应特定的数据形式而构建的,所以如果给代码一个特定的数据,它就可能会崩溃。当然,无论输入什么数据,您都不希望代码出错。因此,在设计和构建代码时,要记住一些事情,以使您的代码更具弹性。
要设计和编写好的、稳定的代码,有许多准则可以遵循。然而,在本文中,我们将重点关注我认为的构建可靠的数据科学项目所需的 5 个最重要的规则或技能。
所以,让我们开门见山吧…
编写干净、高质量代码的 5 个简单步骤
towardsdatascience.com](/level-up-your-code-e1424fff031d)
文件编制
不提到文档,就谈不上好的软件。现在,有两个步骤来保持代码的整洁和良好的文档记录。第一步是注释你的代码。注释对于阅读你的代码的人来说是至关重要的,更重要的是,通过你写代码时的思考过程,对于你未来的自我来说也是至关重要的。
评论需要简单,不超过两句,开门见山。无论何时定义一个类或函数,或者创建自己的模块,都不要忘记编写一个描述性的 docstring。写评论时,请始终记住:
注释不是用来向人们解释代码的;代码是用来向计算机解释注释的。
一旦你的代码和注释完成了——好吧,暂时因为代码永远不会完成——你需要为你的代码建立足够的文档。文档通常是用简单的英语编写的代码的外部解释。文档通常使用文档处理工具创建,例如 Sphinx 和 [DocUtils](http://docutils.sourceforge.net/ reStructuredText) 。文档通常是项目网站的一部分。
说到最佳实践,在开始编码之前开始编写文档是一个好主意。它将作为需要做什么的指南。不幸的是,我们大多数人——包括我自己——都不遵守这条规则。然而,我们都需要开始实践它。
测试
我们写代码的时候,往往是基于一些变量和数据集来写的。然而,很常见的是,您的代码可能包含一些只会在某些特定情况下或特定数据集上出现的错误。因此,在部署应用程序之前对其进行测试至关重要。
但是,测试可能会变得非常复杂,尤其是当涉及到数据科学项目时。通常,数据科学项目使用其他数据科学家的评论进行测试,因为大多数众所周知的测试方法很难应用于数据科学项目。
这是因为数据的简单变化可能会导致代码性能的显著变化。多年来,研究人员和开发人员一直在寻找测试数据科学项目的最佳方式。他们发现测试数据科学应用程序的最佳方式是通过单元测试。
单元测试是一种测试类型,用于检测可能中断程序流程的变化。他们帮助维护和更改代码。有许多 Python 测试库可以用来执行单元测试。
- Unittest 是 Python 中的内置库,用于执行单元测试。Unittest 通常被称为 PyUnit,这是一种创建单元测试程序的简单方法。
- Pytest 是一个完整的测试工具——这是我最喜欢的。Pytest 有一个简单直接的方法来构建和使用单元测试。
- 假设 是一个单元测试生成工具。开发假设的目标是帮助开发人员创建和使用单元测试来处理代码的边缘情况。
数据管理
具体到数据科学项目,在处理数据时,我们需要注意的一件事是管理我们的数据。我们需要考虑很多事情,比如你的数据是怎么创建的?它有多大?是每次都加载还是存储在内存里?
当处理数据时,我们需要非常小心内存管理以及代码如何与数据交互。需要考虑的一点是 Python 函数调用如何影响代码的内存使用。有时候,函数调用占用的内存比你意识到的要多。
克服这个问题的一个方法是使用 Python 的自动内存管理功能。下面是 Python 处理函数调用的方式:
- 每次你调用一个函数和对象时,就用一个计数器计算创建的位数;使用此功能。
- 每当我们使用或引用这个函数时,计数器就增加 1。
- 当代码引用离开函数对象时,计数器递减 1,直到达到 0。一旦完成,内存将被释放。
使用 Panda 处理大数据
towardsdatascience.com](/what-to-do-when-your-data-is-too-big-for-your-memory-65c84c600585)
如果您想知道如何编写使用这种自动内存管理的代码,请不要再想了。 Itamar Turner 提出了 3 种不同的方法,可以让你的功能更有内存效率:
- 尽量减少局部变量的使用。
- 如果不能,那么重用变量,而不是定义新的变量。
- 转移占用大量内存的函数的对象所有权。
使用特定领域的工具
最后但同样重要的是,为了帮助您构建弹性项目,请使用专门为数据科学构建的工具。当然还有大家熟知的工具,比如 IPython,Pandas,Numpy,Matplotlib。
但是,让我来介绍两个不太为人所知的工具:
- graph lab Create**😗*是一个用于快速构建大规模、高性能数据产品的 Python 库。您可以使用 GraphLab Create 来应用最先进的机器学习算法,如深度学习、提升树和因式分解。您可以通过可视化执行数据探索,并且可以使用预测服务快速部署项目。
- Fil: 是用于数据科学的 Python 内存管理工具。您可以使用 Fil 来测量 Jupyter 笔记本中的内存使用峰值。以及测量普通(非基于 Jupyter 的)Python 脚本的内存使用峰值,并调试代码中的内存不足崩溃。此外,Fil 有助于显著减少内存使用。
外卖食品
如今,建立一个好的数据科学项目并不足以让你脱颖而出。你需要你的项目具有抗崩溃性和内存效率。这就是为什么使用一些软件开发技巧;你可以让你的数据科学项目更上一层楼,让它脱颖而出。
我们在本文中讨论的软件开发技能是:
- 高效的记录和评论。
- 测试,测试,然后更多的测试。
- 明智的数据和内存管理。
- 可以简化您的工作并提高项目效率的特殊工具。
然而,我们没有谈到的是任何开发人员都必须获得的最重要的技能,即始终致力于改进您的技能和知识库,以及跟上最新技术和工具的能力。
用 Python 和 Bin 打包轻松分配资源的🧱 4 步骤
瞬间解决一维资源分配问题
【图片由作者提供】
在本文中,我们将使用 Python 和 binpacking 包来解决一个最常见的 NP-hard 问题:Bin Packing 问题。 🗑️
具体来说,通过贪婪的方法,我们将根据价值/分数在 n 个项目上分配 m 个资源。开始吧!
0.问题的简要介绍
假设您有 m 个不同重量(或值)的物品,您需要将这些物品放入 n 个相等的平衡箱(图 1 )。
💡这就是通常所说的 箱柜装箱问题 。
BPP 被计算复杂性理论归类为 NP-hard 问题,简而言之,其难度不亚于在 N 非确定性 P 多项式时间 NP 问题中最难解决的问题。
很简单,不是吗? …🤔
图 1-小心:尽管使用了多边形,但问题仍然是一维的,因为所有矩形的宽度都是相同的。【图片作者】
虽然这些话看似近乎理解(我可以向你发誓前面的句子没有打字错误),但是 装箱问题在日常生活中经常发生 。
以下是一些例子:
- 🛒:你在超市。你刚刚付了款,你要把所有的 m 产品放在数量最少的 n 袋子里,尽量装得满满的,均衡的。
- 👔你是一个项目经理,需要人员 m 资源进行 n 项目。假设同样复杂的项目,你的目标将- 可能- 是通过了解你的资源的估计贡献值来实现平衡的团队。
- 🚣♂️:你正计划和几个朋友去乘船旅行。不幸的是,船是有最大载重量的。你必须将你的 m 个朋友平均分配到由你支配的 n 艘船上。
是的。顾名思义 每当我们要用别的东西 来“填充”某物的时候,装箱问题就出现了。
正如你所想象的,有 n 维变量,这些变量考虑了其他有用的信息,如 体积 或 成本 ( 背包问题)。
1.摆桌子的时间到了:打包
让我们开始预热引擎。我们将只使用这两个包:
- matplotlib :超流行的可视化软件包;
- binpacking :一个贪心的 binpacking 问题求解器包;
要安装它们,只需在命令提示符中输入💻:
pip install binpacking matplotlib
等你瞧。搞定了。
2.导入包
现在让我们打开我们最喜欢的笔记本或者 IDE ,通过导入这两个包开始代码。
3.将笔放在纸上:参数
下面是我最喜欢的一个步骤: 参数定义 。
🗑️让我们首先定义我们想要的 个仓 的数量,然后字典包含资源 的估计/测量 值。
我们将 21 个资源 分配给 6 个项目 的员工。👨👩👧👦
字典的每个关键字将对应于该资源的贡献值的估计。是的, 一种分数的排序 。
4.打开箱子包装问题
考虑到在 NP-hard 问题、 中寻找最优解的极端复杂性,没有贪婪的方法 我们不可能成功。这里开始使用 binpacking package。
🧮贪婪算法允许以近似但可接受的方式找到困难问题的解决方案。简而言之,随着贪婪的逼近,我们以牺牲问题的准确性为代价来支付问题的解决方案。
好的,我喜欢。那是给我们的。 ✌️
该软件包的使用非常简单。
搞定了。难以置信的无痛。让我们试着 以不同的方式可视化结果 使用列表理解清除值。
我们配备了所有资源并创建了 6 个(可能是)平衡小组。
好了,不过现在 是时候看看算法表现如何了 。让我们看看这些群体之间是否真正平衡。
5.让我们探索结果
我们期望的是 6 个组,每个组的总值非常接近于总值除以组数的和。
这样就很容易计算出每组的 理想值 和每组的 值**。**
📊让我们试着给他们看看。
下面是图表: 红色横线 代表每组 理想平均期望值(图 2 )。
图 2 -这是我们的垃圾箱。它们的值都在理想平均值(红线)左右。【图片由作者提供】
Ta daa!正如我们所料,我们建立了 6 个平衡组。每个组实际上都有一个非常接近理想值的分数。我认为目标已经达到。🥳**
记住,事实上,我们得到的是一个与我们的问题兼容的 的 解,但是 不是最优的 ,因为我们使用了一个贪婪的算法。**
-1.结论
总之 装箱问题 真的是日常生活中很常见的。**
一些精神食粮?如果我们想试着考虑物品 的 成本呢?如果我们还想整合第二维或第三维呢?简单的 1D 垃圾桶包装可能会有点紧。
我认为我们应该在接下来的文章中谈论它…所以,敬请期待!😉
🤝如有任何疑问、反馈或协作要求,请随时 联系我Linkedin。我会很高兴和你聊天!
👉要获得更多类似的内容,并关注即将发布的文章,请不要忘记在 Medium 上 关注我。
🙏如需参考本文,请联系我。谢谢你。
4 个非常有用的 Python 特性
四个不太知名但非常有用的 Python 功能
克里斯·里德在 Unsplash 上拍摄的照片
ython 是一种非常易读的语言,越来越成为许多程序员的首选。然而,这种易用性和大规模采用导致一些真正有用的功能消失在噪音中。
这里有四个超级有用的功能,在过去的几个月里,我越来越多地使用它们。
( 意大利文 )
列表方法:追加和扩展
。append() 将参数作为单个元素添加到给定列表的末尾。例如:
x = [1, 2, 3]
y = [4, 5]
x.append(y)
print(x)
**[Out]:** [1, 2, 3, [4, 5]]
。extend() 遍历参数并将每个元素添加到列表中。例如:
x = [1, 2, 3]
y = [4, 5]
x.extend(y)
print(x)
**[Out]:** [1, 2, 3, 4, 5]
使用加法运算符 + 和扩展也有区别。x + y
给出了一个新的列表,而x.extend(y)
对原来的列表进行了变异。
收益与回报
yield 语句向调用者发回一个值,但保持函数的状态。这意味着下一次调用这个函数时,它将从它结束的地方继续。
我们在生成器函数中使用这个功能——例如,让我们使用yield
构建一个生成器,使用return
构建一个等价的函数:
def gen_yield():
yield "hel"
yield "lo "
yield "wor"
yield "ld!"def func_return():
return "hel"
return "lo "
return "wor"
return "ld!"
如果我们打印这些生成器给出的值,首先使用**yield**
:
for value in generator_yield():
print(value, end="")
**[Out]:** "hello world!"
现在用**return**
:
for value in generator_return():
print(value, end="")
**[Out]:** "hel"
打印(开始,结束)
另一个,我刚刚在上面用过。print
函数实际上由要打印的字符串对象和一个end
组成!
我在快速代码中经常使用这种方法,通常是当我想迭代地打印出变量而不为每个变量换行时,例如:
generator = (x for x in [1, 2, 3])
for _ in generator:
print(_, end=" ")
**[Out]:** "1 2 3 "
与普通打印相比:
for _ in generator:
print(_)**[Out]:** "1"
"2"
"3"
map 和 lambda
的。map()函数允许我们将一个 iterable 映射到一个函数。例如:
def add2(x):
return x + 2list(**map(add2, [1, 2, 3])**)
**[Out]:** [3, 4, 5]
我最喜欢的是我们也可以使用 lambda 函数,就像这样:
results = [(0.1, 0.2), (0.3, 0.1), (0.2, 0.4)]list(**map(lambda x: x[0], results)**)
**[Out]:** [0.1, 0.3, 0.2]
在过去的几个月里,我一直在使用这四种方法——不久前,我要么没有意识到,要么根本就没有使用其中的任何一种。
如果你最近有什么不常用但有用的功能,请告诉我,我很感兴趣!欢迎通过推特或在下面的评论中联系我们。如果你想要更多这样的内容,我也会在 YouTube 上发布。
感谢阅读!
让你在数据科学职业生涯中不可或缺的 4 种超能力
了解数据科学行业的这些最大挑战,以避免职业生涯停滞不前
更新:你可以在 日语 阅读这篇文章(感谢 Koki Yoshimoto!)
人们在数据科学职业生涯中遇到的挑战远比他们进入 it 行业时面临的挑战严重。
通常,工作期望和实际责任之间存在很大的不匹配。如果你有幸在你向往的领域工作,在数据科学项目中与其他角色合作可能是一场真正的斗争。
拔牙可能比应付项目经理的日常要求更容易。做好这一切,你可能会发现你的解决方案没有被用户触及。你可能会奇怪,为什么没有人理解或使用如此显而易见的东西。
在你的数据科学职业生涯的早期,所有这些都可能导致生存危机。对于这个领域的许多专业人士来说,职业停滞的风险很高。你如何解决这个问题?
我将分享数据科学项目中导致你许多个人奋斗的 4 大棘手挑战。基于我们在 Gramener 的工作经验,我们将讨论它们对您的意义。以及如何粉碎它们,使它们在您的项目和数据科学行业中变得不可或缺。
1.提高您处理杂乱数据的能力
数据质量差是数据科学面临的最大挑战之一。坏数据每年给组织造成超过 1500 万美元的损失。你需要干净、结构化的数据来得出大的、有用的、令人惊讶的见解。想不到使用了深度学习技术?然后,你将需要更多的数据,并且这些数据必须被整齐地标记。
在数据科学中,80%的时间花在准备数据上,另外 20%的时间花在抱怨数据上! —柯克·伯恩
您必须学会发现您的业务问题所需的数据的技能。了解如何管理和转换用于分析的数据。是的,数据清理在很大程度上是数据科学家的工作。玩数据,弄脏自己的手。你会发展出一双发现异常的眼睛,模式会开始跃入你的眼帘。
假设您的项目旨在分析客户体验。第一项任务是搜寻所有潜在的数据资产,如客户资料、交易、调查、社交活动。任何与你的业务问题无关的都必须放弃。检查和清理数据,你会丢失更多。这样做几周或几个月,然后你就准备好你的分析了!
2.学习技术,不要担心工具
数据和 AI 景观由马特图尔克。看不懂这个图表?别急,那是题外话!
数据科学行业充斥着数百种工具。没有一种工具能涵盖整个工作流程。每周都会有新的工具诞生。十几家倒闭或被收购。许多公司花费数百万购买企业许可证,却发现它们不再具有吸引力。
这个支离破碎的生态系统给有志之士带来了巨大的挑战。我经常被问到的一个问题是,*“我应该学习 Python 还是 R?PowerBI 还是 D3?”*我一直说工具真的不重要。对技术了如指掌。你可以在几周内将你的知识从一个工具转移到另一个工具。
工具真的不重要。重要的是这个人使用工具的技巧。
例如,要掌握可视化,不要从工具开始。学习信息设计的原则,视觉设计的基础,和色彩理论。然后获取一些真实的数据,通过解题将技巧内化。任何你能得到的可视化工具都可以。不要过度优化。
3.掌握解决现实世界问题的技术应用
奥拉夫·阿伦斯·罗特内在 Unsplash 上的照片
超过 80%的数据科学项目失败。想知道为什么吗?在整个生命周期中都有挑战:从选择错误的业务问题到构建不正确的解决方案。从选择错误的技术到未能将它们传达给用户。数据科学中的每个角色都会导致这些失误。不,这些差距大多不是技术性的。
大多数数据科学项目没有带来业务投资回报,因为它们解决了错误的问题。
这里的共同点是什么?这是技能在商业问题上的拙劣应用。例如,当数据科学家只是想要构建伟大的模型,却忽略了关注他们用户的需求时,这就伤害了项目。不要停留在对某项技术或其背后的数学的直觉上。找到它的相关之处以及应用它需要什么。致力于解决用户的问题。
假设你已经掌握了十几种预测技术。当你的用户需要明天的价格进行交易,但只有一个过去的数据点时,你会选择哪一个?有 100 分或者 10000 分会有变化吗?如果她只需要知道是’持有还是’以市场价卖出怎么办?
4.超越数据和分析技能,在数据分析中取得成功!
公司通常雇佣来学习机器技能。他们投资于数据工程,可能会接受一些可视化和数据素养方面的培训。但是,这个团队是不平衡的,将交付次优的结果。每个数据科学团队都必须具备 5 项技能才能取得有效的项目成果。
在数据科学中实现价值的 5 个关键角色和技能(漫画:www.gramener.com/comicgen)
如果你正在扮演这些角色中的一个,你应该关心这个吗?绝对的。以下是你如何在任何项目中增加影响力的方法。掌握一项技能作为你的核心领域。这是你的主要角色。投资并学习一项次要技能。你应该能够在这一点上作为备份和支持介入。
其他三个呢?获得广泛的熟悉感。你必须能够与他们联系起来,理解痛点,并将他们与你的工作联系起来。做到这一点,你将价值连城!
要在数据分析行业取得成功,你需要的不仅仅是数据和分析
这里的一个关键要点是,数据科学职业生涯中有 5 个角色。不仅仅是“数据科学家”。假设你是一名 ML 工程师。你的第二技能可以是信息设计。了解图表以及如何选择正确的图表。找出用户在视觉上寻找什么,以及它对你正在构建的 UI 有什么意义。
现在是时候让自己变得不可或缺了
数据科学中的每个项目都面临这四个挑战。组织因失败的数据科学投资而损失数百万。客户很担心,因为他们的业务问题仍未解决。数据科学的领导者和管理者都吓坏了,因为项目的失败率是疯狂的。
所有这些通常会转化为对数据科学专业人员的过度需求和高压力。理解这些大的挑战对你来说是一个很好的起点。同情你的项目团队和领导。
你在这里学到的四个技巧将帮助你迎头应对挑战。开始实践它们,你会发现你的工作得到了更多的信任和认可。很快,你会变得不可或缺,在你的职业生涯中上升得更快。
祝你在项目中战胜这些挑战!