{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# pandas vor!(デモ)\n", "\n", "みんなのPython勉強会#32 (2018/02/07)\n", "\n", "nikkie" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 環境構築\n", "\n", "venvで構築\n", "\n", "- `pip install pandas jupyter`\n", "- 図を描画するため追加 `pip install matplotlib`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## データの読み込み" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "扱うデータについて\n", "\n", "以下のリポジトリのデータ(anime.csv)をPCに保存してpandasで触ってみました。\n", "\n", "https://github.com/practical-jupyter/sample-data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- anime_id:内部的なID\n", "- name:作品名\n", "- genre:ジャンル(複数入力されている)\n", "- type:分類(TV、映画など)\n", "- episodes:話数\n", "- rating:評価値(0〜10。小数値)\n", "- members:評価者数" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# ┣(このjupyter notebook)\n", "# ┗data/\n", "# ┗anime.csv\n", "anime_csv_path = 'data/anime.csv'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# アニメデータの読み込み\n", "anime_df = pd.read_csv('data/anime.csv')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
anime_idnamegenretypeepisodesratingmembers
032281Kimi no Na wa.Drama, Romance, School, SupernaturalMovie19.37200630
15114Fullmetal Alchemist: BrotherhoodAction, Adventure, Drama, Fantasy, Magic, Mili...TV649.26793665
228977Gintama°Action, Comedy, Historical, Parody, Samurai, S...TV519.25114262
39253Steins;GateSci-Fi, ThrillerTV249.17673572
49969Gintama'Action, Comedy, Historical, Parody, Samurai, S...TV519.16151266
\n", "
" ], "text/plain": [ " anime_id name \\\n", "0 32281 Kimi no Na wa. \n", "1 5114 Fullmetal Alchemist: Brotherhood \n", "2 28977 Gintama° \n", "3 9253 Steins;Gate \n", "4 9969 Gintama' \n", "\n", " genre type episodes rating \\\n", "0 Drama, Romance, School, Supernatural Movie 1 9.37 \n", "1 Action, Adventure, Drama, Fantasy, Magic, Mili... TV 64 9.26 \n", "2 Action, Comedy, Historical, Parody, Samurai, S... TV 51 9.25 \n", "3 Sci-Fi, Thriller TV 24 9.17 \n", "4 Action, Comedy, Historical, Parody, Samurai, S... TV 51 9.16 \n", "\n", " members \n", "0 200630 \n", "1 793665 \n", "2 114262 \n", "3 673572 \n", "4 151266 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 先頭の行を見てみる(引数を指定しないときは先頭から5行分表示される)\n", "anime_df.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10486, 7)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 何行何列か確認\n", "anime_df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## データの確認\n", "\n", "- type(劇場版、TVシリーズなどの分類)を把握する\n", "- このデータ中での順位を求める" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### typeを把握したい" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2308, 7)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# typeがMovieのアニメ(=劇場作品)の件数を求める\n", "movie_df = anime_df[anime_df['type']=='Movie']\n", "movie_df.shape" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
anime_idnamegenretypeepisodesratingmembers
032281Kimi no Na wa.Drama, Romance, School, SupernaturalMovie19.37200630
815335Gintama Movie: Kanketsu-hen - Yorozuya yo Eien...Action, Comedy, Historical, Parody, Samurai, S...Movie19.1072534
1128851Koe no KatachiDrama, School, ShounenMovie19.05102733
15199Sen to Chihiro no KamikakushiAdventure, Drama, SupernaturalMovie18.93466254
1812355Ookami Kodomo no Ame to YukiFantasy, Slice of LifeMovie18.84226193
\n", "
" ], "text/plain": [ " anime_id name \\\n", "0 32281 Kimi no Na wa. \n", "8 15335 Gintama Movie: Kanketsu-hen - Yorozuya yo Eien... \n", "11 28851 Koe no Katachi \n", "15 199 Sen to Chihiro no Kamikakushi \n", "18 12355 Ookami Kodomo no Ame to Yuki \n", "\n", " genre type episodes rating \\\n", "0 Drama, Romance, School, Supernatural Movie 1 9.37 \n", "8 Action, Comedy, Historical, Parody, Samurai, S... Movie 1 9.10 \n", "11 Drama, School, Shounen Movie 1 9.05 \n", "15 Adventure, Drama, Supernatural Movie 1 8.93 \n", "18 Fantasy, Slice of Life Movie 1 8.84 \n", "\n", " members \n", "0 200630 \n", "8 72534 \n", "11 102733 \n", "15 466254 \n", "18 226193 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movie_df.head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 True\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "Name: type, dtype: bool" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 条件がTrueとなる行が取り出された\n", "(anime_df['type']=='Movie').head()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# typeの値でグループ化\n", "type_grouped = anime_df.groupby('type')\n", "len(type_grouped)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "type\n", "Movie 2308\n", "Music 486\n", "ONA 644\n", "OVA 1955\n", "Special 1528\n", "TV 3542\n", "dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 各グループに何件含まれるか\n", "type_grouped.size()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# typeの値で分けた6グループそれぞれのアニメの件数を可視化\n", "ax = type_grouped.size().plot.bar()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ガールズ&パンツァーの順位は?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
anime_idnamegenretypeepisodesratingmembers
8018617Girls und Panzer der FilmMilitary, SchoolMovie18.5525641
90718619Girls und Panzer: Kore ga Hontou no Anzio-sen ...Military, SchoolOVA17.7616143
110014131Girls und PanzerMilitary, SchoolTV127.66104275
195532740Girls und Panzer der Film: Arisu War!Military, SchoolSpecial17.366548
250515811Girls und Panzer SpecialsMilitary, SchoolSpecial67.2015228
304818343Girls und Panzer: Fushou - Akiyama Yukari no S...Military, SchoolSpecial67.045867
332532741Girls und Panzer der Film: Fushou - Akiyama Yu...Military, SchoolSpecial26.941667
369233658Girls und Panzer: Kore ga Hontou no Anzio-sen ...Military, SchoolSpecial16.821114
400829853Girls und Panzer Heartful Tank Disc: Fushou - ...Military, SchoolSpecial26.751457
421532511Girls und Panzer: Nihon Senshadou Renmei NewsComedySpecial26.691134
443523137Girls und Panzer Heartful Tank Disc Picture DramaMilitary, SchoolSpecial46.632296
456616199Girls und Panzer: Shoukai Shimasu!Military, SchoolSpecial26.5911042
74542792Panzer DragoonAdventure, FantasyOVA13.471047
\n", "
" ], "text/plain": [ " anime_id name \\\n", "80 18617 Girls und Panzer der Film \n", "907 18619 Girls und Panzer: Kore ga Hontou no Anzio-sen ... \n", "1100 14131 Girls und Panzer \n", "1955 32740 Girls und Panzer der Film: Arisu War! \n", "2505 15811 Girls und Panzer Specials \n", "3048 18343 Girls und Panzer: Fushou - Akiyama Yukari no S... \n", "3325 32741 Girls und Panzer der Film: Fushou - Akiyama Yu... \n", "3692 33658 Girls und Panzer: Kore ga Hontou no Anzio-sen ... \n", "4008 29853 Girls und Panzer Heartful Tank Disc: Fushou - ... \n", "4215 32511 Girls und Panzer: Nihon Senshadou Renmei News \n", "4435 23137 Girls und Panzer Heartful Tank Disc Picture Drama \n", "4566 16199 Girls und Panzer: Shoukai Shimasu! \n", "7454 2792 Panzer Dragoon \n", "\n", " genre type episodes rating members \n", "80 Military, School Movie 1 8.55 25641 \n", "907 Military, School OVA 1 7.76 16143 \n", "1100 Military, School TV 12 7.66 104275 \n", "1955 Military, School Special 1 7.36 6548 \n", "2505 Military, School Special 6 7.20 15228 \n", "3048 Military, School Special 6 7.04 5867 \n", "3325 Military, School Special 2 6.94 1667 \n", "3692 Military, School Special 1 6.82 1114 \n", "4008 Military, School Special 2 6.75 1457 \n", "4215 Comedy Special 2 6.69 1134 \n", "4435 Military, School Special 4 6.63 2296 \n", "4566 Military, School Special 2 6.59 11042 \n", "7454 Adventure, Fantasy OVA 1 3.47 1047 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# nameにPanzerを含むデータはあるか調べる\n", "garupan_df = anime_df[anime_df['name'].str.contains('Panzer')]\n", "garupan_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "rating順に順位を出してみる" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
anime_idnamegenretypeepisodesratingmembers
984633662Taka no Tsume 8: Yoshida-kun no X-FilesComedy, ParodyMovie110.0013
978530120Spoon-hime no Swing KitchenAdventure, KidsTVUnknown9.6047
898523005Mogura no MotoroSlice of LifeMovie19.5062
032281Kimi no Na wa.Drama, Romance, School, SupernaturalMovie19.37200630
847433607Kahei no UmiHistoricalMovie19.3344
\n", "
" ], "text/plain": [ " anime_id name \\\n", "9846 33662 Taka no Tsume 8: Yoshida-kun no X-Files \n", "9785 30120 Spoon-hime no Swing Kitchen \n", "8985 23005 Mogura no Motoro \n", "0 32281 Kimi no Na wa. \n", "8474 33607 Kahei no Umi \n", "\n", " genre type episodes rating members \n", "9846 Comedy, Parody Movie 1 10.00 13 \n", "9785 Adventure, Kids TV Unknown 9.60 47 \n", "8985 Slice of Life Movie 1 9.50 62 \n", "0 Drama, Romance, School, Supernatural Movie 1 9.37 200630 \n", "8474 Historical Movie 1 9.33 44 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# ratingの降順にソートする\n", "sorted_df = anime_df.sort_values('rating', ascending=False)\n", "sorted_df.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
anime_idnamegenretypeepisodesratingmembers
033662Taka no Tsume 8: Yoshida-kun no X-FilesComedy, ParodyMovie110.0013
130120Spoon-hime no Swing KitchenAdventure, KidsTVUnknown9.6047
223005Mogura no MotoroSlice of LifeMovie19.5062
332281Kimi no Na wa.Drama, Romance, School, SupernaturalMovie19.37200630
433607Kahei no UmiHistoricalMovie19.3344
\n", "
" ], "text/plain": [ " anime_id name \\\n", "0 33662 Taka no Tsume 8: Yoshida-kun no X-Files \n", "1 30120 Spoon-hime no Swing Kitchen \n", "2 23005 Mogura no Motoro \n", "3 32281 Kimi no Na wa. \n", "4 33607 Kahei no Umi \n", "\n", " genre type episodes rating members \n", "0 Comedy, Parody Movie 1 10.00 13 \n", "1 Adventure, Kids TV Unknown 9.60 47 \n", "2 Slice of Life Movie 1 9.50 62 \n", "3 Drama, Romance, School, Supernatural Movie 1 9.37 200630 \n", "4 Historical Movie 1 9.33 44 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 行の添字(index)の振り直し\n", "rating_ascending_df = sorted_df.reset_index(drop=True)\n", "rating_ascending_df.head()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "101" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Girls und Panzer der Film(劇場版ガルパン)が何位か調べる\n", "# ratingの降順にソートしてから振り直したindexは0から始めるため、順位として扱うには+1する\n", "rating_ascending_df[rating_ascending_df['name']=='Girls und Panzer der Film'].index[0]+1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## まとめ\n", "\n", "- DataFrameは表\n", "- 行/列の指定や条件を使ってデータを抽出できる\n", "- groupbyで得たSeriesから棒グラフを作成\n", "- ソート&プロパティ(index)の組合せで順位の算出も容易" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 「pandasに扱えないデータはありません」(おそらく)by nikkie \n", "\n", "# ご清聴ありがとうございました。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }