python数据集

Python019

python数据集,第1张

python数据

===

列表

创建列表

a = [23, 45, 1, -3434, 43624356, 234]

查询列表

切片

增加

修改

删除

循环

排序

===

元组

元组是由数个逗号分割的值组成

a = 'Fedora', 'catkin', 'Kubuntu', 'Pardus'

===字符串

字符串是一个有序的字符集合,用于存储和表示基本的文本信息,用单引号,或双引号,或三引号括起来

===字典

字典是一种key---value的数据类型,使用就像我们使用字典,通过拼音或笔画查找字的详细类容

字典是是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。我们使用键来检索存储在字典中的数据。

data = {'kushal':'Fedora', 'kart_':'Debian', 'Jace':'Mac'}

===集合

集合是一个无序的,不重复的数据组合,

集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 symmetric difference(对称差集)等数学运算。

作用:

去重,把一个列表当成集合,就自动去重了

关系测试,测试两组数据之间的交集,差集,并集等关系

将其整理成数据集为:

[ [1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"] ]

算法过程:

1、计算原始的信息熵。

2、依次计算数据集中每个样本的每个特征的信息熵。

3、比较不同特征信息熵的大小,选出信息熵最大的特征值并输出。

运行结果:

col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0

col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108

bestInfoGain : 2.37744375108 bestFeature: 0

结果分析:

说明按照第一列,即有无喉结这个特征来进行分类的效果更好。

思考:

1、能否利用决策树算法,将样本最终的分类结果进行输出?如样本1,2,3属于男性,4属于女性。

2、示例程序生成的决策树只有一层,当特征量增多的时候,如何生成具有多层结构的决策树?

3、如何评判分类结果的好坏?

在下一篇文章中,我将主要对以上三个问题进行分析和解答。如果您也感兴趣,欢迎您订阅我的文章,也可以在下方进行评论,如果有疑问或认为不对的地方,您也可以留言,我将积极与您进行解答。

完整代码如下:

from math import log

"""

计算信息熵

"""

def calcEntropy(dataset):

diclabel = {} ## 标签字典,用于记录每个分类标签出现的次数

for record in dataset:

label = record[-1]

if label not in diclabel.keys():

diclabel[label] = 0

diclabel[label] += 1

### 计算熵

entropy = 0.0

cnt = len(dataset)

for label in diclabel.keys():

prob = float(1.0 * diclabel[label]/cnt)

entropy -= prob * log(prob,2)

return entropy

def initDataSet():

dataset = [[1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"]]

label = ["male","female"]

return dataset,label

#### 拆分dataset ,根据指定的过滤选项值,去掉指定的列形成一个新的数据集

def splitDataset(dataset , col, value):

retset = [] ## 拆分后的数据集

for record in dataset:

if record[col] == value :

reducedFeatVec = record[:col]

reducedFeatVec.extend(record[col+1:]) ### 将指定的列剔除

retset.append(reducedFeatVec) ### 将新形成的特征值列表追加到返回的列表中

return retset

### 找出信息熵增益最大的特征值

### 参数:

### dataset : 原始的数据集

def findBestFeature(dataset):

numFeatures = len(dataset[0]) - 1 ### 特征值的个数

baseEntropy = calcEntropy(dataset) ### 计算原始数据集的熵

baseInfoGain = 0.0 ### 初始信息增益

bestFeature = -1 ### 初始的最优分类特征值索引

### 计算每个特征值的熵

for col in range(numFeatures):

features = [record[col] for record in dataset] ### 提取每一列的特征向量 如此处col= 0 ,则features = [1,1,0,0]

uniqueFeat = set(features)

curInfoGain = 0 ### 根据每一列进行拆分,所获得的信息增益

for featVal in uniqueFeat:

subDataset = splitDataset(dataset,col,featVal) ### 根据col列的featVal特征值来对数据集进行划分

prob = 1.0 * len(subDataset)/numFeatures ### 计算子特征数据集所占比例

curInfoGain += prob * calcEntropy(subDataset) ### 计算col列的特征值featVal所产生的信息增益

# print "col : " ,col , " featVal : " , featVal , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain

print "col : " ,col , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain

if curInfoGain >baseInfoGain:

baseInfoGain = curInfoGain

bestFeature = col

return baseInfoGain,bestFeature ### 输出最大的信息增益,以获得该增益的列

dataset,label = initDataSet()

infogain , bestFeature = findBestFeature(dataset)

print "bestInfoGain :" , infogain, " bestFeature:",bestFeature

MovieLens数据集是一个关于电影评分的数据集,里面包含了从IMDB, The Movie DataBase上面得到的用户对电影的评分信息,详细请看下面的介绍。

文件里面的内容是帮助你如何通过网站id在对应网站上找到对应的电影链接的。

movieId, imdbId, tmdbId

表示这部电影在movielens上的id,可以通过链接 https://movielens.org/movies/(movieId) 来得到。

表示这部电影在imdb上的id,可以通过链接 http://www.imdb.com/title/(imdbId)/

来得到。

movieId, title, genres

文件里包含了一部电影的id和标题,以及该电影的类别

movieId, title, genres

每部电影的id

电影的标题

电影的类别(详细分类见readme.txt)

文件里面的内容包含了每一个用户对于每一部电影的评分。

数据排序的顺序按照userId,movieId排列的。

文件里面的内容包含了每一个用户对于每一个电影的分类

数据排序的顺序按照userId,movieId排列的。

=======

该数据集(ml-latest-small)描述了电影推荐服务[MovieLens]( http://movielens.org )的5星评级和自由文本标记活动。它包含9742部电影的100836个评级和3683个标签应用程序。这些数据由610位用户在1996年3月29日到2018年9月24日之间创建。该数据集于2018年9月26日生成。

随机选择用户以包含在内。所有选定的用户评分至少20部电影。不包括人口统计信息。每个用户都由一个id表示,并且不提供其他信息。

数据包含在 links.csv , movies.csv , ratings.csv 和 tags.csv 文件中。有关所有这些文件的内容和用法的更多详细信息如下。

这是一个发展的数据集。因此,它可能会随着时间的推移而发生变化,并不是共享研究结果的适当数据集。

========

要确认在出版物中使用数据集,请引用以下文件:

========================

数据集文件以[逗号分隔值]文件写入,并带有单个标题行。包含逗号( , )的列使用双引号(```)进行转义。这些文件编码为UTF-8。如果电影标题或标签值中的重音字符(例如Misérables,Les(1995))显示不正确,确保读取数据的任何程序(如文本编辑器,终端或脚本)都配置为UTF-8。

MovieLens用户随机选择包含。他们的ID已经匿名化了。用户ID在 ratings.csv 和 tags.csv 之间是一致的(即,相同的id指的是两个文件中的同一用户)。

数据集中仅包含至少具有一个评级或标记的电影。这些电影ID与MovieLens网站上使用的电影ID一致(例如,id 1 对应于URL https://movielens.org/movies/1 )。电影ID在 ratings.csv , tags.csv , movies.csv 和 links.csv 之间是一致的.

通过[pandas.read_csv]将各表转化为pandas 的DataFrame对象

其中用到的参数为分隔符sep、头文件header、列名定义names、解析器引擎engine

这里和书上相比多用了engine参数,engine参数有C和Python,C引擎速度更快,而Python引擎目前功能更完整。

可用pandas.merge 将所有数据都合并到一个表中。merge有四种连接方式(默认为inner),分别为

通过索引器查看第一行数据,使用基于标签的索引.loc或基于位置的索引.iloc

可通过数据透视表( pivot_table )实现

该操作产生了另一个DataFrame,输出内容为rating列的数据,行标index为电影名称,列标为性别,aggfunc参数为函数或函数列表(默认为numpy.mean),其中“columns”提供了一种额外的方法来分割数据。

by参数的作用是针对特定的列进行排序(不能对行使用),ascending的作用是确定排序方式,默认为升序

增加一列存放平均得分之差,并对其排序,得到分歧最大且女性观众更喜欢的电影

按照电影标题将数据集分为不同的groups,并且用size( )函数得到每部电影的个数(即每部电影被评论的次数),按照从大到小排序,取最大的前20部电影列出如下

按照电影名称分组,用agg函数通过一个字典{‘rating’: [np.size, np.mean]}来按照key即rating这一列聚合,查看每一部电影被评论过的次数和被打的平均分。取出至少被评论过100次的电影按照平均评分从大到小排序,取最大的10部电影。