python数据分析架构_Python数据分析

引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架。其次,讲解“如何通过Python 函数或代码和统计学知识来实现数据分析”。

本次介绍的建模框架图分为六大版块,依次为导入数据,数据探索,数据处理,建模,模型评估,模型调优(完整的逻辑框架图请看文章末尾处)。

在实际商业项目中,建模前的工作占据整个项目70%左右的时间。读者可能会问你既然是模型预测,为什么不把更多时间放在模型和调参上?因为巧妇难为无米之炊,数据本身决定了模型预测的上限,而模型或算法只是无限逼近这个上限而已。正所谓兵马未动粮草先行,数据探索和数据处理能为之后建模打下坚实基础,因此团队做项目时会把大量时间投放在这两个部分,目的在于提高数据质量,发现变量间关系,选取恰当特征变量。下面我会依次介绍这六个版块,但详解数据探索和数据处理版块。

一 导入数据

Python数据分析的第一步是要把数据导入到Python中。导入数据需要做两件事,第一,告诉Python 你的文件格式,常用的格式有:.csv,.jason, .xlsx, .hdf。第二,告诉Python 你的文件路径。

举例:假如文件格式为.csv, 文件路径为:path =“C:Windows...desktopmydata.csv”

通过df.read_csv(path)函数,即可将数据导入Python。

二 数据探索

数据探索版块主要涉及描述性统计,数据分组,关联分析,方差分析。会涉及一些Python函数和统计学知识,笔者依次介绍。

描述性统计

Ø 基本描述

通过df.describe()函数可对数据有一个基本了解,比如平均值、标准差、四分位数、最大最小值等

Ø 数据类型

通过df.dtypes 函数,可知变量的数据类型,比如object型,int型,float型(为后面的数据处理做准备)

Ø 分组统计

通过value_counts(),可统计分类变量里不同组的数量

Ø 箱形图

通过sns.boxplot(x,y,data=df),可将数据以‘箱形’展示出来,查看数据分布情况,识别离散值

Ø 散点图

通过plt.scatter(x,y),可发现两组变量间的关系(正相关、负相关、不相关)

数据分组

数据分组部分主要介绍三个函数,分别为groupby(),pivot(), pcolor(),可视化效果依次提高,有助于快速发现不同组间的关系。

Ø 函数groupby(),可对一个或多个分类变量进行分组

Ø 函数pivot(), 能提高groupby()分组后的数据的可视化程度,实现更清晰的展示

Ø 函数pcolor(), 能把pivot table()处理后的数据转换成热图,更易发现不同组间关系

关联分析

Ø 通过df.corr(), 可得到所有变量间的相关系数

Ø 通过pearsonr(x,y),可得到皮尔森相关系数和P值,以此判断两个变量间的关联强度

· 皮尔森系数接近于1时,正相关;接近于-1时负相关;接近于0时,不相关

· P值,用来判断发生的可能性大小、原假设是否正确。若P<0.05, 有理由拒绝原假设。

方差分析

Ø f_oneway()实现方差分析,得到F-testscore 和P 值

Ø F-testscore 越大,关联越强; F-testscore 越小,关联越弱。

Ø P值,同上(参见关联分析P值)

笔者总结出(二)数据探索版块的逻辑框架图,见下图。

三 数据处理

数据处理版块主要涉及处理缺失值,数据类型转换,格式转换,数据正态化,数据分箱,独热码。会涉及Python代码和统计学知识,笔者依次介绍。

处理缺失值

Ø 查看数据源

直接查看数据源头,看能否把缺失的数据找回

Ø 删除缺失值

通过函数dataframe.dropna(),可将缺失的数据删除

Ø 替换缺失值

通过函数data.replace(missing_value,new_value),可将缺失的数据替换为平均值或众数

数据类型转换

Ø 通过astype()函数,能把错误的数据类型转换为正确的数据类型

Ø 举例:若变量‘price’的数据类型为object型时,通过代码:df[‘price’]= df[‘price’].astype(‘int’),将变量‘price’转换为 int型。

格式转换

不同部门(比如市场部、物流部、IT部)通常会有不同的储存格式,需要对数据统一格式、单位转换,才可建模。

Ø 统一格式

举例:BeiJing的书写格式有多种,比如BeiJing, BEIJING, BJ, B.J, 需要统一为一种格式。

Ø 单位转换

· 对同一特征变量,要用统一的单位,举例:在评比汽车耗油量时经常用到两种单位,每加仑多少英里(mpg)和每百公里多少升(L/100km),在数据分析时需将其统一。

· 例子:通过函数df[‘city-mpg’]= 235/df[‘city-mpg’] 实现mpg 和 L/100km 单位间的转换(其实就是加减乘除),再通过df.rename()对变化后的列名进行修改

数据正态化

某些特征变量需要进行数据正态化,正态化后的特征变量才能对模型有相对公平的影响(若没懂,请看特征缩放中的例子)。常用的数据正态化的方法有三种:特征缩放,最大最小值,Z分数。

Ø 特征缩放:Xnew=Xold/Xmax

举例:变量‘age’的范围20 – 100 ,变量‘income’ 的范围20000 – 500000,由于数值大小的差距,变量‘age’和‘income’对模型的影响是完全不同和不公平的。经过特征缩放运算后,两个变量会拥有相似的取值范围,也因此对模型影响的程度会变得较为公平合理,代码见上图。

Ø 最大值最小值:Xnew=(Xold-Xnew)/(Xmax-Xmin), 代码见上图

Ø Z分数: Xnew = (Xold-μ)/σ, 代码见上图

数据分箱

数据分箱能对数据进行更明了的展示,可把数值变量转换为分类变量,通过cut()函数可对数据进行分箱,代码见下图。

举例:cut()函数能将变量‘price’的所有数值放入3个箱子中,将变量‘price’的数值变量转换为分类变量,运行结果见下图。

独热码

模型训练通常是不会接收object 或 string型,只能接收数值型,但独热码能将分类变量的object 或 string型转换为定量变量的数值型。

Ø 函数:get_dummies()

Ø 举例:‘fuel’ 有gas和dissel两类,通过pd.get_dummies(df[‘fuel’])将gas 和dissel 重新赋值0或1,将分类变量‘fuel’转换为数值型,结果见下图

笔者总结出(三)数据处理版块的逻辑框架图,见下图。

四 建模

本文涉及线性回归和多项式回归算法,其他众多算法比如神经网络、随机森林、支持向量机、时间序列等,不在此介绍。

五 模型评估

评判模型准确度时经常用到的两个指标, R方检验(R²)和均方误差检(MSE)。

Ø R²的值越接近于1,拟合效果越好,R²的值越接近于0,拟合效果越差

Ø MSE能反应出真实值与预计值间的误差,MSE越小,模型准确性越高

六 模型调优

模型调参能够优化模型的准确性,调参指调整参数,那如何找到最佳的参数组合呢? 有如下如下方法:

Ø 岭回归, 函数: Ridge(alpha),解决过拟合现象

Ø 网格搜索:用穷举法遍历所有不同的参数组合,筛选出模型效果最好的一组参数组合。函数: GridSearchCV(Ridge(), parameters, cv), cv指交叉验证次数。

结尾

至此,笔者已介绍如何导数到Python、如何探索和处理数据、如何建模、如何评估模型、如何调参。完整的逻辑框架会让读者对‘Python数据分析’有一个全面的认识,快速达到俯瞰全局的高度。最后笔者搭建出完整的逻辑框架图送给读者,希望对你们有帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA面试常考系列七

转载自 JAVA面试常考系列七 题目一 Swing的方法中&#xff0c;有哪些是线程安全的&#xff1f; Swing的规则是&#xff1a;当Swing组件被具现化时&#xff0c;所有可能影响或依赖于组件状态的代码都应该在事件派发线程中执行。 因此有3个线程安全的方法&#xff1a; repaint()…

图片中的Build 2016

微软主办的Build 2016大会刚刚落幕&#xff0c;让我们通过下面的图片集锦来回顾大会的一些容易被人忽视的细节。 Xamarin加入微软大家庭 微软公司于二月底花大价钱买下了Xamarin这家移动开发平台提供商&#xff0c;终于补全了它Mobile First Cloud First战略的短板。 图片一&am…

diy实现spring依赖注入

【README】 本文diy代码实现了 spring 依赖注入&#xff0c;一定程度上揭示了依赖注入原理&#xff1b; 【1】控制反转-Inversion of Control 是一种编码思想&#xff0c;简而言之就是 应用程序A可以使用组件B&#xff0c;但A无法控制B的生命周期&#xff08;如创建&#xff…

html 中一个格子拆分成两个_一个效果惊人的数字游戏

安爸曾多次讲过数学推理能力对孩子成长的重要性&#xff0c;听到有位家长说自己用扔骰子的方法教孩子数学等式。步骤大致是扔骰子时&#xff0c;如果骰子是3&#xff0c;就在棋盘上从0出发走3步&#xff0c;并且写出033的加法等式。扔到负数就后退&#xff0c;写出减法等式。科…

JAVA面试常考系列八

转载自 JAVA面试常考系列八 题目一 JDBC是什么&#xff1f; JDBC&#xff08;Java DataBase Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;由一组用Java语言编写的类和接口组成。JDBC提供…

【广州/深圳 活动】 MVP社区巡讲

紧跟当今的技术发展趋势还远远不够&#xff0c;我们要引领变革&#xff01;加入本地技术专家社区&#xff0c;获取真实案例、实况培训演示以及探讨新一代解决方案。在此活动中&#xff0c;您将&#xff1a; 了解如何运用开源&#xff08;OSS&#xff09;技术、Microsoft 技术及…

java socket实现简单即时通讯

【1】socket服务器 /*** Description 即时消息服务器* author xiao tang* version 1.0.0* createTime 2022年01月23日*/ public class IMSocketServer {private static int PORT 13;public static void main(String[] args) {ServerSocket server null;try {// 开启端口serv…

蝌蚪网课助手mac_疫情期间如何录网课?(干货教程)手把手教你录出高质量网课。...

鉴于国外疫情的持续爆发&#xff0c;中小学开学日期进一步延期&#xff0c;我们的网课教学也同样面临持续后延。我们的很多教师朋友&#xff0c;可能此时他们正需要这么一个教程来熟悉网课的录制方法。于是这篇文章就应运而生了&#xff0c;希望它能给各位老师带来些许帮助。​…

JAVA面试常考系列九

转载自 JAVA面试常考系列九 题目一 RMI架构层的结构是如何组成的&#xff1f; RMI体系结构由三层组成&#xff0c;分别是&#xff1a; 存根和骨架层&#xff08;Stub and Skeleton Layer&#xff09; 远程引用层&#xff08;Remote Reference Layer&#xff09; 传输层&#xf…

WebAPI前置知识:HTTP与RestfulAPI

对HTTP协议的基本了解是能理解并使用RestFul风格API的基础&#xff0c;在了解了这些基础之后&#xff0c;使用各种RestFul的开发框架才能得心应手。我一开始使用WebApi的时候就因为对这些知识缺乏了解&#xff0c;觉得用起来各种不顺手&#xff0c;直到熟悉了这些HTTP的知识后&…

Java三种代理模式-静态代理,动态代理和cglib代理

【README】 本文阐述了3种代理模式的定义&#xff0c;并编写了代码测试案例&#xff1b; 代理其实是一种设计模式&#xff0c;可以在访问目标对象的方法上下文添加处理逻辑&#xff08;扩展目标对象的功能&#xff09;&#xff0c;是 切面编程的基石&#xff1b; 【举个例子】…

python遗传算法工具箱的使用_遗传算法的python实现,非常值得看的一篇文章

遗传算法是一种智能优化算法&#xff0c;通常用于求解复杂的数学问题。相比于传统方法&#xff0c;遗传算法摒弃了盲目的穷举或完全随机的求解策略&#xff0c;借鉴了自然界优胜劣汰、自然进化的思想&#xff0c;快速逼近最优解。上文对遗传算法的基本内容进行了介绍&#xff0…

JAVA面试常考系列十一

转载自 JAVA面试常考系列十一 题目一 什么是JSP&#xff1f; JSP(Java Server Page)是一个文本文档&#xff0c;是一种将静态内容和动态生成内容混合在一起的技术。 JSP包含两种类型的文本&#xff1a;静态数据和JSP元素。静态数据可以用任何基于文本的格式表示&#xff0c;如H…

.NET跨平台实践:用C#开发Linux守护进程

Linux守护进程&#xff08;Daemon&#xff09;是Linux的后台服务进程&#xff0c;它脱离了与控制终端的关联&#xff0c;直接由Linux init进程管理其生命周期&#xff0c;即使你关闭了控制台&#xff0c;daemon也能在后台正常工作。 一句话&#xff0c;为Linux开发与控制台无关…

ThreadLocalRandom与Random区别

转自&#xff1a; 一文秒懂 Java ThreadLocalRandom - Java 一文秒懂 - 简单教程&#xff0c;简单编程随机数生成是一个非常常见的操作&#xff0c;而且 Java 也提供了 java.util.Random 类用于生成随机数&#xff0c;而且呢&#xff0c;这个类也是线程安全的&#xff0c;就是…

python自动配置文件_【python接口自动化】- ConfigParser配置文件的使用

前言&#xff1a;目前我们使用的绝大多数计算机程序&#xff0c;无论是办公软件&#xff0c;浏览器&#xff0c;甚至游戏、视频都是通过菜单界面系统配置的&#xff0c;它几乎成了我们使用机器的默认方式。而在python中&#xff0c;也有这样的一个配置模块可以把代码可配置化。…

JAVA面试常考系列十

转载自 JAVA面试常考系列十 题目一 Servlet是什么&#xff1f; Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;是用Java编写的服务器端程序&#xff0c;主要的作用是处理客户端请求并生成动态Web内容。…

DotNet 资源大全

Awesome DotNet&#xff0c;这又是一个 Awesome XXX 系列的资源整理&#xff0c;由 quozd 发起和维护。内容包括&#xff1a;编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等。 伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理。欢…

javabean与json转换(fastjson与jackson两个版本)

【README】 本文演示了 javabean与json转换的开发方式&#xff1b; 要想 javabean的属性名 与 json的字段名不一致&#xff0c;也是可以转换的&#xff1b; 之前需要引入 ali.fastjson <dependency><groupId>com.alibaba</groupId><artifactId>fas…

mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试...

概述今天主要分享一个最近做的实验&#xff0c;主要是测试mysql数据库在RR和RC不同事务隔离级别下的表现。MySQL使用可重复读来作为默认隔离级别的主要原因是语句级的Binlog。RR能提供SQL语句的写可串行化&#xff0c;保证了绝大部分情况(不安全语句除外)的DB/DR一致。下面以my…