《Python机器学习》基础代码
1,要学习Python机器学习,第一步就是读入数据,这里我们以读入excel的数据为例,利用jupyter notebook来编码,具体教程看这个视频
本书所有文件均来自下面的二维码
下载后解压,再将csv文本文件上传到Jupyter Notebook即可
推荐先上传到jupyter notebook,再用名字.xlsx来导入
Jupyter notebook导入Excel数据的两种方法介绍_哔哩哔哩_bilibili
2,同一目录下的代码互相关联,也就是你在这个项目里import的库或者初始化的变量,可以在下一个项目使用,所以提交单个代码时可能会报错
目录
1,Pandas的数据加工处理
2,空气质量监测数据预处理
3,空气质量检测数据基本分析
1,Pandas的数据加工处理
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
df1 = DataFrame({'key':['a','d','c','a','b','d','c'],'var1':range(7)}) #基于字典建立数据框
print('df1的数据:\n{0}'.format(df1))
df2 = DataFrame({'key':['a','b','c','c'],'var2':[0,1,2,2]})
print('df2的数据:\n{0}'.format(df2))
df = pd.merge(df1,df2,on='key',how='outer')
df.iloc[0,2]=np.NaN
df.iloc[5,1]=np.NaN
print('合并后的数据:\n{0}'.format(df))
df = df.drop_duplicates()
print('删除重复数据行后的数据:\n{0}'.format(df))
print('判断是否为缺失值:\n{0}'.format(df.isnull()))
print('判断是否不为缺失值:\n{0}'.format(df.notnull()))
print('删除缺失值后的数据:\n{0}'.format(df.dropna()))
fill_value=df[['var1','var2']].apply(lambda x:x.mean())
print('以均值替代缺失值:\n{0}'.format(df.fillna(fill_value)))
1,
第4,6行,字典的优势在于引入键,通过键访问数据更灵活
从数据集的角度,key和var1两个键对应两个变量(即数据集的两个列)
两组值则对应数据集两列的取值
df1行索引取值范围0至6,列索引名为key和var1
注意!基于字典建立数据库的“字典”,各组键的值的个数要相等,否则有些样本观测在某个变量上没有具体取值
2,
第8行,pandas.merge()将两个数据框按指定关键字横向合并,也就是这个关键字这一列合并了,其他不变,但是个数会增多
.iloc[]=numpy.NaN指定样本观测的某变量为NaN,NaN在Numpy表示缺失值,不参与数据建模分析
3,
.drop_duplicates()剔除在所有变量上都重复取值的样本观测
.isnull(),.notnull(),判断是否为NaN,输出True或False
.dropna()剔除取NaN的样本观测
.apply() + lambda计算各变量均值
.apply()实现循环处理,lambda告知了循环处理的步骤
.fillna()将所有NaN替换为指定值
df1的数据:key var1
0 a 0
1 d 1
2 c 2
3 a 3
4 b 4
5 d 5
6 c 6
df2的数据:key var2
0 a 0
1 b 1
2 c 2
3 c 2
合并后的数据:key var1 var2
0 a 0.0 NaN
1 a 3.0 0.0
2 d 1.0 NaN
3 d 5.0 NaN
4 c 2.0 2.0
5 c NaN 2.0
6 c 6.0 2.0
7 c 6.0 2.0
8 b 4.0 1.0
删除重复数据行后的数据:key var1 var2
0 a 0.0 NaN
1 a 3.0 0.0
2 d 1.0 NaN
3 d 5.0 NaN
4 c 2.0 2.0
5 c NaN 2.0
6 c 6.0 2.0
8 b 4.0 1.0
判断是否为缺失值:key var1 var2
0 False False True
1 False False False
2 False False True
3 False False True
4 False False False
5 False True False
6 False False False
8 False False False
判断是否不为缺失值:key var1 var2
0 True True False
1 True True True
2 True True False
3 True True False
4 True True True
5 True False True
6 True True True
8 True True True
删除缺失值后的数据:key var1 var2
1 a 3.0 0.0
4 c 2.0 2.0
6 c 6.0 2.0
8 b 4.0 1.0
以均值替代缺失值:key var1 var2
0 a 0.0 1.4
1 a 3.0 0.0
2 d 1.0 1.4
3 d 5.0 1.4
4 c 2.0 2.0
5 c 3.0 2.0
6 c 6.0 2.0
8 b 4.0 1.0
2,空气质量监测数据预处理
import numpy as np
import pandas as pd
from pandas import Series,DataFramedata=pd.read_excel('北京市空气质量数据.xlsx') #pandas.read_excel()将excel格式数据读入数据框
data=data.replace(0,np.NaN) #数据框函数.replace(0,numpy.NaN)将0替换为缺失值NaN
data['年']=data['日期'].apply(lambda x:x.year) #.apply(lambda x:x.year)基于'日期'变量得到年份
month=data['日期'].apply(lambda x:x.month)
quarter_month={'1':'一季度','2':'一季度','3':'一季度', #建立一个关于月份和季度的字典quarter_month'4':'二季度','5':'二季度','6':'二季度','7':'三季度','8':'三季度','9':'三季度','10':'四季度','11':'四季度','12':'四季度'}
data['季度']=month.map(lambda x:quarter_month[str(x)]) #month.map(lambda x:quarter_month...)将month中的1,2,3等月份映射到相应季度标签变量
bins=[0,50,100,150,200,300,1000] #生成一个列表bins,用于对后续AQI分组,它描述了AQI和空气质量等级的数值对应关系
data['等级']=pd.cut(data['AQI'],bins,labels=['一级优','二级良','三级轻度污染','四级中度污染','五级重度污染','六级严重污染'])
print('对AQI的分组结果:\n{0}'.format(data[['日期','AQI','等级','季度']])) #pandas.cut()对AQI分组
3,空气质量检测数据基本分析
import pandas as pd
data=pd.read_excel('北京市空气质量数据.xlsx') #pandas.read_excel()将Excel格式数据读入数据框
month=data['日期'].apply(lambda x:x.month) #基于日期变量, 得到每个样本观测的月份
quarter_month={'1':'一季度','2':'一季度','3':'一季度','4':'二季度','5':'二季度','6':'二季度','7':'三季度','8':'三季度','9':'三季度', #建立一个关于月份和季度的字典'10':'四季度','11':'四季度','12':'四季度'}
data['季度']=month.map(lambda x:quarter_month[str(x)]) #.map()将序列month中月份映射到对应季度标签上
bins=[0,50,100,150,200,300,1000] #列表bins, 描述AQI
data['等级']=pd.cut(data['AQI'],bins,labels=['一级优','二级良','三级轻度污染','四级中度污染','五级重度污染','六级严重污染'])
print('各季度的AQI和Pm2.5的均值:\n{0}'.format(data.loc[:,['AQI','PM2.5']].groupby(data['季度']).mean()))
print('各季度AQI和PM2.5的描述统计量:\n',data.groupby(data['季度'])['AQI','PM2.5'].apply(lambda x:x.describe()))def top(df, n = 10, column='AQI'):return df.sort_values(by=column, ascending=False)[:n]
print('空气质量最差的5天:\n',top(data,n=5)[['日期','AQI','PM2.5','等级']])
print('各季度空气质量最差3天:\n',data.groupby(data['季度']).apply(lambda x:top(x, n=3)[['日期','AQI','PM2.5','等级']]))
print('各季度空气质量情况:\n',pd.crosstab(data['等级'],data['季度'],margins=True,margins_name='总计',normalize=False))
各季度的AQI和Pm2.5的均值:AQI PM2.5
季度
一季度 109.125693 77.083179
三季度 98.731884 49.438406
二季度 108.766972 54.744954
四季度 109.400387 77.046422
各季度AQI和PM2.5的描述统计量:AQI PM2.5
季度
一季度 count 541.000000 541.000000mean 109.125693 77.083179std 80.468322 73.141507min 0.000000 0.00000025% 48.000000 24.00000050% 80.000000 53.00000075% 145.000000 109.000000max 470.000000 454.000000
三季度 count 552.000000 552.000000mean 98.731884 49.438406std 45.637813 35.425541min 0.000000 0.00000025% 60.000000 23.00000050% 95.000000 41.00000075% 130.250000 67.000000max 252.000000 202.000000
二季度 count 545.000000 545.000000mean 108.766972 54.744954std 50.129711 36.094890min 0.000000 0.00000025% 71.000000 27.00000050% 98.000000 47.00000075% 140.000000 73.000000max 500.000000 229.000000
四季度 count 517.000000 517.000000mean 109.400387 77.046422std 84.248549 76.652706min 0.000000 0.00000025% 55.000000 25.00000050% 78.000000 51.00000075% 137.000000 101.000000max 485.000000 477.000000
空气质量最差的5天:日期 AQI PM2.5 等级
1218 2017-05-04 500 0 六级严重污染
723 2015-12-25 485 477 六级严重污染
699 2015-12-01 476 464 六级严重污染
1095 2017-01-01 470 454 六级严重污染
698 2015-11-30 450 343 六级严重污染
各季度空气质量最差3天:日期 AQI PM2.5 等级
季度
一季度 1095 2017-01-01 470 454 六级严重污染45 2014-02-15 428 393 六级严重污染55 2014-02-25 403 354 六级严重污染
三季度 186 2014-07-06 252 202 五级重度污染211 2014-07-31 245 195 五级重度污染183 2014-07-03 240 190 五级重度污染
二季度 1218 2017-05-04 500 0 六级严重污染1219 2017-05-05 342 181 六级严重污染103 2014-04-14 279 229 五级重度污染
四季度 723 2015-12-25 485 477 六级严重污染699 2015-12-01 476 464 六级严重污染698 2015-11-30 450 343 六级严重污染
各季度空气质量情况:季度 一季度 三季度 二季度 四季度 总计
等级
一级优 145 96 38 108 387
二级良 170 209 240 230 849
三级轻度污染 99 164 152 64 479
四级中度污染 57 72 96 33 258
五级重度污染 48 10 14 58 130
六级严重污染 21 0 2 23 46
总计 540 551 542 516 2149
pd.get_dummies(data['等级']) #pandas.get_dummies()得到分类型变量等级的虚拟变量
data.join(pd.get_dummies(data['等级'])) #数据框的.join()将原始数据与虚拟变量按行索引横向合并
import numpy as np #导入numpy库
np.random.seed(123)#随机数种子
sampler=np.random.randint(0,len(data),10) #numpy.random.randint()指定范围随机抽取指定个数
print(sampler)
sampler=np.random.permutation(len(data))[:10] #numpy.random.permutation()随机打乱重排, 再抽取前10个
print(sampler)data.take(sampler) #数据框.take()基于指定随机数获得数据集的一个随机子集
data.loc[data['质量等级']=='优',:] #数据框访问方式,抽取满足指定条件的行的数据子集
《Python机器学习》基础代码相关推荐
- Python机器学习基础教程-第2章-监督学习之K近邻
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- Python机器学习基础教程(1)Irises(鸢尾花)分类之新手上路
一.感谢博客的内容提供的参考 标题:最新版学习笔记---Python机器学习基础教程(1)Irises(鸢尾花)分类---附完整代码 作者:非鱼子焉 地址:https://zhu-rui.blog.c ...
- Python机器学习基础篇三《无监督学习与预处理》
前言 前期回顾: Python机器学习基础篇二<为什么用Python进行机器学习> 上面这篇里面写了文本和序列相关. 我们要讨论的第二种机器学习算法是无监督学习算法.无监督学习包括没有已知 ...
- Python机器学习基础篇二《监督学习》
前言 前期回顾: Python机器学习基础篇一<为什么用Python进行机器学习> 前面说过,监督学习是最常用也是最成功的机器学习类型之一.本章将会详细介绍监督学 习,并解释几种常用的监督 ...
- python机器学习基础教程-学习笔记(一)
了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验. scikit-learn 是基于 NumPy 和 SciPy 科学计算库的.此外,我们还会用到 panda ...
- Python机器学习基础之Matplotlib库的使用
声明:代码的运行环境为Python3.Python3与Python2在一些细节上会有所不同,希望广大读者注意.本博客以代码为主,代码中会有详细的注释.相关文章将会发布在我的个人博客专栏<Pyth ...
- Python机器学习基础之Python的基本语法(一)
当今世界已经进入了大数据的时代.随着信息化的不断发展,人工智能.机器学习等词语越来越被人们所熟知,而他们也渐渐地成了这个时代的弄潮儿,走在了信息时代的前端.从本篇博客开始,小编将带领大家一起走进人工智 ...
- python入门基础代码初学
python入门基础代码初学 一.检查python安装 二.print使用 二.使用python运算 三.enumerate()函数 一.检查python安装 PS C:\Users\admin> ...
- 回归素材(part4)--python机器学习基础教程
学习笔记,仅供参考 文章目录 python机器学习基础教程 线性模型 用于回归的线性模型 过拟合 岭回归 lasso python机器学习基础教程 线性模型 用于回归的线性模型 过拟合
- 泛化,过拟合,欠拟合素材(part1)--python机器学习基础教程
学习笔记,仅供参考,有错必纠 文章目录 python机器学习基础教程 泛化.过拟合.欠拟合 模型复杂度与训练集大小的关系 python机器学习基础教程 泛化.过拟合.欠拟合 判断一个算法在新数据上表现 ...
最新文章
- 导师讨厌什么样的学生 ?
- mongdb 群集_通过对比群集分配进行视觉特征的无监督学习
- equals, hashCode, toString方法重写,深入探究equals
- 【Python3】POP3协议收邮件
- SqlServer2008r2卸载
- Linux设备中的并发控制
- Springboot构建Echarts数据可视化
- 野外帐篷露营避难有感
- torch中permute()函数用法补充内容(矩阵维度变化详细过程)
- win7如何调整计算机c盘,Win7系统增加C盘空间的方法
- 企业微信标签太多怎么删除?
- matlab求状态方程的解,Matlab问题状态方程的解.ppt
- c语言中等于号和大于号的优先级,C 读书笔记之 关系运算符重载 大于号 小于号 等于号==...
- Deepin+win7双系统启动项问题解决
- c语言中calloc是什么意思,C语言中malloc和calloc以及relloc函数的区别
- 系统虚拟化- 原理与实现
- 【经验分享】突然我的SM.MS的图床没法访问了(内附解决方法)
- linux通过xdm开启端口,Red Hat Linux 5.4 开启xdm远程访问
- java中continue是什么意思?
- 欢迎观看Toni_hou的#生活1