侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现数据分析与建模

Python  /  管理员 发布于 7年前   220

前言

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

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列表,字典,元组简单用法示例
    下一条:
    新手如何发布Python项目开源包过程详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客