📝 Python学習記録 #5|じゃんけん演習から、Excel・CSVの取り込み&データ操作へ

プログラミング講座の記録

今日は、前半はじゃんけんゲームを通じて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() でデータを取り込める

🔹 ファイル読み込みの例:

#python

import 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の関数)

#python

data.head(5) # 先頭5行
data.tail(3) # 末尾3行
data.info() # サマリー情報の表示
#python

data.describe(include='all') # 統計情報の確認(文字・数値すべて)

📌 .info()を使うと、型(int, object, datetime64 など)が確認可能
📌 .descrbe()を使うと、統計情報(最大値、平均値 など)が確認可能


🔍 データの抽出 .loc[] .iloc[]関数

  • データフレーム.loc[行番号,’列名’]
    • 行番号(index)と列名(colum)を指定し、一つのセルの値(value)を取得する
  • データフレーム.iloc[行番号,列番号] 
    • 列番号を指定したい場合は iloc[,] 関数を使用

🔍 データの絞り込み データフレーム型.query()関数

🔸 基本的な絞り込み

  • .query(’絞り込み内容’)と記載する
  • 絞り込み内容は、‘ ’ の中に「colum(列名)」を直接打ち込んで条件を設定する
#python

data.query('金額 < 60000') #「金額」列が60000未満という条件を吐き出す
data.query('30000 <= 金額 < 60000') #金額が30000以上60000未満
data.query('種別 == "スポット"') #「種別」列が「スポット」となっている行のみを表示

🔸 複数条件

#python

data.query('金額 < 60000 & 種別 == "スポット"')

🔸 日付の範囲指定(Excelの場合)

#python

data.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では読み込まれる型が異なる点に注意が必要(とくに日付)

🔜 次回予告

  • データの集計
  • エクセルファイルの保存など

コメント

タイトルとURLをコピーしました