数据科学家必须掌握的12个Python功能

在这里插入图片描述

Python 已经成为数据科学家的必选语言,从数据处理到机器学习,它几乎无所不能。本文将探讨一些Python特性,这些特性不仅能帮助你编写更高效、更易读、更易维护的代码,还特别适合数据科学的需求,使你的代码简洁且优雅。

一:推导式(Comprehensions)

  • Python中的推导式是机器学习和数据科学任务中的一个有用工具,因为它们可以用简洁且易读的方式创建复杂的数据结构。
列表推导式可以用来生成数据列表,例如,从一系列数字中创建平方值列表。嵌套列表推导式可以用来展平多维数组,这是数据科学中常见的预处理任务。
_list = [x**2 for x in range(1, 11)]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [num for row in matrix for num in row]
print(_list)
print(flat_list)

在这里插入图片描述

字典和集合推导式分别用于创建数据的字典和集合。例如,字典推导式可以用来创建一个包含特征名称及其在机器学习模型中的重要性得分的字典。生成器推导式在处理大数据集时特别有用,因为它们是即时生成值,而不是在内存中创建一个大型数据结构。这有助于提高性能并减少内存使用。
_dict = {var:var ** 2 for var in range(1, 11) if var % 2 != 0}
_set = {x**2 for x in range(1, 11)}
_gen = (x**2 for x in range(1, 11))
print(_dict)
print(_set)
print(list(g for g in _gen))

在这里插入图片描述

二:枚举(enumerate)

  • enumerate 是一个内置函数,可以在迭代序列(如列表或元组)的同时跟踪每个元素的索引。这在处理数据集时非常有用,因为它可以轻松访问和操作各个元素,同时跟踪它们的索引位置。
下面的例子中,我们使用 enumerate 来迭代一个字符串列表,并在索引为偶数时打印出相应的值。
for idx, value in enumerate(["a", "b", "c", "d"]):
if idx % 2 == 0:
print(value)

在这里插入图片描述

三:拉链(zip)

  • zip 是一个内置函数,允许并行迭代多个序列(如列表或元组)。
在下面的例子中,我们使用 zip 同时迭代两个列表 x 和 y,并对它们的对应元素执行操作。在这种情况下,它打印出 x 和 y 中每个元素的值、它们的和以及它们的积。
x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
for a, b in zip(x, y):
print(a, b, a + b, a * b)

四:生成器(Generators)

  • Python中的生成器是一种可迭代对象,允许即时生成一系列值,而不是一次性生成所有值并将其存储在内存中。这使得它们在处理无法全部装入内存的大数据集时特别有用,因为数据是以小块或批次的方式处理的,而不是一次性全部处理。
下面我们使用一个生成器函数来生成前 n 个斐波那契数列。yield 关键字用于一次生成序列中的一个值,而不是一次性生成整个序列。
def fib_gen(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
res = fib_gen(10)
print(list(r for r in res))

在这里插入图片描述

五:匿名函数(lambda 函数)

  • lambda 是一个关键字,用于创建匿名函数,即没有名称的函数,可以在一行代码中定义。它们在特征工程、数据预处理或模型评估时非常有用,因为可以即时定义自定义函数。
下面我们使用 lambda 创建一个简单的函数,用于从数字列表中筛选出偶数。
numbers = range(10)
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)

在这里插入图片描述

以下是一个使用 lambda 函数与 Pandas 的代码示例:
import pandas as pd
data = {"sales_person": ["Alice", "Bob", "Charlie", "David"],"sale_amount": [100, 200, 300, 400],}
df = pd.DataFrame(data)threshold = 250
df["above_threshold"] = df["sale_amount"].apply(lambda x: True if x >= threshold else False)
df

在这里插入图片描述

六:映射(map)、筛选(filter)、归约(reduce)

“map”、"filter"和"reduce"是三个内置函数,用于处理和转换数据。
  • map 用于将函数应用于可迭代对象的每个元素。
  • filter 用于根据条件从可迭代对象中选择元素。
  • reduce 用于将函数应用于可迭代对象中的一对一对元素,最终生成一个单一的结果。
下面我们在一个管道中使用这三个函数,计算偶数的平方和:
numbers = [1, 2, 3, 4, 5, 6]# 使用 map 计算每个元素的平方
squared = map(lambda x: x ** 2, numbers)# 使用 filter 选择偶数
evens = filter(lambda x: x % 2 == 0, squared)# 使用 reduce 计算偶数平方的和
sum_of_squares = reduce(lambda x, y: x + y, evens)
print("Sum of the squares of even numbers:",sum_of_squares)

在这里插入图片描述

七:any、all

"any"和"all"是内置函数,用于检查可迭代对象中的任意或所有元素是否满足某个条件。
  • any 用于检查可迭代对象中是否存在至少一个元素满足条件。
  • all 用于检查可迭代对象中的所有元素是否都满足条件。
这两个函数在检查数据集中某些条件是否被满足时非常有用。例如,它们可以用来检查某一列中是否存在缺失值,或者某一列中的所有值是否都在某个范围内。
在这个示例中,"any"函数检查列表中是否存在任何偶数值,而"all"函数检查列表中的所有值是否都是奇数。
data = [1, 3, 5, 7]
print(any(x % 2 == 0 for x in data))
print(all(x % 2 == 1 for x in data))

在这里插入图片描述

八:next

  • "next"用于从迭代器中检索下一个项目。迭代器是一个可以被迭代(循环)的对象,例如列表、元组、集合或字典。
"next"常用于数据科学中遍历迭代器或生成器对象。它允许用户从可迭代对象中检索下一个项目,对于处理大数据集或流数据非常有用。
下面我们定义了一个生成器"random_numbers()",用于生成0到1之间的随机数。然后我们使用"next()"函数找到生成器中第一个大于0.9的数字。
import random
def random_numbers():
while True:
yield random.random()
num = next(x for x in random_numbers() if x > 0.9)
print(f"First number greater than 0.9: {num}")

在这里插入图片描述

九:defaultdict

  • "defaultdict"是内置字典类的子类,允许为缺失的键提供默认值。"defaultdict"在处理缺失或不完整数据时非常有用,例如在处理稀疏矩阵或特征向量时。它也可以用于计算分类变量的频率。
一个示例是计算列表中项目的频率。"int"被用作"defaultdict"的默认工厂,初始化缺失的键为 0。
from collections 
import defaultdict# 定义数据列表
items = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']# 使用 int 作为默认工厂创建 defaultdict
frequency = defaultdict(int)# 计算每个项目的频率
for item in items:
frequency[item] += 1
print(frequency)

在这里插入图片描述

在这个示例中,我们使用"defaultdict"来计算"items"列表中每个项目的频率。缺失的键会自动初始化为 0。

十:partial

  • "partial"是"functools"模块中的一个函数,它允许从现有函数创建一个新的函数,并预先填充一些参数。

"partial"在创建带有特定参数或预填充参数的自定义函数或数据转换时非常有用。这有助于减少定义和调用函数时所需的样板代码量。

这里我们使用"partial"从现有的"add"函数创建一个新函数"increment",并将其中一个参数固定为值 1。调用"increment(1)“本质上是调用"add(1, 1)”。
from functools 
import partial# 定义一个简单的加法函数
def add(a, b):
return a + b# 使用 partial 创建一个新函数 increment,将一个参数固定为 1
increment = partial(add, 1)# 调用 increment(1),相当于调用 add(1, 1)
print(increment(1))  # 输出 2

在这里插入图片描述

十一:lru_cache

  • "lru_cache"是"functools"模块中的一个装饰器函数,它允许使用有限大小的缓存来缓存函数的结果。"lru_cache"在优化计算开销大的函数或可能多次使用相同参数调用的模型训练过程时非常有用。缓存可以帮助加快函数的执行速度并减少整体计算成本。
下面是一个使用缓存(在计算机科学中称为记忆化)高效计算斐波那契数的示例:
from functools 
import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
fibonacci(1e3)

在这里插入图片描述

下面是不加缓存的情况,fibonacci(40)所需要的时间:40秒,而添加lru_cache之后计算 fibonacci(1e3) 所需要为0.06秒。

在这里插入图片描述

斐波那契数列的递归计算在没有缓存的情况下,其时间复杂度是指数级的,即 O(2^n)。这是因为每个数字的计算都依赖于前两个数字的计算,导致大量的重复计算。
在添加"lru_cache"装饰器后,时间复杂度大大降低。"lru_cache"使用缓存存储已经计算过的结果,因此每个数字只计算一次,后续的调用直接从缓存中获取结果。这样,时间复杂度降为线性,即 O(n),因为我们只需计算每个数字一次,缓存命中的时间是常数级别的。
  • 不使用 lru_cache 的时间复杂度: O(2^n)
  • 使用 lru_cache 的时间复杂度: O(n)

十二:数据类(Dataclasses)

  • “@dataclass"装饰器会根据定义的属性自动生成类的多个特殊方法,例如"init”、“repr"和"eq”。这有助于减少定义类时所需的样板代码量。数据类对象可以表示数据点、特征向量或模型参数等。
在这个示例中,“dataclass"用于定义一个简单的类"Person”,该类具有三个属性:“name”、“age"和"city”。
from dataclasses
import dataclass @dataclass
class Person:
name: str
age: int
city: str# 创建 Person 对
person = Person(name="john", age=30, city="上海")
print(person)

在这里插入图片描述

在这个示例中,“@dataclass"装饰器自动生成了"Person"类的初始化方法"init”、表示方法"repr"等,使得代码更加简洁和易读。
Python已经成为数据科学家的必选语言,其强大的特性使其在数据处理和机器学习任务中表现出色。在本文中,我们探讨了12个Python特性,包括推导式、枚举、拉链、生成器、匿名函数、映射、筛选、归约、any和all、next、defaultdict、partial、lru_cache和数据类。这些特性不仅能帮助你编写更高效、更易读、更易维护的代码,还特别适合数据科学的需求,使你的代码简洁且优雅。掌握这些特性将显著提升你的数据科学工作效率和代码质量。

图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!

  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql8 使用idb文件实现数据备份

文章目录 1.备份脚本示例2.设置 Cron 任务3. 数据恢复 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都是在得 需求&#xff0c;在离线情况下实…

【Linux】————磁盘与文件系统

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年10月17日 一、磁盘的物理结构 磁盘的物理结构如图所示&#xff1a; 其中具体的物理存储结构如下&#xff1a; 磁盘中存储的基本单位为扇区&#xff0c;一个扇区的大小一般为512字…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

14 django管理系统 - 注册与登录 - 注销

首先先创建注销的入口&#xff0c;在base.html中修改 <ul class"nav navbar-nav navbar-right"><li><a href"/account/login/">登录</a></li><li><a href"/account/register/">注册</a></l…

2024互联网大厂营收排名:京东/阿里/华为前三,超多技术岗都在热招!

2024年已经过去一大半&#xff0c;各大互联网大厂的竞争如火如荼&#xff0c;营收都取得了不俗的成绩&#xff0c;京东、阿里、华为分别占领前三&#xff01; 第四第五名则为华为和拼多多。 根据排行榜里的公司名单&#xff0c;小码特意为大家整理了一批各大厂的招聘岗位。 阿…

信息学奥赛复赛复习18-CSP-J2023-01小苹果-向上取整、向下取整、模拟算法

PDF文档回复:20241021 1 P9748 [CSP-J 2023] 小苹果 [题目描述] 小 Y 的桌子上放着 n 个苹果从左到右排成一列&#xff0c;编号为从 1 到 n。 小苞是小 Y 的好朋友&#xff0c;每天她都会从中拿走一些苹果。 每天在拿的时候&#xff0c;小苞都是从左侧第 1 个苹果开始、每隔…

微信碰一碰支付系统有哪些好的?教程详解抢先看!

支付宝“碰一碰支付”的风刚刚刮起来&#xff0c;它的老对手微信便紧随其后&#xff0c;推出了自己的碰一碰支付设备&#xff0c;再次印证了这个项目市场前景广阔的同时&#xff0c;也让与碰一碰支付系统相关问题的热度又上了一层楼&#xff0c;尤其是微信碰一碰支付系统有哪些…

设计模式(UML图、类之间关系、设计原则)

目录 一.类的UML图 1.类的UML图 2.类之间的关系 2.1 继承关系&#xff1a; 2.2关联关系 2.2.1单项关联 2.2.2双向关联 2.2.3自关联 2.3聚合关系 2.4组合模式 2.5依赖关系 二、设计三原则 2.1单一职责原则 2.2开放封闭原则 2.3依赖倒转原则 一.类的UML图 1.类的…

Originlab正态分布处理数据

一、图线绘制 首先&#xff0c;导入数据 点击左下角生成柱状图 绘制完成后&#xff0c;点击菜单栏【分析】-【拟合】-【非线性曲线拟合】-【打开对话框】 在函数中选择高斯即可 二、设置画布 宽、高为300.02 三、坐标轴格式 显示&#xff1a;上下左右轴 刻度线标签&#…

网络编程中容易踩的坑罗列,谨记!

1、TCP没考虑粘包分包 TCP是面向连接的可靠协议&#xff0c;TCP是流式协议&#xff0c;创建TCP套接字的类型为SOCK_STREAM int sockfd socket(AF_INET, SOCK_STREAM, 0);很多同学面试时对书上的话背诵如流&#xff0c;在实际TCP编程中却没有处理粘包和分包的代码&#xff0c;以…

十年编程路,一生踏征途

时光荏苒流逝&#xff0c;白驹匆匆过隙&#xff0c;不知不觉间&#xff0c;我已经在程序开发这条道路上走过了整整十年。从最初的求学&#xff0c;到如今成为一名较为资深的职业开发者&#xff0c;这一路充满了挑战、学习、成长与感动。在这1024程序员节的特殊时刻&#xff0c;…

mysql5.7.30绿色版安装

下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 参考&#xff1a;【绿色版】Mysql下载、安装、配置与使用&#xff08;保姆级教程&#xff09;_mysql 绿色安装-CSDN博客 从下载地址中下载mysql&#xff0c;解压zip安装包&#xff0c;到想…

A Graph-Transformer for Whole SlideImage Classification文献笔记

基本信息 原文链接&#xff1a;[2205.09671] A graph-transformer for whole slide image classification (arxiv.org) 源码&#xff1a;https://github.com/vkola-lab/tmi2022 提出了一种融合了基于图的WSI表示和用于处理病理图像的视觉转换器&#xff0c;称为GTP&#xff…

听说现在二建不值钱了,还有必要考吗?

面对这样的现状&#xff0c;新手们都会不禁要问:考证真的有用吗?它是否值得我们投入时间和精力?首先&#xff0c;我觉得我们需要对自己有一个清晰的认识&#xff0c;包括你的就业状况。 ①如果你已经在事业单位工作&#xff0c;那么考证可能对你来说并不是那么必要 在事业单…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片&#xff0c;直接使用QNetworkAccessManager和QHttpMultipart类即可&#xff0c;其他博文中有分享。 主要是平台接口对所传输图片有要求&#xff1a;需要包含GPS信息&#xff08;经度、纬度、高度&#xff09;。 Qt无法直接实现&#xff0c;…

【React】React18核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

智源重磅发布 Emu3:颠覆AI多模态领域的革命性多模态大模型

在2024年10月21日&#xff0c;智源研究院正式发布了新一代的革命性多模态大模型——Emu3。这一突破标志着AI生成技术进入一个全新阶段&#xff0c;它不仅颠覆了当前的主流扩散模型&#xff08;例如Stable Diffusion&#xff09;&#xff0c;还为图像、文本和视频生成任务带来了…

HTML+CSS实现点赞效果

效果演示 HTMLCSS实现点赞效果 HTML <div class"heart-container" title"Like"><input type"checkbox" class"checkbox" id"Give-It-An-Id"><div class"svg-container"><svg viewBox&qu…

1.前提配置 关防火墙 关selinux

1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 未安装则需重新设置挂载点 若已安装&#xff0c;则查看系统中是否存在 3.当前主机添加多地址&#xff08;ip a&#xff09; 配置了三个IP地址 查看IP地址是否配置成功 4.自定义nginx配置文件通过多地址区分多网站 /…

MySQL中的优先规则

在图片的例子中&#xff0c;有两个条件&#xff1a; 第一个条件是job_id是AD_PRES并且薪水高于15,000。 第二个条件是job_id是SA_REP。 在图片中的例子有两个条件&#xff1a; 第一个条件是job_id是AD_PRES或者SA_REP。 第二个条件是薪水高于$15,000。