大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解微博內容IP地圖可視化分析實現
視頻在線地址:
2026版【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts+爬蟲) 視頻教程 (火爆連載更新中..)_嗶哩嗶哩_bilibili
課程簡介:
??
本課程采用主流的Python技術棧實現,Mysql8數據庫,Flask后端,Pandas數據分析,前端可視化圖表采用echarts,以及requests庫,snowNLP進行情感分析,詞頻統計,包括大量的數據統計及分析技巧。
實現了,用戶登錄,注冊,爬取微博帖子和評論信息,進行了熱詞統計以及輿情分析,以及基于echarts實現了數據可視化,包括微博文章分析,微博IP分析,微博評論分析,微博輿情分析。最后也基于wordcloud庫實現了詞云圖,包括微博內容詞云圖,微博評論詞云圖,微博評論用戶詞云圖等功能。
微博內容IP地圖可視化分析實現
微博IP可視化分析主要實現微博作者IP位置以及評論作者IP位置功能,通過顏色深淺來直觀的看分布情況。
首先,開發中國地圖可視化必須先引入china.js文件,我們前面已經引入過了
包括base.html
然后把微博IP可視化分析靜態網頁代碼ipDataAnalysis.html放到templates下:
{% extends 'base.html' %}
{% block title %}IP位置分析{% endblock %}
{% block content %}<div class="container-fluid"><div class="row"><div class="col-md-12 mb-4 mt-1"><div class="d-flex flex-wrap justify-content-between align-items-center"><h4 class="font-weight-bold">IP位置分析</h4>
?</div></div></div>
?<div class="row"><div class="col-lg-12"><div class="card"><div class="card-header d-flex justify-content-between"><div class="header-title"><h4 class="card-title">微博作者IP位置分析圖</h4></div></div><div class="card-body"><div id="wzMain" style="width:100%;height:750px">
?</div></div></div>
?</div><div class="col-lg-12"><div class="card"><div class="card-header d-flex justify-content-between"><div class="header-title"><h4 class="card-title">評論作者IP位置分析圖</h4></div></div><div class="card-body"><div id="plMain" style="width:100%;height:750px">
?</div></div></div>
?</div></div>
?</div>
{% endblock %}
{% block echarts %}
?
{% endblock %}
后端我們要搞個中國省市縣的map工具類 mapUtil.py。
cityList = [{'province': '北京', 'city': ['北京市']},{'province': '天津', 'city': ['天津市']},{'province': '河北','city': ['石家莊市', '唐山市', '秦皇島市', '邯鄲市', '邢臺市', '保定市', '張家口市', '承德市', '滄州市', '廊坊市','衡水市']},{'province': '山西','city': ['太原市', '大同市', '陽泉市', '長治市', '晉城市', '朔州市', '晉中市', '運城市', '忻州市', '臨汾市','呂梁市']},{'province': '內蒙古','city': ['呼和浩特市', '包頭市', '烏海市', '赤峰市', '通遼市', '鄂爾多斯市', '呼倫貝爾市', '巴彥淖爾市','烏蘭察布市', '興安盟', '錫林郭勒盟', '阿拉善盟']},{'province': '遼寧','city': ['沈陽市', '大連市', '鞍山市', '撫順市', '本溪市', '丹東市', '錦州市', '營口市', '阜新市', '遼陽市','盤錦市', '盤錦市', '朝陽市', '葫蘆島市']},{'province': '吉林','city': ['長春市', '吉林市', '四平市', '遼源市', '通化市', '白山市', '松原市', '白城市', '延邊']},{'province': '黑龍江','city': ['哈爾濱市', '齊齊哈爾市', '雞西市', '鶴崗市', '雙鴨山市', '大慶市', '伊春市', '佳木斯市', '七臺河市','牡丹江市', '黑河市', '綏化市','大興安嶺地區', ]},{'province': '上海', 'city': ['上海市']},{'province': '江蘇','city': ['南京市', '無錫市', '徐州市', '常州市', '蘇州市', '南通市', '連云港市', '淮安市', '鹽城市', '揚州市','鎮江市', '泰州市', '宿遷市']},{'province': '浙江','city': ['杭州市', '寧波市', '溫州市', '嘉興市', '湖州市', '紹興市', '金華市', '衢州市', '舟山市', '臺州市','麗水市']},{'province': '安徽','city': ['合肥市', '蕪湖市', '蚌埠市', '淮南市', '馬鞍山市', '淮北市', '銅陵市', '安慶市', '黃山市', '滁州市','阜陽市', '宿州市', '六安市', '亳州市','池州市', '宣城市']},{'province': '福建','city': ['福州市', '廈門市', '莆田市', '三明市', '泉州市', '漳州市', '南平市', '龍巖市', '寧德市']},{'province': '江西','city': ['南昌市', '景德鎮市', '萍鄉市', '九江市', '新余市', '鷹潭市', '贛州市', '吉安市', '宜春市', '撫州市','上饒市']},{'province': '山東','city': ['濟南市', '青島市', '淄博市', '棗莊市', '東營市', '煙臺市', '濰坊市', '濟寧市', '泰安市', '威海市','日照市', '萊蕪市', '臨沂市', '德州市','聊城市', '濱州市', '菏澤市']},{'province': '河南','city': ['鄭州市', '開封市', '洛陽市', '平頂山市', '安陽市', '鶴壁市', '新鄉市', '焦作市', '濟源市', '濮陽市','許昌市', '漯河市', '三門峽市', '南陽市','商丘市', '信陽市', '周口市', '駐馬店市']},{'province': '湖北','city': ['武漢市', '黃石市', '十堰市', '宜昌市', '襄陽市', '鄂州市', '荊門市', '孝感市', '荊州市', '黃岡市','咸寧市', '隨州市', '恩施', '仙桃市','潛江市', '天門市', '神農架林區']},{'province': '湖南','city': ['長沙市', '株洲市', '湘潭市', '衡陽市', '邵陽市', '岳陽市', '常德市', '張家界市', '益陽市', '郴州市','永州市', '懷化市', '婁底市', '湘西']},{'province': '廣東','city': ['廣州市', '韶關市', '深圳市', '珠海市', '汕頭市', '佛山市', '江門市', '湛江市', '茂名市', '肇慶市','惠州市', '梅州市', '汕尾市', '河源市','陽江市', '清遠市', '東莞市', '中山市', '東沙群島', '潮州市', '揭陽市', '云浮市']},{'province': '廣西','city': ['南寧市', '柳州市', '桂林市', '梧州市', '北海市', '防城港市', '欽州市', '貴港市', '玉林市', '百色市','賀州市', '河池市', '來賓市', '崇左市']},{'province': '海南','city': ['海口市', '三亞市', '三沙市', '五指山市', '瓊海市', '儋州市', '文昌市', '萬寧市', '東方市', '定安縣','屯昌縣', '澄邁縣', '臨高縣', '白沙','昌江', '樂東', '陵水', '保亭', '瓊中']},{'province': '重慶', 'city': ['重慶市']},{'province': '四川','city': ['成都市', '自貢市', '攀枝花市', '瀘州市', '德陽市', '綿陽市', '廣元市', '遂寧市', '內江市', '樂山市','南充市', '眉山市', '宜賓市', '廣安市','達州市', '雅安市', '巴中市', '資陽市', '阿壩', '甘孜', '涼山']},{'province': '貴州','city': ['貴陽市', '六盤水市', '遵義市', '安順市', '銅仁市', '黔西南', '畢節市', '黔東南', '黔南']},{'province': '云南','city': ['昆明市', '曲靖市', '玉溪市', '保山市', '昭通市', '麗江市', '普洱市', '臨滄市', '楚雄', '紅河', '文山','西雙版納', '大理', '德宏', '怒江','迪慶']},{'province': '西藏自治區','city': ['拉薩市', '昌都地區', '山南地區', '日喀則地區', '那曲地區', '阿里地區', '林芝地區']},{'province': '陜西','city': ['西安市', '銅川市', '寶雞市', '咸陽市', '渭南市', '延安市', '漢中市', '榆林市', '安康市', '商洛市']},{'province': '甘肅','city': ['蘭州市', '嘉峪關市', '金昌市', '白銀市', '天水市', '武威市', '張掖市', '平涼市', '酒泉市', '慶陽市','定西市', '隴南市', '臨夏', '甘南']},{'province': '青海', 'city': ['西寧市', '海東市', '海北', '黃南', '海南', '果洛', '玉樹', '海西']},{'province': '寧夏回族自治區', 'city': ['銀川市', '石嘴山市', '吳忠市', '固原市', '中衛市']},{'province': '新疆維吾爾自治區','city': ['烏魯木齊市', '克拉瑪依市', '吐魯番地區', '哈密地區', '昌吉', '博爾塔拉', '巴音郭楞', '阿克蘇地區','克孜勒蘇柯爾克孜自治州', '喀什地區', '和田地區', '伊犁','塔城地區', '阿勒泰地區', '石河子市', '阿拉爾市', '圖木舒克市', '五家渠市']},{'province': '臺灣','city': ['臺北市', '高雄市', '臺南市', '臺中市', '金門縣', '南投縣', '基隆市', '新竹市', '嘉義市', '新北市','宜蘭縣', '新竹縣', '桃園縣', '苗栗縣','彰化縣', '嘉義縣', '云林縣', '屏東縣', '臺東縣', '花蓮縣', '澎湖縣', '連江縣']},{'province': '香港特別行政區', 'city': ['香港島', '香港島', '新界']},{'province': '澳門特別行政區', 'city': ['澳門', '離島']}
]
page.py里實現ipDataAnalysis方法:
@pb.route('/ipDataAnalysis')
def ipDataAnalysis():"""IP地址數據分析:return:"""cityDic = {} ?# 微博文章作者IPcityList = mapUtil.cityListarticleList = articleDao.getAllArticle()for article in articleList:if article[5]:for city in cityList:if city['province'].find(article[5]) != -1:if cityDic.get(city['province'], -1) == -1:cityDic[city['province']] = 1else:cityDic[city['province']] += 1articleCityDicList = [{'name': x[0],'value': x[1]} for x in cityDic.items()]return render_template('ipDataAnalysis.html',articleCityDicList=articleCityDicList)
前端的我們加下微博內容IP分析代碼:
<script>
?function formatValue(value) {if (value) {return value} else {return 0}}
?var chartDom = document.getElementById('wzMain');var myChart = echarts.init(chartDom);var option;
?option = {title: {text: '文章IP發布地址地圖',left: 'center',textStyle: {color: '#333',fontWeight: "bold"}},tooltip: {trigger: 'item',formatter: function (params) {return params.name + '<br>微博發布個數:' + formatValue(params.value) + ' 個'}},visualMap: {min: 0,max: 50,text: ['高', '低'],realtime: true,calculable: true,inRange: {color: ['orange', 'green']}},series: [{type: 'map',map: 'china',label: {normal: {show: true,color: "white",fontSize: "12"},},emphasis: {label: {show: true}},data:{{ articleCityDicList | tojson }},
?itemStyle: {normal: {areaColor: "skyblue",borderColor: "#fff"},emphasis: {areaColor: "#2B91B7"}},zoom: 1.4,roam: true}]};
?option && myChart.setOption(option);
?</script>