どうもニコイチです。前回の記事では、データの統計量と可視化を通して、データがどんなものか「ざっくり」と理解を深めました。今回は、さらに分析を進めるために、データの中から特定の「データを選び出す」方法と、選んだデータがどんなものなのかを「詳しく見ていく」方法を学んでいきましょう!
今回の記事でも、引き続き「宿泊価格について_demo.csv」データを使っていきます。一緒に、データの奥深くまで探検していきましょう!
全編はこちらから
今回のテーマ:データを選んで、もっと深く知る
前回は、データ全体を対象に統計量を見たり、グラフを描いたりしましたね。でも、分析を進めていくと、「特定の項目のデータだけ見たいな」とか、「この項目のデータってどんな種類があるんだろう?」といった疑問が出てくるはずです。
今回の記事では、そんな疑問を解決するために、
- データの中から特定の列(カラム)を選ぶ方法
- 選んだデータがどんな種類を持っているかを確認する方法
- 選んだデータの基本的な統計量をもう一度確認する方法
- 選んだデータの分布をグラフで見てみる方法
- データの中にある「ちょっと変わったデータ(外れ値)」を見つけて対処する方法
- 文字のデータ(質的データ)の数を数えて、グラフで見る方法
を、実際にPythonを使いながら学んでいきます。
データの「ここだけ見たい!」を叶える:カラムの選択
データ分析の世界では、たくさんの情報が詰まった表(DataFrame(データフレーム)と呼びます)を扱うことがよくあります。DataFrameは、エクセルのシートのようなものだと思ってください。縦の列が「項目名」、横の行が「データ」を表しています。
分析したい内容に合わせて、このDataFrameの中から特定の列だけを取り出して見たい場合があります。例えば、「宿泊価格」の列だけを取り出して分析したい、といった具合です。
Pythonでカラムを選ぶ方法
Pythonで特定のカラムを選ぶには、DataFrameの名前の後に [‘カラム名’] と書きます。カラム名は、取り出したい項目の名前です。名前は「宿泊価格」のように文字列なので、 ‘ ‘ (シングルクォーテーション)または ” “(ダブルクォーテーション)で囲むのを忘れないようにしましょう。
import pandas as pd
# CSVファイルを読み込む
data = pd.read_csv('宿泊価格について_demo.csv')
# '宿泊価格' カラムだけを選ぶ
price_column = data['宿泊価格']
# 選んだカラムの中身を見てみる(最初の5行)
print(price_column.head())
DataFrameとSeriesって何が違うの?
ここで、ちょっと新しい言葉が出てきました。「Series(シリーズ)」です。DataFrameから1つのカラムだけを取り出すと、その結果はDataFrameではなく、Seriesという種類のデータになります。
DataFrameが横と縦に広がった2次元の表のようなものなのに対して、Seriesは1列だけの1次元データです。例えるなら、DataFrameがエクセルのシート全体だとすると、Seriesはその中の特定の列だけを切り取ったようなイメージです。
DataFrameとSeriesは似ていますが、使える機能が少し違う場合があります。もし「あれ?この機能使えないぞ?」と思ったら、データの種類(DataFrameなのかSeriesなのか)を確認してみると原因がわかることがあります。
データの種類を確認する方法
データの種類がDataFrameなのかSeriesなのかわからなくなってしまったときは、type() という関数を使うと確認できます。
# data のデータ型を確認
print(type(data))
# price_column のデータ型を確認
print(type(price_column))
実行すると、それぞれ <class ‘pandas.core.frame.DataFrame’> と <class ‘pandas.core.series.Series’> のように表示されるはずです。
複数のカラムを選ぶには?
「宿泊価格」だけでなく、「部屋タイプ」や「レビュー数」など、複数のカラムをまとめて選びたい場合は、カラム名を [ ] で囲んでリストのように指定します。
# '宿泊価格' と '部屋タイプ' カラムを選ぶ
selected_columns = data[['宿泊価格', '部屋タイプ']]
# 選んだ複数カラムの中身を見てみる(最初の5行)
print(selected_columns.head())
この場合は、複数のカラムを選んでいるので、結果は DataFrame のままになります。
データの「種類」をチェック!説明変数の確認
データを選んだら、次はそのデータがどんな種類を持っているのかを確認してみましょう。例えば、「部屋タイプ」のデータには、どんな種類の部屋があるのかを知りたいですよね。
値の一覧を表示する:unique()
あるカラムに含まれる全ての値を重複なく表示するには、.unique() という機能を使います。
# '部屋タイプ' カラムに含まれる値の種類を一覧表示
print(data['room_type'].unique())
実行すると、[‘Entire home/apt’ ‘Private room’ ‘Shared room’] のように表示されるはずです。これで、このデータには「Entire home/apt(まるまる貸切)」、「Private room(個室)」、「Shared room(シェアルーム)」の3種類の部屋タイプがあることがわかります。
値の種類の数を数える:nunique()
値の種類が何種類あるかを数えたい場合は、.nunique() を使います。
# '部屋タイプ' カラムに含まれる値の種類の数を表示
print(data['room_type'].nunique())
実行すると 3 と表示されます。
各値の登場回数を数える:value_counts()
それぞれの値が何回登場するかを数えたい場合は、.value_counts() を使います。
# '部屋タイプ' カラムの各値の登場回数を表示
print(data['room_type'].value_counts())
実行すると、それぞれの部屋タイプが何件ずつデータに含まれているかが表示されます。
基本統計量を「もう一度」確認
特定のカラムを選んだ後でも、そのデータの基本的な統計量を確認することができます。前回の記事で学んだ describe() 関数を使ってみましょう。
# '宿泊価格' カラムの基本統計量を表示
print(data['宿泊価格'].describe())
これで、「宿泊価格」の平均値や最大値、最小値などをもう一度確認できます。
データの「形」を見る:ヒストグラムの再登場
数値データの分布を見るのに便利なヒストグラムも、選んだカラムに対して描画できます。
import matplotlib.pyplot as plt
import seaborn as sns
# '宿泊価格' カラムのヒストグラムを描画
data['宿泊価格'].plot.hist(title='宿泊価格の分布')
plt.show()
これで、「宿泊価格」がどのような範囲に、どれくらいの頻度で分布しているのかを視覚的に確認できます。
ちょっと変わったヤツを見つける:外れ値の確認と削除
基本統計量を見てみると、宿泊価格には最小値が非常に小さい値や、最大値が非常に大きい値が含まれていることがあります。このような、他の多くのデータから大きく外れた値を「外れ値」と呼びます。
外れ値は、データの入力ミスや、特別な状況で発生したデータである可能性があります。分析の目的に応じて、外れ値をそのままにするか、削除したり、他の値に置き換えたりするなどの対応が必要になる場合があります。
外れ値の候補を見つける
まずは、宿泊価格の最小値付近と最大値付近のデータが何件あるか確認してみましょう。value_counts() で各価格の登場回数を数え、.sort_index() で価格の順に並べ替えて、.head() で最初の数件、.tail() で最後の数件を表示します。
# 宿泊価格が小さい順に表示
print(data['宿泊価格'].value_counts().sort_index().head())
# 宿泊価格が大きい順に表示
print(data['宿泊価格'].value_counts().sort_index().tail())
出力結果を見ると、非常に安い価格の物件や非常に高い価格の物件が少数存在することがわかります。
外れ値を削除する
今回は、例として、宿泊価格が極端に安い物件(例えば10ドル未満)を外れ値として削除してみましょう。特定の条件を満たすデータだけを抽出するには、以下のように記述します。
# 削除前のデータ数を確認
before_rows = data.shape[0]
print(before_rows)
# 宿泊価格が10ドル以上のデータだけを残す
data_filtered = data[data['宿泊価格'] >= 10]
# 削除後のデータ数を確認
after_rows = data_filtered.shape[0]
print(after_rows)
# 元のdataを更新 (必要に応じて)
data = data_filtered
data[‘宿泊価格’] >= 10 という条件式で、宿泊価格が10ドル以上のデータだけを抽出しています。
注意点: 外れ値の削除は、分析の目的やデータの性質をよく理解した上で行う必要があります。安易に外れ値を削除すると、貴重な情報が失われる可能性もあります。
文字データの数を数える:質的データの頻度分析
数値データだけでなく、文字データ(質的データ)の分析も重要です。「部屋タイプ」のように、いくつかのカテゴリに分類されるデータがどのような割合で存在するかを知りたい場合があります。
前述の value_counts() 関数を使うと、各カテゴリのデータの数を簡単に数えることができます。
# '部屋タイプ' ごとのデータ数を数える
room_type_counts = data['room_type'].value_counts()
print(room_type_counts)
質的データをグラフで見る:棒グラフ
質的データの分布を視覚的に確認するには、棒グラフが便利です。plot.bar() メソッドを使うと、簡単に棒グラフを作成できます。
# '部屋タイプ' ごとのデータ数の棒グラフを描画
room_type_counts.plot.bar(title='部屋タイプの頻度')
plt.xlabel('部屋タイプ')
plt.ylabel('件数')
plt.show()
棒グラフを見ることで、どの部屋タイプの物件が多いのかが一目でわかります。
初心者がつまずきやすいポイント
- カラム名のスペルミス: カラム名は大文字小文字も区別されます。スペルミスがあるとエラーになるので注意しましょう。
- クォーテーションの付け忘れ: カラム名を指定する際に、 ‘ ‘ や ” ” で囲むのを忘れないようにしましょう。
- DataFrameとSeriesの区別: どちらのデータ型なのかによって使える機能が異なる場合があります。type() 関数で確認する習慣をつけましょう。
- 外れ値の安易な削除: 外れ値は、本当に異常なデータなのか、それともデータの特徴なのかを慎重に判断してから対処しましょう。
- グラフのタイトルや軸ラベル: グラフを作成する際は、タイトルや軸ラベルを忘れずに記述し、誰が見てもわかるように心がけましょう。
まとめ
今回の記事では、データの中から特定のデータを選び出し、その内容を詳しく確認する方法を学びました。
- カラムの選択: data[‘カラム名’] で特定の列を抽出できる。
- データ型の確認: type(変数) でデータの種類(DataFrameかSeriesか)を確認できる。
- 説明変数の確認: unique(), nunique(), value_counts() でデータの種類や頻度を把握できる。
- 基本統計量の確認: describe() で数値データの要約統計量を確認できる。
- データの可視化: ヒストグラム (plot.hist()) で数値データの分布を、棒グラフ (plot.bar()) で質的データの分布を把握できる。
- 外れ値の扱い: データ分析において重要な検討事項。
これらの技術を使うことで、データセット全体だけでなく、特定の項目に焦点を当てて深く理解することができるようになります。
次回予告
次回の記事では、いよいよ「データの関係性」に迫ります!宿泊価格とレビュー数には関係があるのか?部屋タイプによって宿泊価格は違うのか?といった疑問を、相関分析という手法を使って解き明かしていきます。お楽しみに!
コメント