PythonでCSVからJSON形式に変換する方法
Pythonを用いてCSVからJSON形式に変換する方法についてソースコードと共にご紹介します。
目次
CSVデータの1行目にヘッダーがある場合
import json import csv json_list = [] # CSV ファイルの読み込み with open('input_data.csv', 'r') as f: for row in csv.DictReader(f): json_list.append(row) # JSON ファイルへの書き込み with open('output.json', 'w') as f: json.dump(json_list, f) # JSONファイルのロード with open('output.json', 'r') as f: json_output = json.load(f)
CSVデータの1行目にヘッダーがなく、自分で指定したい場合
import json import csv json_list = [] keys = ('column1', 'column2', 'column3') # 列数と要素数を一致させる # CSV ファイルの読み込み with open('input_data.csv', 'r') as f: for row in csv.DictReader(f, keys): json_list.append(row) # JSON ファイルへの書き込み with open('output.json', 'w') as f: json.dump(json_list, f) # JSONファイルのロード with open('output.json', 'r') as f: json_output = json.load(f)
はてなブログでソースコードを表示させる方法
エンジニアの方のブログでよく見かける、プログラムなどのソースコードを載せる方法についてまとめます。
目次
準備
大前提として、ブログの設定を「はてな記法モード」に変更する必要があります。
はてな記法モードへの変更方法
[設定] タブ > [基本設定] に移動します。
デフォルトでは「見たままモード」になっているので、「はてな記法モード」に変更しましょう。
ソースコードを載せたのにうまく表示されないという場合のほとんどはこのステップが抜けていると思うので確認してみてください。
はてなブログにソースコードを表示させる
Python のソースコードを表示させるためには、下記のように記述してください。
>|python|
import numpy as np
arr = np.array([1, 2, 3])
||<
私たちが見慣れたソースコードの表示スタイルになりましたね
import numpy as np arr = np.array([1, 2, 3])
||の中身は他のプログラミング言語に変更することもできるので、表示させたいプログラミング言語の種類に応じて変えてみてください
例: java, javascript, ruby ....
(参考: ソースコードを色付けして記述する(シンタックス・ハイライト) - はてなダイアリーのヘルプ)
まとめ
はてなブログでソースコードを表示させる方法についてまとめました。普段は見たままモードで編集している方も、ソースコードを表示させたいときだけはてな記法モードに切り替えるなど工夫をしてみてはいかがでしょうか。
【Python】ゼロから始めるWindowsユーザ向け環境構築のすすめ
Python を始めてみようかな〜というWindowsユーザーの方のために、最速で簡単にPythonのコードを書き始められる方法をご紹介します。
特に、Windows は Mac と比べて仮想OSのインストールが必要だったりとプログラミング初心者にはとっつきにくいところがあります。また、Python入門サイトや初心者向けの記事をみても、Python2系と3系のどちらがいいとか、ディストリビューションはどれがいいかなどといった議論が展開されていて結局なにをすればいいかわからないまま諦めてしまう方も多いかと思います。そんなみなさんにおすすめの環境構築方法を紹介します。
目次
結論
Anacondaというパッケージを使いましょう。
Pythonを始めたいと考えた方の中には、いま流行りの機械学習やディープラーニングなどを試してみたいと考えている方もいるでしょう。こちらのパッケージを使えば、あとから色々とインストールをする必要もなく、手軽にプログラミングを始めることができます。
インストール
まず、下記サイトからインストーラーをダウンロードしてください。
Python2系 (2.x version) または Python3系 (3.x version)の選択を求められますが、ここはなにも考えずに左側のPython3系をダウンロードしましょう。
ダウンロードが終わったらインストーラを実行しましょう。
インストーラは全て英語なのでここで挫折してしまう人もいるかもしれません。しかし、ここはなにも変えずに Next, Install, Finish を押しまくればOKです。
Python のコードを書き始める
Finishでインストールが完了したら、スタートメニューの検索ボックスで Anaconda と検索しましょう。正常にインストールされていれば、Anaconda3というフォルダが見つかると思います。こちらの Jupyter Notebook をクリックしましょう。
すると、ブラウザが立ち上がり、次のような画面が現れると思います。
このとき立ち上がるブラウザはみなさんの既定となります。基本的に Google Chrome が推奨されていますが、他のブラウザでも動くと思います。もし気になる方は、アドレスバーのリンクをコピーして、Google Chrome のアドレスバーに貼り付けましょう。
ここで見えているのは、Windows上のディレクトリ階層です。これはWindowsのエクスプローラと対応しています (Desktop → デスクトップ、 Documents -> ドキュメント)。コードを書くファイルをどこに置くかという話なので基本的にはどこでもいいですが、よくわからない方は適当にDocumentsをクリックしてその階層に入りましょう。階層が切り替わったら、右上の New ボタンを押し、Python 3 と書かれたボタンを押します。
あとは好きにコードを書くだけです。Python はスクリプト言語なので、1行ずつ実行できます。Jupyter notebookでは1行ずつ出力しながら、必要に応じて文章なども差し込むことができてとても便利です。
まとめ
Windows で Python の開発環境を構築する方法についてご紹介しました。半ば押し付けるようにAnacondaがおすすめと書きましたが、基本的に後悔することはないと思います。また、Jupyter notebookについては、初めは多少違和感があるものの、Python コードを試し書きする上では最善のツールだと思います。今後は初心者向けにPythonのコーディング入門を紹介したいと思います。
オートエンコーダを用いた異常検知についてまとめた
ニューラルネットワークおよび Deep Learning の応用として、オートエンコーダを用いた異常検知について紹介します。
目次
オートエンコーダとは
オートエンコーダ (Auto encoder) とは自己符号器と呼ばれるニューラルネットワークの一種です。ニューラルネットワークにはさまざまな役割を果たすものがありますが、オートエンコーダは入力データを次元削減して圧縮し、出力データを生成するニューラルネットワークです。この圧縮処理はエンコードと呼ばれ、オートエンコーダの名前の由来となっています。
統計・機械学習分野で使われている次元圧縮手法としては主成分分析 (PCA) が有名ですが、オートエンコーダの圧縮処理はこれとほとんど同じであると考えてよいでしょう。
ニューラルネットワークは入力データに対して、所望の出力になるように内部の重みを調整していくことで学習を行います。オートエンコーダでは、入力と出力が同じになるようにネットワークの学習を進めます。
オートエンコーダを用いた異常検知
オートエンコーダを用いて異常検知を行う方法についてご紹介します。オートエンコーダは学習された入力データについては、同じようなデータを出力しようとします。ここで、入出力されるデータとしては波形を想像してみてください。
学習がうまくできているオートエンコーダを使えば下記のような結果が得られます。
- 正常波形入力 → 学習した波形と同じような波形の出力
- 異常波形入力 → 学習した波形とは異なる波形の出力
このように、オートエンコーダの復元結果をもとに異常検知を実現することができます。
まとめ
オートエンコーダを用いた異常検知について紹介しました。ニューラルネットワークを用いることから、構造データや時系列データに限らず、画像データや文書データなどにも使えるという利点があります。簡単な異常検知手法がうまく適用できないような場面で、ぜひ試してみてはいかがでしょうか。
Local Outlier Factor (LOF) による外れ値検知についてまとめた
教師なし学習に分類される異常検知技術のなかでも、外れ値検知という分野は近年多くのシステムで導入され始めています。今回は、外れ値検知技術のひとつであるLocal Outlier Factor (LOF) について紹介します。
目次
Local Outlier Factor (LOF) とは
LOF はあるデータの集まりの中から外れ値を見つけ出す外れ値検知アルゴリズムのひとつです。原論文*1は2000年に発表で最新技術とは言えないものの、現在も実務に耐えうる検知性能とシンプルな実装が魅力的な手法です。
LOFは空間におけるデータの密度に着目します。特に、自身の点から近傍 k 個の点といかに密かであるかを表す局所密度 (Local density) という指標に注目します。なお、ここでいう k 近傍とはある点から最も距離が近い k 個の点のことです。この辺りが怪しい方は k-means や k-NNについて確認しておくといいでしょう。
局所密度は、周りにある点との密度であるということをお伝えしました。これを簡単な式で書くと下記のように表すことができます。
ここで、k は考慮する近傍点の数を決めるパラメーターとします。
図のように、プロット空間に存在するまとまったデータ群を考えると、点 A はデータ群から離れているため外れ値として検出されるべきであるということは言うまでもないでしょう。
まず、点A自身の局所密度について考えます。点Aは近傍の点 (点B, C, D) との距離が大きいため、前述した式より局所密度が低くなることがわかるかと思います。一方で、点B, C, D はそれぞれの近傍点との距離が近いため局所密度が高いといえるでしょう。
この性質に着目することで、外れ値検知を実現するのが Local Outlier Factor (LOF)です。
上記のイメージに注目すると、データ群に含まれている点は、自身の局所密度と近傍点の局所密度が同じような値をとるということは想像できるかと思います。一方で、外れ値である点Aに着目すると、自身の局所密度は低いけれど、近傍点である点B, C, D の局所密度は高くなっていることがわかります。
つまり、自身の局所密度と近傍点の局所密度が等しいときほど正常データであり、その差が大きいほど外れ値である可能性が高いと解釈することができます。これを定式化することで、ある点が外れ値である可能性を表す外れ値スコアを求めることができます。
Local Outlier Factor (LOF) のメリットとして、複雑な分布をしているデータにおける外れ値検知にも強いということがあります。このことをPythonとsklearnによる実装を通して確かめた記事を書きました。この記事では、分布が複数に分かれている場合の例について考えています。
定式化
局所密度 ld は次の式で表現することができます。ここで、 は点 P の k 個の近傍点の集合を意味し、その要素として点Qを考えます。
前段で、自身の局所密度と近傍点の局所密度がいかに異なるかを外れ値スコアで表現したいということはお伝えしました。Local Outlier Factor (LOF) では、これを局所密度の比を用いて表現していきます。
ある点がデータ群からいかに外れているかを表す指標を外れ値スコアとすると、点Pの外れ値スコア lof は次のように表現することができます。
この外れ値スコア lof は、大きい値をとるほど外れ値である可能性が高いということを表しています。外れ値検知タスクでは、このような外れ値スコアに閾値を設けることで、それを超えるものを異常値と判断したりすることが多いです。
なお、実際のタスクではこのスコアに対する閾値設定は慎重に行う必要があります。本記事では、閾値の決め方に関する議論は割愛しますが、別記事でそのことについても紹介したいと思います。
まとめ
異常検知技術のひとつである Local Outlier Factor (LOF) について紹介しました。ふたをあけてみると簡単な手法であることはお分りいただけたかと思います。LOFをPythonで実装した例を紹介した記事も書きましたので、ぜひ確認してみてください。
関連記事