大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...
壹
貓眼Top100電影數(shù)據(jù)分析概述
從這一節(jié)開始,我們就綜合利用已學(xué)到的一些分析技術(shù)來嘗試做一些比較復(fù)雜的實際數(shù)據(jù)分析項目。在這些實際的項目案例中,我們將會看到一個完整的數(shù)據(jù)分析流程:數(shù)據(jù)清理——數(shù)據(jù)分析——數(shù)據(jù)可視化(即數(shù)據(jù)解釋)。最終使得用戶能夠一眼看清楚一批復(fù)雜數(shù)據(jù)中所蘊含的知識。
本節(jié)所要講的一個案例是:對利用爬蟲手段從貓眼網(wǎng)站所爬下來的Top100的電影數(shù)據(jù)展開分析。在爬下來的電影數(shù)據(jù)集中,最重要的數(shù)據(jù)包括影片的主演、影片的上映時間、制作國、影評分等。
而我們想知道的是:在這批數(shù)據(jù)中,主要有哪些國家制作了這些膾炙人口的影片、最著名的演員都有哪些、不同的年份或不同的月份下影片的上映情況、不同影評分下的影片數(shù)量分布情況等信息。通過這些信息我們就知道,哪些國家發(fā)型的大片最多,哪些年份上映的好看影片最多,通常都會集中在哪些月份進行集中上映,同時我們還能知道最受觀眾喜愛的演員都有哪些。最后我們還能夠清楚地看到,在這100部影片中,大部分影片的一個打分情況。
現(xiàn)在,就讓我們來具體分析一下這批影片數(shù)據(jù)。關(guān)于影片數(shù)據(jù)集如何獲取的,大家可以利用我們所介紹過的爬蟲技術(shù)從貓眼網(wǎng)站進行爬取,這里就不再單獨介紹。
此外,我們在本項目中采用了百度開發(fā)出來的pyecharts庫來開展可視化操作,它在當(dāng)前項目中要比Matplotlib庫更加好用,尤其是在折線圖的展示上。
如果沒有安裝過這個可視化庫的,可以參考一下下面這個網(wǎng)址所提供的一個安裝思路:
https://blog.csdn.net/zqs305082800/article/details/84581299
另外一個庫:collections,則可用于快速統(tǒng)計不同數(shù)據(jù)出現(xiàn)的次數(shù)。非常方便。
感興趣的小伙伴們可以考慮對pyecharts庫和collections庫做一個深入了解,必將對你的數(shù)據(jù)分析工作有莫大幫助。
PS:本項目案例中的代碼都是成段出現(xiàn),并非是連一片出現(xiàn)的,這是因為我在測試的過程中發(fā)現(xiàn):若把這些片段的代碼集中到一起,最終只能展示出最后的那個分析結(jié)論的可視化效果圖,其余分析結(jié)論的可視化展示就會失效。故而我這里選擇了分段來講解。
再有一點需要說明的是:本項目案例中,有些處理邏輯參考借鑒了一丟丟前輩們的有益思路。因此,如果你覺得這里的分析處理邏輯似曾相識,請不要過于驚訝,哈哈哈!但我會盡可能地把我對這個項目分析案例的理解以及對這些理解的實現(xiàn)展示地更透徹一些!
貳
展示數(shù)據(jù)集的基本信息
首先,我們將數(shù)據(jù)導(dǎo)入到代碼中,并查看一下這批數(shù)據(jù)集的基本信息以及一些基本的統(tǒng)計量分析結(jié)果。對于影評分,我們可以查看它的平均分、最大值、最小值等。然后我們就開始對數(shù)據(jù)集中的一些數(shù)據(jù)做進一步的分析處理,并以可視化的形式展示給大家。這里所要分析的數(shù)據(jù)就是影片的上映日期,先看看不同年份下所上映的影片數(shù)的一個分布情形,以折線圖進行展示:
import pandas as pd
import numpy as np
from pyecharts.charts import Line,Bar,Pie
import pyecharts.options as opts
from collections import Counter
#設(shè)置字段對齊
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#設(shè)置最大顯示列數(shù)與顯示寬度,以防止出現(xiàn)不必要的換行輸出現(xiàn)象
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
data = pd.read_csv('maoyan.csv',encoding='utf-8')
print('前10部影片信息:')
print(data.head(10))
#查看數(shù)據(jù)基本信息
print('查看影片數(shù)據(jù)基本信息:')
print(data.info())
#查看數(shù)據(jù)集中的基本統(tǒng)計分析
print('查看影片數(shù)據(jù)基本統(tǒng)計結(jié)果:')
print(data.describe())
#獲得電影的平均分
print('獲得所有影片的平均分:')
print(data['star'].mean())
#提取日期的年份與月份,這里沒有采用Pandas庫中的to_datatime()
#主要是考慮到原始數(shù)據(jù)中的日期沒有包含天,只有年和月
#且采用字符串分割操作更顯得方便些
data['year'] = data['pub_time'].str.split('-').str[0]
data['month'] = data['pub_time'].str.split('-').str[1]
year = data.groupby('year')['year'].count()
attr_year = list(year.index)
num_year = list(year)
#以下是pyecharts庫中繪制折線圖的基本套路
#先聲明一個Line對象,然后添加X軸坐標(biāo)
#然后添加y軸坐標(biāo),如果需要給y軸坐標(biāo)起名字的話,可添加名字
#利用is_smooth可以設(shè)置折現(xiàn)是光滑曲線還是不光滑的折線
#最后設(shè)置一下折線圖的一些全局屬性,比如標(biāo)題,位置是居中還是
#左對齊或右對齊等
line = (
? ? Line()
? ? .add_xaxis(attr_year)
? ? .add_yaxis('',num_year,is_smooth=True)
? ? .set_global_opts(title_opts=opts.TitleOpts(,pos_left='center'))
? ? ? ? )
#下面這一行代碼讓折線圖在Jupyter Notebook上顯示的
#一條必備命令,缺少它,我們所繪制的折線圖
#將不會在Notebook上顯示。
line.render_notebook()
其運行結(jié)果截圖如下:
從這個折線圖上我們不難看出這么一個信息:在1993年到2013年這11年間,上映的大片普遍比較多(個別年份除外)。當(dāng)然,這個訊息的背后還能進一步得出什么樣的結(jié)論,比如是否可以進一步判定在這11年間內(nèi),大片的行情普遍比較火等,這就要靠更專業(yè)的人士結(jié)合他們所處行業(yè)的綜合信息來作出這方面的判斷了。
叁
查看不同月份上映的影片數(shù)
通常,電影的上映時間是很有講究的,比如一些大片會選在黃金周來上映,因為那個時期觀影人數(shù)會更多;再比如,影片的排擋也會綜合考慮不同月份下的行情。因此,我們可以對這批影片數(shù)據(jù)做進一步分析,看看通常在哪些月份上映的影片數(shù)最多:
month = data.groupby('month')['month'].count()
attr_month = list(month.index)
v_month = list(month)
#以下是利用pyecharts庫制作柱狀圖的基本思路
bar = (
? ? Bar()#聲明一個Bar對象
? ? .add_xaxis(attr_month)#添加X坐標(biāo)
? ? .add_yaxis('',v_month)#添加y坐標(biāo)值,也可以再加個標(biāo)題
? ? .set_global_opts(title_opts=opts.TitleOpts(,pos_left='center'))#設(shè)置好柱狀圖的全局信息,包括圖標(biāo)題、位置等!
? ? ? ? )
#這一步非常重要,千萬不能省略,否則
#無法在NoteBook上顯示
bar.render_notebook()
其運行結(jié)果如下:
從這個柱狀圖來看,我們可以看出一個大體的趨勢:步入到下半年之后,影片通常都會扎堆放映了。這可以被電影從業(yè)人員視作是一個影片檔期排擋規(guī)律。比如我們國家每年都會有一個賀歲檔,我想大概也是因為這個原因吧。至于為什么會有這么一個神奇的規(guī)律,這就需要深度分析人們的社會行為、消費習(xí)慣規(guī)律等數(shù)據(jù)才能得出一個準(zhǔn)確答案,而不是從這一批數(shù)據(jù)中就能得到的。
肆
影片發(fā)行國分布情況分析
弄明白影片上映時間的規(guī)律之后,我們接下來就會想著這些最受歡迎的影片大多來源于哪些國家。通過這樣的分析,我們就可以看出當(dāng)前哪些國家制作的影片最受歡迎,或者還可以這么說:哪些國家在制作這種受歡迎大片上的實力最牛掰。
#本段代碼的作用是分析出不同國家所制作的影片數(shù)的一個占比情況
def get_country(country):
? ? #首先要做的就是提取所有的國家信息
? ? country_str = ''
? ? if country.find('(') < 0 or country.find('中國香港') > 0 :
? ? ? ? #這里的條件判斷并不特別嚴謹,是因為滿足上述
? ? ? ? #條件的第一個判斷,也可能是來自國外的影片,比如
? ? ? ? #數(shù)據(jù)集中的泰坦尼克號這部影片就來自國外,但我們會依據(jù)
? ? ? ? #這里的判斷而將其歸類于中國電影
? ? ? ? #獲取國家這個API實際上還需要做進一步的分析,
? ? ? ? #但就目前數(shù)據(jù)集中有限的信息,我們很難做出最完美的判斷。
? ? ? ? #因此,這就說明采集數(shù)據(jù)時,保證數(shù)據(jù)信息的完整性
? ? ? ? #是多么的重要。
? ? ? ? country_str = '中國'
? ? elif country.find('法國戛納') > 0:
? ? ? ? country_str = '法國'
? ? else:
? ? ? ? country_str = country.split('(')[1].strip(')')
? ? return country_str
data['country'] = data['pub_time'].map(get_country)
country = data.groupby('country')['country'].count()
attr_country = list(country.index)
num_country = list(country)
#以下是pyecharts庫繪制餅狀圖的基本思路
pie = Pie()#聲明一個Pie圖對象
pie.add(
? ? "國家",#設(shè)置餅狀圖名稱
? ? #設(shè)置一下餅狀圖中要顯示的數(shù)據(jù)
? ? [list(z) for z in zip(attr_country?,num_country?)],
? ? # center為圓心坐標(biāo)
? ? center=["20%", "50%"],
? ? # 60為內(nèi)半徑,80為外半徑
? ? radius=[60, 80],
)
? ? ? ?#設(shè)置餅狀圖的全局屬性,包括標(biāo)題、位置信息等
pie.set_global_opts(
? ? ? ? title_opts=opts.TitleOpts(,pos_left='left'),
? ? ? ? legend_opts=opts.LegendOpts(
? ? ? ? ? ? type_="scroll", pos_top="200%", pos_left="80%", orient="vertical"
? ? ? ? ),
? ? )
# 設(shè)置顯示百分比
pie.set_series_opts(
? ? ? ? tooltip_opts=opts.TooltipOpts(
? ? ? ? ? ? trigger="item", formatter="{a}
{b}: {c} (ze8trgl8bvbq%)"
? ? ? ? ))
? ? ? ?#下面這行代碼是確保餅狀圖能夠在Notebook上顯示的必備代碼
pie.render_notebook()
其運行結(jié)果如下:
從這個國家分布的餅狀圖上來看,中美兩國所發(fā)布的大片受到的喜愛程度最高,尤其是中國。這個原因我想主要還是在于發(fā)布這個貓眼Top100的網(wǎng)站里參與影片評分的人絕大多數(shù)還是以中國人為主。這里邊多少有一些愛國情懷的作用,哈哈哈。
壹
小結(jié)
這一節(jié)我們簡單地分析了一下貓眼Top100電影數(shù)據(jù)集中的一些基本信息,包括影片上映時間規(guī)律、影片發(fā)行國規(guī)律等信息。在這些分析過程中,我們利用了所學(xué)習(xí)到的分組分析、基本統(tǒng)計分析等分析技術(shù)。在分析影片發(fā)行國規(guī)律時我們還對數(shù)據(jù)做了比較復(fù)雜的處理,這屬于數(shù)據(jù)清理的范疇。最后我們利用可視化的形式展示了我們所分析出來的結(jié)論,并對這個結(jié)論做了一些基本的解釋。
因此,我們可以從這個實際的小項目中就能夠完整地看到數(shù)據(jù)分析的三個主要環(huán)節(jié)——數(shù)據(jù)清理、數(shù)據(jù)分析、分析結(jié)果解釋等。
當(dāng)然,對于這批數(shù)據(jù)集的分析我們還沒結(jié)束,還有一些重要的信息有待提取,這就留待下一節(jié)的項目案例分享中繼續(xù)為大家分享。
本節(jié)的數(shù)據(jù)分析項目案例分享就到此為止,謝謝大家!我們下一節(jié)的分享中,不見不散!
總結(jié)
以上是生活随笔為你收集整理的大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac定时执行python_Python
- 下一篇: 【ARM】AD转换器