LoginSignup
174
227

More than 5 years have passed since last update.

Pandasでデータ集計をする際に最低限覚えておきたいメソッド

Last updated at Posted at 2017-05-09

基礎集計の際によく使うものをメモ、随時更新予定

前準備

from sklearn import datasets
import pandas as pd
from collections import OrderedDict

iris = datasets.load_iris()

df = pd.concat([pd.DataFrame(iris.data,columns=iris.feature_names),pd.DataFrame(iris.target,columns=["species"])],axis=1)

スクリーンショット 2017-05-09 9.51.52.png

最近のアップデートで、pandasが見やすくなったのは嬉しい

集計

describe

df.describe()

スクリーンショット 2017-12-22 14.42.57.png

基本統計量は出力できる

df["petal length (cm)"].describe()

スクリーンショット 2017-05-09 9.34.06.png

Seriesだけでも算出可能

value_counts

df["species"].value_counts()

スクリーンショット 2017-05-09 9.36.35.png

カウントが可能

get_dummies

pd.get_dummies(df["species"]).ix[[0,1,2,50,51,52,100,101,102]]

スクリーンショット 2017-05-09 9.37.32.png

いわゆるダミー変数が作成可能
(見やすいように、インデックスを指定済み)

sort_values

df.sort_values("sepal length (cm)",ascending=False)

スクリーンショット 2017-05-09 9.38.41.png

dfのソートが可能(ascendingで昇順降順を指定)

df.sort_values(["sepal length (cm)","sepal width (cm)"],ascending=False)

スクリーンショット 2017-05-09 9.55.50.png

複数指定も可能(優先度は引数のlistのインデックス)

groupby

df_groupby = df.groupby("species",as_index=False)
df_groupby.mean()

スクリーンショット 2017-05-09 9.57.37.png

groupbyオブジェクトを再利用できるため、同じような集計を複数かけたいときはgroupbyオブジェクトを変数に格納したほうが早い

groupby.agg

df_groupby.agg({"sepal length (cm)": "mean",
                "sepal width (cm)": ["mean","count"],
                "petal length (cm)": ["max","min"],
                "petal width (cm)": ["sum","var","std"]})

スクリーンショット 2017-05-09 9.43.42.png

辞書形式で指定することで、カラムごとの個別集計が可能(ただし、一つのカラムに複数の集計を指定した場合、マルチカラムになるため、注意が必要)

また、こちらは順不同になるため、順序を指定したい場合はOrderedDictを利用する

df_groupby.agg(OrderedDict((["sepal length (cm)", "mean"],
                            ["sepal width (cm)", ["mean","count"]],
                            ["petal length (cm)", ["max","min"]],
                            ["petal width (cm)", ["sum","var","std"]])))

スクリーンショット 2017-05-09 9.59.54.png

to_csv

df.to_csv("test.csv",index=False,encoding="utf8")
pd.read_csv("test.csv")

スクリーンショット 2017-05-09 9.50.51.png

index=Falseにすると、次の読み込みが楽
encodingを指定しないと読み込めない時がある(とくにWindows)

可視化

前準備

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inlineはJupyter内に可視化するためのマジックコマンド

箱ひげ図

sns.boxplot(data=df, x="species", y="sepal length (cm)")

スクリーンショット 2017-12-22 14.50.52.png

pairplot

sns.pairplot(data=df)

Unknown.png

sns.pairplot(data=df, hue="species")

Unknown.png

セグメント別に分けることもできる

jointplot

sns.jointplot(data=df, x="sepal length (cm)", y="sepal width (cm)", kind="kde")

Unknown.png

distplot

sns.distplot(df["sepal length (cm)"], rug=True,)

Unknown.png

174
227
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
174
227