知乎用户地域分析

继之前爬取知乎用户之后,目前爬取到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网站的地图图例,生成如下图所示地域结构:

颜色越深,表示当前区域的用户数越多。

posted @ 2015-12-23 16:31  phil_chow  阅读(703)  评论(0编辑  收藏  举报