Python爬虫(三)——开封市58同城出租房决策树构建

决策树框架:

 1 # coding=utf-8
 2 import matplotlib.pyplot as plt
 3
 4 decisionNode = dict(boxstyle=‘sawtooth‘, fc=‘10‘)
 5 leafNode = dict(boxstyle=‘round4‘, fc=‘0.8‘)
 6 arrow_args = dict(arrowstyle=‘<-‘)
 7
 8
 9 def plotNode(nodeTxt, centerPt, parentPt, nodeType):
10     createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords=‘axes fraction‘, 11                             xytext=centerPt, textcoords=‘axes fraction‘, 12                             va=‘center‘, ha=‘center‘, bbox=nodeType, arrowprops 13                                 =arrow_args)
14
15
16 def getNumLeafs(myTree):
17     numLeafs = 0
18     firstStr = list(myTree.keys())[0]
19     secondDict = myTree[firstStr]
20     for key in secondDict:
21         if (type(secondDict[key]).__name__ == ‘dict‘):
22             numLeafs += getNumLeafs(secondDict[key])
23         else:
24             numLeafs += 1
25     return numLeafs
26
27
28 def getTreeDepth(myTree):
29     maxDepth = 0
30     firstStr = list(myTree.keys())[0]
31     secondDict = myTree[firstStr]
32     for key in secondDict:
33         if (type(secondDict[key]).__name__ == ‘dict‘):
34             thisDepth = 1 + getTreeDepth((secondDict[key]))
35         else:
36             thisDepth = 1
37         if thisDepth > maxDepth: maxDepth = thisDepth
38     return maxDepth
39
40
41 def retrieveTree(i):
42     # 预先设置树的信息
43     listOfTree = []
44     return listOfTree[i]
45
46
47 def createPlot(inTree):
48     fig = plt.figure(1, facecolor=‘white‘)
49     fig.clf()
50     axprops = dict(xticks=[], yticks=[])
51     createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)
52     plotTree.totalW = float(getNumLeafs(inTree))
53     plotTree.totalD = float(getTreeDepth(inTree))
54     plotTree.xOff = -0.5 / plotTree.totalW;
55     plotTree.yOff = 1.0
56     plotTree(inTree, (0.5, 1.0), ‘‘)
57     plt.title(‘kaifeng.58.com\n‘)
58     plt.show()
59
60
61 def plotMidText(cntrPt, parentPt, txtString):
62     xMid = (parentPt[0] - cntrPt[0]) / 2.0 + cntrPt[0]
63     yMid = (parentPt[1] - cntrPt[1]) / 2.0 + cntrPt[1]
64     createPlot.ax1.text(xMid, yMid, txtString)
65
66
67 def plotTree(myTree, parentPt, nodeTxt):
68     numLeafs = getNumLeafs(myTree)
69     depth = getTreeDepth(myTree)
70     firstStr = list(myTree.keys())[0]
71     cntrPt = (plotTree.xOff + (1.0 + float(numLeafs)) / 2.0 / plotTree.totalW, 72               plotTree.yOff)
73     plotMidText(cntrPt, parentPt, nodeTxt)
74     plotNode(firstStr, cntrPt, parentPt, decisionNode)
75     secondDict = myTree[firstStr]
76     plotTree.yOff = plotTree.yOff - 1.0 / plotTree.totalD
77     for key in secondDict:
78         if type(secondDict[key]).__name__ == ‘dict‘:
79             plotTree(secondDict[key], cntrPt, str(key))
80         else:
81             plotTree.xOff = plotTree.xOff + 1.0 / plotTree.totalW
82             plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), 83                      cntrPt, leafNode)
84             plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))
85     plotTree.yOff = plotTree.yOff + 1.0 / plotTree.totalD
86
87
88 if __name__ == ‘__main__‘:
89     myTree = retrieveTree(2)
90     createPlot(myTree)

构造信息:

1  [{‘no surfacing‘: {0: ‘no‘, 1: {‘flipper‘: {0: ‘no‘, 1: ‘yes‘}}}},
2                   {‘no surfacing‘: {0: ‘no‘, 1: {‘flipper‘: {0: {‘head‘: {0: ‘no‘, 1: ‘yes‘}}, 1: ‘no‘}}}},
3                   {‘House prices <= 2000‘: {
4                       0: {‘Room size >= 50‘: {0: ‘Yes‘, 1: ‘No‘}}, 1: ‘No‘}}]

结果:

原文地址:https://www.cnblogs.com/LexMoon/p/58tc3.html

时间: 2024-11-10 00:05:56

Python爬虫(三)——开封市58同城出租房决策树构建的相关文章

Python爬虫(二)——对开封市58同城出租房数据进行分析

出租房面积(area) 出租房价格(price) 对比信息 代码 1 import matplotlib as mpl 2 import matplotlib.pyplot as plt 3 import pandas as pad 4 import seaborn as sns 5 import numpy as np 6 7 sns.set_style('dark') 8 kf = pad.read_csv('kf.csv') 9 10 def sinplotone(): 11 fig,ax

用Python写爬虫爬取58同城二手交易数据

爬了14W数据,存入Mongodb,用Charts库展示统计结果,这里展示一个示意 模块1 获取分类url列表 from bs4 import BeautifulSoup import requests,pymongo main_url = 'http://bj.58.com/sale.shtml' client = pymongo.MongoClient('localhost',27017) tc_58 = client['58tc'] tab_link_list = tc_58['link_

Python爬虫(三)爬淘宝MM图片

直接上代码: # python2 # -*- coding: utf-8 -*- import urllib2 import re import string import os import shutil def crawl_taobaoMM(baseUrl, start, end): imgDir = 'mm_img' isImgDirExist = os.path.exists(imgDir) if not isImgDirExist: os.makedirs(imgDir) else:

python爬虫(三)--Python的set()

如果你已经掌握了爬虫基础,看了我前面三个基础再来继续看这一篇文章.这篇文章主要讲解爬虫程序中必须要用到的python集合,如果你对集合很了解.那可以不用看. 在爬虫程序中,为了不重复爬取已经爬过的页面,我们需要把已经爬过的页面的url放进集合中,在每一次要爬取某一个url之前,先看看集合里面是否已经存在,如果已经存在跳过这个url,如果不存在我们把ur放进聚合中,然后再去爬取这个页面 python提供了set这种数据结构,set是一种无序的,不包含重复元素的结构,一般用来测试是否已经包含了某元素

Python爬虫(三)_urllib2:get和post请求

urllib.urlencode() urllib和urllib2都是接受URL请求的相关参数,但是提供了不同的功能.两个最显著的不同如下: urllib仅可以接受URL,不能创建设置了headers的Request类实例: 但是urllib提供了urlencode方法用来GET查询字符串的产生,而urllib2则没有.(这是urllib和urllib2经常一起使用的主要原因) 编码工作使用urllib的urlencode()函数,帮我们将key:value这样的键值对转换成"key=value

Python爬虫(三)——对豆瓣图书各模块评论数与评分图形化分析

文化         经管 ....略 结论: 一个模块的评分与评论数相关,评分为 [8.8——9.2] 之间的书籍评论数往往是模块中最多的 原文地址:https://www.cnblogs.com/LexMoon/p/douban3.html

python爬虫:找房助手V1.0-爬取58同城租房信息

1.用于爬取58上的租房信息,限成都,其他地方的,可以把网址改改: 2.这个爬虫有一点问题,就是没用多线程,因为我用了之后总是会报: 'module' object has no attribute '_strptime'这个奇怪的错误,挣扎了许久,放弃: 如有大神看到这篇帖子,希望可以指点一二,不胜感激,谢谢. 3.我本来打算做成EXE文件的,但是在中文处理方面总是乱码,需要进一步研究: 以下为代码: #!/usr/bin/python # -*- encoding:utf-8 -*- imp

利用python爬取58同城简历数据

最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但是在制作的时候,发现内容不能被存储在本地变量 response 中.当我通过shell载入网页后,虽然内容能被储存在response中,用xpath对我需要的数据进行获取时,返回的都是空值.考虑到数据都在源码中,于是我使用python里的beautifulSoup通过下载源码的方式去获取数据,然后插入到数据库. 需要的python包ur

Python网络爬虫(三)

AJAX学习 AJAX=Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).通俗来说,AJAX是一种无需加载整个网页的情况下,通过在后台与服务器进行少量数据交换,更新部分网页的技术,用于创建快速动态网页的技术. 向服务器发送请求与服务器的响应 发送请求可以利用XMLHttpRequest对象的open()和send()方法. 方法 描述 open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求.method