自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

大數(shù)據(jù) 數(shù)據(jù)分析
最近看了新周刊的一篇推送,有關(guān)地鐵名字的分析。于是乎也想著自己去獲取數(shù)據(jù),然后進行分析一番。當然分析水平不可能和他們的相比,畢竟文筆擺在那里,也就那點水平。

最近看了新周刊的一篇推送,有關(guān)地鐵名字的分析。于是乎也想著自己去獲取數(shù)據(jù),然后進行分析一番。

當然分析水平不可能和他們的相比,畢竟文筆擺在那里,也就那點水平。

大家看著樂呵就好,能提高的估摸著也就只有數(shù)據(jù)的準確性啦。

文中所用到的地鐵站數(shù)據(jù)并沒有去重,對于換乘站,含有大量重復。

即使作者一直在強調(diào)換乘站占比很小,影響不是很大。

但于我而言,去除重復數(shù)據(jù)還是比較簡單的。

然后照著人家的路子去分析,多學習一下。

一、獲取分析

地鐵信息獲取從高德地圖上獲取。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

上面主要獲取城市的「id」,「cityname」及「名稱」。

用于拼接請求網(wǎng)址,進而獲取地鐵線路的具體信息。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

找到請求信息,獲取各個城市的地鐵線路以及線路中站點詳情。

二、數(shù)據(jù)獲取

具體代碼如下。

  1. import json 
  2. import requests 
  3. from bs4 import BeautifulSoup 
  4.  
  5. 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'
  6.  
  7.  
  8. def get_message(ID, cityname, name): 
  9.     ""
  10.     地鐵線路信息獲取 
  11.     ""
  12.     url = 'http://map.amap.com/service/subway?_1555502190153&srhdata=' + ID + '_drw_' + cityname + '.json' 
  13.     response = requests.get(url=url, headers=headers) 
  14.     html = response.text 
  15.     result = json.loads(html) 
  16.     for i in result['l']: 
  17.         for j in i['st']: 
  18.             # 判斷是否含有地鐵分線 
  19.             if len(i['la']) > 0: 
  20.                 print(name, i['ln'] + '(' + i['la'] + ')', j['n']) 
  21.                 with open('subway.csv''a+', encoding='gbk'as f: 
  22.                     f.write(name + ',' + i['ln'] + '(' + i['la'] + ')' + ',' + j['n'] + '\n'
  23.             else
  24.                 print(name, i['ln'], j['n']) 
  25.                 with open('subway.csv''a+', encoding='gbk'as f: 
  26.                     f.write(name + ',' + i['ln'] + ',' + j['n'] + '\n'
  27.  
  28.  
  29. def get_city(): 
  30.     ""
  31.     城市信息獲取 
  32.     ""
  33.     url = 'http://map.amap.com/subway/index.html?&1100' 
  34.     response = requests.get(url=url, headers=headers) 
  35.     html = response.text 
  36.     # 編碼 
  37.     html = html.encode('ISO-8859-1'
  38.     html = html.decode('utf-8'
  39.     soup = BeautifulSoup(html, 'lxml'
  40.     # 城市列表 
  41.     res1 = soup.find_all(class_="city-list fl")[0] 
  42.     res2 = soup.find_all(class_="more-city-list")[0] 
  43.     for i in res1.find_all('a'): 
  44.         # 城市ID值 
  45.         ID = i['id'
  46.         # 城市拼音名 
  47.         cityname = i['cityname'
  48.         # 城市名 
  49.         name = i.get_text() 
  50.         get_message(ID, cityname, name
  51.     for i in res2.find_all('a'): 
  52.         # 城市ID值 
  53.         ID = i['id'
  54.         # 城市拼音名 
  55.         cityname = i['cityname'
  56.         # 城市名 
  57.         name = i.get_text() 
  58.         get_message(ID, cityname, name
  59.  
  60.  
  61. if __name__ == '__main__'
  62.     get_city() 

***成功獲取數(shù)據(jù)。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

包含換乘站數(shù)據(jù),一共3541個地鐵站點。

二、數(shù)據(jù)可視化

先對數(shù)據(jù)進行清洗,去除重復的換乘站信息。

  1. from wordcloud import WordCloud, ImageColorGenerator 
  2. from pyecharts import Line, Bar 
  3. import matplotlib.pyplot as plt 
  4. import pandas as pd 
  5. import numpy as np 
  6. import jieba 
  7.  
  8. # 設(shè)置列名與數(shù)據(jù)對齊 
  9. pd.set_option('display.unicode.ambiguous_as_wide'True
  10. pd.set_option('display.unicode.east_asian_width'True
  11. # 顯示10行 
  12. pd.set_option('display.max_rows', 10) 
  13. # 讀取數(shù)據(jù) 
  14. df = pd.read_csv('subway.csv', header=None, names=['city''line''station'], encoding='gbk'
  15. # 各個城市地鐵線路情況 
  16. df_line = df.groupby(['city''line']).count().reset_index() 
  17. print(df_line) 

通過城市及地鐵線路進行分組,得到全國地鐵線路總數(shù)。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

一共183條地鐵線路。

  1. def create_map(df): 
  2.     # 繪制地圖 
  3.     value = [i for i in df['line']] 
  4.     attr = [i for i in df['city']] 
  5.     geo = Geo("已開通地鐵城市分布情況", title_pos='center', title_top='0', width=800, height=400, title_color="#fff", background_color="#404a59", ) 
  6.     geo.add("", attr, value, is_visualmap=True, visual_range=[0, 25], visual_text_color="#fff", symbol_size=15) 
  7.     geo.render("已開通地鐵城市分布情況.html"
  8.  
  9.  
  10. def create_line(df): 
  11.     ""
  12.     生成城市地鐵線路數(shù)量分布情況 
  13.     ""
  14.     title_len = df['line'
  15.     bins = [0, 5, 10, 15, 20, 25] 
  16.     level = ['0-5''5-10''10-15''15-20''20以上'
  17.     len_stage = pd.cut(title_len, bins=bins, labels=level).value_counts().sort_index() 
  18.     # 生成柱狀圖 
  19.     attr = len_stage.index 
  20.     v1 = len_stage.values 
  21.     bar = Bar("各城市地鐵線路數(shù)量分布", title_pos='center', title_top='18', width=800, height=400) 
  22.     bar.add("", attr, v1, is_stack=True, is_label_show=True
  23.     bar.render("各城市地鐵線路數(shù)量分布.html"
  24.  
  25.  
  26. # 各個城市地鐵線路數(shù) 
  27. df_city = df_line.groupby(['city']).count().reset_index().sort_values(by='line', ascending=False
  28. print(df_city) 
  29. create_map(df_city) 
  30. create_line(df_city) 

已經(jīng)開通地鐵的城市數(shù)據(jù),還有各個城市的地鐵線路數(shù)。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

一共32個城市開通地鐵,其中北京、上海線路已經(jīng)超過了20條。

城市分布情況。

[[263955]]

大部分都是省會城市,還有個別經(jīng)濟實力強的城市。

線路數(shù)量分布情況。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

可以看到大部分還是在「0-5」這個階段的,當然最少為1條線。

  1. # 哪個城市哪條線路地鐵站最多 
  2. print(df_line.sort_values(by='station', ascending=False)) 

探索一下哪個城市哪條線路地鐵站最多。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

北京10號線***,重慶3號線第二。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

還是蠻懷念北京1張票,2塊錢地鐵隨便做的時候。

可惜好日子一去不復返了。

去除重復換乘站數(shù)據(jù)。

  1. # 去除重復換乘站的地鐵數(shù)據(jù) 
  2. df_station = df.groupby(['city''station']).count().reset_index() 
  3. print(df_station) 

一共包含3034個地鐵站,相較新周刊中3447個地鐵站數(shù)據(jù)。

減少了近400個地鐵站。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

接下來看一下哪個城市地鐵站最多。

  1. # 統(tǒng)計每個城市包含地鐵站數(shù)(已去除重復換乘站) 
  2. print(df_station.groupby(['city']).count().reset_index().sort_values(by='station', ascending=False)) 

32個城市,上海***,北京第二。

沒想到的是,武漢居然有那么多地鐵站。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

現(xiàn)在來實現(xiàn)一下新周刊中的操作,生成地鐵名詞云。

  1. def create_wordcloud(df): 
  2.     ""
  3.     生成地鐵名詞云 
  4.     ""
  5.     # 分詞 
  6.     text = '' 
  7.     for line in df['station']: 
  8.         text += ' '.join(jieba.cut(line, cut_all=False)) 
  9.         text += ' ' 
  10.     backgroud_Image = plt.imread('rocket.jpg'
  11.     wc = WordCloud( 
  12.         background_color='white'
  13.         mask=backgroud_Image, 
  14.         font_path='C:\Windows\Fonts\華康儷金黑W8.TTF'
  15.         max_words=1000, 
  16.         max_font_size=150, 
  17.         min_font_size=15, 
  18.         prefer_horizontal=1, 
  19.         random_state=50, 
  20.     ) 
  21.     wc.generate_from_text(text) 
  22.     img_colors = ImageColorGenerator(backgroud_Image) 
  23.     wc.recolor(color_func=img_colors) 
  24.     # 看看詞頻高的有哪些 
  25.     process_word = WordCloud.process_text(wc, text) 
  26.     sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True
  27.     print(sort[:50]) 
  28.     plt.imshow(wc) 
  29.     plt.axis('off'
  30.     wc.to_file("地鐵名詞云.jpg"
  31.     print('生成詞云成功!'
  32.  
  33.  
  34. create_wordcloud(df_station) 

詞云圖如下。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

廣場、大道、公園占了前三,和新周刊的圖片一樣,說明分析有效。

  1. words = [] 
  2. for line in df['station']: 
  3.     for i in line: 
  4.         # 將字符串輸出一個個中文 
  5.         words.append(i) 
  6.  
  7.  
  8. def all_np(arr): 
  9.     ""
  10.     統(tǒng)計單字頻率 
  11.     ""
  12.     arr = np.array(arr) 
  13.     key = np.unique(arr) 
  14.     result = {} 
  15.     for k in key
  16.         mask = (arr == k) 
  17.         arr_new = arr[mask] 
  18.         v = arr_new.size 
  19.         result[k] = v 
  20.     return result 
  21.  
  22.  
  23. def create_word(word_message): 
  24.     ""
  25.     生成柱狀圖 
  26.     ""
  27.     attr = [j[0] for j in word_message] 
  28.     v1 = [j[1] for j in word_message] 
  29.     bar = Bar("中國地鐵站***用的字", title_pos='center', title_top='18', width=800, height=400) 
  30.     bar.add("", attr, v1, is_stack=True, is_label_show=True
  31.     bar.render("中國地鐵站***用的字.html"
  32.  
  33.  
  34. word = all_np(words) 
  35. word_message = sorted(word.items(), key=lambda x: x[1], reverse=True)[:10] 
  36. create_word(word_message) 

統(tǒng)計一下,大家最喜歡用什么字來命名地鐵。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

路最多,在此之中上海的占比很大。

不信往下看。

  1. # 選取上海的地鐵站 
  2. df1 = df_station[df_station['city'] == '上海'
  3. print(df1) 

統(tǒng)計上海所有的地鐵站,一共345個。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

選取包含路的地鐵站。

  1. # 選取上海地鐵站名字包含路的數(shù)據(jù) 
  2. df2 = df1[df1['station'].str.contains('路')] 
  3. print(df2) 

有210個,約占上海地鐵的三分之二,路的七分之二。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

看來上海對路是情有獨鐘的。

具體緣由這里就不解釋了,詳情見新周刊的推送,里面還是講解蠻詳細的。

武漢和重慶則是對家這個詞特別喜歡。

標志著那片土地開拓者們的籍貫與姓氏。

  1. # 選取武漢的地鐵站 
  2. df1 = df_station[df_station['city'] == '武漢'
  3. print(df1) 
  4. # 選取武漢地鐵站名字包含家的數(shù)據(jù) 
  5. df2 = df1[df1['station'].str.contains('家')] 
  6. print(df2) 
  7.  
  8. # 選取重慶的地鐵站 
  9. df1 = df_station[df_station['city'] == '重慶'
  10. print(df1) 
  11. # 選取重慶地鐵站名字包含家的數(shù)據(jù) 
  12. df2 = df1[df1['station'].str.contains('家')] 
  13. print(df2) 

武漢共有17個,重慶共有20個。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

看完家之后,再來看一下名字包含門的地鐵站。

  1. def create_door(door): 
  2.     ""
  3.     生成柱狀圖 
  4.     ""
  5.     attr = [j for j in door['city'][:3]] 
  6.     v1 = [j for j in door['line'][:3]] 
  7.     bar = Bar("地鐵站***用“門”命名的城市", title_pos='center', title_top='18', width=800, height=400) 
  8.     bar.add("", attr, v1, is_stack=True, is_label_show=True, yaxis_max=40) 
  9.     bar.render("地鐵站***用門命名的城市.html"
  10.  
  11.  
  12. # 選取地鐵站名字包含門的數(shù)據(jù) 
  13. df1 = df_station[df_station['station'].str.contains('門')] 
  14. # 對數(shù)據(jù)進行分組計數(shù) 
  15. df2 = df1.groupby(['city']).count().reset_index().sort_values(by='line', ascending=False
  16. print(df2) 
  17. create_door(df2) 

一共有21個城市,地鐵站名包含門。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

其中北京,南京,西安作為多朝古都,占去了大部分。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

具體的地鐵站名數(shù)據(jù)。

  1. # 選取北京的地鐵站 
  2. df1 = df_station[df_station['city'] == '北京'
  3. # 選取北京地鐵站名字包含門的數(shù)據(jù) 
  4. df2 = df1[df1['station'].str.contains('門')] 
  5. print(df2) 
  6.  
  7. # 選取南京的地鐵站 
  8. df1 = df_station[df_station['city'] == '南京'
  9. # 選取南京地鐵站名字包含門的數(shù)據(jù) 
  10. df2 = df1[df1['station'].str.contains('門')] 
  11. print(df2) 
  12.  
  13. # 選取西安的地鐵站 
  14. df1 = df_station[df_station['city'] == '西安'
  15. # 選取西安地鐵站名字包含門的數(shù)據(jù) 
  16. df2 = df1[df1['station'].str.contains('門')] 
  17. print(df2) 

輸出如下。

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

183條地鐵線路,3034個地鐵站,發(fā)現(xiàn)中國地鐵名字的秘密

三、總結(jié)

源碼及相關(guān)文件已上傳GitHub,點擊閱讀原文即可獲取。

這里摘一段新周刊的話。

可以說,一個小小的地鐵名就是一座城市風貌的一部分。

它反映著不同地方的水土,也承載著各個城市的文化和歷史。

確實如此,靠山的城市地鐵名多“山”,靠水的城市地鐵名“含水量”則是杠杠的。

責任編輯:未麗燕 來源: 法納斯特
相關(guān)推薦

2022-07-31 15:46:30

Web自動智能停車

2016-07-05 17:47:53

華為

2014-07-18 09:10:56

免費Wi-Fi

2016-01-27 14:47:02

云監(jiān)控華為

2012-12-29 16:38:41

搜狗地圖

2014-12-17 09:16:33

漏洞北京地鐵系統(tǒng)

2024-10-08 15:16:23

SQL地鐵換乘數(shù)據(jù)庫

2012-07-09 09:54:57

Wi-Fi倫敦奧運

2016-06-08 14:47:17

高德

2019-06-24 15:55:59

地鐵線路擁擠

2017-12-07 08:03:54

華為

2017-09-07 16:37:11

華為

2014-01-23 10:59:54

地鐵通

2021-02-22 19:06:17

數(shù)字人民幣數(shù)字貨幣區(qū)塊鏈

2015-06-25 17:26:52

京港地鐵華為

2016-10-19 09:17:15

HTML5Javascript可視化

2017-07-11 10:31:17

OPPO 手機

2012-08-13 14:17:35

算法代碼

2016-09-08 13:16:51

銳捷

2017-06-27 21:27:42

NFC
點贊
收藏

51CTO技術(shù)棧公眾號