Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
機械学習 - pandas入門
Search
Y. Yamamoto
PRO
April 14, 2025
Science
0
280
機械学習 - pandas入門
Y. Yamamoto
PRO
April 14, 2025
Tweet
Share
More Decks by Y. Yamamoto
See All by Y. Yamamoto
データマイニング - ウェブとグラフ
trycycle
PRO
0
51
データベース12: 正規化(2/2) - データ従属性に基づく正規化
trycycle
PRO
0
700
データマイニング - コミュニティ発見
trycycle
PRO
0
73
データベース11: 正規化(1/2) - 望ましくない関係スキーマ
trycycle
PRO
0
680
データマイニング - ノードの中心性
trycycle
PRO
0
140
データベース10: 拡張実体関連モデル
trycycle
PRO
0
730
データマイニング - グラフ構造の諸指標
trycycle
PRO
0
100
データベース09: 実体関連モデル上の一貫性制約
trycycle
PRO
0
720
データマイニング - グラフデータと経路
trycycle
PRO
1
150
Other Decks in Science
See All in Science
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
220
ド文系だった私が、 KaggleのNCAAコンペでソロ金取れるまで
wakamatsu_takumu
2
250
CV_3_Keypoints
hachama
0
190
Introd_Img_Process_2_Frequ
hachama
0
570
Transport information Geometry: Current and Future II
lwc2017
0
160
Hakonwa-Quaternion
hiranabe
1
110
安心・効率的な医療現場の実現へ ~オンプレAI & ノーコードワークフローで進める業務改革~
siyoo
0
260
生成AIと学ぶPythonデータ分析再入門-Pythonによるクラスタリング・可視化をサクサク実施-
datascientistsociety
PRO
4
1.6k
academist Prize 4期生 研究トーク延長戦!「美は世界を救う」っていうけど、どうやって?
jimpe_hitsuwari
0
140
How To Buy, Verified Venmo Accounts in 2025 This year
usaallshop68
2
140
Cross-Media Information Spaces and Architectures (CISA)
signer
PRO
3
31k
統計学入門講座 第3回スライド
techmathproject
0
110
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Side Projects
sachag
455
42k
GraphQLとの向き合い方2022年版
quramy
49
14k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Faster Mobile Websites
deanohume
307
31k
The Invisible Side of Design
smashingmag
301
51k
Designing Experiences People Love
moore
142
24k
4 Signs Your Business is Dying
shpigford
184
22k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
pandas入門 ⼭本 祐輔 名古屋市⽴⼤学 データサイエンス研究科
[email protected]
第2回 機械学習発展(導入編) ⼭本祐輔 クリエイティブコモンズライセンス
(CC BY-NC-SA 4.0)
1pandasとは?
⾏列として扱われる⼤規模データ ID Name Price 表 ID Name Price 機械学習 数理モデリング
⾏列として扱われる⼤規模データ ID Name Price 表 ID Name Price 機械学習 数理モデリング
⾏列 (テンソル) 3 1 −4 −1 5 9 2 −6 5 変換
⾏列として扱われる⼤規模データ ID Name Price 表 ID Name Price 機械学習 数理モデリング
グラフ テキスト 画像 ⾏列 (テンソル) 3 1 −4 −1 5 9 2 −6 5 変換
⾏列として扱われる⼤規模データ ID Name Price 表 ID Name Price 機械学習 数理モデリング
グラフ テキスト 画像 ⾏列 (テンソル) 3 1 −4 −1 5 9 2 −6 5 変換 表データは典型的なデータ分析対象
Pythonicなデータ処理の流れ ⾏列変換 ⾼効率な ⾏列処理 データ処理の⼊り⼝となるpandasを押さえることは重要 ⾏列計算の効率化 機械学習・数値解析 表データの取り扱い
pandasとデータフレーム - 表データを効率良く扱うためのPythonライブラリ - データフレームと呼ばれるデータ構造を⽤いて 表データを効率的に処理 データフレーム pandas - 列ごとに型が定義された表データを扱うためのデータ構造
- NumPyの多次元配列(numpy.ndarray)と変換が容易
データフレームの構造 レコード(行) カラム(列)
データフレームの構造 インデックス名 インデックス レコードを⼀意に識別するためのラベル
データフレームの構造 カラム名
pandasと関係データベース管理システム (RDBMS) pandas RDBMS 扱える データサイズ 小〜中 (メモリサイズに依存) 大 (サーバ次第)
処理速度 遅い 速い (索引 & クエリ最適化 の恩恵) 柔軟性 高い (Pythonが使える) 低い (SQLでできることに 限られる) 用途 - Pythonとの連携 - データの前処理 - 大規模データ管理 - 前処理対象となる データの抽出・集約
表データの受け渡し CSV TSV RDB 表データ交換⽤の テキストファイル 関係データベース に直接接続 Excelファイル
CSVファイル - 表形式のデータ交換⽤に⽤いられるテキストファイル - CSVファイルの⾏が表の⾏に相当 - 表の各項⽬の値をカンマ(,)で区切る - 1⾏⽬には表の構造を⽰す項⽬名を並べることがある -
CSVファイルの拡張⼦はcsv ID,都道府県,県庁所在地 1,北海道, 札幌市 2,青森県, 青森市 3,岩手県, 盛岡市 ... CSVファイルの中⾝ ID 都道府県 県庁所在地 1 北海道 札幌市 2 青森県 青森市 3 岩手県 盛岡市 … 表データ 解釈
TSVファイル - 表形式のデータ交換⽤に⽤いられるテキストファイル - TSVファイルの⾏が表の⾏に相当 - 表の各項⽬の値をタブ記号(\t: 不可視⽂字)で区切る - 1⾏⽬には表の構造を⽰す項⽬名を並べることがある
- TSVファイルの拡張⼦はtsv ID 都道府県 県庁所在地 1 北海道 札幌市 2 青森県 青森市 3 岩手県 盛岡市 ... TSVファイルの中⾝ ID 都道府県 県庁所在地 1 北海道 札幌市 2 青森県 青森市 3 岩手県 盛岡市 … 表データ 解釈
Hands-on タイム 以下のURLにアクセスして, pandasを使いながら講義を受けよう https://mlnote.hontolab.org/ 17
2 最低限のpandas 18
Pythonでpandasを使う準備 import pandas as pd pandasライブラリをインポート コード中で頻繁にpandasライブラリを参照 するので,短い名前でアクセスできるように 略称を付けておく
CSV/TSVファイルの読み取り df = pd.read_table( “読み込むCSV/TSVファイルの場所 or URL”, sep=‘区切り⽂字’, header=⾒出し⾏の場所, index_col=‘インデックス名’
) pandas.read_table ファイルからデータフレームを読み込むメソッド
CSV/TSVファイルの読み取り 例 df = pd.read_table( “data/SSDSE-E-2024.csv”, sep=‘,’, header=2, index_col=‘地域コード’ )
← 読み込むファイル ← 区切り⽂字はカンマ ← ⾒出しは2⾏⽬(数え始めはゼロ) ← 「地域コード」列をインデックスに pandas.read_table ファイルからデータフレームを読み込むメソッド
データフレームの基本情報(1/3) # データフーレムが変数df に格納されていると仮定 pandas.DataFrame.shape df.shape (48, 91) データフレームの⾏数と列数を返す ←
dfの⾏数が48,列数が91であることを⽰す
データフレームの基本情報(2/3) # データフーレムが変数df に格納されていると仮定 pandas.DataFrame.columns df.columns Index(['都道府県', '総人口', '日本人人口', '15歳未満人口',
'15〜64歳人口’,…]) データフレームの列名のリストを返す
データフレームの基本情報(3/3) # データフーレムが変数df に格納されていると仮定 pandas.DataFrame.describe df.describe() データフレームの基本統計量を返すメソッド
射影(1/2) # データフーレムが変数df に格納されていると仮定 df.総⼈⼝ 表⽰したい列をドットもしくは中括弧で指定 df[“総⼈⼝”]
射影(2/2) # データフーレムが変数df に格納されていると仮定 中括弧で列名リストを指定すると複数列を射影 df[“都道府県”, “総⼈⼝”]
データフレーム × 四則演算(1/2) # 各⾏の総⼈⼝の値に100を加算 射影した列にスカラーの四則演算を適⽤すると, 射影した列データ全体に演算が適⽤される df[“総⼈⼝”] + 100
+100
データフレーム × 四則演算(2/2) # 各⾏の⽇本⼈⼈⼝の値をその⾏の総⼈⼝で割った値を返す 射影した列間の四則演算を適⽤すると, 各⾏の射影した列の値に対して演算が適⽤される df[“⽇本⼈⼈⼝”] / df[“総⼈⼝”]
新しい列の追加 # 各⾏の⽇本⼈⼈⼝の値をその⾏の総⼈⼝で割った値を返す 中括弧を⽤いて新しい列に代⼊演算をすることで 新しい列を追加することが可能 df[“⽇本⼈割合”] = df[“⽇本⼈⼈⼝”] / df[“総⼈⼝”]
# ドットアクセスでの代⼊はできない # df.⽇本⼈割合 = df[“⽇本⼈⼈⼝”] / df[“総⼈⼝”]
データフレーム情報へのアクセス(1/2) # データフーレムが変数df に格納されていると仮定 pandas.DataFrame.head df.head() データフレームの先頭数⾏を返すメソッド # データフーレムが変数df に格納されていると仮定
df.tail() データフレームの末尾数⾏を返すメソッド pandas.DataFrame.tail ← メソッドの引数に整数を与えるとその数だけ⾏を返す ← メソッドの引数に整数を与えるとその数だけ⾏を返す
データフレーム情報へのアクセス(2/2) # データフレームdfの(ゼロから始めて)2⾏⽬を抽出 df[2] ⾏番号を⽤いることで,データフレームの各⾏に アクセスすることが可能 # df の先頭⾏から10⾏⽬未満(9⾏⽬)までを取得 df[:10]
# df の2⾏から10⾏⽬未満(9⾏⽬)までを取得 df[2:10]
絞り込み(1/3) # 総⼈⼝の値が700万を超える⾏のみを抽出 中括弧の中で条件を指定すると,条件にマッチする ⾏を抽出したデータフレームが得られる df[df['総⼈⼝'] >= 7000000] # ドット表現を⽤いて条件を指定することも可能
# df[df.総⼈⼝ >= 7000000]
絞り込み(2/3) 複数条件を指定する場合, AND条件は & ,OR条件は |(パイプ)でつなぐ (各条件を丸括弧で包むこと) # 総人口が700万人以上かつ都道府県名が「全国」でないレコードを抽出 df[(df.総人口
>= 7000000) & (df.都道府県 != '全国')] # 合計特殊出生率が1.8以上もしくは1.1未満のレコードを抽出 df[(df.合計特殊出生率 >= 1.8) | (df.合計特殊出生率 < 1.1)]
絞り込み(3/3) # 総人口が700万人以上かつ都道府県名が「全国」でないレコードを抽出 # df[(df.総人口 >= 7000000) & (df.都道府県 !=
'全国')] # 上のコードは以下のように書くことが可能 df.query(“総人口 >= 7000000 & 都道府県 != ‘全国’”) pandas.DataFrame.query queryメソッドを使うと絞り込みをすっきり書ける
データフレームの保存(1/2) df.to_csv( “保存先のファイル名”, sep=‘区切り文字’, header=True/False (デフォルトはTrue), index=True/False (デフォルトはTrue) ) pandas.DataFrame.to_csv
データフレームをCSV/TSVファイルに書き出す ↓⾒出し情報を書き出すか否か ↑インデックス情報を書き出すか
データフレームの保存(2/2) df.query(‘総人口 >= 7000000’).to_csv( “data/big-prefecture.tsv”, sep=‘\t’, header=True, index=False ) pandas.DataFrame.to_csv
データフレームをCSV/TSVファイルに書き出す ←TSVファイルで書き出す ←インデックス情報(地域コード) はナシで書き出す
Hands-on タイム 以下のURLにアクセスして, ページ末尾のクイズを解いてみよう https://mlnote.hontolab.org/ 37
今後の予定 38 回 実施⽇ トピック 1 04/14 ガイダンス 2 04/21
pandas⼊⾨ 3 04/28 決定⽊からはじめる機械学習 4 05/12 クラスタリング1:k-means & 階層的クラスタリング 5 05/19 クラスタリング2:密度ベースクラスタリング 6 05/26 分類1:K近傍法 & 教師あり機械学習のお作法 7 06/02 分類2:サポートベクターマシン 8 06/09 分類3:ニューラルネットワーク⼊⾨