Pythonのpandasを使ったデータ分析をしてみよう!
こんにちは!今日はPythonの人気ライブラリ「Pandas」について、実際のデータを使いながら楽しく学んでいきましょう。データ分析の世界へようこそ!Pandasは、Pythonでデータ分析を行うための強力なツールであり、エクセルのような表形式のデータを簡単に扱えるのが特徴です。まずは、Pandasをインポートしましょう。
import pandas as pd
さて、今回は架空の販売データを使って練習します。以下の内容でsales_data.csv
というファイルを作成してください。
date,product,category,price,quantity,sales,customer_id
2024-01-01,ノートPC,電子機器,80000,2,160000,C001
2024-01-02,コーヒーメーカー,家電,15000,3,45000,C002
2024-01-03,スニーカー,衣料品,8000,5,40000,C003
2024-01-04,書籍,書籍・文具,1200,10,12000,C004
2024-01-05,スマートフォン,電子機器,60000,1,60000,C005
2024-01-06,テレビ,家電,120000,1,120000,C006
2024-01-07,Tシャツ,衣料品,2000,8,16000,C007
さて、作成したデータを読み込んでみましょう。
df = pd.read_csv('sales_data.csv')
print(df.head())
このコードを実行すると、以下のような出力が得られるはずです。
date product category price quantity sales customer_id
0 2024-01-01 ノートPC 電子機器 80000 2 160000 C001
1 2024-01-02 コーヒーメーカー 家電 15000 3 45000 C002
2 2024-01-03 スニーカー 衣料品 8000 5 40000 C003
3 2024-01-04 書籍 書籍・文具 1200 10 12000 C004
4 2024-01-05 スマートフォン 電子機器 60000 1 60000 C005
データの概要を知りたいときは、こんな方法があります。
print(df.info())
print(df.describe())
info()
はデータの基本情報を、describe()
は数値データの統計情報を教えてくれます。便利ですね!特定の条件でデータを絞り込みたいときは、こうします。
high_sales = df[df['sales'] > 100000]
print(high_sales)
これで、売上が100,000円を超える行だけを取り出せます。データをグループ化して集計するのも簡単です。
grouped = df.groupby('category')['sales'].sum()
print(grouped)
カテゴリーごとの売上合計が分かりますね。Pandasを使えば、簡単にグラフも描けちゃいます。
import matplotlib.pyplot as plt
grouped.plot(kind='bar')
plt.title('カテゴリー別売上')
plt.xlabel('カテゴリー')
plt.ylabel('売上')
plt.show()
これで、カテゴリー別の売上棒グラフが表示されます。日付データも簡単に扱えます。
df['date'] = pd.to_datetime(df['date'])
daily_sales = df.groupby('date')['sales'].sum()
print(daily_sales)
daily_sales.plot(kind='line')
plt.title('日別売上推移')
plt.xlabel('日付')
plt.ylabel('売上')
plt.show()
これで、日別の売上推移がわかりやすくなりました。各商品の平均単価を計算してみましょう。
df['unit_price'] = df['sales'] / df['quantity']
avg_unit_price = df.groupby('product')['unit_price'].mean().sort_values(ascending=False)
print(avg_unit_price)
これで、商品ごとの平均単価がわかります。実際のデータ分析では、複数のソースからデータを結合することがよくあります。ここでは、先ほどの販売データに顧客情報を追加してみましょう。まず、customer_data.csv
というファイルを作成し、以下の内容を入力してください。
customer_id,name,age,gender
C001,佐藤太郎,35,男性
C002,鈴木花子,28,女性
C003,田中一郎,42,男性
C004,山田優子,31,女性
C005,伊藤健太,39,男性
C006,中村美咲,45,女性
C007,小林翔太,33,男性
では、この顧客データと先ほどの販売データを結合してみましょう。
# 販売データの読み込み
sales_df = pd.read_csv('sales_data.csv')
# 顧客データの読み込み
customer_df = pd.read_csv('customer_data.csv')
# データの結合
merged_df = pd.merge(sales_df, customer_df, on='customer_id')
print(merged_df.head())
この結果、以下のような出力が得られるはずです。
date product category price quantity sales customer_id name age gender
0 2024-01-01 ノートPC 電子機器 80000 2 160000 C001 佐藤太郎 35 男性
1 2024-01-02 コーヒーメーカー 家電 15000 3 45000 C002 鈴木花子 28 女性
2 2024-01-03 スニーカー 衣料品 8000 5 40000 C003 田中一郎 42 男性
3 2024-01-04 書籍 書籍・文具 1200 10 12000 C004 山田優子 31 女性
4 2024-01-05 スマートフォン 電子機器 60000 1 60000 C005 伊藤健太 39 男性
これで、販売データと顧客情報が一つのデータフレームに結合されました。この結合されたデータを使って、さらに詳細な分析ができるようになりました。例えば、年齢層別の売上を集計してみましょう。
# 年齢層を定義する関数
def age_group(age):
if age < 30:
return '20代'
elif age < 40:
return '30代'
else:
return '40代以上'
# 年齢層カラムを追加
merged_df['age_group'] = merged_df['age'].apply(age_group)
# 年齢層別の売上集計
age_sales = merged_df.groupby('age_group')['sales'].sum().sort_values(ascending=False)
print(age_sales)
# グラフ化
age_sales.plot(kind='bar')
plt.title('年齢層別売上')
plt.xlabel('年齢層')
plt.ylabel('売上')
plt.show()
このコードを実行すると、年齢層別の売上が表示され、さらにグラフも生成されます。このように、Pandasを使えば複数のデータソースを簡単に結合し、より深い分析が可能になります。今回は販売データと顧客データを結合しましたが、実際のビジネスシーンでは、さらに多くのデータソースを組み合わせることがあります。例えば、商品マスターデータ(商品の詳細情報)、店舗データ(店舗の場所や規模)、キャンペーンデータ(実施中のプロモーション情報)などを追加で結合することで、より多角的な分析が可能になります。
データの結合は、ビジネスインサイトを得るための重要なステップです。様々なデータを組み合わせることで、単一のデータセットからは見えなかった傾向や関係性を発見できる可能性があります。Pandasの結合機能を使いこなすことで、データ分析の幅が大きく広がります。ぜひ、自分のプロジェクトでも積極的にデータの結合を試してみてください!
いかがでしたか?実際のデータを使ってPandasの基本的な機能を試してみました。Pandasを使えば、データ分析がぐっと楽しくなりますよね。今回紹介した機能はほんの一部です。どんどん使いこなして、データの世界を探検してくださいね!次回は、もっと高度なPandasの使い方や、大規模なデータセットの扱い方について紹介します。お楽しみに!皆さんも、このサンプルデータを使って色々な分析を試してみてください。新しい発見があるかもしれませんよ!質問があればいつでも聞いてくださいね。一緒にPandasマスターを目指しましょう!