
🔰Python実用部品工房💫第9講 日付と売上金額を取り出す――文字列を数値へ変換する
【プロローグ】
ミカ「教授、前回はCSVのデータが ['2026-08-01', '120000'] のように、文字列のリストとして読み込まれることを確認しましたね」
教授「うむ。そのままではグラフ作成ツールであるMatplotlibに渡すことができない。X軸用のデータとY軸用のデータを、別々のリストとして用意する必要があるからだ」
ミカ「日付のリストと、売上のリストに分けるのですね」
教授「そうだ。さらに重要なのは、売上データだ。前回の結果では 120000 に引用符が付いていて、文字列として扱われていた」
ミカ「文字列のままでは、グラフの高さが計算できませんね」
教授「その通り。今回は、読み込んだ行から要素を取り出し、売上を数値に変換して、2つのリストに仕分ける処理を作ろう」
【今回作るもの】
前講で作成した src/main.py を変更し、グラフ作成の準備を整えます。今回の main.py は、次の処理を担当します。
・日付用と売上用の空リストを準備する
・CSVを一行ずつ読み込み、日付と売上に分割する
・売上を文字列から整数(数値)へ変換する
・それぞれのリストへデータを蓄積する
・完成した2つのリストをターミナルへ表示する
データの流れは次のとおりです。
["2026-08-01", "120000"] → 日付と売上を別々に取り出す → "120000" を 120000(数値)に変換 → それぞれを専用のリストに追加
【必要な知識と準備】
リストから要素を取り出す
CSVから読み込んだ一行は、次のようなリストとして row に入ります。
Python
row = ["2026-08-01", "120000"]
リストの中身を別々に取り出すには、順番(インデックス)を指定します。Pythonでは順番を 0 から数えます。
Python
date_str = row[0] # "2026-08-01"
sales_str = row[1] # "120000"
文字列を整数へ変換する
取り出した "120000" は文字列(テキスト)なので、このままでは計算やグラフのY軸に使えません。int() を使って、文字列を整数(Integer)へ変換します。
Python
sales_int = int(sales_str)
これで、引用符のない数値の 120000 になります。
リストへデータを追加する
準備しておいた空のリストへデータを追加するには、append() を使います。
Python
dates = []
dates.append("2026-08-01")
これを繰り返すことで、グラフに渡すための一列に並んだデータが完成します。
【部品を作る】
src/main.py を次のコードに書き換えてください。
Python
import csv
csv_path = "data/sales.csv"
# グラフに渡すためのリストを準備
dates = []
sales = []
with open(csv_path, mode="r", encoding="utf-8", newline="") as csv_file:
reader = csv.reader(csv_file)
header = next(reader)
for row in reader:
# 1. 要素を取り出す
date_str = row[0]
sales_str = row[1]
# 2. 売上を整数に変換する
sales_int = int(sales_str)
# 3. リストに追加する
dates.append(date_str)
sales.append(sales_int)
# 出来上がったリストを確認
print("日付リスト:", dates)
print("売上リスト:", sales)
【実行して確認する】
ターミナルを開き、現在位置がプロジェクト直下(csv-sales-chart)であることを確認します。次のコマンドで main.py を実行します。
PowerShell
python src/main.py
正しく実行されると、次の内容が表示されます。
Plaintext
日付リスト: ['2026-08-01', '2026-08-02', '2026-08-03', '2026-08-04', '2026-08-05']
売上リスト: [120000, 135000, 98000, 151000, 168000]
出力結果をよく観察してください。日付リストの要素には '2026-08-01' のように引用符が付いていますが、売上リストの要素には 120000 のように引用符が付いていません。これは、売上データが正しく「数値」としてPythonに認識されたことを意味します。
【演習】
完成した sales リストを使って、この5日間の「売上合計」と「売上平均」を計算してターミナルに表示してください。次の組み込み関数を使用します。
・sum(リスト) : リスト内の数値の合計を出す
・len(リスト) : リスト内のデータの件数を出す
実行結果が次の形になるようにします。
Plaintext
売上合計: 672000
売上平均: 134400.0
【演習の解答】
変更後の main.py です。(ファイルの末尾に追記します)
Python
import csv
csv_path = "data/sales.csv"
dates = []
sales = []
with open(csv_path, mode="r", encoding="utf-8", newline="") as csv_file:
reader = csv.reader(csv_file)
header = next(reader)
for row in reader:
date_str = row[0]
sales_str = row[1]
sales_int = int(sales_str)
dates.append(date_str)
sales.append(sales_int)
print("日付リスト:", dates)
print("売上リスト:", sales)
# --- ここから追記 ---
total_sales = sum(sales)
count = len(sales)
average_sales = total_sales / count
print("売上合計:", total_sales)
print("売上平均:", average_sales)
プロジェクト直下から実行します。
PowerShell
python src/main.py
実行結果です。
Plaintext
日付リスト: ['2026-08-01', '2026-08-02', '2026-08-03', '2026-08-04', '2026-08-05']
売上リスト: [120000, 135000, 98000, 151000, 168000]
売上合計: 672000
売上平均: 134400.0
【解答を一つずつ読み解く】
売上の合計を計算する
Python
total_sales = sum(sales)
sum() は、リストの中にある数値をすべて足し合わせる関数です。もし sales の中身が文字列のままだと、足し算ができずにエラーになります。事前に int() で数値に変換しておいたからこそ、ここで簡単に合計を出すことができます。
データの件数を取得する
Python
count = len(sales)
len() は、リストの中にいくつのデータが入っているかを数えます。今回は5日分のデータなので、count には 5 が入ります。
平均を計算して表示する
Python
average_sales = total_sales / count
合計金額をデータ件数で割ることで、平均を求めています。Pythonでは割り算に / 記号を使います。割り算の結果は、自動的に小数(Float)として扱われます。解答を閉じ、空のリストを作る、要素を取り出して変換する、リストに追加する、という順序を思い出しながら、もう一度入力して動きを確かめてください。
【次回予告】
次回の第10講では、いよいよMatplotlibの出番です。今回苦労して準備した dates(X軸用)と sales(Y軸用)の2つのリストをMatplotlibへ渡し、売上の推移を示す折れ線グラフを描画します。CSVファイルからグラフを作り出す、一連の流れが完成します。
- #python
- #CSV
- #with
- #in
- #sales
- #for
- #AS
- #import
- #を
- #count
- #header
- #Reader
- #dates
- #row
- #には
- #完成した
- #取り出した
- #平均を計算して表示する
- #データの件数を取得する
- #売上の合計を計算する
- #average_sales
- #total_sales
- #ここから追記
- #変更後の
- #672000
- #リスト内のデータの件数を出す
- #リスト内の数値の合計を出す
- #出来上がったリストを確認
- #リストに追加する
- #売上を整数に変換する
- #要素を取り出す
- #グラフに渡すためのリストを準備
- #csv_path
- #リストへデータを追加する
- #sales_int
- #文字列を整数へ変換する
- #sales_str
- #date_str
- #リストから要素を取り出す
- #それぞれを専用のリストに追加
- #日付と売上を別々に取り出す
- #・完成した2つのリストをターミナルへ表示する
- #・それぞれのリストへデータを蓄積する
- #・日付用と売上用の空リストを準備する
- #前講で作成した