Y U M I K O N A G ATA K E
D E C . 1 9 . 2 0 1 4 	
 
PYTHON FOR DATA
ANALYSIS (6)
今回のお話	
データの読み込み&書き出し、
そしてファイル形式
6.1 テキスト形式のデータの読み込み(1)	
•  どうしてPythonが、テキストやファイル処理理をする際
に使われるの?
  →それは、簡単な⽂文法でのファイル読み込み・タプルの  
    ⽣生成・分解のような便便利利な機能があるから!
関数	
  説明	
 
read_csv ファイル・URL等からデータを読み込む。(,)
read_table ファイル・URL等からデータを読み込む(ʻ‘tʼ’)
read_fwf 区切切り⽂文字のないデータを読み込む
read_clipboard クリップボードからデータを読み込む
6.1 テキスト形式のデータの読み込み(2)	
•  前述の関数は  
  テキストデータ→データフレームへ変換するためのもの
まずは
①コンマ区切切りのテキストファイル(.csv)をread_̲csvで。
②read_̲tableを使うと、区切切り⽂文字を指定して読み込む
ことも。
6.1 テキスト形式のデータの読み込み(3)	
ファイルの読み込みにはオプションが使える
・defaultの列名が割り当てられる/ 自分で列名をつける
6.1 テキスト形式のデータの読み込み(4)	
•  Message列列をデータフレームのインデックスにしたい場
合:
    index_̲colに対して、ʼ’messageʼ’と列列の名前を指定するか、
    インデックス番号4を指定する
names = ['a', 'b', 'c', 'd', 'message']
pd.read_csv('ch06/ex2.csv', names=names, index_col='message')
6.1 テキスト形式のデータの読み込み(5)	
•  複数の列で構成される階層型インデックスを作る場合:
-列の数か、名前のリストを指定する
	
 
parsed = pd.read_csv('ch06/csv_mindex.csv', index_col=['key1', 'key2'])
parsed
6.1 テキスト形式のデータの読み込み(6)	
•  データ内に決まった区切切り⽂文字がない場合:
 s+ という正規表現で表す
ヘッダ⾏行行にある列列数がデータ⾏行行の列列数よりも1つ少なくなって
いるため、read_̲tableは1列列⽬目がデータフレームのインデック
スになっている特別な場合なのだろうと推測してくれる!
 	
 
result = pd.read_table('ch06/ex3.txt', sep='s+')
result
6.1 テキスト形式のデータの読み込み(7)	
•  さまざまなファイル形式を扱えるような機能
        skiprows  :  指定した⾏行行数(1⾏行行⽬目なら0)を読み⾶飛ばす.
•  ⽋欠損値の取り扱い
デフォルト:NA,  -‐‑‒1.#IND,  NULLなど
pd.read_csv('ch06/ex4.csv', skiprows=[0, 2, 3])
#1,3,4行目を読み飛ばす
6.1 テキスト形式のデータの読み込み(8)	
read_csv関数とread_table関数の引数
引数	
  説明	
 
path ファイルシステム上の位置やURL等を⽰示す⽂文字
sep or delimiter 正規表現・または、各列列をフィールドに分割する
header 列列名として使う⾏行行に割り振られた番号を指定
index_col ⾏行行のインデックスとして使われる番号・名前(slide  no.6)
names オブジェクトの列列⽬目いのリスト
skiprows 読み⾶飛ばす⾏行行番号
na_values ⽋欠損値で置き換える値
comment この引数に指定した⽂文字⾏行行こうを書く⾏行行からコメントとし
て切切り出す
parse_dates データを⽇日時として読み込む
keep_date_col 複数の列列を結合して⽇日付として読み込む場合、結合にしよ
うした列列を⾶飛ばす
6.1 テキスト形式のデータの読み込み(9)	
引数	
  説明	
 
converters	
  列番号を表す名前を、関数にマッピングする{列名:関数}	
 
dayfirst	
  曖昧な可能性のある日程を読み込む際に使用	
 
date_parser	
  日付を読み込む際に使用	
 
nrows	
  ファイル先頭で読み込む行数	
 
iterator	
  ファイルを部分的に読み込む際に使用	
 
chunksize	
  イテレーション用、ファイル内のブロック毎のサイズ	
 
skip_footer	
  ファイル末尾で無視する行数	
 
verbose	
  非数値の列に見つかった欠損値の数	
 
encoding	
  Unicodeとして用いる文字コード	
 
squeeze	
  読み込まれたデータに1つの列しかない場合、Seriesを返す	
 
thousands	
  3行区切りのセパレータ。 ‘,’など
6.1 テキスト形式のデータの読み込み(10)	
•  非常に巨大なファイルを処理する場合など、ごく一部だけ
を読み込む必要が出てくる.
Ex. 10000行のデータがあるcsvファイルを処理する.
①このcsvファイル全体を読み込まず、数行だけ読み取りたい場合、
nrowsを指定する.
②ファイルを少しずつ読みたい場合、読み込む行数をchunksizeで指定
	
 
pd.read_csv('ch06/ex6.csv', nrows=5)
chunker = pd.read_csv('ch06/ex6.csv', chunksize=1000)
6.2 テキスト形式のデータの書き出し(1)	
•  データは、読み込みと同様、区切り文字で区切られた形
で書き出しも可能。
 *to_csv メソッド:データをコンマ区切りのファイルに書き出す
	
 
data = pd.read_csv('ch06/ex5.csv')
#元データ	
 
data.to_csv('ch06/out.csv')
#データがコンマ区切りになる
6.3 JSONデータ(1)	
•  csvデータと比べると、非常に自由度が高い。
例えば、、
JSONの文字列をPython形式に変換するにはjson.loadsを使う
obj = """
{"name": "Wes",
"places_lived": ["United States", "Spain", "Germany"],
"pet": null,
"siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"}, {"name":
"Katie", "age": 33, "pet": "Cisco"}]
}
"""
	
 
オブジェクトのキーは全て文字列でなければならない
6.3 JSONデータ(2)	
•  JSONの文字列をPython形式に変換するにはjson.loadsを使う
•  Json.dumpsを使うと、PythonオブジェクトをJSONに変換できる
import json
result = json.loads(obj)
result	
 
asjson = json.dumps(result)
# 上記のresult(Pythonオブジェクト)をJSONに変換
6.4 XMLとHTML WEBスクレイピング(1)	
•  Webスクレイピング:
ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと
例). とあるURLの文書からリンクされているURLを抜き出してみる。
from lxml.html import parse
from urllib2 import urlopen
# urllib2:URLを開くための拡張可能なライブラリ
parsed = parse(urlopen('http://finance.yahoo.com/q/op?s=AAPL
+Options'))
links = parsed.getroot().find(‘.//a’)
# ‘.//a’(リンクのaタグ)を探す
links[15:20]
# HTML要素を表すオブジェクトが返ってくる
6.4 XMLとHTML WEBスクレイピング(2)	
•  取得したHTML要素のオブジェクトから、URLやリンクテキストを取
得するには…
•  この文書の全URLリストを得るとなると…
	
 
lnk = links[28]
lnk.get('href')
lnk.text_content()
urls = [lnk.get('href') for lnk in doc.findall('.//a')]
urls[-10:]
6.4 XMLとHTML WEBスクレイピング(3)	
•  文書内にの詳しい情報をもったテーブルを抜き出すには
tables = doc.findall('.//table')
# tableタグを全部見つける(HTMLオブジェクトで返る)
calls = tables[1]
puts = tables[2]
rows = calls.findall('.//tr')
# 各データの先頭についているtrタグを探すことで、データを見つける
#普通の関数で書くと…
def _unpack(row, kind=‘td’):
   elts = row.findall(‘.//%s’ % kind)
   return [val.text_content() for val in elts]
6.4 XMLとHTML WEBスクレイピング(4)	
•  前述で取得できたデータをデータフレームに変換すると
もっと⾒見見やすいはず!
作成したこの関数に、lxmテーブルオブジェクトを与えて呼び出すと、
データフレームオブジェクトが取得でえきる
	
 
from pandas.io.parsers import TextParser
def parse_options_data(table):
 rows = table.findall(‘.//tr’)
 header = _unpack(rows[0], kind=‘th’)
 data = [_unpack(r) for r in rows[1:]]
 return TextParser(data, names=header).get_chunk()
6.4 XMLとHTML WEBスクレイピング(5)	
•  HTML⽂文書で使⽤用した、lxml.htmlインターフェースではなく、
lxml.objectifyを使うと、XMLデータの処理理に便便利利!
•  詳細な例例は、リンク切切れでした。
•  やり⽅方としては、lxml.objectifyを使ってXMLファイルを読み込み、
ファイルのルートnodeへの参照をgetrootで取得する
    (lxml.htmlと同じ)  
  
6.5 HTMLやWEB APIを用いた読み書き	
•  多くのWebサイトでは、JSON形式等でデータフィード
を公開しているAPIがある
↑このようなAPIにPythonからアクセスできる
Ex. Twitterで「python pandas 」という単語を検索する
には、下のようなHTTP GETリクエストを送信する
※現在このAPIはアクティブじゃなかった・・・	
 
import requests
url = 'http://search.twitter.com/search.json?q=python%20pandas'
resp = requests.get(url)
6.5 HTMLやWEB APIを用いた読み書き(2)	
•  Responseオブジェクトのtext属性には、Getクエリで
取得されたコンテンツ情報がある
•  データ内のresultsフィールドにツイートのリストがある
ので、それを見てみる
import json
data = json.loads(resp.text)
data.keys()
data[‘results’]
6.5 HTMLやWEB APIを用いた読み書き(3)	
•  ツイートフィールドのうち、使いたい属性のリストを引
数にしてデータフレームに渡す
•  昔はこんなのが出てたらしい
tweet_fields = ['created_at', 'from_user', 'id', 'text']
tweets = DataFrame(data['results'], columns=tweet_fields)
tweets.ix[7]

More Related Content

PDF
Shibuya Perl Mongers#12 No Sql Couch Db
PPTX
データサイエンティスト必見!M-1グランプリ
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
PDF
LastaFluteでKotlinをはじめよう
PPTX
データベース入門
PPTX
20071204
Shibuya Perl Mongers#12 No Sql Couch Db
データサイエンティスト必見!M-1グランプリ
JSONBはPostgreSQL9.5でいかに改善されたのか
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
LastaFluteでKotlinをはじめよう
データベース入門
20071204

What's hot (20)

PDF
スキーマとURI
PDF
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
PDF
オライリーセミナー Hive入門 #oreilly0724
PDF
Hadoop概要説明
PDF
Hadoop入門
PDF
Level dbを試した
PPTX
LINQ概要
PDF
データベースシステム論13 - データベースの運用
PDF
DeltaCubeにおけるユニークユーザー集計高速化(理論編)
PDF
LODを使ってみよう!
PDF
Datalogからsqlへの トランスレータを書いた話
PPTX
情報の構造化@Linked Open Data連続講座(2014.6.2)
PDF
20200424_Writable_Arrow_Fdw
PDF
MapReduceプログラミング入門
PPTX
DBpedia Japaneseとは?
PDF
DBpedia Japanese
PDF
MapReduce入門
PDF
【IVS CTO Night & Day】Aurora Update++
PDF
第4回 AIツール入門講座 Linked Open Data入門
スキーマとURI
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
オライリーセミナー Hive入門 #oreilly0724
Hadoop概要説明
Hadoop入門
Level dbを試した
LINQ概要
データベースシステム論13 - データベースの運用
DeltaCubeにおけるユニークユーザー集計高速化(理論編)
LODを使ってみよう!
Datalogからsqlへの トランスレータを書いた話
情報の構造化@Linked Open Data連続講座(2014.6.2)
20200424_Writable_Arrow_Fdw
MapReduceプログラミング入門
DBpedia Japaneseとは?
DBpedia Japanese
MapReduce入門
【IVS CTO Night & Day】Aurora Update++
第4回 AIツール入門講座 Linked Open Data入門
Ad

Similar to chapter6 (20)

PDF
九大_DS実践_Python基礎その2
PPTX
Qlik Talend Cloudしっかり学ぶ勉強会 #8 - Amazon S3 との接続.pptx
PDF
Data Scientist Workbench - dots0729
PDF
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
PDF
LDA入門
PDF
[Japan Tech summit 2017] DAL 005
PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
PDF
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
PPTX
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
PDF
20170714_MySQLドキュメントストア JSONデータ型&JSON関数 by 日本オラクル株式会社 MySQL GBU 山﨑由章
PDF
AWS Black Belt Online Seminar 2017 Amazon Athena
PPTX
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
PPTX
統計環境R_データ入出力編2016
PPT
実行時のために最適なデータ構造を作成しよう
PDF
Rを用いた外国語教育データの整理・要約
PPTX
2012 02-02 mixi engineer's seminor #3
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
PDF
Data Scientist Workbench 入門
PDF
10分で分かるr言語入門ver2.14 15 0905
PPTX
AWSで作る分析基盤
九大_DS実践_Python基礎その2
Qlik Talend Cloudしっかり学ぶ勉強会 #8 - Amazon S3 との接続.pptx
Data Scientist Workbench - dots0729
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
LDA入門
[Japan Tech summit 2017] DAL 005
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
20170714_MySQLドキュメントストア JSONデータ型&JSON関数 by 日本オラクル株式会社 MySQL GBU 山﨑由章
AWS Black Belt Online Seminar 2017 Amazon Athena
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
統計環境R_データ入出力編2016
実行時のために最適なデータ構造を作成しよう
Rを用いた外国語教育データの整理・要約
2012 02-02 mixi engineer's seminor #3
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Data Scientist Workbench 入門
10分で分かるr言語入門ver2.14 15 0905
AWSで作る分析基盤
Ad

chapter6