【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。

目录

  • 一、数据清洗的重要性
  • 二、数据清洗的常见任务
    • 2.1 去除噪声数据
    • 2.2 处理缺失值
    • 2.3 纠正错误数据
  • 三、使用 Python 库进行数据清洗与预处理
    • 3.1 认识 pandas 库
    • 3.2 数据导入与查看
    • 3.3 利用 pandas 处理缺失值
    • 3.4 利用 pandas 处理重复数据
    • 3.5 利用 pandas 处理异常值
  • 四、数据标准化与归一化方法
    • 4.1 标准化与归一化的概念
    • 4.2 标准化方法
    • 4.3 归一化方法
    • 4.4 标准化与归一化的应用场景
  • 五、总结与展望


一、数据清洗的重要性

在使用 Python 爬虫获取数据后,数据清洗是至关重要的环节。从网页中爬取的数据往往包含大量噪声数据、缺失值和错误数据 ,这些 “脏数据” 会严重影响后续数据分析和模型训练的准确性与可靠性。例如,在进行市场趋势分析时,如果数据中存在大量重复的销售记录(噪声数据),可能会导致对市场需求的误判;若销售数据中存在缺失值,基于这些数据建立的销售预测模型可能会产生较大偏差。因此,数据清洗就像是数据处理流程中的 “质检员”,为后续更高级的数据处理和分析奠定坚实基础。

二、数据清洗的常见任务

2.1 去除噪声数据

噪声数据是指那些不符合数据模式或期望的数据点,它们会干扰数据分析的准确性 。在爬虫获取的数据中,常见的噪声数据类型包括乱码、特殊符号、重复数据等。比如在爬取网页新闻内容时,可能会混入一些 HTML 标签、JavaScript 代码片段等乱码和特殊符号,这些对于新闻内容分析毫无价值 。

使用正则表达式可以有效去除这些噪声。比如利用re模块来匹配并去除 HTML 标签:

import re

html_text = "<p>这是一段新闻内容,<span style='color:red'>包含HTML标签</span></p>"
clean_text = re.sub(r'<.*?>', '', html_text)
print(clean_text)  

上述代码中,re.sub(r’<.*?>', ‘’, html_text)表示使用空字符串替换掉所有的 HTML 标签,从而得到干净的文本内容。对于重复数据,可以使用pandas库的drop_duplicates方法去除。例如:

import pandas as pd

data = {'col1': [1, 2, 2, 3], 'col2': ['a', 'b', 'b', 'c']}
df = pd.DataFrame(data)
unique_df = df.drop_duplicates()
print(unique_df) 

通过drop_duplicates方法,DataFrame中的重复行被成功去除。

2.2 处理缺失值

缺失值是指数据集中某个或某些属性的值是缺失的情况。在现实世界的数据中,缺失值非常常见,比如在爬取电商商品信息时,部分商品的描述、价格等信息可能缺失。

常见的缺失值处理方法有以下几种:

  • 删除:当数据集中缺失值较少时,可以直接删除含有缺失值的行或列。在pandas中,使用dropna方法实现。例如:
import pandas as pd

data = {'col1': [1, None, 3], 'col2': ['a', 'b', 'c']}
df = pd.DataFrame(data)
filtered_df = df.dropna()
print(filtered_df) 
  • 填充
    • 均值填充:适用于数值型数据且数据整体极值差异不大时。例如对成年男性身高的缺失值进行填充。在pandas中,使用fillna方法结合mean函数实现。如:
import pandas as pd

data = {'col1': [1, None, 3]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].mean())
print(df) 
    • 中位数填充:当数据整体极值差异较大时使用,比如对人均收入进行填充(数据中含有高收入人群,如马总)。代码如下:
import pandas as pd

data = {'col1': [1, None, 1000]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].median())
print(df) 
    • 众数填充:用于字符类型或没有大小关系的数值类型数据。例如对城市信息的缺失进行填充。代码如下:
import pandas as pd

data = {'col1': ['北京', '上海', None]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].mode()[0])
print(df) 
  • 插值法:对于数值型数据,当数据列的含义较为复杂,需要更精确的填充方法时可以使用。pandas中的interpolate方法本质是使用各种数学(统计学)中的插值方法进行填充,包含最近邻插值法、阶梯插值、线性插值、B 样条曲线插值等多种方法。例如:
import pandas as pd

data = {'col1': [1, None, 3]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].interpolate()
print(df) 

2.3 纠正错误数据

错误数据是指数据中存在不符合逻辑或与实际情况不符的数据。例如在爬取学生成绩数据时,可能出现成绩大于 100 分(假设满分 100 分)的情况,或者数据类型错误,如将成绩存储为字符串类型。

以识别和纠正成绩数据中的错误为例,假设存在一个包含学生成绩的DataFrame:

import pandas as pd

data = {'姓名': ['张三', '李四', '王五'], '成绩': ['85', 120, 90]}
df = pd.DataFrame(data)

# 检查数据类型并转换为数值类型
df['成绩'] = pd.to_numeric(df['成绩'], errors='coerce')

# 纠正错误数据(成绩大于100分的设为100分)
df['成绩'] = df['成绩'].apply(lambda x: 100 if x > 100 else x)

print(df) 

在上述代码中,首先使用pd.to_numeric将成绩列转换为数值类型,errors='coerce’表示将无法转换的值设为NaN。然后通过apply方法结合匿名函数,将大于 100 分的成绩纠正为 100 分。

三、使用 Python 库进行数据清洗与预处理

在 Python 的数据清洗和预处理工作中,pandas库是一个强大且常用的工具,它提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

3.1 认识 pandas 库

pandas是基于NumPy构建的,利用了NumPy数组计算的优势,在数据处理和分析方面表现出色。它主要有两个核心数据结构:Series(一维带标签数组)和DataFrame(二维表格型数据结构 ),这使得处理和分析各种类型的数据变得更加便捷。例如,DataFrame可以看作是由多个Series组成的表格,每列都是一个Series,且所有列共享同一索引。pandas库提供了丰富的函数和方法,涵盖数据读取、写入、清洗、处理、分析等各个环节,如读取常见的 CSV、Excel 等文件格式,处理缺失值、重复值和异常值等,还能进行数据的合并、分组、透视等操作。

3.2 数据导入与查看

使用pandas读取 CSV 文件非常简单,只需使用read_csv函数:

import pandas as pd

# 读取CSV文件
data = pd.read_csv('data.csv')

读取 Excel 文件则使用read_excel函数:

# 读取Excel文件
data = pd.read_excel('data.xlsx')

读取数据后,可以使用shape属性查看数据的形状(行数和列数),使用dtypes属性查看每列的数据类型:

# 查看数据形状
print(data.shape)  

# 查看列数据类型
print(data.dtypes) 

3.3 利用 pandas 处理缺失值

pandas提供了多种处理缺失值的方法。例如,dropna方法用于删除含有缺失值的行或列,fillna方法用于填充缺失值。假设我们有一个包含缺失值的DataFrame:

import pandas as pd
import numpy as np

data = {'col1': [1, np.nan, 3], 'col2': ['a', 'b', np.nan]}
df = pd.DataFrame(data)

# 删除含有缺失值的行
filtered_df = df.dropna()
print(filtered_df)  

# 使用指定值填充缺失值
df.fillna(0, inplace=True)
print(df)  

在上述代码中,首先创建了一个含有缺失值的DataFrame,然后使用dropna方法删除含有缺失值的行,接着使用fillna方法将缺失值填充为 0 ,inplace=True表示在原数据上进行修改。

3.4 利用 pandas 处理重复数据

使用pandas的drop_duplicates方法可以识别和删除重复数据。例如:

import pandas as pd

data = {'col1': [1, 2, 2, 3], 'col2': ['a', 'b', 'b', 'c']}
df = pd.DataFrame(data)

# 删除重复行
unique_df = df.drop_duplicates()
print(unique_df) 

运行上述代码,drop_duplicates方法会自动检测并删除DataFrame中的重复行,只保留唯一的行数据。

3.5 利用 pandas 处理异常值

可以使用统计方法(如 Z-Score)或可视化工具(如箱线图)检测异常值。Z-Score 是一种常用的检测异常值的统计方法,它通过计算数据点与均值的距离(以标准差为单位)来判断数据点是否为异常值。一般来说,Z-Score 绝对值大于 3 的数据点可以被视为异常值。使用pandas结合numpy实现 Z-Score 检测异常值的代码如下:

import pandas as pd
import numpy as np

data = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)

# 计算Z-Score
df['z_score'] = np.abs((df['col1'] - df['col1'].mean()) / df['col1'].std())

# 筛选出异常值
outliers = df[df['z_score'] > 3]
print(outliers) 

使用箱线图可视化数据,直观地展示数据分布和异常值,需要借助matplotlib库,代码如下:

import pandas as pd
import matplotlib.pyplot as plt

data = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)

# 绘制箱线图
df['col1'].plot(kind='box')
plt.show() 

在上述代码中,df[‘col1’].plot(kind=‘box’)用于绘制col1列数据的箱线图,通过箱线图可以直观地看到数据中的异常值(通常用离群点表示)。在检测到异常值后,可以根据具体情况进行处理,如删除异常值、对异常值进行修正或转换等。例如,如果确定某个异常值是由于数据录入错误导致的,可以将其修正为正确的值;如果异常值是真实存在的数据,但对分析结果有较大影响,可以考虑删除该数据点 。使用pandas删除异常值的代码如下:

import pandas as pd
import numpy as np

data = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)

# 计算Z-Score
df['z_score'] = np.abs((df['col1'] - df['col1'].mean()) / df['col1'].std())

# 删除异常值
filtered_df = df[df['z_score'] <= 3]
print(filtered_df) 

上述代码通过 Z-Score 方法检测出异常值,并使用布尔索引删除了异常值,得到了一个不包含异常值的DataFrame。

四、数据标准化与归一化方法

4.1 标准化与归一化的概念

在数据处理过程中,标准化和归一化是两种重要的数据变换方法,它们主要用于消除数据特征之间的量纲影响,使不同特征处于同一尺度,便于后续的数据分析和模型训练。

  • 标准化(Standardization),也称为 Z-Score 标准化,是将数据按比例缩放,使之符合标准正态分布,即均值为 0,标准差为 1 。其核心思想是通过对数据进行平移和缩放,将数据转换为均值为 0、标准差为 1 的分布。标准化的作用在于,它能够保持数据的分布形状不变,只是对数据进行了位置和尺度的调整,使得不同特征之间具有可比性。例如,在分析学生的各科成绩时,不同科目的满分和平均分可能不同,通过标准化可以将各科成绩统一到一个标准尺度上,便于比较学生在不同科目上的相对表现。
  • 归一化(Normalization)通常是将数据缩放到 [0,1] 或者 [-1,1] 的范围内 。它的目的是将数据映射到一个特定的区间,消除数据的尺度差异,使数据更加集中在一个较小的范围内。在图像数据处理中,像素值通常在 0 - 255 之间,通过归一化可以将其缩放到 [0,1] 区间,方便后续的计算和处理。

标准化和归一化的主要区别在于:标准化是基于数据的均值和标准差进行变换,而归一化是基于数据的最大值和最小值进行变换;标准化更注重数据的分布特征,而归一化更注重数据的尺度范围。

4.2 标准化方法

常见的标准化方法是 Z-Score 标准化,其计算公式为:在这里插入图片描述

其中,(z_i)是标准化后的数据,(x_i)是原始数据,(\mu)是数据的均值,(\sigma)是数据的标准差。
计算步骤如下:

  1. 计算数据的均值:(\mu):(\mu = \frac{1}{n} \sum_{i=1}^{n} x_i),其中(n)是数据的个数。

  2. 计算数据的标准差:(\sigma = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2})。

  3. 根据公式计算标准化后的数据(z_i)

使用 Python 的numpy库实现 Z-Score 标准化的代码如下:

import numpy as np

# 原始数据
data = np.array([1, 2, 3, 4, 5])

# 计算均值和标准差
mean = np.mean(data)
std = np.std(data)

# 进行Z-Score标准化
standardized_data = (data - mean) / std

print(standardized_data) 

4.3 归一化方法

常见的归一化方法是 Min-Max 归一化,也称为离差标准化,它使结果值映射到 [0,1] 之间,转换函数如下:(x_i^* = \frac{x_i - \min(X)}{\max(X) - \min(X)})

其中,(x_i^*)是归一化后的数据,(x_i)是原始数据,(min(X))和(max(X))分别是数据集中的最小值和最大值。
计算步骤如下:

  1. 找出数据集中的最小值(min(X))和最大值(max(X))。
  2. 对每个数据点(x_i),根据公式计算归一化后的数据(x_i^*)
    使用 Python 的numpy库实现 Min-Max 归一化的代码如下:
import numpy as np

# 原始数据
data = np.array([1, 2, 3, 4, 5])

# 计算最小值和最大值
min_val = np.min(data)
max_val = np.max(data)

# 进行Min-Max归一化
normalized_data = (data - min_val) / (max_val - min_val)

print(normalized_data) 

4.4 标准化与归一化的应用场景

在不同的机器学习算法和数据分析场景中,选择合适的标准化和归一化方法非常重要:

  • 在基于距离度量的算法中:如 KNN、K-Means 聚类算法,标准化和归一化可以避免某一个取值范围特别大的特征对距离计算造成影响,提高模型的精度。在 KNN 算法中,如果一个特征的值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖。此时,使用标准化或归一化方法可以使各个特征在距离计算中发挥相对均衡的作用。
  • 在梯度下降优化算法中:归一化可以加快模型的收敛速度。例如在逻辑回归和神经网络的训练中,归一化后的数据可以使目标函数的等高线变得更圆,梯度下降的方向更接近最小值的方向,从而更快地收敛。
  • 当数据分布接近正态分布时:标准化可能是一个更好的选择,因为许多机器学习算法(如线性回归、逻辑回归、支持向量机等)在设计时都假设输入数据是正态分布的,标准化能够保持数据的分布形状,更符合这些算法的假设,从而提高模型的性能。
  • 如果数据存在异常值,或者最大最小值非常不稳定:归一化可能更为合适。因为归一化主要受到最大值和最小值的影响,对异常值相对鲁棒,而标准化涉及均值和标准差,对异常值比较敏感,异常值的存在可能会影响处理后数据的分布。在处理房价数据时,如果存在个别价格极高的豪宅(异常值),使用归一化可以减少这些异常值对数据整体尺度的影响,使数据更稳定。

五、总结与展望

数据清洗与预处理是数据处理流程中不可或缺的环节,其重要性不言而喻。通过去除噪声数据、处理缺失值和纠正错误数据等常见任务,能够显著提高数据的质量和可用性,为后续的数据分析、机器学习和深度学习等任务提供坚实的数据基础。在实际应用中,Python 的pandas库为数据清洗与预处理提供了强大而便捷的工具,使我们能够高效地处理各种类型的数据。同时,数据标准化与归一化方法则针对数值型数据,消除了量纲影响,提升了数据的可比性和模型的性能。

展望未来,随着大数据和人工智能技术的迅猛发展,数据清洗与预处理技术也将迎来新的机遇和挑战。一方面,数据规模和复杂性的不断增加,将对数据清洗与预处理的效率和准确性提出更高要求,促使我们开发更加自动化、智能化的算法和工具,以适应大数据时代的需求。例如,利用深度学习算法自动识别和处理缺失值、异常值等问题,实现数据清洗的自动化和智能化。另一方面,随着人工智能技术在各个领域的广泛应用,对高质量数据的需求也将日益增长,这将进一步凸显数据清洗与预处理的重要性。在医疗领域,精准的疾病诊断和治疗需要高质量的医疗数据,数据清洗与预处理能够确保医疗数据的准确性和可靠性,为人工智能辅助医疗决策提供有力支持。此外,数据安全和隐私保护也将成为数据清洗与预处理过程中需要重点关注的问题,如何在保证数据质量的同时,保护数据的安全和隐私,将是未来研究的重要方向之一。

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

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

相关文章

支持批量导出的软件,效率拉满!

今天给大家分享一款超实用的软件&#xff0c;它能帮你批量导出PPT里的图片&#xff0c;简直是提升工作效率的神器&#xff01; PPT转jpg PPT逐页导出为图片 这款软件超级简单易用&#xff0c;打开就能直接上手&#xff0c;不需要复杂的设置。 这个软件有三种功能&#xff0c; …

论文笔记(七十二)Reward Centering(二)

Reward Centering&#xff08;二&#xff09; 文章概括摘要2 简单的奖励中心 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…

Jmeter连接数据库、逻辑控制器、定时器

Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一&#xff1a;在测试计划面板点击“浏览”按钮&#xff0c;将你的JDBC驱动添加进来 方式二&#xff1a;将MySQL驱动jar包放入到lib/ext目录下&#xff0c;重启JMeter 配置数据库连接信…

ORM框架详解:为什么不直接写SQL?

想象一下&#xff0c;你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者&#xff0c;你可能会想&#xff1a;“我已经学会了SQL&#xff0c;为什么还要使用ORM框架呢&#xff1f;直接写SQL语句不是更简单、更直接吗&#xff1f;” 如…

RT-Thread+STM32L475VET6实现红外遥控实验

文章目录 前言一、板载资源介绍二、具体步骤1. 确定红外接收头引脚编号2. 下载infrared软件包3. 配置infrared软件包4. 打开STM32CubeMX进行相关配置4.1 使用外部高速时钟&#xff0c;并修改时钟树4.2 打开定时器16(定时器根据自己需求调整)4.3 打开串口4.4 生成工程 5. 打开HW…

推荐一个github star45k+进阶的java项目及知识的网站

mall是github上star 45k的一个java项目 mall项目是一套电商系统&#xff0c;包括前台商城系统及后台管理系统&#xff0c;基于SpringBootMyBatis实现&#xff0c;采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心…

pyside6学习专栏(二):程序图像资源的加载方式

pyside6中的QLabel控件可以加载图像和gif动画&#xff0c;可以直接从外部文件加载&#xff0c;也可以从QRC类型的文件(实际是一脚本文件)经编绎生成对应的资源.PY模块文件(就是将qrc文本中指定的资源文件的16制内容写入.py文件)来使用&#xff0c;本文对两种方式作了一简单的示…

项目管理的核心是什么?

项目管理不仅仅是按照一定的计划进行任务的执行&#xff0c;更重要的是如何在面对复杂和动态的环境下&#xff0c;保证项目顺利进行并达到预期的结果。它的核心在于高效的资源配置、团队的合作与协调、风险管理及变更管理。在这些关键因素的支持下&#xff0c;项目能够高效地从…

10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

作者&#xff1a;后端小肥肠 目录 1. 前言 为什么选择DeepSeek&#xff1f; 本文技术栈 2. 环境准备 2.1. 后端项目初始化 2.2. 前端项目初始化 3. 后端服务开发 3.1. 配置文件 3.2. 核心服务实现 4. 前端服务开发 4.1. 聊天组件ChatWindow.vue开发 5. 效果展示及源…

【C++第二十章】红黑树

【C第二十章】红黑树 红黑树介绍&#x1f9d0; 红黑树是一种自平衡的二叉搜索树&#xff0c;通过颜色标记和特定规则保持树的平衡性&#xff0c;从而在动态插入、删除等操作中维持较高的效率。它的最长路径不会超过最短路径的两倍&#xff0c;它的查找效率比AVL树更慢(对于CPU…

Docker+Dify部署DeepSeek-r1本地知识库

安装配置Docker Desktop 软件下载 Docker Desktop版本:4.38.0.181591 Docker Desktop下载地址:Docker: Accelerated Container Application Development 或者从这里下载:DockerDesktop-4.38.0.181591资源-CSDN文库 点击图下所示位置,下载windows-AMD64版本软件 启用Hy…

读书笔记:要点提炼《基于大模型的RAG应用开发与优化——构建企业级LLM应用》(严灿平)

文章目录 一、大模型基础与演进1.1 大模型时代与生成式 AI 爆发1.2 大模型应用的纵深演进及实际局限 二、RAG 基础概念与必要性2.1 RAG 的理论基础与应用动机2.2 简单 RAG 场景示例解析 三、RAG 应用技术架构3.1 经典架构与业务流程设计3.1.1 RAG 应用的整体流程与模块划分3.1.…

推荐几款较好的开源成熟框架

一. 若依&#xff1a; 1. 官方网站&#xff1a;https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Cl…

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…

Linux高并发服务器开发 第十九天(线程 进程)

目录 1.进程组和会话 2.守护进程 2.1守护进程daemon概念 2.2创建守护进程 3.线程 3.1线程的概念 3.2线程内核三级映射 3.3线程共享 3.4线程优缺点 4.线程控制原语 4.1获取线程id 4.2创建线程 4.3循环创建N个子线 4.4子线程传参地址&#xff0c;错误示例 4.5线程…

图论:tarjan 算法求解强连通分量

题目描述 有一个 n n n 个点&#xff0c; m m m 条边的有向图&#xff0c;请求出这个图点数大于 1 1 1 的强连通分量个数。 输入格式 第一行为两个整数 n n n 和 m m m。 第二行至 m 1 m1 m1 行&#xff0c;每一行有两个整数 a a a 和 b b b&#xff0c;表示有一条…

UE5.3 C++ TArray系列(一)

一.TArray概述 它们就相当于C动态数组Vector&#xff0c;但是被UE封装了&#xff0c;懂得都懂反射嘛&#xff0c;要不一不小心就被回收了。 它真的非常常见&#xff0c;我所用的容器中&#xff0c;它绝对排名第一&#xff0c;第二是TMap。 同类好理解&#xff0c;我平时也常用…

【微中子代理踩坑-前端node-sass安装失败】

微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…

一文了解PLM项目管理系统

PLM项目管理系统详解 PLM项目管理系统的定义和功能 PLM&#xff08;Product Lifecycle Management&#xff0c;产品生命周期管理&#xff09;项目管理系统是一种全面管理产品从概念设计、开发、制造、服务到最终退役全过程的软件系统。该系统通过集成产品数据、工作流程、人员…

Pycharm+CodeGPT+Ollama+Deepseek

首先&#xff0c;体验截图&#xff1a; 接着&#xff1a; 1、下载Ollama&#xff1a; Download Ollama on macOS 2、下载模型 以1.5b为例&#xff0c;打开命令行&#xff0c;输入: ollama run deepseek-r1:1.5b 3、Pycharm安装Code GPT插件 打开PyCharm&#xff0c;找到文…