SlideShare a Scribd company logo
1 of 25
Download to read offline
PYTHON FOR DATA 
ANALYSIS(2)
PYTHONによるデータ分析 
• 次の⼯工程への受け渡し 
→ データの読み書き 
• 処理理の下準備 
→データの整形(結合、正規化、切切り出し、変換、etc.) 
• データの変換 
→データセットの⽣生成 
• モデリングと計算 
→計算⼿手法へ適⽤用 
• 分析結果
2.1下準備 
• 使うデータ:http://github.com/pydata/pydata-‐‑‒book のやつ 
↑bit.lyで変換された.govドメインのテキストデータ 
 
• データファイルのロード 
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
• ⼀一列列読み込んでみる (⽂文字列列) 
   
print open(path).readline()
2.1 続き 
• 任意の配列列要素を取り出したい 
import json 
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt’ 
# 
リスト内包 
records = [json.loads(line) for line in open(path)] 
• Pythonディクショナリ型のリストが返ってきます 
{u'a': u'Mozilla/5.0 (Windows NT 6.1; WOW64) 
AppleWebKit/535.11 (KHTML, like Gecko) Chrome/ 
17.0.963.78 Safari/535.11', 
u'al': u'en-US,en;q=0.8', u'c': u'US', 
u'cy': u'Danvers', 
u'g': u'A6qOVH', 
・・・
2.1 続きの続き 
• 特定の属性の値だけ読みだしてみる 
準備おわり! 
 
 
 
# 0番⽬目の値のうち、tz(タイムゾーン)属性を読み出す 
print records[0]['tz']
2.1.1 タイムゾーン情報の集計(1) 
今回の⽬目標: 
タイムゾーンのうち、最も頻度度の⾼高いものを調べよう〜~ 
 
• リスト内包を使ってタイムゾーンのリストを抽出 
time_zones = [rec['tz'] for rec in records] 
print time_zones 
• だめだった。じゃあ、条件付け加えてなんとかしましょう 
# もしこの⾏行行にtzあったら抽出してください〜~ 10⾏行行まで! 
time_̲zones = [rec['tz'] for rec in records if 'tz' in rec]  
print time_zones[:10]
2.1.1 タイムゾーン情報の集計(2) 
• ここまでできたら、タイムゾーンの出現回数をカウントします〜~ 
 
 
 
def get_counts(sequence): 
counts = {} 
for x in sequence: 
if x in counts: 
counts[x] += 1 
else: 
counts[x] = 1 
return counts 
counts = get_counts(time_zones) 
print counts['America/New_York']
2.1.1 タイムゾーン情報の集計(3) 
• 次は、上位10位のタイムゾーンを調べます 
# ペア(count, tz)。 n=上位何件まで引き出すか 
def top_counts(count_dict, n=10): 
  value_key_pairs = [(count, tz) for tz, count in count_dict.items()] 
  value_key_pairs.sort() 
return value_key_pairs[-n:] #降順にしとく 
• めんどくさいから、collections.Counterを使いましょう 
from collections import Counter 
counts = Counter(time_zones) 
print counts.most_common(10)
2.1.2 タイムゾーン情報の集計(pandas ver.)(1) 
• 標準機能じゃなくてpandasを使ってデータフレーム⽣生成! 
from pandas import DataFrame, Series 
import pandas as pd 
# データフレームオブジェクト、frameを生成 
frame = DataFrame(records) 
print frame 
• タイムゾーンデータだけ抽出したいなら 
print frame[‘tz’][:10] #10こだけね 
• Seriesオブジェクトって、なんか1列列だけ取り出すイメージね
2.1.2 タイムゾーン情報の集計(pandas ver.)(2) 
• value_̲countsメソッド使って上位10件表すよ〜~ 
tz_counts = frame['tz'].value_counts() 
print tz_counts[:10] 
• じゃあ、図⽰示してみよう! 
• Matplotlibライブラリの登場
2.1.2 タイムゾーン情報の集計(pandas ver.)(3) 
• そのまえに、タイムゾーンが空欄の所、適当に置き換えとこ 
 
clean_tz = frame['tz'].fillna('Missing') 
clean_tz[clean_tz == ''] = 'Unknown' 
tz_counts = clean_tz.value_counts() 
print tz_counts[:10] 
↑タイムゾーン情報はあるけど、空⽂文字列列の所はUnknown 
• じゃあ、作りますよ 
tz_counts[:10].plot(kind='barh', rot=0) 
plt.show()
2.1.2 タイムゾーン情報の集計(pandas ver.)(4) 
• タイムゾーン上位のデータを、Windowsユーザとそうじゃない 
ユーザに分けてみる 
# 存在してないレコードの除外 
cframe = frame[frame.a.notnull()]  
# Numpy使うよ 
operating_system = 
np.where(cframe[‘a’].str.contains(‘Windows’),‘Windows’, ‘Not  
Windows’)  
print operating_system[:5] 
# groupbyでOSとタイムゾーンの組み合わせごとにグループ化 
by_tz_os = cframe.groupby(['tz', operating_system]) 
agg_counts = by_tz_os.size().unstack().fillna(0) 
print agg_counts[:10] 
• あとのテクニックはこの本の残りでやるんだって。
2.1.2 データ分析:MovieLens 1M(1) 
• MovieLensって何? 
→映画評価システムのこと。 
各データが、 
①評価値、 
②属性(ジャンル・公開年年度度)、 
③評価者の属性(年年齢・郵便便番号・性別・職業) 
 
から成り⽴立立ってるんだって。 
ダウンロードしてね。
2.1.2 データ分析:MovieLens 1M(2) 
• Pandasのフレームオブジェクトに⼊入れる。 
こんな感じになるよ〜~
2.1.2 データ分析:MovieLens 1M(3) 
• うーんでも、表分かれてると使いにくいな 
mergeしよ。 
 
mergeは⼆二段階に分けてやってるよ 
①ratings(評価情報)とusers(ユーザ情報)のmerge 
②①とmovies(映画情報)のmerge 
 
2つの表に共通列列が存在したら、 
その列列をキーとしてmerge 
 
data = pd.merge(pd.merge(ratings, users), movies) 
print data
2.1.2 データ分析:MovieLens 1M(4) 
• これで⾊色々な処理理が直感的にできそうですね 
 
• mergeしたdata表に対して、性別毎の映画に対する平均 
評価を抽出したり。① 
• 各映画のタイトルでレビュー数を集計したり。② 
• レビュー数が250件以上あるやつだけ抽出して配列列に⼊入 
れたり。③ 
• 淡々とやりましょう。
2.1.2 データ分析:MovieLens 1M(5) 
• ①⾏行行に映画名(title), 列列に性別(gender)をとります 
mean_ratings = data.pivot_table('rating', rows='title', cols='gender', 
aggfunc='mean') 
print mean_ratings[:5] 
• ②各映画タイトルで集計 
mean_ratings = data.pivot_table('rating', rows='title', cols='gender', 
aggfunc='mean') 
print mean_ratings[:5] 
• ③250件以上に絞り込み 
ratings_by_title = data.groupby('title').size() 
print ratings_by_title[:10]
2.2.1 評価差がある映画の抽出(1) 
• 男⼥女女別とか、年年齢別とか、評価に差があるものってあり 
ますよね 
• 配列列に評価差(例例えば男性の評価平均ー⼥女女性の評価平均 
とか)を追加して、sortしちゃえば取り出しやすそう。 
• やりますわよ 
mean_ratings = mean_ratings.ix[active_titles] 
# 評価差の計算 
mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F'] 
sorted_by_diff = mean_ratings.sort_index(by='diff') 
print sorted_by_diff[:15]
2.2.1 評価差がある映画の抽出(2) 
• 今度度は男⼥女女関係なく評価が⼤大きく分かれた映画を抽出 
→そのためには、評価値の標準偏差を計算しないと 
 
# タイトル毎の評価値の標準偏差の計算 
rating_std_by_title = data.groupby('title')['rating'].std() 
# 評価件数が250件以上の映画のみを抽出 
rating_std_by_title = rating_std_by_title.ix[active_titles] 
# 得られたシリーズオブジェクトを降順でsort 
rating_std_by_title.order(ascending=False)[:10]
2.3 アメリカの赤ちゃんリスト(1) 
• ch02/names/yob1880.txt はコンマ区切切りのデータ 
• Pandas.read_̲csvを使うと、データフレームオブジェク 
トに読み込めるよ。性別毎とかもできるしね! 
names1880 = pd.read_csv('ch02/names/yob1880.txt', 
names=['name', 'sex', 'births']) 
print names1880 
print names1880.groupby('sex').births.sum()
2.3 アメリカの赤ちゃんリスト(2) 
• pandas.contact?? 
データを格納した巨⼤大なDataFrameオブジェクトを作る 
要は、yob*.txtをまとめちゃおうって話。 
years = range(1880, 2011) 
pieces = [] 
columns = ['name', 'sex', 'births'] 
for year in years: 
path = 'names/yob%d.txt' % year 
frame = pd.read_csv(path, names=columns) 
frame['year'] = year 
pieces.append(frame) 
names = pd.concat(pieces, ignore_index=True) 
print names
2.3 アメリカの赤ちゃんリスト(3) 
• あとは、さっきやったpivot_̲tableとか使えば、年年度度毎 
の男⼥女女別出⽣生数、でるよね!
2.3 アメリカの赤ちゃんリスト(4) 
• 他にもこんなことが 
 ①オブジェクトに新たな列追加:prop 
 ②上位1000件のデータを男女別に選り分け 
 ③年代ごとの、各名前の数 
  
 →これをみると、とある名前の名付けが減ってるとか、 
  いわゆる一般的な名前がつかない傾向にあるとか 
  仮説を立てるための材料になるんです。 
  (nで終わる男の子の名前が増加してる、とか)
2.3 アメリカの赤ちゃんリスト(5) 
• データフレームのplot使っていくつかの名前を描画して 
みると
そうかつ 
えいごむずい 
Pythonちょっとたのしいかもしれない 
はやくzshrcかすたむしたい 
おでこいたい

More Related Content

What's hot

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングより深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングYuto Hayamizu
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)Satoshi Yamada
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料kasaharatt
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131Toshi Harada
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigDataKohei KaiGai
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみMasahiko Sawada
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdwKohei KaiGai
 

What's hot (17)

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングより深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
 

Viewers also liked

DLhacks paperreading_20150902
DLhacks paperreading_20150902DLhacks paperreading_20150902
DLhacks paperreading_20150902Makoto Kawano
 
Pythonデータ分析 第4回勉強会資料 12章
Pythonデータ分析 第4回勉強会資料 12章Pythonデータ分析 第4回勉強会資料 12章
Pythonデータ分析 第4回勉強会資料 12章Makoto Kawano
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Makoto Kawano
 
Pythonデータ分析 第3回勉強会資料 7章
Pythonデータ分析 第3回勉強会資料 7章Pythonデータ分析 第3回勉強会資料 7章
Pythonデータ分析 第3回勉強会資料 7章Makoto Kawano
 
バンディットアルゴリズム勉強会
バンディットアルゴリズム勉強会バンディットアルゴリズム勉強会
バンディットアルゴリズム勉強会Ai Makabi
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Makoto Kawano
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Makoto Kawano
 
Pythonデータ分析 第4回勉強会資料 10章
Pythonデータ分析 第4回勉強会資料 10章Pythonデータ分析 第4回勉強会資料 10章
Pythonデータ分析 第4回勉強会資料 10章Makoto Kawano
 

Viewers also liked (8)

DLhacks paperreading_20150902
DLhacks paperreading_20150902DLhacks paperreading_20150902
DLhacks paperreading_20150902
 
Pythonデータ分析 第4回勉強会資料 12章
Pythonデータ分析 第4回勉強会資料 12章Pythonデータ分析 第4回勉強会資料 12章
Pythonデータ分析 第4回勉強会資料 12章
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
 
Pythonデータ分析 第3回勉強会資料 7章
Pythonデータ分析 第3回勉強会資料 7章Pythonデータ分析 第3回勉強会資料 7章
Pythonデータ分析 第3回勉強会資料 7章
 
バンディットアルゴリズム勉強会
バンディットアルゴリズム勉強会バンディットアルゴリズム勉強会
バンディットアルゴリズム勉強会
 
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章 Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
 
Pythonデータ分析 第4回勉強会資料 10章
Pythonデータ分析 第4回勉強会資料 10章Pythonデータ分析 第4回勉強会資料 10章
Pythonデータ分析 第4回勉強会資料 10章
 

Similar to 2kaime

[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章Haruki Eguchi
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017wada, kazumi
 
Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Yusaku Kawaguchi
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類Tetsuya Hasegawa
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京Yuko Mori
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdfTakuya Kubo
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」Shin Ise
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装Shinya Akiba
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...Insight Technology, Inc.
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方Takahiro Inoue
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?KAWANO KAZUYUKI
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分けるKazuaki Tanida
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編wada, kazumi
 

Similar to 2kaime (20)

[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約Rを用いた外国語教育データの整理・要約
Rを用いた外国語教育データの整理・要約
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
Teclab3
Teclab3Teclab3
Teclab3
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdf
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
OSC ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
 
Tokyo r28 1
Tokyo r28 1Tokyo r28 1
Tokyo r28 1
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
 

2kaime

  • 1. PYTHON FOR DATA ANALYSIS(2)
  • 2. PYTHONによるデータ分析 • 次の⼯工程への受け渡し → データの読み書き • 処理理の下準備 →データの整形(結合、正規化、切切り出し、変換、etc.) • データの変換 →データセットの⽣生成 • モデリングと計算 →計算⼿手法へ適⽤用 • 分析結果
  • 3. 2.1下準備 • 使うデータ:http://github.com/pydata/pydata-‐‑‒book のやつ ↑bit.lyで変換された.govドメインのテキストデータ • データファイルのロード path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' • ⼀一列列読み込んでみる (⽂文字列列)    print open(path).readline()
  • 4. 2.1 続き • 任意の配列列要素を取り出したい import json path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt’ # リスト内包 records = [json.loads(line) for line in open(path)] • Pythonディクショナリ型のリストが返ってきます {u'a': u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/ 17.0.963.78 Safari/535.11', u'al': u'en-US,en;q=0.8', u'c': u'US', u'cy': u'Danvers', u'g': u'A6qOVH', ・・・
  • 5. 2.1 続きの続き • 特定の属性の値だけ読みだしてみる 準備おわり! # 0番⽬目の値のうち、tz(タイムゾーン)属性を読み出す print records[0]['tz']
  • 6. 2.1.1 タイムゾーン情報の集計(1) 今回の⽬目標: タイムゾーンのうち、最も頻度度の⾼高いものを調べよう〜~ • リスト内包を使ってタイムゾーンのリストを抽出 time_zones = [rec['tz'] for rec in records] print time_zones • だめだった。じゃあ、条件付け加えてなんとかしましょう # もしこの⾏行行にtzあったら抽出してください〜~ 10⾏行行まで! time_̲zones = [rec['tz'] for rec in records if 'tz' in rec] print time_zones[:10]
  • 7. 2.1.1 タイムゾーン情報の集計(2) • ここまでできたら、タイムゾーンの出現回数をカウントします〜~ def get_counts(sequence): counts = {} for x in sequence: if x in counts: counts[x] += 1 else: counts[x] = 1 return counts counts = get_counts(time_zones) print counts['America/New_York']
  • 8. 2.1.1 タイムゾーン情報の集計(3) • 次は、上位10位のタイムゾーンを調べます # ペア(count, tz)。 n=上位何件まで引き出すか def top_counts(count_dict, n=10):   value_key_pairs = [(count, tz) for tz, count in count_dict.items()]   value_key_pairs.sort() return value_key_pairs[-n:] #降順にしとく • めんどくさいから、collections.Counterを使いましょう from collections import Counter counts = Counter(time_zones) print counts.most_common(10)
  • 9. 2.1.2 タイムゾーン情報の集計(pandas ver.)(1) • 標準機能じゃなくてpandasを使ってデータフレーム⽣生成! from pandas import DataFrame, Series import pandas as pd # データフレームオブジェクト、frameを生成 frame = DataFrame(records) print frame • タイムゾーンデータだけ抽出したいなら print frame[‘tz’][:10] #10こだけね • Seriesオブジェクトって、なんか1列列だけ取り出すイメージね
  • 10. 2.1.2 タイムゾーン情報の集計(pandas ver.)(2) • value_̲countsメソッド使って上位10件表すよ〜~ tz_counts = frame['tz'].value_counts() print tz_counts[:10] • じゃあ、図⽰示してみよう! • Matplotlibライブラリの登場
  • 11. 2.1.2 タイムゾーン情報の集計(pandas ver.)(3) • そのまえに、タイムゾーンが空欄の所、適当に置き換えとこ clean_tz = frame['tz'].fillna('Missing') clean_tz[clean_tz == ''] = 'Unknown' tz_counts = clean_tz.value_counts() print tz_counts[:10] ↑タイムゾーン情報はあるけど、空⽂文字列列の所はUnknown • じゃあ、作りますよ tz_counts[:10].plot(kind='barh', rot=0) plt.show()
  • 12. 2.1.2 タイムゾーン情報の集計(pandas ver.)(4) • タイムゾーン上位のデータを、Windowsユーザとそうじゃない ユーザに分けてみる # 存在してないレコードの除外 cframe = frame[frame.a.notnull()]  # Numpy使うよ operating_system = np.where(cframe[‘a’].str.contains(‘Windows’),‘Windows’, ‘Not  Windows’)  print operating_system[:5] # groupbyでOSとタイムゾーンの組み合わせごとにグループ化 by_tz_os = cframe.groupby(['tz', operating_system]) agg_counts = by_tz_os.size().unstack().fillna(0) print agg_counts[:10] • あとのテクニックはこの本の残りでやるんだって。
  • 13. 2.1.2 データ分析:MovieLens 1M(1) • MovieLensって何? →映画評価システムのこと。 各データが、 ①評価値、 ②属性(ジャンル・公開年年度度)、 ③評価者の属性(年年齢・郵便便番号・性別・職業) から成り⽴立立ってるんだって。 ダウンロードしてね。
  • 14. 2.1.2 データ分析:MovieLens 1M(2) • Pandasのフレームオブジェクトに⼊入れる。 こんな感じになるよ〜~
  • 15. 2.1.2 データ分析:MovieLens 1M(3) • うーんでも、表分かれてると使いにくいな mergeしよ。 mergeは⼆二段階に分けてやってるよ ①ratings(評価情報)とusers(ユーザ情報)のmerge ②①とmovies(映画情報)のmerge 2つの表に共通列列が存在したら、 その列列をキーとしてmerge data = pd.merge(pd.merge(ratings, users), movies) print data
  • 16. 2.1.2 データ分析:MovieLens 1M(4) • これで⾊色々な処理理が直感的にできそうですね • mergeしたdata表に対して、性別毎の映画に対する平均 評価を抽出したり。① • 各映画のタイトルでレビュー数を集計したり。② • レビュー数が250件以上あるやつだけ抽出して配列列に⼊入 れたり。③ • 淡々とやりましょう。
  • 17. 2.1.2 データ分析:MovieLens 1M(5) • ①⾏行行に映画名(title), 列列に性別(gender)をとります mean_ratings = data.pivot_table('rating', rows='title', cols='gender', aggfunc='mean') print mean_ratings[:5] • ②各映画タイトルで集計 mean_ratings = data.pivot_table('rating', rows='title', cols='gender', aggfunc='mean') print mean_ratings[:5] • ③250件以上に絞り込み ratings_by_title = data.groupby('title').size() print ratings_by_title[:10]
  • 18. 2.2.1 評価差がある映画の抽出(1) • 男⼥女女別とか、年年齢別とか、評価に差があるものってあり ますよね • 配列列に評価差(例例えば男性の評価平均ー⼥女女性の評価平均 とか)を追加して、sortしちゃえば取り出しやすそう。 • やりますわよ mean_ratings = mean_ratings.ix[active_titles] # 評価差の計算 mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F'] sorted_by_diff = mean_ratings.sort_index(by='diff') print sorted_by_diff[:15]
  • 19. 2.2.1 評価差がある映画の抽出(2) • 今度度は男⼥女女関係なく評価が⼤大きく分かれた映画を抽出 →そのためには、評価値の標準偏差を計算しないと # タイトル毎の評価値の標準偏差の計算 rating_std_by_title = data.groupby('title')['rating'].std() # 評価件数が250件以上の映画のみを抽出 rating_std_by_title = rating_std_by_title.ix[active_titles] # 得られたシリーズオブジェクトを降順でsort rating_std_by_title.order(ascending=False)[:10]
  • 20. 2.3 アメリカの赤ちゃんリスト(1) • ch02/names/yob1880.txt はコンマ区切切りのデータ • Pandas.read_̲csvを使うと、データフレームオブジェク トに読み込めるよ。性別毎とかもできるしね! names1880 = pd.read_csv('ch02/names/yob1880.txt', names=['name', 'sex', 'births']) print names1880 print names1880.groupby('sex').births.sum()
  • 21. 2.3 アメリカの赤ちゃんリスト(2) • pandas.contact?? データを格納した巨⼤大なDataFrameオブジェクトを作る 要は、yob*.txtをまとめちゃおうって話。 years = range(1880, 2011) pieces = [] columns = ['name', 'sex', 'births'] for year in years: path = 'names/yob%d.txt' % year frame = pd.read_csv(path, names=columns) frame['year'] = year pieces.append(frame) names = pd.concat(pieces, ignore_index=True) print names
  • 22. 2.3 アメリカの赤ちゃんリスト(3) • あとは、さっきやったpivot_̲tableとか使えば、年年度度毎 の男⼥女女別出⽣生数、でるよね!
  • 23. 2.3 アメリカの赤ちゃんリスト(4) • 他にもこんなことが  ①オブジェクトに新たな列追加:prop  ②上位1000件のデータを男女別に選り分け  ③年代ごとの、各名前の数    →これをみると、とある名前の名付けが減ってるとか、   いわゆる一般的な名前がつかない傾向にあるとか   仮説を立てるための材料になるんです。   (nで終わる男の子の名前が増加してる、とか)
  • 24. 2.3 アメリカの赤ちゃんリスト(5) • データフレームのplot使っていくつかの名前を描画して みると
  • 25. そうかつ えいごむずい Pythonちょっとたのしいかもしれない はやくzshrcかすたむしたい おでこいたい