Verwenden Sie den Python-Crawler, um Daten zu crawlen, und verwenden Sie dann die Datenvisualisierungsanalyse von Echarts

 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. 

Supongo que te gusta

Origin blog.csdn.net/weixin_56814370/article/details/124355207
Recomendado
Clasificación