ゆーかん

徒然日記

vimで検索した文字列から行末まで削除を、検索ヒットした文字列全てで繰り返す

メモリ8GB詰んでるmacを使ってるのですが、プラグインや便利なソフトウェアの入れすぎでPCが重くなりがちになってきたので、vimへの移行を検討中。

移行期なので、Visual Studio Codeのvimマッピングを使って、集中したい時はその恩恵を借りながら少しずつ勉強しています。

タイトル通りのことをするのに割とはまったので、メモ書くを残します。

やりたいこと

以下の文字列の,に続く部分を全て削除したかった。名前だけを抽出したかったんです。

Lauren Rhue, Wake Forrest University
Wael Jabr, Georgia State University
Jesse Bockstedt, Emory University
Arvind Malhotra, University of North Carolina
Pei-yu Chen, Arizona State University
Ben Fabian, Hochschule für Telekommunikation Leipzig
Mareike Möhlmann, University of Warwick
Ioanna Constantiou, Copenhagen Business School
Michel Avital, Copenhagen Business School
Young Bong Chang, Sungkyunkwan University
Wooje Cho, University of Seoul
Sangpil Han, Arizona State University
Byung Cho Kim, Korea University Business School
Seung Hyun Kim, Yonsei University
YoungOk Kwon, Sookmyung Women’s University
Gene Moo Lee, University of Texas Arlington
Hyelim Oh, National University of Singapore
Jaehong Park, Kyung Hee University
Sungyong Um, National University of Singapore
Ulrich Bretschneider, University of Siegen, Germany
Rob Gleasure, University College Cork, Ireland
Lorraine Morgan, National University of Ireland
Ivo Blohm, Universität St. Gallen, Switzerland
Keongtae Kim, City University of Hong Kong
Joseph Feller, University College Cork
Hanna Halaburda, bank of Canada

結論

下記の順番に実行すればできます。

/,  (<- , を検索)
qqnd$q  (qにマクロを登録)
100@q  (繰り返す)

nで次の検索結果に移レなくなったタイミングでエラーで抜けてくれるので、適当に大きい値をcountしてあげれば、ヒットするものが全て消せる

参考

Vimで編集を効率的に行うための繰り返し操作について

東大が大学ランキング首位から転落!? 人工知能が国を管理する近未来社会シンガポール

東大がアジア大学ランキング1位から7位に転落

イギリスの教育専門誌がアジア各国の大学の最新のランキングを発表し、シンガポールの大学がトップに立った一方、このランキングで3年連続でトップだった東京大学は7位に転落しました。 NHK NEWSより

って報道を見て、朝から「いや、待てよ1位がシンガポール?東大も負けてないっしょ、おいいい!?」と憤慨していた。

で、録画してあったNHKスペシャル人工知能は天使か悪魔か」シンガポールが取り上げてたのを思い出した。それを見て、シンガポールが1位ならしょうがないか。。」 って納得して思わず書いたエントリー。

いやシンガポールやばいっすよ、まじ。人工知能を国ぐるみで有効活用している、アジアの小さい巨人でしたわ。

シンガポール人工知能事情

シンガポールは国土が狭い。人口密度は世界第2位で、東京都の人口密度も軽く上回っている。そんな中国際社会で生き残っていくために、国ぐるみで人工知能を活用した効率化社会を実現しようとしている。

NHKスペシャルの「人工知能は天使か悪魔か」で、シンガポールのスマートシティ大臣みたいな人が

人工知能で国を効率化する。シンガポールはその実験室になる。

みたいなことを言ってて、すっげーやる気だな、、って感心した。。

実際の取組を見てみても、

  • 渋滞を未然に防ぐ
  • 国営マンションの住人の健康状態の把握
  • 銀行でワイロなどの不正を事前に察知!

など。これを国と企業が協力して進めているんだから、凄まじい。自国の国際社会での状況などをしっかり把握してやっててすごい。。

いくつか簡単に紹介。

人工知能で不正を監視!

シンガポールの銀行が取り入れている人工知能。従業員の行動やチャット、社内メールの内容を解析して、不正をしそうな人指数みたいなものを定義。それを元に、収賄とかインサイダー取り引きとかを未然に防いでるのだとか。

その的中率は約9割!!とんでもねぇ。。

老人の孤独死はさせない!

シンガポールの国営マンションには監視するためのカメラを全ての部屋に設置するらしい。監視と言っても悪い使われ方は一切していなくて、 - 普段とは違う行動をしている人の健康状態の把握 - 異常があればその緊急度を察知して、家族や医師に連絡するかを判別 - みんな幸せ!ばんざい!

ってなるとか。日本の老人を全てこういった国営マンションに住ませて、日常生活に困ってる度人工知能で計測。それが高い順に老人ホームとかに入れてあげるとかしたらもっと世の中は幸せになりそうだなぁ。。って思った

人工知能で渋滞改善

車の平均速度を測定、渋滞が起こる前兆の速度みたいなものを人工知能を活用して測定。それを検知すると、青信号の時間を延ばして渋滞を未然に防ぐらしい。。

こんな感じの社会は近未来だと思ってたのに、すぐ近くの国で実現されているなんておったまげた とんでもねぇな、シンガポール!!

qiita

東大が大学ランキング首位から転落!? 人工知能が国を管理する近未来社会、シンガポールが1位なら納得かも。。

人工知能活用アプリまとめ

機械学習人工知能の勉強を最近してるんだけど、今世の中にどんなアプリがあるのかまとめてみたくなった。これらを調べてまとめた上で、これから作るアプリにうまい具合に詰め込んで、流行り遅れて人工知能アプリをうまく作りたい。

普通にsmartnewsとかGoogleアプリにも機械学習はふんだんに使われてるけど、ちょっと今風で新しいものを取り上げてみる。

人工知能AI英会話ナンナ

人工知能が話し相手になってくれて、英語が勉強できるサービス。無料だし。まだテストなのかな? そして自分が苦手な構文とかを、ナンナが指摘してくれるらしい。ほぉ〜

これがちゃんとできたら素晴らしい。

ナンナ

SENSY

ファッション×人工知能。コーディネートとかを出してくれるんだとか。 自分の家にある洋服とか全部登録しなきゃいけないのかな?

そもそも朝ってそんなに時間無い気がするけど、、、 使うシーンがイメージできないなぁ〜

SENSY

Less Mail

自動返信をしてくれるらしい。これは日本語の言語的な問題で期待できないんじゃないかな これはちょっと使ってみたいなぁと思います。

http://robingets.me/lessmail/thanks.html

Health Tap

これはいいかもしれない。日本は医療先進国だから、なかなか注目されないのかもしれないけど、、、 これも既にリソースを持っている人たちが、やっているイメージ

既にアメリカでは、毎月1000万件以上の質問が問い合わせされているとか。実際、これがあったらとてつもなく欲しい。

人工知能はおそらく、医師と質問者との効率のいいマッチングに使われているのかな?

Health Tap

SELF

いわゆるパーソナルアシスタント。会話ができたり、日常のログを記録してくれたり、ニュースとかを提案してくれたり。FBを見る限り、3ヶ月前くらいにスタートしたのかな?FBがビジネスページじゃなくて、いいね!できないのが印象的、笑

SELF

感想

あまり面白いモノないなぁ。なんとなく思ってたけど、人工知能ってやっぱり前面に押し出すものじゃない気がする。今ある人工知能押し出してる系のものって、マッチング・パーソナルアシスタントの2個くらいしかないのか。

Google PhotoとかAmazonのレコメンドとかの方が圧倒的にいけてるな。そもそも人工知能って言葉が氾濫しすぎてて、機械学習なのか、ただのプログラムなのか、ディープラーニングなのか全くわからない。雰囲気でビジネスやってる時点でそもそも終わってるのか。

今回思ったのは、 - 優れた人工知能を作るには、そもそも圧倒的なデータ量が必要 - 人工知能効率化のための手段でしかない - 人工知能を前面に押し出してる時点で既にイケてない

人工知能アプリを作りたいなら、少し考えないとダメかもしれない。

Qiitaの元記事:ここらで1つ、気になった”人工知能”搭載アプリをまとめてみる

python3での文字列フォーマットの方法まとめ

昔ながらのやり方(まだ使われてるけど)

'This is our %s' % 'string'
  # This is our string

print('we are learning %s %s' % ('Python', '3'))
  # we are learning Python 3

print('we are learning %(lang)s %(ver)s' % {'lang': 'Python', 'ver': '3'})
  #we are learning Python 3

新型 (推奨されてるやり方)

文字列の後ろに formatメソッドをくっつける。 挿入する場所は基本的に { }にて指定する。

'This is our string {}'.format('in Python')

'{} {} {}'.format('a','b','c') 
  # 'a b c'

'{2} {1} {0}'.format('a','b','c') 
  #c b a
  #インデックスみたいな指定ができる

'we are learning {lang} {ver}'.format(lang = 'Python', version = '3') 
  #we are learning Python 3

language = ('Python', '3')
'we are learning {0[0]} {0[1]}'.format(language)
  #we are learning Python 3

上級編

formatメソッドを使うんだけど、思ったよりたくさんのことができるらしい。

  • 数字をバイナリーに変換
  • 左寄せ・右寄せ・中央寄せとかで文字列作成
animal = ('Dog', 'Cat')
name = ('Maggie', 'Missy')

'I have a {0[0]} named {1[0]}'.format(animal,name)
    #I have a dog named Maggie

'I have a {0[1]} named {1[1]}'.format(animal,name)
    #I have a cat named Missy

'{:<50}'.format('aligned left')
  #'aligned left          
  #50インデックス用意して左詰めで文字入力
                            '{:a<50}.format('aligned left ')
  #'aligned left aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
  #上のが見づらいのでaで埋めてみた

'{:>50}'.format('aligned right')

'{:^50}'.format('aligned center')

'{:$^50}'.format('More Money')
  #'$$$$$$$$$$$$$$$$$$$$More Money$$$$$$$$$$$$$$$$$$$$'

'Binary: {0:b}'.format(324)
    #Binary: 101000100

'{:,}'.format(123456787654321)
    #'123,456,787,654,321'

  #割り算した結果も表示できるらしい
correct = 78
total = 84
'Your score is: {:.1%}'.format(correct/total)
    #'Your score is: 92.9%'
'Your score is: {:.3%}'.format(correct/total)
    #'Your score is 92.857%'

Qiitaの記事はこちらPython3での文字列フォーマットまとめ 旧型で生きるか、新型で生きるか

家庭教師業界についてのまとめと感じた課題

家庭教師業界ってオンライン授業がとても流行っていますが、実際に人を送る方の業界って全く注目されてないですね。気になったのでざっくり調べて見ました。

  1. 検索ワードから調査
  2. 業態の調査

1. 検索エンジンから調査

キーワードプランナーで検索ワード確認

家庭教師と入力して検索ワードを見てみました。想像通りだが、「トライ」が純粋想起を勝ち取っているようで、結構な検索ボリュームを持っています。

f:id:u-kan:20171009114959p:plain

ただ、「家庭教師 英語」といった「家庭教師 + 教科」っていう検索が無いのが不思議でした。使い方間違ってるのかな?

リスティング広告

どんな感じの広告が出てくるのか気になったので、リスティング広告から調べてみました。

f:id:u-kan:20171009115650p:plain

成熟産業なのでリスティング広告は激戦っぽいです。何回調べても新しい業者が現れる。。笑

「家庭教師 トライ」でも調べてみると意外なことに、トライのリスティング広告しかでてきませんでした。死守してるんですかね。

f:id:u-kan:20171009115924p:plain

2. 業態の調査

先ほどのキーワードプランナーの結果から見ても、ただし、全体の検索量も10万近く。そもそもマーケットはそこまで大きく無いようですね。

応募の多い時期は?

1月か4月が多いと想定していました 理由は昔よく両親から、「次の学年は大丈夫なの?」、「今年度は頑張ってよ」などと詰められるのがこの月に多かったからです。

グーグルトレンドで確認してみるとこんな感じです。時間軸がわかりにくい。。

f:id:u-kan:20171009120606p:plain

だいたいこんな感じの傾向がありました。まぁ肌感にはあってると思います。

  • 1 ~ 4月にかけて徐々に上がり始める。
  • 5 ~ 8月にかけてはよこばい 
  • 9 ~ 12月にかけて現象

既存サービスを見てみる

大きく分けて下記のようなカテゴリ分けになると思います。オンライン・オフラインがカテゴリのトップになるのが正しいのかはわかりませんが。

  • オンライン
    • ビデオ授業
    • 質問サービス
  • オフライン
    • 対面授業

現状激戦区になっているのが、主にオンライン。特にオンラインのビデオ授業。基本的にはZ会の一人勝ちですが。。

オフラインの対面授業に関しては、トライを除けば、10年前のサイトのまま整備もされていないようなのが多数、、笑

しかも、このオフライン対面授業のための応募プラットフォームがいけてなさすぎる。下記がさらっと感じた課題感。

  • 実際にあって授業を受けるまで先生の人となりがわからない
  • 先生の過去の成果もわからない
  • 応募はネットだけどそれ以外は基本アナログ
  • 先生とのマッチングのために、何十項目も入力しないといけない

課題だらけで、これが理由で家庭教師を雇わない人ってたくさんいるような気が。。

そもそもマーケット大きく無いから、参入メリットがないケースが多いのかな?

そもそも対面授業向けの家庭教師の申し込みサイトで大事なこと

そもそも家庭教師を利用するときに大事なのは、プラットフォームを運営する会社の信頼度ではなく、教えてくれる先生の過去のレビューと人となりなはず。

にも関わらず、先生の実績が直接見れるサイトは一個もないようです。ここがブラックボックスになっている現状は、如何なものでしょう。

ちなみに、カナダでホストファミリーを探したときにも同じような課題は抱えてました。探したと言うか、業者が全てやってくれるのですが、、

現地に行くまで家の様子も泊まる家も分からない。国籍もあまり分からずこちらに選択肢が無い状況。ここも社会的な課題だと常々思います。作ってもUIがほぼairbnbになりそうですが。。

pythonの秀逸なオブジェクト保存方法の設計

びっくりした話

以下のように記述した際、aとbは全く同じオブジェクト(ここでは2)を指しているらしい。

a = 2
b = 2

全く同じ。英語で言うと"the same object"。色々と疑問が生じたので調べてみた。 まずは、疑問を箇条書きにしてみます。

  1. 同じところを指してたらaを変更した時に、bも変わっちゃわない?
  2. てかそれ本当なの?

疑問1:書き変わらない?

これはよく考えれば、一個前の記事で調べてた内容でした。

簡単にまとめると、

全く同じオブジェクトが既に存在している場合には、
メモリの節約のために、その同じオブジェクト参照する。

同じオブジェクトが存在しなければ、新しく作成される。

つまり、a=3と新しく入力された場合、新規にオブジェクトを作成する。そして、b=2はそのまま保存される、というところでしょうか。

もちろん初心者のメモ書きなので、根本的な部分ではもっと複雑なことが起こってるのでしょうが、この定義でも矛盾なく説明できるので、とりあえずこのまま進んでみます。

疑問2:本当かどうか確かめる(id関数の使用)

本当かどうか確かめるために、メモリ空間のアドレスと言われるものを直接見られるid関数を使って見る。

id() について調べてみると分かるのですが、どうやら識別値を戻り値とするようです。つまり、同じオブジェクトを指していれば、戻り値は同じで、違うものであれば、戻り値も違うってことですね。

では、本題の本当に一緒のものなのかを調べていきます。

a = 2
b = 2

id(a) #4401166416

id(b) #4401166416

id(a) == id(b) #True 数字を見るのが面倒なので==使ってみた。

どうやら本当らしい。つまり、オブジェクトが新しく生成される時のルールは以下の通りになっているんだろう。

c=3を定義して、もう一回実験をしてみた。

c = 3 

id(c) #4401166448

id(a) == id(c) #False 

#この後、aを3に書き換えてcと同じになるか確かめる。

a = 3

id(a) #4401166448

id(a) == id(c) #True

と見事一緒になりました。つまり、

同一のオブジェクトが存在してれば、
新しいオブジェクトは作られない。

みたいですね。(※追記にて、一部訂正あり)

何の役に立つかわからないけど、内容的には不思議で面白いですねぇ

追記

yubaさんより

このような設計手法のことをFlyweightパターンと呼びます(メモリ消費が軽くなるから「フライ級」です)。ご参考に。

とのことです。ありがとうございます。

shiracamusさんからコメントにて訂正を頂きました。

どうやら大きな値である場合には、値が全く同じオブジェクトであっても、新しいオブジェクトは作られるみたいです。

てことで実行してみたのがこちら。

d = 50000
e = 50000

id(d) #4406088592
id(e) #4404350832

id(d) == id(e) #False

システムの中身のしまわれ方とか見るのも、意外と面白いですね

元記事:pythonでの、変数の処理について詳しく調べてみた

ブログ始めました。

前々から自分のブログを持とうと思っていたのですが、なかなか機会がなく。今日面白いものを見つけたので、これをいい機会にブログを開始。

面白そうだと手をつけてみたこと・調べたことのログを残して行きたいです。