人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2021-12-18 01:46 | 文章來源:腳本之家

1 項目背景

1.1Python的優(yōu)勢

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

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

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

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

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

1.4Python環(huán)境介紹

1.4.1簡介

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

1.4.2特點

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

1.5擴(kuò)展庫介紹

1.5.1安裝模塊

1.5.2主要模塊介紹

pandas模塊

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

requests模塊

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

bs4模塊

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

selenium模塊

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

matplotlib模塊

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

seaborn模塊

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

pyecharts模塊

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

2需求分析

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

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

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

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

3總體設(shè)計

3.1 網(wǎng)頁分析

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

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

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

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

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

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

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

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

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

4方案實施

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

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"]'  # 點擊高級
 ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
 xRdata = '//*[@id="proceed-link"]'  # 點擊
 ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
 time.sleep(3)
 time.sleep(4)  # 加載頁面,停留時間長一些
 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
  # 查找第一個數(shù)字的索引
  ret1 = re.search('\d', row_text).start()
  # 將各個城市寫入列表中
  tb_p.append(row_text[:ret1])
  # 截斷至第一個數(shù)字
  row_text = row_text[ret1:]
  for i in range(5):
try:
 # 順序查找點
 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"]'  # 點擊高級
 ActionChains(driver).click(driver.find_element_by_xpath(xRdata)).perform()
 xRdata = '//*[@id="proceed-link"]'  # 點擊
 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)  # 加載頁面,停留時間長一些
 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
  # 查找第一個數(shù)字的索引
  ret1 = re.search('\d', row_text).start()
  # 將各個省份寫入列表中
  tb_p.append(row_text[:ret1])
  # 截斷至第一個數(shù)字
  row_text = row_text[ret1:]
  for i in range(1):
try:
 # 順序查找點
 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)建工作簿對象
sheet = wb.active  # 獲取工作簿的活動表
sheet.title = "movie" # 工作簿重命名
sheet.append(["排名", "電影名", "導(dǎo)演和主演", "上映時間", "上映地區(qū)", "電影類型", "評分", "評價人數(shù)", "引言"])
def get_movie(urls):
 rank = 1
 for url in urls:
  res = requests.get(url, headers=headers).text
  html = lxml.etree.HTML(res)
  # 先xpath定位提取到每個頁面的所有l(wèi)i標(biāo)簽
  lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
  # 每個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("/")
# 得到 上映時間  上映地區(qū)  電影類型信息去除兩端多余空格
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()')
# 最后一頁有部電影  九品芝麻官  沒有一句話引言  加條件判斷  防止報錯
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頁的電影信息  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ù)號的處理
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(萬億)')
# 添加條形圖的標(biāo)題
plt.title('2019年各省份GDP分布')
# 為每個條形圖添加數(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 = ['中專','大專','本科','碩士','其他']
explode = [0,0.1,0,0,0]  # 生成數(shù)據(jù),用于突出顯示大專學(xué)歷人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555']  # 自定義顏色
# 將橫、縱坐標(biāo)軸標(biāo)準(zhǔn)化處理,確保餅圖是一個正圓,否則為橢圓
plt.axes(aspect='equal')
# 繪制餅圖
plt.pie(x = edu, # 繪圖數(shù)據(jù)
  explode=explode, # 突出顯示大專人群
  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è)置為順時針方向
  wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 設(shè)置餅圖內(nèi)外邊界的屬性值
  textprops = {'fontsize':10, 'color':'black'}, # 設(shè)置文本標(biāo)簽的屬性值
  )
# 添加圖標(biāo)題
plt.title('失信用戶的受教育水平分布')
# 顯示圖形
plt.savefig('test2.png')
plt.show()
'''箱線圖'''
data=pd.read_csv('City_data.csv')
#箱線圖
data.boxplot()
plt.savefig('test3.png')
plt.show()
'''樹地圖'''
# 創(chuàng)建數(shù)據(jù)
name = ['國內(nèi)增值稅', '國內(nèi)消費(fèi)稅', '企業(yè)所得稅', '個人所得稅',
  '進(jìn)口增值稅、消費(fèi)稅', '出口退稅', '城市維護(hù)建設(shè)稅',
  '車輛購置稅', '印花稅', '資源稅', '土地和房稅', '車船稅煙葉稅等']
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è)置邊界框為白色
linewidth=3  # 設(shè)置邊框?qū)挾葹?
)
# 設(shè)置標(biāo)簽大小
plt.rc('font', size=8)
# 設(shè)置標(biāo)題大小
plot.set_title('2020年12月中央財政收支情況', 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ù)據(jù)是1961(中國大陸)這樣的  處理一下  字符串切片
show_time = [s[:4] for s in show_time]
show_time_count = collections.Counter(show_time)
# 取數(shù)量最多的前10  得到一個列表  里面每個元素是元組
# (年份, 數(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)
# 年份對應(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()
'''國家或地區(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())]
# 按國家或地區(qū)上榜電影數(shù)量排序
area_count.sort(key=lambda k: k[1])
# 取國家或地區(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('國家或地區(qū)上榜電影數(shù)量最多的Top10')
plt.savefig('test6.png')
plt.show()
'''豆瓣電影Top250-評價人數(shù)Top10'''
name = list(df['電影名'])
ranting_num = list(df['評價人數(shù)'])
# (電影名, 評價人數(shù))
info = [(m, int(n.split('人')[0])) for m, n in list(zip(name, ranting_num))]
# 按評價人數(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('評價人數(shù)')
plt.title('豆瓣電影Top250-評價人數(shù)Top10')
plt.savefig('test7.png')
plt.show()
'''豆瓣電影Top250評分-排名的散點分布'''
# 豆瓣電影Top250  排名  評分  散點圖描述關(guān)系
rating = list(df["排名"])
rating_score = list(df["評分"])
plt.figure(figsize=(9, 6), dpi=100)
# 繪制散點圖  設(shè)置點的顏色
plt.scatter(rating_score, rating, c='r')
# 添加描述信息  設(shè)置字體大小
plt.xlabel("評分", fontsize=12)
plt.ylabel("排名", fontsize=12)
plt.title("豆瓣電影Top250評分-排名的散點分布", 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ù)處理  去除一些無用的字符只提取出中文出來
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è)置停用詞并去除單個詞
 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ò)爬蟲

5.1.1 爬取近五年主要城市數(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.2 數(shù)據(jù)可視化

5.2.1條形圖

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

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

5.2.2 散點圖

豆瓣電影Top250散點分別,可以更直觀的看到不同評分所處的排名。

5.2.3 餅圖

5.2.4 箱線圖

5.2.5 樹地圖

5.2.6 玫瑰圖

5.2.7 詞云

6 總結(jié)

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

7參考文獻(xiàn)

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

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

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部