zoukankan      html  css  js  c++  java
  • 大数据学习练习3--第二天

    今天试这次练习的第二天,对昨天的做了一些完善浪费了一些时间,然后计划的今天的第二部分差了一点没有完成。明天尽量补上,但是明天一天课,估计又得加班了。

    今天主要做了第二部分的完善行业分类和行业代码信息,在网上搜了好久没有找到可以像百度地图API这样的接口,也没有找到可以直接识别是什么行业的网站,没办法,作者选择了用python的字符串匹配来尝试实现这个功能。

    大致思路为,

    先爬取https://baike.baidu.com/item/国民经济行业分类/1640176?fr=aladdin的国民经济行业分类代码表大类的行业代码和名字建成数据库表。

    然后根据原数据中的代表性字段去匹配行业名,找到相似度最高的就认为他是这个行业,如果没有相似的,填入未知。

    接下来上代码:

    python字符串相似度匹配代码:

    import difflib
    
    def string_similar(s1, s2):
     return difflib.SequenceMatcher(None, s1, s2).quick_ratio()

    python调用上面的方法,筛选最相似行业,并返回行业代码和名:

    import strsame
    import pymysql
    
    db = pymysql.connect(host='localhost',
                         port=3306,
                         user='root',
                         passwd='密码',
                         db='库名',
                         charset='utf8')
    def select():
        sql = "select * from hangye"
        # 使用 cursor() 方法创建一个游标对象cur
        cur = db.cursor()
        # 使用 execute()  方法执行 SQL 查询
        cur.execute(sql)
        results = cur.fetchall()
        #strsame.string_similar(s)
        db.close()
        return results
    def cpn(s,results):
        jieguo=["0","未知"]
        j=0.0;
        for i in range(0, results.__len__()):
            if j<strsame.string_similar(s,results[i][1]):
                j=strsame.string_similar(s,results[i][1])
                jieguo[0]=results[i][0]
                jieguo[1]=results[i][1]
        return jieguo

    python抽取原数据代表字段,并调用上面的方法查找到最近行业,并填入原数据表相应位置:

    import Comparenum
    import pymysql

    db = pymysql.connect(host='localhost',
    port=3306,
    user='root',
    passwd='',
    db='',
    charset='utf8')
    results=Comparenum.select()
    def select():
    global results
    data=""
    sql="select yingyonghangyemingcheng,hangye,chengguomingcheng from test2 where biaozhunhangyenum is null"
    # 使用 cursor() 方法创建一个游标对象cur
    cur = db.cursor()
    # 使用 execute() 方法执行 SQL 查询
    cur.execute(sql)
    for i in range(cur.rowcount):
    check = 0
    data1 = cur.fetchone()
    if data1[0]!=None:
    data=data1[0]
    elif data1[1]!=None:
    data = data1[1]
    elif data1[2]!=None:
    data = data1[2]
    else:
    check=1
    #data1 = " ".join('%s' % id for id in data)
    if(check==0):
    print(data)
    center=Comparenum.cpn(data,results)
    if data1[0] != None:
    sql_update = "update test2 set biaozhunhangyenum ='" + center[0] + "',biaozhunhangye ='" + center[
    1] + "' where yingyonghangyemingcheng='" + data + "'"
    elif data1[1] != None:

    sql_update = "update test2 set biaozhunhangyenum ='" + center[0] + "',biaozhunhangye ='" + center[
    1] + "' where hangye='" + data + "'"
    elif data1[2] != None:
    sql_update = "update test2 set biaozhunhangyenum ='" + center[0] + "',biaozhunhangye ='" + center[
    1] + "' where chengguomingcheng='" + data + "'"
    print(center)
    update(sql_update)
    print("第"+str(i)+"次修改")
    db.close()
    def update(sql):
    cur = db.cursor()
    # 使用 execute() 方法执行 SQL 查询
    try:
    cur.execute(sql) # 执行sql
    # 提交
    db.commit()
    except Exception as e:
    # 错误回滚
    print("错误信息:%s" % str(e))
    db.rollback()
    if __name__ == '__main__':
    select();

    这就是所有代码,由于没有爬取到国民经济行业分类代码表大类的行业的数据所以还没有检测有没有成功,所以也没完成,不过自己编了一些数据,感觉效果还行,明天我会完成数据的爬取,然后完成第二部分,进攻第三部分,也就是最后一部分可视化,争取明天完成任务。到此结束。

  • 相关阅读:
    关于一个单机游戏发行的一些见解
    怎么租借电话号码
    NUMA架构的优缺点
    Windows 安装PostgreSQL
    Oracle查询当前用户下的所有表及sqlplus 设置 列宽
    Xshell调整终端显示的最大行数(缓冲区)
    PostgreSQL 索引膨胀
    Linux 清空缓存
    load多个数据文件的yaml
    Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
  • 原文地址:https://www.cnblogs.com/my---world/p/12489990.html
Copyright © 2011-2022 走看看