こんにちは。rooterエンジニアのohkabeです。

弊社はクローリング会社ですが、集めたデータについての分析も同様に重要な業務となっており、データコンサルティングサービスも提供しております。

今日はそんなデータ分析を効率的に行うをテーマにしたいと思います。

背景

データ分析はpandasでDataFrameを作ることから始まります。
基本的にはcsvファイルを読み込むことが多いですが、必ずしも手に入れたローデータがcsv形式であるとは限りません。
筆者はデータがエクセル形式だった場合、一度csvに変換して読み込むという手間をかけていました。
この作業がなかなか面倒だったのですが、実はエクセルもそのまま読めてしまうんですね。
よく使うものをあげると、

  • csv
  • tsv
  • json
  • excel
  • sql
  • html

というわけでpandasで直接DataFrameとしてreadできる物について紹介します。

import pandas as pd

csv/tsv

csvにはpd.read_csv()
tsvにはpd.read_table()が使えます。
基本的にはファイルパスを指定しますが、実はurlを指定してもOKです。

url = "https://raw.githubusercontent.com/fumingos/pandas_read/master/meibo.csv"
df = pd.read_csv(url)
df.head()
name gender age
0 john m 18
1 paul m 20
2 alice f 15
3 dabid m 17
4 jasmin f 17

json

ファイルが以下のようなjson形式であっても、keyをカラムとしたDataFrameに変換してくれます。

[{"name":"john","gender":"m","age":"18"},
{"name":"paul","gender":"m","age":"20"},
{"name":"alice","gender":"f","age":"15"},
{"name":"dabid","gender":"m","age":"17"},
{"name":"jasmin","gender":"f","age":"17"}]
df = pd.read_json("meibo.json")
df.head()
age gender name
0 18 m john
1 20 m paul
2 15 f alice
3 17 m dabid
4 17 f jasmin

前述の通りurlも叩けるということは、apiも取得できます。

url = "https://raw.githubusercontent.com/fumingos/pandas_read/master/meibo.json"
df = pd.read_json(url)
df.head()
age gender name
0 18 m john
1 20 m paul
2 15 f alice
3 17 m dabid
4 17 f jasmin

excel

read_excel()でエクセルもDataFrame化できます。
sheet_nameでシートの指定もできますよ。

元になったエクセル
df = pd.read_excel('meibo.xlsx')
df.head()
name gender age
0 john m 18
1 paul m 20
2 alice f 15
3 dabid m 17
4 jasmin f 17

sql

別途モジュールが必要になりますがmysqlclientなどを使えばデータベースもreadできます。
pip install mysqlclient

import pandas.io.sql as psql
import MySQLdb
conn = MySQLdb.connect(
host = "127.0.0.1",
user = 'root',
password = '',
database = 'training',
)
cur = conn.cursor()
df = psql.read_sql("SELECT * from meibo;", conn)
df.head()
name gender age
0 john m 18
1 paul m 20
2 alice f 15
3 dabid m 17
4 jasmin f 17

html

read_htmlを使えばweb上のtableタグを読み取ってDataFrameにすることができます。
スクレイピングいらずですね!

url = 'https://fumingos.github.io/pandas_read'
datasets = pd.io.html.read_html(url, header=0)
datasets[0]
名前 背番号 ポジション 打率 打点 本塁打 盗塁
0 佐藤 1 ライト 0.302 40 18 20
1 鈴木 18 ピッチャー 0.188 10 1 2
2 田中 99 キャッチャー 0.280 70 38 0
3 山田 0 ショート 0.333 52 9 30

終わりに

以上のメソッドを使いこなせば、データの中身を覗き見る時や、ちょっとしたグラフを描きたい時にサクッと作業を終わらせることができます。
他にもgoogleスプレッドシートを読み込む方法などがあるようなので皆さんも試して見てください。
それでは。