亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python教程網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化原理解析

 更新時(shí)間:2021年10月28日 14:48:39   作者:BoBo啵啵  
這篇文章主要為大家介紹了python教程中網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化原理的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

1 項(xiàng)目背景

1.1Python的優(yōu)勢(shì)

Python有成熟的程序包資源庫(kù)和活躍的社區(qū) Python以PYPI為技術(shù)支撐,資源豐富,可被靈活調(diào)用。還有一些其他優(yōu)勢(shì),比如跨平臺(tái)且開(kāi)源、成本小;可方便快捷實(shí)現(xiàn)數(shù)據(jù)可視化,像2D圖表和一些基本的3D 圖表可以借matplotlib和 seaborn等等一些專(zhuān)屬庫(kù),只需要編寫(xiě)簡(jiǎn)單的Python代碼就可輸出可視化結(jié)果,方便快捷[1]。

1.2網(wǎng)絡(luò)爬蟲(chóng)

網(wǎng)絡(luò)爬蟲(chóng)(Web Crawler)是依照一定規(guī)則主動(dòng)抓取網(wǎng)頁(yè)的程序,是搜索引擎獲得信息的渠道之一。通常根據(jù)給定 URL 種子爬取網(wǎng)頁(yè),得到新的 URL 存放至待爬行 URL中,當(dāng)滿(mǎn)足一定條件時(shí)停止爬行。網(wǎng)絡(luò)爬蟲(chóng)一般分為通用網(wǎng)絡(luò)爬蟲(chóng)、深度網(wǎng)絡(luò)爬蟲(chóng)和主題網(wǎng)絡(luò)爬蟲(chóng) 3 類(lèi)。 主題網(wǎng)絡(luò)爬蟲(chóng)通常給定 URL 種子集,依照預(yù)先規(guī)定的主題,由特定的分析算法算出爬行網(wǎng)頁(yè)的主題相關(guān)度,并過(guò)濾與主題無(wú)關(guān)的網(wǎng)頁(yè),優(yōu)先抓取相關(guān)度高的網(wǎng)頁(yè),當(dāng)滿(mǎn)足一定條件時(shí)停止。主題網(wǎng)絡(luò)爬蟲(chóng)根據(jù)主題對(duì) Web 進(jìn)行分塊采集并整合采集結(jié)果,從而提高 Web 頁(yè)面利用率[2]。

1.3數(shù)據(jù)可視化

在計(jì)算機(jī)學(xué)科的分類(lèi)中,利用人眼的感知能力對(duì)數(shù)據(jù)進(jìn)行交互的可視化表達(dá)以增強(qiáng)認(rèn)知的技術(shù),稱(chēng)為可視化。16 世紀(jì),天體和地理的測(cè)量技術(shù)得到發(fā)展, 通過(guò)三角測(cè)量等技術(shù)可精確繪制地圖,數(shù)據(jù)可視化開(kāi)始萌芽。20 世紀(jì) 60 年代計(jì)算機(jī)的發(fā)展使得數(shù)據(jù)可視化加速發(fā)展,通過(guò)計(jì)算機(jī)圖像處理等技術(shù),新的可視化方法和技術(shù)迎來(lái)爆炸性增長(zhǎng)。數(shù)據(jù)可視化將相對(duì)復(fù)雜、冗雜的大數(shù)據(jù)經(jīng)過(guò)挖掘、轉(zhuǎn)化,提煉出結(jié)構(gòu)化數(shù)據(jù)內(nèi)容,并通過(guò)可視的方式以用戶(hù)更易理解的形式 展示出來(lái),清晰表達(dá)數(shù)據(jù)內(nèi)在的信息和規(guī)律[3]。

1.4Python環(huán)境介紹

1.4.1簡(jiǎn)介

PyCharm是一種Python IDE,帶有一整套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,比如調(diào)試、語(yǔ)法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制。
此外,該IDE提供了一些高級(jí)功能,以用于支持Django框架下的專(zhuān)業(yè)Web開(kāi)發(fā)。同時(shí)支持Google App Engine,PyCharm支持IronPython。這些功能在先進(jìn)代碼分析程序的支持下,使 PyCharm 成為 Python 專(zhuān)業(yè)開(kāi)發(fā)人員和剛起步人員使用的有力工具。

1.4.2特點(diǎn)

首先,PyCharm擁有一般IDE具備的功能,比如, 調(diào)試、語(yǔ)法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制
另外,PyCharm還提供了一些很好的功能用于Django開(kāi)發(fā),同時(shí)支持Google App Engine,更酷的是,PyCharm支持IronPython主要功能

1.5擴(kuò)展庫(kù)介紹

1.5.1安裝模塊

安裝命令

1.5.2主要模塊介紹

pandas模塊

pandas是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。它納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法[4]。
pandas中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)有兩種:
Series DateFrame
類(lèi)似一維數(shù)組的對(duì)象, 類(lèi)似多維數(shù)組/表格數(shù)組;每列數(shù)據(jù)可以是不同的類(lèi)型;索引包括列索引和行索引。

在這里插入圖片描述

requests模塊

requests是一常用的http請(qǐng)求庫(kù),它使用python語(yǔ)言編寫(xiě),可以方便地發(fā)送http請(qǐng)求,以及方便地處理響應(yīng)結(jié)果。

bs4模塊

BS4 (beautiful soup 4)是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間.

selenium模塊

selenium 是一套完整的web應(yīng)用程序測(cè)試系統(tǒng),包含了測(cè)試的錄制(selenium IDE),編寫(xiě)及運(yùn)行(Selenium Remote Control)和測(cè)試的并行處理(Selenium Grid)。selenium的核心Selenium Core基于JsUnit,完全由JavaScript編寫(xiě),因此可以用于任何支持JavaScript的瀏覽器上。
selenium可以模擬真實(shí)瀏覽器,自動(dòng)化測(cè)試工具,支持多種瀏覽器,爬蟲(chóng)中主要用來(lái)解決JavaScript渲染問(wèn)題。

matplotlib模塊

matplotlib 是一個(gè) Python 的 2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。它可與Numpy一起使用,提供一種有效的MATLAB開(kāi)源替代方案;它也可以和圖形工具包一起使用,讓用戶(hù)很輕松地將數(shù)據(jù)圖形化;同時(shí)它還提供多樣的輸出格式。

seaborn模塊

seaborn是一個(gè)在Python中制作有吸引力和豐富信息的統(tǒng)計(jì)圖形的庫(kù)。它構(gòu)建在MatPultLB的頂部,與PyDATA棧緊密集成,包括對(duì)SIMPY和BANDA數(shù)據(jù)結(jié)構(gòu)的支持以及SISPY和STATSMODEL的統(tǒng)計(jì)例程。
seaborn 其實(shí)是在matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的 API 封裝,從而使得作圖更加容易 在大多數(shù)情況下使用seaborn就能做出很具有吸引力的圖,而使用matplotlib就能制作具有更多特色的圖。應(yīng)該把Seaborn視為matplotlib的補(bǔ)充。Seabn是基于MatPultLB的Python可視化庫(kù)。它為繪制有吸引力的統(tǒng)計(jì)圖形提供了一個(gè)高級(jí)接口。

pyecharts模塊

pyecharts 是一個(gè)用于生成 Echarts 圖表的類(lèi)庫(kù)。echarts 是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化 JS 庫(kù),主要用于數(shù)據(jù)可視化。pyecharts 是一個(gè)用于生成 Echarts 圖表的類(lèi)庫(kù)。實(shí)際上就是 Echarts 與 Python 的對(duì)接。使用 pyecharts 可以生成獨(dú)立的網(wǎng)頁(yè),也可以在 flask , Django 中集成使用。

2需求分析

2.1 網(wǎng)絡(luò)爬蟲(chóng)需求

通過(guò)對(duì)爬取網(wǎng)頁(yè)的html分析,爬取網(wǎng)頁(yè)的數(shù)據(jù),將爬取的數(shù)據(jù)保存到文件,用于對(duì)數(shù)據(jù)進(jìn)行可視化。

2.2 數(shù)據(jù)可視化需求

使爬取網(wǎng)站的數(shù)據(jù)用更直觀的效果展示,當(dāng)數(shù)據(jù)獲取完成,我們使用相關(guān)模塊對(duì)數(shù)據(jù)進(jìn)行清洗處理,并對(duì)數(shù)據(jù)做可視化分析,并理解每一個(gè)圖標(biāo)所代表意義;

3總體設(shè)計(jì)

3.1 網(wǎng)頁(yè)分析

在爬取國(guó)家統(tǒng)計(jì)局網(wǎng)站上的數(shù)據(jù),需要用到WebDriver,先安裝chromdriver。安裝的Chromedriver要與自己電腦上的谷歌版本號(hào)對(duì)應(yīng),將下載的chromedriver.exe放到如圖 1圖 2所示路徑下,放到安裝谷歌和安裝python路徑下,用來(lái)調(diào)用這個(gè)可執(zhí)行文件。還將這兩個(gè)路徑添加環(huán)境變量。

圖1

圖2

驅(qū)動(dòng)瀏覽器,用webdriver的對(duì)象對(duì)網(wǎng)頁(yè)進(jìn)行點(diǎn)擊等操作,找到想要爬取的網(wǎng)站。
通過(guò)對(duì)網(wǎng)頁(yè)html分析,通過(guò)路徑一層層找到自己想要獲取的數(shù)據(jù)。如圖 3所示,將數(shù)據(jù)追加到列表中,保存到文件。

圖3

爬取豆瓣電影Top250,翻頁(yè)查看url變化規(guī)律:

第一頁(yè):https://movie.douban.com/top250?start=0&filter=
第二頁(yè):https://movie.douban.com/top250?start=25&filter=
第三頁(yè):https://movie.douban.com/top250?start=50&filter=
第十頁(yè):https://movie.douban.com/top250?start=225&filter=

分析可得頁(yè)面url的規(guī)律:

url_list = [“https://movie.douban.com/top250?start={}&filter=”.format(x * 25) for x in range(10)]

對(duì)網(wǎng)頁(yè)進(jìn)行分析,如圖 4所示,每個(gè)li標(biāo)簽里都包含每個(gè)電影的基本信息,例如:“排名”, “電影名”, "導(dǎo)演和主演"等等。將這些信息追加到列表中,保存到movie.xlsx文件中。

3.2 數(shù)據(jù)可視化設(shè)計(jì)

將爬取的數(shù)據(jù)用多種圖表的顯示。例如:條形圖,餅圖,散點(diǎn)圖,箱線圖,玫瑰圖,詞云等形式。利用python的pandas模塊將數(shù)據(jù)文件讀入。導(dǎo)入matplotlib, pyecharts等模塊,調(diào)用模塊畫(huà)圖的相應(yīng)函數(shù)。進(jìn)行數(shù)據(jù)可視化,并將可視化結(jié)果保存為圖片。

4方案實(shí)施

4.1網(wǎng)絡(luò)爬蟲(chóng)代碼

import pandas as pd
import requests
from bs4 import BeautifulSoup
import time
import re
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import lxml
import openpyxl
import codecs
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3"
}
url1 = "https://data.stats.gov.cn/easyquery.htm?cn=E0105"
url2 = "http://data.stats.gov.cn"
'''爬取近五年主要城市數(shù)據(jù)'''
def driver1(url1):
    driver = webdriver.Chrome()
    driver.get(url1)
    time.sleep(3)
    xRdata = '//*[@id="details-button"]'  # 點(diǎn)擊高級(jí)
    ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
    xRdata = '//*[@id="proceed-link"]'  # 點(diǎn)擊
    ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
    time.sleep(3)
    time.sleep(4)  # 加載頁(yè)面,停留時(shí)間長(zhǎng)一些
    xTable = '//*[@class="table-container"]/div/div[3]/table/tbody'  # 主要城市年度數(shù)據(jù)表
    table = driver.find_element_by_xpath(xTable).get_attribute('innerHTML')
    soup = BeautifulSoup(table, 'html.parser')  # 解析表單
    tb = soup.find_all('tr')  # 查找表內(nèi)tr標(biāo)簽
    tb_p = []  # 各城市名字
    tb_ = []
    tb_1 = [[], [], [], [], []]
    for row in tb:
        row_text = row.text
        # 查找第一個(gè)數(shù)字的索引
        ret1 = re.search('\d', row_text).start()
        # 將各個(gè)城市寫(xiě)入列表中
        tb_p.append(row_text[:ret1])
        # 截?cái)嘀恋谝粋€(gè)數(shù)字
        row_text = row_text[ret1:]
        for i in range(5):
            try:
                # 順序查找點(diǎn)
                ret = row_text.find('.')
                # 將第一年年數(shù)據(jù)保存到列表中
                tb_.append(row_text[:ret + 3])
                # 刪去第一年的數(shù)據(jù)
                row_text = row_text[ret + 3:]
            except:
                break
    for i in range(5):
        for j in range(i, len(tb_), 5):
            try:
                tb_1[i].append(tb_[j])
            except:
                break
    data = {'地區(qū)': tb_p,
            '2019年': tb_1[0],
            '2018年': tb_1[1],
            '2017年': tb_1[2],
            '2016年': tb_1[3],
            '2015年': tb_1[4],
            }
    dataframe = pd.DataFrame(data)
    dataframe.to_csv('City_data.csv', index=False, sep=',', encoding='utf-8-sig')
    driver.close()
'''爬取2019年各省GDP'''
def driver2(url2):
    driver = webdriver.Chrome()
    driver.get(url2)
    time.sleep(3)
    xRdata = '//*[@id="details-button"]'  # 點(diǎn)擊高級(jí)
    ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
    xRdata = '//*[@id="proceed-link"]'  # 點(diǎn)擊
    ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
    time.sleep(3)
    xRdata = '//*[@id="nav"]/ul/li[6]/a'  # 地區(qū)數(shù)據(jù)
    ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
    time.sleep(3)
    xPdata = '//*[@id="menuE01"]/li[3]/a'  # 分省年度數(shù)據(jù)
    ActionChains(driver).click(driver.find_element_by_xpath(xPdata)).perform()
    time.sleep(4)  # 加載頁(yè)面,停留時(shí)間長(zhǎng)一些
    xTable = '//*[@class="table-container"]/div/div[3]/table/tbody'  # 數(shù)據(jù)表
    table = driver.find_element_by_xpath(xTable).get_attribute('innerHTML')
    soup = BeautifulSoup(table, 'html.parser')  # 解析表單
    tb = soup.find_all('tr')  # 查找表內(nèi)tr標(biāo)簽
    tb_p = []  # 各省市名字
    tb_ = []
    tb_1 = [[], [], [], [], [], [], [], [], [], []]
    for row in tb:
        row_text = row.text
        # 查找第一個(gè)數(shù)字的索引
        ret1 = re.search('\d', row_text).start()
        # 將各個(gè)省份寫(xiě)入列表中
        tb_p.append(row_text[:ret1])
        # 截?cái)嘀恋谝粋€(gè)數(shù)字
        row_text = row_text[ret1:]
        for i in range(1):
            try:
                # 順序查找點(diǎn)
                ret = row_text.find('.')
                # 將第一年年數(shù)據(jù)保存到列表中
                tb_.append(row_text[:ret + 3])
                # 刪去第一年的數(shù)據(jù)
                row_text = row_text[ret + 3:]
            except:
                break
    for i in range(1):
        for j in range(i, len(tb_), 1):
            try:
                tb_1[i].append(tb_[j])
            except:
                break
    data = {'Province': tb_p,
            'GDP': tb_1[0],
            }
    dataframe = pd.DataFrame(data)
    dataframe.to_csv('2019_Province_GDP.csv', index=False, sep=',', encoding='utf-8-sig')
    driver.close()
'''爬取豆瓣電影Top250'''
wb = openpyxl.Workbook()    # 創(chuàng)建工作簿對(duì)象
sheet = wb.active           # 獲取工作簿的活動(dòng)表
sheet.title = "movie"       # 工作簿重命名
sheet.append(["排名", "電影名", "導(dǎo)演和主演", "上映時(shí)間", "上映地區(qū)", "電影類(lèi)型", "評(píng)分", "評(píng)價(jià)人數(shù)", "引言"])
def get_movie(urls):
    rank = 1
    for url in urls:
        res = requests.get(url, headers=headers).text
        html = lxml.etree.HTML(res)
        # 先xpath定位提取到每個(gè)頁(yè)面的所有l(wèi)i標(biāo)簽
        lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
        # 每個(gè)li標(biāo)簽里有每部電影的基本信息
        for li in lis:
            name = li.xpath('.//div[@class="hd"]/a/span[1]/text()')[0]
            director_actor = li.xpath('.//div[@class="bd"]/p/text()')[0].strip()
            info = li.xpath('.//div[@class="bd"]/p/text()')[1].strip()
            # 按"/"切割成列表
            _info = info.split("/")
            # 得到 上映時(shí)間  上映地區(qū)  電影類(lèi)型信息   去除兩端多余空格
            time, area, genres = _info[0].strip(), _info[1].strip(), _info[2].strip()
            # print(time, area, genres)
            rating_score = li.xpath('.//div[@class="star"]/span[2]/text()')[0]
            rating_num = li.xpath('.//div[@class="star"]/span[4]/text()')[0]
            quote = li.xpath('.//p[@class="quote"]/span/text()')
            # 最后一頁(yè)有部電影  九品芝麻官  沒(méi)有一句話引言  加條件判斷  防止報(bào)錯(cuò)
            if len(quote) == 0:
                quote = None
            else:
                quote = quote[0]
            sheet.append([rank, name, director_actor, time, area, genres, rating_score, rating_num, quote])
            rank += 1
    # 保存到文件
    wb.save("movie.xlsx")
'''豆瓣電影Top250'''
index_url = 'https://movie.douban.com/top250'
def get_html(url):
    html = requests.get(url, headers=headers).text
    return html
def create_list(html):
    soup = BeautifulSoup(html, 'lxml')
    movie_names = []
    movie_info = []
    for t in soup.find_all('div', 'hd'):
        name = t.find('span', 'title').get_text()
        movie_names.append(name)
    for t in soup.find_all('div', 'info'):
        info = t.find('p').get_text().replace(' ','')
        movie_info.append(info)
        next_page = soup.find('span', 'next').find('a')
    if next_page:
         return movie_names, movie_info, index_url + next_page['href']
    else:
         return movie_names, movie_info, None
def main():
    order = 1
    url = index_url
    with codecs.open('top250.txt', 'wb', encoding='utf-8') as f:
        while url:
            html = get_html(url)
            names, info, url = create_list(html)
            for n in range(25):
                f.write('Top ' + str(order) + ' ' + names[n] + '\r\n')
                f.write(info[n] + '\r\n')
                order = order+1
if __name__ == "__main__":
    # 列表推導(dǎo)式得到url列表  10頁(yè)的電影信息  Top250
    url_list = ["https://movie.douban.com/top250?start={}&filter=".format(i * 25) for i in range(10)]
    driver1(url1)
    driver2(url2)
    get_movie(url_list)
    main()

4.2 數(shù)據(jù)可視化代碼

import pandas as pd
import re
import matplotlib.pyplot as plt
import collections
import seaborn as sns
from stylecloud import gen_stylecloud
import jieba
import squarify
from pyecharts import Pie
sns.set() #恢復(fù)seaborn的默認(rèn)主題
# 中文亂碼和坐標(biāo)軸負(fù)號(hào)的處理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
'''條形圖'''
GDP = pd.read_csv('2019_Province_GDP.csv')
# 設(shè)置繪圖風(fēng)格
plt.style.use('ggplot')
# 繪制條形圖
plt.bar(x= range(GDP.shape[0]), # 指定條形圖x軸的刻度值
        height = GDP.GDP, # 指定條形圖y軸的數(shù)值
        tick_label = GDP.Province, # 指定條形圖x軸的刻度標(biāo)簽
        color = 'steelblue', # 指定條形圖的填充色
       )
# 添加y軸的標(biāo)簽
plt.ylabel('GDP(萬(wàn)億)')
# 添加條形圖的標(biāo)題
plt.title('2019年各省份GDP分布')
# 為每個(gè)條形圖添加數(shù)值標(biāo)簽
for x,y in enumerate(GDP.GDP):
    plt.text(x,y+0.1,'%s' %round(y,1),ha='center')
# 顯示圖形
plt.savefig('test1.png')
plt.show()
'''餅圖'''
# 構(gòu)造數(shù)據(jù)
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中專(zhuān)','大專(zhuān)','本科','碩士','其他']
explode = [0,0.1,0,0,0]  # 生成數(shù)據(jù),用于突出顯示大專(zhuān)學(xué)歷人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555']  # 自定義顏色
# 將橫、縱坐標(biāo)軸標(biāo)準(zhǔn)化處理,確保餅圖是一個(gè)正圓,否則為橢圓
plt.axes(aspect='equal')
# 繪制餅圖
plt.pie(x = edu, # 繪圖數(shù)據(jù)
        explode=explode, # 突出顯示大專(zhuān)人群
        labels=labels, # 添加教育水平標(biāo)簽
        colors=colors, # 設(shè)置餅圖的自定義填充色
        autopct='%.1f%%', # 設(shè)置百分比的格式,這里保留一位小數(shù)
        pctdistance=0.8,  # 設(shè)置百分比標(biāo)簽與圓心的距離
        labeldistance = 1.1, # 設(shè)置教育水平標(biāo)簽與圓心的距離
        startangle = 180, # 設(shè)置餅圖的初始角度
        radius = 1.2, # 設(shè)置餅圖的半徑
        counterclock = False, # 是否逆時(shí)針,這里設(shè)置為順時(shí)針?lè)较?
        wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 設(shè)置餅圖內(nèi)外邊界的屬性值
        textprops = {'fontsize':10, 'color':'black'}, # 設(shè)置文本標(biāo)簽的屬性值
        )
# 添加圖標(biāo)題
plt.title('失信用戶(hù)的受教育水平分布')
# 顯示圖形
plt.savefig('test2.png')
plt.show()
'''箱線圖'''
data=pd.read_csv('City_data.csv')
#箱線圖
data.boxplot()
plt.savefig('test3.png')
plt.show()
'''樹(shù)地圖'''
# 創(chuàng)建數(shù)據(jù)
name = ['國(guó)內(nèi)增值稅', '國(guó)內(nèi)消費(fèi)稅', '企業(yè)所得稅', '個(gè)人所得稅',
        '進(jìn)口增值稅、消費(fèi)稅', '出口退稅', '城市維護(hù)建設(shè)稅',
        '車(chē)輛購(gòu)置稅', '印花稅', '資源稅', '土地和房稅', '車(chē)船稅煙葉稅等']
income = [3908, 856, 801, 868, 1361, 1042, 320, 291, 175, 111, 414, 63]
# 繪圖
colors = ['steelblue', '#9999ff', 'red', 'indianred',
          'green', 'yellow', 'orange']
plot = squarify.plot(sizes=income,  # 指定繪圖數(shù)據(jù)
                     label=name,  # 指定標(biāo)簽
                     color=colors,  # 指定自定義顏色
                     alpha=0.6,  # 指定透明度
                     value=income,  # 添加數(shù)值標(biāo)簽
                     edgecolor='white',  # 設(shè)置邊界框?yàn)榘咨?
                     linewidth=3  # 設(shè)置邊框?qū)挾葹?
                     )
# 設(shè)置標(biāo)簽大小
plt.rc('font', size=8)
# 設(shè)置標(biāo)題大小
plot.set_title('2020年12月中央財(cái)政收支情況', fontdict={'fontsize': 15})
# 去除坐標(biāo)軸
plt.axis('off')
# 去除上邊框和右邊框刻度
plt.tick_params(top='off', right='off')
# 顯示圖形
plt.savefig('test4.png')
plt.show()
'''玫瑰圖'''
attr =["碳酸飲料", "其他", "綠茶", "礦泉水", "果汁"]
v1 =[6, 2, 7, 6,1]
v2 =[9, 6, 4, 4,5]
pie =Pie("玫瑰圖", title_pos='center', width=800)
pie.add("男", attr, v1, center=[25, 50], is_random=True, radius=[20, 50], rosetype='radius')
pie.add("女", attr, v2, center=[75, 50], is_random=True, radius=[20, 50], rosetype='area',
        is_legend_show=False, is_label_show=True)
pie.show_config()
pie.render('玫瑰圖.html')
# 讀取數(shù)據(jù)
df = pd.read_excel("movie.xlsx",engine='openpyxl')
# print(type(df))    # <class 'pandas.core.frame.DataFrame'>
'''上映高分電影數(shù)量最多的年份Top10'''
show_time = list(df["上映時(shí)間"])
# 有上映時(shí)間數(shù)據(jù)是1961(中國(guó)大陸)這樣的  處理一下  字符串切片
show_time = [s[:4] for s in show_time]
show_time_count = collections.Counter(show_time)
# 取數(shù)量最多的前10  得到一個(gè)列表  里面每個(gè)元素是元組
# (年份, 數(shù)量)
show_time_count = show_time_count.most_common(10)
# 字典推導(dǎo)式
show_time_dic = {k: v for k, v in show_time_count}
# 按年份排序
show_time = sorted(show_time_dic)
# 年份對(duì)應(yīng)高分電影數(shù)量
counts = [show_time_dic[k] for k in show_time]
plt.figure(figsize=(9, 6), dpi=100)
# 繪制條形圖
plt.bar(show_time, counts, width=0.5, color="cyan")
# y軸刻度重新設(shè)置一下
plt.yticks(range(0, 16, 2))
# 添加描述信息
plt.xlabel("年份")
plt.ylabel("高分電影數(shù)量")
plt.title("上映高分電影數(shù)量最多的年份Top10", fontsize=15)
# 添加網(wǎng)格  網(wǎng)格的透明度  線條樣式
plt.grid(alpha=0.2, linestyle=":")
plt.savefig('test5.png')
plt.show()
'''國(guó)家或地區(qū)上榜電影數(shù)量最多的Top10'''
area = list(df['上映地區(qū)'])
sum_area = []
for x in area:
    x = x.split(" ")
    for i in x:
        sum_area.append(i)
area_count = collections.Counter(sum_area)
area_dic = dict(area_count)
area_count = [(k, v) for k, v in list(area_dic.items())]
# 按國(guó)家或地區(qū)上榜電影數(shù)量排序
area_count.sort(key=lambda k: k[1])
# 取國(guó)家或地區(qū)上榜電影數(shù)量最多的前十
area = [m[0] for m in area_count[-10:]]
nums = [m[1] for m in area_count[-10:]]
plt.figure(figsize=(9, 6), dpi=100)
# 繪制橫著的條形圖
plt.barh(area, nums, color='red')
# 添加描述信息
plt.xlabel('電影數(shù)量')
plt.title('國(guó)家或地區(qū)上榜電影數(shù)量最多的Top10')
plt.savefig('test6.png')
plt.show()
'''豆瓣電影Top250-評(píng)價(jià)人數(shù)Top10'''
name = list(df['電影名'])
ranting_num = list(df['評(píng)價(jià)人數(shù)'])
# (電影名, 評(píng)價(jià)人數(shù))
info = [(m, int(n.split('人')[0])) for m, n in list(zip(name, ranting_num))]
# 按評(píng)價(jià)人數(shù)排序
info.sort(key=lambda x: x[1])
# print(info)
name = [x[0] for x in info[-10:]]
ranting_num = [x[1] for x in info[-10:]]
plt.figure(figsize=(12, 6), dpi=100)
# 繪制橫著的條形圖
plt.barh(name, ranting_num, color='cyan', height=0.4)
# 添加描述信息
plt.xlabel('評(píng)價(jià)人數(shù)')
plt.title('豆瓣電影Top250-評(píng)價(jià)人數(shù)Top10')
plt.savefig('test7.png')
plt.show()
'''豆瓣電影Top250評(píng)分-排名的散點(diǎn)分布'''
# 豆瓣電影Top250  排名  評(píng)分  散點(diǎn)圖   描述關(guān)系
rating = list(df["排名"])
rating_score = list(df["評(píng)分"])
plt.figure(figsize=(9, 6), dpi=100)
# 繪制散點(diǎn)圖  設(shè)置點(diǎn)的顏色
plt.scatter(rating_score, rating, c='r')
# 添加描述信息  設(shè)置字體大小
plt.xlabel("評(píng)分", fontsize=12)
plt.ylabel("排名", fontsize=12)
plt.title("豆瓣電影Top250評(píng)分-排名的散點(diǎn)分布", fontsize=15)
# 添加網(wǎng)格  網(wǎng)格的透明度  線條樣式
plt.grid(alpha=0.5, linestyle=":")
plt.savefig('test8.png')
plt.show()
'''豆瓣電影Top250詞云'''
# 讀取數(shù)據(jù)
with open('top250.txt', encoding='utf-8') as f:
    data = f.read()
# 文本預(yù)處理  去除一些無(wú)用的字符   只提取出中文出來(lái)
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
new_data = " ".join(new_data)
# 文本分詞
seg_list_exact = jieba.cut(new_data, cut_all=False)
result_list = []
with open('top250.txt', encoding='utf-8') as f:
    con = f.readlines()
    stop_words = set()
    for i in con:
        i = i.replace("\n", "")   # 去掉讀取每一行數(shù)據(jù)的\n
        stop_words.add(i)
for word in seg_list_exact:
    # 設(shè)置停用詞并去除單個(gè)詞
    if word not in stop_words and len(word) > 1:
        result_list.append(word)
print(result_list)
gen_stylecloud(
    text=' '.join(result_list),
    size=500,
    collocations=False,
    font_path=r'C:\Windows\Fonts\msyh.ttc',
    output_name='test9.png',
    icon_name='fas fa-video',
    palette='colorbrewer.qualitative.Dark2_7'
)

5 效果展示

5.1 網(wǎng)絡(luò)爬蟲(chóng)

5.1.1 爬取近五年主要城市數(shù)據(jù)

表 3 City_data.csv部分?jǐn)?shù)據(jù)

5.1.2 爬取2019年各省GDP

Province GDP
北京市 35371.28
天津市 14104.28
河北省 35104.52
山西省 17026.68
內(nèi)蒙古自治區(qū) 17212.53
遼寧省 24909.45
吉林省 11726.82
黑龍江省 13612.68
上海市 38155.32
表 4 2019_Province_GDP.csv部分?jǐn)?shù)據(jù)

5.1.3 爬取豆瓣電影Top250

在這里插入圖片描述

圖5

5.2 數(shù)據(jù)可視化

5.2.1條形圖

2019年各省GDP,這個(gè)條形圖效果不是很好,可以對(duì)數(shù)據(jù)處理一下,可以一個(gè)圖里面少點(diǎn)省份。

圖 6 test1.png

通過(guò)減少圖中數(shù)據(jù),下面這幾個(gè)條形圖效果較好。

圖 7 test5.png

圖 8 test6.png

圖 9 test7.png

5.2.2 散點(diǎn)圖

豆瓣電影Top250散點(diǎn)分別,可以更直觀的看到不同評(píng)分所處的排名。

圖 10 test8.png

5.2.3 餅圖

圖 11 test2.png

5.2.4 箱線圖

圖 12 test3.png

5.2.5 樹(shù)地圖

圖 13 test4.png

5.2.6 玫瑰圖

圖 14 玫瑰圖.html

5.2.7 詞云

圖 15 test9.png

6 總結(jié)

通過(guò)對(duì)Python爬蟲(chóng)以及數(shù)據(jù)可視化的學(xué)習(xí),在這過(guò)程中查閱了許多的資料。主要實(shí)現(xiàn)了爬取2019年各省數(shù)據(jù)和主要城市近五年,還有豆瓣電影top250,用圖表等可視化方式更直觀的看數(shù)據(jù)。對(duì)Python常用模塊和函數(shù)的使用方法有了進(jìn)一步的了解。
由于時(shí)間有限,項(xiàng)目還有許多不足,對(duì)于爬取的同一個(gè)網(wǎng)站不同頁(yè)面。爬取的代碼部分有重復(fù),代碼就有點(diǎn)長(zhǎng)。代碼質(zhì)量不高。有的對(duì)數(shù)據(jù)沒(méi)有處理,直接拿過(guò)來(lái)用。第一個(gè)條形圖看起來(lái)效果很差,不能很好的展現(xiàn)數(shù)據(jù)信息。仍需繼續(xù)改進(jìn)。

7參考文獻(xiàn)

[1]楊露,葛文謙. 基于Python的制造業(yè)數(shù)據(jù)分析可視化平臺(tái)設(shè)計(jì)[J]. 《信息化研究》,2018年10月第44卷第5期.
[2]左薇,張熹,董紅娟. 主題網(wǎng)絡(luò)爬蟲(chóng)研究綜述[J]. 《軟件導(dǎo)刊》,2020年2月第19卷第2期.
[3]孫遠(yuǎn)波,聞芷藝,徐瑞格. 新型冠狀病毒肺炎疫情數(shù)據(jù)可視化設(shè)計(jì)綜述 [J]. 《包裝工程》,2020年4月第41卷第8期.
[4]董付國(guó),Python程序設(shè)計(jì)基礎(chǔ)(第2版).清華大學(xué)出版社,2018.

以上就是python教程網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化原理解析的詳細(xì)內(nèi)容,更多關(guān)于python網(wǎng)絡(luò)爬蟲(chóng)及數(shù)據(jù)可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)重建二叉樹(shù)的三種方法詳解

    Python實(shí)現(xiàn)重建二叉樹(shù)的三種方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)重建二叉樹(shù)的三種方法,結(jié)合實(shí)例形式分析了Python重建二叉樹(shù)的實(shí)現(xiàn)方法、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • Python編程快速上手——選擇性拷貝操作案例分析

    Python編程快速上手——選擇性拷貝操作案例分析

    這篇文章主要介紹了Python選擇性拷貝操作,結(jié)合具體實(shí)例形式分析了Python文件遍歷、查找、復(fù)制拷貝等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • Python批量查詢(xún)關(guān)鍵詞微信指數(shù)實(shí)例方法

    Python批量查詢(xún)關(guān)鍵詞微信指數(shù)實(shí)例方法

    在本篇文章中小編給大家整理的是關(guān)于Python批量查詢(xún)關(guān)鍵詞微信指數(shù)實(shí)例方法以及相關(guān)代碼,需要的朋友們可以跟著學(xué)習(xí)下。
    2019-06-06
  • 想學(xué)python 這5本書(shū)籍你必看!

    想學(xué)python 這5本書(shū)籍你必看!

    想學(xué)python,這5本書(shū)籍你必看!本文為大家推薦了學(xué)習(xí)python的5本書(shū)籍,5本經(jīng)典書(shū)籍,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作詳解

    Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作詳解

    最近用到了上采樣下采樣操作,pytorch中使用interpolate可以很輕松的完成,下面這篇文章主要給大家介紹了關(guān)于Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Python生成器與迭代器詳情

    Python生成器與迭代器詳情

    這篇文章主要介紹了Python生成器與迭代器,現(xiàn)在可以通過(guò)生成器來(lái)直接創(chuàng)建一個(gè)列表,是由于內(nèi)存的限制,表的容量肯定是有限的,果我們需要一個(gè)包含幾百個(gè)元素的列表,是每次訪問(wèn)的時(shí)候只訪問(wèn)其中的幾個(gè),剩下的元素不使用就很浪費(fèi)內(nèi)存空間,下面來(lái)了解具體內(nèi)容
    2021-11-11
  • Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法

    Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法

    這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)檢測(cè)IP的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作詞袋模型

    Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作詞袋模型

    本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,帶大家開(kāi)啟一段學(xué)習(xí)自然語(yǔ)言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語(yǔ)言處理基本操作之詞袋模型
    2021-09-09
  • Python中docx2txt庫(kù)的使用說(shuō)明

    Python中docx2txt庫(kù)的使用說(shuō)明

    這篇文章主要介紹了Python中docx2txt庫(kù)的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 如何查看Mac本機(jī)的Python3安裝路徑

    如何查看Mac本機(jī)的Python3安裝路徑

    這篇文章主要介紹了如何查看Mac本機(jī)的Python3安裝路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論