#!/usr/bin/env python # coding: utf-8 # # pandas vor!(デモ) # # みんなのPython勉強会#32 (2018/02/07) # # nikkie # ## 環境構築 # # venvで構築 # # - `pip install pandas jupyter` # - 図を描画するため追加 `pip install matplotlib` # ## データの読み込み # In[1]: import matplotlib.pyplot as plt import numpy as np import pandas as pd get_ipython().run_line_magic('matplotlib', 'inline') # 扱うデータについて # # 以下のリポジトリのデータ(anime.csv)をPCに保存してpandasで触ってみました。 # # https://github.com/practical-jupyter/sample-data # - anime_id:内部的なID # - name:作品名 # - genre:ジャンル(複数入力されている) # - type:分類(TV、映画など) # - episodes:話数 # - rating:評価値(0〜10。小数値) # - members:評価者数 # In[2]: # ┣(このjupyter notebook) # ┗data/ # ┗anime.csv anime_csv_path = 'data/anime.csv' # In[3]: # アニメデータの読み込み anime_df = pd.read_csv('data/anime.csv') # In[4]: # 先頭の行を見てみる(引数を指定しないときは先頭から5行分表示される) anime_df.head() # In[5]: # 何行何列か確認 anime_df.shape # ## データの確認 # # - type(劇場版、TVシリーズなどの分類)を把握する # - このデータ中での順位を求める # ### typeを把握したい # In[6]: # typeがMovieのアニメ(=劇場作品)の件数を求める movie_df = anime_df[anime_df['type']=='Movie'] movie_df.shape # In[7]: movie_df.head() # In[8]: # 条件がTrueとなる行が取り出された (anime_df['type']=='Movie').head() # In[9]: # typeの値でグループ化 type_grouped = anime_df.groupby('type') len(type_grouped) # In[10]: # 各グループに何件含まれるか type_grouped.size() # In[11]: # typeの値で分けた6グループそれぞれのアニメの件数を可視化 ax = type_grouped.size().plot.bar() plt.show() # ### ガールズ&パンツァーの順位は? # In[12]: # nameにPanzerを含むデータはあるか調べる garupan_df = anime_df[anime_df['name'].str.contains('Panzer')] garupan_df # rating順に順位を出してみる # In[13]: # ratingの降順にソートする sorted_df = anime_df.sort_values('rating', ascending=False) sorted_df.head() # In[14]: # 行の添字(index)の振り直し rating_ascending_df = sorted_df.reset_index(drop=True) rating_ascending_df.head() # In[15]: # Girls und Panzer der Film(劇場版ガルパン)が何位か調べる # ratingの降順にソートしてから振り直したindexは0から始めるため、順位として扱うには+1する rating_ascending_df[rating_ascending_df['name']=='Girls und Panzer der Film'].index[0]+1 # ## まとめ # # - DataFrameは表 # - 行/列の指定や条件を使ってデータを抽出できる # - groupbyで得たSeriesから棒グラフを作成 # - ソート&プロパティ(index)の組合せで順位の算出も容易 # # 「pandasに扱えないデータはありません」(おそらく)by nikkie # # # ご清聴ありがとうございました。