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

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

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")

Affinity_Photoで自由変形をする

Affinity Photo でIllustratorPhotoshopのような自由変形をしたいと思っても、中々正しい情報にたどり着けない

f:id:yyhhyy:20201108185818j:plain
Affinity Photo 自由変形 検索結果

  • Affinity Photoには自由変形ツールがない。できるのは回転・縮小拡大・変形のみ
  • Affinity PhotoのiPad版アプリには、フィルタのパースペクティブからできる

など、一見すると自由変形機能がないように見えて諦めかけてしまう、しかし、実際にはちゃんと実装されているので、ここにたどり着き方と使い方をまとめておく

Affinity Photo の自由変形

メッシュワープを使う

Adobeのソフトで自由変形のときに何という機能を使うか?そう「ワープ」で変形する。従って、「Affinity Photo メッシュワープ」などで検索すれば、自由変形するための正しい手法が見つかる

f:id:yyhhyy:20201108190301j:plain
Affinity Photo メッシュワープ 検索結果

メッシュワープを使った変形の手順

画像を配置した後に、画面左下「ツール」の下の方に、パースペクティブとメッシュワープのためのアイコンがある。そこをポインタで長押しすると、サブメニューが表示され、メッシュワープが選択できるようになる

f:id:yyhhyy:20201108190550j:plain
メッシュワープの適応

後は、Adobeのソフトと同様。まず四隅の位置を変更する。

f:id:yyhhyy:20201108190805j:plain
四隅の調整

次に、ハンドルを使って歪んでしまったところを真っ直ぐにする。

f:id:yyhhyy:20201108190951j:plain
ハンドル

全て調整をしたら適応を押して反映させる。

f:id:yyhhyy:20201108191147j:plain
適応

レイヤーに分かれているので、

f:id:yyhhyy:20201108191253j:plain
レイヤー

PSDに吐き出して他人に渡すこともできる。

f:id:yyhhyy:20201108191336j:plain
PSD吐き出し

何故、Affinity Photoに自由変形が無いと誤解されがちなのか?

ノートPCの罠

映像編集ソフトでも画像加工ソフトでも起きる現象だが、ノートPCの画面表示において、メニューの表示が多いソフトウェアについては、全てのツールが表示されない場合がある。

例えば、時分のノートPCだとデフォルト表示では、左下のメッシュワープツールが出てこない。

f:id:yyhhyy:20201108191804j:plain
デフォルトの表示

従って、ツールバーを一時的に非表示にするか

f:id:yyhhyy:20201108191955j:plain
ツールバーの表示

ディスプレイの設定で、拡大率を下げる(画面では150%(推奨)から125%に変更すると、ツールが全て表示された)などの対応が必要である。

f:id:yyhhyy:20201108192058j:plain
ディスプレイの拡大・縮小


今回使った画像は全て自分で撮影したもの。Before afterを貼っておく

f:id:yyhhyy:20201108192308j:plain
befiore

f:id:yyhhyy:20201108192338j:plain
Insert

f:id:yyhhyy:20201108192357j:plain
After

TVCMが昨対比を何%押し上げたか?をGoogle Spread Sheet やEXCELで(敢えて乱暴に)分析する

「テレビCMやったけどさ、どんだけ効果があったのよ?」と質問されたときにどう回答するのが適切だろうか。

データ分析ができる人にとってはデータさえ揃えば難しい話ではない。投下したTVCMのGRPを説明変数として売上なり申込件数を目的変数とした予測モデルを作れば良い。しかし、データ分析の素養がない人に予測モデルの式本体を見せたところでチンプンカンプンだろうし、報告する人が普通の人だった場合、RやPythonモデリングしろ、というわけにもいかない。

例えば、緊急事態宣言下の4月にオンライン教材を売っていた企業が、TVCMを放映してみたエリアと放映してみなかったエリアでA/Bテストしていたとしよう。1 その場合、どのようなデータ分析をすればよいか考えてみたい

モデルの検討

報告すべき情報、わかりたい情報を決める

売上を予測するモデルを作ることも、TVCM効果の有無を検定する方法もあるだろう。しかし管理職以上は統計学もデータ分析の素養はないし、効果は”量的に”把握をしたいだろう。そして今回のケースは、「それって緊急事態宣言の影響もあるんじゃない?」とか「そもそも今年がオンライン学習元年でよそも伸びてない?」と指摘されるだろうから、それとも区別したい。

そこで、 昨対比で申込件数が何%あがったか を求めることにした。

取得できるデータを確認する

今回入手できる情報は、"各県で緊急事態宣言があったかどうか"と"TVCMを放映したかどうか" といういずれもゼロと1の数値。そして、本年度の申込件数と昨年度の前年同期の申込件数だ。2

f:id:yyhhyy:20200815212637j:plain

手法を決める

今回はEXCELGoogle Spread Sheetで可能な作業として、「線形の重回帰分析」とした。

  • 目的変数:申込件数の昨対比(本年度の申込件数/昨年度の申込件数*100:→%にした)
  • 説明変数:「TVCM放映の有無」と「緊急事態宣言の有無」
  • 切片:あり

これはハッキリ言って嘘である。

「y = a1x1 + a2x2 +b」といったお互いに独立の変数が線形で関係している、という式を検討しているわけだが、昨対比などというものは、

  • TVCMも緊急事態宣言もあった場合:a1 * a2倍(%)
  • TVCMを放映し緊急事態宣言がなかった場合:a1倍(%)
  • TVCM放映がなく緊急事態宣言はあった場合:a2倍(%)
  • TVCM放映がなく緊急事態宣言もなかった場合:1倍(100%)

というわけだから、2つの変数が「足し算」になっているはずがない。

とはいえ、掛け算を足し算に戻すには、対数を取らなければならないし、対数変換についてこれる文系役員などそうそう居ない。3 かといって再び「昨対比」を避けてしまうと、

「本年度の申込件数/一定人口辺り=昨年度の申込件数/一定人口辺り + TVCMが加えてくれる件数 + 緊急事態宣言が加えてくれる件数 + その他の要因」

という効果の量的なイメージが判断し辛いものが出来上がる4

だが、この手法であれば、TVCMと緊急事態宣言の効果は一応別々で出てくるし、EXCELGoogle Spread Sheetで結果が出てくるのだから、よくわからない人でも見様見真似で算出することができる。

分析の実際

Google Spread Sheetの作業

  • LINEST(目的変数の列,説明変数の列群,定数項の有無,出力結果の詳細の有無)

をシートに入力する

今回の場合は、

  • 目的変数:昨対比
  • 説明変数の列群:TVCM放映の有無 と 緊急事態宣言の有無

f:id:yyhhyy:20200815222551j:plain

となる。

結果の見方

このような出力が出てくる。重要なところに色付けをした。

f:id:yyhhyy:20200815222648j:plain

99.3 は切片に当たる。昨対比を%表記にしたので切片は本来100であるべきだが少しずれている。

31.3は一つめの変数「TVCM放映の有無」に掛かる係数だ。「TVCM放映は、約31%押し上げる効果があった」と読みとける

11.7は二つ目の変数「緊急事態宣言の有無」に掛かる係数で、「緊急事態宣言があったエリアでは、約12%押し上げることになった」と読める。

もう1箇所網掛けした0.994は、これらの変数2つによって目的変数(の分散)を約99%は説明できている、と解釈する。

なお、Google Spread Sheet のLINEST関数の出力はかなり直感に反している。1つ目の変数の係数→2つ目の変数の係数と左から並んで欲しいものだが、なぜか右から、切片→1つ目の変数→2つ目の変数の係数と並ぶ。わりと面倒だ。

その他の出力の値に興味がある人は公式ドキュメントを参照してほしい

support.google.com

EXCELの場合

EXCELにはもう少しグラフィカルインターフェイスな機能がある。EXCELの場合は丁寧にまとめている人が多いので割愛する。

sigma-eye.com

今回のデータを作った方法

EXCELで乱数を発生させた。

  • TVCM放映の有無と緊急事態宣言の有無:RANDBETWEEN(0,1)
    • ゼロと1の乱数を発生させてくれる。
  • 2019年度の申込件数:RANDBETWEEN(100,150)
    • 使用する関数は同じ。数値の上下を変えた

効果の数値設定と目的変数の作成

TVCMの効果を1.3倍、緊急事態宣言の効果を1.1倍として、

  • TVCM効果:IF(TVCM放映の有無=1,1.3,1)
    • 放映があった場合は1.3、なければ1を掛け算したいため
  • 緊急事態宣言効果:IF(緊急事態宣言の有無=1,1.1,1)
    • 放映があった場合は1.1、なければ1を掛け算したいため

という新たな変数を作り

  • 2020年度の申込件数:ROUND(2019年度申込件数TVCM放映効果緊急事態宣言効果+RANDBETWEEN(-2,2),0)
    • 昨年度の申込件数にTVCM放映効果と緊急事態宣言効果を乗算、更に2件程度は上下にブレるように乱数を加えた上で、最後に小数点以下四捨五入している

を求めている。こんな感じだ。因みにリロードしてしまったので上で貼り付けた数値と乱数がまた更新されている。

f:id:yyhhyy:20200815225134j:plain

先程はかなり乱暴に線形の重回帰分析モデルにしてしまったのだが、31%や12%は上振れしているものの、そこまで真の値からは離れていない。統計学者やデータサイエンティストからすれば余りにも気持ち悪い話かもしれないが、"偉い人に普通の人が効果を説明する" 行為を日常的に行うことがデータドリブン経営なのだということとなると、この程度のいい加減さを我慢しないといつまでも組織として根付くことはないのではないだろうか。この先、データ分析の教養がある学生が社会人になってくれるようになれば話はべつかもしれないが、その間、今の20代~60代の文系社会人が何もしなくて良いということにもならないだろう。5


  1. 極めて当たり前だが、放映しなかったエリアが存在しなければ効果検証できない。そして多くの日本企業のマーケティング・プロモーションは、事前の効果検証もせずに一発で一か八かの勝負をするので、"TVCMを放映しないエリア"なんてものが存在しないことの方が寧ろ多い。この問題の根本原因はデータ分析リテラシーの欠如ではなく、「スケジュールに余裕がなくなるレベルの組織の意思決定の遅さ」「A/Bテストによって発生するエリア別の不公平を許容できないビジネスモデルや取引先との力関係」などの方だ。

  2. 簡単のため各エリアの人口は同じだとしている。実際には人口○○人辺りや、ターゲット○○人辺りなどにすればよい。

  3. 現実には多項ロジスティック回帰分析をしたいことも多いし、対数変換を避けてでも嘘をつくべきかは非常に悩ましい。

  4. 本当を言うとStanを使ってシミュレーションしてしまえば、効果量を設定して推定値を出せば良い。データ分析がわかる自分が毎回計算してあげれば良い、ということであればこれで構わないし、自分が効果の程を把握したいだけならそれで充分だ。だが組織としてそれで良いのか?というとそうではないだろう。

  5. “文系に統計学の教養がない"という前提も実は嘘だ。心理学・社会学では日常的に使うし、最近は経済学部でも因果推論という名称で社会学的アプローチを参照し始めている。更には文学部でも文献をデータ分析して文書の著者を推定するなど統計学をフル活用する分野もある。とはいえ、理系でデータ分析を使わないのは建築学部のデザイン系だとかかなり限られていると思うので、総じて文系がビジネスパーソンとしての教養不足で苦しむことになると思う。

ワークマンの「高機能・低価格」に至る構造の図解

最近読んだこの本は、とてもよく取材された良い本でした。

本書で学んだ詳しいことを記載すると本が売れなくなってしまうので、読後に整理した図解を貼るにとどめます。

f:id:yyhhyy:20200723200330p:plain
ワークマンにおける「より良いものを、より安く」の仕組み

書籍のタイトルはキャッチーにするために、あたかも小手先の対応で売れ行きを伸ばしたかのようにミスリードしていますが、中身を読むともっと深いことが分かります。

「より良いものを、より安く」とは汎ゆる業界で言われていることだと思いますが、実現することは容易ではありません。多くの大企業は研究開発と言っても外部のサプライヤーと共同開発している筈ですので、如何に協力関係を結べるか?というマネジメントやコントロールの技術(俗な言い方をすると”ソフトスキル”)が重要になってきます。

人間は群れをなして知恵を伝承することで他の生物に勝ってきた生物ですので、如何に群れ全体の効率化をはかることができるか?というスキルが、個人のスキルアップより遥かに重要です。

キーワードプランナーで大量に取得したキーワード情報Pythonで簡単に集約する

Pythonが例えばどういうときに役に立つか?という事例として、広告のターゲティングやバナーに必要なキーワードをリサーチする場合を考えてみます。

キーワードプランナー

バナーの訴求文言やサーチターゲティング等のキーワードを考えるときに、自分の頭だけで考えるのは賢くありません。先ずは既に存在する競合サイトを分析したり、競合のバナー出稿を確認したりするべきです。

広告会社であれば何かしら競合バナークリエイティブを収拾しているサービスと契約していると思いますが、そのような手段がない場合、少なくともGoogleのキーワードプランナーは誰もが無料で使えるサービスです。

ads.google.com

細かい数値を得るには広告出稿が必要ですが、概算値で良ければその必要はありません

キーワードプランナーで競合サイトの分析をする

例えば自分が人事組織関連のSaaSを提供していたとします。 私はこの分野のことは担当したことがないのでどこが一大勢力なのか知りませんが、

boxil.jp

boxil.jp

などを参考に仮想で競合となる企業のサイトを選定しました

キーワードプランナーの「新しくみつける」からURLをコピペして、候補を探すと、直近1ヶ月等の検索ボリュームが計測できます。

f:id:yyhhyy:20200208155654j:plain

ディレクトリ全体やページ単体指定を必要に応じて使い分けながら、ロボット的に大量に競合となるサービスのURLを押してはリストをダウンロードしていきます。

f:id:yyhhyy:20200208155738j:plain

f:id:yyhhyy:20200208155754j:plain

10ファイルくらいになりました。

f:id:yyhhyy:20200208155807j:plain

もっと真面目に探すと恐らくもっとファイル数は増えるでしょう。 これをエクセルで一枚一枚開いてセルに貼り付けるのは意外と時間がかかります

Pythonを使って簡単な前処理をする

ディレクトリ内のデータをロボット的に読み取る

ファイル数が多い場合、一つ一つファイル名を記述して指定することは非効率です。

globライブラリのglob関数を使いフォルダ内のCSVファイル情報をワイルドカード指定で一覧を取得します。

使い方に不慣れだったので幾つかのブログを参考に使い方を確認しました。

note.nkmk.me

qiita.com

import glob
files = glob.glob('data/*.csv')

これで一覧が取得できました

(files)
['data\\Keyword Stats 2020-02-08 at 14_43_20.csv',
 'data\\Keyword Stats 2020-02-08 at 14_43_43.csv',
 'data\\Keyword Stats 2020-02-08 at 14_44_08.csv',
 'data\\Keyword Stats 2020-02-08 at 14_44_31.csv',
 'data\\Keyword Stats 2020-02-08 at 14_46_29.csv',
 'data\\Keyword Stats 2020-02-08 at 14_48_12.csv',
 'data\\Keyword Stats 2020-02-08 at 14_48_51.csv',
 'data\\Keyword Stats 2020-02-08 at 14_49_14.csv',
 'data\\Keyword Stats 2020-02-08 at 14_49_37.csv',
 'data\\Keyword Stats 2020-02-08 at 14_49_53.csv',
 'data\\Keyword Stats 2020-02-08 at 14_50_56.csv',
 'data\\Keyword Stats 2020-02-08 at 14_51_33.csv',
 'data\\Keyword Stats 2020-02-08 at 14_52_47.csv',
 'data\\Keyword Stats 2020-02-08 at 14_53_11.csv',
 'data\\Keyword Stats 2020-02-08 at 14_53_23.csv',
 'data\\Keyword Stats 2020-02-08 at 14_53_36.csv',
 'data\\Keyword Stats 2020-02-08 at 14_53_46.csv',
 'data\\Keyword Stats 2020-02-08 at 14_54_19.csv']

空のリストを作り、データフレームとして読み込んではリストに追加。最後に1つのデータフレームとして結合します。

この発想はこちらのサイトを参照させて頂きました。

[http://pidgeott0.com/engineer/816/:embed:cite]

list = []
#import numpy as np
import pandas as pd
for f in files:
    list.append(pd.read_csv(f,encoding="utf-16",header=0, skiprows=2,sep='\t'))
df = pd.concat(list)

なおGoogle系のサービスでありがちなのですが、文字コードが「utf-16」と特殊です。私は最初これに気がつくまで随分とかかりました。 また冒頭に説明行が入っているので、2行スキップします。

また、CSVファイルのフリをしていますが、タブ区切りなので区切り文字としてタブを指定する必要があります。

df.head()
Keyword Currency Avg. monthly searches Min search volume Max search volume Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share ... Searches: Mar 2019 Searches: Apr 2019 Searches: May 2019 Searches: Jun 2019 Searches: Jul 2019 Searches: Aug 2019 Searches: Sep 2019 Searches: Oct 2019 Searches: Nov 2019 Searches: Dec 2019
0 リンク アンド モチベーション クラウド JPY 該当なし 10 100 14.0 177.0 815.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 リンク アンド モチベーション モチベーション クラウド JPY 該当なし 10 100 17.0 281.0 1217.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 motivation cloud JPY 該当なし 100 1,000 20.0 599.0 2235.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 モチベーション クラウド と は JPY 該当なし 100 1,000 23.0 127.0 2160.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 モチベーション cloud JPY 該当なし 10 100 36.0 281.0 1143.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 26 columns

len(df)
9379

9000行からなるリストになりした

データを絞り込む

9000件、指定するわけいにもいきませんし、この中には重複もあります。 サーチボリュームが小さいものは削除すべきでしょう。

df.dtypes
Keyword                          object
Currency                         object
Avg. monthly searches            object
Min search volume                object
Max search volume                object
Competition                      object
Competition (indexed value)     float64
Top of page bid (low range)     float64
Top of page bid (high range)    float64
Ad impression share             float64
Organic impression share        float64
Organic average position        float64
In account?                     float64
In plan?                        float64
Searches: Jan 2019              float64
Searches: Feb 2019              float64
Searches: Mar 2019              float64
Searches: Apr 2019              float64
Searches: May 2019              float64
Searches: Jun 2019              float64
Searches: Jul 2019              float64
Searches: Aug 2019              float64
Searches: Sep 2019              float64
Searches: Oct 2019              float64
Searches: Nov 2019              float64
Searches: Dec 2019              float64
dtype: object

ここでまたトラップですが、「Min search volume」「Max search volume」ともに数値ではなくオブジェクトとして認識されています。

df["Min search volume"] = df["Min search volume"].astype(str).str.replace(',','').astype(int)
df["Max search volume"] = df["Max search volume"].astype(str).str.replace(',','').astype(int)
df.dtypes
Keyword                          object
Currency                         object
Avg. monthly searches            object
Min search volume                 int32
Max search volume                 int32
Competition                      object
Competition (indexed value)     float64
Top of page bid (low range)     float64
Top of page bid (high range)    float64
Ad impression share             float64
Organic impression share        float64
Organic average position        float64
In account?                     float64
In plan?                        float64
Searches: Jan 2019              float64
Searches: Feb 2019              float64
Searches: Mar 2019              float64
Searches: Apr 2019              float64
Searches: May 2019              float64
Searches: Jun 2019              float64
Searches: Jul 2019              float64
Searches: Aug 2019              float64
Searches: Sep 2019              float64
Searches: Oct 2019              float64
Searches: Nov 2019              float64
Searches: Dec 2019              float64
dtype: object

これで整数に変わりました

数値に変換できたことで、絞り込みが可能となります

df_select_1000 = df[df["Min search volume"] >= 1000]
df_select_1000.head()
Keyword Currency Avg. monthly searches Min search volume Max search volume Competition Competition (indexed value) Top of page bid (low range) Top of page bid (high range) Ad impression share ... Searches: Mar 2019 Searches: Apr 2019 Searches: May 2019 Searches: Jun 2019 Searches: Jul 2019 Searches: Aug 2019 Searches: Sep 2019 Searches: Oct 2019 Searches: Nov 2019 Searches: Dec 2019
8 the team JPY 該当なし 1000 10000 54.0 42.0 66.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
87 hr tech JPY 該当なし 1000 10000 31.0 433.0 1026.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 ラフール JPY 該当なし 1000 10000 0.0 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 wevox JPY 該当なし 1000 10000 16.0 399.0 958.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 geppo JPY 該当なし 1000 10000 15.0 502.0 656.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 26 columns

len(df_select_1000)
159

これで150行です。玉石混交ですのでこれくらいから絞り込むのは目視が良いでしょう

キーワードだけ取り出して、重複を排除すればキーワードリストの完成です。

pd.DataFrame(df_select_1000["Keyword"].unique())
0
0 the team
1 hr tech
2 ラフール
3 wevox
4 geppo
... ...
124 タイム カード アプリ
125 indeed 求人 掲載
126 勤怠 管理 アプリ
127 タイ 求人
128 タッチ オン タイム ログイン

129 rows × 1 columns

目視の際はエクセルかCSVで見るのが良いでしょう

pd.DataFrame(df_select_1000["Keyword"].unique()).to_excel("df_select_1000.xlsx")

人間の心は社会的に決まるということについての読書案内

最近はグローバルで活躍しかつSNSで情報発信をしていただける方が増えました。その為、日本の常識は海外では非常識ですよ、と教えてくれる人も増えてきました。

一方で、「海外では」とひと括りに言っても、「自分の行った海外では」という話であって、民族によってかなりバラツキのある話で、アングロサクソン系なら全部一緒だろう?と考えるのもかなり的外れです。人の心は社会的に決まるもので、所属する集団の社会規範に大きく左右されるものです。

丁度最近読んだ本でとてもわかりやすい本がありました

読書案内

ビジネスパーソンの視点

異民族同士の混成チームのマネジメントをコンサルティングされる方が長年、ビジネスの組織で実体験してきた事例の総まとめのような本。

特に企業内で上司と部下がどのようなコミュニケーションスタイルを望むか?という視点で情報を集めた本は少ないので重宝するかと思います。(私は生憎ドメスティックな会社に勤めていますので、ただの教養にしかなりませんが) 国別にどういうフィードバックを好むか?どういう時間意識を望むか?は千差万別で、聴衆が盛り上がっているのに公演時刻ピッタリに終えてしまうと「失礼だ」と捉える国の事例など、なかなか予め知っていないと対処が難しいことも多いでしょう。

学者の視点

ヒトとそれ以外の霊長類の大きな違いは何か?という点で、ヒトは技術を集団で記憶し伝承することで身体能力の一部を外部化してきた点に着目した本。

合理的な判断能力では人間はチンパンジーに負けるそうですが、人間は特に他人を模倣する癖がついていて、合理的な判断をせずに他人を真似るケースが他の霊長類より多いそうです。単独では狩りもできませんが、先人が鏃の作り方を伝授してくれるので集団としては強くなる、というモデルで人間は生き残ってきたようです。

例えば、複雑な調理工程をしないと毒素が抜けない食料品を食べてきた民族では、化学的な理由を理解をせずに”昔からこうやってきた”という調理工程を守らないと死んでしまうので、所属集団のルールを守る能力というのは死活問題になってきます。そういった人間の特徴を踏まえると、どれほど村八分が気持ち悪い風習に見えたとしても、村八分こそが人間が生き残ってきた強みであったのであれば避けようがない本能だ、ということが理解できるでしょう。

教養本としても面白いですが、チームに伝承しないスーパーマンが多い集団よりも、そこそこの能力ではあるが他人に伝承できる人が多い集団の方が、数世代経った後のチームとしての技術では後者の集団の方がスキルアップしているというモデルは企業体にも応用できる話ですし、”他人から尊敬されている火を尊敬したくなる(某本の”錯覚資産”)ことは人間の本能である”ということがわかれば、著名人に推奨して貰うと何故商品が売れやすいのか?といったプロモーションの経験則にも納得感が出てきますし、応用範囲の広い本です

ライトな本

どちらかというと上記2つの本を読んでからの方が良いかもしれませんが、もっとテクニック論に寄った本としては、藤田田氏の本や、瀧本哲史氏の本もとても参考になります。

藤田田氏の言う、みんなに憧れられているお金持ちから商売を始めろ!という指摘も正に人間の本能に従うと正しいジャッジですし、瀧本哲史氏の紹介する人が協力したくなるパターンについても、如何に自分が集団に認められているか?大切にされているか?を気にするのは人間が必要な生存本能であって、決して承認欲求に溺れた人が単純に愚かな人ではなく、みな平たくそういう気質はあるものだ、と理解することができます。

人の心が動くポイント

特に、テクニック論的な藤田田氏と瀧本哲史氏の本を読んで感じるのは、人間社会の原動力の多くは、合理性よりも情動的な意思決定ではないか?という点、ごくごく一部の”人気のある著名人”同士のコネクションで社会が動いているのではないか?という点です。

顕著な例は生き残った楽天と巨大化しそこなったライブドアグループで、経団連の偉い人に仲間だと思って貰えたかどうかで結末は変わりました。別にライブドアが球団を買っていてもおかしくなかったのでしょうけれど、偉い人に筋を通さずに行ったことで、味方が現れませんでした。 他にも瀧本哲史氏の本に出てくるのですが、「どうしてもこれを私はやりたいんだ」という熱意が伝わってJALの音声コンテンツに採用されたベンチャーが”JALに採用された’実績”を引っさげて、信用力を固めていった事例の紹介もわかりやすいと思います。この場合の説得はたまたま熱意ということでしたが、合理的な判断だけの連続であれば追い払われていたことでしょう。

という本も非常に面白いエピソードです。スポーツ界のフィクサーのような数人が大きなイベントのお金の流れを決定づけています。

これらはあくまでも例示に過ぎませんが、「アイデアを思いつく人は無限にいる」「実行する人は少ないがそれでも沢山いる」「やり遂げられた人が少ないのだ」とはよく言いますが、重要な局面で非合理的なジャッジをどれくらい乗り切ることができたか?ということが重要なのではないかと思います。

合理的な判断ではない意思決定をAIが促進できるようになっとき、始めてAIが「ヒト」に近づいたと言えるでしょう。合理的な判断のサポートをしているうちはチンパンジー止まりということかもしれません。

ffmpegでYahoo!入稿規定用の動画を変換する

動画広告を入稿する際、Youtubeはチャンネルにアップロードするだけですし、Teasもそんなに難しくありません。多くのケースが「mp4 h.264 AAC」程度を守っていれば大丈夫です。

しかし、Yahoo!はそうはいきません。

レスポンシブ(動画) - ヘルプ - Yahoo!広告

  • メジャーブランド:mp42、M4V
  • moov atom位置指定:ファイル先頭
  • 最大ボリューム(db):-3dB以下

など、結構細かい指定があります。

ここまで来ると、動画編集ソフトに付随している書き出し設定では限界があります。

ffmpegをインストールする

コマンドプロンプトで動画を変換できる便利なソフトです。

Windowsの場合、自分でPATHを通す必要があります。解凍したママですとフォルダ名が長いので、適当に変えておくほうが良いでしょう。

web.plus-idea.net

実行するコマンド

結論から言うと、以下のようおなコマンドをコマンドプロンプトで打つことになります。

  • before.mp4 が、変換したい元の動画ファイル名
  • after.mp4 が、変換した後の動画ファイル名

としています

ffmpeg -i before.mp4 -brand mp42 -af loudnorm=I=-24:TP=-3:LRA=1 -movflags +faststart -profile:v baseline -level 3.0 -s 640x360 after.mp4

以下に、それぞれのオプションの説明をします

アスペクト比を変える

-s 640x360

のオプション部分です。

Yahoo!では解像度を下げさせられるケースが多いです。

qiita.com

ベースラインを変える

-profile:v baseline -level 3.0

多様なデバイスに対応するためにベースラインの推奨を入稿審査で指摘される場合があります。

trac.ffmpeg.org

moov atomを先頭に記述する

-movflags +faststart

moov atomを先頭に記述しなければなりません

nyanshiba.hatenablog.com

音声ピークレベルとラウドネス対応

-af loudnorm=I=-24:TP=-3:LRA=1

ラウドネスの規定があります

x1.inkenkun.com

メジャーブランドをmp42にする

-brand mp42

isomでは受け付けてくれません

superuser.com

確認するコマンドとその他のコマンド

変換したい内容になっているかどうか?を確認するには

ffmpeg -i after.mp4

と入力ファイルの指定だけして出力を指定しなければ、内容が記述されます。

その他にももっと色んなことができるソフトであることを知りました。これはとてつもなく便利なソフトですね。

qiita.com

qiita.com


クオリティを下げて兎にも角ファイル容量を小さくしたいときは「-crf」オプション

0-63

www.84kure.com

静止画連番の吐き出し

kinacon.hatenablog.com