Coursera – Introduction to Data Science in Python #9 (2週目その4)

Coursera『Introduction to Data Science in Python – by University of Michigan』の学習メモ

DataFrame Indexing and Loading

典型的なワークフローは、取り出したデータをpandas DataFrameに変換し、不要な行や列を削除すること。

前回の例からCost行だけを使ってみる。


costs = df['Cost']
costs
# Store 1    22.5
# Store 1     2.5
# Store 2     5.0
# Name: Cost, dtype: float64

# ブロードキャストを使って、Costを更新
costs+=2
costs
# Store 1    24.5
# Store 1     4.5
# Store 2     7.0
# Name: Cost, dtype: float64

# この場合オリジナルも更新されている

df
#            Cost   Item Purchased  Name    Location
# Store 1    24.5   Dog Food    Chris   None
# Store 1    4.5    Kitty Litter    Kevyn   None
# Store 2    7.0             Bird Seed  Vinod   None

取ってくるデータは、CSVをはじめ, ExcelやHTMLなど様々。今回は代表的なCSVを使ってデータ取り込みを行ってみる。
ソースはWikipediaから引っ張ってきたオリンピックのメダルに関する情報。


df = pd.read_csv('olympics.csv')
df.head()

1行目をインデックスとし、最初の列はスキップさせる。


df = pd.read_csv('olympics.csv', index_col = 0, skiprows=1)
df.head()

行ラベルを見ると、01 !とか分かりにくいので、これを加工する。


df.columns
# Index(['№ Summer', '01 !', '02 !', '03 !', 'Total', '№ Winter', '01 !.1',
#        '02 !.1', '03 !.1', 'Total.1', '№ Games', '01 !.2', '02 !.2', '03 !.2',
#        'Combined total'],
#       dtype='object')

# 行ラベルの加工
for col in df.columns:
    if col[:2]=='01':
        df.rename(columns={col:'Gold' + col[4:]}, inplace=True)
    if col[:2]=='02':
        df.rename(columns={col:'Silver' + col[4:]}, inplace=True)
    if col[:2]=='03':
        df.rename(columns={col:'Bronze' + col[4:]}, inplace=True)
    if col[:1]=='№':
        df.rename(columns={col:'#' + col[1:]}, inplace=True) 

df.head()

Querying DataFrame

Boolean Masking

Querying DataFrameに入る前にBoolean Masking の説明。データサイエンスでよく用いられるテクニックで、ある配列やSeriesをTrueとFalseのみで表現し、最終的なアウトプットにするかどうかを判断する手法。

先ほどのオリンピックのデータを使って金メダルを取ったことがあるかどうかBoolean Maskingすると以下のようになる。


df['Gold'] > 0

次にwhere functionを使って、DataFrame(またはSeriesなど)全体にBoolean Masking を適用する。


only_gold = df.where(df['Gold'] > 0)
only_gold.head()

only_gold['Gold'].count()
# 100

df['Gold'].count()
# 147

# Falseを取り除く

only_gold = only_gold.dropna()
only_gold.head()

only_gold = df[df['Gold'] > 0]
only_gold.head()

Source

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です