今日は、前半はじゃんけんゲームを通じてif文とループの復習、後半はpandasを用いたExcel/CSVデータの取り込みと基本的な操作を学びました。
✅ 本日の内容まとめ
- random関数で「じゃんけんゲーム」
- エクセル、CSVファイルの読み込みと、データフレーム型(表形式のデータ)の操作
Python講座5日目
✊ Pythonで「じゃんけんゲーム」を作ってみた!
🔹 概要:
random.choice()
でプログラムが手を決定- ユーザー入力と比較して勝敗を判定
- 「終了」と入力されるまで繰り返しプレイ可能
🔹 改善のポイント:
#python
#解答例
import random #ライブラリのインポート
# 選択肢リスト
choices = ["グー", "チョキ", "パー"] # 変数「choices」にリスト形式で「手」を格納
print("じゃんけんゲームを始めます!「グー」「チョキ」「パー」を入力してください。終了するには「終了」と入力してください。")
while True: #無限ループ開始
# コンピュータの手をランダムに選ぶ
computer_choice = random.choice(choices)
# ユーザーの手を入力してもらう
user_input = input("あなたの手: ")
# ゲーム終了の確認
if user_input == "終了":
print("ゲームを終了します。")
break
# ユーザーの入力が正しいかチェック
if user_input not in choices: # ※「not in choices」については後述
print("エラー: 「グー」「チョキ」「パー」のいずれかを入力してください。")
continue # 直前のif文がaTrueなら、以下のブロックの処理から抜け、whileに戻る
# 結果の表示
print(f"コンピュータの手: {computer_choice}")
# 勝敗の判定
if user_input == computer_choice:
print("引き分けです!")
elif (user_input == "グー" and computer_choice == "チョキ") or \
(user_input == "チョキ" and computer_choice == "パー") or \
(user_input == "パー" and computer_choice == "グー"):
print("あなたの勝ちです!")
else:
print("コンピュータの勝ちです!")
- 自作した際には、「勝敗の判定」の部分で、user_inputの内容(3種類)に対して、それぞれ
if
文の分岐を記述したため、コードがかなり長くなってしまった。解答例ではelifの条件が長いが、可読性は高い。 elif
内の「¥」は、コードを書く際に、本来条件式は横につづいていくが「¥」を記入することで、改行しても同じ横一列と示すための記号。可読性を高める工夫。- 今回、入力ミスの処理には
in
演算子を使って判定
in の使い方
- 反復オブジェクトに対する機能の一つ
- for構文内の「in」とは関係ない
- 「in 反復可能オブジェクト」と記載することで、真偽値が返ってくる
#python
#inの使い方
choices = ["グー", "チョキ", "パー"] #変数choicesにリストを格納
if "グー" in choices: #ifの条件式にin 反復可能オブジェクトを指定
print('はいってる')
#はいってる
🧮 データ操作の世界へ:Excel / CSV の読み込み
🔹 pandasとは?
- 表形式のデータを扱うライブラリ
DataFrame
という構造でデータを操作できるread_excel()
/read_csv()
でデータを取り込める
🔹 ファイル読み込みの例:
#pythonimport pandas as pd #インポートとエイリアス
# Excel読み込み
data = pd.read_excel('C:/Users/training3/chapter2/data.xlsx') #pc環境によってパスは要変更
# CSV読み込み
data_csv = pd.read_csv('C:/Users/training3/chapter2/data.csv')
#変数「data」にエクセル形式のデータフレームを取り込んだ
#「data_csv
」にcsvのデータフレームを取り込んだ
📌パス指定の注意点:
- Windowsでは
\\
か/
を使う(\
だけだとエラーに) shift + 右クリック
→ 「パスのコピー」でフルパスをコピー可能- csv形式の取り込みの場合、日時の情報は単純な数値として認識されるため、後述の日付のソートなどはうまく働かないことがある
🧾 データの基本操作(pandasの関数)
#pythondata.head(5) # 先頭5行
data.tail(3) # 末尾3行
data.info() # サマリー情報の表示
#pythondata.describe(include='all') # 統計情報の確認(文字・数値すべて)
📌 .info()
を使うと、型(int, object, datetime64 など)が確認可能
📌 .descrbe()
を使うと、統計情報(最大値、平均値 など)が確認可能
🔍 データの抽出 .loc[] .iloc[]関数
- データフレーム.loc[行番号,’列名’]
- 行番号(index)と列名(colum)を指定し、一つのセルの値(value)を取得する
- データフレーム.iloc[行番号,列番号]
- 列番号を指定したい場合は iloc[,] 関数を使用
🔍 データの絞り込み データフレーム型.query()関数
🔸 基本的な絞り込み
- .query(’絞り込み内容’)と記載する
- 絞り込み内容は、‘ ’ の中に「colum(列名)」を直接打ち込んで条件を設定する
#pythondata.query('金額 < 60000') #「金額」列が60000未満という条件を吐き出す
data.query('30000 <= 金額 < 60000') #金額が30000以上60000未満
data.query('種別 == "スポット"') #「種別」列が「スポット」となっている行のみを表示
🔸 複数条件
#pythondata.query('金額 < 60000 & 種別 == "スポット"')
🔸 日付の範囲指定(Excelの場合)
#pythondata.query('20210913 < 受注日 < 20210924')
📌 CSVでは日付が文字列になるため、扱いに注意(.info()
で確認)
🔤 あいまい検索(部分一致)
- 列名.str.startswith(“文字”) 前方一致
- 列名.str.endswith(“文字”) 後方一致
- 列名.str.contains(“文字”) 部分一致
※ engine='python'
は固定
#python# 責任者が「田中」で始まる
data.query('責任者.str.startswith("田中")', engine='python')
# 部分一致
data.query('責任者.str.contains("中")', engine='python')
🔁 データの並べ替え(ソート)データフレーム型 .sort_values(by=’列名’) ※昇順
#python# 納品期限で昇順
data.sort_values(by='納品期限')
# 納品期限で降順
data.sort_values(by='納品期限', ascending=False)#降順にするは
「, ascending=False」をつける
# 複数列でソート
data.sort_values(by=['納品期限', '金額'])
📌 .sort_values()
は一時的な並び替え。並び替え結果を保持したい場合は新しい変数に改めてデータフレームに代入する必要がある
🧠 所感メモ
pandas
→データフレーム(エクセル的なデータ)のデータ操作 実務でエクセルを使用する際に必須なライブラリ- エクセルの内部の処理についてちょっと垣間見えた気がする
- ExcelとCSVでは読み込まれる型が異なる点に注意が必要(とくに日付)
🔜 次回予告
- データの集計
- エクセルファイルの保存など
コメント