ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

アウトドア用のSNS?「The dyrt」

thedyrt.com

英語読めないからはっきりとはわからんが、キャンプ地のレビューだったり、なにかポイントためたりすることができるっぽい。こんなサービスもあるのね

ビジネスモデルってなんじゃろと調べているがよくわからん。これ英語勉強する必要があるな。。。きになるサービス見つけても理解できないし意味ない。

はー、でも、キャンプ地の1週間の天気とか情報とか載っているのですごい。日本には対応していないっぽい。

こういうビジネスもあるのね。勉強になる。

TF-IDFを理解しようと頑張った

先月ぐらいから自然言語処理頑張ろうとして入門っぽいTF-IDFをPythonから理解しようとしたけど使いどころわからんくて無事死亡。

今日は式から理解しようとしてやってみた。

対数がわからん

ぐぐってもいいけど、この本もっていたので軽く理解。

式がわからん

tfidf(t, d) = tf(t, d) \times idf(t, d)

※tf-idfって書きたいのにハイフンが引き算になるのでつらい

  • tfはあるドキュメントdの単語の出現頻度
  • idfは逆文章頻度

idf(t,d) = \log \frac{n_{d}}{1 + df(t, d)}

  • n_{d}はドキュメントの総数
  • df(t, d)は単語tを含んでいるドキュメントdの個数を表す。分母の1dfが0の場合ゼロ除算を防ぐため

scikit-learnに実装されている式は下記らしい

idf(t, d) = \log \frac{1 + n_{d}}{1 +df(t, d)}

tfidfはこちら

tfidf(t, d) = tf(t, d) \times (idf(t, d) + 1)

  • ある文章dで出現頻度が大きいtは重要である可能性が高い
  • しかし、とある文章を感情分析したい場合、肯定的、否定的な文章どちらにも同じ単語が出現することはよくある
  • そこで多くの文章中dに存在する単語tは、1つの文章の特徴としてはなりづらくしよう -> idf

ってな感じかな

idfは分母と分子が同じだと1になり、対数で計算すると0になるので、値は小さくなる(はず

なるほど。

scikit-learnで試す

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

# 形態素解析した文章毎の半角スペース区切りの単語
# surfaces = [['映画 エイリアン レビュー あらすじ'], ...]

vectorizer = TfidfVectorizer()
x = vectorizer.fit_transform(surfaces)

# ベクトル器から単語リストを取得
terms = vectorizer.get_feature_names()

# 全単語数が確認できる
print(len(terms))

# 文章毎に単語のベクトルを取得
vec_matrix = x.toarray()

# (全文章数, 全単語数)のベクトル
# vec_matrix.shape

# tfidf値が0より大きいものだけ取得する
words = []
for doc in range(len(surfaces)):
    feature_index = x.toarray()[doc, :].nonzero()[0]
    tfidf_scores = zip(feature_index, [vec_matrix[doc, x] for x in feature_index])
    for w, s in [(terms[i], s) for (i, s) in tfidf_scores]:
        words.append(w)

# 単語のカウント
word_dict = {}
for w in words:
    if w in word_dict.keys():
        word_dict[w] += 1
    else:
        word_dict[w] = 1

word_df = pd.DataFrame([[k, v] for k, v in word_dict.items()], columns=['word', 'count'])
word_df.head()

これで重要そうな単語を確認することができる?

(ちなみにこれを実装したときに確認した単語リストは前処理が甘くjs,css,htmlのタグ名が多く上がっていた。。。orz)

読んだ「PythonによるWebスクレイピング」

PythonによるWebスクレイピング

PythonによるWebスクレイピング

これこれ。

ざっと感想としては、自然言語処理以外はよかったかなーという印象。この本は英語のサイトを前提にしているので日本語のtipsとしては別の本や情報が必要かなと思った。

* 第Ⅰ部スクレイパーを作る
    * 1章 最初のWebスクレイパー
    * 2章 高度なHTMLパーシング
    * 3章 クローリングを開始する
    * 4章 APIを使う
    * 5章 データを格納する
    * 6章 文書を読む
* 第Ⅱ部 高度なスクレイピング
    * 7章    汚れたデータをクリーニング
    * 8章 自然言語の読み書き
    * 9章 フォームとログインでクロール
    * 10章 JavaScriptのスクレイピング
    * 11章 画像処理とテキスト認識
    * 12章 スクレイピングの落とし穴を避ける
    * 13章 Webサイトをスクレイパーでテストする
    * 14章リモートでスクレイピング

自分のこれまでのクローラーってネットの情報を適当にあさって作ってきたクローラーなので、本で勉強するのは初めてだった。なので第一部はエラーハンドリングなどが勉強になった。

後半のほうは実務や趣味で雑ながらやってきたことが多かったので真新しい情報はなかったかなという気持ち。あ、T○rのやつは闇っぽくてよかった(褒め言葉)

クローラーの基礎を勉強するなら良いと思う本でした。

今自分がほしいなと思う情報はクラウドを使った分散クローラーとか作りたいなーと思っていたので、別の情報や本を探さなきゃ。

リアルタイム犯罪通知アプリ「Citizen」

www.citizen.com

おもろい。ニューヨーク市でしか利用できないのかな? 多分実験しているんだろうと思う。

近くで事件が発生したら、アプリで通知され、ユーザーはそれを確認し行動に移すことができる。

日本だとどうなるんかな。万引き犯とかコンビニ間だけでも連携できそう。

経営・営業企画に使える情報を活用できる「SPEEDA」

面白い!って思ったサービスの紹介をやろうと思った。

一番はビジネスモデルの情報収集を習慣にするため。本当は気になるものだけをやりたいけど、それじゃ自分のスコープ外は追えないと思うので、適当に気になった、得た情報を書いてく。

目標はビジネスを理解したい。

はい。ってことでやる。

jp.ub-speeda.com

日本のスタートアップでぐぐったら出てきたサービス。

動画みたけど、aws紹介動画まで簡単ではないが、よくできていると思う。

企業分析が大体7日かかる作業をこのサービスを使えば、1時間で終わりますよ。ってのが売りっぽい。

それにより、作業コスト、人件費を抑えることができますよ。ということらしい。

そもそもそういう情報ってどうやって集めてるんじゃろ?

資料請求、一旦トライアルで登録しないとUIは判断できないけど売りっぽいので多分いい感じなのかな?

よくわからんが、サイトだけ見るに、経営・営業企画での活用ができるとのこと。

ふーむ。そういう人たちには便利なのかね