幸か不幸か、ビジネス系のデータの多くは時系列データです。売上データもホームーページのアクセスログもセンサーデータも時系列データです。 時系列データを手にしたとき、どのようなデータなのか見てみたい、ということは多々あります。 多くの場合、折れ線グラフを描き傾向を掴む、ということをやります。 折れ線グラフを眺めると、トレンド(上昇傾向や下降傾向)や季節性などが見て取れるケースがあります。 そこで、サクッとトレンドや季節性などを掴む手法がSTL分解(Seasonal Decomposition Of Time Series By Loess)です。 STL分解(Seasonal Decomposition Of Time Series By Loess)を実施することで、元データをトレンド、季節性、残差に分解することができます。 元データ = トレンド + 季節性 + 残差 STL分解(Seas
はじめに Pythonのライブラリ、NetworkXの使い方を、Qiitaの投稿に付けられたタグの関係グラフの作成を例にして説明します。 NetworkXを使うと、下に示すような、ノードとエッジで構成されるグラフを描くことができます。 実行環境 Windows 10 Python 3.5.2 (Anaconda) Jupyter notebook 元データの取得 Qiitaは、投稿を取得するAPIを公開しているので、簡単に投稿を取得することができます。 JSON形式で返ってくるデータを下記コードでPythonの辞書に変換します。 なお、非認証の場合、1リクエストごとに最大100記事、1時間ごとに60回の制限があるので、 今回は、100*60 = 6000 記事を対象とします。 import requests import json items = [] params = {"page":1
Pandas でデータを扱うことで、データ分析の前処理が格段に楽になります。 列データにおける NaN の処理を例に、Pandasの便利さの説明をしたいと思います。 NaNとはNaN(Not a Number) は浮動小数点型における異常な値のことを意味します。 わかりやすい例で言うと、0での割り算が該当します。これは実数では表せないため、 NaN になります。 Pandas において NaN は 値が欠損している 場合によく遭遇する表現です。 具体例で見ていきましょう。以下のようなサンプルデータ(sample.csv)を作成します。 ID,名前,年齢,性別,趣味 1,小林,20,男,野球観戦 2,田中,35,女,飲み会 3,佐藤,29,男 4,鈴木,44,女,編み物データを read_csv 関数で読み出して DataFrame とした後、表示してみます。 1import pandas
2020年新年最初の投稿です 色々とPython製のライブラリについて調べていたら、仕事でも使えそうなライブラリを見つけたので、今回はそれを試してみます。 地名から座標を割り出す今回はジオコーディングの一種でもある地名や住所から座標を割り出してくれるPython Geocoderというのを使っていきます。Geocoderというものは、多言語にもあるライブラリだそうです。 Geocoderの特徴は、複数のマップサービスのAPIを統一されたスキーマや文法などで代わりに呼び出してくれます。 約30個近くのマップサービスに対応しており、GeocoderからGoogleMap、OpenStreetMapとあらゆるマップサービスからマップの情報を引き出してくれます。 ちなみにGoogleMapなどはAPI Keyが必要ですが、API Keyを設定していなくても、API Key不要なOpenStreet
前のエントリーでは、PHPでGeoIPを使ってIPアドレスを解析した。 本エントリーでは、Pythonを使ったやり方をメモ。と、言ってもほぼPHPと同じw データベースのダウンロード 上記のエントリーと同様なので、上記のエントリーを参照のこと。 インストール インストールにはpipを使う。pipのインストールに関しては、pythonを使っている場合大抵インストールされていると思われるので省略する。 PHPと同様にGithubの公式ページが参考になる。 GeoIP2 Python APIのインストール $ pip install geoip2 これでインストールは完了。 使ってみる 以下のサイトを参考に、PythonでもIPアドレスから地域の情報を取得してみる。 サンプルコード import geoip2.database # データベースの読み込み reader = geoip2.data
ヒストグラムを作成するhist関数 基数の数を変更する (bins) ラベルを元にヒストグラムを作成する by 非数値データの頻度をヒストグラムで表示する まとめ 参考 Pandasにもヒストグラムを作成する関数hist()が存在します。この関数は値を表示するのではなく、ヒストグラムをmatplotlibを使ってプロットします。単純に頻度の数値データが欲しい場合はvalues_counts関数が便利な関数です。 本記事では ヒストグラムの作成の仕方 value_counts関数を使った非数値データの頻度の出力方法 について解説します。 今回扱うサンプルデータはKaggleのチュートリアルからとってきたものです。 Titanic - Kaggle ここのtrain.csvという名前のファイルを使います。 (ダウンロードするためにはユーザー登録が必要ですが簡単なものなのでしておくことをお勧めし
岡崎直観. 2015. 単語の分散表現と構成性の計算モデルの発展. 2015年度人工知能学会全国大会(第29回), OS-1 意味と理解のコンピューティング (2), 2F5-OS-01b-1.
ログデータの異常検知を行う必要が発生したので、変化点検出の統計的な手法をざっくりと調べてみた。 偏差の累積和による方法 各データ点に対して標本平均との偏差の累積和を求め、これが最も大きくなる点を変化点とする方法。 手順は下記の通り。 系列全体の平均値(標本平均)を計算して、各点について平均値との差を求める 平均値との差の累積和を計算し、絶対値が最大になる点を変化点とする。 変化点によって区切られた各区間について、1,2を再帰的に繰り返す。 平均値でなく分散を使うバージョンもある。 特徴 1次元のデータ列に適用可能。 変化していない部分のデータは同一の確率分布に従い、かつ観測値はすべて互いに独立であることを仮定。 上記を満たしていれば、データが特定の分布に従うことを仮定しない。 もちろんデータの独立性が仮定できなければ使えないので、ログのような時間相関のありがちなデータにおいて使える場面は限
手軽にトピック分析を実行できるgensimを知ったので、gensimを使用して簡単な文章をトピック分析するチュートリアルを実行してみました。 トピック分析、LDA、gensimとは 詳しく理解してはいないので、簡単に言うと、 トピック分析とは、大量の文章からいくつかのトピックを分類して、与えられた文章がどのトピックに属するかを分類する手法 LDAとは、トピック分析の1種 gensimとは、トピック分析を行うことができるPython製のソフトウェア gensimを使ったトピック分析は、以下の手順で行えるようです。 文章を準備 文章を単語ごとに分割、調整 辞書を作成 コーパスを作成 LDAモデルを作成 分類したい文章をLDAモデルで分類 前提 Docker Python 2環境を作るのが面倒だったのでDockerを使っているだけです。 $ docker version Client: Vers
環境 Mac OS 10.9.4 Python 2.7 Cabochaのインストール CaboChaを使うのにはMeCabが必要 CRF++のインストール 執筆時での最新版は 0.58 http://crfpp.googlecode.com/svn/trunk/doc/index.html#download 解凍して $ cd CRF++-0.58 $ ./configure $ make $ make install $ cd python $ sudo python setup.py install MeCabのインストール 執筆時での最新版は 0.996 https://code.google.com/p/mecab/ Downloadsから mecab-0.996.tar.gz(mecab本体) mecab-python-0.996.tar.gz mecab-ipadic-2.7.
はじめに こんにちは、Speeeでデータサイエンティストをしている@To_Murakamiと申します。エンジニアではないのですが、コーディングを含めた分析例を発信しようと思い、企業のAdvent Calendarに参加させていただきました。 12月も暮れに差し掛かってきましたね。本日は、Word2Vec(ワードトゥベック)という自然言語処理を活用した分析例を紹介します。 このロジックを実装した目的は、ことばの表記ゆれ(類義語)発見器みたいなのを作ってみたいと思ったからです。なぜ、Word2Vecからことばの表記ゆれが分かるのでしょうか?仕組みの概要(下記)が分かると、理由を理解できます。 Word2Vecの仕組み(簡単に) Word2Vecとは言葉通り、単語をベクトル化したものです。ベクトル化した中身には当然数字が入ります。つまり、単語という言語データを数値化することができるのです! 数値
最近の自然言語処理では、単語の分散表現は当たり前のように使われています。 単語分散表現では、各単語が高次元ベクトル空間に配置され、加減乗除等の演算を行えるようになります。 これらのベクトルは、意味の近い単語に対しては同じようなベクトルになることがわかっています。 本記事では、単語分散表現のベクトルをクラスタリングし、意味が近い単語のクラスタを作ってみたいと思います。 これらのクラスタは、眺めて楽しむだけでなく、機械学習の素性として使うこともできます。 イメージ的には、以下のような感じで単語をクラスタにまとめます。 では、単語分散表現をクラスタリングして、単語のクラスタを作ってみましょう。 準備 まずは、作業用のディレクトリを作成しておきましょう。 また、必要に応じて Python の仮想環境も用意します。 以下のコマンドを実行することで、ディレクトリを用意します。 $ mkdir work
超球の体積、すなわち多次元空間における球は、一般的に私たちが観測する3次元の球体の体積とは遥かに異質な性質を示すらしい。 機械学習の有名な教科書によれば、 Our geometrical intuitions, formed through a life spent in a space of three dimensions, can fail badly when we consider spaces of higher dimensionality. 拙訳: 我々の幾何学に関する直観は、3次元空間の中で過ごした人生の中で形成されたものだが、高次元空間を考えるときには、まるで役立たないことがある。 ("パターン認識と機械学習 上", 原書, p.36) ... in spaces of high dimensionality, most of the volume of a spher
この記事について 以下の観点から高次元空間の性質についてまとめます。 次元数と最近傍・最遠傍との距離の関係 データ数と最近傍・最遠傍との距離の関係 人工データと実データの比較 はじめに 機械学習を使って何らかのタスクを解く上で、データの次元数は常に気にする必要があります。なぜなら、機械学習で扱う多くの問題はデータの次元数が大きくなるごとに難易度が跳ね上がるからです。 「次元の呪い」とも呼ばれるこの問題の原因は、高次元空間の性質にあると言われています。 データの次元数を大きくすると、私達の直感に反する興味深い挙動が確認できます。今回は、高次元空間の性質を簡単な数値実験で調べてみました。 次元の呪いとは データの次元数が高次元になると、データが空間の外側に集中して分布する現象です。 高次元空間の直感的な理解のためには下記が参考になると思います。 次元の呪い、あるいは「サクサクメロンパン問題」
なぜ自然言語処理にとって単語の分散表現は重要なのでしょうか? この記事をご覧になっている方は Word2vec(Mikolov et al., 2013) についてご存知かもしれません。Word2vec ではまるで単語の意味を捉えられているかのような演算を行うことができます。例えば King から Man を引き Woman を足すと Queen が得られる(King - Man + Woman = Queen)というのは有名な例です。 from https://www.tensorflow.org/get_started/embedding_viz 実はその内部では、単語を分散表現(あるいは埋め込み表現)と呼ばれる200次元ほどのベクトルで表現してベクトルの足し引きを行っています。この200次元ほどのベクトル内部に各単語の特徴が格納されていると考えられています。そのため、ベクトルの足し引
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く