本文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,若有問題請及時聯繫咱們以做處理。前端
如下文章來源於數據分析與統計學之美 ,做者黃偉呢json
Python 數據分析入門案例講解cookie
https://www.bilibili.com/video/BV18f4y1i7q9/
前言
最近,最火的電視劇莫過於《大秦賦》了,自12月1日開播後,收穫了不錯的口碑。然而隨着電視劇的跟新,該劇在網上引發了激烈的討論,不只口碑急劇下滑,很有高開低走的趨勢,同時該劇的評分也由最初的8.9分,降低到了如今的6.5分。網絡
雖然我尚未看過這個新劇,可是對於小夥伴們討論的內容,卻很有興趣(主要仍是你們總是討論這個劇)。app
所以,我用Python爬取了《大秦賦》的相關數據,進行了一波分析。echarts
數據爬取
巧婦難爲無米之炊,作數據分析以前最重要的就是「數據獲取」。因而,我準備用Python爬取豆瓣上的短評數據以及一些評論時間信息、評價星級信息。ide
關於數據的爬取主要說如下幾個內容:函數
1)關於翻頁操做
第一頁: https://movie.douban.com/subject/26413293/comments?status=P 第二頁: https://movie.douban.com/subject/26413293/comments?start=20&limit=20&status=P&sort=new_score 第三頁: https://movie.douban.com/subject/26413293/comments?start=40&limit=20&status=P&sort=new_score
上面咱們分別展現了第1-3頁的頁面連接,咱們主要是觀察其中的規律,其中start是獲取評論的起始位置,limit表明獲取多少條評論數據。觀察結果:3個連接的不一樣在於這個start的不一樣,在後續翻頁時,咱們只須要修改start參數便可。工具
2)關於反扒說明
對於豆瓣的爬取,其實找到真實的短評連接,是極其容易的。可是這裏有一點我必須說明,你能夠不登錄爬取數據,可是隻能是操做一段時間,過一段時間,會檢測到你是爬蟲。所以,你必定要登錄後,攜帶cookie去進行數據的爬取。若是你有時候不知道請求頭中,該放一些什麼,那麼就請都加上,等有空再慢慢總結。學習
headers = { "Accept":"application/json, text/plain, */*", "Accept-Language":"zh-CN,zh;q=0.9", "Connection":"keep-alive", "Host":"movie.douban.com", "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36', "Cookie":'這裏是你本身的cookie' }
cookie有些人可能又不知道在哪裏,仍是告訴你一下吧!好多參數都在下面呢,若是你想學好爬蟲,那麼這些參數表明什麼,你總應該須要知道吧。
最終再補充一點:我原本打算把豆瓣上的《大秦賦》短評,所有爬下來做爲分析的素材。然而並無成功爬取到全部的短評,一波三折,最終只爬到了500條,固然我以爲這也是豆瓣的一種反扒措施,最大可見短評數就500條,多的不給你看。(有大神的話,能夠下去研究一下)
數據處理
爬取後的數據,再怎麼規整,也和用於分析的數據之間,有必定的差距。所以在分析以前,必定的數據清洗是頗有必要的。在數據清洗以前,咱們簡單看看數據是什麼樣子的。
df = pd.read_csv("final_all_comment.csv",index_col=0) df.head(10)
結果以下:
其實數據仍是挺漂亮的,可是咱們仍是須要作以下處理:
1)剔除重複值
咱們認爲:若是'評論時間'和'評論內容'徹底一致的話,就認爲他是同一條評論,須要將其剔除。
print("刪除以前的記錄數:",df.shape) df.drop_duplicates(subset=['評論時間','評論內容'],inplace=True,keep='first') print("刪除以前的記錄數:",df.shape)
2)評論時間處理
由於《大秦賦》是2020年12月1號開播的,如今是12月16號晚,所以全部的評論數據確定都是2020年12月開始有的,所以咱們只保留有用的「日期」數據(哪一天)。而對於時分秒來講,咱們只保留「小時」數據。
df["評論天數"] = df["評論時間"].str[8:-9].astype(int) df["小時"] = df["評論時間"].str[11:-6].astype(int)
3)評論星級說明
觀察原頁面的評論星級,能夠看到全部的星級並非以數字展現的,而是用星星進行前端渲染出來的,可是頁面的源代碼,卻展現的是星級數。
對應到頁面源代碼中,咱們看看又是怎麼樣子的呢?
能夠看到:3星的數字是30,其它的以此類推,1星的數字是10,2星的數字是20......我看着就是很不爽,所以我在爬取數據的時候,已經將這些數字,全都除以10後計算。
4)評論內容機械壓縮去重
對於一條評論來講,有些人可能手誤,或者湊字數,會出現將某個字或者詞語,重複說屢次,所以在進行分詞以前,須要作「機械壓縮去重」操做。下面是我很早以前寫的一段代碼,你們能夠去看個人CSDN博客,裏面有很好的解釋。
def func(st): for i in range(1,int(len(st)/2)+1): for j in range(len(st)): if st[j:j+i] == st[j+i:j+2*i]: k = j + i while st[k:k+i] == st[k+i:k+2*i] and k<len(st): k = k + i st = st[:j] + st[k:] return st st = "我愛你我愛你我愛你好你好你好哈哈哈哈哈" func(st)
結果以下:
利用上述函數,咱們能夠對爬取到的數據,應用此操做。
def func(st): for i in range(1,int(len(st)/2)+1): for j in range(len(st)): if st[j:j+i] == st[j+i:j+2*i]: k = j + i while st[k:k+i] == st[k+i:k+2*i] and k<len(st): k = k + i st = st[:j] + st[k:] return st df["評論內容"] = df["評論內容"].apply(func)
數據可視化操做
俗話說:「字不如表,表不如圖」。爬取到的數據,最終作可視化的呈現,纔可以讓你們對數據背後的規律,有一個清晰的認識。下面咱們從如下幾個方面來進行數據可視化分析。
- 評論數隨時間的變化趨勢
- 二十四小時內的評論數的變化趨勢
- 星級評分的餅圖
- 你們主要都在評論一些啥
關於數據可視化工具,我就不用pyecharts了,我仍是迴歸原始,用最原始的matplotlib庫進行數據可視化的展現。畢竟咱們沒有什麼複雜的展現,代碼越簡短越好。
1)評論數隨時間的變化趨勢
從圖中能夠看出:短評數量在12月4日以前,一直處於上升趨勢,在12月4日達到頂峯。和文章最開始的說明一致,前面幾天觀衆對於該劇的期待值較高,可是在12月4往後,忽然出現斷崖式降低,說明隨着該劇的更新,你們有所失望了。
2)二十四小時內的評論數的變化趨勢
最近總聽到周圍有人在討論這部劇,下面就來看看你們都是在啥時候追劇呢?從24小時圖中能夠看出:晚上7-24點,評論急劇上升,大多數人都是6點下班,可能吃個飯到7點左右,或者直接在下班過程當中,就開始了一天的追劇。這裏還有一波早高峯5-8點,難道睡不着?早上還要起來刷刷據,而後上班。這裏還有兩個時間段:上午10-11點,中午12-15點,你們能夠分析下,確定有至關一部分小夥伴,正在摸魚工做呀
3)星級評分的餅圖
劇究竟好很差,看看觀衆的評分少不了,這也是觀衆最直觀的想法。
- 1星:不好
- 2星:較差
- 3星:還行
- 4星:推薦
- 1星:力薦
從下圖中能夠看出:你們對於該劇的哦=評價仍是很低的,1星和2星基本佔據了整個餅圖,也就是說該劇並無獲得你們的承認。
4)你們主要都在評論一些啥
其實你們對於該劇最大的爭論點,仍是由張魯一飾演的嬴政。40歲的張魯一,居然飾演13歲的少年嬴政,而後向36歲朱珠飾演的趙姬分享喜訊,這個角色顯色很不協調。不少人直呼:難道請不起小演員嗎?
還有一部分人,對該劇的劇情和臺詞非常吐槽,嬴政稱若是呂不韋是本身的生父,願意跟他一塊兒離開秦國浪跡天涯,這真的是少年老成的嬴政能說出來的話嗎?
《大秦賦》是「大秦帝國」系列的第四部,原名爲《大秦帝國之天下》,播出時改成了《大秦賦》。因而不少人將這部劇和2009年播出的《大秦帝國》做比較,以此來諷刺該劇。
本文同步分享在 博客「松鼠愛吃餅乾」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。