Vorwort: Verwenden Sie Python-Crawler, um Wetterdaten zu crawlen, und verwenden Sie dann die Datenvisualisierung von echorts, um zukünftige Wettertrends zu zeichnen und zu analysieren
Prozess von der Datenerfassung bis zur Visualisierung
(Vertraut mit dem Prozess des Crawlens von Daten und der anschließenden Visualisierung von Daten)
1. Python crawlt Wetterdaten für die nächsten 8-15 Tage
1. Importieren Sie einige verwendete Python-Bibliotheken von Drittanbietern
import requests
import re
from bs4 import BeautifulSoup
import json
import pandas as pd
2. Crawlen Sie den Quellcode der Webseite und erhalten Sie den Quellcode der Webseite durch utf-8-Konvertierung
url='http://www.weather.com.cn/weather15d/101290101.shtml'
rqg=requests.get(url)
html=rqg.content.decode('utf-8')
soup=BeautifulSoup(html,'lxml')
print(soup.prettify())
3. Verwenden Sie die BeautifulSoup-Bibliothek, um Zeitinformationen zu extrahieren
tt=soup.find_all("span",class_="time")
tt
4. Verwenden Sie das Listenverständnis, um die Zeit zu filtern und zu extrahieren
time=[i.string for i in tt]
time
5. Verwenden Sie die BeautifulSoup-Bibliothek, um Wetterinformationen zu extrahieren
hh=soup.find_all("span",class_="tem")
hh
6. Verwenden Sie das Listenverständnis, um das Wetter zu filtern und zu extrahieren
tem=[i.get_text() for i in hh]
tem
7. Verwenden Sie die re-Bibliothek für das Trennzeichen „/“, um die Temperatur zu teilen
tem1=[re.split('/',i) for i in tem]
tem1
8. Verwenden Sie das Listenverständnis, um die höchste Temperatur und die niedrigste Temperatur zu extrahieren
h=[i[0] for i in tem1]
h
l=[i[1] for i in tem1]
l
9. Verwenden Sie das Listenverständnis, um das Celsius-Zeichen zu entfernen
[int(re.sub('℃','',i)) for i in h]
[int(re.sub('℃','',i)) for i in l]
2. Verwendung von Echorts-Datenvisualisierungsanalysen
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>气温变化分析</title>
<script src="js/echarts.js"></script>
</head>
<body>
<div id="main" style="width: 800px; height: 600px"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById("main"));
mytextStyle = {
color: 'blue',
fontStyle: 'normal',
fontWeight: 1,
fontFamily: '黑体',
fontSize: 20,
};
var option = {
grid: {
show: true,
x: 50, y: 66,
borderColor: '#FA8072',
},
title: {
show: true,
text: '未来8-15天气温变化',
subtext: '折线图',
target: 'blank',
subtarget: 'blank',
textAlign: 'center',
textBaseline: 'top',
textStyle: mytextStyle,
padding: 5,
itemGap: 10,
zlevel: 0,
z: 2,
left: '20%',
top: '10',
right: 'auto',
bottom: 'anto',
backgroundColor: 'yellow',
borderColor: '#ccc',
borderWidth: 2,
shadowColor: 'red',
showOffsetX: 0,
showOffsetY: 0,
shadowBlur: 10,
},
tooltip: { trigger: 'axis' },
legend: { data: ['最高气温', '最低气温'] },
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,
xAxis: [
{
show: true, type: 'category',
boundaryGap: false,
data: ['周六(30日)', '周日(1日)', '周一(2日)', '周二(3日)', '周三(4日)', '周四(5日)', '周五(6日)']
}
],
yAxis: [
{
show: true, type: 'value',
axisLabel: { formatter: '{value} °C' }
}
],
series: [
{
name: '最高气温',
smooth: true, type: 'line',
data: [28, 28, 19, 16, 23, 29, 27, 20],
markPoint: {
data: [
{
type: 'max', name: '最大值', symbol: 'diamond', symbolSize: 25,
itemStyle: {
normal: { color: 'red' }
},
},
]
},
markLine: {
data: [
{
type: 'average', name: '平均值',
itemStyle:
{
normal: { borderType: 'dotted', color: 'darkred' }
},
}],
},
},
{
name: '最低气温',
smooth: true, type: 'line', data: [15, 11, 8, 8, 12, 13, 13, 13],
markPoint: {
data: [
{
type: 'max', name: '最大值', symbol: 'diamond', symbolSize: 25,
itemStyle: {
normal: { color: 'red' }
},
},
]
},
markLine: {
data: [
{
type: 'average', name: '平均值',
itemStyle:
{
normal: { borderType: 'dotted', color: 'darkred' }
},
}],
},
},
],
};
myChart.setOption(option);
</script>
</body>
</html>
Die implementierten Funktionen sind relativ einfach, der Verarbeitungsablauf relativ vollständig und die Datenanalyse so weit wie möglich automatisiert.