サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
セキュリティ
qiita.com/ynakayama
昨日は回帰分析の一例として外れ値を除去しながら相関係数を調べるといったことをしました。 昨日のような回帰分析を単回帰分析と言います。定義を述べると 1 つの目的変数を 1 つの説明変数で予測することです、その 2 変量の間の関係性を y = ax+b という一次方程式の形で表します。a は傾き、 b は切片です。 単変量解析の重要性 さらなる高度な分析として多変量解析をしていくにしても、多変量は単変量をたくさん集めたものとも言えますので、単変量の解析はその基礎となるというわけです。このように単変量解析は統計の基礎中の基礎であるということも述べました。 相関分析においては、昨日のように単変数ではわからない外れ値を取り除いて回帰式を求めるというケースの他に、相関がありそうにみえて実は無い (疑似相関) ケースや、反対に直線に回帰はしないが回帰式を求められるというケースもあります。 たとえばスー
統計学の代表的な手法について、人気書籍「統計学が最強の学問である実践編」に掲載されている一般化線形モデルをまとめた一枚の表を最初に掲げひとつひとつ多変量解析の手法を追ってきました。今回は実際のデータを分析していくにあたり留意すべき事項をまとめます。このあたり上記書籍からの引用抜粋を含みます。 ビジネスにおける分析の手順 今まで説明したとおり * 量的なアウトカムに対しては重回帰分析 * 質的なアウトカムに対してはロジスティック回帰 をおこなうことでどんなアウトカムと説明変数の関係性も分析できるようになります。 手法や指標の意味がわかったあとでも、実際に使いこなそうとすると難しいところがいくつかあり、その代表的なものは「どの説明変数をいくつ使えば良いか」というインプット、「出てきた結果変数からどういう意味を読み取りどう解釈してどうアクションを取るか」というアウトプットの二大側面に整理できます
前回までロジスティック回帰の話でしたが今日は因子分析の話です。 最初に掲げた一般化線形モデルの表を参照してください。 因子分析とは、複数の変数があったとき、その背後にそれらに影響する構成概念があるものと仮定し、少数の潜在的変数で複数の変数間の関係を説明しようというものです。 このように少数の変数へと変換することを縮約、またこの構成概念を説明する潜在的変数を因子と言います。因子分析は背後に共通した因子が想定できる変数を縮約し、新しい量的な変数を作ります。 このような伝統的な統計手法はすでに解説しているサイトがたくさんあります。たとえば次のページなども参考にしてください。 株式会社NTTデータ数理システム S+rescue Chap6 因子分析 http://www.msi.co.jp/splus/learning/rescue/factor.html 因子分析をやってみる 昨今では Pyth
前回はロジスティック回帰について、概要について参考文献を紹介、使いどころと使用例を説明しました。 前回も述べた通り、ロジスティック回帰とは二値論理と言われる true か false かという論理に関するアウトカムを分析するための方法です。 今日は実際にオリジナルのデータを使ってロジスティック回帰分析をし、その結果について考察してみたいと思います。 想定するシナリオ 今回は話をわかりやすくするためにオンラインゲームを想定します。 あるオンラインゲームでは毎月イベントがあります。このイベントではフレンド同士で協力して戦ってスコアを稼ぎます。そして、スコアが高い上位ランキング 1,000 位以内に入ると特別な報酬が貰えます。 前回の実績となる数名のユーザーのデータを集めたので、ここからランキング上位に入賞するための成功要因を分析したいと思います。 いかがでしょうか。わかりやすくするためにゲーム
西内啓氏著書の「統計学が最強の学問である」と「統計学が最強の学問である実践編」はシリーズ累計 37 万部を突破する異例のベストセラーとなりました。読まれた方も多いのではないでしょうか。 この前後 2 冊では、統計学の教科書に登場する様々な手法を「一般化線形モデル」という考え方に基づき一枚の表にまとめています。 ここではその表を引用致します。 統計学が最強の学問である p170 一般化線形モデルをまとめた一枚の表 統計学が最強の学問である実践編 p344 統計学の理解が劇的に進む 1 枚の表増補版 これらの 2 冊は、ビジネスでよく使う統計手法について、一通りそれらがどういう意味を成しているか、どのようなアイデアから生まれてどう使えばいいかといったことが解説されています。 また上著実践編 p357 では本書では得られない 3 つの知識として 1. ツールと実データを使った実践 2. 数理面で
Ruby は柔軟なプログラミング言語であり Sinatra のような手軽で軽量なウェブアプリケーションフレームワークがあります。いままで分析用の言語として主に Python で統計やデータの可視化をおこなってきましたが、もちろん Python にも多種多様なウェブアプリケーションフレームワークがあります。 数値計算などを Python でおこなう仕組みをウェブシステムとして提供したい場合、わざわざ別の言語を利用するよりウェブの部分も同じ言語で作ってしまったほうが一貫性があります。 そこで今回は Flask という Python の小規模なフレームワークを利用し、ごく簡単なウェブアプリケーションを作ってみます。 Flask には日本語訳された親切なユーザーガイドがあります。 https://a2c.bitbucket.io/flask/ とても丁寧に書かれているので、基本的にはこのドキュメン
昨日は Python のウェブフレームワーク Flask で簡単な応答システムを作りました。これだけだとあまりに退屈なので、せっかくですから NumPy を利用して少しは楽しめるものを作ってみたいと思います。 「ガチャ」とは、最近流行のソーシャルゲームやオンラインゲームにおいて 1 回課金することによってアイテム等をランダムに入手できる仕組みのことです。 10 連ガチャとは 1 回の試行で 10 回分のレアガチャを引く仕組みのことです。基本無料を謳うソーシャルゲームなどでは、このようなアイテム課金で利益を得る仕組みになっています。 シミュレーションの目的としては、運営サイドとしてはプレイヤーがじゃぶじゃぶ課金したくなるような射幸心を煽りまくるガチャが提供できているかどうか確認する、プレイヤーサイドとしてはリアルマネーいわゆる実際のお金を投入する前にあらかじめどれくらいの確率で成功するのかを
今まで pandas + matplotlib を利用したプロッティングとしては pandas + matplotlib による多彩なデータプロッティング や matplotlib (+ pandas) によるデータ可視化の方法 といったものを紹介してきました。 抽出および加工したデータを俯瞰するにあたり、可視化までの流れをあらためて整理して追ってみましょう。 データセットを pandas オブジェクトにする まず pandas の世界にデータセットを持ってくることになりますが、これは主に 2 通りの流れがあります。 csv ファイルなど外部ファイルから pd.read_csv や pd.read_table といった関数を使って読み込む方法 連想配列 (辞書) オブジェクトなどを DataFrame に変換する方法 このうち 1. についてはすでにそのまま使える構造化されたデータが外部の
以前に IPython の豊富な機能を使いこなすための説明や IPython Notebook の使いどころ、 IPython notebook サーバーを立ち上げる方法を書きました。 今回はその続きで、プロファイルの切り替えやプロンプトのカスタマイズ、対話的デバッガ (pdb) の利用について書きます。特に対話的デバッガは重要でこれを使いこなせるようになると開発生産性がぐっと高まります。 プロファイルの切り替え デフォルトのプロファイルは次のコマンドで生成できます。 こうするとホームディレクトリとして設定された場所に .ipython/profile_default のようなディレクトリが作成されます。この default の部分がプロファイルの名称になります。 プロファイルでは主に次のような項目を設定できます。 プロンプトや出力の色の設定 起動時の Python コードの実行 マジック
データをカテゴライズしてそれぞれのカテゴリに関数を適用するのは集約や変換と呼ばれます。これらはデータ分析のワークフローの中でもとりわけ重要な部分とされます。 pandas はグループ演算における強力な機能を有しており直感的な操作が可能です。 R 言語の様々なパッケージ作者であるハドレーウィッカム氏の有名な論文 The Split-Apply-Combine Strategy for Data Analysis (PDF) ではグループ演算のプロセス「分離ー適用ー結合」について述べられています。 pandas でもこのグループ集約操作モデルをベースとなる考え方として取り入れています。データはプロセスの最初の段階で 1 つ以上のキーによって分離され、次にそれぞれのグループに関数が適用され、関数を適用した結果が結合されて結果を示すオブジェクトに格納されます。 以前に Ruby で日本国内の株価を
二項検定をする A 君と B 君がポケモンで対決をしました。 20 回ほど遊んだ結果として A 君が 17 回勝利し、 B 君が 3 回勝利をしました。 感覚的に A 君のほうが明らかにポケモントレーナーとして強そうですが、果たして統計学的にも同じことが言えるでしょうか。今回は統計解析用の言語である R を利用してこれを仮説検定します。 統計解析用言語 R R は自由なソフトウェアで、無料で使える統計解析用言語です。統計の分野では有償のソフトウェアも MATLAB など有名なものがたくさんありますが、いずれもなかなかに高価です。 その点 R は無料で使えますのでなかなか予算の確保できない貧乏な研究者にもやさしいですし、それでいて柔軟で強力な機能を備えていますから、この言語を習得して損することは無いと言っても差し支えないほどです。 さて一連の記事では Python を主に使ってきましたが、純
みな味の好みがバラバラで、同じメニューでも人によって採点が高かったり低かったりしているようです。 似ている人を探す 何らかの対象に対して人々の評価が集まったとき、その傾向が似ている程度を決定する基準が必要になります。これを 類似性スコア (Similarity score) と言います。類似性スコアの算出にはさまざまな方法がありますが、上記の集合知プログラミングではユークリッド距離とピアソン相関係数が取り上げられています。いずれも 2 つの確率変数の間の関連度合いを表す尺度であり -1 から 1 の範囲を取ります。 ユークリッド距離 ここでは 平方ユークリッド距離 (Squared Euclidean distance) を使います。これはそれぞれの軸の上での差を求め、その二乗を累計するものです。つまり数式では def sim_distance(prefs, person1, person
IPython notebook を利用すると Web アプリケーションとして動作しブラウザのみで IPython の対話環境を使うことができるようになります。 サーバーサイドで IPython を起動しておけば良いだけなので、いくつかのメリットがあります。 クライアントとなる計算機にブラウザ以外の特別なソフトウェアをインストールする必要がない (特に matplotlib で) 描画した図や表がインラインで表示される セッションを保存し、たとえばプレゼンテーションなどに利用することができる このあたりは以前に書いた IPython Notebook の使いどころの通りです。 IPython notebook では以下の画像のようにプロットした画像がすぐに表示されます。このため探索的にデータを分析していくような作業に向いています。 IPython notebook のサーバーを用意する あ
クラスタリングの概要 実装根拠は以下を参照してください。 K-means++ K-means 英語ですけど日本語のページより情報量が多くまた厳密性があると思います。 scikit-learn の概要 Python で機械学習のあれこれをできる超便利なライブラリです。この辺を読んでください。 scikit-learn scikit-learn の紹介 前提 入力ファイルとして文字列ごとに改行で区切られたテキストファイルを想定します。 使い方としては python clustering.py input.txt output.txt のように引数に入出力ファイルを指定します。 途中 print() で途中結果を表示しています。 出力ファイルにクラスタリング後のデータが出力されます。 ぜひ適当なテキストファイルを用意して実際に動かしてみてください。 実装 コード全体は以下の通りです。 clust
scikit-learn + クラスタリングに関してはこのブログのだいぶ初期にちょっとだけ触ったのですが、今にして思うと説明不足感が否めないですし、そもそもこれだけじゃ scikit-learn を思い通りの目的にあわせて使えないという意見もあるかと思います。そこで改めて scikit-learn による基本的なクラスタリングについて説明していきます。 といっても基本的な話としては本家のドキュメントを読めで話が終わってしまうのですが、日本語の情報があると何かと助かるということもあるかと思います。 生徒の成績をもとに班分けをおこなう よくあるケースとしては例えば、生徒の国語・数学・英語の成績をもとにいくつかのグループに分けたいという場面です。このとき、各科目の合計点の上位から順番に分けてもいいのですが、中には国語が良く出来るけど数学はいまひとつな生徒、数学は得意だけど国語はいまひとつな生徒も
今回もいつもと少しテーマを変えて ssh の多段アクセスの話です。 計算機資源を遠隔に置いて処理計算をおこなう場合、二段階の認証方式にすればより安全である話を以前しました。 また ssh ポートフォワーディングや SSH Filesystem で複数の計算機を統合して利用する方法についても説明しました。 今回はこの補足で、外部から計算機資源環境を利用する際に、多段 ssh アクセスを簡易化することで効率を上げる方法を書きます。 二段階のログイン認証と ssh の踏み台設定 上記のリンク先で説明した通り、セキュリティを考慮するために ssh 公開鍵認証で接続する外部の踏み台サーバーと、パスワード認証で接続する内部の計算機資源による構成を考えます。 踏み台となるサーバーを公開鍵認証にしておいて、さらにそこからしか接続できない設定にしたパスワード認証のホストを奥に設置するという構成です。 このよ
本日は趣向を変えて複数の計算機を透過的にひとつのものとして使う話です。以前にデータ分析用の計算機環境を用意する話をしましたが、その続きというか補足です。 手元の計算機で開発する問題点 人によっては手元のノート PC の性能にこだわり、ローカルで開発をしたりする人がいるようですが、この場合いくつかの問題があります。 いくら性能の高い計算機を買おうとも、その性能には上限がある 長時間かかるジョブを実行した場合、終了するまでノートを閉じて持ち運んだりできない 複数の拠点で開発する場合、重いノートを持ち歩かなければならない 手元の計算機に障害が発生するとすぐに開発の継続が困難になる ソリューション これに対し、遠隔に設置したものも含む複数の計算機によるクラスタで開発をする場合、さまざまなメリットがあります。 スケールアウトすることができる 長時間かかるジョブを実行し、そのまま接続を切り離せる 複数
形態素解析エンジンと辞書 MeCab はオープンソースの形態素解析エンジンであり、自然言語処理の基礎となる形態素解析のデファクトとなるツールです。また各言語用バインディングを使うことで Ruby や Python をはじめ多くのさまざまなプログラミング言語から呼び出して利用することもでき大変便利です。 MeCab の仕組みとしては、対象言語の文法の知識を形態素解析用「辞書」 (品詞等の情報付きの単語リスト) という形で用意しこれをもとに自然言語を分解、品詞を判定します。プロジェクトページには 3 種類の辞書が紹介されています。ほぼそのまま引用ですがまとめると以下の通りです。 辞書名 説明
昨日はデータの種類と線形回帰に触れるところを説明しました。ちょっと出てきた線形回帰というのは回帰分析の一種です。回帰分析と言いますと何やら難しそうな印象がありますが、厳密な数学的な定義は差し置いて、わかりやすく言うとこうなります。 回帰分析とは たくさんの変数を持つ集まり (= ベクトル) についてある関数にノイズが加わったような状態が事例として観測されました。このときその関数を予測しましょうというのが回帰分析です。 単一の変数 x だけでなく、ふたつの変数 x,y あるいはみっつの変数 x,y,z などを観測して n 個 (n 組) のデータを得る場合、そのデータを 多次元のデータ (multi-dimensional data) と言います。 ここでは 2 次元のデータに絞って考えてみます。 2 次元ですから x と y です。 x と y に区別をもうけず対等に見るのを 相関 (co
これまでテキストマイニングの流れを説明し、文書から TF-IDF を指標として特徴となる語彙を抽出し、それらの語彙を可視化するといったことをしてきました。 少し間が空いてしまいましたが、こうして得られた文書の特徴をベクタライズする流れを今回は記述します。 ベクトル化する 機械学習などの手法で文書を扱うにあたり、まずその対象の特徴を数列 (一次元配列) にするのがよくある方法です。 線形の数列同士であれば、たとえば類似度を算出したり、似たもの同士を分類するといったことも、機械学習ライブラリを用いて簡単におこなうことができます。 今まで扱ってきた自然言語処理は結局のところ、その文書を表す数列を求めるまでの処理といっても過言ではないでしょう。 ベクタライズのイメージ 自然言語で書かれたテキスト文書を ↓↓↓↓↓ 数列 (一次元配列) に変換する ベクトルの生成 このようなテキストの処理はスクリプ
文書要約と情報抽出 だいぶ前に特徴抽出と TF-IDF について説明し、また scikit-learn で TF-IDF を計算してみました。 文書の要約を作成するためには次の 3 つの作業が必要となります。 1. 文章の内容を理解する 2. 中心的な話題を特定する 3. 簡潔にまとめる 現在の言語処理の技術では文書の内容を完全に理解したり、高品質の要約文書を作成するということは困難です。しかし要約ではなく、特徴となる語彙を抜き出して抄録を作成するということであれば、それほどではありません。抄録とは重要な情報を伝えている語句を文書から抜き出して並べたものです。 一般的には、文書中における語句の登場頻度から、その文書内での語句の重要性を計算する方法が選択されます。今回は過去の記事を参考にしながら、青空文庫にある小説作品をダウンロードして、その小説の特徴となる語彙を抽出してみます。 素材を用意
先日は要約統計量の可視化をおこない、箱ひげ図と散布図の混合プロッティングをしてみましたが、ここからデータを詳しく追っていきましょう。 箱ひげ図の見方 箱ひげ図 (boxplot, BP) はデータの散らばり具合を示すグラフのひとつで、 2012 年から学習指導要領、高校数学 I 「データの分析」において取り上げられています。高校数学の必修範囲です。 箱には全データの半数 (25% 〜 75%) までが含まれます。したがいまして、箱の範囲内にあるデータはその集団を代表するデータの集まり、そこから外れたひげの示すデータがやや特殊なデータとみなすことができます。こういった観点からデータの特徴を明らかにしていきます。 箱の分割線 (= 中央値) が箱のどの位置にひかれているか、箱の位置は全体のどのような範囲にあるか、ひげの末端はどこに位置するか、外れ値はどれくらいあるかということを見ていきます。
昨日からデータ分析の基本的な手順を整理していますがその続きです。 分析のための道具を選定する 週末に開催された PyCon JP 2014 ではまだまだ Python 2 系の利用者が多いという話がありましたし Heroku の Kenneth Reitz は No Benefit なんて言っていましたが、実際のところ 2014 年現在において Python を使うなら 3.x 系だんぜん一択です。ちなみにその後の日本人の発表でも大体の人は Python 3 を推していたように思います。 Python 3 を使う理由 データ分析で Python 3 を使う理由を筆者の考えとして挙げます。 文字列型のエンコーディングが Unicode を既定としている Python 2 には新しい機能は追加されず、今後登場するライブラリも Python 3 ベースである もはやこの 2 つだけでも十分でしょ
テキストマイニングの概要 テキストマイニングとはテキストデータを計算機で定量的に解析、有用な情報を取り出すための技術の総称です。主に、自然言語処理、統計、データマイニングといったものを基礎とします。 かつてはこれらの実証分析や論理的研究には、自然言語を計算機で扱うために高価なソフトウェアが必要であり、高い敷居がありました。今日では無料で本格的なテキストマイニングをするための環境が整ってきており、また計算機も高速で安価になったことから、例えば人文社会科学分野などでの応用においても大きな注目と期待が集まっています。 今回はテキストマイニングで雑多な外部のデータを集積し、データセットを作成して、分析手法の選択と適用、可視化までの大雑把なプロセスを整理します。 ツールの準備 テキストマイニングのためのフリーなソフトウェアとしては主に次のようなものがあります。 名称 説明
株価は企業の業績を示す定量的な指標として最もポピュラーなものと言えるでしょう。 株の投資においては、銘柄を選ぶ時株価指標の PER, EPS, PBR, BPS, ROE, ROA, 自己資本比率、流動比率等の数値が参考にされます。 しかし投資ではなく、ある企業における株価以外の何らかの情報と、定量的な数値として単純に株価と突き合わせるという場面では、とりあえず取引日各日の四本値だけを用意しておけば良さそうです。 四本値を取得するライブラリ JpStock は日本国内の株に対応しており、現在もメンテナンスされていて動作するライブラリです。 JpStock https://github.com/utahta/jpstock これはいわゆる Yahoo! ファイナンスのスクレイピングをするライブラリです。 銘柄に対する株価を取得する 銘柄コード (4 桁) を引数に .price メソッドを叩
昨日は外部のニュースなどの情報を集めるためにフィードを利用する話をしました。 今日はその中で登場した Fastladder を実際に稼働させて、ニュースをデータベースに蓄積する話をします。 Fastladder を設置する 基本的に README.md を読めば良いです。 現在進行形で継続的に開発が進んでいるので、中途半端に二次三次の情報を参照するより、元のソースコードやドキュメントを読むということが要求されます。 Rails アプリケーションのセットアップ とはいえざっくりと日本語で書いておきましょう。 まず git clone します。
サポートベクトルマシンは疎な解を持つカーネルマシンです。カーネル関数には線形内積カーネル、ガウシアンカーネル、多項式カーネル、シグモイドカーネルなどいくつかの種類があります。ここではガウシアンカーネルを利用してシンプルな二値分類をおこないます。 import numpy as np from sklearn import svm import codecs # CSV データの読み込み train_X = np.genfromtxt('train.csv', delimiter=',') train_y = np.genfromtxt('trainLabels.csv', delimiter=',') test_X = np.genfromtxt('test.csv', delimiter=',') # ガウシアンカーネルによる SVM インスタンス生成 clf = svm.SVC(ker
ベイズの定理を利用した統計学では事前確率という考え方を仮定して計算をおこないます。このようにあいまいな人の主観をもとにした確率を扱うので、このような確率を主観確率と言うこともあります。 頻度主義とベイズ主義 学年全体から 5 名の生徒を選び、そのテストの点数を調べます。 頻度主義 学年全体のテストの成績に対して唯一無二の「平均得点」を想定する。 唯一無二の平均得点を持つ母集団からたまたまサンプルが得られたものと考える。 たまたま選び出した 5 人の平均がサンプルとして与えられている。 このような考え方では、 5 人のサンプルはいつでも繰り返し何度も得られることを想定しています。このため、これを「頻度主義」と言います。 唯一無二の「平均得点」は追求しない。 そのかわり平均得点の確率分布を調べる。 いま手元に得られたサンプルを唯一のデータとして扱う。 これらから「平均得点」の確率分布を計算し、
前回、前々回とベイズ統計に少し触れました。キュレーションなどを利用して展開されるインバウンド・マーケティングで取り扱うデータにおいては、不特定多数によって発信される多用なデータを処理するケースが多くなります。このようなシーンでは特にベイズ的なアプローチであるとか、ヒューリスティクな考え方を取り入れることになります。 RSS フィードを使う インターネットにあふれる情報を入手するにあたり、たとえばニュースフィードを収集するだとか、 Twitter などのソーシャルメディアの発言を分析するといった方法があります。これらの中で最もポピュラーな手段で、古くからあるのが RSS (or Atom) フィードを利用する方法でしょう。 フィードの規格 RSS でよく使われる規格としては主に次の 3 種類があります。 RSS 2.0 http://www.rssboard.org/rss-specific
次のページ
このページを最初にブックマークしてみませんか?
『@ynakayamaのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く