统计学习方法 | 第2章 感知机 | 补充

摘要:
datasets.make_biclustersdatasets.make_blobsdatasets.make_checkerboarddatasets.make_circlesdatasets.make_classificationdatasets.make_friedman1datasets.make_friedman2datasets.make_friedman3datasets.make_gaussian_quantilesdatasets.make_hastie_10_2datasets.make_low_rank_matrixdatasets.make_moonsdatasets.make_multilabel_classificationdatasets.make_regressiondatasets.make_s_curvedatasets.make_sparse_coded_signaldatasets.make_sparse_spd_matrixdatasets.make_sparse_uncorrelateddatasets.make_spd_matrixdatasets.make_swiss_rolliris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’sIrisdataset。iris包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以iris数据集是一个150行5列的二维表。iris的每个样本都包含了品种信息,即目标属性。同时DataFrame可以设置列名columns与行名index,可以通过像matlab一样通过位置获取数据也可以通过列名和行名定位,具体方法在后面细说。

egend函数

legend函数介绍:在轴上方一个图例

legend常用属性:

loc:图例摆放的位置,值请看下方文档

ncol; 图例列数,它的值决定了图例一共有多少列,详细请看下方文档

label:如果需要完全控制图例中的内容可以不写plot中的label,写在legend中,请看图中示例

sklearn的datasets使用

sklearn.datasets模块主要提供了一些导入、在线下载及本地生成数据集的方法,可以通过dir或help命令查看,目前主要有三种形式:

  • load_<dataset_name> 本地加载数据
  • fetch_<dataset_name> 远程加载数据
  • make_<dataset_name> 构造数据集

方法说明

  1. 本地加载数据集
      数据集文件在sklearn安装目录下datasetsdata文件下,如果有兴趣可进入模块目录查看
In [2]: datasets.load_*?  
datasets.load_boston #波士顿房价数据集  
datasets.load_breast_cancer #乳腺癌数据集  
datasets.load_diabetes #糖尿病数据集  
datasets.load_digits #手写体数字数据集  
datasets.load_files  
datasets.load_iris #鸢尾花数据集  
datasets.load_lfw_pairs  
datasets.load_lfw_people  
datasets.load_linnerud #体能训练数据集  
datasets.load_mlcomp  
datasets.load_sample_image  
datasets.load_sample_images  
datasets.load_svmlight_file  
datasets.load_svmlight_files  
  1. 远程加载数据集
      比较大的数据集,主要用于测试解决实际问题,支持在线下载,下载下来的数据,默认保存在~/scikit_learn_data文件夹下,可以通过设置环境变量SCIKIT_LEARN_DATA修改路径,datasets.get_data_home()获取下载路径。
In [3]: datasets.fetch_*?  
datasets.fetch_20newsgroups  
datasets.fetch_20newsgroups_vectorized  
datasets.fetch_california_housing  
datasets.fetch_covtype  
datasets.fetch_kddcup99  
datasets.fetch_lfw_pairs  
datasets.fetch_lfw_people  
datasets.fetch_mldata  
datasets.fetch_olivetti_faces  
datasets.fetch_rcv1  
datasets.fetch_species_distributions  
  1. 构造数据集
    下面以make_regression()函数为例,首先看看函数语法:
    make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)
    参数说明:
  • n_samples:样本数
  • n_features:特征数(自变量个数)
  • n_informative:相关特征(相关自变量个数)即参与了建模型的特征数
  • n_targets:因变量个数
  • bias:偏差(截距)
  • coef:是否输出coef标识
In [4]: datasets.make_*?  
datasets.make_biclusters  
datasets.make_blobs  
datasets.make_checkerboard  
datasets.make_circles  
datasets.make_classification  
datasets.make_friedman1  
datasets.make_friedman2  
datasets.make_friedman3  
datasets.make_gaussian_quantiles  
datasets.make_hastie_10_2  
datasets.make_low_rank_matrix  
datasets.make_moons  
datasets.make_multilabel_classification  
datasets.make_regression  
datasets.make_s_curve  
datasets.make_sparse_coded_signal  
datasets.make_sparse_spd_matrix  
datasets.make_sparse_uncorrelated  
datasets.make_spd_matrix  
datasets.make_swiss_roll  

iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set。iris包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以iris数据集是一个150行5列的二维表。

通俗地说,iris数据集是用来给花做分类的数据集,每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征(前4列),我们需要建立一个分类器,分类器可以通过样本的四个特征来判断样本属于山鸢尾、变色鸢尾还是维吉尼亚鸢尾(这三个名词都是花的品种)。

iris的每个样本都包含了品种信息,即目标属性(第5列,也叫target或label)。

样本局部截图:

2016-06-03 12-32-40屏幕截图

将样本中的4个特征两两组合(任选2个特征分别作为横轴和纵轴,用不同的颜色标记不同品种的花),可以构建12种组合(其实只有6种,另外6种与之对称),如图所示:

Iris_dataset_scatterplot.svg

Pandas库之DataFrame

1 简介

DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表

或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matlab也可以用cell存放多类型数据),DataFrame的单元格可以存放数值、字符串等,这和excel表很像。

同时DataFrame可以设置列名columns与行名index,可以通过像matlab一样通过位置获取数据也可以通过列名和行名定位,具体方法在后面细说。

2 创建DataFrame

首先声明一下,以下都是使用的Python 3.6.5版本为例,Python2应该也差不多吧(大概

在所有操作之前当然要先import必要的pandas库,因为pandas常与numpy一起配合使用,所以也一起import吧。

import pandas as pd
import numpy as np

如果还没安装直接在cmd里pip安装吧,如果有版本选择问题,参看之前的帖子。

pip install pandas
pip install numpy

2.1 直接创建

可以直接使用pandas的DataFrame函数创建,比如接下来我们随机创建一个4*4的DataFrame。

df1=pd.DataFrame(np.random.randn(4,4),index=list('ABCD'),columns=list('ABCD'))

其中第一个参数是存放在DataFrame里的数据,第二个参数index就是之前说的行名(或者应该叫索引?),第三个参数columns是之前说的列名。

后两个参数可以使用list输入,但是注意,这个list的长度要和DataFrame的大小匹配,不然会报错。当然,这两个参数是可选的,你可以选择不设置。

而且发现,这两个list是可以一样的,但是每行每列的名字在index或columns里要是唯一的。

使用python自己的shell展示创建的结果是这样的:

统计学习方法 | 第2章 感知机 | 补充第3张

或者在jupyter里面更酷点的样子,接下来都使用jupyter输出展示吧。

统计学习方法 | 第2章 感知机 | 补充第4张

当然,如果你的数据量贼小,也可以自己输入创建,类似这样。

df2=pd.DataFrame([[1,2,3,4],[2,3,4,5],
                  [3,4,5,6],[4,5,6,7]],
                 index=list('ABCD'),columns=list('ABCD'))

这样也可以得到这样子的DataFrame:

统计学习方法 | 第2章 感知机 | 补充第5张

2.2 使用字典创建

仍然是使用DataFrame这个函数,但是字典的每个key的value代表一列,而key是这一列的列名。比如这样。

dic1={'name':['小明','小红','狗蛋','铁柱'],'age':[17,20,5,40],'gender':['男','女','女','男']}
df3=pd.DataFrame(dic1)

输出结果是这样的

统计学习方法 | 第2章 感知机 | 补充第6张

3 查看与筛选数据

python没有matlab的工作区直接查看变量与内容,这大概是python科学计算的一个缺点。所以需要格外的代码来查看,最基本的直接写变量名与print就不说了。

3.1 查看列的数据类型

使用dtypes方法可以查看各列的数据类型,比如说刚刚的df3。

df3.dtypes

输出的结果是这样:

统计学习方法 | 第2章 感知机 | 补充第7张

3.2 查看DataFrame的头尾

使用head可以查看前几行的数据,默认的是前5行,不过也可以自己设置。

使用tail可以查看后几行的数据,默认也是5行,参数可以自己设置。

比如随意设置一个6*6的数据,只看前5行。

df4=pd.DataFrame(np.random.randn(6,6))
df4.head()

统计学习方法 | 第2章 感知机 | 补充第8张

比如只看前3行。

df4.head(3)

统计学习方法 | 第2章 感知机 | 补充第9张

比如看后5行。

df4.tail()

统计学习方法 | 第2章 感知机 | 补充第10张

比如只看后2行。

df4.tail(2)

统计学习方法 | 第2章 感知机 | 补充第11张

3.3 查看行名与列名

使用index查看行名,columns查看列名。具体由例子感受吧。

查看行名。

df1.index

统计学习方法 | 第2章 感知机 | 补充第12张

查看列名。

df3.columns

统计学习方法 | 第2章 感知机 | 补充第13张

3.4 查看数据值

使用values可以查看DataFrame里的数据值,返回的是一个数组。

比如说查看所有的数据值。

df3.values

统计学习方法 | 第2章 感知机 | 补充第14张

比如说查看某一列所有的数据值。

df3['name'].values

统计学习方法 | 第2章 感知机 | 补充第15张

还有另一种操作,使用loc或者iloc查看数据值(但是好像只能根据行来查看?)。区别是loc是根据行名,iloc是根据数字索引(也就是行号)。

比如说这样。

df1.loc['A']

统计学习方法 | 第2章 感知机 | 补充第16张

或者这样。

df1.iloc[0]

统计学习方法 | 第2章 感知机 | 补充第17张

按列进行索引查看数据还能直接使用列名,但这种方法对行索引不适用。

df3['name']

统计学习方法 | 第2章 感知机 | 补充第18张

3.5 查看行列数

使用shape查看行列数,参数为0表示查看行数,参数为1表示查看列数。

df3.shape[0]

统计学习方法 | 第2章 感知机 | 补充第19张

df3.shape[1]

统计学习方法 | 第2章 感知机 | 补充第20张

4 基本操作

DataFrame有些方法可以直接进行数据统计,矩阵计算之类的基本操作。

4.1 转置

直接字母T,线性代数上线。

比如说把之前的df2转置一下。

df3.T

统计学习方法 | 第2章 感知机 | 补充第21张

4.2 描述性统计

使用describe可以对数据根据列进行描述性统计。

比如说对df1进行描述性统计。

df1.describe()

统计学习方法 | 第2章 感知机 | 补充第22张

如果有的列是非数值型的,那么就不会进行统计。

如果想对行进行描述性统计,请参看4.1(转置后进行describe呀!)

4.3 计算

使用sum默认对每列求和,sum(1)为对每行求和。比如

df3.sum()

统计学习方法 | 第2章 感知机 | 补充第23张

可以发现就算元素是字符串,使用sum也会加起来。

df3.sum(1)

统计学习方法 | 第2章 感知机 | 补充第24张

而一行中,有字符串有数值则只计算数值。

数乘运算使用apply,比如。

df2.apply(lambda x:x*2)

统计学习方法 | 第2章 感知机 | 补充第25张

如果元素是字符串,则会把字符串再重复一遍。

乘方运算跟matlab类似,直接使用两个*,比如。

df2**2

统计学习方法 | 第2章 感知机 | 补充第26张

乘方运算如果有元素是字符串的话,就会报错。

4.4 新增

扩充列可以直接像字典一样,列名对应一个list,但是注意list的长度要跟index的长度一致

df2['E']=['999','999','999','999']
df2

统计学习方法 | 第2章 感知机 | 补充第27张

还可以使用insert,使用这个方法可以指定把列插入到第几列,其他的列顺延。

df2.insert(0,'F',[888,888,888,888])
df2

统计学习方法 | 第2章 感知机 | 补充第28张

4.5 合并

使用join可以将两个DataFrame合并,但只根据行列名合并,并且以作用的那个DataFrame的为基准。如下所示,新的df7是以df2的行号index为基准的。

df6=pd.DataFrame(['my','name','is','a'],index=list('ACDH'),columns=list('G'))
df6
df7=df2.join(df6)
df7

统计学习方法 | 第2章 感知机 | 补充第29张

但是,join这个方法还有how这个参数可以设置,合并两个DataFrame的交集或并集。参数为'inner'表示交集,'outer'表示并集。

df8=df2.join(df6,how='inner')
df8
df9=df2.join(df6,how='outer')
df9

统计学习方法 | 第2章 感知机 | 补充第30张

如果要合并多个Dataframe,可以用list把几个Dataframe装起来,然后使用concat转化为一个新的Dataframe。

df10=pd.DataFrame([1,2,3,4],index=list('ABCD'),columns=['a'])
df11=pd.DataFrame([10,20,30,40],index=list('ABCD'),columns=['b'])
df12=pd.DataFrame([100,200,300,400],index=list('ABCD'),columns=['c'])
list1=[df10.T, df11.T, df12.T]
df13=pd.concat(list1)
df13

统计学习方法 | 第2章 感知机 | 补充第31张

pandas中.value_counts()的用法

value_counts()是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。
value_counts()是Series拥有的方法,一般在DataFrame中使用时,需要指定对哪一列或行使用

scatter散点图

https://blog.csdn.net/m0_37393514/article/details/81298503

df.iloc[]

1)行选取

  • 选取第2行
复制代码
>>> df.iloc[1, :]

name         Mike

age            32

gender          0

isMarried     yes

Name: b, dtype: object
复制代码
  • 选取前3行
复制代码
>>> df.iloc[:3, :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
复制代码
  • 选取第2行、第4行、第6行
复制代码
>>> df.iloc[[1,3,5],:]

    name   age  gender isMarried

b   Mike  32.0       0       yes

d   Rose   NaN       1       yes

f  Marry  20.0       1        no
复制代码
  • 通过布尔数组选取前3行
复制代码
>>> df.iloc[[True,True,True,False,False,False], :]

   name   age  gender isMarried

a   Joe  25.0       1       yes

b  Mike  32.0       0       yes

c  Jack  18.0       1        no
复制代码

2)列选取

  • 选取第2列
复制代码
>>> df.iloc[:, 1]

a    25.0

b    32.0

c    18.0

d     NaN

e    15.0

f    20.0

g    41.0

h     NaN

i    37.0

j    32.0

Name: age, dtype: float64
复制代码
  • 选取前3列
复制代码
>>> df.iloc[:, 0:3]

    name   age  gender

a    Joe  25.0       1

b   Mike  32.0       0

c   Jack  18.0       1

d   Rose   NaN       1

e  David  15.0       0

f  Marry  20.0       1

g  Wansi  41.0       0

h   Sidy   NaN       0

i  Jason  37.0       1

j   Even  32.0       0

l  选取第1列、第3列、第4列
复制代码
  • 选取第1列、第3列和第4列
复制代码
>>> df.iloc[:, [0,2,3]]

    name  gender isMarried

a    Joe       1       yes

b   Mike       0       yes

c   Jack       1        no

d   Rose       1       yes

e  David       0        no

f  Marry       1        no

g  Wansi       0        no

h   Sidy       0       yes

i  Jason       1        no

j   Even       0        no
复制代码
  • 通过布尔数组选取前3列
复制代码
>>> df.iloc[:,[True,True,True,False]]
    name   age  gender
a    Joe  25.0       1
b   Mike  32.0       0
c   Jack  18.0       1
d   Rose   NaN       1
e  David  15.0       0
f  Marry  20.0       1
g  Wansi  41.0       0
h   Sidy   NaN       0
i  Jason  37.0       1
j   Even  32.0       0
复制代码

3)同时选取行和列

  • 选取第2行的第1列、第3列、第4列
复制代码
>>> df.iloc[1, [0,2,3]]

name         Mike

gender          0

isMarried     yes

Name: b, dtype: object
复制代码
  • 选取前3行的前3列
复制代码
>>> df.iloc[:3, :3]

   name   age  gender

a   Joe  25.0       1

b  Mike  32.0       0

c  Jack  18.0       1
复制代码

免责声明:文章转载自《统计学习方法 | 第2章 感知机 | 补充》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Nginx安装成Windows服务JavaScript中科学计数法转化为数值字符串形式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

20个Pandas函数详解

作者|Soner Yıldırım 编译|VK 来源|Towards Data Science Pandas是一个python数据分析库。它提供了许多函数和方法来加快数据分析过程。pandas之所以如此普遍,是因为它具有强大的功能,以及他简单的语法和灵活性。 在这篇文章中,我将举例来解释20个常用的pandas函数。有些是很常见的,我敢肯定你以前用过。有些...

关于数据分析与可视化

今天小编来分享在pandas当中经常会被用到的方法,篇幅可能有点长但是提供的都是干货,读者朋友们看完之后也可以点赞收藏,相信会对大家有所帮助,大致本文会讲述这些内容 DataFrame初印象 读取表格型数据 筛选出特定的行 用pandas来绘图 在DataFrame中新增行与列 DataFrame中的统计分析与计算 DataFrame中排序问题 合并多...

python科学计算库-pandas

------------恢复内容开始------------ 1、基本概念 在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来就很方便。另一方面,如果我们日常的数据清理工作不是很复杂的话,你通常用几句 Pandas 代码就可以对数据进行规整。 Pand...

Spark学习进度11-Spark Streaming&amp;amp;Structured Streaming

Spark Streaming Spark Streaming 介绍 批量计算  流计算 Spark Streaming 入门  Netcat 的使用  项目实例 目标:使用 Spark Streaming 程序和 Socket server 进行交互, 从 Server 处获取实时传输过来的字符串, 拆开单词并统计单词数量, 最后打印出来每一个小批...

使用pandas筛选出指定列值所对应的行

在pandas中怎么样实现类似mysql查找语句的功能: select * from table where column_name = some_value; pandas中获取数据的有以下几种方法: 布尔索引 位置索引 标签索引 使用API 假设数据如下: import pandas as pd import numpy as np df =...

SparkSQL学习笔记

概述冠状病毒来临,宅在家中给国家做贡献之际,写一篇随笔记录SparkSQL的学习笔记,目的有二,一是记录整理之前的知识作为备忘录,二是分享技术,大家共同进步,有问题也希望大家不吝赐教。总体而言,大数据主要包含三种操作:长时间运行的批量数据处理;交互式运行的数据查询;实时数据流处理。sparkSQL特点:数据兼容,不仅兼容hive,还可以从rdd,parqu...