optimus是pyspark中缺少的用于以分布式方式清理和预处理数据的框架。
optimuspyspark的Python项目详细描述
要启动实时笔记本服务器以使用活页夹或colab测试optimus,请单击以下徽章之一:
optimus是使用apache spark(pyspark)以分布式方式分析、清理、处理和执行ml所缺少的框架。
安装(PIP):
在终端中键入pip install optimuspyspark
要求
- apache spark=2.4.0
- python=3.6
示例
您可以使用optimus.ipynb" rel="nofollow">笔记本,在10分钟内找到开始工作的基本信息。
此外,您还可以转到"示例"文件夹,找到有关数据清理、数据咀嚼、分析、数据充实以及如何创建ML和DL模型的特定笔记本。
除此之外,还要检查备忘单
文档
反馈
反馈是推动擎天柱未来发展的动力,因此请花几分钟时间来帮助制定擎天柱的路线图: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()
也可以从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()
清洁和处理
创建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()
进入这个
fromoptimusimportOptimusop=Optimus(verbose=True)1
请注意,您可以使用optimus函数和spark函数(.withcolumn()
),同时所有df函数都可以在spark数据帧中使用。要了解Optimus的所有功能,请转到本笔记本
处理列输出
使用optimus,您可以处理将要处理的转换中的输出列。
fromoptimusimportOptimusop=Optimus(verbose=True)2
如果字符串被传递到输入列并且未定义输出列,则操作结果将保存在同一输入列中
fromoptimusimportOptimusop=Optimus(verbose=True)3
如果a字符串传递给输入列,a字符串传递给输出列,则输出将保存在输出列
fromoptimusimportOptimusop=Optimus(verbose=True)4
如果一个列表被传递到输入列并且一个字符串被传递到输出列optimus将把列表与列表中的每个元素连接起来,以创建一个新的列名和输出
fromoptimusimportOptimusop=Optimus(verbose=True)5
如果将列表传递给输入列,并将列表传入传出列Optimus将输出相应输出列中的每个输入列
fromoptimusimportOptimusop=Optimus(verbose=True)6
自定义函数
spark有多种方法来转换数据,如rdd、列表达式、udf和pandas udf。在optimus中,我们创建了apply()
和apply-expr
来处理所有的实现复杂性。
在这里,您可以对"billingid"列应用一个函数。将1和2相加为当前列值。全部由熊猫UDF提供动力
fromoptimusimportOptimusop=Optimus(verbose=True)7
如果要应用列表达式,请按如下方式使用apply-expr()
。在本例中,我们传递一个参数10来除以实际的列值
fromoptimusimportOptimusop=Optimus(verbose=True)8
如果您愿意,可以将表格输出改回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
frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)3
处理日期
对于日期数据类型,optimus可以为您提供额外的信息
frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)4
剖面仪速度
通过相对误差和近似计数参数,您可以控制如何计算某些操作,以便在需要时加快分析速度。
相对误差:分位数离散计算的相对误差。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
frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)8
frompyspark.sqlimportSparkSessionfromoptimusimportOptimusspark=SparkSession.builder.appName('optimus').getOrCreate()op=Optimus(spark)9
#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
#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
使用其他绘图库
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
使用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
#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
#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
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
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
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
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
rf_模型变量包含用于分析的随机森林模型。
对擎天柱的贡献
贡献远远超过请求和承诺。我们很高兴收到任何形式的捐款
包括:
- 文档更新、增强、设计或错误修复。
- 拼写或语法修正。
- readme.md更正或重新设计。
- 添加单元或功能性测试
- 测试GitHub问题—特别是确定某个问题是否仍然存在或可复制。
- 在Twitter上搜索optimusdata并帮助其他需要帮助的人。
- 撰写、谈论或创建关于optimus及其许多功能的教程。 <帮助>其他关于不和谐的信息
支持者
[成为支持者]并在github上的自述文件中获取您的图像,并链接到您的站点。
赞助商
[成为赞助商]并在GitHub上的自述文件中获取您的图像,同时链接到您的网站。
核心团队
阿根尼斯·莱昂和法维奥·巴斯克斯
贡献者:
以下是让擎天柱成为可能的神奇人物:
>>>>/a>>/a>>>>>>>>>/a>>>>>>>>>>>>>>>
许可证:
apache 2.0(阿帕奇2.0版)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<83235362f323031352f30392f30312f393430335F636972636C655F3531327835312E706E67" />