<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Love web applications &#187; データ処理</title>
	<atom:link href="http://blog.hitsuji.me/category/processing/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hitsuji.me</link>
	<description>Webアプリつくるの楽しい！つくるネタ、使うネタ、あとは雑談です。</description>
	<lastBuildDate>Sun, 25 Jan 2015 12:49:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>JSONファイルをCSVファイルに変換する</title>
		<link>http://blog.hitsuji.me/read-json-conv-2-dimension-list-and-write-it-to-csv/</link>
		<comments>http://blog.hitsuji.me/read-json-conv-2-dimension-list-and-write-it-to-csv/#comments</comments>
		<pubDate>Tue, 22 Jul 2014 12:38:37 +0000</pubDate>
		<dc:creator><![CDATA[kapibarawebmaster1515]]></dc:creator>
				<category><![CDATA[データ処理]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.hitsuji.me/?p=132</guid>
		<description><![CDATA[こんにちは。梅雨明けしたいも関わらず、ジトジトして不快指数が高いお天気が続きますね。でも湿気に負けないで今日もブログを更新しようと思います！ &#160; さて、今日は以前書いた記事「Perlで横浜市・・・<a class="readon" href="http://blog.hitsuji.me/read-json-conv-2-dimension-list-and-write-it-to-csv/">続きを読む</a>]]></description>
				<content:encoded><![CDATA[<p>こんにちは。梅雨明けしたいも関わらず、ジトジトして不快指数が高いお天気が続きますね。でも湿気に負けないで今日もブログを更新しようと思います！</p>
<p>&nbsp;</p>
<p>さて、今日は<a title="Perlで横浜市の区別年齢別人口データを自動入手する" href="http://blog.hitsuji.me/get-stat-of-yokohama-city-population-automatically/">以前書いた記事「Perlで横浜市の区別年齢別人口データを自動入手する」</a>で入手したJSONファイルをCSVファイルに変換します。何故CSVにしたいかと言えば、<a title="横浜市地図に区名を表示する" href="http://blog.hitsuji.me/show-yokohama-city-map-divided-into-administrative-divisions-with-its-each/">その前に書いた記事「横浜市地図に区名を表示する」</a>で紹介した横浜市地図に人口データを反映させるための情報に編集し直す必要があり、一旦CSVにした方が編集作業が便利そうだからです。</p>
<p>&nbsp;</p>
<h4>JSONファイルを読み込んで、CSVとして書き出す</h4>
<p>横浜市の人口データが入っているJSONファイルを読み込み、２次元テーブルに変換して、CSVとしてファイル出力するスクリプトをPythonで書きました。汎用性のあるコードにしたかったのですが、結構手間取りそうだったので、今回扱うJSONファイルの構造に依存した処理になっています。</p>
<p>&nbsp;</p>
<h6>conv_json_to_csv.py</h6>
<script src="https://gist.github.com/f4fb6867e0ff23a7020a.js"></script><noscript><pre><code class="language-python python">#coding:utf-8
'''
Created on 2014/7/20

@author: Tae Matsumoto
JSONファイルを読み込み、同名のCSVファイルを出力します。
読み込む対象のJSONファイルの構造は下記の通り。
[{'key':区名1, 'stat':{0:0歳人口,1:1歳人口,...}},{'key':区名2, 'stat':{0:0歳人口,1:1歳人口,...}},...]
'''

import csv, json

filename = 'yokohama_stat'

# read json file.
json_data = open(filename+'.json')
data = json.load(json_data)
json_data.close()

res = list()

# add header
tmp = list(data[0]['stat'].items()) + [('key', data[0]['key'])]
tmp.sort()
header = [x[0] for x in tmp]
res.append(header)

# add elements
for row in data:
    row_list = list(row['stat'].items()) + [('key', row['key'])]
    row_list.sort()
    vals = [x[1] for x in row_list]
    res.append(vals)

# display resulsts
print res

# write a file as csv
with open(filename+'.csv', 'wb') as f:
    mywriter = csv.writer(f, delimiter = ',')
    mywriter.writerows(res)
    f.close()
</code></pre></noscript>
<p>&nbsp;</p>
<p>ここではCSVにするためにDictionary型のデータを２次元データに書き換えています。</p>
<p>L32の書き方は便利で、</p>
<pre class="command">[x[1] for x in row_list]</pre>
<p>は、[(x0,y0),(x1,y1),(x2,y2),&#8230;]という形式のリストのうち、第二要素のみを取り出して</p>
<pre class="command">[y0,y1,y2,...]</pre>
<p>と整理してくれます。<a title="how-to-extract-the-n-th-elements-from-a-list-of-tuples-in-python" href="http://stackoverflow.com/questions/3308102/how-to-extract-the-n-th-elements-from-a-list-of-tuples-in-python" target="_blank">=&gt;stackoverflow</a></p>
<p>&nbsp;</p>
<p>以上で、横浜市の0-5歳児の人口データが入ったCSVファイルが出来上がりました。</p>
<p>&nbsp;</p>
<p>次は、<a title="区名と行政団体コードを書き並べたCSVからJSONファイルを作成する" href="http://blog.hitsuji.me/convert-csv-listing-words-name-and-their-codes-to-json/">以前の記事「区名と行政団体コードを書き並べたCSVからJSONファイルを作成する」</a>で作成したCSVファイルと合わせてExcelで編集して次のようにまとめます。</p>
<p>&nbsp;</p>
<script src="https://gist.github.com/d5a9e70d4bcb5671fb3e.js"></script><noscript><pre><code class="language-csv csv">cityid,name,demographics-0,demographics-1,demographics-2,demographics-3,demographics-4,demographics-5,ttlid141011,鶴見区,2712,2875,2812,2589,2518,2525,280234id141020,神奈川区,2037,1960,1971,1916,1736,1812,234496id141038,西区,869,854,809,746,733,692,97251id141046,中区,1112,1150,1052,1081,942,975,147065id141054,南区,1351,1419,1356,1385,1369,1409,194393id141119,港南区,1551,1660,1682,1715,1779,1730,217782id141062,保土ヶ谷区,1432,1469,1485,1542,1444,1492,204290id141127,旭区,1853,1912,1934,2016,2039,1981,248560id141071,磯子区,1261,1360,1280,1257,1314,1363,161968id141089,金沢区,1362,1481,1547,1583,1569,1670,204453id141097,港北区,3455,3294,3122,2885,2758,2721,338969id141135,緑区,1519,1602,1602,1670,1652,1563,178783id141178,青葉区,2614,2780,2644,2777,2766,2812,307844id141186,都筑区,2120,2235,2441,2341,2451,2279,209626id141101,戸塚区,2384,2494,2472,2517,2474,2559,273962id141151,栄区,972,986,1014,972,1004,1018,123176id141160,泉区,1204,1295,1255,1318,1313,1350,154807id141143,瀬谷区,1006,1028,1046,1013,1069,1125,125599</code></pre></noscript>
<p>&nbsp;</p>
<p>これを、同じく<a title="区名と行政団体コードを書き並べたCSVからJSONファイルを作成する" href="http://blog.hitsuji.me/convert-csv-listing-words-name-and-their-codes-to-json/">「区名と行政団体コードを書き並べたCSVからJSONファイルを作成する」</a>で書いたスクリプトを使って、JSONファイルに変換します。</p>
<p>&nbsp;</p>
<p>これで、区名＆人口データが入ったJSONファイルが出来上がりました。</p>
<p>次回はこのファイルを使って、横浜市地図を塗り分けようと思います！</p>
<p>&nbsp;</p>
<p>それでは♪</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hitsuji.me/read-json-conv-2-dimension-list-and-write-it-to-csv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
