グラフを作ること自体は簡単です。2つの列を選んで、グラフの種類を選べば完了です。うまくいかないときは、CSVファイルではよくあることですが、原因はほとんどの場合グラフではなくデータにあります。テキストとして保存された数値、数字の列に紛れた N/A が1つ、データ系列だと判断されてしまう年の列。これらを直せば、どのツールでもグラフは描けます。
先に結論
- Excel: CSVを開き、ラベルの列と数値の列を選んで、挿入 → おすすめグラフ。
- Google スプレッドシート: アップロードして開き、範囲を選んで、挿入 → グラフ。
- Python:
pandasとdf.plot()の3行。下に例があります。 - スマートフォン: CSVを表計算ファイルに変換せず、直接グラフにできるアプリを使う。
- どれを使う場合も先に: 数値の列が本当に数値になっているか確認し、先にデータを集計する必要があるか判断します。
ステップ0: 先にデータを集計する必要はありますか
CSVのエクスポートは、たいてい注文ごと、取引ごと、訪問ごとのように、イベントごとに1行です。それをそのままグラフにすると、細い棒が4万本並びます。本当に見たいのは、月別の売上、地域別の注文数のように、カテゴリごとに1本の棒です。
そこでまず考えます。1行は何の単位ですか。 その答えがグラフの横軸にしたいものと違うなら、先に集計します。ExcelやスプレッドシートならピボットテーブルでOKです。SQLならクエリ1つで済みます。
duckdb -c "SELECT region, sum(amount) AS revenue FROM 'orders.csv' GROUP BY region ORDER BY revenue DESC"
グラフにするのは、大きなファイルではなく、この小さな結果です。この手順はCSVの列を合計する方法のガイドで詳しく説明しています。
目的に合わせてグラフを選ぶ
| 見せたいこと | 使うグラフ | 避けるもの |
|---|---|---|
| どのカテゴリが一番大きいか | 棒グラフ(ラベルが長いときは横棒) | 6項目以上の円グラフ |
| 時間による変化 | 折れ線グラフ | 約20点を超える棒グラフ |
| 全体に占める割合 | 積み上げ棒グラフ、2〜5項目なら円グラフ | 3Dのグラフ全般 |
| 2つの数値の関係 | 散布図 | 折れ線(順序があるように見えてしまう) |
| 1つの数値の分布 | ヒストグラム | 生の値の棒グラフ |
Excelの場合
- CSVを開きます。(IDや郵便番号、桁数の多い数値が含まれている場合は、開くのではなくインポートしてください。ExcelでCSVのデータが勝手に変わるのを防ぐ方法を参照してください。)
- ラベルの列を選び、Ctrl(Macでは ⌘)を押しながら数値の列を選びます。
- 挿入 → おすすめグラフを選ぶか、種類を直接選びます。
定番のトラブル: 年の列がデータ系列になってしまう。 ラベルが数値(2021、2022、2023)だと、Excelはそれをデータとして扱い、2本目の折れ線として下の方に描いてしまいます。ラベルの列をテキストに変換するか、その列の先頭セルの見出しテキストを削除してください。左上のセルが空なら、Excelはその列をラベルとして読み取ります。
もう1つの定番トラブル: 何も描かれない。 テキストとして保存された数値(セルの隅に緑の三角が出ます)は、ゼロとして描かれます。列を選び、警告アイコンをクリックして、数値に変換を選んでください。
Google スプレッドシートの場合
- CSVをドライブにアップロードしてスプレッドシートで開くか、既存のシートに ファイル → インポート で取り込みます。
- 列を選んで 挿入 → グラフ を選びます。
- グラフエディタで 列 A をラベルとして使用 にチェックを入れ、グラフの縦横が入れ替わっているように見えたら 行/列を切り替える を使います。
スプレッドシートには、Excelでは面倒な機能が1つあります。グラフエディタの 設定 タブで、横軸の隣にある 集計 にチェックを入れると、同じラベルの値を自動で合計してくれます。生の行から手早く「カテゴリごとの合計」を出したいときは、ピボットテーブルを作らずに済みます。
Pythonの場合
何度も作るものなら、クリックするよりスクリプトの方が楽です。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("orders.csv")
df.groupby("region")["amount"].sum().sort_values().plot(kind="barh")
plt.tight_layout()
plt.savefig("revenue-by-region.png", dpi=200)
来月、新しいエクスポートで同じスクリプトをもう一度実行すれば、グラフは自動で更新されます。
グラフが崩れる原因になりやすいデータの問題
- 数値でない値が1つだけ混ざった列。
N/A、-、TBC、あるいはスペースで入力された空欄です。多くのツールは列全体をテキストとして扱うため、グラフから列が消えるか、ゼロとして描かれます。 - 通貨記号と桁区切り。
$1,200はほとんどのパーサーにとってテキストです。記号と区切りを取り除くか、それを理解できるツールを使ってください。 - 小数点のカンマ。 ドイツやフランスのシステムから出たファイルでは
1.234,50と書かれます。英語ロケールで開くと、テキストになるか、もっと悪いと1000倍大きな数値になります。 - テキストの日付。 アルファベット順に並べると
AprがJanより前に来ます。本物の日付に変換するか、月を2026-01、2026-02のように書いてください。これならテキストのままでも正しい順に並びます。 - 末尾の合計行。 エクスポートの最後に「Total」行が付いていることが多く、本来の棒を押しのけて突き抜けてしまいます。グラフにする前に削除してください。
スマートフォンの場合
スマートフォンの表計算アプリでも、変換すればCSVをグラフにできます。ただし上と同じデータの問題があり、直すための画面は小さくなります。CSVを直接グラフにするCSVアプリなら、変換の手間が省けます。
Smart CSV Viewerでは ⋯ → Chart から操作します。種類を選び、Labels の列と1つ以上の Series の列を指定して、グラフを画像として書き出せます。系列の列に数値でないものがあると、どの列のどのセルかを教えてくれて、タップするとそのセルに移動して直せます。上のリストにある最初の問題は、これで解決できます。

iPhoneやAndroidで、CSVを変換せずにグラフにできます。数値でないセルを教えてくれて、グラフを画像として書き出せます。
できること制限についても正直にお伝えします。無料版では、最初の10行から縦棒・横棒・折れ線グラフを描けます。Proではすべてのグラフの種類と、最大1,000行に対応します。大きな生ファイルのグラフを作るなら、ステップ0のように先に集計してください。これはどんなツールを使う場合にも役立つ方法です。