0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでデータ分析、実はこんなに簡単だった

Posted at

はじめに

「データ分析って難しそう...」
「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ファイルを読み込むところから始めてみましょう!きっとデータ分析にハマると思います 📈

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?