Share
Embed
Transcript
43 slides
-
自己紹介 • 定年間近の事務系サラリーマン 主なツール:Excel • Python歴11年の独学趣味プログラマー • お仕事でもPythonでデータ分析 • PyConJP2016,2018,2021,2024登壇
今年は落ちました • Python Boot Camp TA ☓ 5回 行けるところなら行く • Python関連書籍を中心に出版前レビューx20冊超 依頼は断らない • 最近は生成AIに頼りがち -
トーク内容 話すこと • 社内向けに開催した「生成AIを活用してPythonで業務効率化」講座 の共有可能なコンテンツ • 生成AIの助けを借りて初学者が一歩前に進むためのヒント 話さないこと • 生成AIでらくらくコーディング的な話
※あくまで私個人の意見であり,所属組織の方針を代表するものではありません -
第101回のトークでのまとめ(再掲) • 職場にPythonを広めるとき,ハードル下げるのはいいけど,あまり過保護に してしまうと自力で書くことができず,だんだん忘れていってしまう • 自分で考えて書く経験は大事。チャンスを奪わないよう,見守るし支えるけ ど手は出さない • 非エンジニアでもコーディングを楽しめるようになる(こともある) 今日の話が「正解」だとは思っていません。
皆さんのやりかた,特に非エンジニアにコードの書き方を身につけてもらう 方法についてのご意見・アドバイスお待ちしております。 -
受講対象 • 全職種 • ただし、Pythonの基礎を学んだことがある人 ◦ Pythonコードの説明しないので、読んだこともない人はお断り ◦ 独学OK、本読んで挫折OK、学生時代に習ったけど忘れたOK ◦
他言語の経験ある人ならYouTube動画ちょっと見ればOK • これからPython学びたい人向けには別途入門講座やるよ →30人(某社従業員の約5%、なぜかエンジニアも数名)が応募 -
事前準備 • 某社はIT部門が管理しやすいように全員のPCが同スペックのWindowsマシン • ただしソフトをインストールするには事前申請と審査、そしてIT部門に 作業してもらう必要がある • まずIT部門に根回し ◦ 30人くらい一気に申請が来るので覚悟しといてね
◦ 申請者にインストールするのは同じソフト(Python3.13とVSCode) ◦ 受講者に配布する手順書も事前共有 • 受講者には申請書の書き方と手順書を伝授 (プロキシ設定のせいで全員必ずひっかかるpipエラーの回避方法含む) -
生成AIにスクリプトを書いてもらうには(座学) • 要件を具体的に伝える ◦ プログラムは要するに「入力」「処理」「出力」 ◦ 「分析したい」→「〇〇列の人数、平均、SDを算出したい」「AとBの相関を調べたい」 ◦ 入力、出力は文字で説明するよりサンプルファイルを添付すると早い ◦
過剰に複雑なスクリプトが返ってくることがあるので初心者向けにシンプルに、とつける • いきなり理想形ではなく必要最小限から ◦ 処理をさらに「入力」「処理」「出力」に分解して小分けにする ◦ 複雑なものを最初から作ろうとすると、うまくいかなかったり直したいときにお手上げ ◦ 最初にコア部分を完成させて、徐々に便利にしていく ◦ もちろん簡単なものなら一発で書いてもOK -
生成AIを使ってPython文法を復習しよう(実習) 1. Pythonで1から100までの数字を足す、初心者が文法の復習をするのにお勧めのプログ ラムを1つだけ書いてください 2. forループってなんでしたっけ。あと、どうしてこれが1から100までの合計になるの か(101までじゃないのか)を詳しく教えてください 3. 3の倍数だけを足すように修正してください 4.
今度は3の倍数のときにFizz、5の倍数のときにBuzz、両方の倍数のときにFizzBuzz、 いずれでもないときに元の数字を出力するように書き換えてください -
生成AIを使ってPython文法を復習しよう(実習) 1. Pythonで1から100までの数字を足す、初心者が文法の復習をするのにお勧めのプログ ラムを1つだけ書いてください 2. forループってなんでしたっけ。あと、どうしてこれが1から100までの合計になるの か(101までじゃないのか)を詳しく教えてください 3. 3の倍数だけを足すように修正してください 4.
今度は3の倍数のときにFizz、5の倍数のときにBuzz、両方の倍数のときにFizzBuzz、 いずれでもないときに元の数字を出力するように書き換えてください 5. 続いて、FizzBuzzを関数にして、1から100の数字のFizzBuzzの結果を印字するプログ ラムに書き換えてください -
生成AIを使ってPython文法を復習しよう(実習) 1. Pythonで1から100までの数字を足す、初心者が文法の復習をするのにお勧めのプログ ラムを1つだけ書いてください 2. forループってなんでしたっけ。あと、どうしてこれが1から100までの合計になるの か(101までじゃないのか)を詳しく教えてください 3. 3の倍数だけを足すように修正してください 4.
今度は3の倍数のときにFizz、5の倍数のときにBuzz、両方の倍数のときにFizzBuzz、 いずれでもないときに元の数字を出力するように書き換えてください 5. 続いて、FizzBuzzを関数にして、1から100の数字のFizzBuzzの結果を印字するプログ ラムに書き換えてください 6. Pythonの基本的なデータ型について教えてください 7. リスト型について、特に操作方法を詳しめに教えてください -
パッケージのインストールについて(座学) • ちゃんとやるにはプロジェクトごとに仮想環境を作る • ぶっちゃけ社内ならこれで十分、というお勧めセットをご用意しました (第1回と第2回の間の宿題でpip install -r requirements.txt は全員実行済み)
• 使わないパッケージもあるけど大して容量食わないのでご安心を • 足りないときはAppendixの仮想環境(スコープ外)の作り方読んでね -
お勧めセットの中身 分類 ポイント パッケージ名 データ分析定番 データ分析のスターターキット pandas, numpy, jupyterlab, tqdm
統計処理・機械学習 機械学習・統計分析の三種の神器 scipy, statsmodels, scikit-learn Excel操作 Excelファイル処理の三種の神器 xlrd, openpyxl, xlwings グラフ・可視化 データ分析結果をビジュアル化 matplotlib, plotly 簡易Webアプリ作成 データ分析と親和性が高いWebアプ リ作成ツール streamlit コードフォーマッター Pythonスクリプトを読みやすく自動成 型 black, isort, jupyterlab-code-formatter -
実習の前に(座学) • 実習では面倒な形のExcelファイルを読み込む • 要件の書き方振り返り ◦ 「入力」「処理」「出力」を具体的に ◦ 処理は小分けに •
最初からすごいのを作ろうとするとハマるリスクが増大 ◦ 元のファイルをそのまま読み込みたい ◦ 読み込むファイルをUIで選びたい ◦ 集計内容や集計列をUIで指定したい ◦ 集計結果をいい感じに整形してパワポに貼り付けたい →全部できるっちゃできる。でもハマる • コア(集計)処理だけにする ◦ ファイルは扱いやすい形に手で加工してから読み込む -
VS Codeのセットアップ(実習) 1. D:¥Home¥ai-lessonというフォルダを作る 2. そこに「import this」だけ書かれたzen_of_python.pyをコピー 3. 作成したフォルダをVS Codeで開き、zen_of_python.pyを開く
4. VS CodeがPython拡張を入れるようお勧めしてくるので入れる 5. zen_of_python.pyを実行してみる これで全員が新規スクリプトをコピペして実行する環境が完成 -
Excelファイルを読み込む(実習) あなたは優秀なPythonプログラマーです。 以下の要件を満たすPythonスクリプトを書いてください # 要件 - 添付したsample2.xlsxを読み込む - 列ごとの解答人数と、回答の平均値を算出する -
集計結果は、質問、人数、平均値の3列にしてresult.xlsxとして出力 # 注意事項 - 初心者にもわかりやすくシンプルな設計にする - 適切なコメントをつける - スクリプトの解説をつける 入力 処理 出力 -
複数行ヘッダ、セル結合ありのファイル(実習) # 要件 - 添付したセル結合&複数行ヘッダ.xlsxを読み込む - 列名は2行目を使う。 ただしセル結合で2行目がない場合は1行目の値を使う - 重複を避けるためB~S列は末尾に「_1回目」、
T~AK列は末尾に「_2回目」とつける - 読み込んだデータを「加工後.xlsx」として保存する 入力 処理 出力 -
複数のシートを1つにまとめる(実習) # 要件 - 添付した複数シート.xlsxを読み込む - 「サマリ」シート以外のすべてのシートを読み込む (データ行数がすべて等しいはず) - 読み込んだデータを横に並べて1人1行のデータを作る
(氏名でマッチングせず単純に横に並べる) - 各シート共通仕様 - 1行目は読み込まない - 2行目が列名。2行目に値がないときは3行目が列名 - データは4行目以降 - シートを識別するため列名末尾にシート名をつける 例(氏名_1回目) - 結合したデータを「シート結合結果.xlsx」として保存する 入力 処理 出力 -
複数のファイルを1つにまとめる(実習) # 要件 - dataフォルダ(サブフォルダ含む)の回答ファイルをすべて読み込む - 回答ファイルは添付した「回答(ここに名前).xlsx」と同じレイアウト - 回答ファイルのK列にQで始まる設問ID、L列に回答(1~4またはブランク) -
読み込んだファイルの回答をまとめて回答一覧を作る - 回答一覧のレイアウトは「ファイル名、社員番号、氏名、設問ID、Q1~Q40」 - 出来上がった回答一覧は「回答一覧.xlsx」というファイル名で出力する 入力 処理 出力 -
他人が書いたスクリプトを理解する(実習) • 来週の自分も"他人" • あなたは優秀なPythonプログラマです。添付したPythonスクリプトを解読 して、初心者にもわかりやすいように解説してください # 解説のポイント - 概要:何をしてくれるスクリプトかを「入力」「処理」「出力」ごとに
- 処理の流れ:ステップごとの処理の詳しい説明 - プログラム内で定義している関数、変数の一覧 - 〇〇行~〇〇行について特に詳しく