python数据判断分析_Python数据分析

前面

Python作为一种弱类型语言,虽身带高效开发的BUFF,但同时也有着不出众的运行性能。由于数据类型的判断是在解释器内部进行,所以对于每一个变量操作后都要重新判断数据类型,这势必增加解释器的负担。为了解决这一矛盾,同时扩充Python数据类型,numpy(以下简称np)就应运而生了。np不仅提供了诸如整数数组,线性方程、矩阵的相关数据类型,还可以进行一系列的操作运算,同时由于底层代码用C编写的,所以运行起来性能也不错。在数据分析、大数据、机器学习,神经网络方面都可以看到np的身影。在学习np之前,先来补充python的其它常用数据技巧:

数组解压

>>>list1 = [1,2,3,4,['a','b','c']]

>>>var1, var2, var3, var4, vars1 = list1

1 2 3 4 ['a', 'b', 'c', 'd']

通过上面这种方法可以使用多个变量去接收一个list(或者tuple)结构。

当然,我们知道Python可以使用星号+变量名来将多出的元素保存到一个元组中:

>>>*vars1, var1 = list

>>>vars1, var1

([1, 2, 3, 4], ['a', 'b', 'c', 'd'])

可以看出使用星号后,只会为list最后几个元素保留,其它元素都归星号的元素接收,以下写法更加明显:

>>>var1,*vars1 = list1

>>>var1,*vars1

(1, 2, 3, 4, ['a', 'b', 'c', 'd'])

继续多分配几个数组:

>>>var1,var2,var3,*vars1 = list1

>>>var1,var2,var3,vars1

(1, 2, 3, [4, ['a', 'b', 'c', 'd']])

可以看出星号所包含的变量总会在最后被分配。

这个方法有什么实用意义呢,比如有以下字符串:

'By777:20:Python:Linux:Web'

可以使用上面的方式来提取有用的信息:

>>>str = 'By777:20:Python:Linux:Web'

>>>name, age, *tools = str.split(':')

定长列表

定长列表常常用来处理消息队列,作用类似于栈,我们可以使用下面方式来很方便的使用消息队列:

>>>from collections import deque

deque可以看作list的加强版本,可以设置最大长度:

>>>d = deque(maxlen=10)

>>>for i in range(12):d.append(i)

>>>d

deque([2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

可以看出第11个元素将第一个元素1压了出去。

当然我们还可以使用appendleft方法逆向压入构建逆序。

元素查找

有以下列表:

>>>list2 =list(range(5))

>>>list2

[0, 1, 2, 3, 4]

我们可以使用heapq库进行信息提取:

>>>import heapq

>>>heapq.nlargest(3,list2)

[4, 3, 2]

除此之外,我们还可以定义一个函数:

>>>def myfun(c):

>>>if c>50:

>>> return c**0.5

>>>return c

>>>heapq.nlargest(2,list2,key=myfun)

[4, 3]

这样,将会使用list中的数以key的返回值作为判断依据。

多值映射

>>>from collections import defaultdict

>>>d = defaultdict(list)

>>>d

defaultdir(list,{})

这样我们就构建了一个默认的key对应values默认为list类型的字典

那么我们就可以继续进行赋值操作:

>>>d['a'].append(1)

>>>d

defaultdict(list, {'a': [1]})

……

>>>d

defaultdict(list, {'a': [1, 1, 2]})

同样,也可以定义为set类型:

>>>d_set = defaultdict(set, {})

>>>d_set['a'].add(1)

>>>d_set

defaultdict(set, {'a': {1}})

有序字典

>>>from collections import OrderedDict

使用有序字典的好处是的键值的顺序是按照添加的顺序进行的:

>>>od = OrderedDict()

>>>od['a'] = 1

>>>od['c'] = 3

>>>od['d'] = 2

>>>od

OrderedDict([('a', 1), ('c', 3), ('d', 2)])

如果使用默认字典对比明显:

>>>d = {}

>>>d['a'] = 1

>>>d['c'] = 2

>>>d['b'] = 3

>>>d

{'a': 1, 'b': 3, 'c': 2}

字典运算

Python原生字典是可以进行诸如+、-、&、min、zip等运算的:

但是原生字典和OrderedDict不能直接运算:

>>>d_cm -od

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 d_cm -od

TypeError: unsupported operand type(s) for -: 'dict' and 'collections.OrderedDict'

我们要使用items方法:

>>>d_cm.items() - od.items()#只存在与d_cm不存在与od的元素

{('bar', 2), ('foo', 1), ('script', 3), ('test', 4)}

>>>d_cm.keys() & od.keys()

此外,还有一下操作:

>>>d_cm = {'bar':2,'foo':1,'script':3}

>>>min(d_cm,key=lambda k:d_cm[k])#需要通过函数

'foo'

>>>sorted (d_cm,key=lambda k

['foo', 'bar', 'script']

>>>min(zip(d_cm.values(),d_cm.keys()))

(1, 'foo')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值