データサイエンス実践A
授業担当:熊野 英和 (kumano@create.niigata-u.ac.jp)
実施方法:Zoom(オンライン) (月・木3限)
第1回レポートの 解答例 を掲載しました。(2022/4/30)
Zoom情報:https://zoom.us/j/91736784474
ミーティングID: 917 3678 4474 / パスコード: 258703
出席は、CESのレポート機能によるipynbファイルのアップロードで確認します。在籍番号と氏名のチャット入力は無効です。
第3回課題解答例(問1)はこちら。New! (2022/6/6 掲載)
課題、お疲れさまでした。 皆さんよくできていました。 ただ、複数条件の処理に手こずっていた人が多いようでした。
受講者の皆様へのお願い
本講義の独自アンケートを作成しました。 こちらから、是非ご回答ください【回答期限:6/5 (Sun.)】。
DB実践Bを履修する学生へ
DS実践Bの登録ページはこちら。 (認証コード:834002)
グラフ描画のための参考サイト (old versionと出るサイトもあるが、こちらの方が見やすいです。)
- Matplotlib公式
- Matplotlib.pyplot公式
- matplotlib入門
- Matplotlib超入門(1)
- Matplotlib超入門(2)
- Matplotlib超入門(3)
- グラフ全般
- マーカーの種類
- マーカー塗りの種類
- 線の種類1
- 線の種類2
- 線+マーカーの種類
- カラーコード
なお、可視化ツールであるmatplotlibには、pyplotスタイルと、オブジェクト指向スタイルがあります(正直、混乱の元となっていると思います)。ネットで検索する際には、どちらのスタイルかをよく確認して自分のプログラミングの参考にするようにして下さい。ざっくり言えば、plt.*** で何でもやってしまうのがpyplotスタイル、ax.*** と出てくるのがオブジェクト指向スタイルです。最近では、どうもオブジェクト指向スタイルで書かれた資料が多くなりつつある気がします。
ですが、この講義では、初心者により分かりやすいと思われる pyplotスタイルを採用します。 本格的に使いこなしたい場合は、オブジェクト指向スタイルも併せて学ぶといいでしょう。その場合は、こちらの資料を一読されることをお勧めします。
データ処理&データ可視化関連資料(CQ出版 Interface)
- Matplotlib虎の巻 3ページ以降のpyplot / オブジェクト指向 style 間の対応表は便利!
- Numpy クイックリファレンス
- 効率的な数値演算のためのライブラリ:Numpy
- データ加工/処理のためのライブラリ:Pandas
- データ可視化のためのライブラリ:Matplotlib
講義時使用データ
このファイル "dsa_data1.xlsx" をダウンロードし、jupyter notebook で cd . として表示されるフォルダの中に入れること。)
時系列データの例:Dow Historical Data (Excel)
第15講用データ (Excel)
データの整形(Word使用)
男子高校生100人の体重のデータ (kg) (引用:データサイエンス概説 / 基礎 テキスト p.5)
アポストロフィ「’」入力方法とWord自動修正機能の停止手順
講義資料 (zoom / notebook) 置き場
(Zoomファイルは保持期限7日です。早めにDL下さい。自習専用。第三者へのファイル提供禁止。)
- 4/11(第2講分)Zoom (DL key: 0411) notebook
- 4/14(第3講分)Zoom (DL key: 0414) Input文補足動画
- 4/18(第4講分)資料なし
- 4/21(第5講分)Zoom (DL key: 0421) notebook
- 4/25(第6講分)Zoom (DL key: 0425) notebook
- 4/28(第7講分)Zoom (DL key: 0428) notebook
- 5/02(第8講分)Zoom (DL key: 0502) notebook
- 5/09(第9講分)Zoom (DL key: 0509) notebook
- 5/12(第10講分)Zoom (DL key: 0512) notebook
- 5/16(第11講分)Zoom (DL key: 0516) notebook
- 5/19(第12講分)Zoom (DL key: 0519) notebook
- 5/23(第13講分)Zoom (DL key: 0523) notebook
- 5/26(第14講分)Zoom (DL key: 0526) notebook1 notebook2
- 5/30(第15講分)Zoom (DL key: ----) notebook
レポート課題
第1回(締切:4/29日(金・祝)23:59)
(必答問題4問)
- あるクラスには、6名の学生が在籍している。架空の在籍番号と学生氏名の辞書を作り、このクラスのある在籍番号を与えて対応する学生氏名を取り出すプログラムを作成し、その動作を確認せよ。
- 引数を3つ与え、それらの和と積を返す関数を作成し、その関数を呼び出して動作を確認せよ。
- for文またはwhile文を使って、1からinput文で与えた整数値までの、「全整数の和」を計算するプログラムを作成せよ。与えた整数値は和に含むこと。
- 3と同様に、1からinput文で与えた整数値までの、「全偶数の和」を計算するプログラムを作成せよ。与えた整数値は和に含むこと。
(発展:任意課題2問)
- 架空の在籍番号のリストと学生氏名のリストを別々に作成し(もちろん要素数は一致)、その2つのリストから必答問題1で用いる辞書を作成せよ。(ヒント:zip なる機能を用いるとスマートに書けるかも)
- あるオリジナルデータをとある時間間隔で取得したが、時間間隔を細かく取りすぎたため間引きたい。 2個おき、3個おき・・・など、自身で指定する任意の間隔で間引いたデータを得るプログラムを作成せよ。なお、オリジナルのデータはこちらを使って生成せよ。(乱数なので実行ごとに値は変わる)(ヒント:enumerate なる機能を用いるとスマートに書けるかも)
解答例(2022/4/30 掲載)
第2回(締切:5月18日(水) 23:59)
- 文部科学省が実施した学校保健統計調査のデータのうち、小学生(各ページ(男女)に2つずつあるが上の方を用いよ)6学年分の身長または体重何れかの平均値を示す折れ線グラフをエラーバー付きで描画し、そのipynbファイルを提出せよ。ただし、横軸は6から11歳の6点とし、男女が比較できるよう1つのグラフに男女両方のプロットを含むこと。 また、データはipynbファイル上に記述しても、Excelファイルを作成して読み込んでも構わない。
- 散布図を用いた可視化に相応しい何らかのデータを用意し、散布図を作成の上、保存したグラフをパワーポイント1枚に張り付けてpdfファイルに変換したものを提出せよ。なお、透明化処理をしていないものとしたものを並べて張り付けること(デザインは変えて構わない)。前問と同様、データはipynbファイル上に記述しても、Excelファイルを作成して読み込んでも構わない。
何れの問題も、グラフとしての体裁(グラフタイトル、軸名など)を整えること。 マーカーなどのグラフデザインについては、自由に遊んでよい(むしろ遊んでください)。
解答例(2022/5/19 掲載 DL可) 解答例(2022/5/19 掲載 Preview)
第3回(締切:6月5日 23:59)
以下の2つのデータ処理を、別々のnotebookに分けて行え。提出は、それぞれのipynbファイルを対応する場所にUPすること。
問1東京の不動産データ(Excelファイル)を、このリンクから直接notebookに読み込み、以下の情報を取得せよ。
- データ数を取得せよ。
- データの基礎統計量を、describe()により取得せよ。
- データの成約価格の平均値と標準偏差を、describe()に依らずに取得せよ。
- 建築構造と築年の2列を(一時的でなく恒久的に)削除せよ。
- 面積単価の列を追加せよ。ただし、ここでは面積単価を 成約価格 / 専有面積 として定義するものとする。
- 専有面積が300以上の物件を抽出せよ。
- 最寄り駅が「麻布十番」か「大門」で、徒歩10分以内、部屋数が3以上の物件を抽出せよ。
- 7.の条件にさらに何らかの条件を加え、マッチする物件数が10以下になるようにせよ。また、そのときの物件の成約価格の平均値と中央値を求めよ。
- 最寄駅ごとに物件の各データ(徒歩分、専有面積、部屋数、成約価格、面積単価を含むこと。)の平均値を取得し、成約価格の平均値の高い順に並べて上位10件の駅名(または駅名を含むDataframe)を表示せよ。(【難】ヒント:groupby の利用)
- (任意)上記以外に、このデータセットを使って好きなデータ処理・解析、可視化を行ってみよ。
問2 e-Stat 【政府統計の総合窓口】の「時系列表」のデータの中で好きなもの(但し、講義で説明したガソリン販売量以外)を選び、「全国」、「年」のデータを「一括ダウンロード」ボタンのクリックによりDLした上で、そのファイルをnotebookで読み込み、47都道府県の年推移についてのヒートマップを作成せよ。生データ(規格化処理しないもの)、および初年度で規格化したものの2つを作成すること。但し、ダウンロードしたcsvファイルは適宜加工(データの整形やcsvからExcel形式への変換は可、演算は一切不可)してからnotebookに読み込んで構わない。 (難易度高いデータ形式だが)Pandasで整形できるようならそれももちろん可。
ただし、データによってはどういう訳か都道府県でデータの質が違うもの(例えばある県は月単位、ある県は年単位など)があるので、そのようなデータは使わないこと。
問1解答例はこちら。New!
Q&A
Q. mathがインストールされておらず、importできません。
A. Anaconda Prompt の黒い画面で、jupyter notebook と打つ前に、pip install python-math と打ってmath をインストールしてみて下さい。
一般に、pypi と インストールしたいライブラリで検索すると対応する pypi.org のサイトに飛びますので、そこのインストール用のコマンドを実行します。 (本当は conda と pip を混ぜるな、という議論がありますが、この講義の範囲内では気にしなくていいです)
Q. jupyter notebookのmarkdown部分での改行の仕方が分かりません。
A. 改行したい部分で、半角スペースを2つ入れてから改行して下さい。
Q. 授業中に理解が追いつくことができませんでしたので、動画を見直して復習いたします。 その日の課題提出を延長するなどの予定はありますか?
A. 各回のレポートは出席確認の意味合いが強いので、特に延長は考えていません。追いつけない場合は、是非その場で言って頂けると。。。。
Q. plt.savefigでは画像の保存先は指定できないのでしょうか?
A. フルパスで指定すればどこでも保存できます。例えば僕の環境なら、plt.savefig('c:/users/desktop/temp.png') (オプションは省略してます)でデスクトップに ’temp.png' という名前で画像ファイルを保存できます。
Q. 何かの拍子に意図せず必要な入力BOXが消えてしまいました。復活(UnDo)させることはできますか?
A. Jupyter notebookのメニューの Edit から、上から7番目の「Undo Delete Cells」を実行ください。数回分の削除情報が残っているので、数回分の削除が復活可能です。
この講義について
- Zoomを用いた同期型(リアルタイム)の非対面型で実施します。
- 講義資料は、主にCESシステム上の講義のホームページ(https://www.ces-alpha.org/hp/DSA2022)を通して共有します。
- 講義動画は、講義翌日までにUPする予定ですので、復習等にお使いください。ただし、自習用にのみ用いること。講義動画の第三者への配布は禁じます。
- 出席は、その日実施した内容のjupyter notebookの、本システムへの提出により代えます。 CESに提出するipynbファイルの取り出し方法はこちら。
- レポートは、3回を目安に出題する予定です。レポート提出も、本システムのレポート機能を用いて行います。
- 可能であれば、ですが、PCはプログラミング作業用に用い、Zoom画面は他の端末(スマホ、タブレット、他のPC)で視聴しながら受講を進められると便利です。その場合は、複数の端末でZoomに入ってもらって構いません。
データサイエンスのココロ
こちらをお読みください。ビジネス寄りに書かれていますが、そのココロは誰にでも(特に創生学部生には)当てはまります。
「見つける」、「解く」、「使う」をマネージできるように!
Win / Mac ショートカットキーリスト
たとえばこちらを参照してください。 効率的にプログラミングをする上で、是非使いこなしてほしいところです。
この講義とは直接関連しませんが、Excel等ではこれに加えてCtrl +Y もよく使います。あとフラッシュフィルは超便利。
Jupyter notebookの使い方
たとえばこちらを参照してください。
第2講終了時のファイル提出時点での進捗状況
CESアカウントの取得&本授業登録(各自初回講義までに実施)
アカウントの作成方法 に従ってCESシステムのアカウント取得後、https://www.ces-alpha.org/course/register/DSA2022/ にアクセスしてこの講義を登録して下さい。
認証コードは、 903288 です。
本講義受講の心得
創生学部の学生のスペクトルは非常に広く、共通に必要なスキルを求めるのは容易ではありません。が、基本的なデータの整理や可視化は、データを扱う上で何をやるにしても必要な基礎事項です。従って、この講義ではここに着目し、データの可視化手法を中心に学びます。様々なデータを扱い、その整理や可視化を実装できることを目指します。そこで、学習する上でとても大切になってくるのが、「自分で考えて手を動かしながら学ぶこと」です。
この講義の中で、実際に変数の値を変えてみたり、コードを実行して、結果を見てください。基本、上から順に実行するだけで良いのですが、ただコードを眺めているだけでは、データ分析やコーディングのスキルは身につきません。コードをすぐに実行できる環境があるという点が、この講義の大きな特徴です。実際にああでもないこうでもないと試行錯誤することでしか、コーディングスキルは身につきません。この講義で使用するJupyter notebookは、1行1行実行結果を確かめながら進めることができるのが大きな特徴です。あやふやなままで次に進むことなく、何が起こっているのかをきちんと考え、頭の中のイメージと合うかどうかを確認しながら、コーディングをしてみてください。
さらに、色々と動かしている中で「ここの数字や記号を変えたり、別のオプションを使ったらどうなるのだろう」など、疑問やアイデアが浮かんだら、是非実際に試してみてください。プログラミングのよいところは、誰にも迷惑をかけずに自由な発想で試行錯誤できる点です。時間がかかるかもしれません。詰まる時があるかもしれません。英語でエラーが返ってくることもしょっちゅうですがが、そういうときはめげずにエラーメッセージを解読しながら、まずは自分で調べて原因を探ることも大事です。
この講義の中で、わからない用語やプログラムコードなどが出てくることもあると思います。その場合は、プログラミング言語(ここではpython)の正規ドキュメントや検索エンジンを積極的に使って調べていきましょう。はじめは調べたいものがすぐに見つからず、時間がかかるかもしれませんが、慣れてくれば調べるコツも分かってきます。この「調べる力」も、何かを成し遂げる、あるいは形にしていく上ではとても重要です。
また、この講義の内容を全て覚えようなどと思わないでください。あくまでこの講義は、可視化を主な軸として、プログラミングでどのようなことができるのかを学んでもらうためのものであって、逐一コマンドや構文、ライブラリ、細かいオプション機能などを覚えてもらうことを想定していません。学んだばかりの処理は、すぐに使いこなせないかもしれませんが、必要なものは使う頻度も多くなって、そのうち手が覚えて、自然に使えるようになります。実際、現場で働いている多くのエンジニアは、わからないことがある場合は、ネットで探したり、掲示板で聞いたりして、仕事をしています。熊野ももちろんそうです。ですから、初学者の皆さんは、この講義ではプログラミングの基本的な考え方を知り、見よう見まねで手を動かしながらいろいろなプログラムの書き方に触れて、必要な時に振り返って使えれば十分です。後々必要に迫られた時のプログラミングの敷居を下げる、これがこの講義の最大の狙いです。
なにより、自分で考えてコーディングしたものが想定通りに動いて、結果が返ってくるというのはとても楽しいものです。もちろん、泥臭い単純作業もありますが、それを自動化したり、うまく処理できるスクリプトができた時も気分がいいものです。クリエティブな要素も多いです。この講義を通じ、ぜひ皆さんにもその感覚を味わってもらいたいと思います。(東京大学松尾研作成資料を元に一部改変)
例えばこんなこと、できます!
主教材:ゼロからのPython入門講座
こちらの資料(CQ出版 Interface)もよくまとまっています。
主教材が終わった人向けの推奨サイトリスト
好みで選択ください。 自分で見つけた類似のサイトも可です。
- Chainer Tutorial (内の教材):特に、8. NumPy 入門、11. Pandas 入門、12. Matplotlib 入門 あたり。
- PythonエンジニアによるPython3学習サイト(Python基礎)基礎とは言え、主教材よりadvanced な内容を含む
- PythonエンジニアによるPython3学習サイト(Pandas入門)
- PythonエンジニアによるPython3学習サイト(Numpy入門)
- PythonエンジニアによるPython3学習サイト(応用編) Numpy Pandas Matplotlib 統計解析
参考サイト
- Matplotlib公式
- Matplotlib.pyplot 公式
- matplotlib.pyplot.scatter
- matplotlib.pyplot.plot
- Pyplot tutorial
- Matplotlib: markers
- Color example code (old version)
- lines_bars_and_markers example code (old version)(その1 その2)
- Writing mathematical expressions
- Matplotlibを用いた散布図作成方法-まとめ-
- Matplotlibのグラフのスタイルを設定ファイル・スタイルシートで変更
- Hatch style reference (棒グラフ等での網掛けのパターン)
CESでの授業登録とレポート提出
CESのアカウントを持ってない場合、CESの使用手引を参考して作成してください。使用手引