optimus是pyspark中缺少的用于以分布式方式清理和预处理数据的框架。

optimuspyspark的Python项目详细描述


logo optimus

pypi versionbuild statusdocumentation statusBuilt_by Ironupdatesgithub releasecodacy badgecoverage status在awesome data science中提到discord

downloadsdownloadsdownloads

要启动实时笔记本服务器以使用活页夹或colab测试optimus,请单击以下徽章之一:

bindercolab

optimus是使用apache spark(pyspark)以分布式方式分析、清理、处理和执行ml所缺少的框架。

安装(PIP):

在终端中键入pip install optimuspyspark

要求

  • apache spark=2.4.0
  • python=3.6

示例

您可以使用optimus.ipynb" rel="nofollow">笔记本,在10分钟内找到开始工作的基本信息。

此外,您还可以转到"示例"文件夹,找到有关数据清理、数据咀嚼、分析、数据充实以及如何创建ML和DL模型的特定笔记本。

除此之外,还要检查备忘单

文档

documentation

反馈

反馈是推动擎天柱未来发展的动力,因此请花几分钟时间来帮助制定擎天柱的路线图:http://bit.ly/optimus嫒survey

如果您想要建议或功能请求,请使用https://github.com/ironmussa/optimus/issues" rel="nofollow">https://github.com/ironmussa/optimus/issues

启动擎天柱

fromoptimusimportOptimusop=Optimus(verbose=True)

您还可以使用已创建的Spark会话:

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)

加载数据

现在optimus可以从本地文件或url加载csv、json、parquet、avro、excel格式的数据。

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")

您还可以从Oracle、Redshit、MySQL和Postgres加载数据。请参见数据库连接

保存数据

#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")

您还可以将数据保存到Oracle、Redshit、MySQL和Postgres。请参见数据库连接

处理火花罐、包装和储存库

使用optimus很容易加载jar、包和repo。你可以像初始化optimus/spark那样

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)

创建数据帧

您还可以从头开始创建数据帧

frompyspark.sql.typesimport*fromdatetimeimportdate,datetimedf=op.create.df([("names","str",True),("height(ft)","int",True),("function","str",True),("rank","int",True),("age","int",True),("weight(t)","float",True),("japanese name",ArrayType(StringType()),True),("last position seen","str",True),("date arrival","str",True),("last date seen","str",True),("attributes",ArrayType(FloatType()),True),("DateType"),("Tiemstamp"),("Cybertronian","bool",True),("NullType","null",True),],[("Optim'us",28,"Leader",10,5000000,4.3,["Inochi","Convoy"],"19.442735,-99.201111","1980/04/10","2016/09/10",[8.5344,4300.0],date(2016,9,10),datetime(2014,6,24),True,None),("bumbl#ebéé  ",17,"Espionage",7,5000000,2.0,["Bumble","Goldback"],"10.642707,-71.612534","1980/04/10","2015/08/10",[5.334,2000.0],date(2015,8,10),datetime(2014,6,24),True,None),("ironhide&",26,"Security",7,5000000,4.0,["Roadbuster"],"37.789563,-122.400356","1980/04/10","2014/07/10",[7.9248,4000.0],date(2014,6,24),datetime(2014,6,24),True,None),("Jazz",13,"First Lieutenant",8,5000000,1.80,["Meister"],"33.670666,-117.841553","1980/04/10","2013/06/10",[3.9624,1800.0],date(2013,6,24),datetime(2014,6,24),True,None),("Megatron",None,"None",10,5000000,5.70,["Megatron"],None,"1980/04/10","2012/05/10",[None,5700.0],date(2012,5,10),datetime(2014,6,24),True,None),("Metroplex_)^$",300,"Battle Station",8,5000000,None,["Metroflex"],None,"1980/04/10","2011/04/10",[91.44,None],date(2011,4,10),datetime(2014,6,24),True,None),],infer_schema=True).h_repartition(1)

使用.table()可以很好地显示数据。您还有其他信息,如列号、列数据类型和标记的空格

df.table()

 src=

也可以从panda数据框创建数据框

importpandasaspdpdf=pd.DataFrame({'A':{0:'a',1:'b',2:'c',3:'d'},'B':{0:1,1:3,2:5,3:7},'C':{0:2,1:4,2:6,3:None},'D':{0:'1980/04/10',1:'1980/04/10',2:'1980/04/10',3:'1980/04/10'},})s_pdf=op.create.df(pdf=pdf)s_pdf.table()

 src=

清洁和处理

创建optimus v2是为了轻松地清理数据。这个api被设计成对新来的人来说非常容易,对来自熊猫的人来说也非常熟悉。 optimus扩展了spark数据帧功能,添加了.rows和.cols属性。

例如,您可以从URL加载数据,转换并应用一些预定义的清理功能:

# This is a custom functiondeffunc(value,arg):return"this was a number"new_df=df\
    .rows.sort("rank","desc")\
    .withColumn('new_age',df.age)\
    .cols.lower(["names","function"])\
    .cols.date_transform("date arrival","yyyy/MM/dd","dd-MM-YYYY")\
    .cols.years_between("date arrival","dd-MM-YYYY",output_cols="from arrival")\
    .cols.remove_accents("names")\
    .cols.remove_special_chars("names")\
    .rows.drop(df["rank"]>8)\
    .cols.rename(str.lower)\
    .cols.trim("*")\
    .cols.unnest("japanese name",output_cols="other names")\
    .cols.unnest("last position seen",separator=",",output_cols="pos")\
    .cols.drop(["last position seen","japanese name","date arrival","cybertronian","nulltype"])

您可以对此进行转换

df.table()

 src=

进入这个

fromoptimusimportOptimusop=Optimus(verbose=True)
1

 src=

请注意,您可以使用optimus函数和spark函数(.withcolumn()),同时所有df函数都可以在spark数据帧中使用。要了解Optimus的所有功能,请转到本笔记本

处理列输出

使用optimus,您可以处理将要处理的转换中的输出列。

fromoptimusimportOptimusop=Optimus(verbose=True)
2

如果字符串被传递到输入列并且未定义输出列,则操作结果将保存在同一输入列中

fromoptimusimportOptimusop=Optimus(verbose=True)
3

 src=

如果a字符串传递给输入列,a字符串传递给输出列,则输出将保存在输出列

fromoptimusimportOptimusop=Optimus(verbose=True)
4

 src=

如果一个列表被传递到输入列并且一个字符串被传递到输出列optimus将把列表与列表中的每个元素连接起来,以创建一个新的列名和输出

fromoptimusimportOptimusop=Optimus(verbose=True)
5

 src=

如果将列表传递给输入列,并将列表传入传出列Optimus将输出相应输出列中的每个输入列

fromoptimusimportOptimusop=Optimus(verbose=True)
6

 src=

自定义函数

spark有多种方法来转换数据,如rdd、列表达式、udf和pandas udf。在optimus中,我们创建了apply()apply-expr来处理所有的实现复杂性。

在这里,您可以对"billingid"列应用一个函数。将1和2相加为当前列值。全部由熊猫UDF提供动力

fromoptimusimportOptimusop=Optimus(verbose=True)
7

 src=

如果要应用列表达式,请按如下方式使用apply-expr()。在本例中,我们传递一个参数10来除以实际的列值

fromoptimusimportOptimusop=Optimus(verbose=True)
8

 src=

如果您愿意,可以将表格输出改回ascii格式

fromoptimusimportOptimusop=Optimus(verbose=True)
9

要返回HTML,请执行以下操作:

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
0

数据分析

optimus附带了一个强大而独特的数据分析器。除了基本和先进的统计数据,如最小,最大,峰度,疯狂等, 它还让您知道每一列都有什么类型的数据。例如,如果字符串列有string、integer、float、bool、date,optimus可以为您提供关于数据的唯一概述。 只需运行df.profile("*"来分析所有列。如需有关探查器的详细信息,请转到本笔记本。

让我们加载一个"大"数据集

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
1

数字

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
2

 src=

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
3

 src=

处理日期

对于日期数据类型,optimus可以为您提供额外的信息

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
4

 src=

剖面仪速度

通过相对误差近似计数参数,您可以控制如何计算某些操作,以便在需要时加快分析速度。

相对误差:分位数离散计算的相对误差。1更快,0更慢

近似计数:使用近似计数不重复不重复近似计数不同更快

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
5

绘图

除了直方图和频率图,还有散点图和方框图。全部由pyspark的apache提供支持

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
6

您可以输出到笔记本或作为图像输出

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
7

 src=

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
8

 src=

frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)
9

 src=

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
0

 src=

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
1

 src=

使用其他绘图库

optimus有一个很小的api,因此您可以使用任何绘图库。例如,您可以使用df.cols.scatter()df.cols.frequency()df.cols.boxplot()df.cols.hist()输出JSON,您可以对其进行处理以使数据适应任何打印库。

异常值

使用tukey获取ouliers

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
2

 src=

使用tukey删除异常值

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
3

 src=

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
4

您也可以使用z_u score、modified_u z_u score或mad

#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
5

数据库连接

optimus有方便的工具连接到数据库并提取信息。optimus可以处理红移、postgres、oracle和mysql。

fromoptimusimportOptimusop=Optimus(verbose=True)
#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
7
#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
8
#csvdf=op.load.csv("../examples/data/foo.csv")#json# Use a local filedf=op.load.json("../examples/data/foo.json")# Use a urldf=op.load.json("https://raw.githubusercontent.com/ironmussa/Optimus/master/examples/data/foo.json")# parquetdf=op.load.parquet("../examples/data/foo.parquet")# avro# df = op.load.avro("../examples/data/foo.avro").table(5)# excel df=op.load.excel("../examples/data/titanic3.xls")
9
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
0

数据丰富

您可以使用optimus连接到任何外部api来丰富您的数据。optimus使用mongodb下载数据,然后将其与spark数据框架合并。您需要安装MongoDB

让我们加载一个可以丰富的小数据集

#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
1
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
2
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
3
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
4

imgalt=" src="https://warehouse camo.cmh1.psfhosted.org/18a8105b58f9446859fd0ed41fec0e5de92ceb61/726561646d652f696d616765732f7461626c65372e706e67" />

群集字符串

optimus实现了一些对字符串进行集群的功能。我们从OpenRefine获得Graet灵感

以下是其网站上的报价:

在openrefine中,集群指的是"寻找不同值的组,这些组可能是同一事物的替代表示"。例如,"new york"和"new york"这两个字符串很可能指的是同一个概念,只是有大写差异。同样,"哥德尔"和"哥德尔"可能指的是同一个人。"

有关更多信息,请参见: https://github.com/openrefine/openrefine/wiki/clustering-in-depth

键盘锁定

#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
5
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
6
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
7

 src=

#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
8
#csvdf.save.csv("data/foo.csv")# jsondf.save.json("data/foo.json")# parquetdf.save.parquet("data/foo.parquet")# avro#df.save.avro("examples/data/foo.avro")
9

 src=

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
0

最近邻方法

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
1

 src=

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
2

 src=

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
3

 src=

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
4

机器学习

机器学习是最后一步,也是大多数数据科学工作流程的目标。

apache spark创建了一个名为mllib的库,在那里他们为机器学习编写了很棒的算法。现在 使用ml库,我们可以利用dataframe api及其优化功能轻松创建机器学习管道。

尽管这项任务不是很难,但也不容易。大多数机器学习模型在spark上的工作方式 并不简单,它们需要大量的特性工程才能工作。这就是为什么我们创建了特征工程 擎天柱内部部分。

随机森林模型是机器学习中最好的"树"模型之一。创建一个射频模型 一行?使用擎天柱非常简单。

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
5
op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
6

这将创建一个包含随机林模型预测的数据帧。

因此,让我们看看与实际标签相比的预测:

op=Optimus(repositories="myrepo",packages="org.apache.spark:spark-avro_2.12:2.4.3",jars="my.jar",driver_class_path="this_is_a_jar_class_path.jar",verbose=True)
7

 src=

rf_模型变量包含用于分析的随机森林模型。

对擎天柱的贡献

贡献远远超过请求和承诺。我们很高兴收到任何形式的捐款
包括:

支持者

[成为支持者]并在github上的自述文件中获取您的图像,并链接到您的站点。
opencollective

赞助商

[成为赞助商]并在GitHub上的自述文件中获取您的图像,同时链接到您的网站。
opencollective

核心团队

阿根尼斯·莱昂和法维奥·巴斯克斯

贡献者:

以下是让擎天柱成为可能的神奇人物:

012>>>3>/a>>/a>>>4>>>>>>/a>>>>>>>>>>>>>>>

许可证:

apache 2.0(阿帕奇2.0版)

logo iron

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<83235362f323031352f30392f30312f393430335F636972636C655F3531327835312E706E67" />

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用DBFlow进行迁移?   java无法从socket读取数据   java在JButton上使用鼠标运动监听器?   元素的java ArrayList链接和get IndexOutOfBoundsException   javascript如何在Java脚本中从ajax调用解析JSON对象   从数据库中获取信息并将其写入JTable。错误:java。lang.IndexOutOfBoundsException:索引:2,大小:2   spring如何使用Java SpringBoot在FCM推送通知中向IOS发送图像通知   java jsoup:解析某个标记的数据,该标记恰好位于某个特定标记之后   java没有HashMap的等式依赖于EntrySet。钥匙套?   未按预期评估java Maven属性(osmavenplugin)   类Java向ArrayList添加了用户输入,需要用另一个ArrayList中的变量分隔   JavaJSF丰富:每行呈现的数据列表?   集合Java 8按属性区分   在Java中,是否可以(静态)导入构造函数或局部变量?   安卓在ubuntu 10上安装java时出错64位   java是否应该hashCode()只使用equals()中使用的不可变字段的子集?   java如何创建ConcurrentMultiMap