広告/統計/アニメ/映画 等に関するブログ

広告/統計/アニメ/映画 等に関するブログ

Google 検索のサジェスト機能からデータを取得する。(Python、XML、2021年5月)

Google 検索のサジェスト機能(Google suggest)のAPIを使ってデータを取得するための情報は多いが、古くなっている情報も多いので最新の情報をメモしておく。

PythonによるXML形式でのGoogle suggest API 取得

Google suggest API は、JSONで取得するコードが多いが、JSON形式はいつの間にか廃止されているようなのでXML形式を採用する

https://so-zou.jp/web-app/tech/web-api/google/suggest/

参考にしたコード

自分はPythonしか使えないのでPythonで取得している記事を参照する

https://gist.github.com/fpt/b21b8abea239392129b6

幾つか既に古くなっている箇所を補足する

unicodeメソッドは廃止されている。今は、文字列にするにはstr()だけで良い。

http://diveintopython3-ja.rdy.jp/porting-code-to-python-3-with-2to3.html

同時にこれによって、OSの規定の文字コードを取得するコード類も不要となる。

API内容の補足

日本語の検索結果にするか、日本にエリアを限定するかなどを設定できる。

https://importsem.com/query-google-suggestions-api-with-python/

コードの実装

自分は、対話式のJupyterで作業できれば良いので、コマンドプロンプトからの入力情報を受取る必要はない。なおparserをJupyterで使うにはテクニックがいるようだ。(自分は使っていないので慣れていない)

https://qiita.com/uenonuenon/items/09fa620426b4c5d4acf9

https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0

必要なライブラリの読み込み

import pprint
import requests
from lxml import etree
import numpy as np
import pandas as pd

検索したいワードを指定する

qstr = "セキュリティ"

APIIの取得

google_r = requests.get("http://www.google.com/complete/search",
                 params={'q':qstr,
                         'hl':'ja',
                         'ie':'utf_8',
                         'oe':'utf_8',
                         'output': 'toolbar'})

google_root = etree.XML(google_r.text)

suggestされた語句の取得

google_sugs = google_root.xpath("//suggestion")
google_sugstrs = [s.get("data") for s in google_sugs]

データフレームに順番に格納する

google_suglist = []
for ss in google_sugstrs:
    google_suglist.append(ss)
    print(ss)
セキュリティ
セキュリティソフト
セキュリティニュース
セキュリティパッチ
セキュリティインシデント
セキュリティトークン
セキュリティポリシー
セキュリティグループ
セキュリティコード
セキュリティ 資格
google_suglist_df = pd.DataFrame(google_suglist)
display(google_suglist_df)
0
0 セキュリティ
1 セキュリティソフト
2 セキュリティニュース
3 セキュリティパッチ
4 セキュリティインシデント
5 セキュリティトーク
6 セキュリティポリシー
7 セキュリティグループ
8 セキュリティコード
9 セキュリティ 資格

エクセルファイルなどの書き出せる

google_suglist_df.to_excel("google_suglist_df.xlsx")

アニメ「新世界より」は「メロドラマ」だった

数カ年遅れで「新世界より」のアニメ版を見た。原作を読んでいないので原作読者からすると的外れな感想かもしれなけれど、とても美しかったので、忘れないうちに記録にしておきたい。

ホラーにもサスペンスやアクションにもできたプロット

少しだけネタバレをしながら説明すると、本作は、超能力を持つ子ども達が、特定の目的で管理されながら育てられ、主人公たちはその秘密を解き明かしながらも襲いかかる敵と立ち向かっていく数カ年の物語で、いかに社会を安定的に保つかという管理社会の思想を問うテーマも持っている。

約束のネバーランド」のようにホラーにすることもできたし、秘密に迫るサスペンスにすることもできたし、管理社会を風刺する社会派にすることもできたし、超能力を使ったバトルやアクションにすることもできるプロットだ。

どれを選択するかはプロデューサーや監督の裁量次第ということだろう。

メロドラマだと感じた

自分は、「本作はメロドラマだ」という感想を持った。

主人公が過去を振り返るナレーションが入るのは、映画「タイタニック」のような哀愁を感じさせるし、何より、誰と誰が恋仲かという描写や嫉妬や離別のシーンなどに割かれているシーンが多かったからだ。

離別してしまった友を思い返す描写や、思い出の中の友に助けられるシーンもあるし、忘れてしまっていた友の記憶を思い出すシーンも印象的かつ効果的に使われている。

劇伴(BGM)もアクション向けの曲より哀愁漂うスローテンポな曲の使用が多く、何より、ドボルザーク新世界より」の「家路」が合っていた。徐々に減っていく仲間と、主人公が過去を振り返るという形式が、懐かしさと哀愁を強調する。

同じプロットからテーマはいくらでも変化させられる

本作を見て思ったのは、プロットとテーマ(主題)の関係の柔軟性だ。

原作を読んで超能力バトルの色を強くすることもできたろうし、管理社会制度を問う社会派にすることも、色んな選択肢がある中で、主人公が離別していった友を想うことにフォーカスを当てたことで、とても物悲しく泣ける作品になったのだが、何をテーマにして作るのかということはプロデューサーや演出家にとって重要な決断だと思う。

自分は、このような美しい方向へ演出を振り切ったことに感謝したい。

Pandasで文字列に対してcase_whenをしたいときの注意箇所

pandas でSQLのcase_whenのように、特定の列の条件に応じて新しく分類を作りたい場合がある。

様々な選択肢があるが、シンプルなのはこのサイトのように関数を作って列に適用させる手法だろう。

qiita.com

数値の列であれば参考サイトの通りに行えば問題ないが、文字列の場合は注意が必要だ。

テストデータの準備

import numpy as np
import pandas as pd
df = pd.DataFrame({
    "商品名":["オレンジ","アップル","はくさい","れんこん","サバ"],
    "売上":[100,120,80,40,90]
})
display(df)
商品名 売上
0 オレンジ 100
1 アップル 120
2 はくさい 80
3 れんこん 40
4 サバ 90

このデータフレームに新しく「野菜」「魚」「果物」などの分類列を加えたいものとする。

str.containsではエラーになる

文字列の条件といえば、str.containsである。

商品名にオレンジを含むかどうかであれば以下のように記述すれば良い

df["商品名"].str.contains("オレンジ")
0     True
1    False
2    False
3    False
4    False
Name: 商品名, dtype: bool

だが、ここで先程のサイトのように関数にするとエラーになる

def func_case_when_kubun_1(x):
    if x.str.contains("オレンジ"):
        return "果物"
    elif  x.str.contains("アップル"):
        return "果物作"
    elif x.str.contains("はくさい"):
        return "野菜"
    elif x.str.contains("れんこん"):
        return "野菜"
    elif x.str.contains("サバ"):
        return "魚"
    else:
        return "その他"
    
df["商品名"].apply(func_case_when_kubun_1)
AttributeError: 'str' object has no attribute 'str'

エラーの理由

「 'str' object has no attribute 'str'」というエラーでググると、丁寧に説明しているページがあった

stackoverflow.com

df["商品名"]の各要素の型は「str」なのだ

type(df["商品名"][1])
str

解決策

では、「str」型の文字列に対して「~を含む」などの処理をどうするかというと、こちらのサイトに紹介がある。

note.nkmk.me

ということで、関数は以下のように書き直して実行すれば良い。

def func_case_when_kubun_2(x):
    if "オレンジ" in x:
        return "果物"
    elif "アップル" in x:
        return "果物作"
    elif "はくさい" in x:
        return "野菜"
    elif "れんこん" in x:
        return "野菜"
    elif "サバ" in x:
        return "魚"
    else:
        return "その他"
    
df["商品名"].apply(func_case_when_kubun_2)
0     果物
1    果物作
2     野菜
3     野菜
4      魚
Name: 商品名, dtype: object

元のデータフレームに列を追加したいので以下のように插入する

df["分類"] = df["商品名"].apply(func_case_when_kubun_2)
display(df)
商品名 売上 分類
0 オレンジ 100 果物
1 アップル 120 果物作
2 はくさい 80 野菜
3 れんこん 40 野菜
4 サバ 90

これで、文字列条件を使ってpandasデータフレームに新しいカテゴリ分類を追加することができた。

「スパイラル -推理の絆-」の劇伴と見せ方が凄い

「裏世界ピクニック」を見ていると登場人物が「スパイラル -推理の絆-」を読んでいた。見よう見ようと思って見ていなかったので、初めて見たのだが、演出の良さが半端ない作品だった。自分は大した分析の知識もないけれど、ここが良かったなぁと思ったことを忘れないうちに書いておく。

「スパイラル -推理の絆-」TV版はどんな`シーンが描かれるのか

「スリル」「サスペンス」辺りに分類されるような作品。TV版を大まかに説明すると、主人公は、疾走した兄が残した言葉によって、変な組織の子供たち(ブレードチルドレン)に実力を試されるような生死をかけたゲームに参加させられたり、逆に彼らが別の組織にゲーム的に狙われるのを助けたり、ということをする。推理と書いてあるがメインは推理モノではないし、SF的要素も感じさせる設定だが、実際のシーンでは超常現象も超能力も登場せず、心理の読み合いが中心なので、派手なシーンは殆どない。モノローグシーンもかなり多い。

劇伴らしい劇伴

劇伴には大きく3つの方向性がある。効果音が中心の劇伴(ドラえもんのような子供向けや、萌・ギャグ系)、曲として独立しても成立する劇伴(最近の異世界転生系、戦闘シーンが多い作品)、世界観にあわせた劇伴(EVAの頃の鷺巣詩郎さんや大野雄二さんのルパン三世)。

この作品は、世界観にあわせた劇伴のタイプで、これから展開尾の流れが変わるぞ?という時に気分の高まる劇伴が流れ始める。

効果的なピアノ曲

リスト、ラヴェルドビュッシーなど近代音楽系の美しいピアノ曲にいろんなシーンが載るとそれだけで趣がある。主人公やアイズ・ラザフォードはピアノを弾くキャラクターであり、演奏シーンもある。

個性的なコンテ

担当者が異なる回によって作風が違うものの、画面が見切れる大胆なアップや、不安な画面のローアングル、孤独感のある俯瞰等々、内容を説明することよりも心理描写に重きを置いた印象のカット。殆ど動かない登場人物たちによるモノローグなので、単調にならないまま25話一気に流れるのはとても凄い


サウンドトラックも買ってしまった。メインテーマがとにかくいい。

ダーリン・イン・ザ・フランキスの劇伴の質感が好き

ドコモ・アニメストアのオススメに従って「ダーリン・イン・ザ・フランキス」を観た。視聴し始めてすぐ惹かれてしまったのだが、コクピットのシーンが卑猥に見えると放送当時話題になった作品だったことには、途中から気がついた。

まとまった分析でもなんでもないものの、個人的に凄く印象に残ったので忘れないうちに感想をとどめておきたい。

湿っぽい劇伴

自分は音楽の知識と語彙力が低く、なんと形容して良いのかわからないが「とても湿っぽい曲が多い」と感じた。

例えば、6:20あたりから紹介あされている「Clarity」 youtu.be

戦闘シーンなどにはもちろんもっと強い曲があるものの、日常のシーンは全体的に暗い。とにかく暗いのだが、この湿っぽい質感に惹かれて、最終話まで数日で観ることになってしまった。

暗いストーリー、彩度が低い画面

そもそもの設定が、閉じられた世界で育てられた子どもという暗さに加え、画面の彩度も低く、全体的に重い。PV第1弾を見るとなんとなくわかってもらえるだろう。

youtu.be

ストーリーを補完する劇伴

少しだけネタバレすると、本作は襲って来る敵との戦いや組織の謎の解明というストーリーラインがありつつも、大半は三角関係のもつれが描かれる。

少し優しくされただけで惚れてしまったり、そもそもなんで男女ペアで戦うのかの納得性もなく、敵の正体なども実は納得いかないまま、プロットについては自分は納得いかなかったのだが、この美しい劇伴と一緒に見せられると時々目頭が熱くなってしまった。

改めて、劇伴の重要性を感じた作品だった。

雰囲気の違うエンディング

そんな重苦しい20分が終わった後に、青春を感じるアイドルグループソングのようなエンディングが流れる。途中何曲か変わっていくのだが、どれも良い曲だ。

youtu.be



裏世界ピクニック

因みに今放送中の作品の中で劇伴が好きなのは「裏世界ピクニック」だ。劇伴というか効果音というか、ホラーなところのある作品なのでとにかく裏世界中のシーンが怖く、怪しい音が続くのがたまらない。

この作品は、主人公の朴訥とした喋り方もまた質感が良い。

youtu.be

機動戦士Zガンダムを見ると自分の不甲斐なさや焦りをつきつけられる

機動戦士Zガンダムは、好きな作品ではないものの、人間、特にダメな人間について正直に描かれた作品だと思う。見ている間に、自分の不甲斐なさを突きつけられて、苦しくなる一方で、時が経つと味が出てくる作品でもある。

登場人物の描写について

具体的にどのようなポイントが視聴者の心をえぐるのか、個人的に感じた4名を挙げるとともに、社会人生活に於いて例えばどういうことなのか?をまとめた。多少ネタバレはあるかもしれないが、鑑賞への興味になれば幸いだと思う。

1)迷惑な子ども

初代ガンダムのカツ・レツ・キッカからカツが活躍する。活躍するのだが、自分の力を過信しいつも文句ばかり言う上に軽率な行動をとり、仲間を危険に晒す。まだ子どもという設定だが色欲にも負ける。

とんでもなく酷い登場人物だが、誰もが若い頃は、組織の上位層に文句を言っていなかっただろうか?だから一層、成長しないカツを見ていて腹が立ってしまうのだ。

2)不貞腐れるメンバー

レコア少尉は、自ら志願して特別任務に就くのだがそこで一切成果を上げることができず戻ってくる。その後、遅れを取り戻そうと再び一発逆転の単独任務に志願するのだが、逆にそれをきっかけに組織への貢献よりも自分がしたいことを優先する割り切りを憶えて離脱してしまう。

最前線の現場を離れたのち、みんなに誇れる成果もないまま出戻って来ることほど格好の悪いことはない。勿論、誰も組織の仲間はそれを避難することはないだろうが(一部の外資系だとクビになるのかもしれないが・・・)、ただただ遅れを取って年齢だけ重ねてしまったことに焦りを感じるのは当然のことだし、居場所がなくなることへの恐怖はみんなあるだろう。もう引用元も思い出せないが、管理職になるべく期待されて留学させて貰っている間に就く予定だったポストを後釜に取られて昇進し損ねたという人の記事を見たことがある。転勤・異動様々な要因で自分のキャリアプランが崩れるということは日常茶飯事で、そこからメンタル面で復帰するスキルも必要なことなのだ。レコア少尉のように一発逆転の任務に就くのもハイリスク・ハイリターンな選択だ。

3)実力をわきまえないもの

ファは、パイロット適性がないものの、カミーユに認められたかったのか、とにかくパイロットになって戦闘に出ようとするが、仲間を危険に晒してしまう。

全く役に立たないわけではないし、やる気があることも良いことなのだが、任せられない人には任せられないこともある。努力家をクビにする必要はないかもしれないが、向いていない人の職種を変更することは管理職の仕事の一つだろう。この手の悪くはないのだが困った人への適切な対応は、多くの人が悩むことだ。また、一方で、自分が足を引っ張っていると自覚しつつももっと役立てるように頑張りたいという気持ちもまた共感するところがあるだろう。

4)自分の人生を生きないもの

サラは、組織方針への共感や自分が生きる糧を得るためではなく、上官が好きだからついて行くし危険な任務に就く。

彼女は、自分を道具の一つ或いはせいぜい手塩にかけた部下の一人としか思っていないのに過度な期待を寄せ、決して報われることのない仕事を続けている。仕事熱心な彼女に好意を寄せるのも子どもだけで、果てはライバルも登場する。本当に可愛そうな登場人物で、まさにやりがい搾取に搾り取られたと言ってもいい。しかし、自分の人生の重要な判断を上官という他人に委ねてしまっている限りは、彼女は、自分の人生を生きないある意味無責任な人物ということでもある。クライアントから感謝されることを生きがいにする営業や褒められることが喜びになっている社員など、似たような屈折した生き方を選択してしまっている人は多いのではないだろうか。特に自分は営業職なので、クライアントに喜ばれることが自分の生きがいと思っていた時期があるが、「それでは利益が出ないし組織に貢献できてない」とローパフォーマーであることに気がついてから、クライアントに感謝されることを自分の喜びと再変換しないように心がけている。

登場人物以外の魅力「ガンダムを宇宙に打ち上げることの重さの描写」

もう1点、Zガンダムに特徴的だと感じた点がガンダムを宇宙に打ち上げることの重さの描写だ。地球に降りてきたガンダムパイロット達を宇宙に再び上げるために、13,14,15,16話と飛んで20話と合計5話を費やしている。その間、どうやって敵の目をくぐってこっそりガンダムを宇宙に上げるかを作戦を練るのだが、これだけ話数をかけて重みを持たせるのは並々ならぬテクニックだ。そして1回目の宇宙打ち上げと2回めの宇宙打ち上げの間に、カミーユとフォウのエピソードが挟まれることで二人の離別がとても大きなものに感じるようになっている。

Davinci Resolve Fusion でテキストによるマスクを作る

Davinci Resolve は無料で使える多機能な動画編集ソフトで、編集・カラコレ・ビジュアルエフェクトなどが出来る。

テキストをマスクにして背景の映像を流す、というテクニックはAdobe After Effectsでも好まれる演出技法だが、Fusionでも勿論できる

準備した素材

背景で動く動画がなかったので、縦に長いグラデーション素材にTransformノードを使って、下から上へ動くようにキーフレームを設定した

f:id:yyhhyy:20201128194956p:plain
1920x2160のグラデーション素材

テキストマスクの設定

Text+で適当なテキストを打ち、MergeノードにBackground(背景、黄色)として繋げる。

MergeノードのApply Modeを「in」にすることで、切り抜きになる。

f:id:yyhhyy:20201128195054p:plain
テキストをマスク化する設定

完成した動画

そのままだと背景が透明なので、グレーのBackgroundを配置した。

youtu.be