日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【毕业设计】大数据电影数据分析可视化系统 - python 爬虫

發布時間:2023/12/14 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【毕业设计】大数据电影数据分析可视化系统 - python 爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 0 前言
  • 1 課題背景
  • 2 項目效果展示
    • 2.1 主界面展示
    • 2.2電影數據查詢
    • 2.3可視化展示
  • 3 數據爬取
    • 3.1 Requests
    • 3.2 bs4
    • 3.3 MySQL數據庫
  • 4 可視化技術
    • 4.1 Flask
    • 4.2 ECharts
    • 4.3 補充:不做成web系統
  • 5 最后


0 前言

🔥 Hi,大家好,這里是丹成學長的畢設系列文章!

🔥 對畢設有任何疑問都可以問學長哦!

這兩年開始,各個學校對畢設的要求越來越高,難度也越來越大… 畢業設計耗費時間,耗費精力,甚至有些題目即使是專業的老師或者碩士生也需要很長時間,所以一旦發現問題,一定要提前準備,避免到后面措手不及,草草了事。

為了大家能夠順利以及最少的精力通過畢設,學長分享優質畢業設計項目,今天要分享的新項目是

🚩 基于大數據的電影數據爬取分析可視化系統

🥇學長這里給一個題目綜合評分(每項滿分5分)

  • 難度系數:4分
  • 工作量:4分
  • 創新點:3分

🧿 選題指導, 項目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md



1 課題背景

隨著互聯網的快速發展,越來越多的人喜歡在微博、知乎、豆瓣等社交網站上發表自己對某些事物的想法、態度或意見。用戶同時也會將自己購買的產品或體驗到的服務,在這些社區式的網站上評價,這樣通常會帶動他人也前去購買或體驗,形成口碑效應。

社交應用及網站上有源源不斷的信息發布,這些信息中隱含著大量對我們及企業有收集價值的資源。就像用戶評分和評價系統中,用戶不但會對作品進行評比,還分享和傳播了作品信息。如果能夠獲取這些數據并對其進行分析,可以讓人們挑選到滿意的書籍、選擇出一部精彩的電影,也可以幫助企業改進產品的服務等。使用爬蟲程序可以高效地對社交網站上的信息進行收集、組織和管理。豆瓣網作為社交網站的代表,提供了在圖書、電影和音樂等方面獨樹一幟的評分、推薦及比價體系,在社交網絡中產生了深遠的影響。


2 項目效果展示

2.1 主界面展示

2.2電影數據查詢

管理員可對電影數據進行查詢,可根據“最低評分”,“最高評分”,“上映年份”,“電影類型”,“上映地區”,“影名關鍵字”等標簽進行篩選、查詢。

2.3可視化展示

  • 電影類型矩形圖:可以清楚的看到劇情,紀錄片,喜劇類型的電影所占比重較大。

  • 上映年份漏斗圖:可以看到中國、美國上映地區較多。

  • 上映年份分布、電影評分分布圖。

  • 時間軸圖:可隨年份動態變化效果。

  • 地區類型分布餅狀圖

  • 頻數統計詞云圖:可根據主演、導演、編劇和電影排名生成相應的詞云圖

3 數據爬取

3.1 Requests

requests是Python用于網絡請求的第三庫,也是爬蟲獲取網絡數據的重要工具,使用的時候需要導入

本項目中相關代碼:

import requests from bs4 import BeautifulSoup from lxml import htmletree = html.etree import csv# 請求頭 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" } hrefs = []# 爬取豆瓣電影TOP250的url # 獲取電影詳情頁url def get_film_url(url):try:r = requests.get(url, headers=headers)selector = etree.HTML(r.text)movie_hrefs = selector.xpath('//div[@class="hd"]/a/@href') # 電影的詳情地址for i in range(0, len(movie_hrefs)):hrefs.append(movie_hrefs[i])except Exception as e:print(e)# 保存電影鏈接url def save_url():try:# 獲取鏈接for href in hrefs:# 存入csvfile_path = "./豆瓣電影TOP250鏈接.csv"with open(file_path, "a+", newline='', encoding='gb18030') as csvfile:writer = csv.writer(csvfile)writer.writerow([href])except Exception as e:print(e)def main():# 爬取豆瓣電影TOP250的urlfor i in range(0, 250, 25):url = "https://movie.douban.com/top250?start=" + str(i) + ""get_film_url(url)save_url()if __name__ == '__main__':main()

3.2 bs4

bs4即BeautifulSoup,是python種的一個庫,最主要的內容就是從網頁中抓取數據。

Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數據,因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。

Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。你不需要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。然后,你僅僅需要說明一下原始編碼方式就可以了。

Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。

3.3 MySQL數據庫

利用Pymysql,將爬取到的數據存入數據庫中,相關代碼如下:

# 打開數據庫連接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='douban', charset='utf8')# 使用cursor方法創建一個游標cursor = conn.cursor()# # 執行sql語句 # query = 'insert into tb_film(url, filmname, score, showtime, genres, areas, mins, directors, scriptwriters, actors, comments) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'query = 'insert into tb_film(url, filmname, score, showtime, genres, areas, directors, scriptwriters, actors, comments) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'values = (url, filmname, score, showtime, genres_list, area_list, directors_list, scriptwriters_list,actors_list,comment)cursor.execute(query, values)# 提交之前的操作,如果之前已經執行多次的execute,那么就都進行提交conn.commit()

4 可視化技術

4.1 Flask

Flask是一個基于Werkzeug和Jinja2的輕量級Web應用程序框架。與其他同類型框架相比,Flask的靈活性、輕便性和安全性更高,而且容易上手,它可以與MVC模式很好地結合進行開發。Flask也有強大的定制性,開發者可以依據實際需要增加相應的功能,在實現豐富的功能和擴展的同時能夠保證核心功能的簡單。Flask豐富的插件庫能夠讓用戶實現網站定制的個性化,從而開發出功能強大的網站。

本項目在Flask開發后端時,前端請求會遇到跨域的問題,解決該問題有修改數據類型為jsonp,采用GET方法,或者在Flask端加上響應頭等方式,在此使用安裝Flask-CORS庫的方式解決跨域問題。此外需要安裝請求庫axios。

部分相關代碼:

from flask import Flask from flask import request, redirect from flask import render_template, url_for from flask_paginate import Pagination from sqlalchemy import create_engine,Column,Integer,SmallInteger,String from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() from list_data import select_score, select_showtime, select_genres, select_areas, film_data from genres import show_genres from areas import show_areas from showtime import show_showtime from score import show_score from timeline_score import show_score_top from timeline_comment import show_comment_top from select_showtime import select_showtime from select_showtime import showtime_group from film_search import film_searchapp = Flask(__name__) app.jinja_env.auto_reload = True app.config['TEMPLATES_AUTO_RELOAD'] = True#初始化數據庫連接 engine = create_engine("mysql+pymysql://root:123456@localhost:3306/douban?charset=utf8",echo = True) #創建緩存對象 Session =sessionmaker(bind=engine) session =Session #聲明基類 Base = declarative_base() #定義Film對象 #基于這個基類來創建我們的自定義類,一個類就是一個數據庫表; class Film(Base):#表的名字__tablename__= 'tb_film'#表的結構id = Column(Integer,primary_key=True,autoincrement=True)url =Column(String(250))filmname =Column(String(50))score =Column(String)comments =Column(Integer)showtime =Column(Integer)genres =Column(String(20))areas =Column(String(20))actors =Column(String(50))directors =Column(String(50))scriptwriters =Column(String(50))@app.route('/') def index():# return render_template('pages/echarts/e1.html')# return render_template('index.html')return render_template('login.html')@app.route('/register') def register():# return render_template('pages/echarts/e1.html')# return render_template('index.html')return render_template('register.html')@app.route('/index') def welcom2index():# return render_template('pages/echarts/e1.html')return render_template('index.html')# return render_template('login.html')@app.route('/welcome') def welcome():print('done')return render_template('pages/welcome.html')@app.route("/page_none") def page_none():return render_template('page_none')# 驗證用戶名和密碼 @app.route('/login', methods=['POST']) #@app.route('/index') def login():print(request.form['username'])# 需要從request對象讀取表單內容:if request.form['username'] == 'admin' and request.form['password'] == '123456':return render_template('index.html')# 表單list @app.route("/list") @app.route("/list/") def list(limit=10):# 列表屬性t_low = select_score()[0]t_high = select_score()[1]t_showtime = select_showtime()t_genres = select_genres()t_areas = select_areas()# 分頁# limit = 15page = int(request.args.get("page", 1))start = (page - 1) * limitif request.args.get("low") or request.args.get("high") or request.args.get("showtime") or request.args.get("areas") or request.args.get("genres") or request.args.get("filmname"):# 參數選擇r_low = request.args.get("low")r_high = request.args.get("high")r_showtime = request.args.get("showtime")r_genres = request.args.get("genres")r_areas = request.args.get("areas")r_filmname = request.args.get("filmname")# 返回數據print("參數:{},{},{},{},{}".format(r_low, r_high, r_showtime, r_genres, r_areas,r_filmname))print("參數1:{}".format(type(r_low)))print("參數2:{}".format(len(r_low)))r_films = film_data(low=r_low, high=r_high, showtime=r_showtime, genres=r_genres, areas=r_areas, filmname=r_filmname)[0]r_row = film_data(low=r_low, high=r_high, showtime=r_showtime, genres=r_genres, areas=r_areas, filmname=r_filmname)[1]# 分頁r_end = page * limit if r_row > page * limit else r_rowr_paginate = Pagination(page=page, total=r_row)r_ret = r_films[start:r_end]return render_template('pages/order/list.html', low=t_low, high=t_high, showtime=t_showtime, genres=t_genres,areas=t_areas, films=r_ret, row=r_row,paginate=r_paginate)else:# 返回數據films = film_data()[0]row = film_data()[1]end = page * limit if row > page * limit else rowpaginate = Pagination(page=page, total=row)ret=films[start:end]print("res:{}".format(ret))return render_template('pages/order/list.html', low=t_low, high=t_high, showtime=t_showtime, genres=t_genres,areas=t_areas, films=ret,row=row, paginate=paginate)

4.2 ECharts

ECharts(Enterprise Charts)是百度開源的數據可視化工具,底層依賴輕量級Canvas庫ZRender。兼容了幾乎全部常用瀏覽器的特點,使它可廣泛用于PC客戶端和手機客戶端。ECharts能輔助開發者整合用戶數據,創新性的完成個性化設置可視化圖表。支持折線圖(區域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、K線圖、餅圖(環形圖)等,通過導入 js 庫在 Java Web 項目上運行。

數據預覽

import pandas as pd import json# =============================================加載數據===================================# 加載數據 --credits credits = pd.read_csv('./tmdb_5000_credits.csv') print('credits:\n', credits) print('*' * 100) print('credits:\n', credits.columns) print('*' * 100) print('credits:\n', credits.info()) print('*' * 100)# 加載數據 movies = pd.read_csv('./tmdb_5000_movies.csv') print('movies:\n', movies) print('#' * 100) print('movies:\n', movies.columns) print('#' * 100) print('movies:\n', movies.info()) print('#' * 100)

合并數據集

先將 credits 數據集和 movie 數據集中的數據合并在一起,再查看合并后的數據集信息

代碼實現:

# (1)合并數據 # print(credits['crew']) # credits 中存在 movie_id 和 title # movies 中存在 id 和 title # 將 credits 中的 movie_id 修改為 id credits.rename(columns={'movie_id': 'id'}, inplace=True) # print('credits的列索引:\n', credits.columns) # 主鍵合并 ---on id 和 title all_data = pd.merge(left=credits, right=movies, on=['id', 'title'], how='outer') print('all_data:\n', all_data) print('all_data:\n', all_data.columns) print('all_data:\n', all_data.dtypes)

選取子集

由于數據集中包含的信息過多,其中部分數據并不是我們研究的重點,所以從中選取我 們需要的數據:

代碼實現:

# 篩選特征 all_data = all_data['original_title', 'crew', 'release_date', 'genres', 'keywords','production_companies', 'production_countries', 'revenue','budget', 'runtime', 'vote_average'] print('all_data的列索引:\n', all_data.columns) print('all_data的形狀:\n', all_data.shape)

由于后面的數據分析涉及到電影類型的利潤計算,先求出每部電影的利潤,并在數據集 data 中增加 profit 數據列

代碼實現:

# 增加利潤 all_data['profit'] = all_data['revenue'] - all_data['budget'] print('all_data的列索引:\n', all_data) print('all_data的形狀:\n', all_data)

缺失值處理

代碼實現:

# 檢測缺失值 # pd.isnull + sum res_null = pd.isnull(all_data).sum() print('缺失值檢測結果:\n', res_null)# 檢測到 release_date 存在一個缺失值 ---針對方式:填充,查找具體的電影名稱,根據電影名稱查找上映時間 # a、確定bool數組 mask = all_data.loc[:, 'release_date'].isnull() # b、根據bool數組來獲取缺失值位置的電影名稱 movie_name = all_data.loc[mask, 'title'] print('缺失上映日期的電影名稱為:\n', movie_name) # 缺失上映日期的電影名稱為: # 4553 America Is Still the Place # Name: title, dtype: object# 通過上網查詢該電影的上映日期為:2014-06-01 # c 、 填充 all_data.loc[mask, 'release_date'] = '2014-06-01'# 將 release_date 轉化為 pandas支持的時間序列 all_data.loc[:, 'release_date'] = pd.to_datetime(all_data.loc[:, 'release_date'])# 獲取 發行年份 all_data.loc[:, 'release_year'] = all_data.loc[:, 'release_date'].dt.year

通過上面的結果信息可以知道:整個數據集缺失的數據比較少。 其中 release_date(首次上映日期)缺失 1 個數據,可以通過網上查詢補齊這個數據,填補 release_date(首次上映日期)數據

數據格式轉換

genres 列數據處理:

代碼實現:

# 查看電影風格數據 print('電影風格:\n', all_data.loc[:, 'genres']) # json數據類型# json.loads # 可以將json轉化為python類型 # 將 all_data.loc[:, 'genres'] 由 json類型轉化為 python類型 all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)# 構建所有的電影的類型 all_movie_type = set()# 定義一個函數,來提取電影類型 def get_movie_type(val):"""獲取電影類型:param val: 數據:return: 提取之后的電影類型數據"""# 構建一個空列表,用來存儲每一個電影的電影類型type_list = []# 遍歷 列表for item in val:# 如果item存在if item:# 獲取該電影的電影類型movie_type = item['name']# 將其加入到 type_listtype_list.append(movie_type)# 將其加入到 all_movie_typeall_movie_type.add(movie_type)return ','.join(type_list)# 調用 all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(get_movie_type)print('獲取電影類型之后的結果:\n', all_data.loc[:, 'genres'])# 將所有的電影類型轉化為 list all_movie_type = list(all_movie_type)# 遍歷 for column in all_movie_type:# 先增加all_data.loc[:, column] = 0# 構建bool數組mask = all_data.loc[:, 'genres'].str.contains(column)# 修改all_data.loc[mask, column] = 1print('all_data:\n', all_data)

數據可視化

繪制電影數據類型隨時間變化趨勢圖

import matplotlib.pyplot as plt# 創建畫布 plt.figure() # 默認不支持中文 ---修改RC參數 plt.rcParams['font.sans-serif'] = 'SimHei' # 增加字體之后變得不支持負號,需要修改RC參數讓其繼續支持負號 plt.rcParams['axes.unicode_minus'] = False # 構建橫軸數據 x = groupby_year.index for movie_type in groupby_year.columns:# 構建縱軸數據y = groupby_year[movie_type]# 繪制折線圖plt.plot(x, y) # 增加標題 plt.title('電影數據類型隨時間變化趨勢圖') # 設置圖例 plt.legend(groupby_year.columns, fontsize='x-small') # 設置縱軸名稱 plt.ylabel('數量') # 設置橫軸名稱 plt.xlabel('年份') # 增加網絡曲線 plt.grid(b=True, alpha=0.2) # 保存圖片 plt.savefig('./電影數據類型隨時間變化') # 展示 plt.show()


分析結論: 從圖中觀察到,隨著時間的推移,所有電影類型都呈現出增長趨勢,尤其是 1992 年以 后各個類型的電影均增長迅速,其中 Drama(戲劇)和 Comedy(喜劇)增長最快,目前仍是最熱 門的電影類型

繪制各種類型電影數量的統計柱狀圖

繪制各種電影類型的占比餅圖

電影類型平均利潤數據可視化

# 可視化 ---比 各種電影類型 的 平均利潤 ---柱狀圖 # Pyecharts # 實例化對象 bar = Bar(# 初始化配置init_opts=opts.InitOpts(width='900px',height='600px',theme="white") )# 添加數據 bar.add_xaxis(xaxis_data=res_series.index.tolist() )bar.add_yaxis(series_name=' ',yaxis_data=[float('%.2f' % i) for i in (res_series / 1000000)],color='#6495ED' )# 設置全局配置 bar.set_global_opts(# 標題title_opts=opts.TitleOpts(title='各種電影類型利潤統計柱狀圖',# subtitle='廣州分校Python0421班級'pos_left='center',pos_top='3%'),# 圖例legend_opts=opts.LegendOpts(is_show=False,),# 橫軸坐標設置xaxis_opts=opts.AxisOpts(name='利潤(百萬)'),# # 坐標系設置yaxis_opts=opts.AxisOpts(name='電影類型') )# 設置系列配置 bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right',color='#000000',formatter='{c}') ) # 反轉坐標軸 bar.reversal_axis()# 生成文件 bar.render('./各種電影類型利潤統計柱狀圖.html')

分析結論:

從圖中觀察到,拍攝 Animation、Adventure、Fantasy 這三類電影盈利最好,而拍攝 Foreign、TV Movie 這兩類電影會存在虧本的風險

4.3 補充:不做成web系統

** 數據預覽**

import pandas as pd import json# =============================================加載數據===================================# 加載數據 --credits credits = pd.read_csv('./tmdb_5000_credits.csv') print('credits:\n', credits) print('*' * 100) print('credits:\n', credits.columns) print('*' * 100) print('credits:\n', credits.info()) print('*' * 100)# 加載數據 movies = pd.read_csv('./tmdb_5000_movies.csv') print('movies:\n', movies) print('#' * 100) print('movies:\n', movies.columns) print('#' * 100) print('movies:\n', movies.info()) print('#' * 100)

合并數據集

先將 credits 數據集和 movie 數據集中的數據合并在一起,再查看合并后的數據集信息

代碼實現:

# (1)合并數據 # print(credits['crew']) # credits 中存在 movie_id 和 title # movies 中存在 id 和 title # 將 credits 中的 movie_id 修改為 id credits.rename(columns={'movie_id': 'id'}, inplace=True) # print('credits的列索引:\n', credits.columns) # 主鍵合并 ---on id 和 title all_data = pd.merge(left=credits, right=movies, on=['id', 'title'], how='outer') print('all_data:\n', all_data) print('all_data:\n', all_data.columns) print('all_data:\n', all_data.dtypes)

選取子集

由于數據集中包含的信息過多,其中部分數據并不是我們研究的重點,所以從中選取我 們需要的數據:

代碼實現:

# 篩選特征 all_data = all_data['original_title', 'crew', 'release_date', 'genres', 'keywords','production_companies', 'production_countries', 'revenue','budget', 'runtime', 'vote_average'] print('all_data的列索引:\n', all_data.columns) print('all_data的形狀:\n', all_data.shape)

由于后面的數據分析涉及到電影類型的利潤計算,先求出每部電影的利潤,并在數據集 data 中增加 profit 數據列

代碼實現:

# 增加利潤 all_data['profit'] = all_data['revenue'] - all_data['budget'] print('all_data的列索引:\n', all_data) print('all_data的形狀:\n', all_data)

缺失值處理

代碼實現:

# 檢測缺失值 # pd.isnull + sum res_null = pd.isnull(all_data).sum() print('缺失值檢測結果:\n', res_null)# 檢測到 release_date 存在一個缺失值 ---針對方式:填充,查找具體的電影名稱,根據電影名稱查找上映時間 # a、確定bool數組 mask = all_data.loc[:, 'release_date'].isnull() # b、根據bool數組來獲取缺失值位置的電影名稱 movie_name = all_data.loc[mask, 'title'] print('缺失上映日期的電影名稱為:\n', movie_name) # 缺失上映日期的電影名稱為: # 4553 America Is Still the Place # Name: title, dtype: object# 通過上網查詢該電影的上映日期為:2014-06-01 # c 、 填充 all_data.loc[mask, 'release_date'] = '2014-06-01'# 將 release_date 轉化為 pandas支持的時間序列 all_data.loc[:, 'release_date'] = pd.to_datetime(all_data.loc[:, 'release_date'])# 獲取 發行年份 all_data.loc[:, 'release_year'] = all_data.loc[:, 'release_date'].dt.year

通過上面的結果信息可以知道:整個數據集缺失的數據比較少。 其中 release_date(首次上映日期)缺失 1 個數據,可以通過網上查詢補齊這個數據,填補 release_date(首次上映日期)數據

數據格式轉換

genres 列數據處理:

代碼實現:

# 查看電影風格數據 print('電影風格:\n', all_data.loc[:, 'genres']) # json數據類型# json.loads # 可以將json轉化為python類型 # 將 all_data.loc[:, 'genres'] 由 json類型轉化為 python類型 all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)# 構建所有的電影的類型 all_movie_type = set()# 定義一個函數,來提取電影類型 def get_movie_type(val):"""獲取電影類型:param val: 數據:return: 提取之后的電影類型數據"""# 構建一個空列表,用來存儲每一個電影的電影類型type_list = []# 遍歷 列表for item in val:# 如果item存在if item:# 獲取該電影的電影類型movie_type = item['name']# 將其加入到 type_listtype_list.append(movie_type)# 將其加入到 all_movie_typeall_movie_type.add(movie_type)return ','.join(type_list)# 調用 all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(get_movie_type)print('獲取電影類型之后的結果:\n', all_data.loc[:, 'genres'])# 將所有的電影類型轉化為 list all_movie_type = list(all_movie_type)# 遍歷 for column in all_movie_type:# 先增加all_data.loc[:, column] = 0# 構建bool數組mask = all_data.loc[:, 'genres'].str.contains(column)# 修改all_data.loc[mask, column] = 1print('all_data:\n', all_data)

數據可視化

繪制電影數據類型隨時間變化趨勢圖

import matplotlib.pyplot as plt# 創建畫布 plt.figure() # 默認不支持中文 ---修改RC參數 plt.rcParams['font.sans-serif'] = 'SimHei' # 增加字體之后變得不支持負號,需要修改RC參數讓其繼續支持負號 plt.rcParams['axes.unicode_minus'] = False # 構建橫軸數據 x = groupby_year.index for movie_type in groupby_year.columns:# 構建縱軸數據y = groupby_year[movie_type]# 繪制折線圖plt.plot(x, y) # 增加標題 plt.title('電影數據類型隨時間變化趨勢圖') # 設置圖例 plt.legend(groupby_year.columns, fontsize='x-small') # 設置縱軸名稱 plt.ylabel('數量') # 設置橫軸名稱 plt.xlabel('年份') # 增加網絡曲線 plt.grid(b=True, alpha=0.2) # 保存圖片 plt.savefig('./電影數據類型隨時間變化') # 展示 plt.show()


分析結論: 從圖中觀察到,隨著時間的推移,所有電影類型都呈現出增長趨勢,尤其是 1992 年以 后各個類型的電影均增長迅速,其中 Drama(戲劇)和 Comedy(喜劇)增長最快,目前仍是最熱 門的電影類型

繪制各種類型電影數量的統計柱狀圖

繪制各種電影類型的占比餅圖

電影類型平均利潤數據可視化

# 可視化 ---比 各種電影類型 的 平均利潤 ---柱狀圖 # Pyecharts # 實例化對象 bar = Bar(# 初始化配置init_opts=opts.InitOpts(width='900px',height='600px',theme="white") )# 添加數據 bar.add_xaxis(xaxis_data=res_series.index.tolist() )bar.add_yaxis(series_name=' ',yaxis_data=[float('%.2f' % i) for i in (res_series / 1000000)],color='#6495ED' )# 設置全局配置 bar.set_global_opts(# 標題title_opts=opts.TitleOpts(title='各種電影類型利潤統計柱狀圖',# subtitle='廣州分校Python0421班級'pos_left='center',pos_top='3%'),# 圖例legend_opts=opts.LegendOpts(is_show=False,),# 橫軸坐標設置xaxis_opts=opts.AxisOpts(name='利潤(百萬)'),# # 坐標系設置yaxis_opts=opts.AxisOpts(name='電影類型') )# 設置系列配置 bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right',color='#000000',formatter='{c}') ) # 反轉坐標軸 bar.reversal_axis()# 生成文件 bar.render('./各種電影類型利潤統計柱狀圖.html')

5 最后

總結

以上是生活随笔為你收集整理的【毕业设计】大数据电影数据分析可视化系统 - python 爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。