2020/3/13-大数据应用极限测试每日总结

砍柴ing

今天主要进行数据清洗及处理

# -*- coding: gbk -*-
import json
import pymysql
import jieba.analyse

##生成三个表:用来做地图可视化
##表province:省:项目数
##表city:市:项目数
##表contie:县/区:项目数


##存放获得的最终数据
province = {}
city = {}
contie = {}


#连接数据库
# 打开连接
def open_conn(dbname):
    db = pymysql.connect(
        host="localhost",
        port=3306,
        user="root",
        passwd="1403053171",
        db=dbname,
        charset="utf8")
    return db


def add(db, table_name,name,value):
    # 获取数据

    cursor = db.cursor()
    sql = "insert into "+table_name+"(name,value) values(%s,%s)"
    cursor.execute(sql, (name,value))
    db.commit()


def province_city_contie(result_list,length):
    if result_list[length][len(result_list[length]) - 1] == '省':
        if result_list[length] in province.keys():
            # 省份对应值+1
            province[result_list[length]] += 1
        # 若该省份不存在字典中
        else:
            province[result_list[length]] = 1
    elif result_list[length][len(result_list[length]) - 1] == '市':
        if result_list[length] in city.keys():
            # 市对应值+1
            city[result_list[length]] += 1
        # 若该省份不存在字典中
        else:
            city[result_list[length]] = 1
    else:
        if result_list[length] in contie.keys():
            # 县对应值+1
            contie[result_list[length]] += 1
            # 若该县不存在字典中
        else:
            contie[result_list[length]] = 1

#查询数据,获取省——value,市——value,存入两个字典中
def query(db):
    cursor = db.cursor()
    #获取完成单位
    sql= "select province_city from summary_table"
    cursor.execute(sql)

    for each in cursor.fetchall():
        #each格式:河北省邢台市宁晋县|天津市xx区|天津市
        result = get_participle(each[0])    #格式:天津市,天津市/南开区,辽宁省/大连市/长海县
        #result.split('/')为list类型
        result_list = result.split('/')
        #长度为1
        if len(result_list) == 1:
            province_city_contie(result_list, 0)
        if len(result_list) == 2:
            province_city_contie(result_list, 0)
            province_city_contie(result_list, 1)
        if len(result_list) == 3:
            province_city_contie(result_list, 0)
            province_city_contie(result_list, 1)
            province_city_contie(result_list, 2)
            # if result_list[0][len(result_list[0])-1] == '省':
            #     if result_list[0] in province.keys():
            #         #省份对应值+1
            #         province[result_list[0]] += 1
            #     #若该省份不存在字典中
            #     else:
            #         province[result_list[0]] = 1
            # elif result_list[0][len(result_list[0])-1] == '市':
            #     if result_list[0] in city.keys():
            #         #市对应值+1
            #         city[result_list[0]] += 1
            #     #若该省份不存在字典中
            #     else:
            #         city[result_list[0]] = 1
            # else:
            #     print(result_list[0])
            #     if result_list[0] in contie.keys():
            #         # 县对应值+1
            #         contie[result_list[0]] += 1
            #         # 若该县不存在字典中
            #     else:
            #         contie[result_list[0]] = 1




        # #长度为1
        # if len(result_list) == 1:
        #     #若该省份已存在字典中
        #     if result_list[0] in province.keys():
        #         #省份对应值+1
        #         province[result_list[0]] += 1
        #     #若该省份不存在字典中
        #     else:
        #         province[result_list[0]] = 1
        # ###经测验, ==1时,由于分词出现的错误,“上海市浦东新区”放在了province字典里,最终需去掉
        # # #长度为2
        # elif len(result_list) == 2:
        #     #省判断
        #     # 若该省份已存在字典中
        #     if result_list[0] in province.keys():
        #         # 省份对应值+1
        #         province[result_list[0]] += 1
        #     # 若该省份不存在字典中
        #     else:
        #         province[result_list[0]] = 1
        #     #市判断
        #     # 若该市已存在字典中
        #     if result_list[1] in city.keys():
        #         # 市对应值+1
        #         city[result_list[1]] += 1
        #     # 若该市不存在字典中
        #     else:
        #          city[result_list[1]] = 1
        # #长度为三
        # else:
        #     #省判断
        #     # 若该省份已存在字典province中
        #     if result_list[0] in province.keys():
        #         # 省份对应值+1
        #         province[result_list[0]] += 1
        #     # 若该省份不存在字典province中
        #     else:
        #         province[result_list[0]] = 1
        #     #市判断
        #     # 若该市已存在字典city中
        #     if result_list[1] in city.keys():
        #         # 市对应值+1
        #         city[result_list[1]] += 1
        #     # 若该市不存在字典city中
        #     else:
        #          city[result_list[1]] = 1
        #     #县区判断
        #     #若该县已存在字典contie中
        #     if result_list[2] in contie.keys():
        #         #县对应值+1
        #         contie[result_list[2]] += 1
        #     #若该县不存在字典contie中
        #     else:
        #         contie[result_list[2]] = 1
    ##将直辖市放入省内
    if "北京市" in city.keys():
        province["北京市"] = city["北京市"]
        del city["北京市"]
    if "天津市" in city.keys():
        province["天津市"] = city["天津市"]
        del city["天津市"]
    if "上海市" in city.keys():
        province["上海市"] = city["上海市"]
        del city["上海市"]
    if "重庆市" in city.keys():
        province["重庆市"] = city["重庆市"]
        del city["重庆市"]
    ##插入数据库
    for item in province.items():
        add(open_conn("datax"), "province", item[0],item[1])
    for item in city.items():
        add(open_conn("datax"), "city", item[0],item[1])
    for item in contie.items():
        add(open_conn("datax"), "contie", item[0],item[1])
    # print(len(province))
    # print(len(city))
    # print(len(contie))
    print("完成!")

    ##数据还有一定瑕疵,需手动处理



def get_participle(combine):
    participle_list1 = jieba.cut(combine)
    result = "/".join(participle_list1)
    # print("精确模式:", "/".join(participle_list1))
    return result

if __name__ == '__main__':
    query(open_conn("datax"))

  

posted @ 2020-03-13 22:15  符黑石  阅读(147)  评论(0编辑  收藏  举报