前言
請先閱讀“中國年輕人正帶領(lǐng)國家走向危機(jī)”,這鍋背是不背楔绞? 一文慎菲,以對“手把手教你完成一個數(shù)據(jù)科學(xué)小項目”系列有個全局性的了解。
代碼統(tǒng)一開源在 GitHub:DesertsX/gulius-projects 课幕,感興趣的朋友可以先行 star 哈拯钻。(注:jupyter notebook 里的圖片有些無法顯示帖努,因?yàn)榇蛩愀峦瓯鞠盗泻笤俳y(tǒng)一上傳,建議參照文章內(nèi)容和實(shí)際代碼運(yùn)行結(jié)果進(jìn)行理解)
截至目前我們已經(jīng)完成了數(shù)據(jù)爬取粪般、數(shù)據(jù)提取與IP查詢拼余、數(shù)據(jù)異常與清洗、評論數(shù)變化情況分析亩歹,本文繼續(xù)對地理信息進(jìn)行處理匙监,并分別提取出省份和城市數(shù)據(jù),從而可以用 pyecharts 進(jìn)行地圖可視化小作。
讀取數(shù)據(jù)
import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')
df.head()
經(jīng)過之前的文章的洗禮亭姥,相信你對數(shù)據(jù)已經(jīng)非常熟悉了吧:
本文只對'area'
列進(jìn)行處理,'ip_loc'
列讀者可自行探索顾稀,比如提取并分析下移動达罗、電信、聯(lián)通等的占比
等静秆。
df[['area','ip_loc']]
統(tǒng)計 area
看看area
列有多少種情況粮揉。
area_count = df.groupby('area')['area'].count().sort_values(ascending=False)
area_name = list(area_count.index)
area_values = area_count.values
print(len(area_name),len(area_values))
print(area_count)
這里展示area_count
部分?jǐn)?shù)據(jù):
337 337
area
北京 319
上海 281
廣東廣州 176
四川成都 136
廣東深圳 131
湖北武漢 113
重慶 96
江蘇南京 96
浙江杭州 87
陜西西安 73
福建福州 73
浙江 68
江蘇蘇州 64
安徽合肥 52
天津 44
山東濟(jì)南 44
江蘇徐州 42
江蘇無錫 42
遼寧沈陽 40
山東青島 40
全部3000多條評論數(shù)據(jù)里,地理信息area_name
共337個唯一值抚笔,為了分別對省份和城市進(jìn)行統(tǒng)計和可視化扶认,需要從area_name
里找出可以分離出省份和城市的提取方法,以便apply
應(yīng)用到area
列上殊橙。
讀者可在此處暫停思考下辐宾,自己的思路是什么?該如何實(shí)現(xiàn)膨蛮?
print(area_name)
全部337條地理信息匯總?cè)缦拢?/p>
['北京', '上海', '廣東廣州', '四川成都', '廣東深圳', '湖北武漢', '重慶', '江蘇南京', '浙江杭州', '陜西西安', '福建福州', '浙江', '江蘇蘇州', '安徽合肥', '天津', '山東濟(jì)南', '江蘇徐州', '江蘇無錫', '遼寧沈陽', '山東青島', '江西南昌', '河南鄭州', '香港', '廣東佛山', '廣東', '湖南長沙', '云南昆明', '北京海淀', '山西太原', '廣西南寧', '廣東東莞', '甘肅蘭州', '澳大利亞', '內(nèi)蒙古呼和浩特', '河南開封', '福建', '遼寧大連', '河北', '河北石家莊', '江蘇南通', '黑龍江哈爾濱', '湖南', '浙江紹興', '云南', '山東', '日本', '吉林', '吉林長春', '遼寧盤錦', '浙江寧波', '福建廈門', '河南', '貴州貴陽', '浙江金華', '貴州', '山西晉城', '浙江溫州', '山東臨沂', '四川', '江蘇常州', '河南洛陽', '新疆烏魯木齊', '廣東汕頭', '江蘇揚(yáng)州', '山東淄博', '四川內(nèi)江', '江蘇泰州', '福建泉州', '廣東中山', '山東煙臺', '英國英格蘭', '浙江嘉興', '內(nèi)蒙古包頭', '廣西', '湖北宜昌', '浙江湖州', '山東濟(jì)寧', '河北保定', '海南旱疲口', '廣東惠州', '河北廊坊', '江蘇連云港', '新加坡', '遼寧', '山東濰坊', '安徽淮北', '山西大同', '廣西柳州', '湖北襄陽', '浙江臺州', '四川綿陽', '河北邯鄲', '江西九江', '河南周口', '安徽蕪湖', '浙江麗水', '美國', '寧夏銀川', '河南南陽', '河北承德', '河北唐山', '江蘇鹽城', '陜西寶雞', '青海西寧', '廣東揭陽', '河北秦皇島', '天津塘沽', '河北滄州', '山西長治', '廣東韶關(guān)', '湖北', '江西上饒', '廣西桂林', '江西宜春', '遼寧朝陽', '黑龍江', '湖南常德', '遼寧營口', '湖北黃岡', '遼寧鞍山', '貴州遵義', '山東聊城', '山西', '河南安陽', '安徽六安', '山西運(yùn)城', '山東德州', '山東東營', '河北衡水', '江西贛州', '美國加利福尼亞州', '遼寧撫順', '安徽淮南', '陜西咸陽', '四川宜賓', '云南曲靖', '海南三亞', '湖北荊州', '內(nèi)蒙古赤峰', '四川南充', '福建龍巖', '美國紐約州', '廣西河池', '美國伊利諾伊州', '廣西梧州', '廣東清遠(yuǎn)', '江蘇宿遷', '廣西玉林', '廣西北海', '廣東陽江', '福建莆田', '廣東茂名', '江蘇', '廣東湛江', '新疆昌吉回族自治州', '湖北咸寧', '廣東江門', '安徽滁州', '內(nèi)蒙古', '青海海南藏族自治州', '四川自貢', '大韓民國', '陜西延安', '寧夏', '遼寧錦州', '英國', '安徽阜陽', '山東日照', '江蘇鎮(zhèn)江', '山西臨汾', '山西呂梁', '山西晉中', '福建寧德', '黑龍江齊齊哈爾', '法國', '河南駐馬店', '河南新鄉(xiāng)', '河南許昌', '湖南益陽', '河南漯河', '湖南衡陽', '甘肅武威', '湖南邵陽', '湖南株洲', '湖南湘潭', '遼寧阜新', '安徽黃山', '河南濮陽', '安徽池州', '遼寧遼陽', '山東威海', '福建南平', '山東棗莊', '河南鶴壁', '遼寧本溪', '湖南湘西土家族苗族自治州', '河南平頂山', '河南三門峽', '貴州畢節(jié)', '湖南郴州', '山西陽泉', '安徽安慶', '福建三明', '美國馬里蘭州', '加拿大安大略', '上海徐匯', '云南保山', '云南普洱', '湖北恩施土家族苗族自治州', '內(nèi)蒙古興安盟', '黑龍江大慶', '浙江衢州', '內(nèi)蒙古通遼', '內(nèi)蒙古鄂爾多斯', '加拿大不列顛哥倫比亞', '浙江舟山', '泰國', '北京朝陽', '陜西銅川', '湖北黃石', '四川德陽', '四川瀘州', '陜西漢中', '四川資陽', '四川雅安', '湖南岳陽', '寧夏吳忠', '英國蘇格蘭', '山東泰安', '新疆', '福建漳州', '廣西崇左', '美國康乃狄克州', '甘肅', '美國德克薩斯州', '美國俄亥俄州', '河北張家口', '美國佛羅里達(dá)州', '廣東珠海', '瑞典', '江西鷹潭', '廣西欽州', '江西', '新疆巴音郭楞蒙古自治州', '澳門', '江西萍鄉(xiāng)', '江蘇淮安', '湖北隨州', '四川廣安', '美國俄勒岡州', '馬來西亞', '陜西渭南', '湖北荊門', '江西景德鎮(zhèn)', '吉林松原', '新西蘭', '四川廣元', '吉林白山', '新疆石河子', '吉林通化', '日本和歌山縣', '青海海東', '青海', '四川樂山', '北京東城', '加拿大', '加拿大艾伯塔', '日本岐阜縣', '上海黃浦', '黑龍江綏化', '云南臨滄', '云南大理白族自治州', '云南怒江傈僳族自治州', '黑龍江牡丹江', '云南昭通', '甘肅白銀', '云南紅河哈尼族彝族自治州', '伊拉克', '海南', '內(nèi)蒙古烏蘭察布', '美國喬治亞', '甘肅張掖', '內(nèi)蒙古呼倫貝爾', '黑龍江伊春', '黑龍江雞西', '新疆塔城地區(qū)', '江西撫州', '四川眉山', '美國路易斯安那州', '湖南婁底', '新疆伊犁哈薩克自治州', '遼寧葫蘆島', '廣東肇慶', '廣東潮州', '河南商丘', '山東萊蕪', '山東菏澤', '遼寧丹東', '愛爾蘭', '美國新澤西州', '河南信陽', '越南胡志明市', '廣東河源', '廣東汕尾', '山西朔州', '湖北孝感', '西藏拉薩', '廣東梅州', '菲律賓西米沙鄢', '菲律賓', '澳大利亞澳大利亞首都領(lǐng)地', '廣東云浮', '瑞士', '美國弗吉尼亞州', '遼寧鐵嶺', '安哥拉', '四川達(dá)州', '四川遂寧', '河北邢臺', '湖南懷化', '陜西商洛', '美國賓夕法尼亞州', '意大利皮埃蒙特', '寧夏固原', '意大利托斯卡納', '意大利', '美國密蘇里州', '廣西百色', '甘肅定西', '甘肅天水', '湖南永州', '美國密歇根州', '安徽蚌埠', '安徽銅陵', '河南焦作', '安徽馬鞍山', '美國田納西州']
地理信息的處理,算是本系列文章的一大亮點(diǎn)敞葛,面對這樣略顯雜亂的數(shù)據(jù)吊洼,新手小白或許會和古柳一樣有些頭大,(今天你頭大了嗎制肮?)冒窍,回想當(dāng)初做《爬取張佳瑋138w+知乎關(guān)注者:數(shù)據(jù)可視化》項目時,篩選了張佳瑋的138萬關(guān)注中自身100+關(guān)注的全部4萬多知乎用戶后豺鼻,打算分析和可視化時综液,看到數(shù)據(jù)的臟亂程度也是一言難盡,為了給大家一個直觀的感受儒飒,特意翻出數(shù)據(jù)來展示下谬莹,不知道能否得清:
鬼知道古柳當(dāng)初是怎么統(tǒng)計的呢!
現(xiàn)在看來,這回的數(shù)據(jù)真的算好的了附帽,地理信息都是真實(shí)的埠戳,不會有用戶自定義、瞎填的情況出現(xiàn)蕉扮;格式較為統(tǒng)一整胃,而且數(shù)據(jù)量也小,再不濟(jì)喳钟,哪怕手動提取省份和城市也不是不可以...(手動是不可能手動的屁使,這輩子都不可能再手動的)
但有個背景需要交代,古柳在完成這個項目時是全部一起做的奔则,也就是說在一個 jupyter notebook 里一步步從爬蟲測試與數(shù)據(jù)爬取蛮寂、IP 查詢與數(shù)據(jù)提取、評論數(shù)變化情況分析和可視化易茬、BUG 遭遇戰(zhàn)與異常處理酬蹋、以及后續(xù)文章將涉及的 emoji 提取、評論內(nèi)容分析抽莱、詞云展示范抓、情感分析,還有本文的地理信息處理岸蜗、經(jīng)緯度查詢尉咕、用 BDP 實(shí)現(xiàn)評論動態(tài)熱力圖等等叠蝇×г溃“工作量”也不小,雖說現(xiàn)在寫成了系列文章的形式悔捶,一個 notebook 掰成了八九瓣铃慷,讀者可能覺察不到,但“如人飲水蜕该,冷暖自知”犁柜,推進(jìn)到這一步,確認(rèn)過地理信息后堂淡,“糟糕馋缅,是心肌梗塞的感覺”。好了绢淀,扯完犢子萤悴,還是開始講下古柳的處理思路吧。
數(shù)據(jù)處理思路
首先再次明確下這次的目的是提取出省份和城市信息皆的,且由于數(shù)據(jù)量不大覆履,所以后續(xù)只在中國地圖上進(jìn)行可視化,因而海外地理信息統(tǒng)一可以篩選出去,實(shí)現(xiàn)的方式是構(gòu)建一個unchina
的列表硝全,用來存儲出現(xiàn)過的海外國家栖雾,然后遍歷所有的337條area_name
元素,包含這些國家名的就添加到drop
列表里伟众,然后根據(jù)其他國內(nèi)的地理信息的長度分別打印出來析藕,這樣數(shù)據(jù)就清晰多了!過程中可能有些會被誤分赂鲤,需要核查一遍噪径。
Talk is cheap, show you the code.
area_len_2 = []
area_len_3 = []
area_len_4 = []
area_len_5 = []
unchina = ['英國','美國','日本','瑞士','法國','瑞典','越南','泰國',
'意大利','加拿大','菲律賓','新加坡','新西蘭','伊拉克','愛爾蘭','安哥拉',
'澳大利亞', '大韓民國', '馬來西亞']
droped = []
for area in area_name:
for unarea in unchina:
if unarea in area:
droped.append(area)
if len(area)==2 and area not in droped: area_len_2.append(area) # 我國共有34個省級行政區(qū)域,包括23個省数初,5個自治區(qū)找爱,4個直轄市,2個特別行政區(qū)泡孩。
if len(area)==3 and area not in droped: area_len_3.append(area)
if len(area)==4 and area not in droped: area_len_4.append(area)
if len(area)>=5 and area not in droped: area_len_5.append(area)
print(len(droped),'\n', droped)
print(len(area_len_2),'\n', area_len_2)
print(len(area_len_3),'\n', area_len_3)
print(len(area_len_4),'\n', area_len_4)
print(len(area_len_5),'\n', area_len_5)
處理過后车摄,神清氣爽。雖然下面提取省份沒有用到仑鸥,但對數(shù)據(jù)的組成有了更清晰的了解吮播!
省份匯總
根據(jù)百度百科詞條里的內(nèi)容:省份 - 百科:我國共有34個省級行政區(qū)域,包括23個省眼俊,5個自治區(qū)意狠,4個直轄市,2個特別行政區(qū)疮胖。
復(fù)制過來所有省份环戈,先手動去掉自治區(qū)和行政區(qū)的后綴文字,再用代碼去掉無關(guān)的文字與字符澎灸。
prolist = '北京市院塞,天津市,上海市性昭,重慶市拦止,河北省,山西省糜颠,遼寧省汹族,吉林省,江蘇省其兴,浙江省顶瞒,安徽省,福建省忌警,\
江西省搁拙,山東省秒梳,河南省,湖北省箕速,湖南省酪碘,廣東省,海南省盐茎,四川省兴垦,貴州省,云南省字柠,陜西省探越,甘肅省,\
青海省窑业,臺灣省钦幔,廣西,西藏常柄,寧夏鲤氢,新疆,香港西潘,澳門卷玉,內(nèi)蒙古,黑龍江省'
prolist = prolist.replace('市', '').replace('省', '').split('喷市,')
print(len(prolist), prolist)
34 ['北京', '天津', '上海', '重慶', '河北', '山西', '遼寧', '吉林', '江蘇', '浙江', '安徽', '福建', '江西', '山東', '河南', '湖北', '湖南', '廣東', '海南', '四川', '貴州', '云南', '陜西', '甘肅', '青海', '臺灣', '廣西', '西藏', '寧夏', '新疆', '香港', '澳門', '內(nèi)蒙古', '黑龍江']
提取省份
從area
列提取出相應(yīng)省份相种,非國內(nèi)的則統(tǒng)一用海外
表示:
def get_pro(area):
prolist = ['北京', '天津', '上海', '重慶', '河北', '山西', '遼寧', '吉林', '江蘇', '浙江', '安徽', '福建', '江西', '山東', '河南', '湖北', '湖南', '廣東', '海南', '四川', '貴州', '云南', '陜西', '甘肅', '青海', '臺灣', '廣西', '西藏', '寧夏', '新疆', '香港', '澳門', '內(nèi)蒙古', '黑龍江']
for pro in prolist:
if pro in area:
return pro
return "海外"
df['pro'] = df.area.apply(get_pro)
df[['area','pro']]
統(tǒng)計數(shù)據(jù)
pro_count = df.groupby('pro')['pro'].count().sort_values(ascending=False)
pro_count
具體數(shù)值看柱狀圖就行。
pyecharts
先安裝主題插件
pip install echarts-themes-pypkg
省份分布柱形圖
from pyecharts import Bar
bar = Bar("省份分布")
bar.use_theme("macarons") # 換主題
bar.add("省份", pro_count.index, pro_count.values,is_label_show=True,xaxis_interval=0,xaxis_rotate=-45)
bar
省份分布地圖
from pyecharts import Map
mapp = Map("省份分布情況", width=1000, height=600)
#mapp.use_theme("macarons") # 換主題
mapp.add("", pro_count.index, pro_count.values, maptype='china', is_visualmap=True,
visual_range=[0, 480], is_map_symbol_show=False, visual_text_color='#000', is_label_show=True)
mapp
小結(jié)
省份提取相對比較簡單品姓,只要網(wǎng)上搜下具體有哪些省份(暴露了古柳是地理小白)寝并,拿到省份名單之后就好辦了。不過之前對地理信息數(shù)據(jù)的分組劃分缭黔,以便更清晰的了解數(shù)據(jù)和避免后續(xù)出錯的步驟倒是小小閃光點(diǎn)吧食茎。逃...
下一篇文章將涉及提取城市數(shù)據(jù)蒂破,調(diào)用百度地圖 API 查詢經(jīng)緯度馏谨,然后用 BDP 繪制動態(tài)熱力圖。非常建議讀者自行嘗試實(shí)現(xiàn)附迷,應(yīng)該有不一樣的實(shí)現(xiàn)方法惧互,古柳的方法感覺還是麻煩了,不要被我的方法所限制喇伯!具體內(nèi)容請看下文喊儡。未完待,續(xù)...
本系列項目將全面涉及從爬蟲稻据、數(shù)據(jù)提取與準(zhǔn)備艾猜、數(shù)據(jù)異常發(fā)現(xiàn)與清洗、分析與可視化等細(xì)節(jié),并將代碼統(tǒng)一開源在GitHub:DesertsX/gulius-projects 匆赃,感興趣的朋友可以先行 star 哈淤毛。
本系列文章:
“中國年輕人正帶領(lǐng)國家走向危機(jī)”,這鍋背是不背算柳?
手把手教你完成一個數(shù)據(jù)科學(xué)小項目(1):數(shù)據(jù)爬取
手把手教你完成一個數(shù)據(jù)科學(xué)小項目(2):數(shù)據(jù)提取低淡、IP 查詢
手把手教你完成一個數(shù)據(jù)科學(xué)小項目(3):數(shù)據(jù)異常與清洗
手把手教你完成一個數(shù)據(jù)科學(xué)小項目(4):評論數(shù)變化情況