当前位置: 首页 > news >正文

算法自学 Lesson3 - 逻辑回归(LR)

目录

背景

一、适用数据集

1. 数据集选择

1.1 领域

1.2 数据集维度

1.3 记录行(样本数量)

2. 本文数据集介绍

3. 数据集下载

注意

二、逻辑回归的基本原理

1. 目的

2. Sigmoid 函数

3. 类别划分

4. 召回率

三、代码

1. 导入所需包&数据集

2. 数据预处理&数据编码

2.1 数据预处理

2.2 数据预处理&编码(Titanic dataset版,可跳过)

3. 绘制热力图

4. 数据拆分&标准化

5. 逻辑回归分类算法

6. 绘制 PR / ROC 曲线

6.1 PR 曲线

6.2 ROC 曲线


背景

逻辑回归(Logistic Regression)是一种用于分类问题的统计模型,尽管名字里有“回归”,但它主要用于解决二元分类(binary classification)或多类分类问题。与线性回归不同,逻辑回归输出的是一个概率,通过设置阈值将概率转换为类别。

一、适用数据集

1. 数据集选择

逻辑回归适用于二分类问题,即输出为两个类别(如【是/否】或【正/负】)。若要练习逻辑回归分析,在选择数据集时可以参考以下 3 个方面。反过来,如果在为项目选择合适的算法模型时,数据集符合以下条件,则可以选用逻辑回归进行数据分析。

1.1 领域

逻辑回归广泛应用于各种领域,包括但不限于:

  • 医疗健康:预测某人是否患病(如患病/不患病,阳性/阴性)。
  • 金融:预测贷款申请是否会被批准,或是否会违约(如信用风险评估)。
  • 市场营销:根据用户行为预测是否会购买产品或订阅服务。
  • 社交媒体:通过用户行为预测某个帖子是否会获得点赞或分享。
  • 人力资源:预测员工是否会离职。
  • 教育:预测学生是否会通过考试或被录取。

1.2 数据集维度

  • 特征数(维度):逻辑回归适用于中低维度的数据集。一般情况下,输入特征数从 2 到 20 维是常见的范围。过多的特征可能会导致过拟合,尤其是当样本数量不足时。
  • 类别标签:逻辑回归特别适用于二分类任务,因此类别标签只有两个(如 0 和 1,或者 “A 类” 和 “B 类”)。

1.3 记录行(样本数量)

样本量大小:逻辑回归的一个优势是即使在较小的数据集上也能有效工作,通常数百到几千条记录的样本集即可获得良好的训练效果。典型样本数量可以在 100 到 10,000 行之间:

  • 小型数据集(100-1000 行):适合初学者理解逻辑回归的基本概念和快速训练模型。
  • 中型数据集(1000-10,000 行):适合做一些更复杂的练习,如交叉验证、正则化等。

2. 本文数据集介绍

Titanic 数据集 基于 1912 年泰坦尼克号沉船事故的真实乘客数据,泰坦尼克号是当时最大的远洋客轮之一,但在其首次航行中不幸撞上冰山沉没,超过1500人遇难。该数据集包含了泰坦尼克号部分乘客的个人信息以及他们是否在船难中幸存,分析目的是:预测哪些乘客能够在这场灾难中幸存下来

数据集中包含 12 列的维度信息,详细如下:

  • PassengerId: 乘客的唯一标识符。
  • Survived: 是否幸存,目标变量(0 = 未幸存,1 = 幸存)。
  • Pclass: 乘客舱位等级(1 = 一等舱,2 = 二等舱,3 = 三等舱)。
  • Name: 乘客姓名。
  • Sex: 性别(male = 男性,female = 女性)。
  • Age: 年龄(有部分缺失值)。
  • SibSp: 同行的兄弟姐妹或配偶人数。
  • Parch: 同行的父母或子女人数。
  • Ticket: 票号。
  • Fare: 票价。
  • Cabin: 船舱号(有部分缺失值)。
  • Embarked: 登船地点(C = Cherbourg, Q = Queenstown, S = Southampton)。

数据记录行共有 1309 行,属于中型数据集。

3. 数据集下载

数据集下载地址:https://www.kaggle.com/datasets/heptapod/titanic

也可以在文首 绑定资源 中下载获取,原版下载出来有多列是无意义的【zero】列,作者这里直接在表里删了,上传资源为处理后的。自行在 Kaggle 下载的朋友记得处理【zero】列。

注意

Kaggle 上 Titanic 数据集有俩都点赞比较高,不要选择看起来更完整的 Titanic dataset!

博主先使用了 Titanic dataset,因为预测结果全都是 100%,于是开始 debug。。。

直到发现这个数据集的获救与否是由性别决定的(dead。。)

重复:千万要使用对的 Titanic 数据集啊!

二、逻辑回归的基本原理

1. 目的

逻辑回归的目的是预测输入数据属于某一类别的概率。它最常用于二元分类问题,例如:预测某个乘客在 Titanic 数据集中是否生还。

2. Sigmoid 函数

Sigmoid 函数的公式:

\sigma(z) = \frac{1}{1 + e^{-z}}

逻辑回归模型的核心是 Sigmoid 函数,它将线性回归的输出值(任何实数)压缩到 [0, 1] 的范围内,这样我们可以将输出解释为概率。

其中,z = w^T X + b ,即将特征向量 X 经过线性组合(权重 w 和偏置 b)后输入到 Sigmoid 函数中。

通过这种方式,我们将线性回归输出的值(通常是实数)转换为一个概率值:

P(y=1|X)

3. 类别划分

逻辑回归通常使用 0.5 作为默认的阈值,将输出的概率值转换为二元分类的类别:

\hat{y} = \begin{cases} 1 & \text{if } P(y=1|X) > 0.5 \\ 0 & \text{if } P(y=1|X) \leq 0.5 \end{cases}

这个阈值可以根据具体的需求调整。

4. 召回率

召回率(Recall)是分类模型评估指标之一,尤其在 二元分类 问题中常用。召回率表示在所有实际为正例(Positive)的样本中,模型正确识别出的正例样本的比例。

公式:

\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}

三、代码

完整版代码和初步处理的数据集见文章绑定资源

1. 导入所需包&数据集

#数据分析与可视化包
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号from sklearn.model_selection import learning_curve, train_test_split
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import LogisticRegression #逻辑回归
from sklearn.metrics import roc_curve, auc, precision_recall_curve
from sklearn.metrics import log_loss
from sklearn.pipeline import make_pipelinefrom sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score
#accuracy_score,准确率
#f1_score,精确率和召回率的调和平均数
#precision_score,精确率
#recall_score,召回率from sklearn.metrics import confusion_matrix, classification_report
#confusion_matrix混淆矩阵
#classification_report任务性能分析Titanic_data=pd.read_csv("D:/project/Jupyter/csdn/AI_ML/datasets/Lesson3_Titanic.csv")Titanic_dataTitanic_data.info()

2. 数据预处理&数据编码

2.1 数据预处理

# 将 float 类型转换为 int 类型
Titanic_data['Age'] = Titanic_data['Age'].astype('int64')
Titanic_data['Fare'] = Titanic_data['Fare'].astype('int64')# 用众数填充 Embarked(登船地点)列缺失值
Titanic_data['Embarked'].fillna(Titanic_data['Embarked'].mode()[0], inplace=True)# 将 float 类型转换为 int 类型
Titanic_data['Embarked'] = Titanic_data['Embarked'].astype('int64')

2.2 数据预处理&编码(Titanic dataset版,可跳过)

本部分是 Titanic dataset 的预处理,相对完整。参考一下就行,在 Titanic 数据集用不到。

# 填补缺失值
# Age(年龄)列用中位数填充,Embarked(登船地点)列用众数填充
# 按乘客的票舱等级(Pclass)进行分组,分别计算每个等级的均值填补 Fare(票价)列
Titanic_data['Age'].fillna(Titanic_data['Age'].median(), inplace=True)
Titanic_data['Embarked'].fillna(Titanic_data['Embarked'].mode()[0], inplace=True)
Titanic_data['Fare'] = Titanic_data.groupby('Pclass')['Fare'].apply(lambda x: x.fillna(x.median()))# 将 非int或float 类型列进行编码变为 int 类型
# 将性别和登船港口编码为数值
Titanic_data['Sex'] = Titanic_data['Sex'].map({'male': 0, 'female': 1})
Titanic_data['Embarked'] = Titanic_data['Embarked'].map({'C': 0, 'Q': 1, 'S': 2})# 丢弃无用的列
Titanic_data.drop(['Name', 'Ticket', 'Cabin'], axis=1, inplace=True)# 对 Age 和 Fare 列进行四舍五入,并转换为 int64 型
Titanic_data['Age'] = Titanic_data['Age'].round().astype('int64')
Titanic_data['Fare'] = Titanic_data['Fare'].round().astype('int64')# 查看处理后的数据
Titanic_data.head()Titanic_data.info()

由于 'Name'、 'Ticket' 列,即 “姓名”、“票号” 列都是唯一的,在判断乘客是否会遇难时无法起到帮助分析作用,即可删去。

由于 'Cabin' 列,即 “船舱号” 并无性质表现,且缺失过多,分析是可删去,以免大量的填补数据干扰模型预测结果。

3. 绘制热力图

显示各个特征之间的相关性,并显示不同特征之间的相关关系。观察数据各维度之间的相关性,同时具有验证数据集可用性的功效(如作者通过热力图发现 Titanic dataset 用不了)。

plt.figure(figsize=(10, 8))
sns.heatmap(Titanic_data.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()

4. 数据拆分&标准化

# 特征选择
X = Titanic_data.drop('Survived', axis=1)
y = Titanic_data['Survived']# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化特征(可选,但推荐逻辑回归中进行特征缩放)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

5. 逻辑回归分类算法

# 使用 scikit-learn 的逻辑回归模型
model = LogisticRegression(max_iter=10000,penalty='l2',#C=0.1,#solver='liblinear',class_weight="balanced")
model.fit(X_train, y_train)# 预测
y_pred_test = model.predict(X_test)
print(classification_report(y_test,y_pred_test))y_pred_train = model.predict(X_train)
print(classification_report(y_train,y_pred_train))confusion_matrix(y_train,y_pred_train)#生成混淆矩阵#画热力图
sns.heatmap(confusion_matrix(y_test,y_pred_test),annot=True,fmt="d")accuracy_score(y_pred_test,y_test)#准确率
f1_score(y_pred_test,y_test)#精确率和召回率的调和平均数# 从负类,计算模型精确率和召回率
precision_score(y_pred_test,y_test,pos_label=0)#精确率
recall_score(y_pred_test,y_test,pos_label=0)#召回率print(model.coef_)print(model.intercept_)# 显示模型系数
coefficients = pd.DataFrame(model.coef_.flatten(), index=X.columns, columns=['Coefficient'])
print(coefficients)pd.DataFrame(model.coef_,columns=X.columns).T.plot(kind="barh")#显示系数大小model.predict_proba(X_test)model.predict(X_test)# 从正类,计算精确率和召回率
precision = precision_score(y_test, y_pred_test,pos_label=1)
recall = recall_score(y_test, y_pred_test,pos_label=1)print(f"Precision: {precision}")
print(f"Recall: {recall}")

6. 绘制 PR / ROC 曲线

6.1 PR 曲线

显示模型在不同阈值下的精确率和召回率的权衡关系。

probs=model.predict_proba(X_test)[:,0]
precision,recall,thresholds=precision_recall_curve(y_test,probs,pos_label=0)
plt.plot(recall,precision)
plt.title("Precision-Recall Curve")
plt.xlabel("recall")
plt.ylabel("precision")pd.DataFrame([precision,recall,thresholds])

6.2 ROC 曲线

probs=model.predict_proba(X_test)[:,1]
fpr,tpr,thresholds=roc_curve(y_test,probs,pos_label=1)
roc_auc = auc(fpr, tpr)
plt.plot(fpr,tpr, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.title("roc_curve")
plt.xlabel("fpr")
plt.ylabel("tpr")
plt.legend(loc='lower right')
plt.show()

AUC 在 0.8 到 0.9 之间,表明模型具有良好的性能,可以有效地区分正例和负例。

相关文章:

算法自学 Lesson3 - 逻辑回归(LR)

目录 背景 一、适用数据集 1. 数据集选择 1.1 领域 1.2 数据集维度 1.3 记录行(样本数量) 2. 本文数据集介绍 3. 数据集下载 注意 二、逻辑回归的基本原理 1. 目的 2. Sigmoid 函数 3. 类别划分 4. 召回率 三、代码 1. 导入所需包&数…...

文件IO流

1.文件流概念 2.文件创建方式 3.常用方法 4.IO流原理 (1)InputStream,OutputStream, Reader, Writer四个都是抽象类,无法直接new, 需要由子类继承,然后new子类; (2)Reader和Writer…...

拥塞控制与TCP子问题(粘包问题,异常情况等)

​拥塞控制 除了拥塞控制 以上的策越都是为了解决tcp 客户端和服务端提高效率,解决丢包的策略 但是拥塞控制是了为解决网络拥堵 出现了大面积丢包,我们发送方会判定是网络出现了问题? 丢包好解决,我们直接采用超时重传&#…...

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA,转运到另一个数组DataB中,这个基本结构里的各个参数应该如何配置呢? 首先是外设站点和存储器站点的起始地址、…...

【使用Flask构建RESTful API】从零开始开发简单的Web服务!

使用Flask构建RESTful API:从零开始开发简单的Web服务 引言 随着Web应用程序的广泛使用,RESTful API已成为现代Web服务的核心技术之一。通过RESTful API,我们可以轻松地创建、读取、更新和删除(CRUD)数据&#xff0c…...

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision,虽然好用,可大部分人用的是盗版,其实单片机程序小的话,完全可以用文本编辑器(推荐notepad)编写,然后用免费的sdcc来编译,下面介绍一下大致的过程。 sdcc…...

Java Lock LockSupport 源码

前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & LockSupport & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & LockSupport & 总结》(学习总结/最新…...

Elasticsearch基础操作入门

阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式,建议从以下几个步骤入手: 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念,例如: Index(索引):相当于数据库中…...

跨域问题解决办法

跨域问题在Web开发中是一个常见的问题,特别是在前后端分离的开发模式下。以下是一些解决跨域问题的办法: 一、后端配置CORS(跨来源资源共享) CORS是一种机制,它使用额外的HTTP头来告诉浏览器一个网页的当前来源&…...

【数据结构与算法】力扣 23. 合并 K 个升序链表

题干描述 23. 合并 K 个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入: lists [[1,4,5],[1,3,4],[2,6]] 输出: [1,1,2,3,4,4,5,6]…...

Java Lock CountDownLatch 总结

前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & CountDownLatch & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & CountDownLatch & 总结》(学习总…...

vue+spreadjs开发

创建vue3项目 pnpm create vite --registryhttp://registry.npm.taobao.org安装spreadjs包 pnpm install "grapecity-software/spread-sheets17.1.7" "grapecity-software/spread-sheets-resources-zh17.1.7" "grapecity-software/spread-sheets-vu…...

针对初学者的PyTorch项目推荐

文章目录 1. MNIST手写数字识别2. CIFAR-10图像分类3. 图像风格迁移4. 文本生成(使用RNN)5. 简单的问答系统6. 简单的生成对抗网络(GAN)7. 简单的推荐系统 对于初学者来说,选择一些简单且具有教育意义的项目来实践PyTo…...

Helm Chart文件介绍

介绍(这个还没有完善 ,目前在找工作呢) Helm是Kubernetes的包管理器,类似于Ubuntu中的apt、CentOS中的yum或Python中的pip,可以快速查找、下载和安装软件包。Helm主要由客户端组件helm和服务端组件Tiller组成&#xf…...

1Panel 是新一代的 Linux 服务器运维管理面板

1Panel 是一款新一代的 Linux 服务器运维管理面板,旨在通过现代化的 Web 界面帮助用户轻松管理 Linux 服务器。它集成了主机监控、文件管理、数据库管理、容器管理等功能,并且支持多语言和国际化,包括英语、中文(繁体)和日语。以下是 1Panel …...

Qml-ShaderEffect的使用

Qml-ShaderEffect的使用 ShaderEffect的概述 ShaderEffect使用自定义的顶点和片段着色器用于渲染一个矩形。用于在qml场景中添加阴影、模糊、着色和页面卷曲等效果。 Qt5和Qt6中ShaderEffect有一定区别,在Qt6中由于支持不同的渲染API,ShaderEffect是用…...

鸿蒙next之axios二次封装并携带cookie

由于官方提供的ohos.net.http模块,直接使用不是很灵活,就引入了第三方ohos/axios库。 以下是引入axios并进行二次封装的步骤: 1、DevEco Studio打开终端输入命令安装插件 ohpm install ohos/axios 2、新建RequestUtil.ets import { JSON, …...

WordPress中最值得推荐的AI插件:专家级指南

WordPress平台上,人工智能(AI)技术不断发展,为用户提供了丰富的工具和功能。对于有经验的用户,这些工具不仅能提升网站性能和用户体验,还能在安全和互动方面提供更多支持。在这篇文章中,我将为大…...

HTTP介绍及请求过程

HTTP(HyperText Transfer Protocol),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。以下是关于 HTTP 的详细介绍: 一、基本概念 定义与作用: HTTP 是互联网上应用最为广泛的一种网络协议,它定义了客户端和服务器之间请求和响应的标准方式。…...

WebGL进阶(五)-可视域

理论基础: 顶点着色器 Vertex Shader 主要是负责处理顶点位置、顶点颜色、顶点向量等顶点的数据;处理一些顶点的变换:例如在进行视图变换和投影变换时MVP矩阵会改变顶点的位置信息。 输入: 顶点着色器输入部分主要是声明&…...

2024性价比家居好物有哪些?推荐五款值得每个家庭拥有的好物品牌!

每年双11的时候我都特别喜欢买一些家居好物,今年双11也不例外,经过我一两周的精心挑选,专门选了五款性价比高的家居好物,接下来给大家分享一下! 家居好物一、希亦ACE Pro内衣洗衣机 我买过、评测过的内衣洗衣机&#…...

字节青训-查找热点数据问题

问题描述 给你一个整数数组 nums 和一个整数 k&#xff0c;请你返回其中出现频率前 k 高的元素。请按升序排列。 1 < nums.length < 10^5k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一&#xff0c;换句话说&#xff0c;数组中前 k 个高频元素的集合…...

Codeforces Round 981 (Div. 3) (A~F)

文章目录 A. Sakurako and Kosuke思路code B. Sakurako and Water思路code C. Sakurakos Field Trip思路code D. Kousukes Assignment思路code E. Sakurako, Kosuke, and the Permutation思路code F. Kosukes Sloth思路code Codeforces Round 981 (Div. 3) A. Sakurako and Ko…...

shell脚本实例(4)while实现1+...+100,linux新增用户

while实现1到100求和 #!/bin/bash/ s0 i1 #-le小于等于 while [ $i -le 100 ] dos$[ $s$i ]i$[ $i1 ] done echo $s echo $i 执行结果如下 修改用户名密码脚本 #!/bin/bash/ #提示用户输入用户名 read -p "请输入用户名&#xff1a;"username useradd $username #提…...

docker XML详解

下列为一个基本的运行docker镜像文件 {"Id": "62a82b0e69930e54c291095f632adde58dd0b247adba3a048385a55c87e38eba","Created": "2024-07-11T04:00:09.36091853Z","Path": "java","Args": ["-ja…...

web前端边框详解,弹性盒子的使用(仿写购物网页)

边框详解 1. 边框宽度&#xff08;border - width&#xff09; - 具体取值&#xff1a;可以是具体的长度值&#xff0c;如 px &#xff08;像素&#xff09;、 pt &#xff08;点&#xff09;、 em &#xff08;相对单位&#xff09;等。例如&#xff0c; border - width: 2px…...

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 2024年计算机视觉与艺术国际学术会议&#xff08;CVA 2024&#xff09;作为2024年人工智能、数字媒体技术与交互设计国际学术会议&#xff08;ICADI 2024)的分会。此次大会旨在汇聚全球在计算机视觉与艺术…...

认识软件测试

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 什么是测试&#xff1f; 测试在⽣活中处处可⻅ 例子: 对某款购物软件进⾏测试 启动测试&#xff1a;点击软件图标&#…...

poi处理excel文档时,与lombok的@Accessors(chain = true)注解冲突

poi在反射封装数据时会判断set方法的返回是不是Void&#xff0c;加上Accessors会造成NoSuchMethodException异常...

我接触csdn中的c++的时间

大家好&#xff0c;我是AC使者&#xff0c;不知不觉我也来到CSDN半年了&#xff01;在这半年我也看到了自身的不足&#xff0c;我也还有了很多粉丝&#xff0c;所以我今天来总结一下这半年的东西。 第一篇--------结构体数组 关于结构体数组的理解-CSDN博客 第二篇--------字…...

ssh网站开发的书籍/谷歌引擎搜索入口

理解这个问题&#xff0c;就是pods在Kubernetes中怎么进行failover 在Kubernetes的work node上有kubelet&#xff0c;会负责监控该work node上的pods&#xff0c;如果有container挂掉了&#xff0c;它会负责重启 但是如果进程没有挂掉&#xff0c;只是hang住&#xff0c;或是死…...

手机网站网络环境/郑州网站建设公司哪家好

传送门&#xff1a;hdu 1231 最大连续子序列 解题思路 首先我们先要确定一下状态方程&#xff0c; 我们必须先要找到哪个子序列的和最大&#xff0c;所以dp[i]里面保存的是前i-1个中子序列中和最大的。 所以状态方程就能写出&#xff1a;dp[i] max(a[i],dp[i-1]a[i])其中a…...

无忧网站建设公司/建立网站流程

from:http://blog.csdn.net/wdaming1986/article/details/8267156 先画一个Launche启动的流程图&#xff0c;虽然不是特别规范&#xff0c;但是勉强能看看&#xff0c;我也整理下Launcher的一系列的流程图&#xff0c;最近修改Launcher&#xff0c;又对Launcher加深了一些了…...

wordpress的好/合肥做网站公司哪家好

如图&#xff0c;STM32F103C8单片机的USART1串口连接MAX3232芯片&#xff0c;原本是用的4个50V 0.1μF的有极性电解电容&#xff0c;串口能在115200波特率下正常收发。 电路图如下&#xff1a; PCB走线如下&#xff1a; 其中9针串口插座采用的是Altium Designer的Miscellaneous…...

门户网站建设公司/手机百度云电脑版入口

需求&#xff1a;爬取网站上的公司信息 代码如下&#xff1a; import json import os import shutil import requests import re import timerequests.packages.urllib3.disable_warnings()#通过url请求接口&#xff0c;获取返回数据 def getPage(url,headers):try:response r…...

网站备案 换空间/武汉百度推广电话

export SPARK_HOME/usr/local/spark export PATH$PATH:$SPARK_HOME/bin bash: export: “path” not a valid identifier 由于“”两边留有空格所致 转载于:https://www.cnblogs.com/buxizhizhoum/p/9580450.html...