加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python,Numpy,Pandas…数据科学家必备排序能力

发布时间:2019-09-13 15:42:48 所属栏目:教程 来源:读芯术
导读:对数据举办分类清算是数据科学家和数据工程师的基本事变。Python会提供很多内置库,优化排序选项。有些库乃至可以同时在GPU上运行。令人诧异的是,一些排序要领并没有行使之前所述的算法范例,其他要领的执行结果也不如预期。 选择行使哪种库和哪类排序算

通过df.sort_values(by = my_column)对Pandas DataFrame举办排序。有很多可用要害字参数。

  • by:str或str of list,required—要排序的名称或名称列表。假如axis为0或index,那by也许会有索引级别和/或列标签。假如axis为1或columns,则by也许含级别和/或索引标签。
  • axis:{0或index,1或columns},默以为0—排序轴。
  • ascending:bool或bool列表,默以为True—按升序与降序排序。指定多个排序次序的列表。假如是bool列表,就必需与by参数长度匹配。
  • inplace:bool,默以为False—假如为True,则直接对其执行操纵。
  • kind:{quicksort,mergesort,heapsort或stable},默认快速排序—选择排序算法。可另拜见ndarray.np.sort相识更多内容。对付DataFrames,此法仅应用于单列或单标签的排序。
  • na_position:{‘first’,‘last’},默认‘last’ - 起首以NaNs作为开头,最后将NaNs作为末了。

凭证沟通的句法对Pandas系罗列办排序。用Series时,不必要输入by要害字,由于列不多。

Pandas用到了Numpy计较法,动下手指即可轻松得到平等优化的排序选项。可是,Pandas操纵必要更多的时刻。

按单列排序时的默认配置是Numpy的quicksort。假如排序进度很慢,那么现实为内省排序的quicksort会变为堆排序。Pandas确保多列排序行使Numpy的mergesort。Numpy中的mergesort现适用的是Timsort和Radix排序算法。这些排序算法都很不变,并且大都列排序中不变排序是很有须要的。

行使Pandas需记着的要害内容:

  • 函数名称:sort_values()。
  • by= column_name或列名列表。
  • “ ascending”是逆转的要害字。
  • 用mergesort举办不变排序。

在举办试探性数据说明时,常发明本身是用Series.value_counts()在Pandas DataFrame中对值举办求和排序的。这是一个代码片断,用于每列常用值的求和和排序。

  1. for c in df.columns:  
  2. print(f"---- {c} ---")  
  3. print(df[c].value_counts().head()) 

Dask,现实上是用于大数据的Pandas,到2019年中期还没有实现并行排序,尽量各人一向在接头这个。

对小数据集举办试探性数据说明,Pandas排序是个不错的选择。当数据很大,想要在GPU上并行搜刮时,你大概会想到TensorFlow或PyTorch。

TensorFlow

Python,Numpy,Pandas…数据科学家必备排序能力

TensorFlow是最受接待的深度进修框架。以下是TensorFlow 2.0的简介。

tf.sort(my_tensor)返回tensor排序副本。可选参数有:

  • axis:{int,optional}待排序轴。默认值为-1,对最后一个轴举办排序。
  • direction:{ascending or descending}—数值排序的偏向。
  • name:{str,optional}—操纵的名称。

tf.sort在幕后行使top_k()要领。top_k行使CUB库的CUDA GPU促使并行性更轻易实现。正如文档所述“CUB为CUDA编程模子的每一项措施都提供了最先辈、可一再操作的软件组件。”TensorFlow通过CUB在GPU上行使基数排序。

为了使GPU可以或许满意TensorFlow 2.0,你必要!pip3 install tensorflow-gpu==2.0.0-beta1。我们会从下面的评述看到,假如你要举办排序,你也许想僵持tensorflow==2.0.0-beta1。

行使下面一小段代码来搜查代码的每一行是否都能在CPU 或GPU中运行:

  1. tf.debugging.set_log_device_placement(True) 

为了详述你想要行使GPU,行使下面代码:

  1. with tf.device('/GPU:0'):  
  2. %time tf.sort(my_tf_tensor) 

行使 with tf.device('/CPU:0'):为了行使CPU。

若是在TensorFlow中事变,tf.sort()长短常直观的影象和行使要领。只需记着direction = descending可转换排序次序。

PyTorch

Python,Numpy,Pandas…数据科学家必备排序能力

torch.sort(my_tensor)返回tensor排序副本。可选参数有:

  • dim:{int,optional} - 待排序维度
  • descending:{bool,optional} - 节制排序次序(升序或降序)。
  • out:{tuple,optional} - (Tensor,LongTensor)的输出元组,可以作为输出缓冲区。

通过将.cuda()粘贴到张量的末端来指定要行使GPU举办排序。

  1. gpu_tensor=my_pytorch_tensor.cuda()  
  2. %time torch.sort(gpu_tensor) 

一些说明表白,假如任何大于100万行乘以100,000列的数据集要排序,PyTorch将通过Thrust操作分段式并行排序。

不幸的是,当我们试图通过Google Colab中的Numpy建设1.1M x 100K随机数据点时,发明内存已不敷。然后实行了416 MB RAM的GCP,仍旧没有内存。

分段排序和位置排序是mergesort的高机能浮现,处理赏罚非匀称随机数据。分段排序使我们可以或许并行排序很多长度可变数组。 https://moderngpu.github.io/segsort.html

Thrust作为并行算法库,实现了GPU与多核CPU之间的接洽。提供了排序原语,可自动选择最有用的执行方法。TensorFlow行使的CUB库会用来包装Thrust。PyTorch和TensorFlow在操纵时GPU分类法相似 - 无论选择何种。

与TensorFlow一样,PyTorch的排序要领记起来相等轻易:torch.sort()。独一费脑筋的是排序值的偏向:TensorFlow行使direction,而PyTorch行使descending。

固然用GPU举办排序对付很是大的数据集来说也许是一个很好的选择,但直接在SQL中对数据举办排序也是可以的。

SQL

SQL中的排序凡是很是快,出格是在内存中执行时。

SQL很类型,但没有划定某操纵必需行使哪种排序算法。Postgres行使磁盘归并排序,堆排序或快速排序,视环境而定。假如内存够,在内存中排序会更快。通过work_mem配置增进排序的可用内存。

其他SQL的执行行使差异排序算法。譬喻,按照Stack Overflow的答复,谷歌BigQuery的内省排序采纳了一些法子。

SQL中的排序由ORDER BY呼吁执行。这种句法差异于全部行使单词sort的Python排序执行。着实更轻易记着SQR语句与ODER BY,由于很是奇异。

为使排序降序,请用要害字DESC。因此,按字母次序从最后一个到第一个反馈给客户的查询如下所示:

  • SELECT Names FROM Customers
  • ORDER BY Names DESC;

较量

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读