python实现数据分析与建模


Posted in Python onJuly 11, 2019

前言

首先我们做数据分析,想要得出最科学,最真实的结论,必须要有好的数据。而实际上我们一般面对的的都是复杂,多变的数据,所以必须要有强大的数据处理能力,接下来,我从我们面临的最真实的情况,一步一步教会大家怎么做。

1.数据的读取

(1)读取模块
 Import pandas as pd 
 Import numpy as np
 (2)读取表格的全部数据
 df = pd.read_csv(".data/HR.csv")
 (3)读取你所需要的数据
 sl_s=df["sactisfaction_level"]

2. 数据的处理

2.1.异常值(空值)处理

2.1.1删除

首先,第一步是对空值的处理。

有两种,一种直接删除,另一种指代。

如果数据多,想简单一点,就直接删除,方法都很简单。

首先,建立一个DataFrame表
 1.为了确定是否含有空值:
 df.isnull() #如果含有空值,返回True
 2.删除
 df.dropna() #去掉含空值的行
 如果想要删除某一个属性含空值的行就加入subset参数
 df.dropna(subset=["B"]) #去掉B属性含空值的行
 判断是否有重复的数据:
 df.duplicated(["A"]) #A属性中重复的数据返回True
 删除A属性重复的行
 df.drop_duplicates(["A"])
 df.drop_duplicates(["A"],keep=False) #删除A属性全部重复的行
 df.drop_duplicates(["A"],keep=first) #删除A属性全部重复的行,保留第一个
 df.drop_duplicates(["A"],keep=last) #删除A属性全部重复的行,保留最后一个

2.1.2指代

有些数据非常重要,不能删除,那我们就选择指代,也就是替换

#含空值的数据被替换为“b*”
 df.fillna("b*")
 #E属性中的含空值的数据被替换成该属性的平均值
 df.fillna(df["E"].mean())
 #插值替换
 如果含空值的元素为最后一个,那么空值的数据替换成和上一个数据一样
 如何含空值的元素为中间,那么空值的数据被(上+下)/2代替
 df["E"].interpolate() 
 #3次样条插值 order 参数就是几次样条插值
 df["E"].interpolate(method="spline",order=3)

*函数

(4)异常值分析(含有就返回True) --isnull()
 sl_s.isnull()
 主要表示没有空值
 (5)提取异常值的该属性信息 
 sl_s[sl_s.isnull()]
 (6)提取异常值的表格全部信息
 df[df["sactisfaction_level"].isnull()]
 (7)丢弃异常值 --dropna()
 sl_s=sl_s.dropna()
 注:删除为空的异常值
 可以利用where()把异常数据赋空,然后利用dropna()删除
 (8)填充异常值 --fillna()
 sl_s=sl_s.fillna()
 (9)平均值 --mean()
 sl_s.mean()
 (10)标准差 --std()
 Sl_s.std()
 (11)最大值 --max()
 sl_s.max()
 (12)最小值 --min()
 sl_s.min()
 (13)中位数 --median()
 sl_s.median()
 (14)下四分位数 --quantile(q=0.25)
 sl_s.quantile(q=0.25)
 (15)上四分位数 --quantile(q=0.75)
 sl_s.quantile(q=0.75)
 (16)偏度 --skew()
 sl_s.skew() 
 分析:小于0 是负偏 均值偏小,大部分数是比他的均值大的
 大于 0 稍微有些振偏 
 远大于0, 是极度振偏,均值要比他的大多数值大好多。
 (17)峰度 --kurt()
 sl_s.kurt()
 分析:<0 相比于正态分布,他的趋势相对平缓
 远大于0 说明他的形变是非常大的,所以是不靠谱的
 (18)获得离散化的分布(numpy模块) --histogram()
 np.histogram(sl_s.values,bins = np.arange(0.0,1.1,0.1))
 结果分析:
 [195,1214,532,974,…]
 [0.0,0.1,0.2,0.3,0.4…]
 代表0.0-0.1之间有195个数,0.1-0.2之间有1214个数,以此类推
 分布间隔为0.1

3.利用四分位数来去除异常值

3.1.提取大于1的值
 le_s[le_s>1]
 3.2 去除大于1的异常值
 le_s[le_s<=1]
 3.3 提取正常值(利用四分位数)
 3.3.1 下四分位
 q_low=le_s.quantile(q =0.25)
 3.3.2 上四分位
 q_high=le_s.quantile(q=0.75)
 3.3.3 四分位间距
 q_interval=q_high-q_low
 3.3.4 定义k的值
 K=1.5~3之间
 如果k=1.5,删除的异常值是中度异常
 如果k=3.0,删除的异常值是极度异常
 3.3.5 筛选
 le_s=le_s[le_s<q_high+k*q_interval][le_s>q_low-k*q_interval]
 3.4 数据的个数 --len()
 len(le_s)
 3.5离散分布直方图(numpy模块)
 np.histogram(le_s.values,bins=np.arange(0.0,1.1,0.1))
 3.6回顾数据的平均值,标准差,中位数,最大值,最小值,偏度,峰度,确定数据的正常。

4.静态结构分析

4.1每个值出现的次数 --values_counts()
 np_s.value_counts()
 4.2获取该数据的构成和比例(每个值的频率)
 np_s.value_counts(normalize=True)
 4.3 排序
 np_s.value_counts(normalize=True).sort_index()

5.数据分区间

5.1把数据分成几份 --histogram() 
 np.histogram(amh_s.values,bins=10) 把数据分成10份
 5.2另一种方法 加了区间,计算区间的频数
 (左闭右开的区间)
 Np.histogram(amh_s.values,bins = np.arange(amh_s.min(),amh_s.max()+10,10))
 (左开右闭的区间)
 amh_s.value_counts(bins=np.arange (amh_s.min(),amh_s.max()+10,10))

6.英文异常值数据的处理

6.1 首先,统计该数据的分布频数
 s_s.value_counts()
 6.2确定异常值的名字。
 6.3把异常值赋空(NaN) --where()
 s_s.where(s_s!="name")
 意思是把”name”的数据赋空
 6.4把赋空的异常值删除 --dropna()删除异常值
 s_s.where(s_s!="name").dropna()
 6.5 检查删除异常值的结果
 s_s.where(s_s!="name").dropna().value_counts()

7.对比分析

7.1对表格中空值的行删除
 Df = df.dropna(axis=0,how='any')
 axis =0 ,代表的是行删除
 how=‘any' 代表的是含有部分空值就执行行删除
 how=‘all' 代表的是一行全部是空值执行行删除
 7.2含有条件性的对异常值的删除
 df=df[df["last_evaluation"]<=1] [df["salary"]!="name"][df["department" ]!="sale"]
 7.3分组(比如:把同一部门的人分为一组) --groupby()
 df.groupby("department")
 7.4对分组后的组取均值
 df.groupby("department").mean()
 7.5 取部分数据(切片) --loc()
 df.loc[:,["last_evaluation","department"]] .groupby("department")
 7.6 取部分数据求平均
 df.loc[:,["last_evaluation","department"]] .groupby("department").mean()
 7.7 取部分数据求极差 --apply()
 df.loc[:,["average_monthly_hours" ,"department"]].groupby ("department")[ "average_monthly_hours"]. apply(lambda x:x.max()-x.min())

总结

以上所述是小编给大家介绍的python实现数据分析与建模 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python 简单的多线程链接实现代码
Aug 28 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
Atom的python插件和常用插件说明
Jul 08 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 Python
新手如何发布Python项目开源包过程详解
Jul 11 #Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 #Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 #Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 #Python
python实现微信自动回复机器人功能
Jul 11 #Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 #Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 #Python
You might like
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
php正则表达式(regar expression)
2011/09/10 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python绘制热力图示例
2019/09/27 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
多个python文件调用logging模块报错误
2020/02/12 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
公益活动策划方案
2014/01/09 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
python+opencv实现视频抽帧示例代码
2021/06/11 Python
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
python实现会员管理系统
2022/03/18 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
python中使用redis用法详解
2022/12/24 Redis