1. 程式人生 > >透過2W條評論看動漫《博人傳-火影忍者新時代》

透過2W條評論看動漫《博人傳-火影忍者新時代》

寫在前面

日本電視動畫《BORUTO -火影新世代》(中國大陸譯名《博人傳:火影忍者新時代》)改編自岸本齊史原作並監修、池本幹雄編繪、小太刀右京編劇的同名漫畫,是《火影忍者》系列的續篇,講述原作故事完結後漩渦鳴人之子漩渦博人的冒險故事。動畫的後續劇情將對岸本齊史負責指令碼的劇場版《火影忍者劇場版:博人傳》作出補充 。

動畫與前作《火影忍者》《火影忍者疾風傳》一樣由Studio Pierrot(小丑社)負責製作。 時間是:2017年4月5日起每週三16:55在東京電視臺系列首播

在這裡插入圖片描述

以上內容,是我從百度百科抄襲過來的~哈哈哈哈,咱主要做的是資料分析,資料的爬取,去我的爬蟲系列的部落格裡面去看吧,裡面有相關的教程。

資料分析

作為評論的資料,咱儲存了這些資料留著備用

    author # 作者
    content # 評論內容
    ctime = # 評論時間
    disliked # 不喜歡人數
    liked # 喜歡
    likes # 奇怪???
    score # 打分
    user_season # 在第幾集打的分數
複製程式碼

1.清洗資料

最核心的步驟來了,在分析資料以前,我們需要對資料做一些處理,空值判斷,時間格式修改等內容,這部分可能會根據實際的需求發生一些變化。

import numpy as np
import pandas as pd
import
datetime # 資料讀取 def read_csv(): file = pd.read_csv("./bore.csv",header=None,names=["author","content","ctime","disliked","liked","likes","score","user_season"]) return file # 資料清洗 def clear_data(): df = read_csv() #print(any(df.duplicated())) # 判斷資料是否有重複 #print(df.head()) #print(df.isnull().any()) # 判斷是否有空列
#print(df[df.isnull().values==True]) # 檢測空值 data = df.fillna(0) # 空值填充 # 時間處理 def get_localtime(data): time = datetime.datetime.fromtimestamp(data['ctime']).strftime("%Y-%m-%d") return pd.to_datetime(time) df["ctime"]=df.apply(get_localtime,axis = 1) # apply 的使用 return df # 資料分析1 def analsis1(data): print(data["author"].describe()) if __name__ == '__main__': df = clear_data() analsis1(df) 複製程式碼

2.評論最多的人?

看一下誰是這部動漫評論最多的人,這個程式碼非常簡單,參考下面程式碼即可。.describe() 函式

def analsis1(data):
    print(data["author"].describe())
複製程式碼
count     18535  # author總數
unique    18535 # 去除重複之後的總數
top        你的盛世   
freq          1
Name: author, dtype: object
複製程式碼

很神奇,竟然沒有人評論次數超過2 這個結論只能表示,B站允許視訊評論一次?!機制的我想去測試一下,啪啪啪,打臉回來了,我竟然沒有許可權。

※你沒有許可權※

3.評論最多的人?

資料中,有分數的排布,那麼我們看一下打分的柱狀圖吧!資料顯示的1星和5星的比較多,兩級分化比較嚴重。

在這裡插入圖片描述

為了確保中文顯示正常,需要首先配置一下預設字型並且設定一下 matplotlib的樣式

import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import matplotlib.style as psl

psl.use('seaborn-darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False
複製程式碼
  1. 分組統計score打分,使用groupby(by="欄位名稱").size() # 獲取數量
  2. reset_index(drop=True) # 重置索引
  3. plt.bar #用來生成柱狀圖
  4. plt.text() # 生成文字
def analsis2(data):
    # 文章打分的柱狀圖
    score = data["score"].groupby(data["score"]).size()

    score = score.reset_index(drop=True)
    x_index = np.arange(1,6).tolist()

    plt.bar(x_index,score.values,0.4,color="#03a9da")
    # 繪製文字
    for xx,yy in zip(x_index,score.values):
        plt.text(xx,yy+0.2,str(yy),ha="center",fontsize = 10)

    plt.title("使用者評星圖表")  # 設定標題
    plt.xlabel("評星")  # 設定x軸標識
    plt.ylabel("人數")  # 設定y軸標識
    plt.show()
複製程式碼

如果編寫如下程式碼

plt.barh(x_index, score.values, 0.4, color="#03a9da")  
複製程式碼

就會得到一個橫向的條形柱狀圖。

4. 評論時間分佈

從資料看星期二、四、六評論次數增多,很有意思的資料。

在這裡插入圖片描述

# 通過星期判斷評論次數
def analysis3(data):
    data.set_index(data["ctime"],inplace=True)
    weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
    def get_weekday(data):
        return weeks[data["ctime"].weekday()]
    data["week"] = data.apply(get_weekday,axis=1)
    week_data = data.groupby(by="week")["author"].size()

    plt.bar(weeks,week_data.values,0.5,color="green")
    plt.show()
複製程式碼

5. 評論月份暴漏的部分關係

我們看到在2018年7月份資料忽然升高,這背後到底有啥隱藏的祕密呢?我們繼續往下看。!

在這裡插入圖片描述

def analysis4(data):
    data.set_index(data["ctime"], inplace=True)
    data = data.resample("M").count()["author"]  # 按照月份彙總資料
    data = data.to_period("M")  # 顯示資料
    x = np.arange(0,len(data),1)

    fig = plt.figure(figsize=(6, 4))
    ax = fig.add_subplot(111)

    '''
    fig = plt.figure()
    ax2 = fig.add_subplot(212)
    '''

    ax.plot(x,data.values,"#03a9f4",marker="o",markersize=4)
    ax.set_xticks(x)  # 設定x軸標籤為自然數序列
    ax.set_xticklabels(data.index)  # 更改x軸標籤值為年份
    plt.xticks(rotation=60)  # 旋轉90度,不至太擁擠

    plt.title('博人傳評論數量變化(201709-201812)', color="#03a9f4", fontsize=12)
    plt.xlabel("月份")
    plt.ylabel('評論數量')
    plt.tight_layout()  # 自動控制空白邊緣


    plt.show()

複製程式碼

過濾2018年7月份的資料出來,發現在2018年7月20日的時候,出現了一個評論峰值,在進行細緻的分析,咱看一下資料。

在這裡插入圖片描述

看到這個資料之後,雖然我沒看博人傳,但是,我知道了 65集肯定好看,而且很有可能在7月20日更新的就是這1集,好奇心起來的你,或者你是一個火影迷,你可以去看看這一集~! 我翻到評論,引用了一個置頂評論

	本集是值得國人觀眾特別期待的一集,因為這一話(第65集)是由國人原畫師黃成希全權負責的,
	他一個人包攬了本集的分鏡/演出/作畫導演等主要工作。
	換而言之,黃成希作為中國畫師獲得了本集的作監資格。這在火影忍者開播16年以來是史無前例的。
	十幾年前,黃成希在火影忍者剛剛開播時,也和多數人一樣僅僅只是螢幕前的看客,
	但是這部作品對學生時代的他施加了巨大的影響,最終促使黃成希走上了成為動畫畫師的道路。
	在2012年加入日本動畫行業後,他如願以償成為了火影忍者的主力原畫之一,並參與作畫監督的工作。
	除此之外他還先後加入過包括黑子的籃球、妖怪手錶和刀劍神域劇場版等多部作品的製作,
	實力得到了業內的認可,因此才最終獲得了獨自扛下重要打鬥回的資格,如此說來也算是圓夢成功。
	由於本集幾乎是黃成希的個人秀,再加上這一話中大筒木桃式使用了漫畫版而不是劇場版中的新形象,
	因此黃成希在作畫上自由發揮的空間就變得很大,這就有餘地在打鬥中融入太極和詠春等中國傳統武術了。
	所以大夥看到一連串的“中國功夫”也別覺得奇怪哈~
	說起來,大筒木一族本身就有一股濃厚的道家派頭,他們不僅歷史悠久,文明程度遠遠超越這個世界的人,
	而且全族都在種靈根,吃仙桃,脩金丹,求長生不老。現在再配合一整套中國武學架子,
	簡直給人一種徐福手下三千童男童女入蓬萊求仙藥的即視感...將來出一個徐福式的修仙族長也是極好的!(大誤)


	黃成希在博人傳中的幾段作畫(可能有遺漏):
	博人vs木葉丸
	博人vs花火
	博人vs鵺
	小櫻vs信
	巳月vs屍澄真
複製程式碼

在這裡插入圖片描述

def analysis5(data):
   data = data.set_index('ctime')  # 將時間作為索引
   data = data["2018-07-01":"2018-08-01"]
   child_data = data.resample("D").count()["content"]
   print(child_data.to_period("D"))

   data = data['2018-07-20':"2018-07-20"]
   print(data["content"])

複製程式碼

6. 評論最多的集數

其實有上面的分析,我們已經知道了,65集肯定是評論最多的了,但是我們還是要用資料看一下

def analysis6(data):
    data = data.groupby(by="user_season").size()
    data = data.sort_values(ascending=False)
    print(data.head())

複製程式碼

沒問題,65集必看

集數 評論數量
65 4338
40 985
39 658
66 502
68 494

最後打算在弄一個文字圖的,後來想想下次再說,《博人傳》資料和原始碼已經給大家寫完整啦~

一星給情懷,一星給65集