Pandas 49本かんたんノック！

Pandasの初心者向けに、Pandasの公式チュートリアルのユースケースを簡単な４９本のノック形式にしました。時間がある時にスマホで簡単に学習できます。
（正解から戻る時はブラウザの戻るボタンで戻ってください）
  
詳細な説明は下記の記事見てください。 本記事では正解のリンク先はあえてコマンドのみ記載し解説は最小限に絞っています。

https://qiita.com/DeepTama/items/983dcee3d522f4e9f07a

また、実際に動作させながら確認したい場合は下記のリンクからGoogleコラボ上で実行してください。

https://colab.research.google.com/drive/115kBAGUiCqPqWOt7sVP7xKrvIKLMod1y?usp=sharing

【第１問】 pandasを使うには? $\Rightarrow$ [正解](#1問目)
&nbsp;
【第2問】 タイタニック号の乗客データをDataFrame(df)で保存するには？　ただし、何人かの乗客について名前:Name（文字）、年齢:Age（整数）、性別:Sex（男性／女性）のデータがわかっています $\Rightarrow$ [正解](#2問目)
&nbsp;
【第3問】 テーブル(df)の年齢(Age)列のデータを扱うには？ $\Rightarrow$ [正解](#3問目)
&nbsp;
【第4問】 テーブル(df)の乗客の最大の年齢(Age)を知るには？ $\Rightarrow$ [正解](#4問目)
&nbsp;
【第5問】 テーブル(df)の数値データの基本的な統計を知るには？ $\Rightarrow$ [正解](#5問目)
&nbsp;
【第6問】 ネット上のCSVファイルで提供されているタイタニック号の乗客データ(../../titanic.csv)を分析するには？ $\Rightarrow$ [正解](#6問目)
&nbsp;
【第7問】 テーブル(df=titanic)の最初の8行を見るには？ $\Rightarrow$ [正解](#7問目)
&nbsp;
【第8問】 テーブル(df=titanic)をスプレッドシート(titanic.xlsx、シート名=passengers)として出力するには？ $\Rightarrow$ [正解](#8問目)
&nbsp;
【第9問】 テーブル(df=titanic)のテクニカルサマリーを知るには？ $\Rightarrow$ [正解](#9問目)
&nbsp;
【第10問】 テーブル(df=taitanic)の乗客の年齢(Age)を抽出するには？ $\Rightarrow$ [正解](#10問目)
&nbsp;
【第11問】 テーブル(df=taitanic)の乗客の年齢(Age)と性別(Sex)を抽出するには？ $\Rightarrow$ [正解](#11問目)
&nbsp;
【第12問】 テーブル(df=taitanic)で年齢(Age)が35歳以上の乗客を抽出するには？ $\Rightarrow$ [正解](#12問目)
&nbsp;
【第13問】 テーブル(df=taitanic)の客室クラス(Pclass)が2と3の乗客を抽出するには？  $\Rightarrow$ [正解](#13問目)
&nbsp;
【第14問】 テーブル(df=taitanic)の年齢(Age)がわかっている乗客データのみを扱うには？ $\Rightarrow$ [正解](#14問目)
&nbsp;
【第15問】 テーブル(df=taitanic)の年齢(Age)が35歳以上の乗客の名前(Name)を抽出するには？ $\Rightarrow$ [正解](#15問目)
&nbsp;
【第16問】 テーブル(df=taitanic)の10行目から25行目までと、3列目から5列目を抽出するには？  $\Rightarrow$ [正解](#16問目)
&nbsp;
【第17問】 テーブル(df=air_quality)を素早く視覚的に確認（ラインプロット）するには？  $\Rightarrow$ [正解](#17問目)
&nbsp;
【第18問】 テーブル(df=air_quality)のパリ(station_paris)のデータ列だけでプロットするには？ $\Rightarrow$ [正解](#18問目)
&nbsp;
【第19問】 テーブル(df=air_quality)のロンドン(station_london)とパリ(station_paris)で測定されたデータ(N0<sub>2</sub>)の値を視覚的(散布図)に比較するには？ $\Rightarrow$ [正解](#19問目)
&nbsp;
【第20問】 テーブル(df=air_quality)のそれぞれの列を別のサブプロットにするには？ $\Rightarrow$ [正解](#20問目)
&nbsp;
【第21問】 テーブル(df=air_quality)のできあがったプロットをさらにカスタマイズしたり、拡張したり、保存したりするには？ $\Rightarrow$ [正解](#21問目)
&nbsp;
【第22問】 テーブル(df=air_quality)のロンドン駅(station_london)のデータ( NO<sub>2</sub> 濃度)を mg/m<sup>3</sup> で新たな列(london_mg_per_cubic)で追加するには？ 
 (温度を 25℃、圧力を1013 hPaとすると、換算係数は1.882）   $\Rightarrow$ [正解](#22問目)
&nbsp;
【第23問】 テーブル(df=air_quality)のパリ駅(station_paris)とアントワープ駅(station_antwerp)の値の比率を調べて、その結果を新たな列(ratio_paris_antwerp)で追加するには？  $\Rightarrow$ [正解](#23問目)
&nbsp;
【第24問】 テーブル(df=air_quality)のデータカラムの名前を、openAQで使用される対応するステーション識別子に変更(station_antwerp -> BETR801,station_paris -> FR04014,station_london -> London Westminster)して新たなDataFrame(air_quality_renamed)を生成するには？　  $\Rightarrow$ [正解](#24問目)
&nbsp;
【第25問】 テーブル(df=taitanic)の乗客の平均の年齢(Age)を求めるには？ $\Rightarrow$ [正解](#25問目)
&nbsp;
【第26問】 テーブル(df=taitanic)の乗客の年齢(Age)とチケット料金(Fare)の中央値を知るには？  $\Rightarrow$ [正解](#26問目)
&nbsp;
【第27問】 テーブル(df=taitanic)の乗客の性別（Sex)の男性と女性の平均の年齢(Age)を知るには？  $\Rightarrow$ [正解](#27問目)
&nbsp;
【第28問】 テーブル(df=taitanic)の性別(Sex)とキャビンクラス(Pclass)の組み合わせごとに、航空券の平均の運賃価格(Fare)を知るには？ $\Rightarrow$ [正解](#28問目)
&nbsp;
【第29問】 テーブル(df=taitanic)のそれぞれのキャビンクラス(Pclass)の乗客数を知るには？ $\Rightarrow$ [正解](#29問目)
&nbsp;
【第30問】 テーブル(df=taitanic)のデータを乗客の年齢(Age)に応じてソートするには？ $\Rightarrow$ [正解](#30問目)
&nbsp;
【第31問】 テーブル(df=taitanic)のデータを、キャビンクラス(Pclass)と年齢(Age)に応じて降順に並べ替えるには？  $\Rightarrow$ [正解](#31問目)
&nbsp;
【第32問】 テーブル(df=no2_subset)の3つの観測所(location)が持っている値(Value)を隣り合った別の列にするには？  $\Rightarrow$ [正解](#32問目)
&nbsp;
【第33問】 テーブル(df=air_quality)の各観測所(location)における測定パラメータ(parameter)であるNO<sub>2</sub> と PM<sub>2.5</sub> の平均の濃度(value)を表形式で求めるには？ $\Rightarrow$ [正解](#33問目)
&nbsp;
【第34問】 テーブル(df=no2_pivoted)のすべての大気中のNO2測定値を1つのカラムに集めてno_2データフレームを作成するには（ロングフォーマット） ？ ただし、date.utcはid識別です。
$\Rightarrow$ [正解](#34問目)
&nbsp;
【第35問】 似たような構造を持つ2つのテーブル、NO<sub>2</sub>(air_quality_no2)と PM<sub>25</sub> (air_quality_pm25)の測定値を1つのテーブル(air_quality)にまとめるには? $\Rightarrow$ [正解](#35問目)
&nbsp;
【第36問】 ステーションのメタデータ・テーブル(stations_coord)で提供されるステーションの座標を、測定値テーブル(air_quality)の対応する行に追加するには？　両テーブルには共通して`location`という項目があります。 $\Rightarrow$ [正解](#36問目)
&nbsp;
【第37問】 パラメータメタデータテーブル(air_quality_parameters)で提供されるパラメータの完全な説明と名前を、測定値テーブル(air_quality)に追加するには？ 両テーブルには共通した項目はありませんが、パラメータメタデータテーブルのid列と測定値テーブルのparameter列とが対応しています。 $\Rightarrow$ [正解](#37問目)
&nbsp;
【第38問】 テーブル(df=air_quality)のdatetime列の日付を、プレーンテキストではなくdatetimeオブジェクトとして扱うには？ $\Rightarrow$ [正解](#38問目)
&nbsp;
【第39問】 テーブル(df=air_quality)に計測した月のみを含む新しい列(month)に追加するには？ なお、datetime列がdatetimeオブジェクトとして定義されています。$\Rightarrow$ [正解](#39問目)
&nbsp;
【第40問】 テーブル(df=air_quality)の各測定場所(location)のdatetime列の各曜日の平均のNO2濃度(value)を知るには？ $\Rightarrow$ [正解](#40問目)
&nbsp;
【第41問】 テーブル(df=air_quality)のすべての観測所の時系列をまとめて、日中の典型的なNO2濃度(value)のパターンをプロットするには？。言い換えれば1日の各時間の平均値はどのくらいかを見るには？  $\Rightarrow$ [正解](#41問目)
&nbsp;
【第42問】 テーブル(df=no_2)の2019年5月20日から2019年5月21日までの各観測所のNO2値をプロットするには？ ただし、no_2テーブルにはdatetimeインデックスが適用済みです。 $\Rightarrow$ [正解](#42問目)
&nbsp;
【第43問】 テーブル(df=no_2)で現在の1時間ごとの時系列値を各観測所の月間最大値に集約して、新たにテーブル(df=monthly_max)を生成するには？ ただし、no_2テーブルにはdatetimeインデックスが適用済みです。 
 $\Rightarrow$ [正解](#43問目)
&nbsp;
【第44問】 テーブル(df=no_2)各観測所のNO<sub>2</sub>濃度の日平均値をプロットするには？ ただし、no_2テーブルにはdatetimeインデックスが適用済みです。 $\Rightarrow$ [正解](#44問目)
&nbsp;
【第45問】 テーブル(df=taitanic)の名前(Name)の文字をすべて小文字にするには？  $\Rightarrow$ [正解](#45問目)
&nbsp;
【第46問】 テーブル(df=taitanic)の名前(Name)のカンマの前の部分を抽出して、乗客の姓を含む新しい列(Surname)を作成するには？  $\Rightarrow$ [正解](#46問目)
&nbsp;
【第47問】 テーブル(df=taitanic)でタイタニック号に乗船していた名前(Name)から伯爵夫人(Countess)の乗客データを抽出するには？ $\Rightarrow$ [正解](#47問目)
&nbsp;
【第48問】 テーブル(df=taitanic)のタイタニックの乗客の中で、最も長い名前(Name)を持つ人を抽出するには？ $\Rightarrow$ [正解](#48問目)
&nbsp;
【第49問】 テーブル(df=taitanic)の性別(sex)で、男性(male)の値を「M」に、女性(female)の値を「F」に置き換えるには？ $\Rightarrow$ [正解](#49問目)



#### <font color=royalblue>解答</font>
#### 1問目
``` python

import pandas as pd

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 2問目
```python

df = pd.DataFrame(
     {
         "Name": [
             "Braund, Mr. Owen Harris",
             "Allen, Mr. William Henry",
             "Bonnell, Miss. Elizabeth",
         ],
         "Age": [22, 35, 58],
         "Sex": ["male", "male", "female"],
     }
 )

```

::: note
行列は縦ベクトルが横に並んだものと覚えておくと上記の記載がイメージしやすいと思います(Pandasでは行列はDataFrame（テーブル）、列はSeriesと呼ぶのでSeriesが横に並んだものになります）。まず列名（カラム名）を記載してその要素を記載します。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 3問目
```python

 df["Age"]

```
::: note
テーブルから１つのカラムを選んでいるので結果はSeriesになります。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 4問目
```python

df["Age"].max()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 5問目
```python

df.describe()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 6問目
```python

# Githubに公開されているデータを直接読み込む
url = 'https://raw.githubusercontent.com/pandas-dev/pandas/master/doc/data/titanic.csv'
titanic = pd.read_csv(url)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 7問目
```python

titanic.head(8)

```

::: note
後ろから見るにはtail()メソッドを使います。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 8問目
```python

titanic.to_excel("titanic.xlsx", sheet_name="passengers", index=False)

```
::: note
pandasが各カラムのデータタイプをどのように解釈したかを確認するには、dtypes属性を使います。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 9問目
```python

titanic.info()

```
::: note
列名、not-nullの数、dtype等が表示されます。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 10問目
```python

ages = titanic["Age"]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 11問目
```python

age_sex = titanic[["Age", "Sex"]]

```

::: note
内側の括弧$[\hspace{3mm} ]$の中に選択する列名をリストします。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 12問目
```python

above_35 = titanic[titanic["Age"] > 35]

```

::: note
括弧$[\hspace{3mm} ]$に条件をしているすることで選択する行のブーリアン値(TrueまたはFalse)のリストが生成され $True$ の行が選択されるイメージです。
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 13問目
```python

class_23 = titanic[titanic["Pclass"].isin([2, 3])]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 14問目
```python

age_no_na = titanic[titanic["Age"].notna()]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 15問目
```python

adult_names = titanic.loc[titanic["Age"] > 35, "Name"]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 16問目
```python

titanic.iloc[9:25, 2:5]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 17問目
```python

air_quality.plot()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 18問目
```python

air_quality["station_paris"].plot()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 19問目
```python

air_quality.plot.scatter(x="station_london", y="station_paris", alpha=0.5)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 20問目
```python

axs = air_quality.plot.area(figsize=(12, 4), subplots=True)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 21問目
```python

import matplotlib.pyplot as plt            # matplotlibをインポート
fig, axs = plt.subplots(figsize=(12, 4))   
air_quality.plot.area(ax=axs)               # matplot上のオブジェクト上に描画
axs.set_ylabel("NO$_2$ concentration")      # y軸のラベルを設定、その他さまざまなmatplotlibの機能が使えます
fig.savefig("no2_concentrations.png")       # matplotlibの機能を使って画像の保存、DIR直下にpngファイルが生成されます

```

::: note
y軸のラベル設定に使用されている`$_2$`の`S`で囲まれた文字列はLatex表記です（今回の場合は下付きの文字で数字の２）。複雑な数式等を記載することが可能です。詳細は下記の記事も参考にしてください。
[これで完璧 Qiitaでの数式記法（統計学対応）](https://qiita.com/DeepTama/items/85470a66972432e14224)
:::


&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 22問目
```python

air_quality["london_mg_per_cubic"] = air_quality["station_london"] * 1.882

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 23問目
```python

air_quality["ratio_paris_antwerp"] = (
    air_quality["station_paris"] / air_quality["station_antwerp"]
)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 24問目
```python

air_quality_renamed = air_quality.rename(
    columns={
        "station_antwerp": "BETR801",
        "station_paris": "FR04014",
        "station_london": "London Westminster",
    }
)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 25問目
```python

titanic["Age"].mean()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 26問目
```python

titanic[["Age", "Fare"]].median()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 27問目
```python

titanic[["Sex", "Age"]].groupby("Sex").mean()

```

::: note
`titanic.groupby("Sex")["Age"].mean()` でも結果は同じです
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 28問目
```python

titanic.groupby(["Sex", "Pclass"])["Fare"].mean()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 29問目
```python

titanic["Pclass"].value_counts()

```

::: note
`titanic.groupby("Pclass")["Pclass"].count()` でも結果は同じです
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 30問目
```python

titanic.sort_values(by="Age")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 31問目
```python

titanic.sort_values(by=['Pclass', 'Age'], ascending=False)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 32問目
```python

no2_subset.pivot(columns="location", values="value")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 33問目
```python

air_quality.pivot_table(
    values="value", index="location", columns="parameter", aggfunc="mean"
)

```

::: note
[Pivotテーブルの詳細はこちらを参照してください](https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html#reshaping-pivot)
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 34問目
```python

no_2 = no2_pivoted.melt(id_vars="date.utc")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 35問目
```python

air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 36問目
```python

air_quality = pd.merge(air_quality, stations_coord, how="left", on="location")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 37問目
```python

air_quality = pd.merge(air_quality, air_quality_parameters,
                      how='left', left_on='parameter', right_on='id')

```

::: note
[SQLとの比較はこちらを参照してください](https://pandas.pydata.org/pandas-docs/stable/getting_started/comparison/comparison_with_sql.html#comparison-with-sql)
:::

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 38問目
```python

air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 39問目
```python

air_quality["month"] = air_quality["datetime"].dt.month

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 40問目
```python

air_quality.groupby(
    [air_quality["datetime"].dt.weekday, "location"])["value"].mean()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 41問目
```python

fig, axs = plt.subplots(figsize=(12, 4))
air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean().plot(
    kind='bar', rot=0, ax=axs
)
plt.xlabel("Hour of the day")  # custom x label using matplotlib
plt.ylabel("$NO_2 (µg/m^3)$")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 42問目
```python

no_2["2019-05-20":"2019-05-21"].plot()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 43問目
```python

monthly_max = no_2.resample("M").max()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 44問目
```python

no_2.resample("D").mean().plot(style="-o", figsize=(10, 5))

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 45問目
```python

titanic["Name"].str.lower()

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 46問目
```python

titanic["Surname"] = titanic["Name"].str.split(",").str.get(0)

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 47問目
```python

titanic["Name"].str.contains("Countess")

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 48問目
```python

titanic.loc[titanic["Name"].str.len().idxmax(), "Name"]

```

&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

#### 49問目
```python

titanic["Sex_short"] = titanic["Sex"].replace({"male": "M", "female": "F"})

```

&nbsp;
&nbsp;

#### <font color=royalblue>おわりに </font>
<font color=royalblue>Pandasチュートリアルをはじめ、データサイエンスの各種チュートリアルをGoogleコラボで動かしながら気軽に学習できるコンテンツも公開していますのでご活用ください。</font>

https://qiita.com/DeepTama/items/25eccdf154988b93a570