27

实践案例:Python22个构造函数法-助力数据挖掘与分析

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIzNTg3MDQyMQ%3D%3D&%3Bmid=2247486185&%3Bidx=2&%3Bsn=da2fe7c62b725530946ca9efc0c2b221
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

6zMNNni.jpg!web

如果你经常用python做一些小的项目玩,或者用python做一些爬虫,又或者你去一些网站刷题,那么必将面对一个问题——写函数。

“写函数”也就是自己写一个算法,用来实现一些功能。比如最简单的给电脑两个参数,让他计算这两个参数的关系。

下边献上22个函数构造练习,将会助力大家在数据挖掘与分析方面更进一步!

建议大家收藏此文,有时间在自己的环境里亲自跑一遍加深理解。

两个变量互换

两个变量可以通过这种方式互相互换着赋值

a = 5                               
b = 10
a, b = b, a
print(a) # 10
print(b) # 5
# 这个看起来不是函数,但是这种用法在函数中常用

检查是不是偶数

这个功能主要展示的不是快速判断是不是偶数,而是bool判断的用法.因为10可以被2整除,所以余数为0,因此它是==0的,如果换成`is_even(3)`那就返回False了。

def is_even(num):
return num % 2 == 0
is_even(10) # True

分割一个字符串为一个列表

这个案例使用换行符分割的,实际应用中,随机应变。

def split_lines(s):
return s.split('\n')

split_lines('50\n python\n snippets')
# ['50', ' python', ' snippets']

查找对象使用内存的大小

这个例子中,调用了sys的看内存占用情况函数。数字5占了28内存空间大小,我把这个数字加到9999返回依然是28

import sys
print(sys.getsizeof(5)) # 28
print(sys.getsizeof("Python")) # 55

翻转字符串

这个案例告诉我们字符串的翻转用法,相应的简单字符串可以翻转,以后的图片\音频\视频,一样可以翻转.如果你在一个函数里用这个功能,可以解决某些场景里的问题。

language = "sumer-minus"   # SUMER是我公众号,minus是我一个网名
reversed_language = language[::-1]
print(reversed_language) # sunim-remus

打印字符串x遍的小函数

从这里提取两个概念:1如何打印n遍,理解函数调用

def repeat(string, n):
return (string * n)

a=repeat('oop!',10)
print(a)
>>>oop!oop!oop!oop!oop!oop!oop!oop!oop!oop!

检查一个字符串是否与他的翻转相同

这个小代码把字符串翻转,和bool又一次加深理解

def palindrome(string):
return string == string[::-1]
print(palindrome('python')) # False

把一个列表拼装成字符串

用到了列表join方法,数据分析中可能用的多的是pandas的DataFrame格式的矩阵、张量,但一维这些东西一样会遇到使用。

strings = ['老虎', '老鼠', '蟑螂']
print('kill'.join(strings))

# 老虎kill老鼠kill蟑螂

将两个列表删除重复项并合并

如何将两个列表合并并扣除其中的重复项呢?可以看看这个方法,看起来是不是挺“卑鄙”的。挖python墙角感觉,但更好的方法还确实没想出来。实际分析中去重可能不多,但统计众数比较多,如果是string、列表,如何统计重复内容数量,思路类似。

def union(a,b):
return list(set(a + b))

union([1, 2, 3, 4, 5], [6, 2, 8, 1, 4])

# 答案:[1,2,3,4,5,6,8]

将列表去重

def unique_elements(numbers):
return list(set(numbers))

unique_elements([1, 2, 3, 2, 4])

# 答案:[1, 2, 3, 4]

找到一组数字的均值

虽然有mean函数,但比如你想自己算依稀的东西用到mean的时候,你可以自己造个,也就两行而已。

def average(*args):
return sum(args, 0.0) / len(args)
average(5, 8, 2)

# 5.0

检查一个数组是不是都是唯一的数值

def unique(list):
if len(list)==len(set(list)):
print("所有数据都是唯一的")
else:
print("并不唯一")

unique([1,2,3,4,5])
# 所有数据都是唯一的

找到列表频率最大的数据

def most_frequent(list):
return max(set(list), key = list.count)

numbers = [1, 2, 3, 2, 4, 3, 1, 3]
most_frequent(numbers)

# 3

角度变弧度

π在math 库中是有定义的,就叫做math.pi

import math

def degrees_to_radians(deg):
return (deg * math.pi) / 180.0

degrees_to_radians(90)
# 1.5707963267948966

打印运行计算花费时间

这个时间跟电脑速度有关

import time
start_time = time.time()
a,b = 5,10 #随便一个过程
c = a+b #随便一个过程
end_time = time.time()
time_taken = (end_time- start_time)*(10**6)
print("运行这个耗费微秒数为:", time_taken)

# 运行这个耗费微秒数为: 2.1457672119140625

找到一组数的最大公因数

借助工具functools

from functools import reduce
import math
def gcd(numbers):
return reduce(math.gcd, numbers)
gcd([24,108,90])
# 6

使用lambda公式

x = lambda a, b, c : a + b + c
print(x(5, 10, 20))
# 35

# 或者也可以这样

def x(a, b, c):
return a + b + c
print(x(5, 10, 30))
# 35

使用map函数

对一个列表每一个元素都进行操作的话,可以用map函数,下边是个小案例

def multiply(n):
return n*n

list1 =[1, 2, 3]
result = list(map(multiply, list1))
print(result)
# [1, 4, 9]

使用过滤函数-filter

arr = [1, 2, 3, 4, 5]

def Even(x):
return list(filter(lambda x: x % 2 == 0, arr))

Even(arr)
# [2, 4]

列表连续操作

numbers = [1, 2, 3]

def squares(nums):
return [number**2 for number in nums]

squares(numbers)

# [1, 4, 9]

切片操作

切片用于从给定序列中提取元素的连续序列或子序列。以下函数用于合并两个切片操作的结果。首先,我们将列表从索引d切到末尾,然后从开始切成索引d。

def rotate(arr, d):
return arr[d:] + arr[:d]

if __name__ == '__main__':
arr = [1, 2, 3, 4, 5]
arr = rotate(arr, 2)
print (arr)

# 结果:[3, 4, 5, 1, 2]

使用链功能

最后的代码段用于从一行开始调用多个函数并评估结果。

def add(a, b):
return a + b
def subtract(a, b):
return a - b
a, b = 5, 10
print((subtract if a > b else add)(a, b)) # 15
print((subtract if a < b else add)(a, b)) # -5

希望这22个函数构造思路能让大家有一些的进步收获!

觉得有用,点个在看呗!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK