Rでお遊び:「あの花」実写ドラマ記念!あの花カラーパレットの紹介

Rの解析に役に立つ記事

アニメは「からだにいいもの」という信念で、仕事の合間にBGM代わりに流しています。昨日、アニメ「あの日見た花の名前を僕達はまだ知らない。(あの花)」が実写ドラマになるという、個人的にビッグなニュースが飛び込んできました。

あの花は、2011年に埼玉県秩父を舞台にした「大人も泣けるアニメ」と話題を呼んだアニメでオフィシャルHPでもキャッチに「300万人の心を掴んだ ちょっと不思議なひと夏の感動の物語」とあります。私は心を掴まれた300万人のひとりです。

実写ドラマがどのように進行し評価を受けるか非常に楽しみです。

ドラマ記念としてオフィシャルHPのキャラクター紹介画像で使用されている「Top20のカラーコード」をRで取得してみました。pngからの解析ですのでオフィシャル色指定と若干異なると思います。

あの花HP:http://www.anohana.jp/

Rを利用していてまだご覧になってない方にオススメのアニメです。また、アニメから本ページにたどり着いた方はRを是非利用してもらえればと思います。カラーパレットやテーブルを作成するコードは最下部で紹介します。

コマンドはR version 3.2.0で確認しています。


スポンサーリンク
スポンサーリンク

カラーパレットを作成する準備

過去の過去記事をご覧いただければ。
・Rでお遊び:「47都道府県の代表的なアニメ」と「キャラクターの髪の色」のまとめ
https://www.karada-good.net/analyticsr/r-110/


カラーパレットの紹介

左から”宿海仁太”, “本間芽衣子”, “安城鳴子”, “久川鉄道”, “松雪集”, “鶴見知利子”の順です。

anohana

カラーテーブルの紹介

Rでは統計解析や画像の出力以外に、このようなテーブルも作成できます。ぐりぐり動きますのでいじってみてください。

モバイルの方はこちらからご覧いただくと見やすいです。
別ウィンドウで開く


作成コマンドの紹介

詳細はコメントを確認ください。

#パッケージの読み込み
library("tcltk")
library("png")
library("jpeg")
library("colorspace")

#読み込みフォルダを選択
FoldPath <- paste(as.character(tkchooseDirectory(title = "読み込みフォルダを選択"), sep = "", collapse =""))

#フォルダ内のアイテムを取得
ItemList <- list.files(path = FoldPath)

#キャラ名を設定
CharaName <- c("宿海仁太", "本間芽衣子", "安城鳴子", "久川鉄道", "松雪集", "鶴見知利子")

###S:フォルダ内の全画像からカラーコードを取得#####
#データ格納用の変数を初期化
MasterRGBCol <- NULL

#アイテム数の取得
ItemVol <- length(ItemList)

for(i in seq(ItemVol)){
  
  #Imageファイルの読み込み
  selectAImage <- paste(FoldPath, "/", ItemList[i],
                        sep = "", collapse = "")
  
  #jpeg/png/gifファイルの判断
  if (unlist(strsplit(ItemList[i], "\\."))[2] == "png"){
    
    Image <- readPNG(selectAImage)
    LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
    RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }else{
    
    Image <- readJPEG(selectAImage, native = FALSE)
    LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
    RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }
  
  #マスターデータのデータフレーム化
  RGBCol <- as.data.frame(RGBCol)
  
  #カラーコードを文字列化
  RGBCol[, 4] <- as.character(RGBCol[, 4])
  
  #透明を削除
  RGBCol <- RGBCol[RGBCol[, 4] != "#000000",]
  
  #画像で使用されているカラーコードを集計
  CountColor <- as.data.frame(table(RGBCol[, 4]))
  
  
  #集計データをカラーコードで並び替え
  CountColor <- CountColor[order(CountColor[, 1], decreasing = TRUE), ]
  #head(CountColor)
  
  #マスターデータの重複を削除
  RGBCol <- RGBCol[!duplicated(RGBCol[, 4]),]
  
  #マスターデータをカラーコードで並び替え
  RGBCol <- RGBCol[order(RGBCol[, 4], decreasing = TRUE),]
  
  #キャラ名と結合
  RGBCol <- cbind(i, CharaName[i], RGBCol, CountColor[, 2])
  
  #プロットデータの作成
  MasterRGBCol <- rbind(MasterRGBCol, RGBCol)
  
  #必要のないImage,LABCol,RGBColの削除
  rm(Image,LABCol,RGBCol)
  
}

#行名の付与
colnames(MasterRGBCol) <- c("NO", "キャラ", "明度:l", "補色次元:a", "補色次元:b", "カラーコード", "出現数")

###データのプロット#####
#軸の設定
xRange <- seq(0, 1, by = 1/ItemVol)

#グラフ幅の設定
xWidth <- seq(1/ItemVol, 1, by = 1/ItemVol)

#プロット領域の作成
par(bg = "#2E2E2E")
plot(0:1, 0:1, type = "n", axes = FALSE, xlab = "", ylab = "")

#テーブル作成用のデータ格納用変数
TableDrowData <- NULL

for(k in seq(ItemVol)){
  
  #データの抽出
  Plot <- subset(MasterRGBCol, MasterRGBCol[, 2] == CharaName[k])
  
  #出現数で並び替えてTOP20を抽出
  Plot <- Plot[order(as.vector(Plot[, 7]), decreasing = TRUE),]
  Plot <- head(Plot, n = 20)
  
  #明度で並び替え
  Plot <- Plot[order(as.vector(Plot[, 3]), decreasing = TRUE),]
  
  #テーブル作成用データ
  TableDrowData <- rbind(TableDrowData, Plot[, c(1, 2, 6, 7)])
  
  #データのプロット
  rasterImage(as.raster(Plot[, 6]),
              xRange[k], 0, xWidth[k], 1, interpolate = FALSE)
  
}

#色付きJavaテーブルの作成
#パッケージの読み込み
library("DT")

#HTMLファイルの保存場所を指定
setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))

#テーブルの作成
DataTable <- datatable(TableDrowData, rownames = FALSE, options = list(pageLength = 10, lengthMenu = c(5, 20, 40, 120)),
                       caption = 'あの花 カラーパレット', escape = FALSE)

#キャラ名のセルの色をパイプ"%>%"でつなげてformatStyleで設定します
DataTable <- DataTable %>% formatStyle('カラーコード',
                                       backgroundColor = styleEqual(TableDrowData[, 3], TableDrowData[, 3]))
#作成テーブルをhtmlで出力
saveWidget(DataTable, 'DataTable.html')

少しでも、あなたのアニメライフが充実し、ウェブや実験の解析が楽になりますように!!

タイトルとURLをコピーしました