Tomcat启动流程

article/2025/11/10 1:13:49

一、流程简述

在Tomcat的bin目录下存放着Tomcat在Windows环境下和Linux环境下的启动脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiKJ2Xdh-1614825664604)(/Users/admain/Library/Application Support/typora-user-images/image-20210227164331077.png)]

在start脚本文件中会去启动catalina的脚本文件

在这里插入图片描述

catalina脚本文件中会去调用启动类(org.apache.catalina.startup.Bootstrap)来进行Tomcat的初始化

在这里插入图片描述

启动的流程图如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fr097N0U-1614825664613)(/Users/admain/Library/Application Support/typora-user-images/image-20210208170422534.png)]

二、启动流程

Init 阶段

1、Bootstrap init()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwFxiQHe-1614825664617)(/Users/admain/Library/Application Support/typora-user-images/image-20210227171007352.png)]

利用反射机制初始化Catalina

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3YNO8Gsu-1614825664618)(/Users/admain/Library/Application Support/typora-user-images/image-20210227171345095.png)]

2、Bootstrap init() -> Catalina load()

创建完Catalina对象并完成赋值后会开始初始化各个组件,这里先调用load

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2YJOmc1-1614825664619)(/Users/admain/Library/Application Support/typora-user-images/image-20210228192514059.png)]

进入方法后设置的是load,然后通过反射去执行Catalina类的load()方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WY27p159-1614825664620)(/Users/admain/Library/Application Support/typora-user-images/image-20210228192939843.png)]

3、Catalina 创建各个组件

这个地方会去生成server.xml文件的解析工具,来创建相关的组件(没有修改过server.xml的则是tomcat的默认配置)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8euWGgy-1614825664621)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140142997.png)]

里面会配置创建各个组件的规则、方法、类名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HW6eQ1aB-1614825664622)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140211188.png)]

解析完成后读取文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNzOMALq-1614825664623)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140333846.png)]

开始各个组件的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLEvqCp5-1614825664624)(/Users/admain/Library/Application Support/typora-user-images/image-20210301140423769.png)]

4、Catalina -> Server init()

创建完成后开始执行初始化的链路

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmNqZaf0-1614825664627)(/Users/admain/Library/Application Support/typora-user-images/image-20210228193835097.png)]

因为Catalina内部组件都依靠Lifecycle接口来管理各组件的生命周期,所以我们主要看这个方法(这里放一张大致的接口管理类图)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qdMypCF-1614825664628)(/Users/admain/Library/Application Support/typora-user-images/image-20210208182638241.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7c0N0dgu-1614825664629)(/Users/admain/Library/Application Support/typora-user-images/image-20210228194014304.png)]

这个方法是个抽象方法,因为我们第一个初始化的是Server所以我们进入这个类中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2QE1BiZ-1614825664630)(/Users/admain/Library/Application Support/typora-user-images/image-20210228194127786.png)]

一个Server下会有多个Service,所以这里是遍历的去初始化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmiTdMcM-1614825664631)(/Users/admain/Library/Application Support/typora-user-images/image-20210301142358583.png)]

6、Server -> Service init()

这里会初始化Engine
在这里插入图片描述

7、Service -> Engine Init()

这里会调用父类的初始化,创建了一个线程池 (这里后续没有init Host- Context - Wrapper等,而是在下面Engine的start启动后直接启动)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJzVrjiB-1614825664632)(/Users/admain/Library/Application Support/typora-user-images/image-20210301143609028.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ellw3Vl1-1614825664633)(/Users/admain/Library/Application Support/typora-user-images/image-20210303144940450.png)]

6、Server -> Executor init()

这里我们server.xml并没有配置线程池所以没有初始化我们自己的线程池

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6iHQQKS-1614825664635)(/Users/admain/Library/Application Support/typora-user-images/image-20210303145331177.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmhtzpSb-1614825664636)(/Users/admain/Library/Application Support/typora-user-images/image-20210303145137550.png)]

7、Server -> Connector init()

这里会对Connector进行加载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvNpLatE-1614825664636)(/Users/admain/Library/Application Support/typora-user-images/image-20210303150228849.png)]

在这里插入图片描述

初始化Connector的时候会创建Adapter,Adapter用于Request/Response <–> ServletRequest/ServletResponse 之间的相互转换(适配器模式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtETGUIe-1614825664638)(/Users/admain/Library/Application Support/typora-user-images/image-20210303153835047.png)]

然后初始化ProtocolHandler

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nu6SQtFa-1614825664639)(/Users/admain/Library/Application Support/typora-user-images/image-20210303153921526.png)]

9、Connector -> ProtocolHandler init()

Tomcat支持两种网络协议 HTTP 和 AJP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CsyFgf5k-1614825664639)(/Users/admain/Library/Application Support/typora-user-images/image-20210303154025999.png)]

因为我们server.xml配置的是HTTP,所以走的是AbstractHttp11Protocol,然后回去加载父类的init()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G8hsgKBl-1614825664640)(/Users/admain/Library/Application Support/typora-user-images/image-20210303155851089.png)]

​ 父类会初始化Endpoint

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4c5ottY-1614825664640)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160058851.png)]

10、AbstractProtocol -> Endpoint init()

Endpoint主要的作用就是接收客户端请求的连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNuRhfxt-1614825664641)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160655404.png)]

绑定端口号,默认的是NioEndpoint

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QD9xmPqg-1614825664642)(/Users/admain/Library/Application Support/typora-user-images/image-20210303160748497.png)]

默认配置也是本机的8080端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFNTdOGW-1614825664642)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161028545.png)]

Start 阶段

11、Bootstrap -> Server start()

load中的init加载完成后就开始start各组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zowj6Zi6-1614825664643)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161325861.png)]

先判断是否加载,然后开始start()方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCTv57dL-1614825664644)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161513899.png)]

Lifecycle接口管理了组件的所有生命周期,所以start也和init是一样的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJj1FlyE-1614825664644)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161633971.png)]

12、Server -> Service start()

这里会启动Engine、自定义线程池 和 Connector

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jw9ECMGs-1614825664645)(/Users/admain/Library/Application Support/typora-user-images/image-20210303161758572.png)]

13、Service -> Engine start()

调用父类的启动方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5X9V552-1614825664646)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162018333.png)]

14、 Engine -> Host start()

父类这里启动会先查询Engine下的子类对象,Engine -> Host -> Context -> Wrapper, 查询到子类对象后会通过线程池去执行创建启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKH6hrMz-1614825664646)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162254048.png)]

StartChild是实现了Callable接口的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULVs3Ylv-1614825664647)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162422313.png)]

启动Host

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THjWCSBj-1614825664647)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163207366.png)]

启动完成后回去调用下父类的启动方法,Host这里也会去拿它的子类然后启动,但是现在是没有的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CuexiS2p-1614825664648)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163301532.png)]

然后会去设置下生命周期状态 -> Starting

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HLFL6kgv-1614825664649)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163736278.png)]

这里要提一下Lifecycle的生命周期监听器,他会监听对象的生命周期,像上面一样设置新的生命周期状态的时候(如:NEW、INIT、START等…),都会执行这个方法 – 它有多个实现,跟代码的时候要注意

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOorxSB3-1614825664649)(/Users/admain/Library/Application Support/typora-user-images/image-20210303162848311.png)]

这里监听到了Host的创建,当前状态为Starting

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L72Ct25k-1614825664650)(/Users/admain/Library/Application Support/typora-user-images/image-20210303163650767.png)]

15、 Host -> Context start()

执行start() 方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjs9jUjS-1614825664650)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164042796.png)]

调用线程池去创建Web应用的描述对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H2gRTL8Z-1614825664651)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164231704.png)]

使用digester去解析配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hm990rib-1614825664651)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164430689.png)]

设置完Context的属性后,添加Host的子对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIad66ak-1614825664652)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164710749.png)]

这里还会添加对应的子对象的生命周期监听器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AdTsElj-1614825664652)(/Users/admain/Library/Application Support/typora-user-images/image-20210303164829157.png)]

调用父类的方法开始启动Context

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKimtCpt-1614825664653)(/Users/admain/Library/Application Support/typora-user-images/image-20210303165611036.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdzvYTXt-1614825664653)(/Users/admain/Library/Application Support/typora-user-images/image-20210303165652934.png)]

之前没有初始化Context对象,所以先init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3smSJ3Pj-1614825664654)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170450767.png)]

​ 生命周期监听器监听到了Context的init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMW6A6sx-1614825664654)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170350388.png)]

之后的初始化都是一样的,直接看start的过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yp7WIRTB-1614825664656)(/Users/admain/Library/Application Support/typora-user-images/image-20210303170817080.png)]

16、 Context -> Wrapper start()

之后会去加载Context的各种资源,然后到这里,设置生命周期状态为configure_start

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgUr9RiQ-1614825664656)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171218147.png)]

监听器监听到这个状态后调用HostConfig,执行这个方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YnKq1xw-1614825664657)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171342450.png)]

这里开始加载Wrapper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHfA3Rxr-1614825664658)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171510402.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECLT0nBV-1614825664658)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171621730.png)]

根据server.xml设置Context的各种属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7x58Z2f-1614825664659)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171705757.png)]

创建Wrapper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoDFqjsn-1614825664660)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171812354.png)]

设置Wrapper到Context的子对象中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRGJJXbe-1614825664660)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171832140.png)]

之后调用父类的方法,用线程池启动Wrapper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsavEUEz-1614825664661)(/Users/admain/Library/Application Support/typora-user-images/image-20210303171938429.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P1HIWo3H-1614825664661)(/Users/admain/Library/Application Support/typora-user-images/image-20210303172032977.png)]

剩下的就是把Context都加载一遍了,一个Host是有多个Context的

17、 Service -> Executor start() -> Connector start()

回到Service,Engine 启动完成后继续启动线程池,然后就是Connector

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgFhMFPm-1614825664662)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173118639.png)]

18、Connector -> ProtocolHandler start()

默认还是AbstractProtocol

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHxtwNyJ-1614825664662)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173247387.png)]

19、Connector -> ProtocolHandler start()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnotOtSU-1614825664663)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173340832.png)]

20、ProtocolHandler -> Endpoint start()

这里会创建一个线程池,然后开启两个轮巡线程准备去监听8080端口号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynLSi3fg-1614825664663)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173456526.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rj8gmusA-1614825664664)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173420935.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsBY3XZt-1614825664664)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173609191.png)]
在这里插入图片描述

这里会开启一个处理线程去处理请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jBCdfGiS-1614825664665)(/Users/admain/Library/Application Support/typora-user-images/image-20210303173648364.png)]

剩下的就是重复的去加载目录:home/webapps下的项目了。启动完成后,Tomcat开始等待请求进行处理。

本文为手动Debug过程中总结,如有问题,万望指出,十分感谢!

参考文档

博客:https://blog.csdn.net/sunyunjie361/article/details/58588033

Endpoint:https://www.toutiao.com/i6704513825745404423/?tt_from=copy_link&utm_campaign=client_share&timestamp=1561103290&app=news_article_lite&utm_source=copy_link&utm_medium=toutiao_ios&req_id=20190621154810010023019038398CF00&group_id=6704513825745404423

AJP : https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html

AJP漏洞:https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ


http://chatgpt.dhexx.cn/article/K2ydrAlp.shtml

相关文章

两种启动tomcat的方法

一&#xff0c;找到 Tomcat 目录下的 bin 目录下的 startup.bat 文件&#xff0c;双击&#xff0c;就可以启动 Tomcat 服务器 在D:\Tomcat\apache-tomcat-8.0.50\bin下找到setclasspath.bat右击编辑&#xff0c;在最后输入pause&#xff0c;即可查看错误 二&#xff0c;1打开命…

idea热启动

快捷键&#xff1a;ctrlshiftalt/ 然后重启 IDEA 注意&#xff1a;开发阶段开启热部署&#xff0c;生产阶段必须关闭

IntelliJ2021 设置热启动

在IntelliJ中设置了热启动后&#xff0c;更改代码保存后&#xff0c;系统会自动重启&#xff0c;无需手动重启。 1. IntelliJ2021 设置热启动 File -> settings -> Advanced Settings ,选中下面的选项 在pom.xml中 <dependency><groupId>org.springfram…

springboot 配置热启动

为解决开发过程中功能调试过程中的频繁启动项目的烦恼&#xff0c;可以为项目添加热启动&#xff0c;使得修改项目逻辑后&#xff0c;无需重启项目&#xff0c;即可实时使新修改的代码生效。 1、添加如下配置即可 <dependency><groupId>org.springframework.boot&…

SpringBoot 项目实现热启动

引入依赖。在pom.xml 文件 <dependencies></ dependencies> 添加如下内容 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </de…

eclipse实现热部署和热启动

eclipse实现热部署和热启动 &#xff08;1&#xff09; 热部署:就是容器状态在运行的情况下重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况. &#xff08;2&#x…

MIKE水动力笔记8_冷启动与热启动

本文目录 前言Step 1 冷启动与热启动的概念Step 2 案例的简介与对比设置Step 3 热启动初始条件文件的获取Step 4 冷启动与热启动的运行结果对比 前言 在本系列博文【MIKE水动力笔记5_建立水动力模型】中&#xff0c;在讲【Step 2 设置模型参数】中的【Initial Conditions】时&…

springboot热启动与热部署

一、热启动&#xff1a; 每自修改后&#xff0c; 程序自动启动spring Application上下文。 Pom中直接添加依赖即可&#xff1a; [html] view plain copy <dependency> <groupId>org.springframework.boot</groupId> <artif…

idea怎么设置热启动

idea更改代码后每次都需要重新启动才生效&#xff0c;如果需要进行多次小幅度调整时就会显得很繁琐&#xff0c;下面介绍一种更改代码后自动生效的热启动小技巧 以IntelliJ IDEA 2021.2.3汉化版为例进行设置热启动 1、运行》编辑配置。 2、执行“更新”操作时和切换出IDE时选…

【SpringBoot】springboot启动热部署

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ SpringBoot——手工启动热部署 一、pom.xml导入…

Java(四):高效调试之IDEA热启动

项目背景&#xff1a; 在开发过程&#xff0c;遇到问题要进行调试的时候&#xff0c;每次修改完代码&#xff0c;都需要重启应用&#xff0c;重新运行才能看到效果。配置了热启动后&#xff0c;修改代码后就不需要重启程序也可以看到效果&#xff0c;从而大大提升了开发效率。 …

键盘上什么组合键表示热启动计算机,什么是电脑热启动?电脑怎么热启动

什么是电脑热启动? 电脑热启动又称键盘启动&#xff0c;在不断电状态下(即开机状态下)进行的电脑程序启动&#xff0c;就叫做电脑热启&#xff0c;也可以简化为热启动。 电脑怎么热启动? 电脑在DOS状态下运行时&#xff0c;即同时按下键盘上的CtrlAltDelete组合键&#xff0c…

IDEA如何设置热启动

背景 在开发过程中&#xff0c;当写完一个功能我们需要运行应用程序测试&#xff0c;可能这个小功能中存在多个小bug&#xff0c;我们需要改正后重启服务器&#xff0c;这无形之中拖慢了开发的速度增加了开发时间&#xff0c;SpringBoot提供了spring-boot-devtools&#xff0c…

数据预处理的步骤

数据清理–>数据集成 —>数据归约–>数据变换 1.数据清理 就是处理脏数据&#xff0c;包括填写缺失值、清除噪声数据&#xff08;降噪&#xff09;、纠正不一致数据、识别或删除离群点等。常用工具例如&#xff1a;ETL工具 2.数据集成&#xff08;data integration)…

数据预处理-python实现

首先是数据读取&#xff1a;格式主要有excel,csv,txt等 import pandas as pd data pd.read_csv(r../filename.csv) #读取csv文件 data pd.read_table(r../filename.txt) #读取txt文件 data pd.read_excel(r../filename.xlsx) #读取excel文件# 获取数据库中的数据 import …

机器学习与数据挖掘——数据预处理

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;关于数据预处理 在工程实践中&#xff0c;我们得到的数据会存在有缺失值、重复值等&#xff0c;在使用之前需要进行数据预处理。数据预处理没有标准的流程&#xff0c;通常…

数据分析——数据预处理

内容来源&#xff1a;课程《智能信息处理技术》、周志华《机器学习》 数据预处理 点击 数据预处理各步骤梳理 查看全图 什么是数据预处理 现实世界中数据大体上都是不完整&#xff0c;不一致的脏数据&#xff0c;无法直接进行数据挖掘&#xff0c;或挖掘结果差强人意。为了…

数据挖掘—数据预处理

文章目录 数据预处理1 数据清洗缺失值处理异常值处理 2 数据集成实体识别冗余属性识别数据变换简单函数变换规范化连续属性离散化 属性构造 3 数据规约属性归约数值归约 Python主要数据预处理函数 数据预处理 数据预处理的过程 数据预处理的目的&#xff1a; 1&#xff09;提…

python数据预处理

Ⅰ.数据源 Ⅱ.导入库 import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt import seaborn as sns from sklearn.preprocessing import MinMaxScaler, StandardScaler# 避免画图时无法显示中文&#xff08;中文部分以正方格显示…

python数据预处理_Python数据预处理

1.缺失值处理 1.1缺失值查看 在Python中直接调用info()方法就会返回每一列的缺失情况。 Python中缺失值一般用NaN表示&#xff0c;从用info()方法的结果来看&#xff0c;地区、销量跟销售额这三列是12个非null值&#xff0c;其他的都是13个非null值&#xff0c;说明这三列分别有…