乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

プログラミング

とある女優さんが
やらかしましたが

これからの時代は
代役に顔を差し替えて放送できる時代が
やって来るんではないかと思います。

沢尻エリカさんを
山本舞香さんに変えてみました。

これなら
来年の大河ドラマも放送できるよーwww

解説動画はこちら


はい
と言うことで

やり方を簡単に説明します。

まずは動画を静止画に切り出します。

opencvを使えば
動画から静止画に
変換できます。

切り出し方は
次のようなコードで行うことができます。

import os
import cv2

def get_frame_img(video_path, dir_path, basename, ext='jpg'):
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        return

    os.makedirs(dir_path, exist_ok=True)
    base_path = os.path.join(dir_path, basename)
    digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))))

    n = 0
    while True:
        ret, frame = cap.read()
        if ret:
            cv2.imwrite('{}_{}.{}'.format(base_path, str(n).zfill(digit), ext), frame)
            n += 1
        else:
            return

get_frame_img('IMG/sawaziri.mp4', 'IMG/sawaziri', 'sawaziri')

これでmp4ファイルを
jpgファイルに切り出します。

次にこのファイルたちの顔を入れ替えます。
入れ替える所は自作で作りましょうwww

入れ替えたらそれを動画に連結します。


下記のようなコードで
行うことができます。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig =plt.figure(figsize=(16,9))
ims = []
for a in range(9,18):
    img = face_swapping2('IMG/yamamotomaika3.jpg','IMG/sawaziri/sawaziri_{:02}.jpg'.format(a))
    line = plt.imshow(img)
    ims.append([line])

ani = animation.ArtistAnimation(fig, ims)
b = ani.save('anim.mp4', writer="ffmpeg")

さて出来上がったmp4を表示するのは
from IPython.display import HTML
HTML(ani.to_html5_video())

このようなコードになります。
これでjupyter notebook上でみることができます。

素材をきちんと撮れば
違和感のない形で
スワッピングできるのではないかと
思いますね。

今後は
ドラマなどで撮り終えてしまったものも
こういった技術が発達すれば
代役にすぐに差し替えて
放映することができるように
なるんじゃないかと思いますね。

自分のプログラムは
まだまだ発展途上ですが

普通に差し替えできる
未来が待っていることでしょう。

皆さんも
自作して
ぜひ試してみてください。

それでは


今回は

GIGAZINEさんに載っていた

音楽データからボーカル・伴奏の音を抽出できる

spleeterを使ってみました。


解説動画はこちら




さて
導入方法ですが

まずはPython環境がないといけません。

Pythonをインストールしましょう。

Anacondaなどでインストールしておくと
良いと思います。

次に
spleeter本体ですね。



こちらからダウンロードしましょう。

gitコマンドの場合は
こちら
git clone https://github.com/Deezer/spleeter

そして依存関係のある
ソフトウェア群のインストールですが

mac向けです。
Windowsの方は個別に調べて下さいませ。
!brew install wget
!brew install ffmpeg

pip install ffprobe
pip install spleeter
macではffmpegが必要でした。
brewなどでインストールしましょう。

gitでダウンロードして来たら
notebookファイルもあると思います。
スクリーンショット 2019-11-10 16.03.00

spleeter.ipynb

を開いてみましょう。


ノートブック上ではサンプル楽曲も試せます。
from IPython.display import Audio
Audio('audio_example.mp3')

これを楽曲とカラオケに
分離していきます。

分離はコマンド実行で行います。

spleeter separate -i 楽曲ファイル名 -o 出力先ディレクトリ/
!spleeter separate -i audio_example.mp3 -o output/

先に出力先ディレクトリは作成しておきましょう。

うまくいけば
・ボーカル
・カラオケ
ファイルに分離されます。

出力先(output/audio_example)に
accompaniment.wav
vocals.wav
が出力されています。

できたものの確認は
Audio('output/audio_example/vocals.wav')
Audio('output/audio_example/accompaniment.wav')

これを聞く限りだと
ボーカルはかなりの精度でうまく抽出できています。

カラオケは少しシャリシャリしている部分があるものの
カラオケ用なら普通に使えそうなレベルですね。

なかなか面白いプログラムだと思います。

機械学習を用いて
ボーカルやドラムなどの音色を判別して
抜き出ししていると見受けられます。

こう言う使い方は
実に面白いですね!!!

自分は音楽制作もやっていたりするので
ボーカル抜き出しは
色々遊べそうなので
今後も使っていきたいと思います。

今回はここまでです
それでは。 

水曜日のダウンタウンが大好きなので

勝手にグランプリ開催です。

2019年度の説の中で
誰が一番面白かったのかを決めたいと思います。

解説動画はこちら




さてまずは
2019年度の放送データですね

頑張ってデータ化したので
貼っておきます。
面白い日付プレゼンター
020190109ハッピーバースデーの歌 ちょっと長い説バカリズム
020190109霊感強い女 ブス説小木
020190109190cm以上の日本人に犯罪者いない説河合俊一
020190109コンビニ定員で実際にカラーボールを強盗に当てた事ある人 存在しない説田村亮
020190109かるたの「る」の札 やっつけ説伊集院光
020190109夜の10時半過ぎの新幹線 グリーン車に乗ってるサラリーマンの8割はエロ動画見てる説フット後藤
120190109オネエタレント 雰囲気が面白いだけで本当は何ら面白いこと言ってない説藤原
020190109「イマル」という名前 IMARUが最初説IMARU
020190109「ブンブン」サウンドシステム鳴らしてる車でかかってる曲 ダサい説Bose
020190109美味しいカレーを作れる人は カレー屋さんよりバーで出した方がいい説矢作
020190109小さい女性はエロい説矢口
020190109土砂崩れ止めとワッフル どっちが先なのかみうらじゅん
120190109浜田に下の名前で呼ばれる女性タレント巨乳説指原
120190109めちゃくちゃ喉が渇いてたらセンブリ茶でも気付かず飲める説高山一実(乃木坂46)
020190109親戚辿ったら 1人はAKB存在する説入山杏奈(AKB48)
020190109女芸人に「カワイイじゃないですか」って言うアイドル クソ説いとうあさこ
020190109インスタのフォロワー買ってる芸能人 意外と多い説重盛さと美
020190109パンツ穿き続け対決を今のダウンタウンにやって欲しい宮川大輔
020190109遊んでいた男ほど 娘に厳しくなる説高橋真麻
020190109俺はメガネをいっぱい持ってると思われてる説具志堅用高
020190109ハトの大きさ みんな同じ説つるの剛士
020190109同じスポーツやってる兄弟 弟・妹の方が強い説杉山愛
020190109車に熊出没注意のステッカー貼ってる人絶対フリートークつまんない説土田晃之
020190109浜田 収録合間の動きが怪し過ぎる説陣内智則
020190109「噂の!東京マガジン」日本一 白髪の多い番組説千原ジュニア
020190109コンビニのエロ本売り場が広い地域 原チャリが多い説千原せいじ
020190109いかがわしいお店のタイマー ほぼりんごの形説ロバート秋山
020190109あき竹城 私物に何でも名前 書いてる説濱口
0201901097は3画説ジミー大西
020190109先輩が帰ったあとの後輩 絶対 悪口言ってる説宮迫
020190109若手漫才師 間に耐えられない説富澤たけし
120190109漫才の客席に元カノがいたら間がズタズタになる説博多大吉
020190109芸能人のゴシップを一番知ってるの音声さん説コカドケンタロウ
120190109女性の好きな女性芸能人を聞くとちょっと自分に似ている人を挙げる説柳原可奈子
020190109松本 吉本の社長になろうとしてる説今田耕司
120190116芸人なら どんなにキツめの設定背負わされてもつい乗っかっちゃう説小藪
120190116モノマネ芸人だったら 初めてのモノマネでも伝言ゲームで最後まで伝えられる説ダイアン
1201901161つのメニューのみでやっている店どんなジャンルにも存在してる説春日
120190116ミスター押忍の「押忍」でBINGO出来る説春日
0201901301時間に1回泣かないといけない生活泣けるアイテムが充実していてもしんどい説サバンナ高橋
020190130クマ倒したジジイ-1GP春日
120190130ドッキリのネタばらし架空の番組名を言われてもつい知ったかぶりしちゃう説たむけん
020190130結局一番クサいモノ○○説たむけん
120190206ロケ中にタレントを撒くことなど容易説 第2弾サバンナ高橋
020190206自転車の上でも 人はなんとか生活できる説小宮
020190206ミスター押忍の「押忍!空手道」 第2弾博多大吉
120190213IKKOとチョコレートプラネット松尾、もはや身近な人でも声聞き分けられない説麒麟川島
020190213奇人芸人No.1決定戦ダイアン
020190213仙人みたいなおじいさんの笑い声「フォッフォッフォ」説たむけん
0201902202018年ドッキリにかけられた芸能人ランキング小峠
020190220悲鳴-1 グランプリ陣内智則
020190220日本一髪が長い男芸人、トム・ブラウン布川説アルコ&ピース
020190220DISIRE 合いの手選手権アルコ&ピース
120190227家に人が山ほど隠れていても意外と気付かない説サバンナ高橋
020190227芸人解散ドッキリ師匠クラスの方が切ない説小藪
020190227飲食店に貼ってあるサイン最古のモノはもはや真っ茶色説たむけん
020190227外国人に「浜田と松田どっちがゴリラに似てる」と聞いたら意外と松本と答えるんじゃないか説たむけん
120190306逆挨拶チャレンジ庄司
0201903064世代対抗リレーさらば青春の光 森田
020190306自分の楽屋であってもキス現場目撃したらとりあえず謝っちゃう説さらば青春の光 森田
020190306ガンコな汚れ-1グランプリアンガールズ田中
120190313「いい意味で」をつければどんな悪口でも怒られない説バカリズム
020190313未だにバイトしてる最も芸歴が長い芸人リットン調査団説小峠
120190313三つ巴 盛り上がる説パンサー
020190320しあわせあかつ計画説タイトル100個暗記できたら100万円たむけん
120190327愛煙家 喫煙所までの道のりがどんなに困難でも向かっちゃう説千鳥
020190327なにやら占い師に傾倒し始めた相方が改名を訴えてきても応じられない説小藪
020190327打ち合わせ相手の名前聞いた直後なのに答えられないようでは芸能人並びに社会人失格説チョコプラ
120190403「お前が歌うんかい!」のパターン、ツッコミ芸人ならどんな状況でも一発でツッコめる説ハリセンボン
020190403説教中の「帰れ!」額面通り受け取るわけにはいかない説ナイツ
020190403忘れられない不気味なファンレター、芸能人なら1つはある説たむけん
120190410早弁先生 第3弾麒麟川島
020190410アスリートが仕掛け人のドッキリ大根すぎて逆に面白いんじゃないか説 第2弾三四郎小宮
020190410達人であっても背後からの気配実際に感じること不可能説たむけん
020190424笑いや驚きで飲み物吹き出させるの現実にはかなり難しい説サバンナ高橋
120190424空気砲、色が付いてなければ不可避説チョコプラ
020190424立ちっぱなしと座りっぱなし、意外と座りっぱなしの方がしんどい説アルコ&ピース
020190424池谷直樹式の腕立て伏せ、池谷直樹が最強説アルコ&ピース
120190508新元号を当てるまで脱出できない生活麒麟川島
120190515日本生活が長い外国人でも、めちゃくちゃ驚いた時の第一声は母国語説霜降り明星
020190515ロッシー、何でも受け入れちゃいすぎておっかない説サバンナ高橋
020190515コワモテ男性、一度は「お前に娘はやらん」と言われたことある説たむけん
020190529街で母親と出会ってもめちゃくちゃよそよそしかったらそのうちスゴく似ている別人だと思い始める説小藪
020190529引っ張って温めるタイプの牛タン弁当の紐が実はパーティのクラッカーになっていても手前で気付きようない説小藪
020190529パチンコ屋店員の休日の過ごし方第1位、パチンコ説小藪
020190529どっちが正解かわからない言い争いの答えを電話で他人に確認して自分の意見が正解だったとき、電話を切ったあとの第一声「ほらー」説小藪
020190529マラソンで優勝したのにゴールの瞬間手を上げない選手などいない説小藪
120190529歌詞の中に出てくる髪型、ポニーテールがダントツ説小藪
020190529起きた時VRの世界だったらめちゃくちゃビックリする説たむけん
020190529めちゃくちゃ怒ればどんな生き物にも怒り伝わる説たむけん
020190529トゲトゲの首輪してるブルドッグ実在しない説たむけん
120190529クロスワードの本買う人、直近の予定ない説たむけん
120190529彦摩呂、マズイ料理もいい感じにディスれる説たむけん
020190529「駄々をこねる」大人がやっても有効説さらば青春の光森田
020190529松尾伴内の似顔絵、ほうれい線描かないわけにはいかない説さらば青春の光森田
020190529小学生が使う漢字ドリル「殺す」の例文は全て「息を殺す」説さらば青春の光森田
020190529「布袋」さんのあだ名100%あの布袋関連説さらば青春の光森田
020190529「ストロング」といえば?20代は「ゼロ」60歳以上は「小林」説さらば青春の光森田
020190529他人のパーカーのフードにこっそり小銭入れていっても1万円くらいまでバレないんじゃないか説さらば青春の光森田
020190605「俺に何か言わなきゃいけないことないか?」とカマかけられたら、ベタに余計なこと喋っちゃう説陣内智則
120190605キャイ~ン1日連動電流生活ずん飯尾
120190605ピッチャーとファーストがマジシャンだったら隠し球で軒並みアウトに出来る説かまいたち
120190612中継先にヤバめ素人が現れてもベテランリポーターなら華麗にさばける説陣内智則
0201906124世代対抗リレー第2弾霜降り明星
120190612説教食らってる時、あの色ナシ臭いアリ空気砲食らってもクサいとは言えない説たむけん
120190619IKKOワード言わせ合い対決サバンナ高橋
120190619プライベート大声選手権春日
1201906194の字固め女性に電話口で伝えるの不可能説スーパー・ササダンゴ・マシン
12019626後輩にめちゃくちゃキレたあと不機嫌な顔を見せづらい先輩の前でおちゃらけを演じなきゃいけない状況 地獄説小峠
02019626女子中高生の人気芸人ランキング、さすがにもうNONSTYLEランク外説平成ノブシコブシ徳井
12019626打ち合わせ中、隣の部屋からカレーの匂いを送り続けたら、その後全員カレー食う説かまいたち
12019626「墓場まで持っていく話」後期高齢者に頼み込んだら教えてもらえるんじゃないか説かまいたち
020190703一声かければ有名人呼び出せる素人、都会なら結構存在する説庄司
020190703おぼん・こぼんでも催眠術さえあれば仲直りできる説たむけん
020190717街中異種ビンゴ大会岡田
020190717そこそこ売れてるのに「あの人は今」系のオファーがきたらショックと不快が半々説麒麟川島
120190717人気がピッタリ3等分のトリオ芸人いない説小籔
120190724芸人なら自分のネタと同じ状況が現実に起きたら完璧にツッコめる説 第2弾陣内智則
120190724地方ならダウソタウソでも意外とバレずにロケできちゃう説ケンドーコバヤシ
120190724トンビがタカを生むにも限界ある説チョコプラ
120190724ナゾに大道具通路を歩かされて、向かいからシルクハットにステッキのコラおじさん風男性が歩いてきたら、めちゃ警戒しちゃう説チョコプラ
120190731大食王vs東大王「大食いクイズ」霜降り明星
020190731おばちゃんファンから逃走中サバンナ高橋
020190807汚部屋アイドル、ヤリにいき放題説サバンナ高橋
120190807鳥のフン、積極的に落とされにいくの難しい説千鳥
020190807一世帯しか存在しないのに跡継ぎがいない崖っぷちの名字、結構ある説たむけん
120190821決めゼリフが封じられた芸人の営業、地獄説ミキ
120190821"リアル“プロゴルファー猿""選手権"陣内智則
120190821色ナシ臭いアリ空気砲第3弾たむけん
020190904曲のサビでちょうど涙は難しい説 第3弾サバンナ高橋
020190904「すべらない話」のMVSトロフィー、絶対家に飾ってある説勝俣州和
020190904タクシー運転手の過去最長走行距離、のっぴきならない事情ある説小峠
120190911ニセ番組「説タイトル」逆算クイズたむけん
020190925ソフトクリーム買った直後に説教食らったら 、食べるわけにいかず溶けて無くなっちゃう説小宮
020190925サインが飾ってある店、よく見ると全く知らない謎の人のサインも紛れてる説庄司
020190925ウザ絡みして旦那を寝かさない女王決定戦ずん飯尾
020191023電話口で「その場で土下座しろ」とキレられても、さすがにしたことにして済ます説サバンナ高橋
020191023愛煙家芸人、タバコに火をつけた瞬間に血相を変えたスタッフから「相方が倒れた」と言われても、そのまま捨てることなくひと吸いはする説陣内智則
020191023「誰でも一つはすべらない話を持っている」なら、街の一般人でもギリ持っている説たむけん
120191030ドッキリ仕掛け人としてクローゼットに隠れてる時、色ナシ臭いアリ空気砲食らっても出ていくわけにはいかない説春日
120191030彦摩呂、海鮮丼のフタを開けて本物の宝石が入っていたらストレートに「宝石箱や」と言うはず説春日
020191030押忍10回クイズ春日
120191030ザ・グレート・カブキ、お茶に見せかけてお酢をドッキリ的に飲ませたらキレイに霧状に吹き出す説春日
120191030ハンバーグこねた手でスナック菓子の袋開けるの不可能説春日
0201910303つの競技でプロになったアスリートいない説春日
120191030クロちゃん、寝て起きてお花畑にいたら死んだと思う説小峠
120191030濡れたナスとイルカの感触一緒説小峠
120191030ビンタされたとこ、そのあと絶対触る説小峠
120191030デヴィ夫人、犬が1匹くらい増えていても気付かないんじゃないか説小峠
020191030ボトルキャップチャレンジ、このタイミングでアップしてるヤツおっかない説小峠
120191030「たむらけん○○」さんのあだ名、全員たむけん説たむけん
020191030TBSのライブラリーにある猪木のビンタだけでドレミファソラシド揃う説たむけん
120191030"歌詞の中で最も“盗んだモノ""バイク説"たむけん
020191030「Toshl」の「i→l」表記に親しんでるXファンなら「Hotel」を「ホテイ」と読む可能性も僅かながらある説たむけん
020191030スタミナ定食だいぶ逸脱したやつが出てきても文句言えない説たむけん
020191030ミニサラダ ミニが過ぎても文句言えない説たむけん


まずはこれをCSVファイルにしてもらい
それを読み込みします。

PythonのPandasで読み込んで
データフレームにしてみましょう。
import pandas as pd
file_path = 'data/水曜日のダウンタウンの説2019.csv'
df = pd.read_csv(file_path)

df.head()

面白い
日付プレゼンター
0020190109ハッピーバースデーの歌 ちょっと長い説バカリズム
1020190109霊感強い女 ブス説小木
2020190109190cm以上の日本人に犯罪者いない説河合俊一
3020190109コンビニ定員で実際にカラーボールを強盗に当てた事ある人 存在しない説田村亮
4020190109かるたの「る」の札 やっつけ説伊集院光

Pandasで読み込みすると
こんな感じのデータになります。

ここから集計をしていきます。

面白いフラグ0,1で
1が面白いとしています。

プレゼンター別にフラグ値別で集計し
打率を出していきます。

打率の計算方法は

面白かった回数(1の数) / 登場回数(0,1の合計)

としています。

また、登場回数として「打席」も設けます。

1回だけ出てそれが面白いだと
打率10割りになってしまうので
規定打席以上の人のみにします。

df3 = pd.crosstab(df['プレゼンター'],df['面白い']).sort_values([1],ascending=False)
df3['打席'] = (df3[1]+df3[0])
df3['打率'] = df3[1] / (df3[1]+df3[0])

これで準備が整いました。

規定打席5回以上として
最終的に打率のよかったプレゼンターは
・・・

・・・

・・・

ジャーン
面白い01打席打率
プレゼンター
春日37100.700000
小峠4590.555556
陣内智則4370.428571
たむけん188260.307692
サバンナ高橋73100.300000
小藪7290.222222
さらば青春の光森田6060.000000

オードリー春日氏に決まりました!!!!!

プレゼンターとしての登場回数10回
うち7回は(俺が)面白いと判定された
説を持って来ていたということで
見事優勝です!!!!!!

どんな説があったかと言うと

面白い日付
371201901161つのメニューのみでやっている店どんなジャンルにも存在してる説
38120190116ミスター押忍の「押忍」でBINGO出来る説
40020190130クマ倒したジジイ-1GP
106120190619プライベート大声選手権
139120191030ドッキリ仕掛け人としてクローゼットに隠れてる時、色ナシ臭いアリ空気砲食らっても出ていくわけに...
140120191030彦摩呂、海鮮丼のフタを開けて本物の宝石が入っていたらストレートに「宝石箱や」と言うはず説
141020191030押忍10回クイズ
142120191030ザ・グレート・カブキ、お茶に見せかけてお酢をドッキリ的に飲ませたらキレイに霧状に吹き出す説
143120191030ハンバーグこねた手でスナック菓子の袋開けるの不可能説
1440201910303つの競技でプロになったアスリートいない説

こんな感じの説が有りました。

独断と偏見による判定のため
異論は大いにあると思いますので

ぜひ上のデータを用いて
面白かったやつにフラグ付けしていただけると
ご自身でもできると思うので
ぜひやってみてください。

それでは。

さて、今回は機械学習のお話です。

一応なんちゃって
MLエンジニアなのでねwwwwwww

食べログさんのお店をデータ化したら
星の予測モデルが作れました。

解説動画はこちら





以前の動画では
食べログ分布というものについて触れました。
前回の記事はこちら食べログ分布は有るのか

今回は
実際に星を予測するモデルを作っていきましょう。

さて
こういった機械学習を用いた
予測モデルを作成するには
まずはデータが必要です。


こちらは
みなさん頑張って集めてみて下さい!!!!!

データとしては
こんなデータです。

スクリーンショット 2019-10-26 21.13.18

コメント数、ブックマーク数や価格
コメントを残した人の星の平均などです。

そして予測をするのは
「星」のデータとなります。


予測モデルの作成に使用したコードは
次のようなコードになります。
import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np

from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
import xgboost as xgb
import lightgbm as lgm

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error

import matplotlib.pyplot as plt
%matplotlib inline


data_df = pd.read_csv('tabelog_star_data.csv')

data_df = data_df[data_df['星']>2.9]

X = data_df.drop(['星'],axis=1)
Y = data_df['星']
x_train, x_test, y_train, y_test = train_test_split(X,Y, test_size=0.3)

models = []
models.append(("DesicionTree",DecisionTreeRegressor(max_depth=8)))
models.append(("RandomForest",RandomForestRegressor(max_depth=8)))
models.append(("LightGBM",lgm.LGBMRegressor(max_depth=8)))
models.append(("XGBoost",xgb.XGBRegressor(max_depth=8,objective='reg:squarederror')))

result = {}
for name,model in models:
    print(name)
    model.fit(x_train, y_train)
    y_predict = model.predict(x_test)
    mae  = mean_absolute_error(y_test, y_predict)
    rmse = np.sqrt(mean_squared_error(y_test, y_predict))
    result[name] = [mae,rmse]
    print('  MAE : ',mae)
    print('RMSE : ',rmse)
    print()

少しづつみていきましょう。

まずは
データを読み込みします。

pd.read_csv()でCSVファイルを読み込みして
データフレームに変換できます。

なおこのデータは
すでに「前処理」と呼ばれる
機械学習用のデータに
整形する工程を終えたデータで
全て数値型のデータになっています。


次に訓練用とテスト用のデータに分けます。

train_test_splitを用いると
簡単に振り分けることができるので楽です。

今回は3割テスト、残りを訓練用としました。

モデルは
今回は自分がよく使っている
決定木,ランダムフォレスト,LightGBM,XGBoost

こちらの4種類を使っていきます。

モデルの作成は
model.fit(x_train, y_train)

これだけで済んでしまいます。
機械学習と言っても
コードはたったこれだけなんですよね・・・

モデルの作成が終わったら
次はテストデータで予測を行い
その精度を検証します。

y_predict = model.predict(x_test)

予測もたったこれ1行だけで済んでしまいます。

あとはこの結果から
どれだけ誤差が出たのかを見て
精度を図ります。

誤差を見るのに
MAE
RMSE
を使います。

今回はざっくり検証なので
どれだけ誤差が出たのかだけを見ることとします。

DesicionTree
  MAE :  0.1047453451900971
RMSE :  0.14276028664764914

RandomForest
  MAE :  0.08806766700129451
RMSE :  0.11329995353232411

LightGBM
  MAE :  0.08365354791749746
RMSE :  0.10874470218772024

XGBoost
  MAE :  0.08733976372263648
RMSE :  0.11181978441280738

MAEはどんだけ誤差が出たかを平均したものです。
MAE0.083なら
+-0.083くらいはズレます。

実際の星が3.5だとして
大体予測が3.4-3.6くらいになるだろうという
モデルができました。

今回一番良かったものは
LightGBMですね。

誤差を可視化してみましょう。
tabe1

平均で0.083ズレですが
大きいところでは0.36くらいはズレてますね

誤差の累積だと
tabe2

80%くらいで0.15以内には収まりそうな感じですね。

予測の精度としては
まあまあなんじゃないでしょうか

これが仕事なら
クロスバリデーションしたり
パラメータいじったり
元々の特徴量作る集計の見直しなど
まだまだやること有ります。

色々すればもう少し
精度は上がるでしょうが
ざっくり検証なのでこれまでです。


さて
このデータのうちで
どれが一番予測に寄与しているでしょうか?

寄与度を出してみました。


191コメント数

181ブックマーク数

1711rate_1000_s_mean

1521rate_100_s_mean

1491rate_5000_s_mean

1341rate_500_s_mean

106夜価格低

1051year_500_s_mean

811rate_2000_s_mean

721year_1000_s_mean

683month_500_s_mean

656month_500_s_mean

631rate_10000_s_mean

55昼価格低

こんな感じでした。

コメント数やブックマークの数
コメントした人の星の平均点
ディナー価格などが
関係しているようです。

実際の星の計算は
もう少し複雑な計算方法で
違うものでは有ると思いますが
近い形の星を算出できたと思います、


これで、ブラックボックスであった
星の計算方法に少し
近づいたんじゃないかなーと思います。

食べログに掲載されているお店さんで
点数を上げたければ
ここら辺がポイントになるのではと
思ってはおりますが・・・

このデータには
お店側が食べログ側に
お金を支払っているかどうか
というデータが含まれておりません。

なので、実はお金を支払っていないから
星が下がったということも
考えられなくは無いので
実際の予測にはこの情報が不可欠です。

どなたか
このフラグ値お持ちでは
無いでしょうかwwwwwwww

今回はここまでです
それでは。


さて、今回はGoogle翻訳についてです。
翻訳サービスもプログラムから行うことができます。

翻訳したい文章がたくさんある時は非常に便利です。
外国語に翻訳して、それを戻すとどうなってしまうのか?

解説動画はこちら


まずは
Google翻訳をする関数です。
import requests

url = "https://translate.google.com/translate_a/single"

headers = {
    "Host": "translate.google.com",
    "Accept": "*/*",
    "Cookie": "",
    "User-Agent": "GoogleTranslate/5.9.59004 (iPhone; iOS 12.4.1; ja; iPhone8,1)",
    "Accept-Language": "ja-jp",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "keep-alive",
    }

def translate_result(text,mode1='ja',mode2='en'):
    params = {"client": "it","dt": ["t", "rmt", "bd", "rms", "qca", "ss", "md", "ld", "ex"],
              "otf": "2","dj": "1","hl": "ja","ie": "UTF-8","oe": "UTF-8","sl": mode1,"tl": mode2,"q" : '',}
    params['q'] = text[:5000]
    res    = requests.get(url,headers=headers,params=params)
    result = res.json()
    return result

def translate_print(result):
    result_text = ''
    for sentence in result['sentences']:
        if 'trans' in sentence:
            text = sentence['trans']
            result_text += text
    return result_text

これを丸ごとコピーして頂くと
色々翻訳できます。

英語に翻訳したければ
text = '''
ここに翻訳したい文章を入れる
'''

result  = translate_result(text,mode1='ja',mode2='en')
print(translate_print(result))

mode1=が元の言語
mode2=が変換後の言語
この言語のコードを入れます。
jaは日本語 , enは英語です。

試しに吾輩は猫であるでやってみると

text = '''
吾輩は猫である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
この書生というのは時々我々を捕えて煮て食うという話である。
'''

result  = translate_result(text,mode1='ja',mode2='en')
result2 = translate_result(translate_print(result),mode1='en',mode2='ja')
print(translate_print(result2))

吾輩は猫である。まだ名前はありません。
私はどこで生まれたのかわかりません。
私は薄暗い場所で泣いていたことを覚えているだけです。
ここで初めて人間を見ました。
また、後でそれを聞いたとき、書道の中で最も邪悪な部族のようでした。
この書道は時々私たちを捕まえて沸騰させて食べる物語です。

英語に変換したのを
再度日本語に戻しています。

それだけで
大分ニュアンスが変わってしまっていますねwww

上手くいっている翻訳もあれば
ちょっとおかしい部分もありますね。

次に
米津玄師の
Lemonの歌詞を再翻訳してみましょう。

歌詞はここに載せられないので
別途他のサイトをご覧ください。

こんな感じになりました。

夢はどれだけ良かった
私はまだあなたの夢を見る
忘れたものを取り戻したい
古い思い出からほこりを取り除く
戻らない幸せがあること
最後にあなたは私に言った
言うまでもなく隠されていたい過去
あなたが私を持っていないなら、永遠にいまま
もう傷つくと思います
私はそれが起こらないことを知っています
あの日も悲しみ、あの日も痛み
私はあなたとそれをすべて愛しました
苦いレモンの香り
雨が止むまで帰れない
あなたはまだ私の光です
暗闇の中であなたの背中をたどった 輪郭をはっきり覚えている 会うたびに受け入れられない 溢れるのは涙だけ 何を見ていましたか 知らないプロファイルで どこかあなたは今私のようです あなたが孤独にいるなら 私を忘れてください 私は本当に あなたはまだ私の光です
思うより 恋していた君へ あなたが考えるように 呼吸ができない 私はその側にいた 嘘のように とても忘れられない それだけが あの日も悲しみ、あの日も痛み 私はあなたとそれをすべて愛しました 苦いレモンの香り 雨が止むまで帰れない カットフルーツのように あなたはまだ私の光です

もう原型はとどめていないようですね

歌詞の芸術性を
ほぼ0に変換することができます。

大量の文章を翻訳したい方は
是非使ってみて下さい。
それでは


このページのトップヘ