{
"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",
" anime_id | \n",
" name | \n",
" genre | \n",
" type | \n",
" episodes | \n",
" rating | \n",
" members | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 32281 | \n",
" Kimi no Na wa. | \n",
" Drama, Romance, School, Supernatural | \n",
" Movie | \n",
" 1 | \n",
" 9.37 | \n",
" 200630 | \n",
"
\n",
" \n",
" 1 | \n",
" 5114 | \n",
" Fullmetal Alchemist: Brotherhood | \n",
" Action, Adventure, Drama, Fantasy, Magic, Mili... | \n",
" TV | \n",
" 64 | \n",
" 9.26 | \n",
" 793665 | \n",
"
\n",
" \n",
" 2 | \n",
" 28977 | \n",
" Gintama° | \n",
" Action, Comedy, Historical, Parody, Samurai, S... | \n",
" TV | \n",
" 51 | \n",
" 9.25 | \n",
" 114262 | \n",
"
\n",
" \n",
" 3 | \n",
" 9253 | \n",
" Steins;Gate | \n",
" Sci-Fi, Thriller | \n",
" TV | \n",
" 24 | \n",
" 9.17 | \n",
" 673572 | \n",
"
\n",
" \n",
" 4 | \n",
" 9969 | \n",
" Gintama' | \n",
" Action, Comedy, Historical, Parody, Samurai, S... | \n",
" TV | \n",
" 51 | \n",
" 9.16 | \n",
" 151266 | \n",
"
\n",
" \n",
"
\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",
" anime_id | \n",
" name | \n",
" genre | \n",
" type | \n",
" episodes | \n",
" rating | \n",
" members | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 32281 | \n",
" Kimi no Na wa. | \n",
" Drama, Romance, School, Supernatural | \n",
" Movie | \n",
" 1 | \n",
" 9.37 | \n",
" 200630 | \n",
"
\n",
" \n",
" 8 | \n",
" 15335 | \n",
" Gintama Movie: Kanketsu-hen - Yorozuya yo Eien... | \n",
" Action, Comedy, Historical, Parody, Samurai, S... | \n",
" Movie | \n",
" 1 | \n",
" 9.10 | \n",
" 72534 | \n",
"
\n",
" \n",
" 11 | \n",
" 28851 | \n",
" Koe no Katachi | \n",
" Drama, School, Shounen | \n",
" Movie | \n",
" 1 | \n",
" 9.05 | \n",
" 102733 | \n",
"
\n",
" \n",
" 15 | \n",
" 199 | \n",
" Sen to Chihiro no Kamikakushi | \n",
" Adventure, Drama, Supernatural | \n",
" Movie | \n",
" 1 | \n",
" 8.93 | \n",
" 466254 | \n",
"
\n",
" \n",
" 18 | \n",
" 12355 | \n",
" Ookami Kodomo no Ame to Yuki | \n",
" Fantasy, Slice of Life | \n",
" Movie | \n",
" 1 | \n",
" 8.84 | \n",
" 226193 | \n",
"
\n",
" \n",
"
\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",
" anime_id | \n",
" name | \n",
" genre | \n",
" type | \n",
" episodes | \n",
" rating | \n",
" members | \n",
"
\n",
" \n",
" \n",
" \n",
" 80 | \n",
" 18617 | \n",
" Girls und Panzer der Film | \n",
" Military, School | \n",
" Movie | \n",
" 1 | \n",
" 8.55 | \n",
" 25641 | \n",
"
\n",
" \n",
" 907 | \n",
" 18619 | \n",
" Girls und Panzer: Kore ga Hontou no Anzio-sen ... | \n",
" Military, School | \n",
" OVA | \n",
" 1 | \n",
" 7.76 | \n",
" 16143 | \n",
"
\n",
" \n",
" 1100 | \n",
" 14131 | \n",
" Girls und Panzer | \n",
" Military, School | \n",
" TV | \n",
" 12 | \n",
" 7.66 | \n",
" 104275 | \n",
"
\n",
" \n",
" 1955 | \n",
" 32740 | \n",
" Girls und Panzer der Film: Arisu War! | \n",
" Military, School | \n",
" Special | \n",
" 1 | \n",
" 7.36 | \n",
" 6548 | \n",
"
\n",
" \n",
" 2505 | \n",
" 15811 | \n",
" Girls und Panzer Specials | \n",
" Military, School | \n",
" Special | \n",
" 6 | \n",
" 7.20 | \n",
" 15228 | \n",
"
\n",
" \n",
" 3048 | \n",
" 18343 | \n",
" Girls und Panzer: Fushou - Akiyama Yukari no S... | \n",
" Military, School | \n",
" Special | \n",
" 6 | \n",
" 7.04 | \n",
" 5867 | \n",
"
\n",
" \n",
" 3325 | \n",
" 32741 | \n",
" Girls und Panzer der Film: Fushou - Akiyama Yu... | \n",
" Military, School | \n",
" Special | \n",
" 2 | \n",
" 6.94 | \n",
" 1667 | \n",
"
\n",
" \n",
" 3692 | \n",
" 33658 | \n",
" Girls und Panzer: Kore ga Hontou no Anzio-sen ... | \n",
" Military, School | \n",
" Special | \n",
" 1 | \n",
" 6.82 | \n",
" 1114 | \n",
"
\n",
" \n",
" 4008 | \n",
" 29853 | \n",
" Girls und Panzer Heartful Tank Disc: Fushou - ... | \n",
" Military, School | \n",
" Special | \n",
" 2 | \n",
" 6.75 | \n",
" 1457 | \n",
"
\n",
" \n",
" 4215 | \n",
" 32511 | \n",
" Girls und Panzer: Nihon Senshadou Renmei News | \n",
" Comedy | \n",
" Special | \n",
" 2 | \n",
" 6.69 | \n",
" 1134 | \n",
"
\n",
" \n",
" 4435 | \n",
" 23137 | \n",
" Girls und Panzer Heartful Tank Disc Picture Drama | \n",
" Military, School | \n",
" Special | \n",
" 4 | \n",
" 6.63 | \n",
" 2296 | \n",
"
\n",
" \n",
" 4566 | \n",
" 16199 | \n",
" Girls und Panzer: Shoukai Shimasu! | \n",
" Military, School | \n",
" Special | \n",
" 2 | \n",
" 6.59 | \n",
" 11042 | \n",
"
\n",
" \n",
" 7454 | \n",
" 2792 | \n",
" Panzer Dragoon | \n",
" Adventure, Fantasy | \n",
" OVA | \n",
" 1 | \n",
" 3.47 | \n",
" 1047 | \n",
"
\n",
" \n",
"
\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",
" anime_id | \n",
" name | \n",
" genre | \n",
" type | \n",
" episodes | \n",
" rating | \n",
" members | \n",
"
\n",
" \n",
" \n",
" \n",
" 9846 | \n",
" 33662 | \n",
" Taka no Tsume 8: Yoshida-kun no X-Files | \n",
" Comedy, Parody | \n",
" Movie | \n",
" 1 | \n",
" 10.00 | \n",
" 13 | \n",
"
\n",
" \n",
" 9785 | \n",
" 30120 | \n",
" Spoon-hime no Swing Kitchen | \n",
" Adventure, Kids | \n",
" TV | \n",
" Unknown | \n",
" 9.60 | \n",
" 47 | \n",
"
\n",
" \n",
" 8985 | \n",
" 23005 | \n",
" Mogura no Motoro | \n",
" Slice of Life | \n",
" Movie | \n",
" 1 | \n",
" 9.50 | \n",
" 62 | \n",
"
\n",
" \n",
" 0 | \n",
" 32281 | \n",
" Kimi no Na wa. | \n",
" Drama, Romance, School, Supernatural | \n",
" Movie | \n",
" 1 | \n",
" 9.37 | \n",
" 200630 | \n",
"
\n",
" \n",
" 8474 | \n",
" 33607 | \n",
" Kahei no Umi | \n",
" Historical | \n",
" Movie | \n",
" 1 | \n",
" 9.33 | \n",
" 44 | \n",
"
\n",
" \n",
"
\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",
" anime_id | \n",
" name | \n",
" genre | \n",
" type | \n",
" episodes | \n",
" rating | \n",
" members | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 33662 | \n",
" Taka no Tsume 8: Yoshida-kun no X-Files | \n",
" Comedy, Parody | \n",
" Movie | \n",
" 1 | \n",
" 10.00 | \n",
" 13 | \n",
"
\n",
" \n",
" 1 | \n",
" 30120 | \n",
" Spoon-hime no Swing Kitchen | \n",
" Adventure, Kids | \n",
" TV | \n",
" Unknown | \n",
" 9.60 | \n",
" 47 | \n",
"
\n",
" \n",
" 2 | \n",
" 23005 | \n",
" Mogura no Motoro | \n",
" Slice of Life | \n",
" Movie | \n",
" 1 | \n",
" 9.50 | \n",
" 62 | \n",
"
\n",
" \n",
" 3 | \n",
" 32281 | \n",
" Kimi no Na wa. | \n",
" Drama, Romance, School, Supernatural | \n",
" Movie | \n",
" 1 | \n",
" 9.37 | \n",
" 200630 | \n",
"
\n",
" \n",
" 4 | \n",
" 33607 | \n",
" Kahei no Umi | \n",
" Historical | \n",
" Movie | \n",
" 1 | \n",
" 9.33 | \n",
" 44 | \n",
"
\n",
" \n",
"
\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
}