プロクラシスト

今日の寄り道 明日の近道

はてなブログ記事内の画像を自動で全部ぶっこ抜く

こんにちは、ほけきよです。

ぶっこ抜き記事第二弾です。第一弾はこちら。今あるタイトルとURLを全部ぶっこ抜いてくるやつ

今回は記事最適化がメインです。なんでも

  • ページ表示スピードははSEOに大きく関係する

らしい。そして、

  • 画像の圧縮は表示スピードに大きく関係する!

らしい。つまり、画像を圧縮すればSEOに強くなるよ!ということ。画像を圧縮するために、まずは画像をぶっこ抜くことから始めよう。ということです。

画像の圧縮は表示スピードに大きく関係する!

ページ表示高速化に関しては、

つばさのーとさんの記事がめちゃくちゃ参考になります。

この中でも最もわかりやすいかつ効果的なのが画像の圧縮。これにより、表示スピードが格段に上がります。

いちいち画像をDLするのは面倒

なるほど!と思い、いちいち記事内画像を

右クリック⇨保存⇨Googleフォトで圧縮

としようと思っていたのですが、3記事で飽きました

やってられない。なので、これも自動化しちゃいましょう。

やりたいこと

まず、やりたいことを明確にしておきます

■ 記事内の画像(`gif`, `jpg`, `jpeg`, `png`)を抜きたい

■ 特に、**はてなフォトライフ**からの画像を全部抜きたい*1

■ ぶっこ抜いた画像は**Googleフォト**にアップして、画像をGoogleフォトからのリンクに差し替える

こんな感じ。

環境を作る

すでにpython環境を持っているという方は、bs4urllibだけ入れればOKです。*2 python環境をwindowsにいれる方法は、私の過去記事に書いています。anacondaを入れておくと大抵のことができるのではかどります(容量が2GBほど必要ということには注意しておいてください)

コード

下記コードをコピペしてimg_from_articles.pyなどで保存してください。

どこでもいいのですがあんまりわからない!って人はデスクトップに一旦保存しておきましょう。

コードをみる
#coding: utf-8

from bs4 import BeautifulSoup
import urllib
from urllib import request
import time
import csv
import os
from argparse import ArgumentParser

def extract_urls(root_url):
    """
    トップページを指定すると、ブログ内に存在するurlをすべて抜き出してくれる
    """
    is_articles = True
    page = 1
    urls = []
    while is_articles:
        try:
            html = request.urlopen("{}/archive?page={}".format(root_url, page))
        except urllib.error.HTTPError as e: 
            # HTTPレスポンスのステータスコードが404, 403, 401などの例外処理
            print(e.reason)
            break
        except urllib.error.URLError as e: 
            # アクセスしようとしたurlが無効なときの例外処理
            print(e.reason)
            break
        soup = BeautifulSoup(html, "html.parser")
        articles = soup.find_all("a",class_="entry-title-link")
        for article in articles:
            urls.append(article.get("href"))
        if len(articles) == 0:
            # articleがなくなったら終了
            is_articles = False
        page += 1
    return urls

def articles_to_img(root_url, urls):
    """
    各記事内の画像を保存
    - gif, jpg, jpeg, png
    - 記事ごとにフォルダ分けして保存される
    - imgs/{urlの最後の部分}/{0-99}.png
    """
    rootdir = "imgs2"
    if not os.path.exists(rootdir):
        os.mkdir(rootdir)
    for i, url in enumerate(urls):
        try:
            html = request.urlopen(url)
        except urllib.error.HTTPError as e: 
            print(e.reason)
        except urllib.error.URLError as e: 
            print(e.reason)
        soup = BeautifulSoup(html, "html.parser")
        # ディレクトリの作成
        dirname = url.replace(root_url+"/entry/","").replace("/","-")
        print(i, dirname)
        article_dir = os.path.join(rootdir, dirname)
        if not os.path.exists(article_dir):
            os.mkdir(article_dir)
        entry = soup.select(".entry-content")[0]
        imgs = entry.find_all("img")
        count=0
        for img in imgs:
            filename = img.get("src")
            # 拡張子チェック
            if filename[-4:] == ".jpg" or filename[-4:] == ".png" or filename[-4:] == ".gif":
                extension = filename[-4:]
                print("\t",filename)
            elif filename[-5:] == ".jpeg":
                extension = filename[-5:]
                print("\t",filename,extension)
            else: 
                continue
            try:
                image_file = request.urlopen(filename)
            except urllib.error.HTTPError as e: 
                print(e.reason)
                continue
            except urllib.error.URLError as e: 
                print("ERROR", e.reson)
                continue
            # 画像ファイルの保存
            with open(os.path.join(article_dir,str(count)+extension), "wb") as f:
                f.write(image_file.read())
            count+=1
        time.sleep(5)

if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument("-u", "--url", type=str, required=True,help="input your url")
    args = parser.parse_args()
    urls =  extract_urls(args.url)
    articles_to_img(args.url, urls)

使い方

ターミナル or コマンドプロンプトを開き*3、さっきのimg_from_articles.pyが保存されている場所まで移動します。 デスクトップに保存している方は下記コマンドで実行されるはずです。

cd Desktop
python img_from_articles.py --url http://www.procrasist.com

一行目はデスクトップに移動しています。二行目の解説をちらっとしておくと

  • --url 以後には自分のサイトのURLを入力してください。URLの最後の/はつけないでください。

これで、デスクトップにimgsというフォルダができて、その中に書く記事ごとにフォルダ分けされて画像が格納されているはずです。 こんな風に

f:id:imslotter:20170703023214p:plain

注意点は

  • フォルダ名はentry/以下の記事URLから抜いてきています
  • 日付が記事URLになっているやつは、"/"を"-"に変えています。
  • はてなフォトライフ以外からの画像は読み込めないときもあります*4
  • 実行時のアクセス負荷を考えて、各記事の間にsleep時間を入れている(5秒くらい)ので、少し時間がかかります。。

終わりに

いかがでしたか?

これでぶっこ抜いた画像をGoogleフォトに投げれば完璧です! めんどくさいことは機械的に終わらせたいですね。最近そんな本も出ていましたし。

よし、これで準備が整った!さぁ記事の最適化をするz...( ˘ω˘)スヤァ

*1:なんかpngで圧縮かけたときにうまくいかないことがあるらしい

*2:2系の人はurllib.requestをすべてurllib2に置き換えればいいはずです。面倒だったのでやっていません!いずれやるかも

*3:windowsユーザーへ。簡単な開き方は、windowsボタン+"cmdと入力"+Enterです

*4:そのときはエラーが出力されているはずです。

リライトのために、ブログの記事タイトルとURLを自動でぶっこ抜いてcsv化する

こんにちは、ほけきよです。

記事のリライトとか、最適化をしようとしたんですよ。 けど、どこをいつ最適化したとか、リライトしたとかわからなくなっちゃうんですよね。

じゃあ記事をエクセルで管理しちゃえば後々楽やん!天才。

と思って、一個一個温かみを持ってタイトルコピペとか繰り返してたんですが、 3回くらいで飽きました。 ムリ。

こんなんぶっこ抜くコード書いたほうが楽やん! という結論に至りましたので、書きました。

そして、意外に需要がありそうだったので、やっつけコードですが、紹介します。

なお、pythonで書いたのでpython環境があれば簡単に使えると思います。 注意点をいくつか書いているので用法用量をお守りの上、お使いください。

環境を作る

すでにpython環境を持っているという方は、bs4urllibだけ入れればOKです。*1 python環境をwindowsにいれる方法は、私の過去記事に書いています。anacondaを入れておくと大抵のことができるのではかどります(容量が2GBほど必要ということには注意しておいてください)

コード

下記コードをコピペしてarticles_to_csv.pyなどで保存してください。

どこでもいいのですがあんまりわからない!って人はデスクトップに一旦保存しておきましょう。

コードをみる
from bs4 import BeautifulSoup
import urllib
from urllib import request
import csv
from argparse import ArgumentParser


def articles_to_csv(url, output):
    is_articles = True
    page = 1
    with open (output, "w") as f:
        writer = csv.writer(f, lineterminator='\n') # 改行コード(\n)を指定しておく
        while is_articles:
            try:
                html = request.urlopen("{}/archive?page={}".format(url, page))
            except urllib.error.HTTPError as e: 
                # HTTPレスポンスのステータスコードが404, 403, 401などの例外処理
                print(e.reason)
                break
            except urllib.error.URLError as e: 
                # アクセスしようとしたurlが無効なときの例外処理
                print(e.reason)
                break
            soup = BeautifulSoup(html, "html.parser")
            articles = soup.find_all("a",class_="entry-title-link")
            for article in articles:
                try:
                    writer.writerow([article.text, article.get("href")])
                except UnicodeEncodeError as e:
                    # ふざけた文字が入ってる場合はエラー吐くことも
                    print(e.reason)
                    print("この記事のタイトルに良くない文字が入ってます :",article.get("href"))
            if len(articles) == 0:
                # articleがなくなったら終了
                is_articles = False
            page += 1
    

if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument("-u", "--url", type=str, required=True,help="input your url")
    parser.add_argument("-o", "--output", type=str, default="articles.csv", help="output csv name")
    args = parser.parse_args()
    articles_to_csv(args.url, args.output)

使い方

ターミナル or コマンドプロンプトを開き*2、さっきのarticles_to_csv.pyが保存されている場所まで移動します。 デスクトップに保存している方は下記コマンドで実行されるはずです。

cd Desktop
python articles_to_csv.py --url http://www.procrasist.com --output my_articles.csv

一行目はデスクトップに移動しています。二行目の解説をちらっとしておくと

  • --url 以後には自分のサイトのURLを入力してください。URLの最後の/はつけないでください。
  • --output 以後には保存したいファイル名を入力してください。入力しなくても良くて、その場合はarticles.csvという名前で保存されます。

これで、デスクトップにmy_articles.csvというcsvファイルが保存されたはずです。こんな感じ。

注意点

  • ファイル名に環境依存の文字が入っている場合は、csvに出力されません(例: ٩( ᐛ )و←こいつ / Pokémonのé など。)
  • csvに出力されない代わりに、この記事のタイトルに良くない文字が入っていますという適当なエラーメッセージをコンソール上に吐くようにしています。
  • csvと書いてますが、.xslxに拡張子を変えるとexcel専用になりますし、.csvのままでもexcelで開けます。
  • python等に詳しい人はgistにコードを挙げておいたので、そこから取ってきて適当に使ってください gist

  • TODO : 一回きりの利用を想定しているので、現行作業ファイルに新記事タイトルとURLの上書きなどの機能はない(いずれつけたい)

おわりに

これで一瞬でぶっこ抜くことができるようになりました。 リライトが捗るはず!!

使いたいっていう人で、なにかわからない所があればtwitter等で聞いてください。

リライト作業しよう、あ、その前にご飯食べてyoutubeみてカラオケいっt。。。

*1:2系の人はurllib.requestをすべてurllib2に置き換えればいいはずです。面倒だったのでやっていません!いずれやるかも

*2:windowsユーザーへ。簡単な開き方は、windowsボタン+“cmdと入力”+Enterです

研究者のブログ作業環境も紹介します!

[最終更新 : 2017.8.21]

こんにちは、ほけきよです。

作業環境を晒すことが流行っているみたいなので、私も流行りに乗って、作業環境を紹介してみます!

マシン環境

自作です、昨年作りました。こんな感じ

パーツ 製品 価格
OS windows10 12000
CPU intel corei56400k 19000
SSD シリコンパワー240GB 6500
メモリ 4GB×2 4000
マザボ asus h170 17000
電源 玄人志向のやつ 8000
筐体 Z9 5000

マシンは自作のものです。筐体全部入れて7万円程度。VM立ち上げたいしもうちょっとメモリ増やそうかな、あと欲を言えばGPUも欲しいよね。

エディタ

文章を書くにはマークダウン記法を使います。.md, html, cssなどは全部Visual Studio Code(VSCode)を使って編集します。 スニペットやリアルタイムプレビューなどが豊富で、基本的に文章もコードもコレを使っています。

VSCodeの魅力に関してはここにふんだんに書いていますので、どうぞ

表を作る環境

markdownで表を作るのって、結構面倒じゃないですか? そういう時に私が使うのがexcel+tablegeneratorです。 エクセルでぱぱっと表を作って、このtabelegeneratorにコピペするだけでmarkdown用の表に整形してくれます。

図を書く環境

Illustrator… ( ; ; )

パワポ職人なのでPowerpointで図を作ったりしています。 パワポの使い方はこちら

もうちょっとかっちょいい図を作りたいと思っているので、Inkscapeを使おうと思っています。無料版のイラレ

inkscape.org

写真の編集をする環境

Photoshop…( ; ; )

低収入なので、無料の画像編集ソフトGIMPを使っています。

GIMP - GNU Image Manipulation Program

操作性はそこまで良くないけど、素人がPhotoshopで編集したいことなどは、だいたいできるという感じです。操作性は良くないけど。

コーディング環境

ブログに書く程度の分析は、Windows上でぱぱっと動かせるだけで良かったりするので、windowsにanacondaをぶち込んでpythonを使っています。 エディタもjupyterを使ってブラウザ上でサクッと実装するという感じでやってます^^

python&jupyterをwindowsで使いたい人はこちらを参考にどうぞ。

進捗管理

Gitで管理してますが、実際単発の利用で終わることが多いので、あんまり頻繁に利用はしてないなって感じ。 また、ほけきよのGithubアカウントが欲しいなと思う今日この頃。 ⇒ 作りました!!

github.com

ほけきよの道具箱として、いろいろ作っていきます。いまのところあるのは

便利そうなものを思いついたら適宜更新していく感じです。issueやpull-reqは大歓迎です

複数のPCで文章を書きたい時。

たまにクラウド上にメモを残すことがあります。

私が使っているのがwripe` markdownでかけるのと、プレビューもできるところが好きなポイント。

また、ちょろっとしたコードはGistで書いて保存って感じです。

まとめ

みんなパソコン周りの環境 ばっかりだったので、内部の環境について紹介してみました!

パソコン周りはお金を積まないと難しいですが、内部環境はある程度無料で整えることができます。

是非是非使うときの参考にしてみてください。ではではっ!

AmazonがGoogleに対抗!翻訳サービスを開始する予定

f:id:imslotter:20170702113227p:plain

CNBCが報じているニュースによると、AmazonAWS上で翻訳サービスを開始するとのこと。

Amazon Web Services is launching machine translation service

この記事の意訳&まとめです

AWSとは

Amazon Web Serviceの略。 一般的に知られているわけではないがアマゾン*1クラウド上に様々なプラットフォームを用意している。

  • ストレージ
  • データベース
  • 分析基盤
  • 人工知能ツール

など、技術者にとって有用なサービスが並んでいる。

AWS人工知能サービス

AWSでの人工知能(Artificial Intelligence)を利用できるサービスは、近年爆発的に人気を-増していて、ストレージや計算資源に加えてAWSの収益の多様化に貢献している。なかでもDeeplearningを商用に利用したいと考えている企業も増えており、AWS Deep Learning AMIsを用いればDeeplearningの分析プラットフォームを手に入れられるようになっていて、画像認識や音声認識などに使われている。

Google翻訳サービス

その中でも、翻訳サービスはこの2~3年でのDeeplearning界隈でのホットなトピックである。 Googleが数ヶ月前にNeural Machine TranslationというDeeplearningを用いた機械翻訳技術を日本語に適用し、 今までにも増して高性能な翻訳を実現した。*2

Googleのほかにも、MicrosoftFacebookなどが翻訳サービスを持っている。

Amazon翻訳サービス

※翻訳に使うものがどういう技術かはイマイチわからなかった。

  • Amazonの翻訳サービスの拠点はSafabaというピッツバーグの会社。技術開発や研究を行っている。
  • すでに、企業内で複数の言語で製品情報を提供する際などに自社の機械翻訳技術を使用している。
  • AWSに載せて運用できるようにシステムを構築中

  • 2017年の3月に機械翻訳に関する報道発表が行われているlink

    • 翻訳に関するフィードバックをどううまく反映させるかのコンペが行われている
    • AWSサービスを使って良く、効率的にタスクをこなせるかを競う
    • 結果は9月の国際学会*3にて発表される
  • 実際のサービス発表は11月のAnnualレポートより前に行う見通し。

終わりに

どちらかとBtoBのサービスだと思うので、Google翻訳のように私たちに直接的にサービスを与えるようなものではないのかなぁとは思います。しかし、AWSを用いて運用している各国企業にとっては恩恵は大きいかもしれません。ここでの翻訳技術を用いることで、多くのグローバル企業で行われている翻訳作業の手間が省けるようになったり、新しいサービス創出につながるのではないのかなとおもっています。ではでは!

*1:厳密には別会社らしい

*2:NMTに関する技術はこちらのTutorialが詳しい(英語)

*3:http://www.statmt.org/wmt17/bandit-learning-task.html

【最新版】ポケモンしりとりの最長を、線形計画法で導き出す!

f:id:imslotter:20170702115124p:plain

こんにちは、ほけきよです。

数年前に、こんな素敵な論文が流行りましたね。

ポケモンつなげるもん♪

グラフ問題としてしりとりを定式化し、線形計画法で解く。といった一見普通の問題ですが、題材がポケモンであったことから、とある界隈では大きな反響を呼びました。

この時(2011年)はポケモンブラック&ホワイトだったので 全646匹, しりとりの最長は305という結果でした。

時は流れて2017年。色々と状況が変わってきました。

  • 線形計画法を解く、簡単なライブラリが増えてきた((pulp, scipy.linprogなど))
  • ポケモンが増えた(646⇨802)
  • 私の情報処理レベルがアップした

というわけで、 最新版!ポケモン繋げるもん♪やりましょう。

※結果を知りたい方は 3.ポケモンしりとりからどうぞ!

※今回は、結果を知りたいのがメインなので、巨人の肩に乗っかりまくりです。

線形計画問題とは

線形計画問題とは、目的関数と制約条件が1次式で表される最適化問題。 工場の生産管理なんかでよく使われたりします。 例として、Wikipediaに載っている問題を実際に値を入れながら解いてみましょうか。

農業を営む人が、小麦と大麦のための A 平方キロメートルの農地を持っている。農家は限度 F で肥料、限度 P で殺虫剤を使用することができる。これらはそれぞれ単位面積あたり小麦が (F_1, P_1) 、大麦が  (F_2,P_2) を必要とする。小麦の販売価格を  S_1、大麦の販売価格を S_2 、小麦を育てる領域を x_1、大麦を育てる領域を x_2 とすると、利益を最大化するためには、大麦と小麦をどれだけ育てればいいか。(育てる領域×販売価格をここでの利益と定義する)

なお、今回は
A = 10, F_1 = 2, F_2 = 3, F =40, P_1 = 4, P_2 =1, P =20, S_1 = 100, S_2 = 200
としてみます。

項目 大麦 小麦 条件 今回
育てる領域 x_1 x_2  x_1+x_2 \le A  x_1+x_2 \le 6
肥料の使用量 F_1x_1 F_2x_2 F_1x_1+F_2x_2\le F 2_1x_1+3_2x_2\le 15
殺虫剤の使用量 P_1x_1 P_2x_2 P_1x_1+P_2x_2 \le F 4x_1+1x_2\le 20
利益 S_1x_1 S_2x_2 最大化したい 100x_1+200x_2

なにやら複雑ですね。こうやって様々な要素が絡み合った問題を解くのが線形計画問題です。

可視化するとこんな感じ。 ここの赤で囲まれたところを

f:id:imslotter:20170624103207p:plain

線形計画法ライブラリ「pulp

解くのには、それなりの知識や、早く解くためには専門的な知識が必要なのですが、 軽く作った問題を解きたい!!という時には、ライブラリを使うのが今の時代なら良いでしょう。

ここでは、pythonpulpというライブラリを使います。 pulp公式ドキュメントが割と貧弱なので、先人のQiita記事がとても参考になり助かります。

PuLP による線型計画問題の解き方ことはじめ - Qiita

インストール

pip install pulp

でOKです。

さっきの問題をとく

記事を見ながら、さっきの問題を解きましょう。 ポンポンっと条件を入れていけば、答えを出してくれます。

#coding:  utf-8
import pulp

problem = pulp.LpProblem('sample', pulp.LpMaximize)
# 変数の設定
x1 = pulp.LpVariable('x1', 0)
x2 = pulp.LpVariable('x2', 0)
# 最適化したいものの設定
problem += 100*x1 + 100*x2
# 制約条件の設定
problem += x1 + x2 <= 6
problem += 2*x1 + 3*x2 <= 15
problem += 4*x1 + x2 <= 20

# 結果
print ("Result : (x1, x2) = ({},{})".format(x1.value(), x2.value()))
>>> Result : (x1, x2) = (3.0,3.0)

これは便利ですねぇ。

ポケモンしりとり

では、これを使ってポケモンしりとりを解いていきましょう。

こちらも先人様のサイトを参考に。

しりとりを線形計画問題として定式化します。

条件式 意味
最適化対象 \sum_i \sum_j x_{ij} なるべく多くポケモンをつなげる
変数 x_{ij} \in \left\{0,1\right\} \forall i,j しりとりでのキーワードの
つながりを示す(i,jはポケモン図鑑の番号みたいなもの)
y_{i} \in \left\{0,1\right\} \forall i i番目がしりとりの先頭かどうか
z_{i} \in \left\{0,1\right\} \forall i i番目はしりとりでは何番目か
条件  \sum_i x_{ij} = 1 \forall i 同じ単語は使わない(入力制約)
\sum_j x_{ji} =1 \forall i 同じ単語は使わない(出力制約)
\sum_j x_{ij} \le \sum_j x_{ij} + y_i  \forall i yに関する制約
z_i \le z_j -(n+1)\times (1-x_{ij}) \forall i,j zに関する制約
\sum_i y_i = 1 先頭は1つだけ

ポケモンデータを打ち込む用意

いちいち入力するのは面倒なので、wikipediaからぶっこぬいて使いましょう。 ポケモンデータも、以下の前処理をしておきます

こうすると"ポリゴン2"⇨"ホリコンツ"となります。ぶっこ抜くコードはこちら(python3系)

# スクレイピング
from bs4 import BeautifulSoup
from urllib import request

pokemons = []
poke_num = 802
# スクレイピング
html = request.urlopen("https://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3%E5%9B%B3%E9%91%91%E9%A0%86%E3%81%AE%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3%E4%B8%80%E8%A6%A7")
soup = BeautifulSoup(html, "html5lib")
tables = soup.find_all("td")
for table in tables:
    pokes = table.find_all("td")
    for i,poke in enumerate(pokes):
        if i%2 == 1:
            if poke.string != '\xa0':
                pokemons.append(poke.string)
pokemons = pokemons[:poke_num]
kw = [pokemon for pokemon in pokemons]
# 処理1 記号を日本語に
kw[28] = "ニドランメス"
kw[31] = "ニドランオス"
kw[232] = "ポリゴンツー"
kw[473] = "ポリゴンゼット"
# 処理2 濁音、拗音を処理、"ー"を除去
d = {i:j for i, j in zip('ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポィャュョ',
                         'カキクケコサシスセソタチツテトハヒフヘホハヒフヘホイヤユヨ')}
kw = [''.join(d.get(c, c) for c in s.rstrip('ー')) for s in kw]

結果 しりとり。

これkwとして、を先ほどのQiita記事線形計画法に入れてやりましょう。(最後の出力部分のところだけkwpokemonsに変えれば、元のポケモン名になります。)

151匹

ポケモン初期なら何個繋がるのか。答えは61でした!ベロリンガから始まり、タッツーから終わる。

[1]ベロリンガ -> [2]カイリキー -> [3]キャタピー -> [4]ピッピ -> [5]ビリリダマ -> [6]マンキー -> [7]ギャロップ -> [8]フシギバナ -> [9]ナッシー -> [10]シードラ -> [11]ラフレシア -> [12]アーボック -> [13]クラブ -> [14]ブーバー -> [15]バタフリー -> [16]リザード -> [17]ドククラゲ -> [18]ケーシィ -> [19]イーブイ -> [20]イワーク -> [21]クサイハナ -> [22]ナゾノクサ -> [23]サワムラー -> [24]ライチュウ -> [25]ウツボット -> [26]ドガース -> [27]ズバット -> [28]ドードー -> [29]ドードリオ -> [30]オニスズメ -> [31]メノクラゲ -> [32]ゲンガー -> [33]カモネギ -> [34]キングラー -> [35]ラッタ -> [36]ダグトリオ -> [37]オムナイト -> [38]トサキント -> [39]トランセル -> [40]ルージュラ -> [41]ラッキー -> [42]ギャラドス -> [43]スリーパー -> [44]ハクリュー -> [45]ユンゲラー -> [46]ラプラス -> [47]スリープ -> [48]フリーザー -> [49]サンダース -> [50]スピアー -> [51]アーボ -> [52]ポッポ -> [53]ポニータ -> [54]タマタマ -> [55]マタドガス -> [56]スターミー -> [57]ミュウ -> [58]ウインディ -> [59]イシツブテ -> [60]ディグダ -> [61]タッツー

最新版、ポケモンつなげるもん♪

さあ、いよいよ最新版の802匹でしりとり検索です!! 結果は…

387

でした!

そして、これが最長のしりとり結果です。

[1]エレブー -> [2]ブロスター -> [3]タネボー -> [4]ポッチャマ -> [5]マラカッチ -> [6]チョボマキ -> [7]キングラー -> [8]ラグラージ -> [9]ジャランゴ -> [10]コフキムシ -> [11]シェイミ -> [12]ミュウツー -> [13]ツタージャ -> [14]ヤヤコマ -> [15]マーイーカ -> [16]カプ・テテフ -> [17]フシデ -> [18]ディアンシー -> [19]ジャノビー -> [20]ヒトカゲ -> [21]ゲッコウガ -> [22]カイリュー -> [23]ユクシー -> [24]ジャラコ -> [25]ゴルーグ -> [26]クラブ -> [27]ファイヤー -> [28]ヤルキモノ -> [29]ノコッチ -> [30]チョンチー -> [31]チェリンボ -> [32]ポッポ -> [33]ホエルコ -> [34]ゴマゾウ -> [35]ウツボット -> [36]ドッコラー -> [37]ラティアス -> [38]スカンプー -> [39]フラエッテ -> [40]テッポウオ -> [41]オニシズクモ -> [42]モジャンボ -> [43]ポカブ -> [44]ブラッキー -> [45]キバニア -> [46]アーボック -> [47]グソクムシャ -> [48]ヤミラミ -> [49]ミカルゲ -> [50]ケルディオ -> [51]オーロット -> [52]トリデプス -> [53]スワンナ -> [54]ナマケロ -> [55]ロゼリア -> [56]アーマルド -> [57]ドククラゲ -> [58]ケララッパ -> [59]ハネッコ -> [60]ゴニョニョ -> [61]ヨワシ -> [62]シママ -> [63]マメパト -> [64]トドゼルガ -> [65]ガラガラ -> [66]ライチュウ -> [67]ウリムー -> [68]ムクバード -> [69]トゲチック -> [70]クヌギダマ -> [71]マナフィ -> [72]イトマル -> [73]ルージュラ -> [74]ランクルス -> [75]ストライク -> [76]グライガー -> [77]カプ・レヒレ -> [78]レックウザ -> [79]サメハダー -> [80]タッツー -> [81]ツボツボ -> [82]ポポッコ -> [83]コジョフー -> [84]フシギダネ -> [85]ネマシュ -> [86]ユキワラシ -> [87]シードラ -> [88]ライボルト -> [89]ドンメル -> [90]ルナアーラ -> [91]ラランテス -> [92]ズバット -> [93]ドレディア -> [94]アシマリ -> [95]リオル -> [96]ルリリ -> [97]リザード -> [98]ドクロッグ -> [99]クサイハナ -> [100]ナッシー -> [101]ジラーチ -> [102]チルット -> [103]ドヒドイデ -> [104]テッカグヤ -> [105]ヤンヤンマ -> [106]マッギョ -> [107]ヨルノズク -> [108]グレイシア -> [109]アママイコ -> [110]コロトック -> [111]クルミル -> [112]ルンパッパ -> [113]バケッチャ -> [114]ヤナップ -> [115]ブーバー -> [116]バニリッチ -> [117]チュリネ -> [118]ネクロズマ -> [119]マネネ -> [120]ネイティ -> [121]イルミーゼ -> [122]ゼニガメ -> [123]メノクラゲ -> [124]ゲンガー -> [125]カラナクシ -> [126]シェルダー -> [127]ダゲキ -> [128]キリンリキ -> [129]キテルグマ -> [130]マダツボミ -> [131]ミミッキュ -> [132]ユンゲラー -> [133]ランドロス -> [134]スピアー -> [135]アリゲイツ -> [136]ツンベアー -> [137]アマージョ -> [138]ヨーテリー -> [139]リグレー -> [140]レジロック -> [141]グラエナ -> [142]ナゾノクサ -> [143]サニーゴ -> [144]ゴルバット -> [145]トルネロス -> [146]スボミー -> [147]ミツハニー -> [148]ニンフィア -> [149]アズマオウ -> [150]ウソッキー -> [151]キュレム -> [152]ムウマ -> [153]マクノシタ -> [154]ダグトリオ -> [155]オノンド -> [156]ドゴーム -> [157]ムチュール -> [158]ルチャブル -> [159]ルカリオ -> [160]オムスター -> [161]ダーテング -> [162]クレベース -> [163]スターミー -> [164]ミネズミ -> [165]ミミロップ -> [166]フリージオ -> [167]オタチ -> [168]チェリム -> [169]ムーランド -> [170]ドテッコツ -> [171]ツツケラ -> [172]ラブカス -> [173]スカタンク -> [174]クルマユ -> [175]ユキノオー -> [176]オンバット -> [177]トゲピー -> [178]ヒドイデ -> [179]ディグダ -> [180]タブンネ -> [181]ネオラント -> [182]ドダイトス -> [183]ズルッグ -> [184]クレッフィ -> [185]イベルタル -> [186]ルクシオ -> [187]オニゴーリ -> [188]リングマ -> [189]マグマッグ -> [190]クズモー -> [191]モンジャラ -> [192]ラフレシア -> [193]アメタマ -> [194]ママンボウ -> [195]ウツロイド -> [196]ドラミドロ -> [197]ロトム -> [198]ムシャーナ -> [199]ナットレイ -> [200]イーブイ -> [201]イノムー -> [202]ムンナ -> [203]ナゲキ -> [204]キバゴ -> [205]コアルヒー -> [206]ビッパ -> [207]バルキー -> [208]キノココ -> [209]ゴローニャ -> [210]ヤナッキー -> [211]ギラティナ -> [212]ナックラー -> [213]ラッタ -> [214]ダイケンキ -> [215]キャモメ -> [216]メリープ -> [217]フワンテ -> [218]デデンネ -> [219]ネッコアラ -> [220]ランプラー -> [221]ライコウ -> [222]ウソハチ -> [223]チャーレム -> [224]ムックル -> [225]ルギア -> [226]アギルダー -> [227]タマンタ -> [228]ダークライ -> [229]イワパレス -> [230]スリープ -> [231]プロトーガ -> [232]カミツルギ -> [233]キャタピー -> [234]ビクティニ -> [235]ニャスパー -> [236]ハーデリア -> [237]アマカジ -> [238]シュバルゴ -> [239]コソクムシ -> [240]シシコ -> [241]ゴーリキー -> [242]キュワワー -> [243]ワタッコ -> [244]コロボーシ -> [245]ジュナイパー -> [246]バオップ -> [247]フラベベ -> [248]ペリッパー -> [249]バネブー -> [250]フーパ -> [251]バニプッチ -> [252]チコリータ -> [253]ダルマッカ -> [254]カエンジシ -> [255]ジグザグマ -> [256]マンキー -> [257]ギャロップ -> [258]フィオネ -> [259]ネイティオ -> [260]オニスズメ -> [261]メガヤンマ -> [262]マケンカニ -> [263]ニョロゾ -> [264]ゾロア -> [265]アブリー -> [266]リリーラ -> [267]ラクライ -> [268]イシズマイ -> [269]イシツブテ -> [270]ディアルガ -> [271]ガマゲロゲ -> [272]ケムッソ -> [273]ソルガレオ -> [274]オオタチ -> [275]チャオブー -> [276]フシギソウ -> [277]ウパー -> [278]ハトーボー -> [279]ボクレー -> [280]レディバ -> [281]ハリテヤマ -> [282]マグカルゴ -> [283]コジョンド -> [284]トゲキッス -> [285]スバメ -> [286]メブキジカ -> [287]カイオーガ -> [288]カメテテ -> [289]デンリュウ -> [290]ウデッポウ -> [291]ウインディ -> [292]イワンコ -> [293]ゴンベ -> [294]ヘイガニ -> [295]ニャルマー -> [296]マニューラ -> [297]ラッキー -> [298]キモリ -> [299]リーフィア -> [300]アチャモ -> [301]モグリュー -> [302]ユキメノコ -> [303]ゴロンダ -> [304]タマザラシ -> [305]ジヘッド -> [306]ドロバンコ -> [307]コスモッグ -> [308]クレセリア -> [309]アゴジムシ -> [310]シズクモ -> [311]モココ -> [312]ゴビット -> [313]ドードー -> [314]トサキント -> [315]ドジョッチ -> [316]チョロネコ -> [317]コスモウム -> [318]ムウマージ -> [319]ジガルデ -> [320]デンヂムシ -> [321]ジャラランガ -> [322]カプ・コケコ -> [323]コラッタ -> [324]ダンゴロ -> [325]ロズレイド -> [326]トドグラー -> [327]ラティオス -> [328]ズガイドス -> [329]スリーパー -> [330]ハスボー -> [331]ホルビー -> [332]ヒヤップ -> [333]フォッコ -> [334]ゴチム -> [335]ムクホーク -> [336]クロバット -> [337]ドデカバシ -> [338]シロデスナ -> [339]ナマコブシ -> [340]シュシュプ -> [341]フリーザー -> [342]サボネア -> [343]アシレーヌ -> [344]ヌイコグマ -> [345]マグマラシ -> [346]シザリガー -> [347]カラカラ -> [348]ラムパルド -> [349]ドーミラー -> [350]ラルトス -> [351]スコルピ -> [352]ビブラーバ -> [353]バスラオ -> [354]オドシシ -> [355]ジュペッタ -> [356]タツベイ -> [357]イワーク -> [358]クチート -> [359]ドードリオ -> [360]オオスバメ -> [361]メラルバ -> [362]ハヤシガメ -> [363]メレシー -> [364]シキジカ -> [365]カモネギ -> [366]キノガッサ -> [367]サンダー -> [368]タマゲタケ -> [369]ケケンカニ -> [370]ニャビー -> [371]ピッピ -> [372]ヒノヤコマ -> [373]マフォクシー -> [374]ジャローダ -> [375]タマタマ -> [376]マッスグマ -> [377]マスキッパ -> [378]パルキア -> [379]アマルルガ -> [380]カイリキー -> [381]キルリア -> [382]アーボ -> [383]ホーホー -> [384]ホイーガ -> [385]カブト -> [386]トランセル -> [387]ルナトーン

最後が「ン」で終わり、まとまりがよろしいようで。

終わりに

いかがでしたでしょうか。みなさんの疑問も解決できたのではないのでしょうか。 組合せ最適化問題なので、数が増えると時間が爆発的に増えていきます。ポケモンがこの先増えていくと、より早いアルゴリズムが必要になって来るかもしれません。

また、2017年11月17日にポケモン新作が発売されるらしいです。新キャラ出るのかな?新キャラ出たらまた最新版ポケモンを更新しなければいけないですね。乞うご期待!

しかし、802匹も覚えられるんだろうか...

【だまされないために】研究者が教える、グラフで人をだます印象操作法

こんにちは、ほけきよです。

先日こんな本を読みました。

統計でウソをつく法 (ブルーバックス)

統計でウソをつく法 (ブルーバックス)

50年前から名著と呼ばれている本です。正直そこまで新しい知識が得られるなんてことはありませんでした。 やっぱり私は数式が出てこないとピンとこない人間のようです。

しかし、統計を知らない人、数式アレルギーの人にはおすすめです。

  • データのサンプルは偏ってないか注意しようね
  • いつも使われている言葉(平均とか)がどういう意味か見つめ直そうね
  • グラフィカルな印象操作には注意しようね

とかですね。それを数式を使わず丁寧に説明してくれるので、一度読んで見てもいいのでは、と思います。

今日は、その中でグラフィカルな印象操作について掘り下げたいと思います。 この本を読んだ正直な感想は"うーん、物足りない!!“でした。なので、普段データに慣れ親しんでいる研究者が、あなたたちの印象を全力で操作します

激増しているように騙す

まずは、この二つのグラフを見比べてみましょうか。

さて、どちらが急成長しているように見えますか? 圧倒的に赤色のほうが急成長しているようです。 しかし、赤と青のグラフは同じ数値のグラフです。 違うのはy軸の範囲です。

このように、y軸の始まる位置をちょこっと変えるだけで、あたかも圧倒的成長をしているように見えるのです。

同じことが棒グラフにも出来ます。むしろ棒グラフのほうが顕著に差が見えるかもしれません。

だまされないようにするためには、y軸に注意しましょう。

伸び悩んでいるように騙す。

グラフ

まずはこのグラフをご覧ください このグラフから伸び悩みはじめているような印象を受けると思います。

けれど、実際の所どうなんでしょう。

本当は?

これも同じでy軸に注目してみてください。[:tex:10^{0}, 10^{1}]などとなっていると思います。 これは、y軸が数字の桁数を見ているということです。専門用語で言うと指数オーダーで見ているものです。実際の数値でみたものが下図右です。

大きな数を扱うときに対数スケールにするとうまく特徴が出てくることも研究の世界ではよくあります*1 。これを逆手に取ることもできるよってことをちょっといいたかったのです。グラフの縦軸には注意しましょうね。

ランダムだと騙す

グラフ

まずはこの散布図をご覧ください

訳のわからないランダム模様に見えますね。実際のところ、どうなんでしょう?

本当は?

読み解いていきましょう。とりあえず、各点のつながりが全くわからないので、繋いでみます。 点の前後の繋がりを見るにはつなぐのが一番手っ取り早いですからね。すると下図左のような形が現れました。拡大したものが右図です。

結果、このランダムに見えたグラフはこのような綺麗なサインカーブだったことがわかります。

特に時系列データなどは、ランダムかどうか判断する前に、なんかしらの関係がないか、いろいろと試してみましょう*2

とりあえず線を繋いで見るのは手っ取り早いので、オススメです。

性能が悪いものをいいように騙す(Part 1)

グラフ

まずはこちらの2つのグラフの比較をご覧ください。 縦軸が何かの性能を示していて、低いほど良いと言うことにします。

  • 横軸 : タスクの数
  • 縦軸 : 全タスクを終えるのにかかる時間

とかをイメージしてもらえるといいかもしれません。

どっちが性能がいいように思いますか?graph2のほうが良さげ。と思う人も多いと思います。

本当は?

読み解いていきましょう。

とりあえず、さっき学んだ対数スケールに縦軸を変換してみます。

ここからわかるのは、上のグラフは対数スケールでは頭打ちになりそうなのに対し、下は一定で伸び続けているということです。つまり、後々、graph2が逆転するのではないかということがわかるのです。

もう少し伸ばしたものが下図右です。graph2のほうが急激に増加していっているのがわかります。

性能比較のグラフなどでは、このようにちょうどいいところで実験を打ち切っているものも多くありません。常に疑いの目を持ちましょう。

指数的な伸びかどうかを判断するには対数スケールで直線になっているかどうかを見ることをおすすめします。

性能が悪いものをいいように騙す(Part 2)

最後に、難問を。

グラフ

まずはこちらの2つのグラフの比較をご覧ください。グラフの見方はPart1と同じです。

どう見たってGraph1のほうがヤバそうですよね。実際、どうなんでしょう。

本当は?

読み解いていきましょう。 指数的な伸びかどうかを判断するポイント、もう一つあります。それは、差分を見るということです。*3 指数的なグラフは、差分も指数的な伸びなのです!というわけで、このグラフの差分を取ってみましょう。一つ前の点との差をとったものがコチラ。

左はわかりにくいですが、y軸の範囲を絞ってみてみると。どうやらgraph1は直線で、graph2は指数的な伸びであることがわかります。 つまり、いずれgraph2がgraph1を抜く可能性があるということです。実際に、もう少しx軸を伸ばして見てみましょう。

やっぱりgraph2のほうがgraph1を抜きましたね。

指数を見破る方法として

  • 対数スケールにしてみる
  • 差分をとる

がポイントです!また、グラフを見るときは途中で打ち切られている可能性に注意しましょう。

最後に

いかがでしたか?グラフの見方を変えるだけで、かなり印象が変わっていることに気づいたはずです。 広告や質があんまりよくない論文にはこういうテクニック(?)が使われたりするので、みなさんはこのような印象操作に騙されることのなき様、正しいグラフリテラシーを持ちましょう。

最後に、私が使っている印象操作法を一つ。さっきまでのグラフ、かたっ苦しいですよね。なので、私のブログでは少しでも親しみやすいように↓の様な漫画風のグラフを使うことが多いです。

作り方はこちら

このくらいなら許されると思います。笑
みなさんも、是非是非使ってみてください。ではではっ

*1:対数をうまく使った記事がコチラwww.procrasist.com

*2:他にも、自己相関係数を出してみたり、ローレンツプロットをしてみるなどいろいろと出来ます。

*3:専門的に言うと、微分値を見ると言うことです。

【数学】旧帝戦数学部門が話題だったので、解いてみた

こんにちは、ほけきよです!

なにやら怪しい大会が京都大学で繰り広げられていたようです。

こういうの、面白いですよね。というわけで、解いてみました。

※手書きです。スミマセン。。。笑

f:id:imslotter:20170702032724p:plain
画像は先程のツイートより引用

問題

問題はコチラ。

1. 積分

f:id:imslotter:20170702032936p:plain

2. 暗号

f:id:imslotter:20170622210212p:plain

3. 幾何

f:id:imslotter:20170702033011p:plain

回答

1. 積分

記号の意味を理解することがカギです!

回答はコチラ

f:id:imslotter:20170702033040j:plain

ちなみに最後の図は面積を可視化したものです。整数部分は階段状に現れるので、それを引けば良い!ってことですね。

2. 暗号

少ない情報量からいかに有用そうなものを推論出来るかがカギです!

回答はコチラ

f:id:imslotter:20170702033051j:plain

ちなみにここに載っている人物は

で、全員超有名なので、綴りをみたらわかるようにしておいて損はないですよ!

3. 幾何

きれいな回答ではないかも。かっちょいい解き方がわからなかったので若干力技

f:id:imslotter:20170702033057j:plain

ちなみにこういう問題は、図をできるだけ丁寧に書くのが意外とポイントだったりします。 いろいろと隠れた情報を引き出しやすいですからね!

おわりに

いかがでしたでしょうか? ちなみに、中身は大量のRedBullだったそうです。私も一本ほしいなぁ! 優勝は京都大学が21分だったとか。はやい!

割と素直な問題が多かった気がします。 もうちょっと難易度上げて、京大生が3時間くらい悩む問題を次は期待したいですね!ではではっ

ちなみに、第二問が一番苦戦しました。パズルっぽいのは、ちょっとニガテ。でも楽しかったです!

爆速で資料を作る!レベル別パワポショートカット集

f:id:imslotter:20170702035737p:plain

こんにちは!ほけきよです。

世の中のクリエイティブな仕事という人たちがどんな仕事をしているか知っていますか。 *1

f:id:imslotter:20170619235713p:plain

この資料作成が2倍早くなると、どうなりますか?こうなります。

f:id:imslotter:20170619235731p:plain

クリエイティブな時間を少しでも増やすために、パワポの効率化は不可欠なのです。*2

今日は、大学院から社会人にかけての数年間でパワポ職人となりつつある私が、爆速で資料を作る方法を紹介します。 絶対覚えておくべきものから、他の人と一歩差をつけられるものまで、レベル別に取り揃えるので、是非是非ご覧ください

※ 今回のはWindows PowerPoint 2016版です。互換性は各自試しながら確認してください。

初級編

超基本

パワポって何?って方も、有無も言わず30分使って覚えておきましょう。絶対に!

用途 ショートカット
コピー/切り取り/貼り付け Ctrl+C/ Ctrl+X/ Ctrl+V
太字/斜体/下線部 Ctrl+B/ Ctrl+I/ Ctrl+U
上書き保存/名前をつけて保存 Ctrl+S/ Ctrl+Shift+S
開く/閉じる Ctrl+O/ Ctrl+W
新しいスライドを追加 Ctrl+M
新しいパワポファイルを作成 Ctrl+N
グループ化/グループ解除 Ctrl+G/ Ctrl+Shift+G
戻る/ 進む Ctrl+Z/ Ctrl+Y
全選択 Ctrl+A
図形の移動 矢印
図形のサイズ Shift + 矢印
図形の回転(15°ずつ) Alt + 矢印

スライドショー編

スライドショーボタン探すのも面倒だと思うので、覚えておくと発表時に便利ですよ。

用途 ショートカット
スライドショー(始めのページから) F5
スライドショー(開いているページから) Shift + F5
該当ページに飛ぶ(スライドショー時) 数字 + Enter
スライドショーの終了 Esc

その他Tips

  • まとまったところでグループ化することで編集効率UP!
  • 線は図形の端と端をつないでおくと便利

中級編

文字列の編集

中央揃えとか、文字を大きくとかいちいちボタン押すの面倒ですよね。 これらを覚えておくと、マウスを使う手間も省け、一気に効率UP!

用途 ショートカット
文字の大きさ調整 大/小 Ctrl+Shift+> / Ctrl+Shift+<
文字列の揃え方 右/ 中央/ 左 揃え Ctrl+R/ Ctrl+E/ Ctrl+L
フォントダイアログの表示 Ctrl+T

微調整のCtrlキー

初級編のサイズ/角度調整の時に、「微調整したい!」って時があると思います。 そういう時に便利なのが、Ctrlキーです。これで、限界の微調整が可能になります!

用途 ショートカット
位置の微調整(1 pixel) Ctrl+矢印
大きさの微調整(1 pixel) Ctrl+Shift+矢印
回転の微調整(1°ずつ) Ctrl+Alt+矢印

マウス移動時Tips

図形サイズ調整等でマウスを使うときはあると思います。そういう時のTipsがこち

用途 ショートカット
角度を固定しながらサイズ調整 Shift + 線のサイズ変更
アスペクト比を固定しながらサイズ調整 Shift + 図形のサイズ変更
図の複製 Ctrlを押したまま図をマウスで移動

上級編

上級編になると、コンボ技を使っていきます。 私がよく使うコンボを紹介します。

図形を爆速で並べるための"位置揃え, 整列"

  • Alt, H, G, Aの順に押すと、位置揃えのところに行く。その後
    • 上下中央 M
    • 左右中央 C
    • 左右に整列 H
    • 上下に整列 V を押すことで、整列ができます。例えば、綺麗に縦に並べたいときは、図のような処理の仕方をします。

f:id:imslotter:20170620022848p:plain

よく使うのは以下の二つです。覚えておきましょう。

  • 横に揃える Alt H G A M Alt H G A H
  • 縦に揃える Alt H G A C Alt H G A V

数式が書きたい

数式も、Altからのコンボ技でかけます。

  • Alt, N, E, I の順で押す

こうすることで、数式エディタを開くことができます。 また、実はAlt+;の同時押しでもOKなようです。 労力はあまり変わらないので、お好きな方をどうぞ!

マウスを使わずフォント変更

中級編でやった"フォントダイアログを開く"からコンボを繋げます。 具体的には以下の順番です

  • 範囲の指定
  • Ctrl+T
  • tab一回
  • meiryo と打つ
  • Enter

こんな感じでOKです

よく使うコンボを覚える。

Altからのコンボをいくつか覚えておくと、本当に爆速になります。Altを一回押すとこんな表示になるので、自分のよく使う機能がある方はぜひコンボ化しておきましょう

f:id:imslotter:20170620001746p:plain

終わりに

いかがでしたか?ちなみに、冒頭でも話した通り、Windowsのパワーポイントです。私は普段MacLinuxユーザーですが、パワポ作りだけはWindowsを使って行います。ショートカットを覚えてしまっては、他のOSなどでいちいちマウスを動かしてられなくなるんです。

余談ですが、某青い外資コンサルティングファームで勤めていた友人は、裏表にびっしり書かれたパワポとエクセルのショートカット集を数枚眺めながら「これを覚えて使いこなせるようにしないと」と言っていました。あそこの企業は独自のショートカットも結構あるようでした。

はじめにちょっとコストをかけてでも、ショートカットは覚えることをオススメします!

皆さんも資料作りより、クリエイティブな仕事をしたいでしょ?ではではっ!

*1:ソースは私です。

*2:資料作成が減ったらなぜ事務作業が増えるのか。これは哲学的な問いであり永遠の謎です。

【Four 4s】4つの4で全ての整数が作れる魔法の数式

f:id:imslotter:20170702033342p:plain

こんにちは、ほけきよです!

“Numberphile"というyoutubeチャンネル知っていますか?

www.youtube.com

大好きなんです。英語ですが、英語がニガテってひとでも数字で雰囲気が伝わると思います。 今日はそんな中で、面白い数遊びネタを見つけました!

その数遊びは「Four 4s」と呼ばれるもの。

www.youtube.com

ルールは非常に単純。

4つの4を使って、指定された数を作る。他の数字は使ってはいけない。

みなさんも、頭を悩ませながら読んでみてください。

0から9

まずは小手調べに0から9までいきましょうか。

0 = 4-4+4-4

1 = 4-4+4\div 4

2 = 4\div4+4\div4

3= (4+4+4)\div4

4 = 4+(4-4)\times4

5 = (4\times4+4)\div 4

6 = (4+4)\div4+4

7 = 4+4-4\div4

8 = 4\times4-4-4

9 = 4+4+4\div4

10は?

9まではこのようにできるのですが、10はできますか??

うーん難しいですね。。。どうすれば良いのでしょう?

誰が『+-×÷』だけだと言った?

もう一度、ルールを見てみましょう 「数字は4以外使ってはいけない」 とだけ書いています。

ここから、四則演算(+-×÷)だけじゃなくて、他の演算も考えてみましょう。

f:id:imslotter:20170618024917p:plain
Numberphile "The Four 4s"より

この図の左側が、さっきまでに使ってたやつですね。右側はなんなのでしょうか。ていきましょう。

数式 名前 意味
 a||b Concatenation つなげる  4||4 = 44
 a^{b} Exponents 指数  4^{4}=4\times\ 4\times 4\times\ 4=256
 a! Factorial 階乗 4!=4\times\ 3\times 2\times\ 1=64
 .a Decimal Point 小数点 .4 = 0.4
 \sqrt{a} Sqiare Root ルート \sqrt{4} = 2

これらを使うと、さらにいろいろな数を表せるのです。

10 = 4+\sqrt{4}+\sqrt{4}+\sqrt{4}

10 = (4||4-4)\div4

こんな風にね!実にいろいろな数を表現できます。他の数でも是非考えてみてください。

全ての整数を表せる??

とは言え、これらの演算だけで全ての整数は表せません。最後にもう一つだけ、道具を追加しましょう。 それが「対数」です。

数式 名前 意味
 \log_{a}{b} *1 log 対数  \log_{4}{4^{2}} = 2

対数を使えば、全ての整数を4つの4だけで表すことが出来ます!

対数とは

対数っていうのはその数が何回かけられたかを表します。 具体的に見ていったほうが早いかと思うので、見ていきましょう。

f:id:imslotter:20170618124129p:plain

このように、対数\log_{a}は、aが何回掛けられたかを表すことが出来るのです!対数っていうのはこれだけ!

2は4を何回掛けているの?

最後の\log_{4}{\sqrt{4}}に関しては、逆を考えるとわかりやすいです。つまり、「2を何回かけると4になるか」です。 これは2\times 2 = 4なので、答えは2回です。

4を何回かけると2になるか?という問いに関しては、その逆の\frac{1}{2}回ってことですね。 つまり、\log_{4}{\sqrt{4}} = \frac{1}{2}というわけです。

任意の整数を表す魔法の数式

これまでの道具を使うと、任意の整数が表せられるようになります! その魔法の数式がこちら!

f:id:imslotter:20170618132553p:plain

何やらいりくんでいますが、ルートの数=整数となっています。

例えば、100という数字を作りたいときは、ルートを100個つければ良いのです!!

f:id:imslotter:20170618164718j:plain

きちんと、当初のルール4以外の数は使ってはならないは守りながら、これであらゆる数字を表せられる事ができました。

途中式

気になる人のために、計算の途中式も載せておきますね。

f:id:imslotter:20170618134437p:plain

おわりに

いかがでしたでしょうか。数は制限されてるけど、演算の制限がないところがこの問題のポイントでしたね!

ちょっとだけ真面目な話をすると、こういう遊びは結構頭の体操になると思います。以前どこかの記事でも話した気がするんですが、1+1=2を教えるより、2になる計算式を10個考えさせるほうが、ずっとずっと思考力がつくと思います。小・中学生のお子様をおもちの方は、こういう数遊びで、算数の楽しさを教えてみてはいかがでしょうか。

また、Numberphileには、他にもたくさんの数遊び系の動画があるので、暇な時にでも是非是非御覧ください!

最後にほけきよから、1・9・1・9をつかって、10を作ってみてください~。+-×÷だけでできます。意外に難しい問題です!暇な時にでも。ではではっ

*1:aを対数の底といいます

【保存版】JPEG?EPS?画像の拡張子を徹底解説!

こんにちは、ほけきよです。

皆さん、ブログや文書を書くときに、画像を挿入することがあると思います。 画像の拡張子って色々ありますよね。pngとかjpg, epsなど。

こういうの、どれがどういう特徴を持っているかって知っていますか? 恥ずかしながら私はつい最近まであまり意識せずに使っていました。「texで文書ファイルを書くならepsでしょ」とか 「背景透過させるならpngだろ」とか、場当たり的な知識ばかり。

そこで今回は、主要な画像系拡張子をまとめてみました!

  • ブログなどに使う画像ファイル
  • 論文など正式な書類に使う画像ファイル
  • 写真に使う画像ファイル

とかに興味があるかたは、是非参考にしてみてください。

一覧表

忙しい人のために、まずは一覧表です!これだけ見れば大体の特徴がわかるはずです*1

名前拡張子 読み方 圧縮/非圧縮 ベクタ/ラスタ 用途
JPEG .jpg 圧縮(不可逆) ラスタ 1677万色 写真など
GIF .gif 圧縮(可逆) ラスタ 256色 簡単なアニメーション
PNG .png 圧縮(可逆) ラスタ 1677万色 より精細なロゴ
TIFF .tiff 非圧縮 ラスタ 1677万色 印刷物の入稿(写真)
SVG .svg - ベクタ 1677万色 印刷物の入稿(簡単な図)
PDF .pdf - ベクタ/ラスタ 1677万色 印刷物の入稿
EPS .eps - ベクタ 1677万色 印刷物の入稿
RAW .CR2(Canon)
.NEF(Nikon)
.CRW(SONY)
非圧縮 ラスタ 1677万色 ガチカメラ撮影
AI .ai - - - illustrator編集用
PSD .psd - - - photoshop編集用

*2

いろんな疑問に答えるよ

ここからは、上記の一覧表も利用しながら保存形式に関する詳細な疑問に答えていきます!

圧縮/非圧縮って何?

画像を小さくするかどうかということです。例えばカメラで撮影したデータだと、大きいもので10MBを超えるデータも出てきます。そのまま使うには大きすぎる場合は、圧縮してこのサイズを小さくすることができます。代表的なものがJPG, GIF, PNG形式です。

圧縮にもいろいろな方法しても可逆と不可逆の2種類があり、要は圧縮したものを元に戻せるかどうかということです。これは圧縮の方式により、一長一短あります。詳しくは話しませんが、JPGが不可逆、GIFやPNGは可逆です。

圧縮形式などを知りたい方は、こちらの記事がわかりやすくておすすめです。

ついでにこれら3つの特徴や使い道を簡単に話すと

  • JPEG写真画像の圧縮に非常に適している。
  • GIFは色の制限があり、精細な画像は作れない。ファイルは小さくできるので、簡単なアニメーションを作ることも出来る
  • PNGはフルカラーで可逆圧縮なので、ロゴなどの作成に良い。透過画像を作ったりと、透過度を調整できるところもポイント。

ブログなら、

  • 写真中心でアイキャッチを作るならJPEG
  • ロゴなどを中心ならPNG(ただし、透過には注意)
  • 文中に挿れるアニメーションにGIF

とかがいいのではないでしょうか。

何で1677万色??

一覧表にあった、1677万色。通称フルカラーと呼ばれています。*3フルカラーとは、

赤(Red)、緑(Green)、青(Blue)の各256階調を組み合わせた組み合わせの数

のことをいいます。色の三原色の強さを256段階に調節出来るようになっていて、その組み合わせ256×256×256=16777216色がフルカラーということですね!

パソコン業界ではこれをフルカラーと呼びますが、実はこれ以上に細かい階調ももちろん存在します。 あとで話しますが、高級なカメラに備わる保存形式RAWなどでは、256階調の16倍~64倍細かい階調だったりします。

GIFの256色ってなんで?

勘のい人は気づくかもしれません。

「256は3で割ることも出来ないし、3乗根でもない。どうなってんの?」

これはGIFの色の選び方が違っていて、GIFはフルカラー1677万色から任意の256色を選べるのです。これをインデックスカラーと言います。詳しくはWikipedia-インデックスカラーをどうぞ。

ラスタとベクタってなに?

一覧表にあるラスタとベクタというのが気になる方も多いでしょう。 画像形式には、表現の仕方として、2種類あります。

  • ラスタ形式 : 画像をピクセルごとに色の付いた点として表現する。複雑な絵や写真が得意。一方で、拡大すると小さな点が目立ち雑に見える。
  • ベクタ形式 : 画像を線や面を数式で表現する。拡大しても滑らかさを保つ。ただし複雑な図形だと処理が重くなり表示に時間がかかる。
f:id:imslotter:20170616011713j:plain
ラスタとベクタの違い(Wikipediaより)

ベクタ形式は、解像度を全く気にしなくてもよいことが大きな利点です。「圧縮どうしよう。。。」と悩まなくて良いので、例えば本など印刷物に図を渡すときはベクタ形式で渡して、あとは向こう側でよしなにしてもらうのが良いでしょう。

本に適しているのは?web対応は?

ここで本というワードがでたので印刷物に適している拡張子はどれかについて簡単に説明します。

簡単な図を渡すときは先程の通り、解像度を任意に調整できるベクタ形式のEPSやPDFが適しています。

複雑な図や写真を渡すときは、TIFF形式は圧縮しないままで渡せる、多くのソフトウェアが対応している。などの利点から、推奨されています。

印刷物に強い一方で、EPSやTIFFweb非対応の拡張子となっています。web対応の拡張子には

などを使いましょう。*4

RAWってなに?

一眼レフで写真をとる方たちは「RAW現像」などという言葉を一度は聞いたことがあるのではないでしょうか。ざっくりいうと、後でレタッチ(編集)作業をするためにカメラで保存する形式になっています。RAWが拡張子というわけではなく、一覧表のようにカメラメーカによって拡張子は異なります。

原理や詳細をここで語るには量を食ってしまうため、箇条書きで特徴を説明すると

  • カメラのセンサが受けた情報をそのまま保持したものがRAW。センサ情報をカメラ内である程度処理して圧縮したものJPEG
  • 色(ホワイトバランス)の変更が柔軟にでき、本当に見たものに近い色を出せる
  • JPEGよりも明るさを調整することができ*5、コントラストの変換が自在
  • データは重いJPEGの2~5倍程度のファイルサイズ

詳しく、でもわかりやすく知りたいという方は、この記事がオススメ。 RAWとJPEGの違いがめちゃくちゃわかりやすかったです。

.ai, .psdっていう拡張子も見るんだけど。

これらの拡張子は単なる画像以上に、それぞれの編集ソフトで編集したものという意味合いを持っています。

の保存ファイルとなっていて、編集履歴が保存されているものになります。逆に言えば、これらのソフトウェア以外からは普通開けません。*6

正式名称は何なの?

ここまで話しといて最後にこれかよ!って感じですが、気になる人もいるかなと思ったので、メモ程度にどうぞ。

  • JPEG : Joint Photographic Experts Group
  • GIF : Graphics Interchange Format
  • PNG : Portable Network Graphics *7
  • SVG : Scalable Vector Graphics
  • PDF : Portable Document Format
  • EPS : Encapsulated PostScript
  • TIFF : Tagged Image File Format
  • AI : Adobe Illustrator
  • PSD : Photoshop Data

おわりに

いかがでしたか? 知っている拡張子から、聞き慣れない拡張子までいろいろあったと思います。 また知っている拡張子でも、違いって意外に知らなかったりしますよね。

この記事で画像にたいする理解が深まったら良いなと思います!

ちなみに私はRAW現像に俄然興味がわいてきました!ではではっ

*1:保存拡張子の形式はまだまだたくさんあり、この限りではありません。代表的なものを選んでみました。

*2:この一覧表はあくまで代表的なものなので、詳しくは少し異なる場合もあります。より詳しいことが気になる方はWikipedia-画像ファイルフォーマットをご覧になってください

*3:トゥルーカラーとも呼びます。むしろこっちが正式名称っぽいです。

*4:ちなみにはてなSVG形式も未対応です;o;

*5:JPEGは256階調, RAWは4096~16384階調

*6:.aiを無料で開け、編集できる有名なフリーソフトがあります。(Inkscape)使ってみてはいかがでしょうか

*7:PNG is Not GIFという意味も込められているらしい

Google Search Consoleの検索順位とクリック率を分析して、リライト戦略を考える

f:id:imslotter:20170702033523p:plain

こんにちは、ほけきよです!

ある程度経験を積んだブロガーなら、Google Search Consoleを使っていることでしょう。 自分の記事にどういう単語を調べた結果辿り着いているかがわかるツールです*1 ブログも開設して時間が経つたびに、「検索流入」の重要性をひしひしと感じるようになります。

そんな時にSearch Consoleを使うと、リライトすべき記事が浮き上がってくる。というわけです。 私の記事も検索流入がちょっとずつ増えてきたので、 Search Consoleでの結果を分析することにしました。*2

Search Consoleで抜き出したデータ

まず、はじめにSearch Consoleでデータを抜き出します*3Google Search Consoleにアクセスし、図のように [検索アナリティクス]を左メニューから選び、4つのボックスにチェックを入れます。 f:id:imslotter:20170608232022p:plain

項目 意味
クエリ数 検索ワード
表示回数 検索ワードによって自ブログの記事が表示された回数
クリック数 表示された記事タイトルのうち、クリックされた回数
CTR (クリック数)/(表示回数)
検索順位 Google検索の結果何番目に表示されたか

今回この中で特に気になったのは、「検索順位とクリック率(CTR)の関係」です。 CTRの統計情報は、ある程度不変だと思ってます。

例えば調べたいワードがあった時に、googleの検索結果でどこをクリックしますか? まずは一番上をクリックすると思います。 気になるのは、順位が上がればどのくらいクリックされる確率が変わるのかです。 これによって、リライトの気合の入れ方も変わってくると思います。

それでは、当ブログでの分析結果をどうぞ!

1-10位

f:id:imslotter:20170612234142p:plain

青の点が平均、赤のベルトがばらつきです。 1位の50%に対し順位が下がるごとに単調減少していることがわかります。 特に、1→2→3の下がり方がひどい。頑張って1位をとると、倍近くの恩恵が受けられることがわかります。 また、10位の時に少しCTRが上がっていることがわかります。これは推測ですが、次ページに行くときに目に触れるからではないでしょうか。

以上が1-10位です。

■ 1位と3位では2.5倍くらいCTRが変わる

■ 4位から9位はあんまり差がない。なだらかに単調減少

■ 10位でちょっと上がる。ページ送りの時に目を触れるから?

1-30位

ここまではなんとなく予想通りですが、検索ランキング30位まで範囲を伸ばすと、ちょっと面白いことが起こります。

f:id:imslotter:20170612234824p:plain

10-20位の多くは、4-10位までよりCTRが高いことがわかります。普通に考えて直感に反していますよね。その理由を考えるために、もう少し分析をしてみます。

1位-30位 (表示回数で分けたver.)

今は全記事同時に分析していましたが、中には検索ボリュームが少なすぎて、そもそも表示されないワードも存在します。 そういうワードたちは、サンプル数が少ないために、分散が大きくなってしまいます。 というわけなので、100回以上表示した(青)か否(緑)かで分けました。

f:id:imslotter:20170612235935p:plain

青の線の方が、ばらつきが少なくより傾向を反映していることがわかると思います。 11位以降は100回以上表示されていないものもちらほら見かけます。 そのくらい、100回以上表示されるものというのも少ないんですね。

これは推測ですが、2ページ目まで検索するような単語を調べる時って、大抵検索ワード自体がそもそもマイナーなものが多い気がします。そういう時って、片っ端からクリックして調べますよね。なのでクリック率が向上したのでは?? とか思っています。

これからの戦略を練る

バズった記事はレッドオーシャン戦略

データを分析してみて、リライトするものの戦略をちょっと立ててみようと思いました。 「検索順位が1-3位になるとCTRが跳ね上がる」

という事実から、表示回数が多い(3000回以上)で4位以降に埋もれているワードをソートしてみます。私のブログではこんな感じでした!

f:id:imslotter:20170613004213p:plain

ここの単語のラインナップには大別して2種類あります。

  1. 短期的なブームにより検索ボリュームが多くなった(mastodonFall out boy*4プリツカー賞*5 )
  2. 一語のビッグワードかつ以前バズで被リンクを多く稼いだ記事に関わる語(Vivaldi, 円周率)

短期的なブームに関しては弾込めが重要なので、リライトよりむしろ時流を読んだ新規記事作成ですね。今回はリライトなので注目するのは2番目の要素。ビッグワード狙いです。

vivaldi』だとこれ

『円周率』だとこれ

やはり、ビッグワードを取るには被リンクが大事なのかもしれません。逆にいうと被リンクを稼いだものは、ビッグワードを獲るチャンスがあるので、どんどんリライトでレッドオーシャンを攻めて行きたいです。

11-15位はブルーオーシャン戦略

続いて、まだまだ改善の余地が必要とGoogleに判断されている記事も注目してみましょう。

「検索順位が11-15位で、表示回数が100回を超えているもの」

をソートします。結果がこち

f:id:imslotter:20170613005026p:plain

ここに注目した理由は「表示回数は1ページ目に載るだけでグンと跳ね上がる」からです。 先ほどのソートより、個性の強いワードが並んでいることもわかります。 ブルーオーシャンかつ検索順位を狙える単語として、将来有望株です。

まとめ

以上がGoogle Search Consoleを分析してみた結果です。 結構色々なことが浮かび上がってきました。まとめておきます。

【各順位の特徴】

■ 1位と3位では2.5倍くらいCTRが変わる

■ 4位から9位はあんまり差がない。なだらかに単調減少

■ 11位以降は表示回数がグッと下がる

■ 11位以降は個性の強い語が多く出てくる

【リライト戦略】

■ 検索上位陣はレッドオーシャンを攻める。バズった記事を中心にビッグワードを狙う。

■ 11位以降の記事は、個性的な語で意外に検索されているブルーオーシャンを狙ってリライトする

検索流入精神安定剤。頑張ろう!ではではっ

*1:Google検索のみの結果です。

*2:他の方で同じようなことをして欲しい方いれば、連絡ください。むしろ私のブログだとサンプル数が少なすぎてアレなので、、、検索クエリなんかは公表せず、CTRなどの統計データだけは公表するかもしれませんが。

*3:今回は、過去一ヶ月分のデータを用いました。

*4:ライブ前後に跳ね上がりました

*5:日本で授賞式があった時に跳ね上がりました

京都の最強パワースポット『三千院』の雰囲気が最高だった

こんにちは!ほけきよです。

今回は、少し市内を離れて山奥へと向かいます。 目的地は、『三千院

なんでも京都最強のパワースポットとのこと。 ふむ、気になる。行ってみよう!!

三千院

三千院とは

  • 最澄によって開基
  • 「一念三千」という、天台宗の教義からからとったもの
  • 貴人や念仏修行者が都の喧騒を離れて隠棲する場

三千院への行き方

京都駅から大原行きのバスに乗って1時間強。 その終点から約15分山登り。 おおよそ1時間半くらい。運賃は550円

まあ、結構遠いです。だからそんなに混んではいない。

ここからは時系列に沿って見ていきます!

道中

大原に着くと、早速登山を開始します。 大原は大原女(おはらめ)と呼ばれる、薪を頭に載せて京の都まで運び、それを売る人たちで有名でした。大原女のマスコット(?)キャラみたいなのも道中に発見。*1

f:id:imslotter:20170702111246j:plain

そのため、この道は大原女の小径と呼ばれています。この字面に多少のエロティシズムを感じたのは内緒。

f:id:imslotter:20170702111338j:plain

山道に入ると、雰囲気が一変します。静寂と緑に包まれ、癒しの空間です。

f:id:imslotter:20170702111409j:plain

もうすぐ三千院!というところでアイスきゅうりを購入。ありえんうまみなので、夏場にバテそうな人は購入しちゃいましょう!

f:id:imslotter:20170702111303j:plain

三千院

そうしてたどり着いた三千院。拝観料は700円。まず建物の中を見て、その後にお庭を回る。結構広くて1~2時間はかかります。

内部の仏様は撮影禁止。 しかし、中のここのお手洗いが割と雰囲気出していたのでパシャ。 どうです、雰囲気あるでしょう?

f:id:imslotter:20170702111434j:plain

聚碧園

歩いていると、立派なお庭で観光客が足を休めています。ここが聚碧園です。作家の井上靖が“東洋の宝石箱”と賞賛したほどの見事な庭園。ここではお抹茶も飲めるようになっています。庭を眺めながらのお茶なんて、最高ですね。

f:id:imslotter:20170702111454j:plain

わらべ地蔵

三千院のポスターでよく見る苔とわらべ地蔵。 地蔵の周りは苔が実に美しい。夏場は特にオススメの季節です。

f:id:imslotter:20170702111519j:plainf:id:imslotter:20170702111521j:plain

弁財天池

お地蔵様の近くにある池が弁財天池。 金運の神様のお池とだけあって、たくさんのお布施が。 この池も、また実に美しい

f:id:imslotter:20170702111550j:plain

少し階段を上ると、お庭の緑が映えますね。素晴らしい!

f:id:imslotter:20170702111625j:plain

お地蔵様?

しばらく順路を歩いていると、またお地蔵様(?)が。もののけ姫のこだまみたいで可愛い。

f:id:imslotter:20170702111641j:plain

まとめ

お地蔵さんに癒され、緑に癒され、終始癒しの空間が広がっていて、素晴らしかったです。少し遠いので、気合が要るかとは思いますが、全力でオススメしますよ。

特に夏場は苔の緑が美しい季節なので、行くことをオススメします。夏の京都ってあまりコレ!と行った有名観光スポットもないので、是非是非三千院に!ではではっ

*1:謎のオブジェかと思ってましたが、頭の薪にはちゃんと意味があったようです

PROCRASIST