はじめに
このプロジェクトでは、Python を使って JSON データを CSV 形式に変換する方法を学びます。これは、データサイエンスと開発における一般的なタスクであり、JSON はしばしば API 応答に使用される一方、CSV は表形式のデータを格納するための人気のある形式です。
👀 プレビュー
$ head result.csv
"IP","Status","Time","HttpReferer","HttpUserAgent","Request","HttpXForwardedFor","BodyBytesSent","RemoteUser","RequestLength"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
🎯 タスク
このプロジェクトでは、以下を学びます。
- JSON データを読み取り、理解する方法
- JSON データを CSV ファイルに変換する方法
- 正しい列名とフォーマットで CSV ファイルを書き込む方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- API から取得した JSON データを効率的に構造化された CSV 形式に変換する
- JSON データを解析し、CSV ファイルに書き込むプロセスを理解する
- これらのスキルをさまざまなデータ処理と分析タスクに適用する
JSON データを読み取り、理解する
このステップでは、web_access.jsonファイルからの JSON データを読み取り、理解する方法を学びます。
- テキストエディタを使って、
~/projectディレクトリにあるweb_access.jsonファイルを開きます。 - ファイルの内容を調べます。オブジェクトの配列が見えるはずで、各オブジェクトはウェブアクセスログエントリを表します。各エントリには、
"IP"、"Status"、"Time"、"HttpReferer"、"HttpUserAgent"、"Request"、"HttpXForwardedFor"、"BodyBytesSent"、"RemoteUser"、"RequestLength"などのいくつかのプロパティがあります。 - JSON データの構造と内容に慣れます。この情報は、次のステップでデータを CSV 形式に変換する際に役立ちます。
JSON を CSV に変換する
このステップでは、web_access.jsonファイルからの JSON データを CSV ファイルに変換する方法を学びます。
~/projectディレクトリに新しい Python ファイルconvert.pyを作成します。convert.pyファイルで必要なライブラリをインポートします:
import csv
import json
web_access.jsonファイルから JSON データを読み取ります:
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
- CSV ファイルの列の順序を定義します:
fieldnames = [
"IP",
"Status",
"Time",
"HttpReferer",
"HttpUserAgent",
"Request",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"RequestLength",
]
~/projectディレクトリに新しい CSV ファイルresult.csvを開き、csv.DictWriterオブジェクトを作成します:
with open("result.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
- CSV ファイルにヘッダー行を書き込みます:
writer.writeheader()
- データ行を CSV ファイルに書き込みます:
for row in data:
writer.writerow(row)
完成したconvert.pyファイルは次のようになります:
import csv
import json
## ファイルから JSON データを読み取る
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
## 列の順序を定義する
fieldnames = [
"IP",
"Status",
"Time",
"HttpReferer",
"HttpUserAgent",
"Request",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"RequestLength",
]
## CSV ファイルに書き込む
with open("result.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
## ヘッダーを書き込む
writer.writeheader()
## データ行を書き込む
for row in data:
writer.writerow(row)
Python スクリプトを実行する
このステップでは、convert.pyスクリプトを実行してresult.csvファイルを生成します。
- ターミナルを開き、
~/projectディレクトリに移動します。 - 次のコマンドを使って
convert.pyスクリプトを実行します:
python convert.py
- スクリプトが完了すると、
~/projectディレクトリに新しいresult.csvファイルが表示されるはずです。 - 次のコマンドを使って
result.csvファイルの最初の 10 行を表示できます:
head result.csv
これにより、CSV ファイルのヘッダー行と最初の 9 つのデータ行が出力されるはずです。
"IP","Status","Time","HttpReferer","HttpUserAgent","Request","HttpXForwardedFor","BodyBytesSent","RemoteUser","RequestLength"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
おめでとうございます!web_access.jsonファイルの JSON データをresult.csvという名前の CSV ファイルに正常に変換しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。



