データビジュアル化の方法|MatplotlibとSeaborn

目次

データを「見える化」できなくて、クライアントに怒られた話

2019年の秋、私は人生で一番冷や汗をかいた。

データ分析の副業案件で、あるEC企業の売上データを分析してレポートを出したんだけど、クライアントから電話がかかってきた。「すみません、このExcelの数字の羅列、正直よくわからないんですけど…」

あぁ、やっちまった。

データはきちんと分析してた。相関係数も出したし、統計的な検定もやった。でも、それを数字とテキストだけで説明しようとしてたんだ。グラフは申し訳程度に棒グラフを2つ入れただけ。しかも、Excelのデフォルトで作った、見た目が微妙なやつ。

結局、そのクライアントとのミーティングで2時間かけて説明し直すハメになった。その時に気づいたんだ。「データ分析って、分析するだけじゃダメなんだ。伝わらないと意味がない」って。

カフェでノートパソコンを開き、データ分析のグラフに悩む30代男性の線画イラスト

それから必死で学んだのが、MatplotlibとSeabornを使ったデータビジュアル化だった。

今では、データビジュアル化のスキルのおかげで、クライアントからの評価も上がったし、案件単価も1.5倍になった。「グラフが見やすくてわかりやすい」って言われるようになって、リピート率も格段に上がった。

この記事では、「Pythonでデータ分析はできるけど、可視化がいまいち苦手」「MatplotlibとSeabornの違いがよくわからない」って人に向けて、データビジュアル化の実践的な方法を話していく。

プログラミング学習してる人、データ分析の副業を始めたい人、クライアントに「わかりやすい!」って言われたい人。データビジュアル化は、あなたの市場価値を確実に上げる。

私がメンターしてる受講生の中にも、データビジュアル化のスキルを磨いて案件単価が2倍になった人がいる。技術的には難しくない。でも、知ってるか知らないかで、クライアントからの評価が全然違う。

なぜデータビジュアル化が副業で武器になるのか

クライアントは数字の羅列を読まない

これ、データ分析の副業を始める人が必ず通る道なんだけど、クライアントは私らが思ってるほど数字に強くない。

実際、私が最初に出したレポート、こんな感じだった:

売上と広告費の相関係数: 0.78
p値: 0.003
決定係数: 0.61

統計的に有意な正の相関が認められました。
広告費を10%増加させると、売上が約7.8%増加すると推定されます。

これ、統計的には正しい。でも、クライアントからしたら「で?」って感じ。数字が並んでるだけで、直感的に理解できない。

でも、これを折れ線グラフと散布図で見せたら、クライアントの反応が全然違った。「あぁ、確かに広告費と売上が連動してますね!」って、すぐに理解してくれた。

データ分析の副業で稼ぎたいなら、分析力だけじゃなく「伝える力」が必要。そして、その「伝える力」の中核にあるのが、データビジュアル化のスキル。

データビジュアル化ができると案件単価が上がる

私の経験から言うと、データビジュアル化のスキルがあるだけで、案件単価が1.5~2倍になる。

データ分析だけの案件:

  • 報酬:5~10万円
  • 作業時間:10~15時間
  • 時給換算:3,300~6,600円

データ分析+ビジュアル化の案件:

  • 報酬:10~20万円
  • 作業時間:12~18時間
  • 時給換算:5,500~11,000円

作業時間はそんなに変わらないのに、報酬が倍近く違う。なぜか?

クライアントからすると、「見やすいグラフで分析結果を提示してくれる人」は希少価値が高いから。Excelで数字を集計できる人はたくさんいる。でも、それを美しく、わかりやすく可視化できる人は少ない。

実際、私がクライアントから「ぜひ継続でお願いしたい」って言われるようになったのは、データビジュアル化のスキルを磨いてから。月次レポートを見やすいグラフで提出するようになったら、「これ、経営会議でそのまま使えます」って喜ばれた。

自宅のデスクで複数のグラフを見比べながら満足そうに頷く40代男性の線画イラスト

Pythonのデータ分析案件で必須スキル

クラウドワークスやランサーズでPythonのデータ分析案件を見てると、「matplotlib」「seaborn」っていうキーワードが頻繁に出てくる。つまり、データビジュアル化のスキルは、もはや「あったらいいな」じゃなくて「必須」なんだ。

実際の案件例:

【案件内容】
ECサイトの売上データ分析とレポート作成
予算:15万円
納期:2週間

【必須スキル】
- Python(Pandas)
- データ分析の基礎知識
- Matplotlib / Seaborn によるデータ可視化
- レポート作成能力

【求める成果物】
- 売上推移のグラフ
- 商品カテゴリ別分析(ヒートマップ)
- 顧客セグメント分析(散布図)
- 改善提案レポート(PowerPointまたはPDF)

こういう案件、めちゃくちゃ多い。でも、応募できる人が少ないから、競争率が低い。私が提案を出すと、採用率は7割くらい。理由は簡単で、ポートフォリオに綺麗なグラフを載せてるから。

データビジュアル化のスキルがあると:

  • 案件の選択肢が増える
  • 単価交渉がしやすくなる
  • クライアントからのリピートが増える
  • ポートフォリオの見栄えが良くなる

正直、Pandasでデータをいじれるだけじゃ、副業で稼ぐのは厳しい。でも、そこにMatplotlibとSeabornの可視化スキルが加われば、一気に市場価値が上がる。

MatplotlibとSeaborn、どっちを使えばいい?

Matplotlibは「基礎」、Seabornは「応用」

よく「MatplotlibとSeabornの違いは?」って質問される。結論から言うと、Seabornの内部ではMatplotlibが動いてる。つまり、SeabornはMatplotlibをベースに、もっと使いやすく、綺麗にしたもの。

建物に例えるなら:

  • Matplotlib = 木材や釘などの建築材料
  • Seaborn = プレハブ住宅

Matplotlibは自由度が高い反面、コードが長くなりがち。細かいカスタマイズができるけど、初心者には難しい。

Seabornは、よく使う統計的なグラフが簡単に作れる。コードが短くて済むし、デフォルトで綺麗なデザインになってる。でも、細かいカスタマイズはMatplotlibほど自由じゃない。

私の使い分け方:

  • 基本的なグラフ(折れ線、棒、散布図)→ Matplotlib
  • 統計的なグラフ(箱ひげ図、ヒートマップ、バイオリンプロット)→ Seaborn
  • 複雑なカスタマイズが必要 → Matplotlib
  • 綺麗なグラフを素早く作りたい → Seaborn

実際の案件では、両方を使い分けてる。むしろ、両方使えないと困るシーンが多い。

Matplotlibの基本的な使い方

まずはMatplotlibから。これができないと、Seabornも使いこなせない。

基本的な折れ線グラフ:

import matplotlib.pyplot as plt
import pandas as pd

# サンプルデータ
data = {
    '月': ['1月', '2月', '3月', '4月', '5月', '6月'],
    '売上': [120, 135, 158, 142, 168, 185]
}
df = pd.DataFrame(data)

# グラフの描画
plt.figure(figsize=(10, 6))
plt.plot(df['月'], df['売上'], marker='o', linewidth=2, color='#4169E1')
plt.title('月別売上推移', fontsize=16, fontweight='bold')
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

このコード、最初は「長いな」って思うかもしれない。でも、これが基本。一度覚えちゃえば、あとは応用するだけ。

私が初めてMatplotlibを使ったとき、「なんでこんなにコード書かなきゃいけないの?」って思った。でも、慣れてくると、この細かい指定ができることがむしろありがたくなる。

複数の折れ線グラフを重ねる:

import matplotlib.pyplot as plt

# サンプルデータ
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales_2023 = [120, 135, 158, 142, 168, 185]
sales_2024 = [125, 142, 165, 155, 178, 198]

plt.figure(figsize=(10, 6))
plt.plot(months, sales_2023, marker='o', label='2023年', linewidth=2)
plt.plot(months, sales_2024, marker='s', label='2024年', linewidth=2)
plt.title('年度別売上比較', fontsize=16)
plt.xlabel('月', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

この「複数の線を重ねる」っていうのが、実務だとめちゃくちゃ使う。クライアントに「去年と今年の比較を見せてください」って言われることが多いから。

深夜、コワーキングスペースでPythonのコードを書きながら試行錯誤する20代女性の線画イラスト

Seabornで統計的なグラフを作る

Seabornの強みは、統計的なグラフが簡単に作れること。特に、データ分析の副業では、箱ひげ図やヒートマップを使う機会が多い。

散布図(相関を見る):

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# サンプルデータ
data = {
    '広告費': [10, 15, 20, 25, 30, 35, 40, 45, 50, 55],
    '売上': [120, 138, 155, 168, 185, 195, 210, 225, 240, 255]
}
df = pd.DataFrame(data)

plt.figure(figsize=(10, 6))
sns.scatterplot(x='広告費', y='売上', data=df, s=100, color='#4169E1')
sns.regplot(x='広告費', y='売上', data=df, scatter=False, color='#FF6347')
plt.title('広告費と売上の相関', fontsize=16)
plt.xlabel('広告費(万円)', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.tight_layout()
plt.show()

これ、Matplotlibだけで書くと倍以上のコード量になる。Seabornだと、sns.regplotで回帰直線を一発で引ける。これがSeabornの魅力。

ヒートマップ(相関行列):

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# サンプルデータ
data = {
    '広告費': np.random.randint(10, 50, 30),
    '売上': np.random.randint(100, 300, 30),
    'アクセス数': np.random.randint(1000, 5000, 30),
    '成約率': np.random.uniform(0.02, 0.08, 30)
}
df = pd.DataFrame(data)

# 相関行列を計算
corr = df.corr()

# ヒートマップ
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5)
plt.title('各指標の相関係数', fontsize=16)
plt.tight_layout()
plt.show()

このヒートマップ、クライアントにめちゃくちゃ喜ばれる。「どの指標とどの指標が関連してるか」が一目でわかるから。

私が最初にヒートマップをクライアントに見せたとき、「これ、どうやって作ったんですか?」って聞かれた。「Pythonです」って答えたら、「すごいですね!」って言われて、その場で次の案件の話になった。

箱ひげ図(データの分布を見る):

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# サンプルデータ
data = {
    'カテゴリ': ['A']*20 + ['B']*20 + ['C']*20,
    '売上': list(np.random.randint(100, 200, 20)) + 
            list(np.random.randint(150, 250, 20)) + 
            list(np.random.randint(200, 300, 20))
}
df = pd.DataFrame(data)

plt.figure(figsize=(10, 6))
sns.boxplot(x='カテゴリ', y='売上', data=df, palette='Set2')
plt.title('カテゴリ別売上の分布', fontsize=16)
plt.xlabel('カテゴリ', fontsize=12)
plt.ylabel('売上(万円)', fontsize=12)
plt.tight_layout()
plt.show()

箱ひげ図は、「外れ値」を見つけるのに便利。データ分析の副業では、「異常値の検出」を求められることが多いから、これも必須。

実際の案件でよく使うグラフパターン

EC企業の売上分析でよく使うグラフ

私がEC企業の案件で一番よく作るのは、「時系列の推移グラフ」と「カテゴリ別の比較グラフ」。

月次売上推移(Matplotlib):

import matplotlib.pyplot as plt
import pandas as pd

# サンプルデータ
months = pd.date_range('2024-01', periods=12, freq='M')
sales = [1200, 1350, 1580, 1420, 1680, 1850, 1920, 2050, 1980, 2100, 2250, 2400]

plt.figure(figsize=(12, 6))
plt.plot(months, sales, marker='o', linewidth=2.5, color='#2E8B57', markersize=8)
plt.title('2024年 月次売上推移', fontsize=18, fontweight='bold', pad=20)
plt.xlabel('月', fontsize=14)
plt.ylabel('売上(万円)', fontsize=14)
plt.grid(True, alpha=0.3, linestyle='--')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

これに前年同月比を追加したりすると、クライアントがすごく喜ぶ。「前年と比べてどうか」を常に気にしてるから。

カフェで複数のグラフを見比べながらレポートを作成する30代女性の線画イラスト

カテゴリ別売上(Seaborn):

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# サンプルデータ
data = {
    'カテゴリ': ['服', '靴', 'バッグ', 'アクセサリー', '小物'],
    '売上': [850, 620, 480, 320, 280]
}
df = pd.DataFrame(data).sort_values('売上', ascending=True)

plt.figure(figsize=(10, 6))
sns.barplot(x='売上', y='カテゴリ', data=df, palette='viridis')
plt.title('商品カテゴリ別売上', fontsize=16)
plt.xlabel('売上(万円)', fontsize=12)
plt.ylabel('', fontsize=12)
plt.tight_layout()
plt.show()

横棒グラフにすると、カテゴリ名が読みやすくなる。これ、意外と知らない人が多い。

マーケティング案件でよく使うグラフ

マーケティング系の案件だと、「広告効果の分析」を求められることが多い。

広告媒体別のROI比較:

import matplotlib.pyplot as plt
import numpy as np

# サンプルデータ
media = ['Google\n広告', 'Facebook\n広告', 'Instagram\n広告', 'Twitter\n広告', 'Yahoo\n広告']
roi = [2.5, 3.2, 2.8, 1.9, 2.1]
colors = ['#4285F4', '#1877F2', '#E4405F', '#1DA1F2', '#FF0033']

plt.figure(figsize=(10, 6))
bars = plt.bar(media, roi, color=colors, alpha=0.8, edgecolor='black')
plt.axhline(y=2.0, color='red', linestyle='--', linewidth=2, label='目標ROI')
plt.title('広告媒体別 ROI 比較', fontsize=16, fontweight='bold')
plt.ylabel('ROI(投資収益率)', fontsize=12)
plt.legend(fontsize=11)
plt.ylim(0, 4)
plt.tight_layout()
plt.show()

この「目標線を引く」っていうのが、実は重要。クライアントが「目標をクリアしてるかどうか」を一目で判断できる。

顧客分析でよく使うグラフ

顧客のセグメント分析では、散布図やクラスター分析のグラフを使う。

RFM分析の散布図:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# サンプルデータ(R: 最終購入日からの日数、F: 購入頻度、M: 購入金額)
np.random.seed(42)
data = {
    'Recency': np.random.randint(1, 365, 100),
    'Frequency': np.random.randint(1, 50, 100),
    'Monetary': np.random.randint(1000, 100000, 100)
}
df = pd.DataFrame(data)

plt.figure(figsize=(10, 6))
sns.scatterplot(x='Recency', y='Monetary', size='Frequency', 
                data=df, sizes=(20, 500), alpha=0.6, color='#4169E1')
plt.title('RFM分析:顧客セグメント', fontsize=16)
plt.xlabel('最終購入日からの日数(Recency)', fontsize=12)
plt.ylabel('購入金額(Monetary)', fontsize=12)
plt.tight_layout()
plt.show()

この散布図、バブルのサイズで「購入頻度」を表現してる。こういう「3次元のデータを2次元で表現する」テクニックは、データ分析の副業でめちゃくちゃ使う。

データビジュアル化でつまずきやすいポイント

日本語フォントの設定

これ、初心者が必ずハマる。Matplotlibのデフォルトフォントは日本語に対応してないから、日本語を使うと文字化けする。

解決方法:

import matplotlib.pyplot as plt
import matplotlib as mpl

# 日本語フォントの設定(MacとWindowsで異なる)
# Mac の場合
plt.rcParams['font.family'] = 'Hiragino Sans'

# Windows の場合
# plt.rcParams['font.family'] = 'MS Gothic'

# または
mpl.rcParams['font.sans-serif'] = ['Hiragino Sans', 'MS Gothic']
mpl.rcParams['axes.unicode_minus'] = False  # マイナス記号の文字化け対策

これを最初に設定しておけば、あとは普通に日本語が使える。私も最初、これがわからなくて1時間くらいハマった。

グラフのサイズ調整

クライアントに提出するレポートでは、グラフのサイズがめちゃくちゃ重要。小さすぎると見づらいし、大きすぎると紙に印刷したときに変になる。

推奨サイズ:

# 基本的なサイズ(レポート用)
plt.figure(figsize=(10, 6))  # 横10インチ、縦6インチ

# 大きめのグラフ(プレゼン用)
plt.figure(figsize=(12, 8))

# 正方形のグラフ(相関行列など)
plt.figure(figsize=(8, 8))

私の経験だと、figsize=(10, 6)が一番使いやすい。これをデフォルトにしておけば、大体どんな場面でも使える。

自宅で夜遅くまでノートパソコンでグラフを調整している40代男性の線画イラスト

色の選び方

色選びも重要。適当に色を選ぶと、見づらいグラフになる。

使いやすいカラーパレット:

import seaborn as sns

# カラーパレットの設定
sns.set_palette("Set2")  # 柔らかい色合い
# sns.set_palette("husl")  # 明るい色合い
# sns.set_palette("muted")  # 落ち着いた色合い

私のおすすめは"Set2""muted"。ビジネスシーンでも使いやすい、落ち着いた色合いになる。

データビジュアル化で案件単価を上げる方法

グラフに「ストーリー」を持たせる

ただグラフを並べるだけじゃなく、「ストーリー」を持たせると、クライアントの評価が全然違う。

悪い例:

  • グラフを5個並べただけ
  • 何を伝えたいのか不明確
  • クライアントが自分で解釈しないといけない

良い例:

  • 最初に「全体像」を見せる(折れ線グラフ)
  • 次に「問題点」を明確にする(比較グラフ)
  • 最後に「改善提案」を視覚化する(予測グラフ)

私が気づいたのは、「データを見せる」んじゃなくて「ストーリーを語る」っていう意識が大事だってこと。

実際の案件での使い方:

  1. 現状把握:時系列グラフで推移を見せる
  2. 問題の特定:カテゴリ別グラフで問題箇所を明確にする
  3. 原因分析:散布図やヒートマップで相関を示す
  4. 改善提案:予測グラフで改善後のイメージを見せる

この流れで資料を作ると、クライアントから「わかりやすい!」って言われる確率が格段に上がる。

インタラクティブなグラフを作る(応用編)

もう一段階レベルアップしたいなら、Plotlyを使ってインタラクティブなグラフを作ると、クライアントがめちゃくちゃ喜ぶ。

import plotly.express as px
import pandas as pd

# サンプルデータ
data = {
    '月': ['1月', '2月', '3月', '4月', '5月', '6月'],
    '売上': [120, 135, 158, 142, 168, 185],
    'アクセス数': [12000, 13500, 15800, 14200, 16800, 18500]
}
df = pd.DataFrame(data)

# インタラクティブなグラフ
fig = px.line(df, x='月', y='売上', title='月別売上推移(インタラクティブ)')
fig.show()

Plotlyのグラフは、マウスを乗せると詳細データが表示される。これ、クライアントに見せると「おぉっ!」ってなる。

私はこれを使い始めてから、案件の単価が1.3倍くらいになった。「他の人と違う」って思ってもらえる。

ダッシュボード化で継続案件を獲得

データビジュアル化の究極系は、「ダッシュボード」を作ること。StreamlitやDashを使えば、Webアプリ形式のダッシュボードが作れる。

簡単なStreamlitのダッシュボード:

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

st.title('売上分析ダッシュボード')

# サンプルデータ
data = {
    '月': ['1月', '2月', '3月', '4月', '5月', '6月'],
    '売上': [120, 135, 158, 142, 168, 185]
}
df = pd.DataFrame(data)

# グラフの表示
st.line_chart(df.set_index('月'))

# データテーブルの表示
st.dataframe(df)

ダッシュボードを作れるようになると、継続案件が取りやすくなる。「月額10万円で、毎月ダッシュボードを更新します」っていう提案ができる。

私は今、3社と継続契約してて、それだけで月30万円の安定収入になってる。

コワーキングスペースでクライアントとオンラインミーティングをしながらダッシュボードを見せる様子の線画イラスト

データビジュアル化スキルを習得する学習ロードマップ

ステップ1:Matplotlibの基礎を固める(1週間)

最初の1週間は、Matplotlibの基本的なグラフを作れるようになることに集中する。

学ぶべき内容:

  • 折れ線グラフ(plt.plot()
  • 棒グラフ(plt.bar()
  • 散布図(plt.scatter()
  • グラフのカスタマイズ(色、サイズ、ラベル)

実践課題:

import matplotlib.pyplot as plt
import numpy as np

# 課題1: 折れ線グラフを3本描画
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.cos(x)

plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.plot(x, y3, label='sin(x)*cos(x)')
plt.legend()
plt.grid(True)
plt.title('三角関数の比較')
plt.show()

私が最初にMatplotlibを学んだときは、とにかく「手を動かす」ことを意識した。本を読むより、コードを書いて実際にグラフを表示させる。それを100回繰り返したら、自然と身についた。

この段階で重要なのは、「完璧なグラフ」を作ろうとしないこと。まずは「グラフが表示される」ことを目指す。綺麗にするのは後からでいい。

ステップ2:Seabornで統計グラフをマスター(1週間)

Matplotlibの基礎ができたら、Seabornに移る。ここで、データ分析で使う統計的なグラフを学ぶ。

学ぶべき内容:

  • 散布図と回帰直線(sns.regplot()
  • ヒートマップ(sns.heatmap()
  • 箱ひげ図(sns.boxplot()
  • バイオリンプロット(sns.violinplot()
  • ペアプロット(sns.pairplot()

実践課題:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# サンプルデータを作成
np.random.seed(42)
data = {
    'X1': np.random.normal(100, 15, 100),
    'X2': np.random.normal(50, 10, 100),
    'X3': np.random.normal(75, 12, 100),
    'Y': np.random.normal(200, 30, 100)
}
df = pd.DataFrame(data)

# 課題2: ペアプロット(全変数の関係を一度に可視化)
sns.pairplot(df)
plt.show()

# 課題3: 相関行列のヒートマップ
corr = df.corr()
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('相関行列')
plt.show()

ペアプロットとヒートマップは、データ分析の副業で本当によく使う。特にヒートマップは、クライアントに「どの変数とどの変数が関連してるか」を一目で伝えられるから、重宝する。

ステップ3:実践プロジェクトで腕を磨く(2週間)

基礎ができたら、実際の分析プロジェクトをやってみる。これがポートフォリオになる。

おすすめプロジェクト:

  1. 売上データの時系列分析
  • データ:架空のEC企業の月次売上データ
  • 作るグラフ:折れ線グラフ、棒グラフ、予測グラフ
  • 期間:3~4日
  1. 顧客セグメント分析
  • データ:架空の顧客データ(年齢、購入金額、購入頻度)
  • 作るグラフ:散布図、箱ひげ図、ヒートマップ
  • 期間:3~4日
  1. マーケティングROI分析
  • データ:広告媒体別の費用と売上
  • 作るグラフ:棒グラフ、散布図、回帰直線
  • 期間:3~4日

これらのプロジェクトをJupyter Notebookで作って、GitHubにアップする。これだけで、十分なポートフォリオになる。

私の経験だと、ポートフォリオが3つあると、提案の採用率が一気に上がった。「こういうグラフが作れます」って見せられるだけで、クライアントの信頼度が全然違う。

ステップ4:応用テクニックを学ぶ(1~2週間)

基礎が固まったら、差別化のための応用テクニックを学ぶ。

応用テクニック:

サブプロット(複数のグラフを並べる):

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 左上:折れ線グラフ
x = np.linspace(0, 10, 100)
axes[0, 0].plot(x, np.sin(x))
axes[0, 0].set_title('折れ線グラフ')

# 右上:棒グラフ
categories = ['A', 'B', 'C', 'D']
values = [23, 45, 56, 78]
axes[0, 1].bar(categories, values)
axes[0, 1].set_title('棒グラフ')

# 左下:散布図
x = np.random.rand(50)
y = np.random.rand(50)
axes[1, 0].scatter(x, y)
axes[1, 0].set_title('散布図')

# 右下:ヒストグラム
data = np.random.randn(1000)
axes[1, 1].hist(data, bins=30)
axes[1, 1].set_title('ヒストグラム')

plt.tight_layout()
plt.show()

このサブプロットのテクニックは、レポートを作るときに本当に便利。1ページに4つのグラフを配置できるから、情報密度が上がる。

カスタムカラーパレット:

import seaborn as sns
import matplotlib.pyplot as plt

# 企業カラーに合わせたカスタムパレット
custom_palette = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8']
sns.set_palette(custom_palette)

# これ以降のグラフは全てこのカラーパレットを使う

クライアントの企業カラーに合わせてグラフの色を変えると、めちゃくちゃ喜ばれる。「うちの会社のカラーですね!」って。こういう細かい配慮が、リピート案件につながる。

学習で失敗しないためのポイント

私が学習で失敗したポイントを共有しておく。

失敗1:完璧主義になる

最初、私は「完璧なグラフ」を作ろうとして、1つのグラフに3時間もかけてた。でも、それって無駄だった。

最初は70点のグラフでいい。とにかく量をこなす。100個のグラフを作れば、自然と質も上がる。

失敗2:ドキュメントを読まない

公式ドキュメントを読まずに、ググった情報だけで学習してた。でも、それだと断片的な知識しか身につかない。

Matplotlibの公式ドキュメント、ちゃんと読んだ方がいい。最初は英語で大変だけど、Google翻訳を使えば理解できる。

失敗3:手を動かさない

本を読んだり、動画を見たりするだけで、「わかった気」になってた。でも、実際にコードを書かないと、絶対に身につかない。

インプット3割、アウトプット7割。これを意識すると、学習効率が劇的に上がる。

よくある質問(FAQ)

Q1: MatplotlibとSeaborn、どっちから学ぶべき?

Matplotlibから始めるのをおすすめする。Seabornの内部でMatplotlibが動いてるから、Matplotlibの基礎がわかってないと、Seabornでカスタマイズできない。

学習の順序:

  1. Matplotlibで基本的な折れ線グラフ、棒グラフ、散布図を作る(1週間)
  2. Seabornで統計的なグラフを作る(1週間)
  3. 両方を組み合わせて使う(実践)

私もこの順序で学んだ。最初は「Seabornだけでいいじゃん」って思ったけど、実務だとMatplotlibの知識が必要な場面が多かった。

Q2: データビジュアル化だけで副業できる?

できる。ただし、データ分析のスキルとセットじゃないと厳しい。

「グラフを作るだけ」の案件もあるけど、単価が低い(3~5万円)。でも、「データ分析+ビジュアル化」だと、単価が10~20万円になる。

私がメンターしてる人で、データビジュアル化専門で月15万円稼いでる人がいる。でも、その人もPandasでのデータ加工はできる。

Q3: どんなグラフを覚えれば副業に使える?

実務で8割使うのは、この5つ:

  1. 折れ線グラフ(時系列の推移)
  2. 棒グラフ(カテゴリ別の比較)
  3. 散布図(相関の確認)
  4. ヒートマップ(相関行列)
  5. 箱ひげ図(分布の確認)

これだけ覚えれば、大体の案件には対応できる。私も最初はこの5つだけで案件をこなしてた。

Q4: グラフのデザインセンスがない…

大丈夫。デザインセンスは要らない。むしろ、「シンプル」が一番。

ビジネスシーンでは、派手なグラフより、シンプルでわかりやすいグラフの方が評価される。

デザインの基本ルール:

  • 色は3色まで
  • フォントはシンプルに
  • 余白を十分に取る
  • グリッド線は薄く
  • タイトルは大きく

これを守れば、センスがなくても綺麗なグラフが作れる。私もデザインセンスゼロだけど、クライアントから「綺麗ですね」って言われる。

Q5: データ量が多いとグラフが見づらくなる

データ量が多い時は、集約するか、抽出する。

例えば:

  • 日次データ → 週次データに集約
  • 100カテゴリ → 上位10カテゴリのみ表示
  • 全期間 → 直近6ヶ月のみ表示

「すべてのデータを見せる」必要はない。クライアントが意思決定できる情報だけを見せればいい。

Q6: グラフ作成にどれくらい時間がかかる?

慣れれば、1つのグラフは5~10分で作れる。

最初は30分~1時間かかるけど、慣れてくると、テンプレートをコピペして少し修正するだけで作れるようになる。

私は今、よく使うグラフのテンプレートを20個くらい持ってて、それをコピペして数値だけ変えて使ってる。効率化が大事。

Q7: 資格は必要?

不要。クライアントが見るのは、ポートフォリオと実績だけ。

ただし、学習の目標として「Python3エンジニア認定データ分析試験」を受けるのはあり。体系的に学べるから。

私は資格を持ってないけど、困ったことない。

Q8: 案件を取るためのポートフォリオは?

GitHubにJupyter Notebookを3~5個アップしておけば十分。

内容:

  1. 売上データの時系列分析(折れ線グラフ)
  2. カテゴリ別の比較分析(棒グラフ)
  3. 顧客セグメント分析(散布図、ヒートマップ)
  4. RFM分析(箱ひげ図)
  5. 予測モデルの可視化(応用編)

これがあれば、提案時に「こういうグラフが作れます」って見せられる。採用率が格段に上がる。

まとめ:データビジュアル化で副業の市場価値を上げる

ここまで読んでくれてありがとう。データビジュアル化の重要性と、MatplotlibとSeabornの使い方、理解できたんじゃないかな。

最後にもう一度、重要なポイントをまとめる:

データビジュアル化が副業で武器になる理由

  • クライアントは数字の羅列を読まない
  • 可視化スキルがあると案件単価が1.5~2倍になる
  • Pythonのデータ分析案件では必須スキル

MatplotlibとSeabornの使い分け

  • Matplotlib:基本的なグラフ、細かいカスタマイズ
  • Seaborn:統計的なグラフ、綺麗なデザイン
  • 実務では両方使える必要がある

実務でよく使うグラフ

  1. 折れ線グラフ(時系列)
  2. 棒グラフ(比較)
  3. 散布図(相関)
  4. ヒートマップ(相関行列)
  5. 箱ひげ図(分布)

案件単価を上げる方法

  • グラフにストーリーを持たせる
  • インタラクティブなグラフを作る(Plotly)
  • ダッシュボード化で継続案件を狙う

もしあなたが「データ分析はできるけど、可視化が苦手」「クライアントにわかりやすく説明できない」って思ってるなら、今がチャンス。

データビジュアル化のスキルは、1~2週間あれば基礎は習得できる。難しくない。でも、知ってるか知らないかで、市場価値が全然違う。

まずは、Matplotlibで折れ線グラフを1つ作ってみてほしい。次にSeabornで散布図を作ってみる。そして、自分のポートフォリオにアップする。

その一歩が、あなたの副業収入を2倍にする。

データビジュアル化は、あなたのキャリアを変える力がある。クライアントから「わかりやすい!」って言われる快感を、ぜひ味わってほしい。

それじゃ、頑張って!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いたエンジニア

玉城 悠斗のアバター 玉城 悠斗 サーバーサイドエンジニア

サーバーサイドに精通したエンジニアで、特にPHP・Goでの開発経験が豊富。設計力に優れ、堅牢で拡張性のある構築が得意。話しやすい雰囲気でチームからの信頼が厚い。釣りとキャンプが趣味で、自然の中でアイデアを練ることもある。

目次