砍柴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"))