python计算数据百分比_Python|专题(2)——数据处理常规操作集(2),数值计算的几个加速技巧...

本文介绍了Python中加速数值计算的多个方法,包括使用numpy的运算方法、减少重复运算、利用pandas和numba优化,以及了解numpy的广播机制。通过实际案例展示了如何在数据排序、缺失值处理、重复值处理等方面进行高效操作。强调在Python中优化数值计算的重要性,特别是对于处理大数据和矩阵运算的场景。
摘要由CSDN通过智能技术生成

f8fd08f03b9e26713ecbc14a526ca574.png

传送门:Python|专题(1)——数据处理常规操作集(1)

——————————————————————————————————————

大家好!

在这一段时间呢,我主要针对自己调研的一个机器学习模型进行了复现。俗话说得好,读论文一时爽,到复现火葬场。我可能现在后悔就后悔在习惯了Py的解释型环境,把C的那一套函数式编程方法忘得一干二净……现在每天面对自己写的shit mountain不知道该说什么好……

当然了,也不完全是一无是处啦!事实上基于统计和优化的机器学习模型,虽然说就我目前的情况来看,要想在效率和规模上胜过深度学习已经比较困难,但这并不代表说,我们不能够从机器学习算法中学到其它有趣的技巧。其实这也是我们这一节的一个主要内容:在数值计算中,我我们有什么办法加速

当然我们不可能寥寥几句说完数据处理的一些常规操作,所以我们这一节也会补上剩下的这些内容

那我们开始吧。当然事先请不要忘记导入

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

这一节我们还需要做数值实验,所以别忘了还有这个

import time

8. 数据排序

(从8开始的原因是第一节是到7结束的……)数据排序也是很常见的操作,比方说在电商中,你需要提取某一天的物品销量前十名,那自然对销量进行排序是重要的。当然还有对索引排序(为了使得数据原始的顺序得以恢复)等。

排序方法在numpy与pandas中各有一种。首先是numpy中的我们有

A = np.array([1,3,4,8,7,6,9,0,5])
A.sort()
A
'''
Result: array([0, 1, 3, 4, 5, 6, 7, 8, 9])
'''

并不困难,对这个array调用一个sort方法就好。不过如果是在二维及以上的数据,想进行分行分列的排序,应该如何去做呢?

A = np.array([1,3,4,8,7,6,9,0,5]).reshape(3,3)
A.sort(axis = 0)
A
'''
Result: 
array([[1, 0, 4],
       [8, 3, 5],
       [9, 7, 6]])
'''

这里我们多了一个参数axis,它为0即说明是按列排序,如果它为1那么就是按行排序了。默认情况下是按行排序的。

当然,不乏可能有人有一些特别的想法。比方说

Example 1:
对数据进行全排序,并按照列重排。比方说如果输入是1-9的一个乱序排列,输出为
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

实现这个目标并不困难,但是稍显复杂。

A = np.array([1,3,4,8,7,6,9,2,5])
A.sort()
A = A.reshape(3,3, order = 'F')
A
'''
Result:
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
'''

也就是说,我们先正常排序,然后考虑使用reshape方法,这里注意多了一个参数order = 'F',注意这个'F'并不是与“列名”有关的一个首字母,而是Fortran的意思。具体的解释下面这个官方文档也说的比较清楚。

numpy.reshape - NumPy v1.15 Manual​docs.scipy.org

虽然这个需求倒不是很多见。不过reshape有一个用法还是挺重要的,我们用一个例子来看

A = np.array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
A = A.reshape(-1,)
A
'''
Result: array([1, 4, 7, 2, 5, 8, 3, 6, 9])
'''

reshape的含义就是“重铸”,一般都是转换矩阵的行列数。如果你设置成了-1,那么程序会自动计算这一个数。比方说原始有6个数据,你的行列数设置为(2,-1),这就是(2,3)的意思。如果仅仅只有-1,那么矩阵就会被“拍平”成为一行,相信大家在卷积神经网络中对于这个操作并不陌生。

注意:sort方法是会改变被操作对象的值的。也就是说

A.sort(axis = 0)
A = A.sort(axis = 0)

这两句话其实是一个意思。不过一般我还是会写成后者,也是为了阅读方便。

说到这里我们来看一下pandas的情况,和numpy不同的是pandas的DataFrame一般是含表头和索引的数据表,因此我们如果是对它排序,一般都是要根据某一个特征排序。我们还是使用上一节的数据集来举例。希望你没有忘记那个简单的表。

Table = {
    'date': ['2019/6/1', '2019/7/2', '2019/6/6', '2019/6/17', '2019/7/4', 
'2019/6/13', '2019/6/14', '2019/6/21', '2019/6/17'], 'order_id': [i+1 for i in range(9)],
'commodity_code': ['S1', 'S2', 'S3', 'S5', 'S5', 'S2', 'S9', 'S11', 'S9'], 'commodity_name': ['标准美式',
'瑞纳冰', '加浓美式', '拿铁', '拿铁', '瑞纳冰', '菠萝卷', '坚果', '菠萝卷'], 'category_name': ['饮品', 
'饮品', '饮品', '饮品', '饮品', '饮品', '食品', '食品', '食品']}
Table = pd.DataFrame(Table)

a8d46604c43103122db2357c4e5ab8f8.png

不如我们就按照commodity_code排序吧,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值