はじめに
「データ分析って難しそう...」
「Excelでちまちま集計してるけど、もっと楽な方法ないの?」
実は、Pythonを使えば、今までExcelで何時間もかけてた集計作業が数分で終わっちゃうんです。しかも、めちゃくちゃ簡単!
今回は「データ分析初心者」向けに、Pythonでできるデータ分析の基本を紹介します。プログラミング経験があまりなくても大丈夫です!
そもそもデータ分析って何?
データから「へー」という気づきを見つけることです。
例えば:
- 「売上データを見たら、火曜日が一番売れてた」
- 「アンケート結果で、20代の満足度が低いことがわかった」
- 「アクセスログから、スマホユーザーが8割だった」
こういう「なるほど」を数字から見つけるのがデータ分析です。
必要なツール
1. Python本体
# Pythonインストール(Macの場合)
brew install python
# Windowsの場合は公式サイトからダウンロード
# https://www.python.org/downloads/
2. 必要なライブラリ
# まとめてインストール
pip install pandas matplotlib seaborn jupyter
# または
pip install numpy pandas matplotlib seaborn jupyter notebook
何に使うか:
- pandas: Excelみたいな表データの操作
- matplotlib: グラフ作成
- seaborn: きれいなグラフ作成
- jupyter: ブラウザで実行できる開発環境
実際にデータ分析してみよう
1. CSVファイルを読み込む
例: 売上データのCSVファイルがあるとします
import pandas as pd
# CSVファイルを読み込み(Excelと同じ感覚)
sales_data = pd.read_csv('sales.csv')
# 最初の5行を表示
print(sales_data.head())
# データの概要を確認
print(sales_data.info())
何が表示されるか:
date product amount price
0 2024-01-01 商品A 5 1000
1 2024-01-01 商品B 3 1500
2 2024-01-02 商品A 8 1000
...
2. 基本的な集計をしてみる
# 売上合計を計算
total_sales = sales_data['amount'].sum()
print(f'総売上個数: {total_sales}個')
# 商品別の売上
product_sales = sales_data.groupby('product')['amount'].sum()
print(product_sales)
# 日別の売上
daily_sales = sales_data.groupby('date')['amount'].sum()
print(daily_sales)
# 売上の統計情報
print(sales_data['amount'].describe())
結果:
商品A 150個
商品B 89個
商品C 67個
2024-01-01 16個
2024-01-02 23個
2024-01-03 18個
3. グラフを作ってみる
棒グラフで商品別売上を可視化:
import matplotlib.pyplot as plt
# 日本語フォント設定(文字化け防止)
plt.rcParams['font.family'] = 'DejaVu Sans'
# 商品別売上の棒グラフ
product_sales = sales_data.groupby('product')['amount'].sum()
product_sales.plot(kind='bar')
plt.title('商品別売上')
plt.xlabel('商品')
plt.ylabel('売上個数')
plt.show()
線グラフで日別売上の推移:
# 日別売上の線グラフ
daily_sales = sales_data.groupby('date')['amount'].sum()
daily_sales.plot(kind='line', marker='o')
plt.title('日別売上推移')
plt.xlabel('日付')
plt.ylabel('売上個数')
plt.xticks(rotation=45) # 日付を斜めに表示
plt.tight_layout() # レイアウト調整
plt.show()
もう少し高度な分析
1. 相関関係を調べる
「価格と売上個数に関係はある?」:
# 相関係数を計算
correlation = sales_data['price'].corr(sales_data['amount'])
print(f'価格と売上の相関: {correlation:.2f}')
# 散布図で可視化
plt.scatter(sales_data['price'], sales_data['amount'])
plt.xlabel('価格')
plt.ylabel('売上個数')
plt.title('価格と売上の関係')
plt.show()
相関係数の読み方:
- 1に近い: 正の相関(価格が高いと売上も多い)
- 0に近い: 相関なし
- -1に近い: 負の相関(価格が高いと売上が少ない)
2. データのフィルタリング
# 高額商品(1500円以上)だけを抽出
expensive_products = sales_data[sales_data['price'] >= 1500]
print(expensive_products)
# 特定期間のデータを抽出
january_sales = sales_data[sales_data['date'].str.startswith('2024-01')]
print(january_sales)
# 複数条件での抽出
high_sales = sales_data[
(sales_data['amount'] >= 10) &
(sales_data['price'] <= 2000)
]
print(high_sales)
3. 欠損データの処理
実際のデータには空白やエラーが含まれることが多い:
# 空白データを確認
print(sales_data.isnull().sum())
# 空白行を削除
clean_data = sales_data.dropna()
# 空白を平均値で埋める
sales_data['amount'].fillna(sales_data['amount'].mean(), inplace=True)
# 0で埋める
sales_data['amount'].fillna(0, inplace=True)
Excelとの比較
Excelでやること vs Pythonでやること
やりたいこと | Excel | Python |
---|---|---|
データ読み込み | ファイル開く | pd.read_csv() |
フィルタ | AutoFilterクリック | data[data['列'] > 値] |
集計 | ピボットテーブル | data.groupby().sum() |
グラフ | 挿入→グラフ | data.plot() |
平均計算 | =AVERAGE() |
data['列'].mean() |
Pythonの良いところ:
- 大量データでも高速
- 同じ処理を何度でも実行できる
- 複雑な計算も簡単
- グラフがきれい
Excelの良いところ:
- 視覚的でわかりやすい
- すぐに始められる
- 非エンジニアでも使える
実用的なデータ分析例
Webサイトのアクセスログ分析
# アクセスログ(CSV)を読み込み
access_log = pd.read_csv('access.log')
# 時間帯別のアクセス数
access_log['hour'] = pd.to_datetime(access_log['timestamp']).dt.hour
hourly_access = access_log.groupby('hour').size()
# グラフで可視化
hourly_access.plot(kind='bar')
plt.title('時間帯別アクセス数')
plt.xlabel('時間')
plt.ylabel('アクセス数')
plt.show()
# 人気ページTOP5
popular_pages = access_log['page'].value_counts().head()
print('人気ページTOP5:')
print(popular_pages)
SNSの投稿データ分析
# 投稿データを分析
posts_data = pd.read_csv('posts.csv')
# 曜日別の投稿数
posts_data['weekday'] = pd.to_datetime(posts_data['created_at']).dt.day_name()
weekly_posts = posts_data.groupby('weekday').size()
# いいね数の分布
likes_distribution = posts_data['likes'].hist(bins=20)
plt.title('いいね数の分布')
plt.xlabel('いいね数')
plt.ylabel('投稿数')
plt.show()
# ハッシュタグの人気ランキング
hashtag_counts = posts_data['hashtags'].str.split(',').explode().value_counts()
print('人気ハッシュタグ:')
print(hashtag_counts.head(10))
つまずきやすいポイント
1. 日本語の文字化け
# 文字コードを指定してCSV読み込み
data = pd.read_csv('data.csv', encoding='utf-8')
# または
data = pd.read_csv('data.csv', encoding='shift_jis')
2. 日付データの扱い
# 文字列の日付をdatetime型に変換
data['date'] = pd.to_datetime(data['date'])
# 月や曜日を抽出
data['month'] = data['date'].dt.month
data['weekday'] = data['date'].dt.day_name()
3. グラフの日本語表示
# 日本語フォント設定
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'DejaVu Sans'
# 軸ラベルは英語にするか、フォント指定
plt.xlabel('Month')
plt.ylabel('Sales Count')
次のステップ
もっと本格的にやりたい人向け
# より高度なライブラリ
import seaborn as sns # きれいなグラフ
import numpy as np # 数値計算
import scipy as sp # 統計処理
# 機械学習も始められる
from sklearn.linear_model import LinearRegression
おすすめの学習リソース
- Jupyter Notebook: ブラウザで対話的に実行できる
- Google Colab: 無料でクラウドで実行できる
- Kaggle: 実際のデータセットで練習できる
おわりに
どうでしたか?データ分析って、思ってたより簡単でしょう?
最初は「Excelの代わり」として使い始めて、慣れてきたら機械学習とかにも挑戦してみてください。
データから新しい発見をするのって、けっこう楽しいですよ。「えー、この商品こんなに売れてたんだ」とか「やっぱり月曜日はアクセス少ないんだ」とか、色々な気づきがあります。
まずは手元にあるCSVファイルを読み込むところから始めてみましょう!きっとデータ分析にハマると思います 📈