知乎用户地域分析
Posted Phil Chow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知乎用户地域分析相关的知识,希望对你有一定的参考价值。
继之前爬取知乎用户之后,目前爬取到3.5万条数据,但是在这些数据中有一些是没有完整填写用户信息的。检索数据库中地理位置不为空的用户,进行地域统计。
1 # -*- coding: utf-8 -*- 2 3 import re 4 import sqlite3 5 import sys 6 reload(sys) 7 sys.setdefaultencoding(‘utf-8‘) 8 9 class CountCollect(object): 10 """docstring for CountCollect""" 11 12 pro_city = {} 13 city_pro = {} 14 prolist = [] 15 citylist = [] 16 conn = sqlite3.connect(‘zhihuuser.db‘) 17 conn.text_factory = str 18 cur = conn.cursor() 19 20 def getss(self): 21 shengshi = open(‘shengshi.txt‘,‘r‘) 22 for line in shengshi.readlines(): 23 province = line.split(":")[0] 24 # print province 25 self.prolist.append(province) 26 self.pro_city.setdefault(province,{}) 27 self.pro_city[province].setdefault(‘number‘,0) 28 self.pro_city[province].setdefault(‘cities‘,{}) 29 cities = line.split(‘:‘)[-1].split(‘\n‘)[0].split(‘ ‘) 30 # print cities 31 for city in cities: 32 # print city,type(city) 33 self.citylist.append(city) 34 self.pro_city[province][‘cities‘].setdefault(city,0) 35 self.city_pro[city] = province 36 # print self.prolist 37 # for i in self.citylist: 38 # print i 39 40 41 def getlocation(self): 42 # 从数据库中检索出数据 43 result = self.cur.execute(‘select location from userstb 44 where location is not NULL‘).fetchall() 45 string = [] 46 for line in result: 47 try: 48 string.append(line[0].encode("gbk")) 49 except Exception, e: 50 string.append(line[0]) 51 ww = open(‘location.txt‘,‘a‘) 52 for x in string: 53 ww.write(x) 54 ww.write(‘\n‘) 55 # 符合省 56 for pro in self.prolist: 57 for x in string: 58 if re.search(pro,x): 59 print "%s----%s" %(pro,x) 60 self.pro_city[pro][‘number‘] += 1 61 # 符合市 62 for cit in self.citylist: 63 for x in string: 64 if re.search(cit,x): 65 print "%s----%s" %(cit,x) 66 pro = self.city_pro[cit] 67 self.pro_city[pro][‘number‘] += 1 68 self.pro_city[pro][‘cities‘][cit] += 1 69 70 71 keys = self.pro_city.keys() 72 r = open(‘result2.txt‘,‘a‘) 73 for key in keys: 74 # print key,type(key) 75 # print cmp(‘直辖市‘,key.decode(‘gbk‘)) 76 if cmp(key.decode(‘gbk‘),‘直辖市‘)==0 or 77 cmp(key.decode(‘gbk‘),‘港澳台‘)==0: 78 for city in self.pro_city[key][‘cities‘]: 79 print city, self.pro_city[key][‘cities‘][city] 80 r.write("{name:‘") 81 r.write(city) 82 r.write("‘,value: ") 83 r.write(str(self.pro_city[key][‘cities‘][city])) 84 r.write("},") 85 r.write(‘\n‘) 86 else: 87 print key, self.pro_city[key][‘number‘] 88 r.write("{name:‘") 89 r.write(key) 90 r.write("‘,value: ") 91 r.write(str(self.pro_city[key][‘number‘])) 92 r.write("},") 93 r.write(‘\n‘) 94 95 96 if __name__ == ‘__main__‘: 97 cc = CountCollect() 98 cc.getss() #生成省市地域字典 99 cc.getlocation() #分类统计
其中的shengshi.txt是省市的列表,文件如下:
直辖市:北京 上海 天津 重庆
河北:石家庄 唐山 秦皇岛 邯郸 邢台 保定 张家口 承德 沧州 廊坊 衡水
山西:太原 大同 阳泉 长治 晋城 朔州 晋中 运城忻州 临汾 吕梁
内蒙古:呼和浩特 包头 乌海 赤峰 通辽 鄂尔多斯 呼伦贝尔 巴彦淖尔 乌兰察布 兴安 锡林郭勒 阿拉善
辽宁:沈阳 大连 鞍山 抚顺 本溪 丹东 锦州 营口 阜新 辽阳 盘锦 铁岭 朝阳 葫芦岛
吉林:长春 吉林 四平 辽源 通化 白山 松原 白城 延边
黑龙江:哈尔滨 齐齐哈尔 鸡西 鹤岗 双鸭山 大庆 伊春 佳木斯 七台河 牡丹江 黑河 绥化 大兴安岭
江苏:南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁
浙江:杭州 宁波 温州 嘉兴 湖州 绍兴 金华 衢州 舟山 台州 丽水
安徽:合肥 芜湖 蚌埠 淮南 马鞍山 淮北 铜陵 安庆 黄山 滁州 阜阳 宿州 巢湖 六安 亳州 池州 宣城
福建:福州 厦门 莆田 三明 泉州 漳州 南平 龙岩 宁德
江西:南昌 景德镇 萍乡 九江 新余 鹰潭 赣州 吉安 宜春 抚州 上饶
山东:济南 青岛 淄博 枣庄 东营 烟台 潍坊 威海 济宁 泰安 日照 莱芜 临沂 德州 聊城 滨州 菏泽
河南:郑州 开封 洛阳 平顶山 焦作 鹤壁 新乡 安阳 濮阳 许昌 漯河 三门峡 南阳 商丘 信阳 周口 驻马店
湖北:武汉 黄石 襄樊 十堰 荆州 宜昌 荆门 鄂州 孝感 黄冈 咸宁 随州 恩施
湖南:长沙 株洲 湘潭 衡阳 邵阳 岳阳 常德 张家界 益阳 郴州 永州 怀化 娄底 湘西
广东:广州 深圳 珠海 汕头 韶关 佛山 江门 湛江 茂名 肇庆 惠州 梅州 汕尾 河源 阳江 清远 东莞 中山 潮州 揭阳云浮
广西:南宁 柳州 桂林 梧州 北海 防城港 钦州 贵港 玉林 百色 贺州 河池 来宾 崇左
海南:海口 三亚
四川:成都 自贡 攀枝花 泸州 德阳 绵阳 广元 遂宁 内江 乐山 南充 宜宾 广安 达州 眉山 雅安 巴中 资阳 阿坝 甘孜凉山
贵州:贵阳 六盘水 遵义 安顺 铜仁 毕节 黔西南 黔东南 黔南
云南:昆明 曲靖 玉溪 保山 昭通 丽江 普洱 临沧 文山 红河 西双版纳 楚雄 大理 德宏 怒江 迪庆
西藏:拉萨 昌都 山南 日喀则 那曲 阿里 林芝
陕西:西安 铜川 宝鸡 咸阳 渭南 延安 汉中 榆林 安康 商洛
甘肃:兰州 嘉峪关 金昌 白银 天水 武威 张掖 平凉 酒泉 庆阳 定西 陇南 临夏 甘南
青海:西宁 海东 海北 黄南 海南 果洛 玉树 海西
宁夏:银川 石嘴山 吴忠 固原 中卫
新疆:乌鲁木齐 克拉玛依 吐鲁番 哈密 和田 阿克苏 喀什 克孜勒苏柯尔克孜 巴音郭楞蒙古 昌吉 博尔塔拉蒙古 伊犁哈萨克塔城 阿勒泰
港澳台:香港 澳门 台湾
生成result2.txt文件结构如下,为何要生成如此结构的文件,下文有用
{name:‘贵州‘,value: 23},
{name:‘黑龙江‘,value: 88},
{name:‘安徽‘,value: 194},
{name:‘青海‘,value: 24},
{name:‘宁夏‘,value: 8},
{name:‘浙江‘,value: 637},
{name:‘广东‘,value: 1281},
{name:‘河北‘,value: 123},
{name:‘江西‘,value: 77},
{name:‘辽宁‘,value: 202},
{name:‘湖北‘,value: 380},
{name:‘福建‘,value: 226},
{name:‘陕西‘,value: 273},
{name:‘香港‘,value: 48},
{name:‘台湾‘,value: 4},
{name:‘澳门‘,value: 3},
{name:‘吉林‘,value: 81},
{name:‘山西‘,value: 70},
{name:‘西藏‘,value: 2},
{name:‘河南‘,value: 185},
{name:‘甘肃‘,value: 40},
{name:‘湖南‘,value: 196},
{name:‘江苏‘,value: 722},
{name:‘海南‘,value: 40},
{name:‘山东‘,value: 360},
{name:‘新疆‘,value: 27},
{name:‘广西‘,value: 77},
{name:‘天津‘,value: 177},
{name:‘重庆‘,value: 142},
{name:‘北京‘,value: 1366},
{name:‘上海‘,value: 913},
{name:‘云南‘,value: 46},
{name:‘内蒙古‘,value: 39},
{name:‘四川‘,value: 340},
使用echart网站的地图图例,生成如下图所示地域结构:
颜色越深,表示当前区域的用户数越多。
以上是关于知乎用户地域分析的主要内容,如果未能解决你的问题,请参考以下文章