ysk_son’s diary

勉強の記録

Pythonを使ったデータ分析の学習 - その3(Pythonの基礎、データを詳しく見てみる)

巷で評判の良いPythonオンライン教材、『【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門 | Udemy』を購入し、学習してみた。

前回エントリ(jupyter使い始め,データの読み込み,データの表示)はこちらから。

セクション3: まずデータに向き合おう(続き)

Pythonの基礎

旋回は突然のプログラミングだったが、ここで改めてPythonの説明をしてもらえる。

・変数
・関数
・よくあるみす
の3点をそれぞれについて説明。

変数

変数は箱。
数字の5も”あいうえお”という文字も、データフレームも入れられる。
箱の名前は自由につけられる。

関数

エクセルのSUM関数と同じ。
ある規則のある処理をおこないた場合に使う。
関数を使いたい場合は

変数名.関数名(オプション)

train.plot(option)

と記載する必要があり、オプションはカンマで区切ることで複数指定することができる。
※ このオプションのことを引数と言う

変数名.関数名(オプション,オプション)

train.plot(option,option)
よくあるミス

シンプルに説明。
Pythonに限らずだろうが、プログラミング初心者にありがちなミスについて説明があった。

1・スペルミス
 一番よくある。
 なにかエラーが出たらまずはスペルミスを疑うべき。

2・大文字と小文字のミス
 Falseとfalseと間違えるとエラーがでる。
 Pythonでは大文字と小文字を別物として区別される。

3・カッコの有無、種類
 [],{},()の使い分け、head()をheadとしてしまう、など

4・ドットとカンマの間違い
 これは慣れれば少なくなるらしい。

データをもう少し詳しく見てみよう

Section3_2.ipynb (教材PART2)

ここから実習。
jupyter/Documents/case1/Section3_2.ipynb を解いていく。

# おまじない
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

# データの読み込み
train = pd.read_csv("train.csv")

# データ先頭行の確認
train.head()

このように表示される。
f:id:ysk_son:20180201140354p:plain

次は基本統計量を確認する。
どんどん分析計の方向に進んでいる感じがして素晴らしい。
ここでは describe関数を使うとある。
※ スペルミス注意

train.describe()

このように表示される。
f:id:ysk_son:20180201141105p:plain

この中から読み取れる情報は以下の通り。
・数字の情報のみ基本統計量を引っ張り出す
・count行y列はyが入力されている行数から207行あることがわかる
・count行kcal列は166とあり、入力されていない欄があることがわかる
・meanは平均値
・stdは(standard deviation)標準偏差の略だが今は深く触れない
・minは最小値
・maxは最大値
・50%は中央値(median)


次はデータの型を確認する。
info関数を使う。

train.info()

このように表示される。
f:id:ysk_son:20180201141240p:plain

この中から読み取れる情報は以下の通り。
なかなか難しいが頑張る。
・non-nullは入力されている欄の数であり、この数はdescribeのときと同じである(例えばyは207入力されている)
・intは整数
・floatは小数点付きの値
・objectは文字列

ここまではtrainの全体感を見てきた。
ここからは特定の値(カラム)に注目していく。

train["y"]

このように表示される。
(ただy列が207行抜き出されただけの状態)
f:id:ysk_son:20180201142735p:plain


ここからyの平均値と中央値を見てみる。
平均値はmean関数、中央値はmedian関数を使う。

# yについての平均値を求める
train["y"].mean()

# このように返ってくる
86.6231884057971

# yについての中央値を求める
train["y"].median()

# このように返ってくる
78.0


ちなみに中央値と平均値は全然別物である(初めて知った)。
わかり易い(しかし極端な)例とともに一応記載しておく。

【平均値】
全部足してそのデータ個数で割った数。
10,20,30,40,1,000の5つの数がある場合の平均値は、
(10+20+30+40+1,000)÷5=220
となる。

【中央値】
全部の数を大きい順(または小さい順)に並べた時に真ん中にくる数。
10,20,30,40,1,000の5つの数がある場合の中央値は、
単純に真ん中(三番目)にある30
となる。


話を戻す。
次はyの値が150以上のデータのみを見てみる。

train[train["y"]>=150]

このように表示される。
f:id:ysk_son:20180201144356p:plain

だんだん難しくなってきたが、無事表示された。

次は曜日が月曜日だけのデータのみを見てみる。
注意点として、イコールは"=="と記載する必要がある。
これは"="だと代入を表すためである。

train[train["week"]=="月"]

このように表示される。
f:id:ysk_son:20180201144541p:plain


疲れてきた。
けどあと3つで課題は終わり。頑張る。


続いて曜日が火となっているデータをyで昇順・降順にする。
注意点は以下2点。

・ソートはsort_values関数を使う。sort_values(by="XXX")と書く
・降順にしたい場合はカッコの中にオプションとしてscending=Falseを記載
※昇順にしたい場合はオプションをつけばければ自動で昇順になる

train[train["week"]=="火"].sort_values(by="y")

このように表示される。
f:id:ysk_son:20180201145111p:plain

確かに火曜日のみが抽出されている。
さらにyがsort(昇順)になっている。


今度は同じように火曜日を抽出し、yで降順に表示させてみる。
※ sort_values関数の最後のsを忘れないように注意
※ Falseの最初の文字は大文字のFなので注意

train[train["week"]=="火"].sort_values(by="y",ascending=False)

このように表示される。
f:id:ysk_son:20180201145708p:plain

確かに火曜日のみが抽出されている。
さらにyが降順になっている。成功。


最後に曜日が月曜日の時のyの平均値を表示させる。

train[train["week"]=="月"]["y"].mean()

# このように表示される
94.05128205128206


これでセクション3: まずデータに向き合おう(続き)の中の『データをもう少し詳しく見てみよう』までを終えた。

今回はここまで。