原标题:Python分析3034个地铁站,发现中国地铁名字的秘密。
最近看了新周刊的一篇推送,有关地铁名字的分析,链接如下。
我们分析了3447个地铁站,发现了中国城市地名的秘密
于是乎也想着自己去获取数据,然后进行分析一番。
当然分析水平不可能和他们的相比,毕竟文笔摆在那里,也就那点水平。
大家看着乐呵就好,能提高的估摸着也就只有数据的准确性啦。
文中所用到的地铁站数据并没有去重,对于换乘站,含有大量重复。
即使作者一直在强调换乘站占比很小,影响不是很大。
但于我而言,去除重复数据还是比较简单的。
然后照着人家的路子去分析,多学习一下。
/ 01 / 获取分析
地铁信息获取从高德地图上获取。
上面主要获取城市的「id」,「cityname」及「名称」。
用于拼接请求网址,进而获取地铁线路的具体信息。
找到请求信息,获取各个城市的地铁线路以及线路中站点详情。
/ 02 / 数据获取
具体代码如下。
importjson
importrequests
frombs4 importBeautifulSoup
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
defget_message(ID, cityname, name):
"""
地铁线路信息获取
"""
url = 'http://map.amap.com/service/subway?_1555502190153&srhdata='+ ID + '_drw_'+ cityname + '.json'
response = requests.get(url=url, headers=headers)
html = response.text
result = json.loads(html)
fori inresult['l']:
forj ini['st']:
# 判断是否含有地铁分线
iflen(i['la']) > 0:
print(name, i['ln'] + '('+ i['la'] + ')', j['n'])
withopen('subway.csv', 'a+', encoding='gbk') asf:
f.write(name + ','+ i['ln'] + '('+ i['la'] + ')'+ ','+ j['n'] + 'n')
else:
print(name, i['ln'], j['n'])
withopen('subway.csv', 'a+', encoding='gbk') asf:
f.write(name + ','+ i['ln'] + ','+ j['n'] + 'n')
defget_city():
"""
城市信息获取
"""
url = 'http://map.amap.com/subway/index.html?&1100'
response = requests.get(url=url, headers=headers)
html = response.text
# 编码
html = html.encode('ISO-8859-1