Python用于数据科学 - 第3部分

Tavish Aggarwal.
L

ET更进一步地走了一步,并了解Python的更多概念。在我以前的帖子中,我覆盖了Python概念,这是一个良好的数据科学家至关重要。如果您错过了帖子,我强烈建议您通过帖子:

  1. Python用于数据科学 - 第1部分
  2. Python用于数据科学 - 第2部分

在此帖子中,我将涵盖以下主题:

  1. 随机发电机使用numpy
  2. 在深度中的功能
  3. 误差处理
  4. 迭代器
  5. zip关键字
  6. 列出理解
  7. 字典识别
  8. 发电机
  9. 收益关键字
  10. 地图,减少和过滤器

让我们开始吧。

随机发电机使用numpy

正如我们在以前的文章中已经探索了Numpy一样。如果不是,我建议读博客: python数据科学包 In numpy array, we can also generate random numbers using rand() function. The code shown below is used to generate random numbers:

import numpy as np

# It will generate random number every time
print(np.random.rand()) 

但是,如果我们想生成具有特定范围的随机数,何时何地呢。考虑掷骰子的场景。当我们掷骰子时,我们将输出作为1,2,3,4,5和6.以下代码演示了掷骰子的场景:

import numpy as np

np.random.seed(123)
dice = np.random.randint(1,7)
print(dice)

We have used seed function above to constraint output within range. We can pass any value in seed function.

在深度中的功能

我们讨论了功能 Python用于数据科学 - 第2部分。现在是时候进一步走了一步并探索了一些关于功能的事情。我会谈论:

  1. 功能中变量的范围
  2. 函数默认和灵活的参数
  3. 将键值对传递给功能
  4. lambda的功能

让我们从函数或外部的变量的范围开始。基本上有两种级别的变量范围。这些都是:

  1. 全球范围
  2. 本地范围

Python provides global keyword which is used to declare global variables. Let see this in action. Consider we have a variable defined outside of the function:

number = 1

def fun1():
    number = 10 # local copy of number is created

def fun2():
    global number 
    number= 30 # with global keyword number value will be updated in global scope

print('Number value in global scope: ' + str(number)) # 1
fun1()
print('Number value in global scope after executing fun1: ' + str(number)) # 1
fun2()
print('Number value in global scope after executing fun2: ' + str(number)) # 30

hmmm! Strange, how come the number value changes to 30 after executing fun2? This happened because with the global keyword new memory is not allocated for the variable. Instead, the global variable reference is updated with the value 30.

误差处理

有时,我们不希望执行代码在运行时打破。因此,如果在代码执行期间发生,则要捕获任何错误是很重要的。在Python中,我们使用除外块处理异常。让我们在下面显示的示例的帮助下探索更多内容:

try:
    word = 'test' * '23'
    print(word)
except:
    print('Error Occurred.')

如我们所知,我们无法将字符串乘以字符串,因此流程将转到除块和“错误发生”之外。

Another way to handle an error is using raise keyword.

try:
    raise Exception('Exception handled using raise keyword')
except Exception as e:
    print(e)

这 code shown above is using raise keyword to handle an exception. 

笔记: It is generally not a good idea to handle general exception. We should be very specific to handle the type of Exception. For e.g. ValueError.

Python中的迭代器

We can iterate over the data structures using for loop as shown below:

names = ['Jack', 'Alley', 'Wann', 'Haley']

for name in names:
    print(name)

以上是迭代列表的越常用方式。但我们也可以使用迭代器迭代列表,如下所示:

names = ['Jack', 'Alley', 'Wann', 'Haley']

person = iter(names)

# Iterating over the list when needed
print(next(person))
print(next(person))

#Output
Jack
Alley

使用迭代器的优势在于我们可以根据要求迭代列表。当我们处理非常大的数据集时,它发挥着重要作用。

ZIP关键字在Python中

zip() function takes iterables, makes an iterator that aggregates elements, and returns an iterator of tuples. To know how zip function works look at the example shown below:

names = ['Rock', 'Bob', 'Rony']
classes = ['10', '1', 'A1']
subjects = ['Maths', 'English', 'Computer science']

zipped_data = zip(names, classes, subjects)
print(zipped_data)

zipped_to_list = list(zipped_data)
print('Zip to list: ' + str(zipped_to_list))

# unpack zipobject:
zipped_data = zip(names, classes, subjects)

print('Unpacking zip object')
for value1, value2, value3 in zipped_data:
    print(value1, value2, value3)

#output:
<zip object at 0x10339cd88>
Zip to list: [('Rock', '10', 'Maths'), ('Bob', '1', 'English'), ('Rony', 'A1', 'Computer science')]

Unpacking zip object
Rock 10 Maths
Bob 1 English
Rony A1 Computer science

In the code shown above, we have created a zip object out of three lists. Then we have converted a zipped object to list. Also, we have written code to unpack the zip object using for loop. There is another way to unpack the zip object:

names = ['Rock', 'Bob', 'Rony']
classes = ['10', '1', 'A1']
subjects = ['Maths', 'English', 'Computer science']

zipped_data = zip(names, classes, subjects)
print(*zipped_data)

zipped_data = zip(names, classes, subjects)
result1, result2, result3 = zip(*zipped_data)
print(result1, result2, result3)

# output
('Rock', '10', 'Maths') ('Bob', '1', 'English') ('Rony', 'A1', 'Computer science')
('Rock', '10', 'Maths') ('Bob', '1', 'English') ('Rony', 'A1', 'Computer science')

列出理解

列表理解是创建列表的有效方式。它还减少了我们将为循环写入的代码行。让我们看看语法来创建我们的第一个列表理解:

squares = [i* i for i in range(10)]

# output
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

语法似乎乍一看令人困惑。但随着您的练习,您将成为一份专业书写列表的全局。对于上面的代码非常相似,如下所示,如果我们想在不使用列表理解的情况下生成相同的输出:

square = [];
for value in range(10):
   square.append(value * value)

#ouput
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

我们甚至可以生成嵌套的列表理解。要演示我们将使用列表理解创建3 x 3矩阵:

matrix = [[col for col in range(0,3)] for row in range(0,3)]
print(matrix)

# output
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

对你们的一些语法似乎很令人困惑,但随着你的样子理解,你将掌握它。

我们还可以创建条件列表理解。

subjects = ['Maths', 'English', 'Computer science']
math_subject = [subject for subject in subjects if subject == 'Maths']
print(math_subject)

#output
['Maths']

我们可以使用块生成条件列表理解:

subjects = ['Maths', 'English', 'Computer science']
math_subject = [subject if subject == 'Maths' else subject + '!' for subject in subjects ]
print(math_subject)

#ouput
['Maths', 'English!', 'Computer science!']

字典识别

We create a dictionary using dictionary comprehension. The syntax to generate dictionary comprehension is very similar to that of generating list comprehension. The only difference is we use [] to generate list comprehension and {} to generate dictionary comprehension.

考虑下面显示的示例以生成字典理解:

subjects = ['Maths', 'English', 'Computer science']
subject_dictionary = {member: len(member) for member in subjects}
print(subject_dictionary)

# output
{'Maths': 5, 'English': 7, 'Computer science': 16}

上面你可以看到我们将键作为主题名称和值创建为主题名称中的字符长度。

发电机

列出理解s and generator expressions look very similar in their syntax, except for the use of parentheses () in generator expressions and brackets [] in list comprehensions.

发电机和列表理解之间的差异:

发电机表达式与列表理解相同。列表理解和生成器表达式之间的唯一区别是列表理解返回列表但生成器表达式返回可以迭代的对象。

让我们看看如何创建生成器表达式:

subjects = ['Maths', 'English', 'Computer science']

subject_generators = (member for member in subjects)

print(subject_generators)
print(next(subject_generators))

# output
<generator object <genexpr> at 0x10b754a40>
Maths

In the example shown above, we are using next function to get the value from the generator object.

收益关键字

我们可以使用Eight关键字从发电机函数返回结果。示例显示eysion关键字的使用:

subjects = ['Maths', 'English', 'Computer science']

def toUpperCase(inputList):
    for value in inputList:
        yield value.upper()

for subject in toUpperCase(subjects):
    print(subject)

产量与返回之间的差异

要了解收益率和返回关键字之间的差异,请考虑以下示例:

subjects = ['Maths', 'English', 'Computer science']

def toUpperCase(inputList):
    for value in inputList:
        yield value.upper()

subject = toUpperCase(subjects)
print(next(subject))
print(next(subject))

# output
MATHS
ENGLISH

If use return keyword in function, then we can't use next as we are using above. So to simplify, yield keyword returns generators which we can iterate over as needed, but return keyword return the list.

地图,减少和过滤器

Python提供映射,减少和过滤器功能,以缓解日常任务。这 地图功能 用Lambda函数和列表称为Argument.it返回包含所有Lambda修改项目的新列表。

# Syntax: map(lambda function, list)

print(list(map(lambda x: x*2 , [1,2,3,4,5])))

# Output
[2, 4, 6, 8, 10]

减少功能 用lambda函数和列表调用。它在一对列表中执行重复操作并返回减少的结果。

# Syntax: reduce(lambda function, list)

from functools import reduce
print(reduce(lambda x,y: x if x>y else y, [1,2,3,4,5]))

# Output
5

笔记: 减少函数由Python核心提供。相反,我们需要将其从Functools包导入。

过滤功能 用lambda函数和列表调用。它从函数返回true的列表中筛选了该元素。

# Syntax: filter(lambda function, list)

print(list(filter(lambda x: x % 2 == 0 , [1,2,3,4,5])))

# Output
[2, 4]

所有来自帖子。在这里,我们在Python探索了一些更多的新概念。在Python和Data Science上保持关注即将到来的帖子。

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。

类别