摘要
随着城市化进程的加速,地铁作为现代城市的重要交通工具,其站点命名不仅反映了城市的地理和文化特征,还承载了历史记忆和社会变迁。本研究基于高德地图提供的全国5805个地铁站数据,通过详尽的数据分析,揭示了中国地铁站命名背后的规律与特点。
引言
随着中国城市化进程的加速,地铁作为现代城市交通的重要组成部分,其站点命名不仅反映了城市的地理特征和文化背景,还承载了丰富的历史记忆和社会变迁。该报告旨在通过对中国5085个地铁站名称的数据分析,揭示地铁站命名背后的规律与特点,探讨汉字在城市空间中的应用及其背后的文化、历史和社会因素。
研究基于高德地图提供的全国地铁站数据,采用定量分析与定性分析相结合的方法,系统地探讨了中国地铁站命名的模式。首先,我们统计了地铁站名称中出现频率最高的词、字,并分析了这些高频词在不同城市中的分布情况。接着,通过城市级别的字使用频率分析,深入理解各城市对特定字命名地铁站的偏好。此外结合地理因素,探讨了汉字选择与城市地理位置之间的关系。
初步结果显示,“路”字以 1119 次的高频使用量位居榜首,其次是“大”、“南”、“园”等常用字。不同城市对高频汉字的使用存在显著差异,例如北京偏好使用“桥”,而上海、天津、武汉等城市则更倾向于“路”。进一步分析表明,某些汉字如“门”、“街”、“庄”等具有特定的文化或历史背景,它们的使用频率和分布模式能够反映出城市的独特风貌和发展脉络。
爬取与预处理
获取数据的部分参考了文章https://mp.weixin.qq.com/s/fTt_-DJXFa5GmTZa3J03og.
定义抓取函数 get_message(ID, cityname, name) 与获取城市列表函数 get_city(),分别构建了指向高德地图地铁服务 API 的 URL 和城市列表页面 URL,先从城市列表抓取所有支持地铁查询的城市,再通过 GET 请求获取地铁线路及站点的 JSON 数据,写入”subway.csv” 文件。这里打印head查看。
import pandas as pd
file_path='D:/FILE/CLASSFILE/DataScience/Final/subway.xlsx'
df=pd.read_excel(file_path)
df.columns=['城市','线路','站点']
print(df.head())
print(df.isnull().sum())
当前统计共有地铁站点 6920 个,但实际上,由于爬取站点数据时采用了逐个城市逐条地铁线路爬取的策略,不可避免地重复统计两条或两条以上地铁线路交汇的站点,也就是换乘站。对于同一个站点出现在多条线路上的情况,我们希望合并这些记录,使得每个站点只出现一次,但是仍然保存它所属的所有线路。这可以通过分组聚合来实现。
result_df=df.groupby(['城市','站点'])['线路'].agg(lambda x:', '.join(dict.fromkeys(x).keys())).reset_index()
result_df.rename(columns={
'线路':'所有线路'},inplace=True)
print(result_df.head())
output_file_path='D:/FILE/CLASSFILE/DataScience/Final/cleaned_subway.xlsx'
result_df.to_excel(output_file_path,index=False)
做了如下工作:使用 groupby() 函数按“城市”和“站点”两列进行分组。对每组应用自定义函数,该函数接收一个包含该站点所有线路的列表,去除重复项后排序,并将它们用逗号连接成字符串。然后用reset_index() 将分组后的结果转换回标准的 DataFrame 格式。最后为了清晰表达新列的内容,将原“线路”列重命名为“所有线路”。如下图所示。
统计得去除重复爬取的换乘站后,所有地铁站点共 5805 个,这构成了展开下面分析的原始数据。
基础统计
分别统计全国开通地铁的城市数、总地铁线路数和总地铁站数。
nation_total_stations=len(df_cleaned)
print(f"全国地铁站总数:{
nation_total_stations}")
全国地铁站总数:5805
nation_cities_with_metro = df_cleaned['城市'].nunique()
print(f"全国开通地铁的城市总数: {
nation_cities_with_metro}")
全国开通地铁的城市总数: 41
all_lines = df_cleaned['所有线路'].str.split(', ').explode()
unique_lines = all_lines.nunique()
print(f"全国地铁线路总数: {
unique_lines}")
全国地铁线路总数: 104
city_line_counts