コンテンツにスキップ

勉強会の記録

私が主催・参加している/していた, 勉強会の記録・資料をまとめています.

勉強会

定期的に開催していた/している, 主にオンラインの勉強会です.

現在

  • 物理数学の個人指導: 毎週月曜 20:00-21:30
  • ベイズ統計・機械学習勉強会: 毎週水曜 20:00-21:00

過去

  • アインシュタインの原論文を多言語で読もうの会: 毎週金曜 20:00-21:00
  • 数学・科学の英語記事を読もうの会: 毎週金曜 21:00-22:00
  • 高校生・大人向け中高数学学習会
  • 成人女性向け数学カフェ: 月一, 東京のリアルカフェで開催, 2014年頃. 小数の計算など算数の基本から数学研究レベルの話まで参加者が思い思いの内容に取り組む.
  • IT基礎知識・プログラミング・数学勉強会, 2020/4-2021/4 毎週日曜13:00-15:00
  • 理論物理学者に市民が数学を教える会: 2020/9/28-2021/7/12: 本格的な個人指導に移行
  • ENERGEIA 算数とプログラミングを勉強する会

ベイズ統計・機械学習オンライン勉強会

黒木ノートなどの一部のまとめ

PDFが読み込まれない場合はリロードしてください.

2020-12-23 統計学の基礎

メモ

注意

  • 録画はじめた?

忘れる前に説明

  • 今日: 「統計学の基礎」と称して基礎の部分と用語を整理する
  • 今後: あとで説明する「純粋統計学」の部分を議論する
    • 特にプログラムによるいろいろな検証に興味がある

統計学の基礎

コメントまとめ+TODO
  • 【「確率で記述できるのか」問題】のところはもっと議論 (説明) が必要
    • 何を意図しているか具体例もつける
    • 議論している動画を見直して質問+応答の形で説明を追加する
  • 【理論統計学】の定義
    • 【純粋統計学】との区別はいいとして【応用統計学】との区別がそれほど明らかではない
    • よい分類・よい言葉は引き続き考える
はじめに

ここでは統計学の細々とした話の前に統計学の設定に関してまとめます. 私の観測範囲ではあまり見かけないものの, 統計学をきちんと理解し応用する上で大事だと思ったことを書いています.

基本文献

次の文献を基本に据えています.

まずは「渡辺澄夫, 統計学入門 「主義」 を心配するみなさまに」を読むといいでしょう. 短かさもあるので次に赤池の 2 論文を読んでみてください. 最後の教科書はそれほど簡単ではありません. この講座はこの本を読みこなすための私の基礎体力作りも兼ねて内容を整備しています.

上記文献に書いていないことからはじめる

私がこの講座を作ろうと思ったきっかけの 1 つでもあります. 私にとっての統計学の出発点で, それは統計学の前提と確率論との関係です. 実質的に確率論・統計学という言葉にはいくつかの使い分けがあり, それがおざなりなせいで余計な混乱を生んでいるように思います. これを私の視点で整理することからはじめます. まずは確率論と統計学の整理をしましょう.

確率論と統計学を無理やり分類する

期待値・平均・分散・エントロピーなど確率論と統計学に共通する概念があり, 少なくとも統計学では確率論の諸概念を使うため厳密にわけても大した意味はありません. しかし尤度のように確率論ではあまり出てこない一方で統計学で基本的な概念もありますし, 言葉を用意しておくと便利なように思います. この講座では次のような大まかな分類をした上で呼び方を決めます.

  • 確率論: 数学の 1 分野の確率論を指す. 現代的な公理的確率論と言ってもいい.
  • 純粋統計学: 尤度の数学的性質のように, 統計学の中で純粋に数学の問題として決着がつく・つけられる・つけるべきテーマを扱う分野を指す. 確率論と重なる部分もある.
    • 極限の議論は数学的な山場の 1 つ
    • プログラムを駆使した有限部分の議論がもう 1 つの山場
    • TODO 理論統計学ときちんと区別できるような特徴づけを探し, 対応する議論・説明をつけていく
  • 理論統計学: 応用に使うことを意識した統計学の理論研究を指す. 上述の赤池論文のような内容をイメージしている. 応用統計学に関わる理論といってもいいかもしれない.
    • TODO 必要に応じて細分する
  • 応用統計学: 実データの分析を指す. 「統計が使えるようになりたい」というときの統計.

この中で確率論と純粋統計学は純粋に数学なので「数学」という以上の説明・意味はありません. 純粋統計学は数理統計学と呼ぶ方がいいかもしれませんが, これは定義・守備範囲のはっきりしない既存の「数理統計学」とまぎらわしいので別の言葉をあてました. 応用統計学もそれほど守備範囲のイメージに問題はないでしょう. 問題は理論統計学です.

理論統計学は応用統計学に関わる議論と書いた以上, 応用統計学と重なる部分があります. 理論統計学でイメージしたのは理論物理です. 理論物理ではメインタスクとして, 例えば未知の現象を探るための理論を作ることや, 既存の実験事実を説明するための理論整備があります. 特に前者は実際の実験データを離れて理論物理学者同士が物理の理論を検討します. 「数学」ではなく統計学の議論をするという意味で, 純粋統計学とわけたかったのがここでの分類の意図です. そして「哲学」を含めてよく議論が紛糾しているのがこの理論統計学であろう, という気分を込めています.

確率論を大まかに

確率論は完全に数学です. 適当に確率と呼ばれる概念を設定したうえで, それが「正しい前提」で議論を進めます.

例えば「サイコロを振ったとき, 各目の出る確率は等しいとする」と仮定して批判的に吟味せずに進めます. 確率とは何か, といった問題も一切気にしません.

統計学を大まかに

統計学についてはいろいろな混乱があるようです. それを見ている限り, まずは次のような分類に注意するといいように思います.

  • 応用的な統計学: 実データの分析
    • 記述統計
    • 推測統計
  • 理論的な統計学
    • 思考実験を含む統計学の「理論」の議論, 理論統計学
    • 数学としての統計学, 純粋統計学

あくまでここでの分類で一般的な分類ではありません.

まず大雑把な話からはじめます. 前者の応用面が「本来の統計学」だろうと思います. 英語の statistics は国 state の状態を考えるところから来ていて, 特に記述統計が応用統計の原点でしょう. 推測統計, そして理論研究のモチベーションもあくまでここから来るはずです. 極端に言えば記述統計は全数調査がもとにあり, 統計学の適用対象の広がりに合わせて記述統計だけでは議論しきれない部分が出てきます. その部分を埋める適切な推論法が必要で, それが推測統計の理論と実践にあたります. 純粋に数学的な理論とそれを統計学としてどう解釈するかが重要で, この解釈に関わる理論整備が先の理論統計学の仕事の 1 つです.

統計学の暗黙の前提

図も入っていて明確なので渡辺さんの次のスライドを参考にしましょう.

このP.13やP.16を問題にします. 特にP.16では具体的に「統計数理とモデリング」というタイトルがついていて, 「統計学」は数理モデリングの 1 分野であるとされています. 特に次の図式に着目しましょう. \begin{align} \begin{tikzpicture}[auto] \node (a) at (0, 1.2) {未知の分布}; \node (x) at (2.5, 1.2) {データ}; \node (b) at (0, 0) {推測された分布}; \node (y) at (2.5, 0) {統計的諸量}; \draw[->] (a) to (x); \draw[->] (x) to node{モデルと事前分布} (y); \draw[<->] (a) to node[swap] {誤差の推定} (b); \draw[<-] (b) to (y); \end{tikzpicture} \end{align}

「統計学」はこの未知の分布をどう推測するかが課題とされています. そして次のような記述があります.

  • P.14: データを発生している真の分布は不明である
  • P.21: 正しい主義は存在しない
  • P.21: 正しい方法も存在しない
  • P.21: 好きな方法を使ってよいが結果は常に間違っている
  • P.21: どのくらい間違っているかを数学的に知ることができる

私がここで問題にしたいのはそもそも「統計学」は数理モデリングであること, そして未知の分布の仮定です. つまり「統計学」はあくまで\coloredtextbf{真の分布があると仮定}した上で, その真の分布を推測する理論なのです. そもそも真の分布があるかどうか, \coloredtextbf{調査対象を確率分布で記述するのが正しいか・適切かどうか}を問題にしていません. 確率論が確率とは何かを問わない数学であるように, 「統計学」は問題を確率で記述できることを疑わない数学の側面があるのです.

「確率で記述できるのか」問題

例えば天気予報を考えてみましょう.

  • 「明日の東京での降水確率は80\%です.」

自然現象を考える上では物理が基本なので物理から考えてみます. 降水確率の正確な定義はともかく, 物理としては明日の東京の天気は物理法則から完全に決まっているとみなすべき現象で, 確率的に決まる現象ではありません. 一方で現実的な問題として物理法則, 特に数学としての微分方程式の初期条件を厳密に・正確に特定しきれない問題があり, その不確定さを補うために確率論を援用しています. ここで確率論を援用していいかどうかは完全に非自明です. 天気予報の精度がいいか悪いかという以前の話です.

先程紹介した基礎文献によれば「統計学」はあくまで数理モデリングです. 「統計学」による推測結果が正しいかどうかという以前に, 「統計学」または確率論を使った記述が適切かどうかという問題があります. 自明な人には自明なのでしょう. しかしあまりにも言及がなさすぎるように思います. 「哲学」的な統計学の正しさの議論の前に, 数理モデリングとしての統計学の立ち位置を明確にすべきであり, 私は先程の図式は次のように書くべきだと考えています. \begin{align} \begin{tikzpicture}[auto] \node (z) at (-4.0, 1.2) {解析対象}; \node (a) at (0, 1.2) {未知の分布}; \node (x) at (2.5, 1.2) {データ}; \node (b) at (0, 0) {推測された分布}; \node (y) at (2.5, 0) {統計的諸量}; \draw[->] (z) to node{存在を仮定} (a); \draw[->] (a) to (x); \draw[->] (x) to node{モデルと事前分布} (y); \draw[<->] (a) to node[swap] {誤差の推定} (b); \draw[<-] (b) to (y); \end{tikzpicture} \end{align}

アンケート

毎回アンケートを取っています. 質問や要望がある場合もこちらにどうぞ.

アンケートは匿名なので気楽にコメントしてください. 直接返事してほしいことがあれば, メールなど適当な手段で連絡してください. 返事は確約できませんが, 適当な手段でコンテンツに反映させていきます.

進捗・対応メモ

2020-12-23

2021-01-06

2021-01-13

2021-01-20

2021-01-27

2021-02-03

2021-02-10

2021-02-17

  • 004_KL_information_and_descriptive_statistics.ipynb
  • 「カルバック-ライブラ情報量と記述統計」
  • 「0.23.3.12 最尤法で予測精度が下がる数値実験の案内」で引用されているLASSOの計算ノートブックのコードを一通り眺めた
  • グラフ・アニメーションもいくつか見た
  • 次回は同じく「カルバック-ライブラ情報量と記述統計」の「0.23.3.13 平均と分散の特徴づけ」の予定

2021-02-24

  • お休み

2021-03-03

2021-03-10

  • お休み

2021-03-17

  • 「0.23.4.13 平均と分散の特徴づけ」から
  • 「0.23.4.20 中央値の特徴づけ」まで

2021-03-24

  • お休み

2021-03-31

  • 録画を忘れずに
  • 予定: 0.23.4.21「中央値と中央値との差の絶対値の平均とラプラス分布モデルによる推定」から
  • 0.23.4.28 「ガンマ分布モデルの汎化誤差」
  • 次回: 0.23.4.29 「ガンマ分布モデルの最尤推定」から
  • メモ
    • 0.23.4.22 ラプラス分布モデルによる最尤推定 正規分布モデル?
    • log p(x|α, θ) 全体にマイナスがいる
    • ディガンマをお絵描きする

2021-04-07

  • お休み

2021-04-14

  • 録画を忘れずに
  • 0.23.4.29 「ガンマ分布モデルの最尤推定」から
  • 0.23.6.7「両側検定に対する注意」まで
  • 次回予定: 「0.23.6.6 正規分布モデルによる母集団平均に関する両側検定の作成」の復習から

2021-04-21

  • 予定: 「0.23.6.6 正規分布モデルによる母集団平均に関する両側検定の作成」の復習から
  • 「0.23.7.5 例」まで
  • 次回予定: 「0.23.7 最小二乗法の信頼区間と予測区間」の設定復習から
  • 限定公開の動画タイトル『2021-04-21 ベイズ統計勉強会 黒木ノートの勉強その11 正規分布モデルとt分布による母平均の仮説検定と区間推定, 最小二乗法の信頼区間と予測区間』

2021-04-28

  • 「0.23.7 最小二乗法の信頼区間と予測区間」終了
  • ipynb置き場
  • 限定公開の動画タイトル『2021-04-28 ベイズ統計勉強会 黒木ノートの勉強その12 最小二乗法の信頼区間と予測区間』
  • 次回予定: 「0.23.8 TODO 分割表でのピアソンの $\chi^2$ 統計量」
  • GW中に富谷昭夫・著『これならわかる機械学習入門』の準備する?

2021-05-05

  • GW でお休み

2021-05-12

  • 都合によりお休み

2021-05-19

  • 「0.23.8.7 周辺度数がすべて固定されている分割表の独立性を満たす確率分布の漸近挙動」まで
  • ipynb置き場
  • 限定公開の動画タイトル『2021-05-19 ベイズ統計勉強会 黒木ノートの勉強その13 分割表でのピアソンの $\chi^2$ 統計量 その 1』
  • 次回予定: 「0.23.8.8 ピアソンの $\chi^2$ 統計量と $G$ 統計量の定義」から
  • MISC 株×データサイエンスについて
    • 実データ分析事例として面白そう
    • けっこうなボリュームの資料がある
    • データは適当な定型データが得られるだろうから, 一度プログラムを整備しておけば, プログラムの使い回しで記述統計・機械学習がずっと回せる
    • プログラムを書くのも計算するのもいいが, 実際に自分達でデータ分析をするのもとても大事でこの題材に良さそう.

2021-05-19

  • 「0.23.8.7 周辺度数がすべて固定されている分割表の独立性を満たす確率分布の漸近挙動」まで
  • ipynb置き場
  • 限定公開の動画タイトル『2021-05-19 ベイズ統計勉強会 黒木ノートの勉強その13 分割表でのピアソンの $\chi^2$ 統計量 その 1』
  • 次回予定: 「0.23.8.8 ピアソンの $\chi^2$ 統計量と $G$ 統計量の定義」から
  • MISC 株×データサイエンスについて
    • 実データ分析事例として面白そう
    • けっこうなボリュームの資料がある
    • データは適当な定型データが得られるだろうから, 一度プログラムを整備しておけば, プログラムの使い回しで記述統計・機械学習がずっと回せる
    • プログラムを書くのも計算するのもいいが, 実際に自分達でデータ分析をするのもとても大事でこの題材に良さそう.

2021-05-26

  • 「0.23.8.8 ピアソンの $\chi^2$ 統計量と $G$ 統計量の定義」から「0.23.8.12 分割表での対数尤度比の計算: 分割表$A = \rbk{a_{ij}}$に制限がない場合」まで
    • ipynb も確認
  • ipynb置き場
  • 限定公開の動画タイトル『2021-05-26 ベイズ統計勉強会 黒木ノートの勉強その14 分割表でのピアソンの $\chi^2$ 統計量 その 2』
  • 次回予定: 「0.23.8.13 分割表での対数尤度比の計算: 分割表$A = \rbk{a_{ij}}$の総和$\sum_{i,j} a_{ij} = n$が一定の場合」

2021-06-02

  • 「0.23.8.13 分割表での対数尤度比の計算: 分割表$A = \rbk{a_{ij}}$の総和$\sum_{i,j} a_{ij} = n$が一定の場合」から0.23.8の終わりまで
  • ipynb置き場
  • 限定公開の動画タイトル『2021-06-02 ベイズ統計勉強会 黒木ノートの勉強その15 分割表でのピアソンの $\chi^2$ 統計量 その 3』
  • 次回予定: 「最尤法とカイ二乗検定の基礎」(ウィルクスの定理)

2021-06-09

  • 「「最尤法とカイ二乗検定の基礎」(ウィルクスの定理)」から「0.23.13.10.1最尤法の基礎」まで
  • 限定公開の動画タイトル『2021-06-09 ベイズ統計勉強会 黒木ノートの勉強その16 最尤法とカイ二乗検定の基礎 その 1』
  • 次回予定

2021-06-16

2021-06-23

2021-06-30

2021-07-07

2021-07-14

2021-07-21

2021-07-28

2021-08-04

2021-08-11

2021-08-18

2021-08-25

2021-09-01

2021-09-08

2021-09-15

  • 都合により中止

2021-09-22

2021-09-29

  • お休み

2021-10-06

2021-10-13

2021-10-20

諸事情によりお休み.

2021-10-27

2021-11-03

2021-11-10

2021-11-10, 2021-11-17, 2021-11-24,

  • お休み

2021-12-01

2021-12-08

  • お休み

2021-12-15

2021-12-22

2022-01-12

2022-01-19

2022-01-26

2022-02-02

2022-02-09

2022-02-16

  • お休み

2022-02-23

2022-03-02

2022-03-09

  • 都合によりお休み

2022-03-16

  • 都合によりお休み

2022-03-23

  • YouTube動画のタイトル(予定)「2022-03-23 ベイズ統計勉強会 JuliaのStatistics読解 第1回」
  • 今回: Juliaのソースコード読解, StatsBase
    • JuliaStats.orgの上の方から
    • JuliaStatsのStatsBase.jlを読みはじめた.
    • 実際のプログラムとしてのstc/StatsBase.jlを眺め, これのimport順に読む.
    • common.jl終了
    • weights.jl: Base.setindex!まで終わり.
  • 次回: StatsBase.jl, weights.jl のvarcorrectionから

2022-03-30

  • YouTube動画のタイトル「2022-03-30 ベイズ統計勉強会 JuliaのStatistics読解 第2回」
  • 今回: Juliaのソースコード読解, StatsBase
    • JuliaStats.orgの上の方から
    • StatsBase.jl, weights.jl のvarcorrectionから
    • StatsBase.jl, weights.jl のL.332, Base.getindexまで
  • 次回: StatsBase.jl, weights.jlのL.334から

2022-04-06

  • YouTube動画のタイトル(予定)「2022-04-06 ベイズ統計勉強会 JuliaのStatistics読解 第3回」
    • 録画忘れたので動画なし.
  • 今回: Juliaのソースコード読解, StatsBase
    • JuliaStats.orgの上の方から
    • StatsBase.jl, weights.jl のvarcorrectionから
    • StatsBase.jl, weights.jl のquantile, L.769まで
  • 次回:
    • StatsBase.jl, weights.jl のquantile, L.771, quantileから

2022-04-13

  • YouTube動画のタイトル(予定)「2022-04-13 ベイズ統計勉強会 JuliaのStatistics読解 第4回」
  • 今回: Juliaのソースコード読解, StatsBase
    • StatsBase.jl, weights.jl のquantile, L.771, quantileから
    • StatsBase.jl, weights.jl終了, scalarstats.jlのmodeまで
  • 次回:
    • StatsBase.jl, scalarstats.jlのL81, modesから

2022-04-20

  • 都合によりお休み

2022-04-27

  • 動画: 撮影忘れ
  • 今回: Juliaのソースコード読解, StatsBase
    • StatsBase.jl, scalarstats.jlのL81, modesから
    • 同ファイル, L625, genvarまで
  • 次回: StatsBase.jl, scalarstats.jlのL627, totalvarから

2022-05-04

  • GWでお休み

2022-05-11

  • YouTube動画のタイトル(予定)「2022-05-11 ベイズ統計勉強会 JuliaのStatistics読解 第5回」
  • 今回: StatsBase.jl, scalarstats.jlのL627, totalvarから robust.jlの最後まで
  • 次回: StatsBase.jl, deviation.jlの最初から

2022-05-18

  • YouTube動画のタイトル(予定)「2022-05-18 ベイズ統計勉強会 JuliaのStatistics読解 第6回」
  • ちょっとアナウンス
  • 今回: StatsBase.jl, deviation.jlの最初からcounts.jlのL.212, proportions()関数まで
  • 次回: counts.jlのL.215, _normalize_countmap()関数から

2022-05-25

  • YouTube動画のタイトル(予定)「2022-05-25 ベイズ統計勉強会 JuliaのStatistics読解 第7回」
  • 今回: counts.jlのL.215, _normalize_countmap()関数からtoeplitzsolvers.jlまで
  • 次回: rankcorr.jlから

2022-06-01

  • 都合により休止

2022-06-08

  • YouTube動画のタイトル(予定)「2022-06-08 ベイズ統計勉強会 JuliaのStatistics読解 第8回」
  • 今回: rankcorr.jl対応
  • 次回: signalcorr.jlから

2022-06-15

  • YouTube動画のタイトル(予定)「2022-06-15 ベイズ統計勉強会 JuliaのStatistics読解 第9回」
  • 今回: signalcorr.jl全体終了
  • 次回: partialcor.jlから
  • メモ
    • 勉強会で見つけた問題を直してもらえた模様: issue

2022-06-22

  • YouTube動画のタイトル(予定)「2022-06-22 ベイズ統計勉強会 JuliaのStatistics読解 第10回」
  • 今回: partialcor.jlから, hist.jlのL115, abstract type AbstractHistgramまで
  • 次回: hist.jlのL.118, Histgram <: AbstractHistgramの型のコメントから

2022-06-29

  • YouTube動画のタイトル(予定)「2022-06-29 ベイズ統計勉強会 JuliaのStatistics読解 第11回」
  • 今回: hist.jl, Histgram <: AbstractHistgramの型のコメントからL427 float関数まで
  • 次回: hist.jl, L430 normalize!関数から

2022-07-06

  • YouTube動画のタイトル(予定)「2022-07-06 ベイズ統計勉強会 JuliaのStatistics読解 第12回」
    • 録画忘れたので動画なし
  • 今回: hist.jl, L430 normalize!関数から
  • 次回: hist.jl終了, pairwise.jl L.153の_pairwise関数まで

2022-07-13

  • YouTube動画のタイトル(予定)「2022-07-13 ベイズ統計勉強会 JuliaのStatistics読解 第13回」
  • 今回: pairwise.jl, L.189のpairwise!関数からreliability.jl, misc.jl, sampling.jlのL.117、samplepair関数まで
  • 次回: L.122のknuths_sample!から

2022-07-20

  • YouTube動画のタイトル(予定)「2022-07-20 ベイズ統計勉強会 JuliaのStatistics読解 第14回」
  • 今回: sampling.jl, L.122のknuths_sample!からsampling.jl, L716のnaive_wsample_norep!まで
  • 次回: sampling.jl, L.721のefraimidis_a_wsample_norep!から

2022-07-27

  • YouTube動画のタイトル(予定)「2022-07-27 ベイズ統計勉強会 JuliaのStatistics読解 第15回」
  • 今回: sampling.jl, L.721のefraimidis_a_wsample_norep!からsampling.jl終了, statmodels.jlのL.148 showまで
  • 次回: statmodels.jlのL.150 showからか, SymPy

2022-08-03

  • YouTube動画のタイトル(予定)「2022-08-03 ベイズ統計勉強会 JuliaのStatistics読解 第16回」
  • 今回: statmodels.jlのL.150 showから StatsBase.jl終了
  • 次回: 永井佑紀, 『1週間で学べる!Julia数値計算プログラミング』5日目 具体例2:統計力学――乱数を使いこなす
    • 6日目 具体例3:固体物理学――自己無撞着計算と固有値問題もやる予定

2022-08-10

  • YouTube動画のタイトル(予定)「2022-08-10 ベイズ統計勉強会 JuliaのStatistics読解 第17回」
    • 録画忘れで動画なし
  • 今回: StatsModels.jl, traits.jl, contrasts.jlのL.600, HypothesisCoding()まで
    • 準備の時間取れず, 次回以降: 永井佑紀, 『1週間で学べる!Julia数値計算プログラミング』5日目 具体例2:統計力学――乱数を使いこなす
  • 次回: 準備が終われば永井本, 終わらなければStatsModels.jlの続きから

2022-08-17

  • (録画はじめた?)
  • YouTube動画のタイトル(予定)「2022-08-17 ベイズ統計勉強会 JuliaのStatistics読解 第18回」
  • 今回: StatsModels.jl, contrasts.jlのL.594から終了まで, terms.jlのL.382まで
  • 次回: 準備が終われば永井本, 終わらなければStatsModels.jlの続き(terms.jlのL.383)から

2022-08-24

  • YouTube動画のタイトル(予定)「2022-08-24 ベイズ統計勉強会 JuliaのStatistics読解 第19回」
  • 今回: StatsModels.jlの続き(terms.jlのL.383)からschema.jlのL.129まで
  • 次回: 準備が終われば永井本, 終わらなければStatsModels.jlの続き(schema.jlのL.131)から

2022-08-31

  • YouTube動画のタイトル(予定)(録画を忘れた)
  • 今回: StatsModels.jlの続き(schema.jlのL.131)からtemporal_terms.jlまで
  • 次回: 準備が終われば永井本, そうでなければformula.jlから

2022-09-07

  • YouTube動画のタイトル(予定)「2022-09-07 ベイズ統計勉強会 JuliaのStatistics読解 第20回」
  • 今回: 準備が終われば永井本, 終わらなければStatsModels.jlの続き(formula.jl)からmodelframe.jlのL.70まで
  • 次回: 準備が終われば永井本, 終わらなければStatsModels.jlの続きmodelframe.jlのL.71から

2022-09-14

  • YouTube動画のタイトル(予定)「2022-09-14 ベイズ統計勉強会 JuliaのStatistics読解 第20回」
    • 録画忘れ
  • 今回: 準備が終われば永井本, 終わらなければStatsModels.jlの続きmodelframe.jlのL.71から
    • 5.1の理論的背景, 5.2のイジングの計算本体の理論の話, 特に5.2.2まで
  • 次回: 永井本5.1のプログラムとお絵描き, 5.2.2の理論の続き

2022-09-21

  • YouTube動画のタイトル(予定)「2022-09-21 ベイズ統計勉強会 JuliaのStatistics読解 第21回」
  • 今回: 準備が終われば永井本5.1のプログラムとお絵描き, 5.2.2の理論の続き
    • GitHub
    • 終わらなければStatsModels.jlの続きmodelframe.jlのL.71から
    • 写経した5.1の結果を眺めつつコード確認, 5.2の物理の解説追加, P.168のcalc_Si関数あたりまでをフォロー
  • 次回: 永井本の残り, 次回は

2022-09-28

  • YouTube動画のタイトル(予定)「2022-09-28 ベイズ統計勉強会 JuliaのStatistics読解 第22回」
  • 今回: 永井本, calc_ΔEからと、MCMC解説・復習
    • GitHub
    • 終わらなければStatsModels.jlの続きmodelframe.jlのL.71から
    • モンテカルロの理論から一通りの計算プログラムの解説まで
  • 次回: 永井本の残り, 高速化の解説から, 終わったらJuliaの統計に戻る
    • SymPyをちょっとやってみたい

2022-10-05

  • (録画はじめた?)
  • YouTube動画のタイトル(予定)「2022-10-05 ベイズ統計勉強会 JuliaのStatistics読解, sympy 第23回」
  • 今回: 永井本, 残り, 高速化の解説から, 永井本の残り, sympy
    • GitHub
    • sympy/abc.pyのあと, algebras/quartenion.pyをfrom_axis_angleまで
  • 次回: sympy, from_rotation_matrixから

2022-10-12

  • YouTube動画のタイトル(予定)「2022-10-12 ベイズ統計勉強会 sympy 第2回」
  • 今回: sympy, quarternion.pyのfrom_rotation_matrixから
  • 次回: sympy, quarternion.pyのarc_coplanarまで

2022-10-19

  • (録画はじめた?)
  • YouTube動画のタイトル(予定)「2022-10-19 ベイズ統計勉強会 sympy 第3回」
  • 今回: sympy, quarternion.pyvector_coplanarからcore/add.pyflatten()まで
  • 次回: sympy, core/add.pyclass_key()から

2022-10-26

  • 都合によりお休み

2022-11-02

  • 録画忘れ
  • 今回: sympy, core/add.pyclass_key()から_eval_is_meromorphic()まで
  • 次回: sympy, core/add.py_eval_is_algebraic_expr()から

2022-11-09

  • 録画忘れ
  • 今回: sympy, core/add.py_eval_is_algebraic_expr()から
  • 次回: sympy, core/add.pyas_real_imag()まで

2022-11-16

  • 都合により休み

2022-11-23

  • 祝日でお休み

2022-11-30

  • YouTube動画のタイトル(予定)「2022-11-30 ベイズ統計勉強会 sympy 第6回」
  • 今回: sympy, core/add.py_eval_as_leading_termからcore/add.py最後まで
  • 次回: F#/C#の何か, 探索中

2022-12-07

  • 都合によりお休み

2022-12-14

  • YouTube動画のタイトル(予定)「2022-12-14 ベイズ統計勉強会」
  • 今回: DiffSharp, Utils.fsflatArrayAndShape6Dまで
  • 次回: DiffSharp, Utils.fsflatArrayAndShape6Dから

2022-12-21

  • 都合により休み

2022-12-28

  • (録画はじめた?)
  • YouTube動画のタイトル(予定)「2022-12-28 ベイズ統計勉強会 DiffSharp 第2回」
  • 今回: DiffSharp, Utils.fsflatArrayAndShape6DからUtils.fsのL.457, indentNewLinesまで
  • 次回: DiffSharp, Utils.fsのL.458, stringPadから

2023-01-04

  • 年始でお休み

2023-01-11

  • 今回: DiffSharp, Utils.fsのL.458, stringPadから最後, Extension.fsのL.159, Array6Dまで
  • 次回: DiffSharp.Core, Extension.fsのL.162のスライシングに関するコメントから

2023-01-18

  • 今回: DiffSharp.Core, Extension.fsのL.162のスライシングに関するコメントからBackend.fsまで
  • 次回: Device.fsから

2023-01-25

  • 今回: DiffSharp.Core, Device.fsからShape.fsのL.438まで
  • 次回: Shape.fsのL.439以降, canExpandから

2023-02-01

  • お休み

2023-02-08

  • 今回: DiffSharp.Core, Shape.fsのL.439以降, canExpandからRawTensor.fsのL.536, SolveTTまで
  • 次回: DiffSharp.Core, RawTensor.fsのL.539, SqueezeTまで

2023-02-08

2023-02-15

  • 今回: DiffSharp.Core, Diffsharp.fsのメインの部分
  • 次回: SymPy

2023-02-22

  • SymPy documetation
  • 今回: SymPy, matrices/common.pyのはじめから, L.817, _eval_jordan_blockまで.
  • 次回: SymPy, matrices/common.pyのL.818, _eval_ones()から

2023-03-01

  • SymPy documetation
  • 今回: SymPy, matrices/common.pyのL.818, _eval_ones()からL.1920のvalues()まで
  • 次回: SymPy, matrices/common.pyのL.1925, class MatrixOperations(MatrixRequired)から

2023-03-08

  • SymPy documetation
  • 今回: SymPy, matrices/common.pyのL.1925, class MatrixOperations(MatrixRequired)からL.2945, class MatriCommonまで
  • 次回: SymPy, matrices/common.pyのL.2948, class _MinimalMatrixから

2023-03-15

  • お休み

2023-03-22

  • SymPy documetation
  • 今回: SymPy, matrices/common.pyのL.2948, class _MinimalMatrixからmatrices/decomposition.pyのL.400, _cholesky_sparse()まで
  • 次回: matrices/decomposition.pyのL.403, _LDLdecomposition()から

2023-03-29

  • SymPy documetation
  • 今回: matrices/decomposition.pyのL.403, _LDLdecomposition()からmatrices/decomposition.pyのL.1127, _singular_value_decomposition()まで
  • 次回: matrices/decomposition.pyのL.1127, _singular_value_decomposition()から

2023-04-05

  • 今回: matrices/decomposition.pyのL.1127, _singular_value_decomposition()からmatrices/decomposition.pyは終了, dense.pyL.698まで.
  • 次回: matrices/dense.pyL.699, casoratian()から

2023-04-12

  • SymPy documetation
  • Online LaTeX editor
  • 今回: matrices/dense.pyL.699, casoratian()からmatrices/determinant.pyL.118, _find_reasonable_pivot()まで
  • 次回: matrices/determinant.pyL.121, _find_reasonable_pivot_naive()から

2023-04-19

  • SymPy documetation
  • Online LaTeX editor
  • 今回: matrices/determinant.pyL.121, _find_reasonable_pivot_naive()から_detまで
  • 次回: matrices/determinant.pyL.676, _det_bareissから

2023-04-26

  • お休み

2023-05-03

  • お休み

2023-05-10

  • SymPy documetation
  • Online LaTeX editor
  • 今回: matrices/determinant.pyL.676, _det_bareissからmatrices/eigen.pyL.437, _eigenvectsまで
  • 次回: matrices/eigen.pyL.439, _is_diagonalizable_with_eigenから

2023-05-17

  • SymPy documetation
  • Online LaTeX editor
  • 今回: matrices/eigen.pyL.439, _is_diagonalizable_with_eigenからmatrices/eigen.pyL.1025, ドキュメント文字列設定まで
  • 次回: matrices/eigen.pyL.1027, _jordan_form()から

2023-05-17

  • SymPy documetation
  • Online LaTeX editor
  • 今回: matrices/eigen.pyL.439, _is_diagonalizable_with_eigenからmatrices/eigen.pyL.1025, ドキュメント文字列設定まで
  • 次回: matrices/eigen.pyL.1027, _jordan_form()から

2023-05-24

2023-05-31

  • 今回: optuna
  • 次回: sympy, matrices/graph.pyの先頭から

2023-06-07

  • 今回: sympymatrices/graph.pyの先頭から
    • matrices/inverse.py_pinvまで
  • 次回: optuna, Samplerのコード周り
    • 次々回: 量子情報科学入門を読む

2023-06-14

  • 今回: optuna, Samplerのコード周り
  • 次回: 量子情報科学入門を読む

2023-06-21

  • お休み

2023-06-28

  • 今回: 量子情報科学
    • PDF 2.3.6, さらに本のP.3(PDFの6.6.1.2)まで
  • 次回: optuna
    • 次々回: 量子情報科学, P.3周辺, PDF 6.6.1.3から

2023-07-05

  • 今回: 量子情報科学, P.3周辺, PDF1.15.3.4から, 第四章, P.87, PDF1.15.6.12の注意まで.
  • 次回: optuna

2023-07-12

  • お休み

2023-07-19

  • 今回: optuna
  • 次回: 量子情報科学, 第四章, P.87, PDF1.15.6.13から.

2023-07-26

  • 今回: 量子情報科学, 第四章, P.87, PDF1.15.6.13から, PDF1.15.6.28, 量子ビットの例まで
  • 次回: optuna
  • 次々回: PDF1.15.6.29, 三準位量子系

2023-08-02

  • お休み

2023-08-09

  • 今回: PDF1.15.6.29, 三準位量子系から1.15.6.43「補題:可換なエルミート作用素の表示」まで.
  • 次回: optuna
  • 次々回: 量子情報

2023-08-16

  • 今回: 量子情報, 1.15.6.47 命題: 可換な物理量は同時測定可能から1.15.6.60の定義: エンタングル量子状態とその例まで.
  • 次回: optuna
  • 次々回: 量子情報

2023-08-23

  • お休み

2023-08-30

  • 今回: 量子情報, 「1.15.6.62 補題: 積空間での個別の物理量の同時測定」から「1.15.6.81 補題: 純粋状態に対応する密度作用素は射影」まで
  • 次回: optuna
  • 次々回: 量子情報

2023-09-06

  • 今回: optuna
  • 次回: 量子情報

2023-09-13

  • 今回: 量子情報, 「1.15.6.84, 定義: 混合状態も含めたボルンの確率規則」から「1.15.6.99 命題: 純粋状態の特徴づけ」とその証明まで
    • 次: 「1.15.6.101 定義: 非自明な確率混合」から
  • 次回: optuna

2023-09-20

  • 今回: optuna
  • 次回: 量子情報, 「1.15.6.101 定義: 非自明な確率混合」から

2023-09-27

  • お休み

2023-10-04

  • 今回: 量子情報, 「1.15.6.101 定義: 非自明な確率混合」から, 「1.15.6.122 命題: 部分トレースの性質」の言明の紹介まで
  • 次回: optuna

2023-10-11

  • 今回optuna
  • 次回: 量子情報「1.15.6.122 命題: 部分トレースの性質」の言明の紹介から

2023-10-18

  • お休み

2023-10-25

  • お休み

2023-11-01 wed

  • 今回: 量子情報「1.15.6.122 命題: 部分トレースの性質」の言明の紹介から
    • 量子情報「1.15.6.140 定義: 密度作用素の時間発展」まで
    • 次回: 「1.15.6.141 補題: 密度作用素の時間発展の実現可能性」から
  • 次回: optuna
    • 以後は勉強会を隔週に変更, 次回は11/15

2023-11-15 wed

  • お休み

2023-11-29 wed

  • 今回: optuna

2023-12-13 wed

  • 今回: 「1.15.6.141 補題: 密度作用素の時間発展の実現可能性」から
    • 「1.15.6.158 補題: PVM の基本的な性質」まで
    • 次回: 「1.15.6.158 補題: PVM の基本的な性質」から

2023-12-27 wed

  • optuna

2024-01-10 wed

  • 今回: 「1.15.6.158 補題: PVM の基本的な性質」から「1.15.6.168次の定理に向けて」まで
  • 量子情報の次回: 「1.15.6.169定理: POVM測定は間接測定実現可能」

2024-01-24 wed

  • お休み

2024-02-21 wed

  • 今回: 「1.15.6.169定理: POVM測定は間接測定実現可能」から「1.15.6.179 (定理: 物理量の可換性と同時測定可能性の)証明」まで
  • 量子情報の次回: 「1.15.6.180 補題: 正値作用素の積のトレースが消える条件」から

2024-03-05 wed

  • 今回: 「1.15.6.180 補題: 正値作用素の積のトレースが消える条件」から「1.15.6.187 命題: 時間発展写像の線型拡張はトレース保存正 写像」の証明まで
  • 量子情報の次回: 「1.15.6.190 定義: 正写像・完全正写像・トレース保存完全正写 像と量子通信路」から

2024-03-20 wed

  • お休み

今後の予定: Juliaを勉強する

SPINS CRE@TION勉強会

TODO

  • オブジェクト指向UI
  • https://ui-pocket.com/apps/

2024-04-09 tue

2024-04-02 tue

  • 生成AI

2024-03-05 tue

  • 生成AI

2024-02-27 tue

  • お休み

2024-02-20 tue

  • お休み

2024-02-13 tue

  • web, ノンデザイナーズデザインブック
    • 今回: P.120からP.130まで
    • 次回: P.131から

2024-02-06 tue

  • AI

2024-01-09 tue

  • web, ノンデザイナーズデザインブック
    • P.109からP.119まで
    • 次回: P.120から

2023-12-26 tue

  • AI画像生成系

2023-12-05 tue

  • web, ノンデザイナーズデザインブック
    • P.102からP.108
    • 次回: P.109から

2023-11-28 tue

  • お休み

2023-11-21 tue

  • AI画像生成系

2023-11-14 tue

  • お休み

2023-11-07 tue

  • お休み

2023-10-31 tue

  • web, ノンデザイナーズデザインブック
    • P.93-P.100
    • 次回: P.102から

2023-10-24 tue

  • お休み

2023-10-17 tue

  • お休み

2023-10-10 tue

  • web
    • P.81, Part3からP.92まで
    • 次回: P.93から

2023-10-03 tue

  • AI画像生成系
  • 次回: web

2023-09-26 tue

  • お休み

2023-09-19 tue

  • お休み

2023-09-12 tue

  • お休み

2023-09-05 tue

  • ノンデザイナーズ・デザインブック
    • P.65からP.80まで
    • 次: P.81, Part3から
    • オブジェクト指向UI
  • 次回: AI画像生成系

2023-08-29 tue

2023-08-22 tue

  • ノンデザイナーズ・デザインブック
    • Part2からP.64まで
    • 次回P.65から

2023-08-15 tue

  • お休み

2023-08-08 tue

  • AI画像生成系の話

2023-07-18 tue

  • ノンデザイナーズ・デザインブックの25周年記念のPDFを読もう
    • P.44まで
    • 次はPart2から

2023-06-13 tue

Web・アプリ

  • ノンデザイナーズ・デザインブックの25周年記念のPDFを読もう
    • P.32まで
    • 次回は復習をかねてP.32から

2023-06-06 tue

  • 都合によりお休み

2023-05-30 tue

AI系

  • 実際に何かで遊んでみよう

Web・アプリ

2023-05-23 tue

AI系

  • 実際に何かで遊んでみよう
  • 仕事絡みの毎日の検索は基本的にChatGPT, phind.comになった
    • https://www.perplexity.ai/ も使ってみる予定
    • 間違っていることはあれど, 本当にピンポイントで答えが返ってくる
  • GitHub Copilotも便利

Web・アプリ

  • ノンデザイナーズ・デザインブックの25周年記念のPDFを読もう
    • P.20まで
    • 次回はP.21から

2023-05-09 tue

AI系

Web・アプリ

2023-04-11 tue

AI系

トーク

ChatGPT関係: 自然言語プログラミングそのままできる(ことがある). セルフコーチング応用もある. 問を一覧で作って, それを引用して順に聞くとか. シミュレーションゲームっぽくヒアリングするとか, 書いてみるとか. 実際にコードに落としてアプリにするとか, ChatGPT自体にいろいろやってもらうとか. マインドマップで形式を指定できる. PlantUML形式でいい感じにマインドマップを作ってくれる. プラグインもいろいろある.

動画の切り抜きだとか. 映像方面での応用を模索したい. AEだけでブライダルの写真を読み込んで選択的に動画を作る. AE内のJSでやっていた: ChatGPTにやらせてみてどうなるだろう? Premiere ProでもJSが使えるが情報があまり公開されていない. AEはエクスプレッション関係で情報が多い. 作業ベースの仕事は削ってまさしくクリエイティブな取り組みに集中したい. AEのテンプレート, 便利プラグインあたりはいろいろやれそう.

画像生成もプロンプトエンジニアリング.

LP制作の面倒な作業や, フローで決まりきった作業は自動化したい. そこにうまくはまらないか? マーケティングは機械的にできる部分は多かろう. 精度をどこまであげるか? LPの文章を作ってもらうのはもうあるにはあるが, いまの時点でターゲットに刺さるものができるか? 実務ではまだもう一歩人力が必要ではないか. LPを作る前のマインドマップを作るときにChatGPTといろいろやっている人はいる.

コンテンツを生成してもらう発想はわかるが, なかなか狙い通りにならない. 絵でまさにそう. 指示が難しい. アニメの背景で実験している会社もあるが, 視線誘導など絵・季節感・雲の状態がおかしい. それっぽいが, 専門家からすると「それはない」というのばかり. マーケッターでTwitter botを作ってもらった人がいた. 作業ベースか選択肢をいろいろ提示してもらうくらいか.

自然言語でプログラミング. そもそもプログラミングで何ができるかわかっていないと, 自然言語でプログラミングしようにも, プログラミング自体がうまくいかない. 小さなところから作っていくとか, 設計の手順とか.

2023-03-28 tue

  • お休み

2023-03-14 tue

AI系

  • 実際に何かで遊んでみよう
    • 引き続きアラビア語の勉強に使っている
  • Twitter
    • 研究内容を短めの文章にまとめて, 質問を挙げさせる.
    • これ、学会発表練習時に想定質問として使うとめちゃくちゃ便利だな。学生の発表の想定質問を考えるの結構大変なので。
  • プログラミング応用
    • ちょっとした作業・スクリプトなら割とさっと正確にやってくれる模様.
      • ボットを作ったり.
      • 「疲れ果てているときに代わりにちょっと試してみる」事例があった.
    • 作業用スクリプトの二つの側面
      • 息抜きにちょっとした気分転換も兼ねて
      • 本当に仕事用
    • 前者の「プログラミング」はまさに「趣味としてのお絵描きか仕事としてのお絵描きか」と同じっぽい
    • これにしても自分よりよいプログラムをコメントつきで書いてくれたり, 知らなかったライブラリを教えてくれることもある模様
    • さらなる検索・調査のためにとりあえず書かせてみるのもよさそう
  • Regular Expression Puzzles and AI Coding Assistants
    • プチ読書会もしよう
    • いま読んでいる
    • 正規表現自体が本当にめんどい
    • 書くのはよくても読めない
    • 正規表現を書かせるだけではなく読ませる方のChatGPT利用もありうる
    • 正規表現も言語の一種: 形式言語理論で正規言語を表すための手段
    • 言語の解読の視点をもっと広げるといろいろ応用が効くのではないか
  • 言語の解読
    • 最初の「学会用発表内容からの質問生成」: 文章を解読させた結果, 解読できない・よくわからない点を質問として練り上げてもらう
    • ChatGPTに文章を読ませて何かしてもらう視点を持つとよいのでは?
    • プログラムの生成ばかりではなく, プログラムを読んで解説してもらう方向性ももっと何かある?
    • いま本を読んでいたら「テストケースを作ってもらう」のにも使える?
    • 何にせよ「対話」を通じて話を膨らませる相手になってもらう発想は決定的に重要っぽい.
  • Bing: すでにいろいろ制限がかかっていて残念らしい
  • ChatGPT: APIが公開.

Web・アプリ

2023-02-28 tue

Web制作

  • 昨日の話がちょっと気になったので
  • サービス内容に対する議論を追いかけ切れていないためピント外れの可能性あり
    • クリエイションの各人のマインドセットというか目指す方向もあまりよくわかっていない
    • サービスはスタートアップ向けなのか? などもあまりよくわかっていない.
  • 各種見積もりの難しさが問題になっていたように思う
  • 見積もりが問題なら, 見積もりが楽な定型作業と, 事前見積りが難しい非定型作業のような分け方も考えるとよいのでは? 多分他にもいろいろな観点がある.
  • 映像はよくわからないためWeb制作に関して考える
  • いったん成果物・必要な作業・サービス提供対象の枠で考える
    • 内容と工数の観点
    • 見積もりのしやすさ・しにくさ
    • 作業の難しさ・簡単さ
    • 作業量の多さ・少なさ
  • 大枠の想定
    • 成果物: Webサイト・LP
    • 必要な作業: ヒアリング・設計・デザイン(スタイリング)・実装
      • 設計: Webサイト全体の構造, 導線
    • サービス提供対象: 企業・経験を積んだ個人・スタートアップの個人
  • 前提
    • Webサイト: 直接的な収益は生まない
    • LP: 商品販売用ページとして直接利益を生む
    • (スタートアップの個人はこの辺の区別もついていないのでは?)
  • 成果物
    • Webサイト
      • スタートアップ
        • 完全にパッケージでよいのでは?
        • もちろんヘッダー画像や全体の配色設定など多少のカスタマイズは許可
        • むしろ「収益を生むLPに時間と金を使おう」と提案する
        • 見積もりしやすい
        • パッケージ対応という意味で駆け出しでも対応可能
      • 企業・経験を積んだ個人
        • 個別対応前提
        • むしろはじめからドカっとお金と時間をもらって長期的に付き合う対象ではないか
        • 見積もりというより継続的なサービス(または別パッケージ)対応案件ではないか
    • LP
      • 基本的にお金を生む
      • ハードな作り込み前提
      • 一点物としてサイト全体の構造を考えたりする必要はない
      • ABテスト的な意味で育てる要素はあるが, サイトを育てる観点とは違う
      • たぶん見積もりしやすい
        • 特に賞味期限があるタイプの商品だとスピードが必要
        • スタートアップだと早く売上を作る意味でもスピードが必要
        • 期間の意味で作業量は見積もりやすいのではないか
  • 必要な作業
    • ヒアリング
      • まず内容が重い
        • ヒアリングシートを育てれば多少は軽くなる
      • 見積もりしにくい: むしろ明確にフェーズを切ったり「いまはこれでいこう」という決断が必要な作業
      • 特にWebサイトでは経験者が対応しなければならない
    • 設計
      • 設計が必要な時点でだいたい何もかも重い
    • デザイン(スタイリング)
      • 見積もりしにくい
      • 設計・作業量・差し戻し・調整が重い・多い
      • WebサイトとLPで重さ・多さは(たぶん)質的に違う
    • 実装
      • 設計ができれば見積もりはしやすい
  • サービス提供対象
    • 企業・経験を積んだ個人
      • ふつう要件はきっちりしている
      • ヒアリングはしやすい
      • (経験者なら)見積もりもしやすい
      • 作業量は重い
    • スタートアップの個人
      • たぶんヒアリングは大変
      • 「WebサイトよりLP作れ」といったタイプの「コンサル」が必要なのではないか
      • この「コンサル」込みのパッケージ(Webサイトは軽くする, その代わりLPは手厚く)で割り切ってサービス提供するのも考えられる

AI系

Web・アプリ

2023-02-14 tue

AI系

Web・アプリ

2023-01-17 tue

.NETエコシステム

  • 今年はこれの修行をしてみる予定: WASMも書ける
    • WASM: 「ワズム」
    • F#が好きでこれでいろいろやりたいのだが, 情報が少なすぎるため現在C#での.NET学習中
    • バックエンドがメインだが, 最近はWASM(Blazor)のおかげで一応フロントも書ける
    • C#でのWASMがどこまで流行るかは微妙
      • むしろあまり流行らないのではないかとさえ思う
      • そもそもC#もそこまで好きではない
    • そんなわけでお勧めはしないが自分の整理も兼ねて.NETの話を少しする
    • そこまで一般的に広く使われているとも思わないが, 確固たるファン層はいるイメージ
    • 少なくとも英語なら関連書籍もかなり積極的に出版されていて勉強しやすい
    • 処理系の進化も速い
  • 昔はWindowsオンリーだったがいまはMacとLinuxでも動く
    • もともとWindowsオンリー: 2002年登場
    • Mac/Linuxでも動くMonoという処理系が登場
    • XamarinやUnityがmonoの上で動いていてクロスプラットフォーム
    • Xamarin買収でmonoもWindows管轄下に入った
    • クロスプラットフォームを含めてmonoと.NET本家の統合
    • .NET Standard2.0: これは単に仕様, APIセットの定義
      • .NET Framework 4.7: Windowsオンリー
    • .NET Core 3.0
      • 2014/11誕生
      • .NET Coreの4はなし: .NET Framework 4との混同を避けるため
    • .NET CoreのCoreは.NET5から消えた
    • いまは.NET7
    • .NET5 以降: 奇数版が試験的, サポート期間短い, サポート1年間
    • 偶数版はLTS: 3年間, .NET6 LTS
  • Microsoft(技術の)トップが代わってから大分変わってかなり邪悪さは減った模様
  • 何がどこまでうまくいくかはともかく, .NETエコシステムの上でいろいろやれる
    • 一般的なプログラミング言語: C#, F#, Visual Basic
    • スマホアプリ開発: 昔はXamarin, 今は.NET MAUI
      • スマホアプリはKotlin, Swiftの他, Flutter(Dart言語)がマルチプラットフォームで有名で次にReact Nativeという印象
    • デスクトップアプリ: .NET MAUI (少なくともWindowsのデスクトップは作れる)
    • Unity: ゲーム
    • Blazor: WASMによるフロントエンド開発
      • WASMはともかくBlazorは微妙な気がする
    • PowerShell: 実は.NETエコシステムでMac, Linuxでも使える(使ったことなし)
  • WASM: C/C++, Rust, Golang, C# (.NET)
    • WASM
      • 仮想命令セットアーキテクチャまたはプログラミング言語
      • 直接書くよりは他の言語で書いてコンパイルする
    • 基本的なパフォーマンスを求めるところで使う.
    • はじめからJavaScriptの置き換えは意図していない.
    • 基本的には他の言語で書いてWASMにコンパイルする
      • まだまだ容量が大きく, ネットワーク負荷の点でJavaScriptに劣る
      • 容量問題(ネットワーク速度問題)が解決できる状況なら使える
    • 例: Figma: デスクトップでじっくり考えるような状況でしか使わない
      • Figmaは製品もさることながら技術的にもかなりエッジの尖った企業らしい
    • 技術に広く浅く触れてみる〜WASM編〜
      • C/C++で記述されたアプリケーションをWeb上に移植する
      • ロジック的な部分はWASMで全て実装し,UIといった部分はJavaScriptで実装する
    • https://ja.wikipedia.org/wiki/WebAssembly
      • 内部的には、wasmコンパイラシステムは中間コードを扱うためにS式を使用している。
      • 統合開発環境WebAssembly Studio - WebベースのWebAssembly向け開発環境。
      • C言語及びRustに対応している。

AI系

  • 和ゴスロリ https://twitter.com/tkaz2009/status/1601355025254866944
    • AIに「和ゴスロリ」の衣装設定を考えさせてみた結果が、予想の斜め上を行く凄さで驚愕。
    • 細部までの描き込みが凄い上に、可愛い。
    • バリエーション大量に出させて、服装決めるにはAIってとてつもなく便利そう。
  • https://twitter.com/Yamkaz/status/1601327530757136386
    • すごいのきた
    • DeepMindから演劇や映画の脚本を言語モデルで共同執筆できる作家さん用の新ツール「Dramatron」が公開! https://deepmind.github.io/dramatron/index.html
    • 題名、キャラ、場所の説明、セリフを含む新しい脚本をインタラクティブに共同作成することができる
  • ChatGPT
    • 「対話」に使うと面白い?
    • 人間がしない発想で回答してくる
    • ブレインストーミングとしてのAI対話みたいなのもあり?

セキュリティ

Androidセキュリティ

Androidテスト

Web・アプリ

2022-12までのメモ

Webデザイン

WebDev

2022-12-06 tue

2022-11-22 tue

  • 近況: 12月からAndroidアプリを書く仕事が入ったため猛勉強中
    • 次回からはAndroidまたはKotlinの公式ドキュメントを読む会になるかもしれない
    • Androidのセキュリティも気になる
      • https://www.jssec.org/dl/android_securecoding_20220829/index.html
      • 2021年8月以降に Google Play ストアから配信する新規リリースのアプリケーションは targetSdkVersion の API Level を30(Android 11)以上にしなければならない
      • 2021年11月以降に既存アプリをバージョンアップする場合も targetSdkVersion を30以上にしなければならない
  • Writing NES Emulator in Rustをやった
  • 【deno】deno1.28「npm完全に理解した」
    • いろいろなモジュールの読み込み:
      • 順番が大事
      • 人力では不可能
      • 「コンパイラ」にやってもらおう
        • トランスパイラ
      • バンドラーの登場
        • Gulp
        • バンドラーもよりよいツールが必要
        • 複雑になってくると時間もかかるので高速化
        • webpack: Node.jsのライブラリ
      • トランスパイラ
        • ブラウザごとの互換性
        • ES5, ES6, ES2018, ES2020, ES2021
        • JavaScriptのバージョンが上がる
        • babel: Node.jsのライブラリ
      • Node.js自体が時代を切り開いてきた側面がある
      • 古くてよくないものも一杯残っている.
      • いまとなっては明らかによくない
      • Node.jsの努力のおかげで「こうするといい」とわかったのがいっぱい. それによる標準化もある
      • Node.jsは全部取り込めているわけではない
      • 昔の資産もあって, これとの整合性をどう保つか.
      • webpack・babelはJavaScript製: 遅い
      • 歴史的な事情, 技術的な負債もたくさんある.
      • あと知恵: 設計もよくない
    • Deno: Node.jsの開発者がリード
      • Rust製: 高速化をきちんと意識
      • webpackなどは設定が面倒
        • Node.jsはバンドルやトランスパイラの面倒をみない
        • いまとなっては処理系で対応した方がいい
        • Denoはこれらを同梱, パフォーマンスも処理系で確保
      • リンター(linter)
        • C言語: 行儀が悪いコード, バグを生みやすいコードを検出して書き換えろというワーニングを出してくれるツール
        • JavaScriptもよくない部分がいっぱいあって, それを使わないようにしよう
        • 実際にチェッカーを作ろう -> jslint
        • もっと使いやすいツールがほしい: 実際いろいろある
        • eslint: golang製, node.jsのデファクトスタンダード
        • eslintも楽になったとはいえ, いろいろ設定が必要でめんどい
          • いろいろな人の趣味がある
          • 紛糾する: 「宗教戦争」
        • これを処理系で面倒をみよう
        • denoでは同梱: 処理系で決め打ちで諦めろ
        • golang: gofmt(フォーマッター)
          • インデントは4スペースか2スペース, スペースかタブか
          • 何でもいいが, 何か決めないとコードがグチャグチャで読みにくい
          • 誰がどう決めるか?
          • これを言語処理系が決めてしまおう, 無用な紛争をなくそう
          • Denoはこれを決める方向に持っていった
      • Denoはフォーマッターもある
        • 文字列をシングルクォートにするか, ダブルクオートにするか
        • こういうのもどちらでもいいが, どちらかにしないと気持ち悪い
        • node.js, prettier
          • prettierも多少設定が必要
  • 静的Webサイトでも設置できるフォームをノーコードで作成、管理できるOSS・「formify」
    • 結局別途稼働している別サービスにいろいろな処理を委任している
  • CSSで簡単に実装できるクールなアニメーションドロワーメニュー10選【上下左右・階層・スライドメニュー・ハンバーガーメニュー】
  • おまけ
    • スマホアプリ開発の言語: AndroidはKotlin, iOSはSwift
    • Android/iOS両方同時に開発できる言語・フレームワークもある
      • Flutter: Dart言語による, 同時にWeb開発もできる
      • React Native: JavaScript/TypeScriptで開発できる
      • .NET MAUI: Xamarinの新バージョン, C#
    • Flutterなどは9割程度はコードを共通化できるらしいが, OSネイティブの低いレイヤー部分はOSごとに書かないといけない部分がある模様
    • はじめからどちらかのスマホ対応しか考えない, または相当深いレベルの実装が必要なことがわかっている場合は, それぞれKotlin/Swiftで別に実装することもよくあるらしい

2022-11-08 tue

  • NovelAIのプロンプトを管理・調整するChrome拡張を作りました
  • リンク先忘れ: pixivあたりでAI絵販売
    • 例えばこれ: エロ同人CG販売サイトでAIアートが販売 10/12追記
    • 呪文学習でやはり一手間いるから, その労力・時間をお金で解決する.
    • 凝ったモノならどうしても手書きだがお手軽に・大量に, となると一定のアドバンテージがある.
    • いわゆる先行者利益の部分もある模様.
    • 数ヶ月さえ持たないかもしれないが, それでも瞬間最大風速としてはビジネスになった.
  • Stable Diffusionを使って「いらすとや風画像生成モデル」を作った話
    • 「ところで、いらすとやさんのようなイラストレーターがこういった機械学習技術を活用して作画を効率化することはもはや可能な域に達してしまったかもしれませんね。」
    • この間のspins cre@ationでのやりとり
      • https://spinscreation.slack.com/archives/CTC7PD3PH/p1666089251488249
      • 僕だったらイラレでこういうパーツ組み合わせて作ります^^
      • このパーツを自分で生成する, もしくは依頼主が生成してきたパーツをうまく組み合わせるとか?
    • 多少絵を描けて修正できる人の片手間仕事になるか?
  • Vercel、Webpack後継を目指す、Rustベースの「Turbopack」をリリース
    • 高速化はどこでも大事
    • マーケティングでもスピーディかつ大量の試行錯誤が大事と良く言われる
    • 学校の勉強でもそう
      • Twitterで塾講師の人が言っていた
      • 計算が速いとたくさん問題が解けてたくさん試行錯誤できる
      • 計算ミスにしてもどんな問題でどういうミスをしたか考える時間の余裕が生まれる
      • 計算も正確になり, それに合わせて速くもなっていく
    • 数値計算: スパコンで何日もかかるような計算での10倍高速化のインパクトは凄まじい
  • CSRF対策

2022-10-25 tue

  • 最近「フロントエンド」っぽい話をあまりしていない
    • ふだん話さない話をしていて楽しいので自分は気にしていないがどうなのかと思わないでもない.
    • 何かオープンソースのライブラリのプログラムでも読むか?
    • よさげなサイトのCSS眺めるとか?
  • UIからの解決
    • また凄いのがこれ操作するのが今でいう液晶タブレット&ペンなのね。当時の常識だと「これは画面を触るライトペン的な?画像もリアルタイムで拡大とか回転させて透過させるの?」と。当時のパソコン少年の視点だとこれは非常識な夢物語でしたよ。でもアプローチがUIからの方が未来の正解が見えるんだね
    • https://twitter.com/hisaketM/status/1584421773780877312
      • いずれは大抵の技術的制約は解決するので、技術的詳細を無視して最適なUIを考えれば自然それがガジェットの未来予測になるというのは確かにそうなんだよね
  • NovelAI Diffusionの研究書「元素法典」有志が日本語化 画像生成呪文の極意
    • コメント
      • 法典系の異様なほど長いプロンプトは、AIを道具として見た際、AIの能力がまだまだ低いことを示唆している。
      • なるべくシンプルな描写プロンプトを入れるだけで、できる限り余計なタグを入れずともいい絵を生み出したいのよ。
      • ただ、少しそのヒントは見えてきたと思う。
      • 重要なのは、より本質的で細部を描写する指示を書くことと、必要な場合は状況に整合する付帯情報を明記してやること。
      • セフィロスは水中に沈めてクロールと水を蹴ることの指示だけで、泳げと言わずとも泳ぎだしたし(質の調整はもう少し必要だったけど)、散らかった部屋の少女は、messyな条件や座り方を指示するだけで、一気にそれっぽくなった。ラーメンの口は、人間が描いた絵を元に表情指定するだけで解決した。ウルトラファインチューニングには法典系長文プロンプトが必要でも、エッセンシャルな絵はシンプルなプロンプトで描ける。
      • クリーンプロンプティングを目指そう。
      • 分量が減らせるので、必要であれば使えるタグの数を増やせる。
      • 何より呪文が見る気が失せるほど長いことを避けられる。
      • プログラミングと同じ。
      • 本質的にシンプルに出来るなら、呪文は複雑に描くべきではない。
      • そして、簡単なプロンプトが使えることは、AIの道具性を高めることでもある。
  • 画像生成AI
    • 触って感じたAIの強みは「全然関係のない別々の概念を合成できる」ということで、これによって「潜在的に存在した誰も見たことない表現」を生み出せる点だと思う。
    • これは卓越した芸術家が新しい表現を開拓するときに使う手法そのもので、コンピューターで超スピードに試せてしまうのはスゴイ。
    • これは楽しい
    • 所感
      • (数値)計算系でも何かを探索するときに高速かつ正確に試行錯誤するための道具としてのプログラミングの意義を感じたことがある.
      • 高速の試行錯誤のためのプログラミングとその応用と言えば理工系のプログラミング応用としては中心的な課題でさえある
  • 平野耕太ツイート
    • AI君は、今日はお前を完全な補正機・補助機として教育する。俺が描いたものをAIがおかしな所を補正して出力し、AIのなんか違うなという所を俺が書き直し、補正し、書き加え、補正する。人間の嗜好をAIが監視し、AIの思考を人間が監視する。
  • 新聞デザイナーの講演
    • How to save news papers
  • dalle2, outpaiting
  • 資料作成のFigma移行
    • 7月から資料作成をFigma移行してから喜びしかない。
    • Nue incは資料制作の全てをFigmaでやるようになった。メリットは添付。
    • 人によってバラける資料のクオリティ減ったし、過去レイアウトの引用もスムーズ。何よりバージョンごとに書き出していた無限pdfからの脱出が可能になった。まじおすすめ。
  • CSSでスクロールが連鎖するのを回避する古い方法とoverscroll-behaviorを使った新しいテクニック

2022-10-11 tue

  • jQueryの:has()と擬似クラスの:has()
    • Chromeに実装された疑似クラス「:has()」がjQueryの「:has()」に悪影響、一定の条件下でウェブサイトが壊れる可能性 (Publickey)
  • Core Web Vitals
  • 日本語からのプログラム生成
    • 日本語からAIが自動的にプログラムを書いてくれるサービス「AI Programmer」を公開した
    • https://aiprogrammer.hashlab.jp
    • 対応言語: #Python #SQL #javascript #html #cpp
  • 3D生成AI
  • NovelAI
    • マジで革命的だわ…
    • 全てNovel AIという最新の画像生成AIで生成したイラストなんだけど、キャラや背景、モンスターやイケメンに至るまで、あらゆる指示に対応できる上に全てクオリティが高い…今日から世界中の人間全員が「神絵師」になったという事なんだろうな
    • NovelAI
    • https://www.noble.ai/
    • サンプル
  • AI作画の恐ろしさ
    • 個人的にAI作画の一番恐ろしいところはAIの存在ではなく「非常に安価に大量の絵が指示通りに作れる」ということ。
    • 絵描きとしては理想の絵に近づこうと励むが、最大の障害は「感性」「才能」ではなく「時間」。
    • 良い絵を早く描けること自体がすごい事であり商売上非常に重要。
    • そこを突いてくるのがキツイ
  • テキストからの動画生成
    • 【未実行】
    • テキストから動画を生成するAI「Phenaki」が公開。
    • こちらは一連のテキスト、ストーリーを入力すると最大数分の長さの動画生成が可能。
    • すご...AIによる映画, アニメ, CM制作も現実になりそう..
    • https://phenaki.video
  • ネット上での画像収集
    • 【未実行】
    • pythonicrawler
    • 4行で画像が100枚さっと収集できる模様
    • PILで画像加工できる
  • いいなと思う UI はユーザの行動を承認している
    • ゴミUIの例: 退会しづらいサブスク
    • 「あの会社は本当に腐っている」という評判が立ってしまう
  • UI
    • このサイト知ってる人も多いだろうけど、BAD UIの最たるものが詰め込まれてて面白い。実際に体験するといかに使いやすいUIが大事かを実感できる。私は最後まで辿り着けなかった…笑
    • https://userinyerface.com

2022-09-27 tue

  • 技術書典でいくつか本を買った
    • FireStarter.Testable_Firebase-ebook-testable-firebase.pdf
    • シーホーちゃんとゆかいな仲間たち.Firebase_Authenticationなら多分これが一番早いと思います_ebook.pdf
    • りあクト!Firebaseで始めるサーバーレスReact開発riakuto-firebase-210214.pdf
    • りあクト!TypeScriptで始めるつらくないReact開発-第4版【①言語・環境編】riakuto4pt1-220908.pdf
    • りあクト!TypeScriptで始めるつらくないReact開発-第4版【②React基礎編】riakuto4pt2-220908.pdf
    • りあクト!TypeScriptで始めるつらくないReact開発-第4版【③React応用編】riakuto4pt3-220908.pdf
    • FirebaseやReactに興味ある人, どのくらいいる? 何かやる?
      • denoやらBunやら
  • アニメーションのプログラミングネタを拾おう
  • ウェブ制作で React(Next) や Vue(Nuxt)、jQuery が最近どれぐらい使われているのか調べてみた
  • 現代のフロントエンド事情
  • 新技術が業界を潰す事案
    • これに似た話ではDTP(Desktop Publishing)とCTP(Computer To Plate)という技術の登場・普及によって数年で産業丸ごと消滅した写植という業種があって…本物のディスラプションってマジでヤバいんですよ。
    • 写植全盛期の文字盤(DTPでいうフォント)で最大勢力を誇った写研は、DTPのトップランナーであるAdobeへのフォント提供を突っぱね、当時二番手のモリサワはその話に乗った。その結果、今やモリサワは圧倒的なフォントベンダーへ、写研は滅亡へ。イラストレーターにもそういう選択が求められるのかもね。
    • https://twitter.com/VoQn/status/1564783941651144704
      • 前も書いたけど、AIに仕事とられるんじゃなくて寧ろAI駆使しながらレタッチが出来る腕前が元々ある描き手が更に超画力を身に着けてく展開にしばらくは続くと予想してるんですよね。そういう意味では『格差が広がる』
      • ↑の予想通りというか、それ描いた3週間後にこんなデモが出ているし

2022-08-30 tue

2022-08-16 tue

絵画史から見るとAI絵画はカメラ

AI絵画が絵画という世界になぜショックを与えているのかというと、とにかくこれまで絵画では必須であった画材やテクニックも(アナログでもデジタルでもそこは同じ)が一切不要である点です。 AIにこんなことをされてしまっては、これまでつちかってきたテクニックが無駄になる、それを身につけるためにやってきた努力とはなんだったのか、絵描きの職業が奪われてしまうという嘆きの声がたくさん出てくるのもむべなるかなといったところです。 ただ、絵画の歴史的に考えると、これとほぼ同じことは過去にもありました。それはカメラ(と写真)の登場でした。

画像を生成するところの細かいところを端折って、最終的な完成品ができ上がるまでの手順を整理してみると、カメラとAI絵画というのは、ほぼ同じであることが分かります。 - カメラ - パラメーターが存在する - 機械が処理をする - 試行錯誤する - どれを表に出すか人が選ぶ - AI絵画 - パラメーターが存在する - AIが処理をする - 試行錯誤する - どれを表に出すか人が選ぶ

ノーコードは普通に使われると思うけどね。midjourneyは誰の記事だったかいらすとやとか素材集みたいなものって解説はすごく納得した。

APP FUEL

  • URL
  • アプリ開発のヒントになりそうなサイト
  • https://theappfuel.com
  • 他社のオンボーディング事例、検索機能、有料プランへアップグレード、友達招待など、機能別で色々なUIがまとまってる

Webサイトを作る際に超参考になったデザインのサイトまとめ

2022-08-02 tue

自己紹介 - 関根良紹 - Webエンジニア, バックエンド - フロントエンドはじめることになった

はじめに

  • PWA・LIFFアプリ・LINEミニアプリの比較
  • MidJourney https://twitter.com/8co28/status/1553611630252277760
    • 「クリエイティブ系は『正義』がなく怒られが発生しないからGoogleなども遊びやすいのでは」
  • Web Design in 4 minutes https://gigazine.net/news/20161004-web-design-in-4-minutes/
    • 本サイト https://jgthms.com/web-design-in-4-minutes/
  • 2022年のモダンCSS改
  • 時間が余ったらmy-diary.orgのメモから適当に引っ張ろう

PWA・LIFF・LINEミニアプリの比較

概要
  • PWA(Progressive Web Application)
    • アイコン用の画像と設定ファイルを2-3個追加するだけで作れる
    • 気分としては簡易アプリ作成
    • オフライン利用のためにHTML・CSS・JSをローカル保存(?)
    • 通知もできる
  • LIFFアプリ(LINE Frontend Framework)
    • LINEの認証が使える
    • LINEからユーザーのデータが取れる
    • 単なるHTML・CSS・JS
    • LINEのAPIと連携すればLINE Payによる決済もある
  • LINEミニアプリ
    • LINE内のアプリとして登録できる: 楽天とモールの例え
    • 決済などの強い機能と連携しやすくなる
  • PWAとLIFFアプリ・LINEミニアプリは共存できる
    • どちらもWebアプリが基礎
    • 設定ファイルを追加したりAPI連携したりするだけ
PWA
https://www.seohacks.net/blog/2809/
# 概要
  • 三行(四行)で
    • モバイル向けサイトをスマホアプリのように使えるようにする
      • ネイティブアプリのようにスマートフォンのホーム画面に導線を置ける
    • ユーザーエンゲージメント向上やUX改善の効果に期待
    • アプリストア経由で新規ユーザーに接触できない
    • 手間がかかるわけでもないので組み込んで損はない
  • オフライン利用・プッシュ通知対応のブラウザAPI(Service Worker)を使っているWebサイト
    • 実際「インストール」できる
      • 例: https://vocmem.vercel.app (そのうち移行するがいまはまだ触れる)
    • キャッシュ利用
    • URLバーがなくフルスクリーン
# メリット
  • 開発側
    • アプリの審査がない: ただのWebアプリ
    • OSごとの対応不要
    • 標準Web技術で十分
    • 本体はふつうのWebサイト: 検索からの流入あり
  • ユーザー側
    • 容量が少ない
    • 表示が速い
    • オフライン対応
# デメリット
  • ネイティブアプリの豊富な機能は使えない・使いにくい
    • 最近はカメラアクセスなどもできるようになったそうだが
    • ネイティブ特有の機能を使わないなら関係ない
  • アプリストア経由で新規ユーザーに接触出来ない
  • iOS対応が弱い(iOS自体のPWA対応が遅い)
  • プッシュ通知できない(2022秋に対応予定?)
  • インストールに一手間必要
    • 確かiOSだとSafariからメニューを開いて「ホーム画面に追加」させないといけない
# まとめ
  • 対応に対するコストはほぼ0
  • やっておいて損はない
  • インストールさせようと思うと一手間いるが, スマホのホーム画面に置ける強さがある
  • SEO上の効果はどう(?)調べておこう
  • 通知が使えないとしてもメルマガやLINEなど別の手段で連絡すればよい
LIFFアプリ
  • LIFF: LINE Front-end Framework
  • LIFFで作られたWebアプリをLIFFアプリと呼ぶ
    • LINEミニアプリはLIFFアプリの機能強化版
  • 誰でも開発できる: LINEミニアプリはリリース時にLINE社の審査が必要
  • LIFFアプリはLINEログインやチャットでのテキスト送信が主な機能
    • LINEPayAPIと連携すれば決済もできる
    • LINEミニアプリは予約・通知・決済などいろいろな機能がLINEの仕組みとして簡単に使える
  • LINEと簡単に連携できて, WebブラウザはもちろんのことLINE上でも動くアプリが作れる仕組み
  • 簡易版LINEミニアプリ
    • 決済などのクリティカルな機能は使えない
    • LINEの認証は使える
    • (確か)メールアドレスも取れる
      • ただしサーバー側実装が必要
LINEミニアプリ
  • 用語
    • スーパーアプリ: LINEやPayPay
    • ミニアプリ: LINEやPayPay内部にあるサードパーティ製のアプリ
    • 楽天をウェブ上のモールとみなす気分
  • 参考

ミニアプリの始まりは、WeChatのミニプログラムと言われます。 中国で圧倒的な人気で10億以上のアカウントを持つといわれるWeChatを運営するテンセントは、いち早くこのアプリ市場の流れを先読みし、2018年のはじめに、WeChatのアプリ内のアプリをミニプログラムとして提供し始めました。 これにより、WeChatのユーザーは、WeChat内での買い物や予約、友だち間の送金やゲームなど、他のアプリをダウンロードすることなく企業のサービスを利用できるようになりました。

ミニアプリのメリット
  • 最初に図を見よう: 参考
  • 実店舗との連携が一つのキモらしい: 予約や通知
  • 気軽に使える
    • 個別にアプリをインストールする必要なし
    • LINEやPayPayのようにユーザーが日常的に使っているアプリ上で起動する
    • ユーザーは用途別にアプリを起動しなくてよい
    • ユーザ情報・クレジットカード情報を個別に入力する必要もない
  • 気軽に開発できる
    • Web標準のスキルセットであるHTML/CSS/JavaScriptで開発できる
    • AppStore・GooglePlayなどのアプリケーションストアを通さなくてもよい
      • 現状ではLINE社の審査はある
      • うまく作れば(メインのGUIは据え置き, データはWebのDBアクセス)UIの変更がない限り再審査不要
    • ユーザの利用頻度の高いアプリから提供できる
    • ユーザ認証を0から実装せずにスーパーアプリでの認証情報を使える
    • Webアプリ: Web系開発者にとってはネイティブアプリの開発知識なしで開発できる
      • ネイティブアプリと違ってKotlin・Swiftなどを覚えなくてよい
    • インストールさせる手間もない
    • LINEとの連携がよい: LINEを主な連絡手段にしているならLINEから出ずにいろいろできる
ミニアプリのデメリット
  • LINEの審査が必要
  • ネイティブアプリ・インストールしたPWAと違ってホーム画面に出せない

数学・科学の英語記事を読もうの会

はじめに

アインシュタインの原論文を多言語で読もうの会を運営して気付いた点を補足すべく, 2021-06から二ヶ月の試験企画として立ち上げた. もともとは「Wikipedia の数学・物理系の英語記事を読んでみようの会」というタイトルにしていたが, もう少し広くした方がよさそうなので勉強会の暫定タイトルとしてつけてある.

もしあなたがこの企画にご興味があるなら, お問い合わせなどから連絡してほしい. Twitter (の DM) などでの他の手段でも構わない.

わかったことを簡潔に: 読むのが大変かつ長くて飽きる

半年以上勉強会を続けてきて気付いたことがいくつかある.

アインシュタインの原論文を読む勉強会はこれはこれで非常に勉強になり, 続ける意義も十二分あるのはよくわかった. 何より私が楽しく, 自身の勉強のモチベーションにさえなる.

しかしその一方で問題・課題もある. 一つは原論文は 31 ページとかなりボリュームがある. ちなみにいろいろな目的から多言語でやっていることもあり, 1 文 (1 ページではない) を読むのに少なくとも 3 時間はかかる. 1 文だけでも十分な情報量があり, それはそれでいいのだが, やはり短くても文章全体を読み切ったという達成感も大事にしたい. 端的に言えば飽きてきてしまう人もいるだろう. 語学と物理・数学を一緒にやるのも非常に大変だという話もあるにはある.

Wikipedia の英語記事を読んでみようの会

アインシュタインの原論文の勉強会はこれで続けるが, その一方で別の語学勉強会を次のような企画を試してみたい. タイトルの通り, 「Wikipedia の英語記事を読んでみようの会」だ. もちろん数学や物理などの記事を英語で読む. Wikipedia を選んだのはやはり多言語展開を念頭に置いている. 少なくとも日本語では英語のページを訳した記事もあり, 他の言語でも同じようなことがあるかもしれない. そして明らかに同じ言葉や概念に対して他の言語での説明がある, またはある可能性が高いため比較もしやすいからだ.

よくリスニングしろ・ペーパーバックを読んでみろといった指南がある. 興味がある続くモノとして映画もいいなどと書いてある. しかし理工系の人間は困るはずだ. そんなものに興味はないと. もちろん人の趣味は多様だからそうした題材でも楽しめる人は確実にいる. しかし一石二鳥で数学・物理・プログラミングと一緒に語学が勉強できればいいのに, そう思う人もまた一定数確実にいるはずだ. 何より私がそうだし, 私と同じ趣味を持つ人が一定数いることもはっきりとわかっている.

現代の英語学習環境を活かす

最近は英語での数学や物理の講義も YouTube に上がっている. 例えばフィールズ賞受賞者の Borcherds が自分のチャンネルに動画をあげていさえする. 以前よりは格段に手に取れる英語を含めたコンテンツが増えていてこんなに嬉しいことはない.

しかし語学の基礎知識に不安があり, 実際に何となくは読めるがきちんとは読めないという人も多いのではないかと思う. 本だと読み切りたくなってしまうだろうが, 量が多いといろいろな事情から読み切れずたいてい途中で終わってしまう. 程々の分量の文章が読みたい・読み切りたい, そう思うことはないだろうか.

提案

そこで実際に数学・物理をテーマにした Wikipedia の英語記事を読んでみてはどうか, そういう提案をしたい. Wikipedia はその性質からある単語や概念に関して程々のボリュームで解説がついている. 数学や物理のネタを筆頭に, 興味ある記事を読んでそれで語学も一緒に勉強できたらこんなお得なことはない. これを実現させようというのがこの企画である.

私は「大人の高校」または「理系のためのリベラルアーツ・総合語学」を目指したサービスを企画・立案・展開している. そのうち有料化して本格化しようと思っている. いまはこれを狙ってモニターを募集しつつ試験的に少人数で様子を探っている. 何か 1 テーマ, 具体的に Wikipedia の記事を読んでどんな感じになるか調べたい. そんなにたくさんいても仕方ないので 2-3 人集まれば実際にテストをする. 毎週 1 時間で 2 ヶ月くらい試験的にやってみたいので, 興味がある方はお問い合わせなどから連絡してほしい. 何を読むかは集まったメンバーと相談して決めたい.

今回の企画はあくまで語学に比重があるので, 数学や物理に関する話は深くは議論しない予定だ. 数学・物理もきちんとしたいという方は別途相談してほしい.

追記その1: メンバー募集のやり取り

いったん参加者を募集したところ次のようなコメントを頂いた.

理工系の英語の教材としては, 科学雑誌の読み物記事なども個人的には面白いと思います. 英文解釈の良いトレーニングになります. ご参考まで.

いろいろなところに書いているように, 理工系のためのリベラルアーツ・総合語学の裏テーマとして, 語学を軸にした文系人のための理工学入門も考えている. 実際, 私が所属している語学コミュニティの人で, 英語の読解・文法学習用にアインシュタインの原論文を多言語で読もうの会の動画・コンテンツを紹介したら次のようなコメントを頂いた.

あれ程理科や数学が苦手だった自分に, まさかあのアインシュタインの原論文を読める機会があるとは思わなかった. ほんの一部ではあっても本当に嬉しかったし, この喜びは誰かに共有したい.

語学講座の中では限界もあるとはいえ, 必要な範囲で数学・物理をはじめとした理系知識の話をするのは大事なことだ.

さらに次のような話も出た.

今まではそのまま「資産」にできるページを考えていましたが, 雑誌の候補紹介記事を見たら, 何というか文系の人向けには小学校・中学校レベルの理科的な話の方がよさそうだという霊感を感じました. 普通に英語自体を勉強したくて, そのネタとして数学・物理を使うか, 語学から数学・理科に迫るかで何を使うか変えるとよさそう, という気分です.

科学といってもいろいろで, 言語の発達に関するものだったり, 意外と身近なテーマがあり, また, 英語自体も定評があるので, 文理問わず, 英語を勉強したい人, 教養を得たい人に需要があるかと思います. 日経サイエンスには「英語で読む日経サイエンス」という日英対訳のページがあります.

理工系のリベラルアーツをうたう以上, 数学・物理・プログラミングだけでは羊頭狗肉である. 私自身, 興味関心の幅を広げていかなければ口だけ人間になってしまうという危惧もある. そこで上の記事で引用されているいろいろな記事まで射程距離に入れることにし, 試験的な会のタイトルも変えてみた.

追記その2: 勉強会の進め方

今回の試験企画に関する話と, 今後展開する勉強会の内容とがある.

基本: 2 ヶ月で進めるところまでしかやらない

これを基本にしたい. 1 つの記事が全て読み切れなくても気にせずそこで終える. 2 ヶ月 1 テーマと区切ってモチベーションを保つのが目的だからだ. もっと言えば, 途中までしか読めなかったからと言っても, そこまでは頑張って読んだわけで, それ自体が大きな成果だからだ. 2 ヶ月間 1 テーマをきっちりやりきった事実を大事にしてほしい. 逆に言えばそれでおさまる程度のコンテンツを選ぶのも大事だと思っている.

基本的には各参加者にはいわゆる生涯学習として自分自身で勉強を続けてほしいと思っている. この企画はあくまでその補助の一つで, 一人では大変なことを皆で乗り切ろうという部分に焦点がある. 残った部分は興味があれば自分で引き続きやってみてほしい.

もちろんテーマによって継続でやった方がいいこともあるだろう. それはそれとして適切に対処したい. ただし今回の試験企画のメインテーマはそこではない.

今回の試験企画: 単語の深掘り

「アインシュタインの原論文を多言語で読もうの会」で文法をゴリっとやっているため, どちらかと言えばそこで切り落とした単語の深掘りをやってみたい. 英語はいろいろな言語の要素をチャンポンにしためちゃくちゃな言語で, 少し掘るといろいろな言語の要素が顔を出す. 特に単語・語源調査の面からそこに迫りたい.

ただし文法的にきちんと追いかけるのも大事だと考えてはいる. これは実際に参加名乗りを挙げてくれた方からの次のコメントによる.

できれば文法解説も入れて「語彙と文法の両輪があってはじめてきちんと文が読めますよ」ということが伝えられるような講座だと嬉しいです.

雑誌の文章には, アインシュタインとはまた別の読解の難しさ (楽しさ) がありそうなので. 一見やさしそうなのに実は難解な構文が多々出てきて, 必要に応じてスラッシュや矢印などのマークを入れながら解析しています.

今回実際に読む文章がどこまで文法的にハードかにもよるが, 構文・文法解析が必要なところには適切に対処したい.

さらに追記: あくまで実験・検証的な企画

これは私自身が勉強を楽しむこと, 教育を通じて自分自身の理解も深めること, そして勉強会を気楽に開催するための工夫といった目的がある. さらにもう一つ, そもそもこの試験企画を立ち上げようと思った目的は, 相対性理論の原論文を読む会の文法処理が重過ぎてワンテーマが読み切れないことにある.

少し準備してみたところ一番最後のそもそも部分, つまりワンテーマ読み切り勉強会にするのが恐ろしく大変そうになることがわかった. これは単語の深掘りをやろうとしたときの問題だ. 多少は触れたいがこれとワンテーマ読み切るのをどう両立するかが課題になっていることがわかった. いま考えているのは一回さらっと全体を読んでから, 必要に応じて深掘りするのはどうかという部分. 特にせっかくだから各記事の科学的な内容自体も勉強したいという思いもある. 本格始動させてみてわかることもあるので, 2 ヶ月間いろいろな試行錯誤をしていく.

ENERGEIA

オンライン部活サイトENERGEIAで「数学和尚の数学かけこみ寺」をやっています.

趣旨

部活詳細ページ

まず読んでほしい文章があります

何はともあれ, まずは次の文章を読んでみてください. リンク先は6ページのPDFになっています.

この文章は山形大学の数学科が主催した数学エッセイコンテストで入賞していた作品です. 簡単にあらすじだけ書いておくと, ご家庭の事情もあって中卒で稼業を継いだ方が, お子さんの就学を機にお子さんと算数・数学の勉強をはじめた話です. 「数学とこんな付き合い方もできるのか」とはっとさせられる, 穏やかな筆致のとても素敵な文章です.

数学をしよう

さて, ここは特に算数から中学・高校程度の数学を勉強する部活です. お好みで好きな内容を好きなペースで勉強してください. 日常の中に数学を溶け込ませることを目標に, ガチガチにやるよりもダラダラとのんびりみんなで算数・数学しようと思っています.

必要に応じて部長によるオンライン授業をすることなども考えていますが, 基本的には「教え合い」を中心に考えています. 何故かというと, 人に教えるのが一番効果的な勉強法だからです. 頻度などは未定ですが, 定期的にオンラインのゆるい勉強会の開催も考えています. なかなか一人では勉強が進まないでしょう. そこを埋めるべく, みんなでのんびり数学に触れる時間を作るのが目的です.

簡単な自己紹介

私は学部は早稲田で物理を, 修士は東大の数理科学研究科で数学をしていました. 社会に出てからはIT系のエンジニア・プログラマーとしてはたらいています. そうした経験をもとに, プライベートでゴリゴリに専門的な数学・物理に関する情報発信やコンテンツ制作・販売をしています. 最近は理論物理学者に市民が数学を教えたり, アインシュタインの特殊相対性理論の原論文を読むことを通じて英語・ドイツ語を含む多言語の勉強をする勉強会や, プログラミングの勉強会を主催しています.

これらは概要からわかる通り, かなり専門的な内容ばかりです. 一方, 私の活動の原点は「昔ほしかったモノが今でもない. それならもう自分で作る」です. 私の周囲にもいわゆる理系人材はほぼおらず, 理工系の内容に関して誰にどう相談したらいいかわかりませんでした. 今思えば理系科目の教員は理系だったわけで, そうした人に相談すればよかったのですが, そうした発想さえ持てませんでした. そのくらい発想も情報もなかったのです. そして大学・大学院でいわゆる超進学校出身の学生の話を聞いて愕然としました. 彼ら・彼女らは親・知人・友人のネットワークから大量の情報をもらえています. 本当に, ごくごく単純に, これを「ずるい」と思ったのです. 私もそんな環境がほしかったと. そうした経緯があり, いま理工系を志す中高生向け教育に関して私の地元の区議に提案を出していさえいます. いまは新型コロナ対応で区役所の教育部門にも余裕がないようで, 話が止まっています.

しかし個人で動けることはいろいろあります. そんな活動の一環としてここでは特に, 最終的に本当に中高生向けに転用できるコンテンツやノウハウを整備したいと考えています. それが算数・中高数学を中心にしたこの部を立てた理由です.

もう少し詳しく部活の内容

もしかしたらあなたは大学レベルの数学や物理を勉強したいと思っているかもしれません. そうした方が参加してくださっても構いません. それはそれなりに対応します. ただ, あくまでもメインは中高数学までを想定しています. 文系プログラマーで最近の機械学習関係で数学を復習しないといけない, みたいな方も歓迎します.

私は重荷, コンテンツ制作の進捗がよろしくない中高数学とプログラミングに関わる話, 数学・物理のための英語といった部分で, 広い意味で数学に関わる内容で部活していこうと思っています. 毎日「これがわからん」と適当にのんびりやっていると思います. 何か要望があれば, それに関する小ネタや数学の応用の話などもしようと思っています.

他の人の勉強の様子を見ているだけでも楽しいでしょう. 「こんな分野や応用もあるのか」という新鮮な驚きもあるかもしれません. 私自身, 物理という形での数学の応用についてはいろいろな話ができます. 数学・物理に関する相談にも気軽に乗りますし, そういうプチ勉強会・座談会・雑談会があってもいいと思っています.

トップ固定投稿

はじめにやってほしいこと: どんな人がどんな意図・目的をもって参加しているのか知りたいので、ぜひ自己紹介シートに記入をお願いします。

意図的に他の人の内容も見られるようにしているので、興味が近い人がいれば、ぜひ誘い合って勉強してみてください。 他にも何か思いついたら随時追記します。

ぜひ、日々二秒でいいので「数学」をしてください。そしてその結果・成果をぜひ投稿してください。 いっぱい投稿が入るとごちゃごちゃしそうなので、まずは前日または当日の私の投稿のコメントに書くようにしてください。

ここでいう「数学」は、ENERGEIAとこの部活にアクセスして「数学」の文字を見るだけでも十分です。数学をやるなんていうのはふつう凄まじく精神的な負荷がかかると思うので、このくらいの軽いところから始めるので十分です。

最後に, 私が作ってきたコンテンツで適当な形でまとまったコンテンツを紹介しておきます.

では数学を始めましょう!

イベント(勉強会)の記録

2021-05-02

GWなので休み.

2021-04-25

予定

新入社員や学生がPython本を買い込む季節だけれど、この東大のPython入門は無料公開。scikit-learnについても説明されている Pythonプログラミング入門 東京大学 数理・情報教育研究センター

MOOCSはMITとStanfordの独壇場に見えて、東大も社会に対していいサポートと動きをしていると思う 東大が無料公開している超良質なPython/Data Science/Cloud教材まとめ (*随時更新)

実際

語学コンテンツの整理をした.

2021-04-18

最初だけ参加者一名. ただし途中で抜け. Project Eulerの解答に関して簡単に話をしてみたらいろいろ不備が見つかったので追記した.

2021-04-11

参加者がいなかったので適当にコンテンツ作成タイム.

2021-03-21

参加者一名. 適当に機械学習系の数理に関する話をした.

2021-03-14

部活の趣旨や私の活動に関して改めて説明.

  • 関根(部長)の最近の活動の概要を話してみた
  • どんなことをしたら面白そうか聞いてみた
  • 各人ごとの興味に合わせた応用の話とか
  • 実際に作っているコンテンツがあるのでそれの紹介
  • もっと中高数学をやろう:既存コンテンツもきちんと紹介しよう
  • スマホにも入っているGPS地図と一般相対論
  • プログラミングと絡めた話, AI・人工知能(機械学習)の話
  • 離散数学ネタ:計算幾何に関わる話とか

理論物理学者に市民が数学を教えようの会

コメント

これは理論物理学者でもある松尾衛さんとの公開勉強会の記録です. 松尾さんからのコメントのいくつかはこのページにまとめられているので, こちらも参考にしてください.

7/12 以降は有料での指導をすることになり, そちらはクローズドで進めることになりました. 公開前提で進めていた過去の動画・資料は公開したままにしておくので, ぜひ有効活用してください.

基本的な URL リスト

公開勉強会タイトル一覧

これは YouTube の動画のタイトルでもあります.

  • 2020-09-28 摂動論の謎 物理の摂動論と数学の摂動論 微妙な緊張関係と物理
  • 2020-10-05 物性の摂動論 自己共役性と摂動 その数理と物理
  • 2020-10-12 水素原子と場の量子論 量子力学の空間設定と代数学への誘い
  • 2020-10-19 赤外発散処理のための関数解析入門 位相に関わる諸相
  • 2020-10-26 線型代数・微分積分の復習 両者をミックスさせるとどうなる?
  • 2020-11-02 関数解析と物理 場の量子論の様々な数理と物理
  • 2020-11-09 ヒルベルト空間への道 モデルケースとしての実数論
  • 2021-01-18 モデルケースとしての実数論 解析学のための集合・位相入門の入門
  • 2021-03-15 超関数論入門 モデルケースとしての実数論
  • 2021-05-03 超関数論の気分 定義のあとの注意, 落穂拾い
  • 2021-05-17 不等式がなぜ大事か? 面積からの集合論入門のイントロ 理論物理学者に市民が数学を教えようの会
  • 2021-07-12 測度論に向けた準備 面積からの集合論入門のイントロ 理論物理学者に市民が数学を教えようの会

中高数学+物理+プログラミングのオンライン勉強会

概要

勉強会用に準備した資料をせっかくなので公開. Zoom でやっていて動画も撮っているが, それは私以外の参加者の声も入っているので非公開.

もともとは次のコンテンツのブラッシュアップのためなどいくつかの目的で, 必要なことを教えるので協力してくれないか, という感じではじめた勉強会.

周辺知識を揃えないとつらくなってきたので, IT 関係の基礎知識も紹介するようになった. あと課題もあると嬉しいという話があり, 実際に中高生に勉強してもらうときも参考になるだろうと思い, 課題も毎回作って適当に解説もしている.

ipynb to md

必要なら nbconver で markdown 化. ブログにあげるときは面倒なので画像はアップしていない.

1
2
$ jupyter nbconvert --to <output format> <input notebook>
$ jupyter nbconvert --to markdown 2020-.*.ipynb

企画趣旨

はじめに

いま, 1 年くらいの長期にわたって知人と少人数でゆるく統計学・機械学習系の勉強会をしている. そこからのスピンオフで Python と基本的な数学に関する勉強会をやろうと思っていて, その内容に関する事前説明資料として記事にする. 説明資料が長文になるのでその共有のためもあり, 他の人もそれぞれで同じようなことをやってほしいのもあり, この計画が参考になるだろうと思ったのもある. 私が持っているコンテンツを提供できるので, 必要なら連絡してほしい.

バリバリと進んだことがやりたい中高生向けの数学・物理・プログラミング教育を進めようと思っていて, いまちょうど新型コロナで話が潰れているが, 実際に地元の知り合いの政治家・自治体にも提案はしている. Jupyter notebook でコンテンツを作っていて, まだ完全にチェックできていないオンラインのプログラミング環境の検証も兼ねている. 経験上も慣れていない人がプログラミング環境をローカルに作るのは本当に大変なので, Google Colabolatory などプログラミング環境をオンラインで完結させたい. よくも悪くも時代がそうなっていくだろうというのもある.

言語として Python は好きではないが, 事実上の入門デファクトという感もあるので, とりあえずそこにした. 数学・物理系で入門レベルの情報がとても多く, それなりに質もあり, バリエーション豊かなところは最THE高とは思う

ちなみにさらなるコンテンツ作成のために次の GitHub リポジトリにコードをためていて, それで生成した動画は YouTube に上げている. 興味があればぜひ眺めてほしい.

さらに次のページに数学系の無料の通信講座をいくつか置いてある. 登録用のページだけでも数学・物理の勉強をする参考になると思うので, これも興味があれば眺めてほしい.

大方針

私の趣味・守備範囲もあるので, 数学・物理方面からプログラミングに入る. 基本的な方向性としては次の無料通信講座と, その続編として作ったコンテンツを基礎にして展開する.

次の大方針で進める.

  • まずは細かいことはさておき, プログラミングでできることをゴリゴリ紹介する
  • まずはお絵描き中心
  • 離散化すれば四則演算でしかないので微分・積分をダイレクトに数値計算する形で進める
    • まずは波動方程式・拡散方程式を見せる
    • 波と拡散というイメージと視覚がマッチした対象だから
    • まずは概要を掴むのが目的なので本質的な数学部分が難しくなるのは気にしない
    • 何をするにも慣れが必要なので, とにかく浴びて慣れてもらうのが目的
  • お絵描き+数値計算で Python プログラミングの気分を掴む
  • 少しずつプログラムの詳細を見ていく
    • 暴力的な量の四則演算を進めるだけなので「数学」の話は最低限に留めながら進める
  • ある程度慣れてきた段階でプログラムと並行して数学の話をする

概要・議論の順番

いま考えているのは次のような感じ.

  • ある意味での終着点, 波動方程式・拡散方程式の数値計算結果の動画を見る・作ってみる
  • 偏微分方程式はわけわからなくても最終的に計算させる離散化の式はそれはそう, という感じのはずなのでそれを紹介する
  • 他にも微分方程式でどんな現象が表せてどんなことができるか紹介する
    • 常微分方程式の紹介
      • ホジキン-ハクスレー方程式 (大雑把に言ってノーベル医学・生理学賞の対象 (らしい)
      • フィッツヒュー・南雲方程式
      • 放射性物質の崩壊の方程式
      • ロジスティック方程式
      • 単振動の方程式
    • 微分方程式の数値計算の観点から見た中高数学の復習とプログラムへの落とし込み
  • 中高数学の復習をしつつ Python プログラムへの落とし込み

いったん別のところで組み上げたコンテンツがあるので, それをブラッシュアップしつつ進める予定. その意味では目次もある: 中高数学の復習の部分が詳しいだけではある. 質疑応答しつつ, 適当にプログラミングについても補足説明を入れていく.

ちなみに波動方程式や拡散方程式の数値計算結果は次のような感じ.

とりあえずはこんなところか. 録画しておいて, YouTube にも公開する予定. 他の人が勉強会をする参考になるはずだから, 質問・コメントが来たらこちらにも回答を追加していこう.

2020-04-19課題

はじめに

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 00-introduction_02_jupyter.ipynb を一通り読んで Jupyter notebook(大雑把には Google Colab も同じ)の概要を把握してください。特に次の点に注意して読んでください。
  • テキストセルを作ってください。
    • テキストセルに何か文章を書いてみてください。文章は「あ」だけでも構いません。
    • TeX 形式で次のような式を打ってみてください。「このセル」をダブルクリックで開くとどうすれば式が打てるかわかるので、そのコピペで構いません。他にも資料を漁ってどんな風に書くとどう表示されるか眺めてみるといいでしょう。

$$\int_0^1 f(x) \, dx$$

  • コードセルを作ってください。
    • 01-basic_01_fundamental.ipynb を参考に print("Hello, World!") を実行してみてください。「実行結果出力欄」に「Hello, World!」と出れば成功です。
  • もう 1 つコードセルを作ってください。
    • 01-basic_03_matplotlib.ipynb を参考に、グラフを 1 つ書いてみてください。コピペでグラフが出てくることを確認するだけで十分です。
    • お好みでの追加タスク:いろいろ推測しながらプログラムを少しいじってみて、直線以外のグラフを描いたり、グラフを描く範囲を変えてみてください。

プログラムを勉強するときの注意

  • プログラミング「言語」と言われるように、いわゆる語学を勉強するときのコツがある程度流用できます。
  • 「英作文は英借文」というように、既に動いている(通じる)「例文」をコピペしてみましょう。そこからパーツを少し変えてみてどうなるか試します。
  • プログラミング言語は機械が意味を判定するので、文法に厳格に沿っていないと「きちんと文法通りに話せ」と怒られます。
    • ある程度まで来たらこの文法もきちんと勉強する必要があります。
    • よほどの趣味を持っていない限り、文法の勉強は初学の段階であまり面白いものでもないので、まずは 01-basic_01_fundamental.ipynb に書いてあることを雑に眺めて気分を掴んでください。
    • 公式のチュートリアルも参考になります。
      • Web 上の資源の問題として、リンクがたくさん張られている関係でいろいろな所に飛ばされる(飛びたくなる)ことがあります。本だと自分でページを飛ばさない限り一直線の道を歩むしかないので、Web 上の資源で勉強すると気が散るなら本を買ってざっと眺めるのも一手です。
  • 一般の語学でも実際に読み書きしないと身につかないように、プログラムも実際に読み書きしないと身につきません。Jupyter notebook 配布のいいところはすぐにコード実行できるところにあります。パチパチ実行してみてください。

解答例

参考:TeX
  • $f(x)$ のように 1 つのドルマークで囲むと地の文に普通に埋め込まれる式として $\int f(x) dx$ が書けます。
  • $$\int f(x) dx, \left{a\in A \mid a>0, b>0 \text{かつ} c>0\right}$$ と 2 つのドルマークで囲むと別行立ての式 $$\int f(x) dx$$ が書けます。
  • \begin{align} \int f(x) dx \end{align} などと書くと、数式環境下での式が書けます。 \begin{align} \int f(x) dx \end{align}
  • 複数行ある複雑な式を書くときは数式環境下で式を書きます:参考リンク
  • 数式環境と $$\int f(x)dx$$ 型との違い・使い分けについては次のように考えましょう.
  • $$\int f(x) dx$$ はあくまで地の文に埋め込みたいが縦・横に長い式なので別行立ての方が見やすい場合に使う
  • \begin{align} \int f(x) dx \end{align} は複数行にわたるハードな式展開・計算を書くときに使う.

$\epsilon$ $\varepsilon$

$$A = (a_{ij}) = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}.$$

参考:Markdown
  • テキストセルは TeX の他, markdown という形式で書けます.
  • 参考リンク
  • 参考リンク
  • 参考リンク
  • 段落分けや文字の強調などはこの形式に沿っています.
  • 主に技術系の文書を書くために使われる書式なので, 過度な装飾はできません (そもそもそういう機能がない).
コード例
  • sympy のサンプルを紹介します。
  • Google Colab 上ではオリジナルの Jupyter より面倒で、追加処理が必要です。
    • オリジナルの Jupyter では動くのに Google Colab 上では動かない (らしい) プログラムもあります
    • 例:4 次方程式の解の公式の表示.
  • 実際に一通り眺めて sympy をできる限り Google Colab 上でも動くようにするのはこの勉強会の目的の 1 つです.

```python !pip install --upgrade sympy

import sympy as sp from sympy.plotting import plot from IPython.display import display

def custom_latex_printer(expr, options): from IPython.display import Math, HTML from google.colab.output._publish import javascript url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML" javascript(content="""window.MathJax = { tex2jax: { inlineMath: [ ['$','$'] ], processEscapes: true } };""") javascript(url=url) return sp.latex(expr, options)

sp.init_printing(use_latex="mathjax", latex_printer=custom_latex_printer)

x = sp.Symbol('x') expr = x*2-12x+8 display(expr) ```

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 Collecting sympy
 [?25l  Downloading https://files.pythonhosted.org/packages/ce/5b/acc12e3c0d0be685601fc2b2d20ed18dc0bf461380e763afc9d0a548deb0/sympy-1.5.1-py2.py3-none-any.whl (5.6MB)
      |████████████████████████████████| 5.6MB 8.4MB/s
 [?25hRequirement already satisfied, skipping upgrade: mpmath>=0.19 in /usr/local/lib/python3.6/dist-packages (from sympy) (1.1.0)
 Installing collected packages: sympy
   Found existing installation: sympy 1.1.1
     Uninstalling sympy-1.1.1:
       Successfully uninstalled sympy-1.1.1
 Successfully installed sympy-1.5.1



 <IPython.core.display.Javascript object>

$\displaystyle x^{2} - 12 x + 8$

python x = sp.Symbol('x') y = sp.Symbol('y') expr1 = 2*x + 3*y - 6 expr2 = 3*x + 2*y - 12 display(expr1) display(expr2) #display(sp.solve((expr1, expr2))) # Math Processing error になる

1
 <IPython.core.display.Javascript object>

$\displaystyle 2 x + 3 y - 6$

1
 <IPython.core.display.Javascript object>

$\displaystyle 3 x + 2 y - 12$

python display(sp.solve((expr1, expr2)))

1
 <IPython.core.display.Javascript object>

$\displaystyle \left{ x : \frac{24}{5}, \ y : - \frac{6}{5}\right}$

  • 上の方程式は厳密解として $x=4.8,y=-1.2$ を持つ。
  • これの近似解として例えば $x=4.78888888,y=-1.1999999$

python p = plot(-(2/3)*x - 2, - (3/2)*x - 6, legend=True, show=False) p[0].line_color = 'b' p[1].line_color = 'r' p.show()

1
2
3
4
5
6
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1065: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   self.ax[i].spines['left'].set_smart_bounds(True)
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1066: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   self.ax[i].spines['bottom'].set_smart_bounds(False)

```python eq1 = x2 + y2 - 1 eq2 = x - y

plot1 = sp.plot_implicit(eq1, line_color="blue", show=False) plot2 = sp.plot_implicit(eq2, line_color="green", show=False) plot1.extend(plot2) plot1.show() ```

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1065: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   self.ax[i].spines['left'].set_smart_bounds(True)
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1066: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   self.ax[i].spines['bottom'].set_smart_bounds(False)
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1096: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   ax.spines['left'].set_smart_bounds(False)
 /usr/local/lib/python3.6/dist-packages/sympy/plotting/plot.py:1097: MatplotlibDeprecationWarning:
 The set_smart_bounds function was deprecated in Matplotlib 3.2 and will be removed two minor releases later.
   ax.spines['bottom'].set_smart_bounds(False)

```python import sympy as sp from sympy.plotting import plot from IPython.display import display

def custom_latex_printer(expr, options): from IPython.display import Math, HTML from google.colab.output._publish import javascript url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML" javascript(content="""window.MathJax = { tex2jax: { inlineMath: [ ['$','$'] ], processEscapes: true } };""") javascript(url=url) return sp.latex(expr, options)

a,b,c,d,x = sp.symbols('a,b,c,d,x') expr = ax3 + bx*2 + cx + d

display(sp.solve(expr, x, dict=True)) ```

$\displaystyle \left[ \left{ x : - \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} - \frac{\sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} - \frac{b}{3 a}\right}, \ \left{ x : - \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \left(- \frac{1}{2} - \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} - \frac{\left(- \frac{1}{2} - \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} - \frac{b}{3 a}\right}, \ \left{ x : - \frac{- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}}{3 \left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}} - \frac{\left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{- 4 \left(- \frac{3 c}{a} + \frac{b^{2}}{a^{2}}\right)^{3} + \left(\frac{27 d}{a} - \frac{9 b c}{a^{2}} + \frac{2 b^{3}}{a^{3}}\right)^{2}}}{2} + \frac{27 d}{2 a} - \frac{9 b c}{2 a^{2}} + \frac{b^{3}}{a^{3}}}}{3} - \frac{b}{3 a}\right}\right]$

2020-04-19オンライン数学勉強会用イントロ

はじめに

まとめ
事前準備:sympy インストールとチェック
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from sympy import *
from IPython.display import display

def custom_latex_printer(expr, **options):
    from IPython.display import Math, HTML
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML"
    javascript(content="""window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
        };""")
    javascript(url=url)
    return latex(expr, **options)

init_printing(use_latex="mathjax", latex_printer=custom_latex_printer)

x = Symbol('x')
expr = x**2-12*x+8
display(expr)
1
<IPython.core.display.Javascript object>

$$x^{2} - 12 x + 8$$

はじめの注意
  • 吃音があるので聞きにくいと思います。
  • 言いにくい場合は文字で書きます。
  • いろいろ試験的な取り組みです。
  • この資料はあとで配ります。
大方針
  • Python でプログラミング
  • 将来に向けたいろいろなテストを兼ねる
  • 中高生または中高数学復習用に作ったコンテンツのテスト・流用
  • 試験的に Google Colabolratory を利用
  • いま使っている「これ」
  • ローカルの環境構築がいらない
  • TeX の形式を使うと式もきれいに書ける:$$\int_\Omega f(x) \, dx$$
  • 何回くらい・どのくらいの期間になるかは不明
  • なるべくゆっくり・ゆるく進める
  • 日々いろいろなタスクがある大人向けの勉強会なのでゴリゴリにやると疲れ果てて続かない
  • その代わり長期戦でのんびりやる
  • 予習はやりたければやる
  • 無理がない範囲で、長続きさせることを第一に
  • 復習は勉強会の中でやる
    • その分ペースも遅くなる
    • その遅さが気になるなら予習をしよう
  • 復習を自力でやれるくらいならはじめから独学できていると思う
勉強のコツ
  • 「すぐに理解する・できる」という幻想を捨てる
  • 同じことを何度も繰り返して、少しずつ慣れる
  • 究極的には「独学」が必要
  • そのサポートをするのがこの勉強会の目的
  • 細部が詳しい本はたくさんあり、いろいろなレベルの本がたくさんある
  • この勉強会の当面の主目的は概要を掴むこと
  • 細かいことが気になったら都度調べるなり質問するなりしてもらう
  • そしてすぐにわからなくても気にしない
進め方の方針
  • 細かいことはさておき, プログラミングでできることをゴリゴリ紹介する
  • まずはお絵描き中心:微分方程式を解く
  • 後の内容も「中高数学のネタを視覚化する」方向で進める。
  • 微分方程式に関して
    • 高校数学の最終目的地の微分・積分に直結する
    • 微分・積分は統計学をはじめとしたその他いろいろな応用でも主力
    • 離散化すれば四則演算でしかないので微分・積分をダイレクトに数値計算する形で進める
    • 今回、イメージづくりで波動方程式・拡散方程式を見せる
    • 波と拡散というイメージと視覚がマッチした対象だから
    • まずは概要を掴むのが目的なので本質的な数学部分が難しくなるのは気にしない
    • 何をするにも慣れが必要なので, とにかく浴びて慣れてもらうのが目的
  • お絵描き+数値計算で Python プログラミングの気分を掴む
  • 少しずつプログラムの詳細を見ていく
    • 暴力的な量の四則演算を進めるだけなので「数学」の話は最低限に留めながら進める
  • ある程度慣れてきた段階でプログラムと並行して数学の話をする

基礎コンテンツの紹介

  • 中高数学をプログラミングを軸にまとめた。
  • この講座ではプログラミング、特に Python については深くは解説しない
  • 必要ならその時々の新しい本で勉強すること。
  • 古い本を選んでしまうと、最新の環境でその本に書かれたプログラムが動かない可能性がある。
講座の構成
  1. 数学に関わる Python の基礎
    • 重要なライブラリ numpy のまとめ
    • 重要なライブラリ matplotlib のまとめ
    • 重要なライブラリ sympy のまとめ
    • 上記ライブラリを使った数学プログラミングのまとめ
  2. 線型代数:ベクトルと行列
  3. 微分積分
  4. 確率
  5. 統計
  6. 常微分方程式
  7. 偏微分方程式
大まかな説明
  • 最初の第 1 章:Python を使ってどんなことができるかを説明
    • 特に Python 自体の基本的な機能とライブラリの使い方を説明
    • 必要なコードは各箇所に書かれているので、ここは飛ばしてすぐに本編に進んでも問題ない
  • 線型代数以降の各章から、数学・プログラミングが混然一体になった本編がはじまる。
  • 常微分方程式の章を先に読んでみるのもおすすめします。
  • 「大事なことは何度でも」の精神
注意・当面の進めるイメージ
  • 下の 2 つを先にざっと眺める
  • 既に無料講座として公開している常微分方程式の章を少しずつ詳しく進める
  • 微分積分をやる

環境構築

Google Colab
  • いわゆる gmail のアカウントがあれば使える。
  • 「google colaboratory」でググってトップに出てくるページを開けば開くはず
  • 公式のチュートリアルもあるので、それを見よう
Python のインストール
  • インストールのことを「環境構築」とも呼ぶことにする
  • 将来の対応を考えて、勉強会では Google Colaboratory で進めてみる
  • ローカル(自分の PC)にインストールしたいなら、適当にやる
  • 経験上、「素人」の状態で環境構築は本当に大変
  • プログラミング・環境構築に慣れていない状態で数学と絡めた環境構築がしたいなら、Anaconda でインストールするのが楽
  • Google Colab 前提なのでこれ以上詳しくは触れない
  • 本格的にプログラミングするならローカルに環境を作るのは必須

本題:数学とアニメーション

定積分のアニメーション
  • 定積分はグラフが囲む領域の面積
  • いわゆる区分求積法:次のように定義する

\begin{align} \int_0^1 f(x) dx &= \lim_{n \to \infty} \frac{1}{n} \sum_{k=0}^{n-1} f \left( \frac{k}{n} \right), \ n = 2 &\Rightarrow \frac{1}{2} \left(f\left(\frac02\right) + f\left(\frac12\right)\right) \ n = 3 &\Rightarrow \frac{1}{3} \left(f\left(\frac03\right) + f\left(\frac13\right) + f\left(\frac23\right)\right) \end{align}

  • 右辺に注目する
    • $\frac{1}{n}$ は単なる割り算
    • $\sum_{k=0}^{n-1}$ は $n$ 項足しているだけ
    • $\lim$ は $n$ をどんどん大きくしている
  • 数値計算でやること
    • 十分大きな $n$ で右辺を計算する
    • だいたい面積が近似できることを確認する
アニメーション用の基本関数
  • 次の関数でいろいろやっている:今回詳しくは触れない
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import matplotlib.pyplot as plt

def scatter_integral_body(num_data, is_left, f, param):
    # 描画領域の指定
    fig = plt.figure(figsize=(param["figsize_x"], param["figsize_y"]))
    subplot = fig.add_subplot(1, 1, 1)
    subplot.set_xlim(param["x_min"], param["x_max"])
    subplot.set_ylim(param["y_min"], param["y_max"])

    # 参考: グラフを折れ線で描く. 折れ線近似の様子を見たい場合に使う.
    #linex = np.linspace(param["x_min"], param["x_max"], num_data)
    #subplot.plot(linex, f(linex), color='blue')

    # 長方形の描画と面積の近似値計算
    area = 0
    step = (param["x_max"] - param["x_min"]) / num_data
    for x0 in np.arange(param["x_min"], param["x_max"], step):
        x = x0 if is_left else x0 + step
        rect = plt.Rectangle((x0, 0), step, f(x), alpha=param["alpha"])
        subplot.add_patch(rect)
        area += step * f(x)

    subplot.text(param["text_x"], param["text_y"], ('area = %f' % area))

    # 関数と三角関数の描画:上の supplot の処理の後に置かないと上の長方形が描かれない
    vf = np.vectorize(f)

    x_for_square = np.linspace(param["x_min"], param["x_max"], param["num_max"])
    y0 = vf(x_for_square)
    plt.plot(x_for_square, y0, color="red")
底辺と高さ 1 の直角三角形の面積
  • 底辺×高さ / 2 = 1/2
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from ipywidgets import interact

def scatter(num_data, is_left):
    def f(x):
        return x

    param = {
        "x_min": 0.0,
        "x_max": 1.0,
        "y_min": 0.0,
        "y_max": 1.0,
        "figsize_x": 4,
        "figsize_y": 4,
        "alpha": 0.5,
        "text_x": 0.2,
        "text_y": 0.7,
        "num_max": 50
    }
    scatter_integral_body(num_data, is_left, f, param)

num_max = 50
interact(scatter, num_data=(2, num_max, 1), is_left=True)
1
2
3
4
5
6
7
interactive(children=(IntSlider(value=26, description='num_data', max=50, min=2), Checkbox(value=True, descrip…





<function __main__.scatter>
参照用

\begin{align} \int_0^1 f(x) dx &= \lim_{n \to \infty} \frac{1}{n} \sum_{k=0}^{n-1} f \left( \frac{k}{n} \right), \ n = 2 &\Rightarrow \frac{1}{2} \left(f\left(\frac02\right) + f\left(\frac12\right)\right) \ n = 3 &\Rightarrow \frac{1}{3} \left(f\left(\frac03\right) + f\left(\frac13\right) + f\left(\frac23\right)\right) \end{align}

二次関数
  • $x^2$ を $[0,2]$ で積分
  • 面積は $\int_0^2 x^2 dx = 8/3 = 2.6666...$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from ipywidgets import interact

def scatter(num_data, is_left):
    def f(x):
        return x**2

    param = {
        "x_min": 0.0,
        "x_max": 2.0,
        "y_min": 0.0,
        "y_max": 4.0,
        "figsize_x": 4,
        "figsize_y": 4,
        "alpha": 0.5,
        "text_x": 0.2,
        "text_y": 3.0,
        "num_max": 50
    }
    scatter_integral_body(num_data, is_left, f, param)

num_max = 50
interact(scatter, num_data=(2, num_max, 1), is_left=True)
1
2
3
4
5
6
7
interactive(children=(IntSlider(value=26, description='num_data', max=50, min=2), Checkbox(value=True, descrip…





<function __main__.scatter>
定積分の大雑把なまとめ
  • どんどん細かくしていくと、細かさに応じて近似がよくなる。
  • 近似を上げていった最果てで厳密な値が得られるとみなす。
  • 視覚的に確認すると定義の意図が見えやすくなる
  • 定義の意図がわかっていないとプログラムを書くのも難しい
1 次元の波動方程式
  • ひもの左端を揺らしたときのひもの振動(波)の様子を見る
  • 波が右端まで行くと反射するところも見られる
偏微分方程式としての波動方程式

\begin{align} u_{tt} = c^2 u_{xx}, \quad \frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}. \end{align}

  • ここで $c$ は定数で物理的には波の速度。
  • 物理だとこれをどうやって導出するかも問われる。
  • ここではそうした議論はせず、とにかく数値的に解いてみて波を表している様子を眺める

\begin{align} \frac{\partial u}{\partial t} &= \lim_{\Delta t \to 0}\frac{u(t + \Delta t, x) - u(t,x)}{\Delta t} \ &\simeq \frac{u(t + \Delta t, x) - u(t,x)}{\Delta t} \end{align}

\begin{align} \frac{\partial^2 u}{\partial t^2} = \frac{\partial}{\partial t} \frac{\partial u}{\partial t}= \frac{u_t(t+\Delta t,x) - u_t(t,x)}{\Delta t} &\simeq \frac{\frac{u(t + \Delta t, x) - u(t,x)}{\Delta t} - \frac{u(t , x) - u(t- \Delta t,x)}{\Delta t}}{\Delta t} \end{align}

最終的に計算する式

\begin{align} u(t + \Delta t, x ) = 2 u(t,x) - u(t - \Delta t, x) + \left(\frac{c \Delta t}{\Delta x}\right)^2 \left(u(t, x + \Delta x) - 2 u(t,x) + u(t, x - \Delta x) \right). \end{align}

  • 次の時刻 $t + \Delta t$ の値を計算するのに現在時刻 $t$ とひとつ前の時刻 $t - \Delta t$ の値を使っている。
  • 最終的には四則演算だけ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from IPython.display import HTML
from matplotlib import animation
from tqdm import tqdm
import numpy as np
import matplotlib.pyplot as plt

lx = 1  # 計算領域の長さ
nx = 41 # 領域の分割数
xs = np.linspace(0, lx, nx)

def wave(nx):
    dx = lx / (nx - 1) # 空間方向の刻み
    nt = 500           # 計算回数
    dt = 0.01          # 時間刻み
    c = 1              # 波の速度
    f = 2.0            # 強制振動の周波数

    # 初期条件
    u0 = np.zeros(nx)

    # 結果の配列と nt, nx の次元を持つ配列で初期化
    us = np.zeros((nt, len(u0)))

    # 初期条件を結果の配列の各行にコピー
    us[:,:] = u0.copy()

    alpha = (c * dt / dx)**2

    for i in tqdm(range(1, nt-2)):
        t = i * dt
        # 左端を強制振動
        us[i, 0] = np.sin(2 * np.pi * f * t)
        us[i+1, 0] = np.sin(2 * np.pi * f * t)

        # 時間発展
        us[i+1, 1:-1] = 2 * us[i, 1:-1] - us[i-1, 1:-1] \
                        + alpha * (us[i, 2:] - 2 * us[i, 1:-1] + us[i, :-2])
        # 右端の境界値指定
        us[i+1, nx-1] = 0

    return us


#### 解
us = wave(nx)

fig = plt.figure();

#### グラフの軸の設定
ax = plt.axes(xlim=(0, lx), ylim=(-5, 5));
line, = ax.plot([], [], lw=2);

def animate(u):
    line.set_data(xs, u)
    return line

anim = animation.FuncAnimation(fig, animate, frames=us, interval=50)
#anim.save('07-pde_03_wave_ex01.tmp.mp4', writer="ffmpeg")
plt.close(anim._fig)
HTML(anim.to_jshtml(default_mode='reflect'))
1
100%|██████████| 497/497 [00:00<00:00, 34649.84it/s]
1 次元の拡散方程式
  • 真ん中に置いておいた物質が周囲に拡散していく様子を見る
偏微分方程式としての拡散方程式

\begin{align} \frac{\partial u}{\partial t}= \nu \frac{\partial^2 u}{\partial x^2}. \end{align}

最終的に計算する式

\begin{align} u(t+ \Delta t, x) = u(t, x) + \nu \frac{\Delta t}{(\Delta x)^2} (u(t, x + \Delta x) - 2u(t,x) + u(t, x - \Delta x)). \end{align}

  • これも四則演算だけ。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import HTML
from matplotlib import animation

lx = 2  # 計算領域の長さ
nx = 41 # 領域の分割数
xs = np.linspace(0, lx, nx)

def diffusion(nx):
    dx = lx / (nx - 1) # 空間方向の刻み
    dt = 0.001         # 時間刻み
    nt = 200           # 計算回数
    nu = 1.0           # 拡散係数

    # 初期条件:中央以外すべて 0
    u0 = np.zeros(nx)
    # 真ん中に物質を置く
    x_center = int((nx - 1) / 2)
    u0[x_center-2: x_center+2] = 1

    # 結果の配列と nt, nx の次元を持つ配列で初期化
    us = np.zeros((nt, len(u0)))

    # 初期条件を結果の配列の各行にコピー
    us[:,:] = u0.copy()

    for i in range(0, nt-1):
        us[i+1, 1:-1] = us[i, 1:-1] + nu * dt / dx**2 *  (us[i, 2:] - 2 * us[i, 1:-1] + us[i, :-2])

    return us

us = diffusion(nx)

fig = plt.figure();
#グラフの軸の設定
ax = plt.axes(xlim=(0, lx), ylim=(0, 1.2));
line, = ax.plot([], [], lw=2);

def animate(u):
    line.set_data(xs, u)
    return line

anim = animation.FuncAnimation(fig, animate, frames=us, interval=50)
#anim.save('07-pde_04_diffusion_ex01.tmp.mp4', writer="ffmpeg")
plt.close(anim._fig)
HTML(anim.to_jshtml(default_mode='reflect'))
2 次元の波動方程式
  • イメージとしては膜の振動
  • 真ん中を振動させてその波の伝播を見る
偏微分方程式としての波動方程式

\begin{align} u_{tt} = c^2 (u_{xx} + u_{yy}). \end{align}

  • ここで $c$ は定数で物理的には波の速度
  • 1 次元のときとの違いは $u_{yy}$ の追加
  • 物理的には次元に依存する議論もあってそれほど簡単ではない
最終的に計算する式

\begin{align} &u(t + \Delta t, x, y) \ &= 2 u(t,x,y) - u(t - \Delta t, x, y) \ \quad &+ \left(\frac{c \Delta t}{\Delta x}\right)^2 \left(u(t, x + \Delta x,y) - 2 u(t,x,y) + u(t, x - \Delta x,y) \right) \ \quad &+ \left(\frac{c \Delta t}{\Delta y}\right)^2 \left(u(t, x,y + \Delta y) - 2 u(t,x,y) + u(t, x,y - \Delta y) \right) \ \end{align}

  • 右辺の時刻は $t$ と $t - \Delta t$、つまり過去の時刻しか出てこない
  • 過去の時間での情報さえわかれば未来の挙動がわかる
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from IPython.display import HTML
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D
from tqdm import tqdm
import numpy as np
import matplotlib.pyplot as plt

lx = 1  # 計算領域の長さ
ly = 1  # 計算領域の長さ
nx = 11 # 領域の分割数
ny = 11 # 領域の分割数
nx_center = int((nx - 1) / 2)
ny_center = int((ny - 1) / 2)
xs = np.linspace(0, lx, nx)
ys = np.linspace(0, ly, ny)

x1d = np.linspace(0, lx, nx)
y1d = np.linspace(0, ly, ny)
xs, ys = np.meshgrid(x1d, y1d)

def wave(nx, ny):
    dx = lx / (nx - 1)
    dy = ly / (ny - 1)
    nt = 300           # 計算回数
    dt = 0.5 * dx * dy # 時間刻み
    c = 1              # 波の速度
    f = 2.0            # 強制振動の周波数

    # 初期条件
    u0 = np.zeros((nx, ny))

    # 結果の配列と nt, nx, ny の次元を持つ配列で初期化
    us = np.zeros((nt, nx, ny))

    # 初期条件を結果の配列の各行にコピー
    us[:,:,:] = u0.copy()

    alpha_x = (c * dt / dx)**2
    alpha_y = (c * dt / dy)**2

    for i in tqdm(range(1, nt-2)):
        t = i * dt
        # 中心を強制振動
        us[i, nx_center, ny_center] = np.sin(2 * np.pi * f * t)
        us[i+1, nx_center, ny_center] = np.sin(2 * np.pi * f * t)

        # 時間発展
        us[i+1, 1:-1, 1:-1] = 2 * us[i, 1:-1, 1:-1] - us[i-1, 1:-1, 1:-1] \
                            + alpha_x * (us[i, 2:, 1:-1] - 2 * us[i, 1:-1, 1:-1] + us[i, :-2, 1:-1]) \
                            + alpha_y * (us[i, 1:-1, 2:] - 2 * us[i, 1:-1, 1:-1] + us[i, 1:-1, :-2])
        # 境界値指定
        us[i+1, 0, :] = 0
        us[i+1, nx-1, :] = 0
        us[i+1, :, 0] = 0
        us[i+1, :, ny-1] = 0

    return us


#### 解
us = wave(nx, ny)

fig = plt.figure();
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim(0, lx)
ax.set_ylim(0, ly)
ax.set_zlim(-2, 2)
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')
ax.set_zlabel('$u$')
surf = ax.plot_surface(xs, ys, us[0], rstride=1, cstride=1, linewidth=0, cmap='jet')

def animate(u):
    return ax.plot_surface(xs, ys, u, rstride=1, cstride=1, linewidth=0, cmap='jet')
    #surf.set_data(u)
    #return surf

anim = animation.FuncAnimation(fig, animate, frames=us, interval=50)
#anim.save('07-pde_06_wave_2dim_ex01.tmp.mp4', writer="ffmpeg")
plt.close(anim._fig)
HTML(anim.to_jshtml(default_mode='loop'))
微分方程式の大雑把なまとめ
  • (いろいろな都合によって)物理では無限に細かいところで方程式を立てている
  • そのままでは計算機に計算させられない
  • 微分係数・導関数を定義によって有限化:差と商にわける。
  • 有限に落とした部分は無限に細かくしていけば元の微分係数・導関数を近似できていると期待する

次回以降

  • 常微分方程式のところをのんびり進める
  • まずは微分方程式で何ができるのかをのんびり
  • 微分方程式で記述できる現象を説明したあと、近似計算の数理を追う
  • プログラムに落とし込む工夫を見る
  • 数値計算プログラムを大雑把に眺める
  • 講座・コンテンツ本体を眺める

質疑応答

  • 今の時点での目標が何かとか
  • こんな感じで進めてほしいとか
  • こんなネタを扱ってほしいとか
要望メモ
  • 小さな課題が欲しい。
  • 成功体験を積もう。
  • 予習の範囲を出す。
  • 式とグラフの対応。いろいろお絵描きしてみる。どうやってプログラムに落とすか確認する。

アンケート

毎回アンケートを取っています. 質問や要望がある場合もこちらにどうぞ.

アンケートは匿名なので気楽にコメントしてください. 直接返事してほしいことがあれば, メールなど適当な手段で連絡してください.

2020-04-26 課題

はじめに

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 少なくとも英語・フランス語・ドイツ語・ウクライナ語・スペイン語では別行立ての式に句読点がついていました. 式に句読点がついている外国語, 特に英語の文献を探してみてください. 英語については arxiv が探しやすいでしょう. ドイツ語についてはアインシュタインの論文, フランス語では Serre の論文あたりが探しやすいだろうと思います.
  • 引き続き TeX でいろいろな式を書いてみましょう. arxiv を彷徨って格好よさそうな式を https://mathpix.com/ で TeX 化してみると楽しいかもしれません.
  • 引き続きプログラムをいろいろいじってみましょう. 例えば次のような方針があります. コンテンツからのコピペで構いません. 適切にコピペして動かすだけでも割と大変なので.
    • (numpy を使って) いろいろな関数のグラフを描いてみましょう.
    • (sympy を使って) いろいろな連立方程式を解いてみましょう.
    • いろいろな微分方程式を解いてみましょう. 実際にコンテンツでも紹介しているように, 分点を自分でも変えていじってみるとのが第一歩です.
  • (難しいのでやらなくても構いません) 近似について考えてみましょう. もとの関数 $f$ がほとんど 0 であるにも関わらず, 導関数が 0 とはかけ離れた関数を考えてみてください.
  • 近似の基準として差の絶対値の最大値, つまり $\max_x |f(x) - g(x)|$ を取ることにします. この量が小さくても, 導関数に対する $\max_x |f'(x) - g'(x)|$ が小さいとは限らない関数を具体例を作ることで示したことにあたります. エネルギーは適当な導関数によって定義されるので, 近似に関する微妙なさじ加減が少し体験できます. (エネルギーは積分が絡むので実はもう少し面倒です.)
  • 数値計算と微分方程式の近似解法についてはシンプレクティック積分法などの話題もあります.

$F(x)=0$ という関数があったとする。 これは導関数の $F'(x)$ も $F'(x)=0$ である。

自分用メモ

  • 遅延型方程式に対するコメント追加
  • 06 の introduction と overview の統合
  • 人口論の説明のブラッシュアップ
  • import に関する実演:めんどいのでローカルの Jupyter で。

解答例:忘れる前にメモしておく

句読点問題
TeX でいろいろな式を書こう

\begin{align} \int_0^\infty x^{2n} e^{-ax^2} \, dx &= \frac{(2n+1)!!}{2^{n+1}} \sqrt{\pi} a^{- n - 1/2}. \end{align}

\begin{align} \langle f, e^{-tH} g \rangle = \int_{\mathbb{R}^d} \mathbb{E}_W^x \left[ \overline{f(B_0)} g(B_t) e^{- \int_0^t V(B_s) ds} \right] dx. \end{align}

$\mathrm{R}$

いろいろなプログラムを書こう
numpy でのグラフ
1
2
3
4
5
6
7
import numpy as np
import math
x = np.linspace(0.01, 2)
print(np.linspace(0.01, 2))
print(np.log(x))

print(np.log(1))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[0.01       0.05061224 0.09122449 0.13183673 0.17244898 0.21306122
 0.25367347 0.29428571 0.33489796 0.3755102  0.41612245 0.45673469
 0.49734694 0.53795918 0.57857143 0.61918367 0.65979592 0.70040816
 0.74102041 0.78163265 0.8222449  0.86285714 0.90346939 0.94408163
 0.98469388 1.02530612 1.06591837 1.10653061 1.14714286 1.1877551
 1.22836735 1.26897959 1.30959184 1.35020408 1.39081633 1.43142857
 1.47204082 1.51265306 1.55326531 1.59387755 1.6344898  1.67510204
 1.71571429 1.75632653 1.79693878 1.83755102 1.87816327 1.91877551
 1.95938776 2.        ]
[-4.60517019 -2.98356174 -2.39443189 -2.02619098 -1.75765386 -1.54617572
 -1.37170739 -1.22320417 -1.09392939 -0.97946963 -0.87677571 -0.7836526
 -0.69846743 -0.61997259 -0.54719327 -0.47935332 -0.41582471 -0.35609202
 -0.29972711 -0.2463704  -0.195717   -0.14750614 -0.10151305 -0.05754264
 -0.01542447  0.02499122  0.06383674  0.10122955  0.13727438  0.17206506
  0.20568593  0.23821311  0.26971551  0.30025575  0.32989086  0.35867295
  0.38664975  0.4138651   0.44035936  0.46616976  0.4913307   0.51587408
  0.53982949  0.56322443  0.58608454  0.60843372  0.63029431  0.65168723
  0.67263205  0.69314718]
0.0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.01, 2)  # x を 0 にできない
y = np.log(x)  # 自然対数

plt.plot(x, y)

plt.xlabel("x", size=20)
plt.ylabel("y", size=14)
plt.grid()

plt.show()
1
2
3
4
5
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2)  # 0 を含めるとエラー
y = np.log(x)  # 自然対数
1
2
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: RuntimeWarning: divide by zero encountered in log
  """
sympy での連立方程式

実際に解があるか目で見て確かめる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 2, 100)  # x を 0 にできない
y1 = x**2 - 1
y2 = x
plt.plot(x, y1, label="x^2 - 1")
plt.plot(x, y2, label="x")
plt.legend()
plt.show()
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from sympy import *
#from sympy.plotting import plot
from IPython.display import display

def custom_latex_printer(expr, **options):
    from IPython.display import Math, HTML
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_CHTML"
    javascript(content="""window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
        };""")
    javascript(url=url)
    return latex(expr, **options)

init_printing(use_latex="mathjax", latex_printer=custom_latex_printer)

x = Symbol('x')
expr1 = x**2 - 1
expr2 = x
sol = solve(expr1 - expr2, x) # 「引き算 = 0」にすれば連立方程式を解いたことになる
display(sol)
1
<IPython.core.display.Javascript object>

$$\left [ \frac{1}{2} + \frac{\sqrt{5}}{2}, \quad - \frac{\sqrt{5}}{2} + \frac{1}{2}\right ]$$

微分方程式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import HTML
from matplotlib import animation

lx = 2  # 計算領域の長さ
nx = 41 # 領域の分割数
xs = np.linspace(0, lx, nx)

def diffusion(nx):
    dx = lx / (nx - 1) # 空間方向の刻み
    dt = 0.001         # 時間刻み
    nt = 200           # 計算回数
    nu = 1.0           # 拡散係数

    # 初期条件:中央以外すべて 0
    u0 = np.zeros(nx)
    # 真ん中に物質を置く
    x_center = int((nx - 1) / 2)
    u0[x_center-2: x_center+2] = 1

    # 結果の配列と nt, nx の次元を持つ配列で初期化
    us = np.zeros((nt, len(u0)))

    # 初期条件を結果の配列の各行にコピー
    us[:,:] = u0.copy()

    for i in range(0, nt-1):
        us[i+1, 1:-1] = us[i, 1:-1] + nu * dt / dx**2 *  (us[i, 2:] - 2 * us[i, 1:-1] + us[i, :-2])

    return us

us = diffusion(nx)

fig = plt.figure()

ax = plt.axes(xlim=(0, lx), ylim=(0, 1.2));
line, = ax.plot([], [], lw=2)

def animate(u):
    line.set_data(xs, u)
    return line

anim = animation.FuncAnimation(fig, animate, frames=us, interval=50)
plt.close(anim._fig)
HTML(anim.to_jshtml(default_mode='reflect'))
関数の近似

十分大きな $n$ に対する次の関数があります。 \begin{align} f(x) &= \frac{1}{n} \sin (e^n x), \ f'(x) &= \frac{e^n}{n} \cos (e^n x). \end{align} グラフを描いてみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import numpy as np
import matplotlib.pyplot as plt

n = 10
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(np.exp(n) * x) / n
y2 = np.exp(n) * np.cos(np.exp(n) * x) / n
plt.plot(x, y1, label="$f$")
plt.plot(x, y2, label="$df/dx$")
plt.legend()
plt.show()
コメント

これは次のように思ってください。

  • 関数 $f_n$ は元の関数 $f_0 = 0$ を(最大値ノルムで)よく近似できている。
  • 関数 $f'_n$ は元の関数の導関数 $f'_0 = 0$ をよく近似できていない.

関数の近似はいろいろ難しいところがあって, それだけで論文になるレベルです. 同じ事情はベクトルの近似にもあります. いま流行りの統計学の応用としての自然言語処理でも, 言語の近さを量的にどう判定するかという問題があり, これはまさに言葉をどうベクトルで表現するか, 表したベクトルの近さを何でどう判定するかが問われています. 例えば, よくある「変換候補」遊びは, ある単語を打ち込んだとき, その人の入力の癖という観点から次にどのような語が来るか (どのような語が近いか) を統計的に判定する自然言語処理の事情が絡んでいます. このあたり, 既に「身近」なテーマで, そして身近なことは本当に難しいのでちょっと考えた程度でわかるような話ではありません. 何せ十分な精度で使いやすくかつ役に立ってもらわないといけないので.

2020-05-03 課題

  • コンテンツの案内ページ
  • GitHub へのリンク
  • matplotlib の公式ドキュメントを見ていろいろ遊んでみてください。例えば次のようなことを試してみてください。
    • 線の色を変えてみる。
    • 点にマーカーをつける。
    • 公式のサンプルやチュートリアルを試してみる。
  • 引き続き TeX でいろいろな式を書いてみましょう。式が書けると数学系のコミュニケーションがだいぶ楽になります。
  • 引き続きプログラムをいろいろいじってみましょう. 例えば次のような方針があります. コンテンツからのコピペで構いません. 適切にコピペして動かすだけでも割と大変なので.
    • (numpy を使って) いろいろな関数のグラフを描いてみましょう.
    • (sympy を使って) いろいろな連立方程式を解いてみましょう. グラフを描くのもおすすめです.
    • いろいろな微分方程式を解いてみましょう. 実際にコンテンツでも紹介しているように, 分点を自分でも変えていじってみるとのが第一歩です.

自分用メモ

  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

解答例

プログラムのコピペの功罪
  • プログラムをコピペしているだけだと自力で組み上げる力がつかない
  • 私の作るコンテンツは基本的に「世のいろいろなコンテンツのギャップを埋める」ことを目的にする
    • 大きな展望を見えるようにする
    • 中規模の目標を作る
  • 初学の段階で小さいプログラムしか書けないのもつまらない
  • 世にある「まとも」なプログラム(numpy などのライブラリ)は規模が大きいので読む・勉強するのが大変
  • どのくらいの規模のプログラムでどのくらいのモノが作れるのかを見たい
  • コピペであってもプログラムが動けばそれだけで面白い(こともある)
  • ある程度先まで見通せないと面白さも見えず、やる気が続かない
  • 程々の規模のプログラムをコピペして動かしてみて様子を掴もう
matplotlib
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np
import matplotlib.pyplot as plt

def koch_snowflake(order, scale=10):
    """
    Return two lists x, y of point coordinates of the Koch snowflake.

    Arguments
    ---------
    order : int
        The recursion depth.
    scale : float
        The extent of the snowflake (edge length of the base triangle).
    """
    def _koch_snowflake_complex(order):
        if order == 0:
            # initial triangle
            angles = np.array([0, 120, 240]) + 90
            return scale / np.sqrt(3) * np.exp(np.deg2rad(angles) * 1j)
        else:
            ZR = 0.5 - 0.5j * np.sqrt(3) / 3

            p1 = _koch_snowflake_complex(order - 1)  # start points
            p2 = np.roll(p1, shift=-1)  # end points
            dp = p2 - p1  # connection vectors

            new_points = np.empty(len(p1) * 4, dtype=np.complex128)
            new_points[::4] = p1
            new_points[1::4] = p1 + dp / 3
            new_points[2::4] = p1 + dp * ZR
            new_points[3::4] = p1 + dp / 3 * 2
            return new_points

    points = _koch_snowflake_complex(order)
    x, y = points.real, points.imag
    return x, y

x, y = koch_snowflake(order=5)

plt.figure(figsize=(8, 8))
plt.axis('equal')
plt.fill(x, y)
plt.show()
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')


theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)

ax.plot(x, y, z, label='parametric curve')
ax.legend()

plt.show()
TeX でいろいろな式を書こう
Poisson 積分

\begin{align} u\left(z_{0}\right) &= \frac{1}{2 \pi} \int_{0}^{2 \pi} u\left(e^{i \psi}\right) \frac{1-\left|z_{0}\right|^{2}}{| z_{0}-e^{\left.j \phi\right|^{2}}} d \psi, \ u(x, y) &= \frac{1}{2 \pi} \int_{0}^{2 \pi} u(a \cos \phi, a \sin \phi) \frac{a^{2}-R^{2}}{a^{2}+R^{2}-2 a R \cos (\theta-\phi)} d \phi, \ u(x, y, z)&=\frac{1}{4 \pi a} \int_{S} u \frac{a^{2}-R^{2}}{\left(a^{2}+R^{2}-2 a R \cos \theta\right)^{3 / 2}} d S. \end{align}

いろいろなプログラムを書こう
numpy でのグラフ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi / 4, np.pi / 4)
plt.plot(x, np.sin(4 * x), label="sin 4x")
plt.plot(x, np.cos(4 * x), label="cos 4x")
plt.plot(x, np.tan(x), label="tan x")

plt.xlabel("x", size=20)
plt.ylabel("y", size=14)
plt.grid()
plt.legend()

plt.show()
sympy
  • Colab 上でもローカルの Jupyter でも動くようにしたい。
  • $n=-1$ の場合分けも勝手にやってくれてすごい。
1
2
3
4
from IPython.display import Math, HTML
def load_mathjax_in_cell_output():
    display(HTML("<script src='https://www.gstatic.com/external_hosted/mathjax/latest/MathJax.js?config=default'></script>"))
get_ipython().events.register('pre_run_cell', load_mathjax_in_cell_output)
1
2
3
4
5
x,n = symbols('x,n')

int = Integral(x**n, (x, 0, x))
print("積分それ自体を表示できる")
display(int)
1
2
3
4
5
積分それ自体を表示できる



<IPython.core.display.Javascript object>

$$\int_{0}^{x} x^{n}\, dx$$

1
2
print("単純な計算結果:場合分けまでしてくれるし、0 での無限大もそう書いてくれる")
display(int.doit())
1
2
3
4
5
単純な計算結果:場合分けまでしてくれるし、0 での無限大もそう書いてくれる



<IPython.core.display.Javascript object>

$$\begin{cases} \log{\left (x \right )} + \infty & \text{for}\: n = -1 \- \frac{0^{n + 1}}{n + 1} + \frac{x^{n + 1}}{n + 1} & \text{otherwise} \end{cases}$$

1
2
print("simplify() で 0 を消せる")
display(simplify(int.doit()))
1
2
3
4
5
simplify()  0 を消せる



<IPython.core.display.Javascript object>

$$\begin{cases} \log{\left (x \right )} + \infty & \text{for}\: n = -1 \\frac{x^{n + 1}}{n + 1} & \text{otherwise} \end{cases}$$

1
2
3
4
from IPython.display import Math, HTML
def load_mathjax_in_cell_output():
    display(HTML("<script src='https://www.gstatic.com/external_hosted/mathjax/latest/MathJax.js?config=default'></script>"))
get_ipython().events.register('pre_run_cell', load_mathjax_in_cell_output)
微分方程式
  • フィッツヒュー・南雲方程式
    • ホジキン-ハクスレー理論で出てきたモデルの簡略化
    • ヤリイカの巨大神経細胞軸索を用いた研究をもとに定式化した神経興奮に関する基礎理論 (Journal of Physiology 117(1952)500-ほか)
    • この業績で 1963 年にノーベル賞(生理学医学賞)を受賞

\begin{align} y_{t}&=c\left(y-\frac{y^{3}}{3}-x+I(t)\right),\x_{t}&=y-bx+a. \end{align}

  • $I$ は時間の関数で構わないが、以下のシミュレーションでは定数にしている。
    • $I$ が 0.34 以上かどうかで解のふるまいが定性的に変わる。
    • 力学系の話。
  • Colab 上で動画を表示させるところまでできなかったので作った動画は YouTube で:Rust 版動画
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from IPython.display import HTML
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy.integrate as integrate

I = 0.34 #external stimulus
a = 0.7
b = 0.8
c = 10

def FHN(state, t):
    """
    FitzHugh-Nagumo Equations
    u : the membrane potential
    v : a recovery variable
    """
    u, v = state
    dot_u = c * (-v + u - pow(u,3)/3 + I)
    dot_v = u - b * v + a
    return dot_u, dot_v

#initial state
u0 = 2.0
v0 = 1.0

fig = plt.figure()
t = np.arange(0.0, 10, 0.01)
len_t = len(t)
dt = 5 #time steps

#animationの1step
def update(i):
    global y, y0

    #y0の初期値の設定
    if i ==0:
        y0 = [u0, v0]

    plt.cla() #現在描写されているグラフを消去

    #微分方程式を解く
    y = integrate.odeint(FHN, y0, t)

    #1Step(=dt)後のyの値を次のステップでのy0の値に更新する
    y0 = (y[dt,0], y[dt,1])

    #配列としてu,vを取得
    u = y[:,0]
    v = y[:,1]

    #描画
    plt.plot(t, u, label="u : membrane potential", color="#ff7f0e")
    plt.plot(t, v, label="v : recovery variable", color="#1f77b4")
    plt.plot(t[len_t-1], u[len_t-1],'o--', color="#ff7f0e") #uのmarker
    plt.plot(t[len_t-1], v[len_t-1],'o--', color="#1f77b4") #vのmarker
    plt.title("Membrane Potential / Volt")
    plt.grid()
    plt.legend(bbox_to_anchor=(0, 1),
               loc='upper left',
               borderaxespad=0)

    return (u, v)

anim = animation.FuncAnimation(fig, update, interval=100,
                              frames=300)
plt.close(anim._fig)
HTML(anim.to_jshtml(default_mode='reflect'))

質問メモ

  • numpy:モジュール名と関数名を「.」でつなぐ np.array() 関数
  • クラスとオブジェクトの話。

シューティングゲーム - 敵の弾(概念):クラス:弾がどこにあるか x,y - 具体的に画面に現れる弾: x=1, y=1

1
2
3
import numpy as np
print(type(np.array))
#print(type(np.array()))
1
<class 'builtin_function_or_method'>
1
2
from numpy import *
print(type(array))
1
<class 'builtin_function_or_method'>
1
2
a = [1,2]
print(len(a))

2020-05-10 課題

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 曲線を線分で近似できる気分を自分なりに説明してみてください。
    • 手書きで絵を描くだけでも構いません。
    • 一定のルールにしたがって描かれた曲線を適当な近似的ルールで描くのがプログラミングで描く曲線です。
  • 「自分でお絵かきできるようになろう」講座なので、お絵描き用ライブラリに慣れ親しむのが大事です。そこで matplotlib の公式ドキュメントを見ていろいろ遊んでみてください。例えば次のようなことを試してみてください。
    • 線の色を変えてみる。
    • 点にマーカーをつける。
    • 公式のサンプルやチュートリアルを試してみる。
    • 公式サンプル
    • これも公式:サンプルコードもある。
  • 引き続き TeX でいろいろな式を書いてみましょう。式が書けると数学系のコミュニケーションがだいぶ楽になります。
  • 引き続きプログラムをいろいろいじってみましょう. 例えば次のような方針があります. コンテンツからのコピペで構いません. 適切にコピペして動かすだけでも割と大変なので.
    • (numpy を使って) いろいろな関数のグラフを描いてみましょう.
    • (sympy を使って) いろいろな連立方程式を解いてみましょう. グラフを描くのもおすすめです.
    • いろいろな微分方程式を解いてみましょう. 実際にコンテンツでも紹介しているように, 分点を自分でも変えていじってみるとのが第一歩です.

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

オブジェクトについて

今日は具体的なプログラムというより、今日のメインの話とも少し関係する形でオブジェクトについて少し眺める機会にする。

  • オブジェクト指向のオブジェクトの話ではない。
  • 必ずしもいつもかっちりした定義のもとに議論されているわけでもない。
  • 各プログラミング言語ごとの用語の事情もある。
# 第一級のオブジェクト

第一級オブジェクト(ファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば生成、代入、演算、(引数・戻り値としての)受け渡しといったその言語における基本的な操作を制限なしに使用できる対象のことである。

問題になる例:言語によっては関数が第一級のオブジェクトになる。(最近の言語は割とこの傾向があるように思う。) 関数が第一級のオブジェクトの言語では「関数の関数」みたいな概念が考えられる。 高階関数と呼ばれる。

「関数の関数」として python の map を紹介しておく。

python #リスト `lst1` の要素を二倍する lst1 = [1, 2, 3, 4] lst2 = [] for a in lst1: lst2.append(a*2) print(lst2)

1
  [2, 4, 6, 8]

```python #次のように map で書ける def prod2(a): return a*2

lst1 = [1, 2, 3, 4] lst2 = list(map(prod2, lst1)) #map はイテレーターを返すので list() でリスト化する print(lst2) ```

1
  [2, 4, 6, 8]

python #参考:ラムダ式 lst1 = [1,2,3,4] lst2 = list(map(lambda x: x*2, lst1)) print(lst2)

1
  [2, 4, 6, 8]

python #参考:リスト内法表記 lst1 = [1,2,3,4] lst2 = [a*2 for a in lst1] print(lst2)

1
  [2, 4, 6, 8]

```python lst1 = [1,2,3,4] lst2 = []

lst3 = [1,2,3,4] for a in lst3: lst2.append(a*2) print(lst2) ```

1
  [2, 4, 6, 8]

```python lst1 = [1,2,3,4] lst2 = []

lst3 = [1,2,3,4]

for a in lst3: lst2.append(a*2) print("") print("")

print(lst2) ```

1
2
3
4
    File "<ipython-input-9-2e52d339fe66>", line 6
      lst2.append(a*2)
         ^
  IndentationError: expected an indented block
なぜ(Python で)map の返り値がイテレーターか
  • 巨大なリストを処理する場合、リストが返るとメモリを大量に消費するから。
  • この手の話をきちんと考えるにはコンピューターアーキテクチャなり、データ構造なり、プログラミング言語に関する諸々の知識がいる(のでその辺のプログラミング言語入門みたいな本ではふつう出てこない)。
  • この手の「入門」は大学の情報科学系の入門書にはきちんと書いてある。
オブジェクトとインスタンス
# オブジェクト

だいたい次のような性質を持っています。 - 何らかの型がある。 - 変数に代入できる。 - 関数(メソッド)の引数にできる。 - 関数(メソッド)の戻り値にできる。 - それ自体が式であり、任意の式の一部になる。

# インスタンス

これはオブジェクト指向だけの概念です。クラス(プロトタイプベースの場合はプロトタイプとなるオブジェクトになりますが、以下クラスとまとめて考えます)はオブジェクトの雛形です。その雛形から実際のデータをもつオブジェクトにすることを実体化(インスタンス化)と言い、そのオブジェクトはそのクラスのインスタンスと言われます。

python import matplotlib.pyplot as plt fig = plt.figure() #a = A.new()

関数とメソッド

言語によっていろいろありはする。

  • サブルーチン
    • 関数、手続き
    • 何らかの処理をまとめたモノ
    • 数学の関数とは必ずしも関係ない
  • メソッド:メソッド (method) あるいは メンバー関数 (-かんすう, member function) とはオブジェクト指向プログラミング言語において、あるクラスないしインスタンスに所属するサブルーチンを指す。

第一級関数(だいいっきゅうかんすう、英: first-class function、ファーストクラスファンクション)とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。

```python #値を返す「関数」 def f(): return 1

#値を返さない「関数」 def g(): print(1) g() ```

1
  1

```python class TestClass: x = "変数1"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  def __init__(self, y):
      self.y = y

  def test_method1(self):
      print(self.x)

  def test_method2(self, arg1):
      print("引数1:" + arg1)

  def gety(self):
      return self.y

a = TestClass("y") print(a.gety())

b = TestClass("b") print(b.gety())

a.test_method1() b.test_method1() ```

1
2
3
4
  y
  b
  変数1
  変数1

解答例

matplotlib
TeX でいろいろな式を書こう

python def f(): return {"a": "a"} print(f().keys())

1
  dict_keys(['a'])
いろいろなプログラムを書こう
numpy でのグラフ
sympy

python #colab の場合 from IPython.display import Math, HTML def load_mathjax_in_cell_output(): display(HTML("<script src='https://www.gstatic.com/external_hosted/mathjax/latest/MathJax.js?config=default'></script>")) get_ipython().events.register('pre_run_cell', load_mathjax_in_cell_output)

微分方程式

2020-05-17 課題

はじめに

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 前回使った ipynb のプログラムを実際に実行してみて、実数の数値計算上で起こる問題を実感してみてください。
  • 「自分でお絵かきできるようになろう」講座なので、お絵描き用ライブラリに慣れ親しむのが大事です。そこで matplotlib の公式ドキュメントを見ていろいろ遊んでみてください。例えば次のようなことを試してみてください。
    • 線の色を変えてみる。
    • 点にマーカーをつける。
    • 公式のサンプルやチュートリアルを試してみる。
    • 公式サンプル
    • これも公式:サンプルコードもある。
  • 引き続き TeX でいろいろな式を書いてみましょう。式が書けると数学系のコミュニケーションがだいぶ楽になります。

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
    • https://atcoder.jp/contests/apg4b
      • C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
    • Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib のチュートリアルを読もうの会
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

プログラミングの一般論

イテレーターとジェネレーター
  • 参考
  • この間イテレーターとジェネレーターを勘違いして話してしまったのでやり直し
基本
  • イテレータ: 要素を反復して取り出すことのできるインタフェース
    • 例:リスト、配列、タプル、辞書など
    • 「要素をたくさん持っているデータ構造」
  • ジェネレータ: イテレータの一種であり、1要素を取り出そうとする度に処理を行い、要素を生成する。Pythonではyield文を使った実装を指すことが多い
  • ジェネレーターが必要になる理由
    • とりあえずリストを想定する
    • 要素すべてをあらかじめ計算しておく/取得してくるのが大変
      • 例:何十GBもある巨大なイテレータはメモリにのせられない
    • HDD・SSD に載せるのも大変(速度なり何なりいろいろ)
    • ふつう 1 つ 1 つの要素自体は小さい
    • 要素を 1 つ 1 つ生成すればメモリをそんなに食わない
    • 1 つ 1 つ作ろう
1 つ 1 つ作る?
  • range がイメージしやすそうな気がする
  • 一度にドカッとリストを作る必要はなく、1 つ 1 つの整数を都度作ってくればいい
1
2
3
4
xs = range(0, 10)
print(type(xs))
for x in xs:
    print(x)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<class 'range'>
0
1
2
3
4
5
6
7
8
9
  • イテレータ(リスト)の要素数が $10^{1000000}$ くらいになるとそもそもリストが作れない
  • 一気に作らずに 1 つずつ要素を生成すれば問題なく処理は回る
    • $10^{1000000}$ 個の要素を処理しないといけない点で時間自体はどうしてもかかる
    • これは本質的な問題で、ジェネレーターを使う・使わないに関係ない
    • メモリに載るか載らないかではなく処理の所要時間の問題
Python のジェネレーターの簡単な例
  • yield を使ってみる
1
2
3
4
5
6
7
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(type(gen))
1
<class 'generator'>
1
2
3
4
5
6
7
8
9
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(gen.__next__())  # 1
print(gen.__next__())  # 2
print(gen.__next__())  # 3
1
2
3
1
2
3
  • 4 回呼ぶと怒られる
  • for で呼び出すと怒られるところでループを止めてくれる
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
"""4 回呼ぶと怒られる"""
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
gen.__next__()  # 1
gen.__next__()  # 2
gen.__next__()  # 3
gen.__next__()  # StopIteration
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
---------------------------------------------------------------------------

StopIteration                             Traceback (most recent call last)

<ipython-input-1-f379ec6e011a> in <module>()
      8 gen.__next__()  # 2
      9 gen.__next__()  # 3
---> 10 gen.__next__()  # StopIteration


StopIteration:
1
2
3
4
5
6
7
8
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for a in gen:
    print(a)
1
2
3
1
2
3
クラス
  • 念頭に置くのは Python のクラス・オブジェクト(オブジェクト指向の意味のオブジェクト)
  • データとそれを処理する「関数」のペア
  • まずは「辞書」または「リスト」の拡張だと思おう
  • ある学生 s のテストの点に関していろいろ統計的な処理をしたい
  • 学生 s のテストの点を次のようにリストで持つ
    • 国語・数学・英・理科・社会の順に点数を並べるとする
    • 平均点を計算したい
1
2
3
4
5
s_scores = [10, 20, 30, 40, 50] # 国語・数学・英・理科・社会の順
def calc_mean(s_scores):
    return sum(s_scores) / len(s_scores)
s_mean = calc_mean(s_scores)
print(s_mean)
1
30.0
  • リストだと何も情報がなくて、何番目が何の科目だったか覚えていられない
  • コメントもあるが、何かの都合で仕様が変わったりしたらどうする?
  • 具体的に名前で持たせればいい:辞書を使おう
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
s_scores = {
    "ja": 10,
    "math": 20,
    "eng": 30,
    "science": 40,
    "society": 50
}

def calc_mean(s_scores):
    s_sum = sum([v for v in s_scores.values()])
    return s_sum / len(s_scores)

s_mean = calc_mean(s_scores)
print(s_mean)
1
30.0
  • 関数 calc_mean は(本質的には)成績の持たせ方と連動した関数である
  • 値と処理をバラバラにしないでワンセットにしたい:クラス化
    • いまは単なる平均だからご利益が何も感じられない
    • もっと複雑なことを考えると「ワンセット」にご利益が出てくる
    • それこそ「辞書のクラス・メソッド」などを考えてみよう
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Score():
    def __init__(self, ja, math, eng, sci, soc):
        self.ja = ja
        self.math = math
        self.eng = eng
        self.sci = sci
        self.soc = soc

    def calc_mean(self):
        return (self.ja + self.math + self.eng + self.sci + self.soc) / 5

s = Score(10, 20, 30, 40, 50)
print(s.calc_mean())
1
30.0
  • ほかの生徒の成績も考えたいとき、簡単に各生徒用のオブジェクトが作れる
    • オブジェクトは s1s2
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Score():
    def __init__(self, ja, math, eng, sci, soc):
        self.ja = ja
        self.math = math
        self.eng = eng
        self.sci = sci
        self.soc = soc

    def calc_mean(self):
        return (self.ja + self.math + self.eng + self.sci + self.soc) / 5

s1 = Score(10, 20, 30, 40, 50)
print(s1.calc_mean())

s2 = Score(1, 2, 3, 4, 5)
print(s2.calc_mean())
1
2
30.0
3.0

アルゴリズムとデータ構造

アルゴリズムとデータ構造でプログラミングを勉強する
  • https://atcoder.jp/?lang=ja
    • プログラミングのコンテストサイト
    • 競技プログラミング
  • C++ の勉強も兼ねた勉強用ページ https://atcoder.jp/contests/APG4b
  • 初心者向け練習問題 https://atcoder.jp/contests/abs
    • 探せば他にも練習問題特集はある
いいところ
  • 簡単な問題なら 10 行もあれば書ききれる
  • 自分で何か作ったりしなくても問題演習という形でプログラミングに触れられる
  • 基本的には実際のプログラミングに即役立つタイプの問題
  • ランキング上位者は本当にプログラミングで食っていけるレベルの腕でもある
  • 良くも悪くも、コンピューターの基礎みたいな部分に触れざるを得ない面がある
    • リストと配列は何が違うのか?
    • どういうときにどちらを使えばいいのか?
    • メモリ上のデータの配置が違う
    • 「低レイヤー」の話とも向き合う必要が出る可能性
自分に合った勉強法・勉強内容を探そう
  • 最終的な目的・目標と勉強に対する最善のアプローチが一致するとは限らない
  • 私の場合は物理・数学系だと勉強しやすかったが、皆が皆そうというわけでもない
  • 課題を競プロから出してみて様子を見るか?

2020-05-31 課題

はじめに

  • コンテンツの案内ページ
  • GitHub へのリンク
  • 01-01 ipynb のプログラムを実際に実行してみて、実数の数値計算上で起こる問題を実感してみてください。
  • 「自分でお絵かきできるようになろう」講座なので、お絵描き用ライブラリに慣れ親しむのが大事です。そこで matplotlib の公式ドキュメントを見ていろいろ遊んでみてください。例えば次のようなことを試してみてください。
    • 線の色を変えてみる。
    • 点にマーカーをつける。
    • 公式のサンプルやチュートリアルを試してみる。
    • 公式サンプル
    • これも公式:サンプルコードもある。
  • 引き続き TeX でいろいろな式を書いてみましょう。式が書けると数学系のコミュニケーションがだいぶ楽になります。
  • 実際に競プロの問題をいくつか解いてみましょう。例えばここのページを一通り眺めてみてください。Pythonで10問解いてみた記事もあるので参考にしてください。

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
    • https://atcoder.jp/contests/apg4b
      • C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
    • Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
  • 文と式の説明
  • IT 基礎知識みたいなやつ
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib のチュートリアルを読もうの会
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

競プロを 2 題解いてみる

  • https://qiita.com/KoyanagiHitoshi/items/c5e82841b8d0f750851d の最初の2題
ABC 086 A - Product
  • 標準入力から取るのが本筋(input
  • 面倒なのでここでは入力部分をハードコードする

```python input_str = "1 3"

print("input_str") print(input_str)

print("======") print(input_str.split())

print("======") print(map(int, input_str.split()))

print("======") print(list(map(int, input_str.split())))

a, b = map(int, input_str.split()) print(a) print(b)

######################## a, b = map(int, input_str.split()) if a*b % 2 == 0: print("Even") else: print("Odd") ```

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  input_str
  1 3
  ======
  ['1', '3']
  ======
  <map object at 0x7f537ad30c88>
  ======
  [1, 3]
  1
  3
  Odd

python s = "1" print(s) print(type(s)) print(int(s)) print(type(int(s)))

1
2
3
4
  1
  <class 'str'>
  1
  <class 'int'>
map オブジェクトはイテレーター

python input_str = "1 3" a = map(int, input_str.split()) print(a.__next__()) print(a.__next__()) print(a.__next__())

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  1
  3



  ---------------------------------------------------------------------------

  StopIteration                             Traceback (most recent call last)

  <ipython-input-3-c797e216c7f4> in <module>()
        3 print(a.__next__())
        4 print(a.__next__())
  ----> 5 print(a.__next__())


  StopIteration:
参考:標準入力
  • 果てしなくめんどい
    • 低レイヤーの話に突撃する:コンソール・ターミナル、リダイレクトなどなど
    • 「特殊 ( スペシャル ) ファイル」
    • 「ソケット」
      • http://e-words.jp/w/%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88.html
      • 特定の通信相手(IPネットワーク上の場合はIPアドレスとポートの組み合わせ)と紐付いた通信端点をプログラム上に生成し、これを通じてコネクションの確立やデータの送受信、切断などの処理を行う。具体的な通信方式や通信相手の指定方式が複数用意されており、同じコンピュータ上の他のプロセスとも、TCP/IPなどを利用して他のコンピュータ上のプログラムとも通信できる。
  • 標準入力について参考ページ
  • 低レイヤーとは何か
    • 参考
    • 「低レイヤーとは 「生の」コンピュータに近いことを意味します。」
    • OS やら CPU やらメモリやら何やら
    • 「ハードウェアに近い話」みたいにも言えるかもしれない
    • 簡単とか世間的な意味での「低レベル」とは関係ない
    • 参考:「高レイヤー」は Web アプリなど
  • この辺は基本情報技術者試験などで「基礎知識」として問われたりする
第二問 ABC 081 A - Placing Marbles
  • 文字列は文字からなるリスト(配列)とみなす
  • count() の説明は例えばここ
    • 解説が何を言っているかよくわからないこともよくある
    • サンプルをいくつか動かす方が早いこともよくある
    • 数学でもよくある:一般論・抽象論ばかりではなく例をいじろう

python input_str = "101" print(input_str.count("1"))

1
  2

python input_str = "abcabcab" print(input_str.count("a"))

1
  3

python input_str = "abcabcab" print(input_str.count("abc"))

1
  2

プログラミングの一般論

インポートまわりの話
  • 「お行儀」の問題もいろいろある。
    • コーディングルールとして言及されることはよくある。
  • たくさん読み書きしてはじめてわかることもある。
    • ある程度の量はこなさないと見えない世界がある
初心者にありがちな話:モジュールの内容を全部インポートする
  • 「いちいち必要なのだけ選ぶのはめんどい」
  • 「楽でいいじゃない」

python from sympy import * from numpy import * x,y,z = symbols("x,y,z")

問題点
  • 知らないモジュールのインポートがたくさんあると、どのクラス・関数がどのモジュールから来ているのかわからない
  • 似た名前の関数やクラスなどもたくさんある
  • 他人も読むコードではやめてほしい
  • 将来、詳細を忘れた自分が読むのも厳しい
  • 「わけがわからないので、使うクラスや関数だけインポートしてほしい」
    • 例:使うものだけインポート
      • https://github.com/django/django/blob/master/django/middleware/cache.py#L48-L50
  • 「使うクラス・メソッドだけインポートするか、as で呼ぶかする」といった規約をつけていることもよくある
    • sympy, numpy あたりはお行儀がよくて、必要なモノだけインポートするよう徹底されている模様

python import numpy as np import matplotlib.pyplot as plt

いろいろなインポートの指定
  • 状況に合わせて都合がいいからそうする
  • 状況に合わせた方法もいろいろ準備されている
    • 必要だったから体系化されて盛り込まれている

python from fractions import Fraction q = Fraction(3,4) print(q)

1
  3/4

python import fractions r = fractions.Fraction(3,4) print(r)

1
  3/4
  • 内容は同じだが後者は長い
    • 書くのが面倒
    • 読むときも余計なものまで読まされる
    • シンプルにしたい
  • ケースバイケースでいろいろやる
    • クラスだけ直接インポート:from fractions import Fraction
    • as で短くする:import fractions as f

python import fractions as f a = f.Fraction(3,4) print(a)

1
  3/4

python from numpy import * linspace(0, 10, 11)

1
  array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

python import numpy numpy.linspace(0, 10, 11)

1
  array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
全体像をつかもう
  • ある程度大きな姿を捕まえないと局所的に何をやっているかもわからないことはよくある
    • 料理でも下ごしらえとか
      • 「やらなくてもいいが、やらないと美味しくない」
    • フグの調理で毒を避けて処理する
      • 「死にたいならやればいい」
  • 知識や見えている範囲が狭い中で考えて判断しようとしても無駄なことはよくある
  • 意味がわかるかはさておき、ある程度たくさん知っておかないといけないことはよくある
    • 単純な知識問題もよくある
      • はまることや立ち止まることに意味がない
    • 何かを調べたいとき、対応する言葉を知らないと調べようがなければ聞きようもない
  • 本を読んでいるなら、とにかく四の五の言わずに 2-3 週読んでみるとかした方がいいこともよくある
  • プログラミングはちょっと突っ込むだけでいきなりコンピューター関係の基礎知識を大量に要求されるので、さっさと諦めてそれらを勉強する
    • 基礎からやったところですぐにわかるようになるわけもないが、それらを諦めるところまで込めて諦める
膨大な量の経験が大事
  • 経験を積むと「こうした方がいい」「これはやめてほしい」というのがいろいろたまってくる
  • コーディングルールとしてノウハウがまとまっていたりする
  • 数学でもε-δで「なぜこんなεを取るのか」みたいな話はよくあるし、「何でこんな概念を導入するのか」みたいな話はよくある。
    • 「便利だから」とか言われてもその便利なところを実感できるのはだいぶ慣れ親しんでから。
    • この苦労を経ないとその辺の意味やご利益もわからないことはよくある
    • プログラミングでも同じ
    • ある程度は量をこなそう
楽しく量をこなすには?
  • 楽しいと思えることを探すしかない
  • 何が楽しいかは自分しかわからない
  • はじめつまらなくてもやっているうちに楽しくなることもあれば、何かのきっかけで目覚めることもある
  • いい方向が見つかるまでは試行錯誤するしかない
  • この中で自然と頭を使いつつ(質を高めつつ)量もこなす必要が出てくる

2020-06-14 課題

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
    • https://atcoder.jp/contests/apg4b
      • C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
    • Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
  • 文と式の説明
  • IT 基礎知識みたいなやつ
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib のチュートリアルを読もうの会
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

Matplotlib

  • とりあえず本当に簡単な図を描く
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-4, 4, 201)
y1 = - 0.5 * x + 1
y2 = np.sin(x)
y3 = np.cos(x)

plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)

plt.grid()
plt.axes().set_aspect('equal', 'datalim') # アスペクト比を合わせる
plt.show()
1
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:14: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.

勉強ネタ紹介

  • 前回も言ったように、自分に合った、楽しめるネタを探す必要がある
    • 勉強しなければいけないことと、やっていて楽しめること・長続きすることが一致しないこともよくある
  • 教材がある事案
  • 最近の私の趣味と実益を兼ねた対象がデータ構造とアルゴリズムなので、ここでもその辺を試してみている
  • 例えば上の中でも興味のあるネタがあればそれは取り上げるので、要望があれば挙げてほしい。
    • 自然言語処理の UNIX コマンドとか

競プロを 2 題解いてみる

  • https://qiita.com/KoyanagiHitoshi/items/c5e82841b8d0f750851d の 3 題目と最後の問題
  • AOJ も勉強用にお勧め
    • 素因数分解など数学ネタもある
    • これをもとにしたもある
    • 言語が C/C++ なのが難点といえば難点
    • C/C++ の方が低レイヤーを意識しやすくなる利点はある
  • 最近は Python によるデータ構造とアルゴリズムの本も出ているし、ネット上に資料もある
ABC081B、Shift only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#https://atcoder.jp/contests/abs/submissions/14323299
#input()
#A = list(map(int, input().split()))

def f(A):
    count = 0
    while all(a % 2 == 0 for a in A):
        A = [a/2 for a in A]
        count += 1
    print(count)

A = [8, 12, 40]
f(A)

A = [5, 6, 8, 10]
f(A)

A = [382253568, 723152896, 37802240, 379425024, 404894720, 471526144]
f(A)
1
2
3
2
0
8
Python の all

Pythonでリストやタプルなどのイテラブルオブジェクトの要素がすべてTrue(真)か、いずれか一つでもTrueか、あるいは、すべてFalse(偽)かを判定するには組み込み関数all(), any()を使う。

1
2
print(all([True, True, True]))
print(all([True, False]))
1
2
True
False
ABC086C、Traveling
  • 止まれない条件
    • 止まってよければ問題は簡単:時間に関する制約だけでいい
    • 非現実的な問題設定にしたおかげで難しくなっている
    • cf. たいていの場合は現実が難しすぎるから簡単にした問題を解く
  • 「距離」
    • 京都・札幌・マンハッタンのような碁盤目状に道が整備された街での 2 点間の距離をどう測るといいか?
      • 普通の2点間の距離(ユークリッド距離)$\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}$ では不適切。
      • $|x_1 - x_2| + |x_1 - x_2|$ で測る方が適切。
      • 機械学習でも $L^1$ 正則化などで出てくる。
      • 情報系(?)だとマンハッタン距離と呼ぶ。
      • 数学では $L^1$ ノルムと呼ぶ。
        • 一般には $L^p$ ノルムという概念がある
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#N = int(input())
def f(N, course):
    count = 0
    T, X, Y = 0, 0, 0
    for i in range(N):
        #t, x, y = map(int, input().split()) # 都度読み込み:駄目な経路があれば即終了
        t, x, y = course[i]
        if abs(x-X)+abs(y-Y) <= t-T and t % 2 == (x+y) % 2:
            count += 1
        T, X, Y = t, x, y
    print("Yes" if count == N else "No")

N = 2
course = [(3, 1, 2,), (6, 1, 1)]
f(N, courses)

N = 1
course = [(2, 100, 100)]
f(N, course)

N = 2
course = [(5, 1, 1), (100, 1, 1)]
f(N, course)
1
2
3
Yes
No
No
1
2
3
4
5
6
7
8
if count == N:
    s = "Yes"
    if a == B:
        s = "a"
    elif a == C:
        s = "b"
else:
    s = "No"
現実的なスケジューリングの問題
  • Google Map の経路探索
  • Yahoo 路線情報などの経路探索
  • 野球・サッカーなどの年間試合日程
  • PASMO などでの運賃清算
PASMO などの運賃計算
  • 論文が出るほどの問題
    • 解説記事
    • https://www.orsj.or.jp/~archive/pdf/j_mag/Vol.54_J_001.pdf
    • https://www.seikei.ac.jp/university/rikou/pdf/JFST440213.pdf
    • https://ci.nii.ac.jp/naid/110008913789
  • 何が難しいか:乗車情報を使って東京の複雑な路線図から「最安運賃」を即座に計算させる
    • 使える時間は 0.2 秒
    • 運賃が高く計算されたら怒られる
    • 安ければ文句がでない
    • いくらでも変な経路がありうる
    • 余計な枝をはじいて重要な部分だけ計算する
  • どうやって:これがアルゴリズム研究
    • ほぼ純粋なプログラムだけの問題
  • テストの視点
    • どんな始点・終点であっても問題なく動くか、プログラムを検証する問題もある
    • 検証すべきパターンは $10^{40}$ 程度あるとか:解説記事
プロスポーツのスケジュール決定
  • OR の研究課題
  • 多数のステークホルダーの利害調整問題
    • ドームなどはコンサートもある
      • 著名アイドル・歌手の結成何周年イベントなどは「この時期、できれば第何週」というレベルで細かい指定が入る
      • ドル箱はもちろん優先
    • 春夏の甲子園の時期は高校野球に占拠される
    • 各チームが過酷な移動スケジュールにならないような配慮
      • 「九州から北海道に順に移動していき、逆順に移動していく」みたいな形だと移動の負担は少ない
      • 必ずしもそううまくは組めない
      • 長時間移動だけでも体力消費があり選手パフォーマンスに影響する
      • 旅費もかさむ
  • どうするか?
    • これも組み合わせは膨大で、電車ほど激しくはないが短時間で計算させたい
    • 最終的には人間の目も入れる必要があるだろう
    • コンピューターにいくつか候補を計算させたい
    • 適当にイベントと時期に重みづけ(ペナルティ)をつけて「一定程度以上ペナルティが積まれたスケジュールはもう考えない」といった工夫がいる
    • いい感じのスケジュールにならなければパラメータ調整して再計算させたい
      • このサイクルはなるべく早く回したい
      • 高速計算の需要
      • この辺は最近はやりの機械学習でもまさに同じような事情がある

プログラミングの一般論

  • Web システムを例にした速度問題
  • データ構造とアルゴリズム
    • 連結リストと配列:どんな特性があるか?
    • スタックとキュー:いつどこで使うか?どう実装するか?
web システムの事例
  • 参考
  • システムが重いというときどこにどんな原因があるか?
    • ソシャゲでもよくある「障害発生」はどこでどう起こるか?
    • どこかのサーバーが物理的に壊れることもある
  • データ構造とアルゴリズム(いわゆる「プログラミング」)がかかわるのはどこか?
    • web サーバーでの処理(プログラム)
    • データベースの(インデックス)設計
    • ソフトによる問題なら基本的にはどこにでもありうる
データ構造とアルゴリズム
  • 鶏と卵で、同時に考えるべきテーマ:何かをするためにはどうデータを持ってどんな処理をすれば効率がいいか?
    • 効率にもいろいろある
    • 単純な処理速度・メモリ消費量・計算量
(連結)リストと配列
  • 何が違うのか?
  • メモリ上の配置やデータの「つなぎ方」
  • 状況によって使い分ける
リストの特徴
  • 要素数は変わることが前提
  • データを(先頭に)追加するのは簡単
  • データの削除も比較的簡単
  • 先頭から 1 つずつ順に処理するならそれなり
  • 検索やデータの書き換えが遅い:連結構造をたどる必要がある
配列の特徴
  • 要素数は固定
  • データの追加・削除が重め
  • データの参照・書き換えが速い:アドレスが連続なので先頭さえわかれば「そこから何番先」と直指定できる
  • 「リストで遅ければ配列で書き直す」みたいなことはよくある
ベクター(参考
  • 「要素数可変の配列」
  • リストのように要素追加・削除が比較的低コストで、要素の参照・書き換えも配列のように速い
  • 何が問題か:要素の追加が楽なように余計なメモリ領域を確保する
  • ハードウェア組み込みプログラムのように、メモリがカツカツの状況では使えない
    • 「メモリがカツカツ」という意味が理解できるか?

2020-06-20 課題

メモ:先に進む前に録画してあるか確認しよう

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
    • https://atcoder.jp/contests/apg4b
      • C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
    • Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
  • 文と式の説明
  • IT 基礎知識みたいなやつ
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib のチュートリアルを読もうの会
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

Matplotlib

  • とりあえず本当に簡単な図を描く
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-4, 4, 201)
y1 = x**2 - 2 * x + 1
y2 = x**3 + 2 * x + 3
y3 = x**4 - x**2 - 2 * x + 3

plt.plot(x, y1, label="y1")
plt.plot(x, y2, label="y2")
plt.plot(x, y3, label="y3")

plt.grid()
plt.legend()
#plt.axes().set_aspect('equal', 'datalim') # アスペクト比を合わせる
plt.show()

自然言語処理100本ノック

第1章: 準備運動 00. 文字列の逆順

文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

1
2
print("".join(list(reversed("stressed"))))
print("stressed"[::-1])
1
2
desserts
desserts
1
reversed("stressed")
1
<reversed at 0x7fddcfffd5f8>
1
"".join(reversed("stressed"))
1
'desserts'
1
list(reversed("stressed"))
1
['d', 'e', 's', 's', 'e', 'r', 't', 's']
1
"|".join(list(reversed("stressed")))
1
'd|e|s|s|e|r|t|s'
1
"stressed"[::2]
1
'srse'
第1章: 準備運動 01. 「パタトクカシーー」
  • 「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.
1
print("パタトクカシーー"[1::2])
1
タクシー
1
print("パタトクカシーー"[0::2])
1
パトカー
02. 「パトカー」+「タクシー」=「パタトクカシーー」

「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
s1 = "パトカー"
s2 = "タクシー"


print("".join([s1[i] + s2[i] for i in range(4)]))


s = ""
for i in range(4):
    print(s)
    s = s + s1[i]+ s2[i]
print(s)
1
2
3
4
5
6
パタトクカシーー

パタ
パタトク
パタトクカシ
パタトクカシーー
03 円周率

"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

1
2
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print(list(map(lambda x: len(x), s.split())))
1
[3, 1, 4, 1, 6, 9, 2, 7, 5, 3, 5, 8, 9, 7, 9]
1
2
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
s.split()
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
['Now',
 'I',
 'need',
 'a',
 'drink,',
 'alcoholic',
 'of',
 'course,',
 'after',
 'the',
 'heavy',
 'lectures',
 'involving',
 'quantum',
 'mechanics.']
1
2
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print(list(map(lambda x: len(x), s.replace(",", "").replace(".", "").split())))
1
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
print(s.replace(",", ""))
print(s.replace(",", "").replace(".", ""))
print(s.replace(",", "").replace(".", "").split())

xs = []
for x in s.replace(",", "").replace(".", "").split():
    print(len(x))
    xs.append(len(x))
print(xs)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Now I need a drink alcoholic of course after the heavy lectures involving quantum mechanics.
Now I need a drink alcoholic of course after the heavy lectures involving quantum mechanics
['Now', 'I', 'need', 'a', 'drink', 'alcoholic', 'of', 'course', 'after', 'the', 'heavy', 'lectures', 'involving', 'quantum', 'mechanics']
3
1
4
1
5
9
2
6
5
3
5
8
9
7
9
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
04. 元素記号

"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭の2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

(言っていることがよくわからなくて何度も読み返した。)

1
2
3
4
5
6
7
8
9
numbers = [1,5,6,7,8,9,15,16,19]
numbers = list(map(lambda x: x - 1, numbers))

def f(i,v):
    return v[0] if i in numbers else v[0:2]

s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
s = s.replace(",", "").replace(".", "").split()
print({f(i,v): i for i, v in enumerate(s)})
1
{'H': 0, 'He': 1, 'Li': 2, 'Be': 3, 'B': 4, 'C': 5, 'N': 6, 'O': 7, 'F': 8, 'Ne': 9, 'Na': 10, 'Mi': 11, 'Al': 12, 'Si': 13, 'P': 14, 'S': 15, 'Cl': 16, 'Ar': 17, 'K': 18, 'Ca': 19}
1
2
3
4
5
s = ""
if i in numbers:
    s = v[0]
else:
    s = v[0:2]
内包表記をループで書き直した
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
numbers = [1,5,6,7,8,9,15,16,19]
numbers = list(map(lambda x: x - 1, numbers))

def f(i,v):
    return v[0] if i in numbers else v[0:2]

s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
s = s.replace(",", "").replace(".", "").split()

dic = {}
for i,v in enumerate(s):
    dic[f(i,v)] = i

print(dic)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
0
Hi

1
He

2
Lied

3
Because

4
Boron

5
Could

6
Not

7
Oxidize

8
Fluorine

9
New

10
Nations

11
Might

12
Also

13
Sign

14
Peace

15
Security

16
Clause

17
Arthur

18
King

19
Can

{'H': 0, 'He': 1, 'Li': 2, 'Be': 3, 'B': 4, 'C': 5, 'N': 6, 'O': 7, 'F': 8, 'Ne': 9, 'Na': 10, 'Mi': 11, 'Al': 12, 'Si': 13, 'P': 14, 'S': 15, 'Cl': 16, 'Ar': 17, 'K': 18, 'Ca': 19}

プログラミングの一般論

  • Web システムを例にした速度問題
  • データ構造とアルゴリズム
    • 連結リストと配列:どんな特性があるか?
    • スタックとキュー:いつどこで使うか?どう実装するか?
web システムの事例
  • 参考
  • システムが重いというときどこにどんな原因があるか?
    • ソシャゲでもよくある「障害発生」はどこでどう起こるか?
    • どこかのサーバーが物理的に壊れることもある
  • データ構造とアルゴリズム(いわゆる「プログラミング」)がかかわるのはどこか?
    • web サーバーでの処理(プログラム)
    • データベースの(インデックス)設計
    • ソフトによる問題なら基本的にはどこにでもありうる
データ構造とアルゴリズム
  • 鶏と卵で、同時に考えるべきテーマ:何かをするためにはどうデータを持ってどんな処理をすれば効率がいいか?
    • 効率にもいろいろある
    • 単純な処理速度・メモリ消費量・計算量
(連結)リストと配列
  • 何が違うのか?
  • メモリ上の配置やデータの「つなぎ方」
  • 状況によって使い分ける
リストの特徴
  • 要素数は変わることが前提
  • データを(先頭に)追加するのは簡単
  • データの削除も比較的簡単
  • 先頭から 1 つずつ順に処理するならそれなり
  • 検索やデータの書き換えが遅い:連結構造をたどる必要がある
配列の特徴
  • 要素数は固定
  • データの追加・削除が重め
  • データの参照・書き換えが速い:アドレスが連続なので先頭さえわかれば「そこから何番先」と直指定できる
  • 「リストで遅ければ配列で書き直す」みたいなことはよくある
ベクター(参考
  • 「要素数可変の配列」
  • リストのように要素追加・削除が比較的低コストで、要素の参照・書き換えも配列のように速い
  • 何が問題か:要素の追加が楽なように余計なメモリ領域を確保する
  • ハードウェア組み込みプログラムのように、メモリがカツカツの状況では使えない
    • 「メモリがカツカツ」という意味が理解できるか?

2020-06-28 課題

メモ:先に進む前に録画してあるか確認しよう

  • メモ:東大の AWS クラウド講義資料
  • https://tomomano.gitlab.io/intro-aws/#_hands_on_5_bashoutter
  • これを眺めてみるのもいいかもしれない

自分用メモ

  • 常微分方程式で漸化式から微分方程式に流れる部分の書き直し
  • 勉強のおすすめ:AtCoder はどうか?C++の解説もあるし、仕事・評価にも割と直結するし、具体的な問題つきで勉強できる。
    • https://atcoder.jp/contests/apg4b
      • C++のコードをPythonで書き直してみるだけでもかなりの勉強になるはず
    • Python によるアルゴリズム https://qiita.com/cabernet_rock/items/cdd12b07d213b67d0530
  • 文と式の説明
  • IT 基礎知識みたいなやつ
  • 数値計算に関わるクラス・オブジェクトの説明
    • まずは辞書・構造体の拡大版として導入するか?
    • 変な誤解を生まないような書き方を考える
  • 遅延型方程式に対するコメント追加
  • import に関する実演
  • matplotlib のチュートリアルを読もうの会
  • matplotlib 回では実際に matplotlib のチュートリアルを読もう
    • 公式情報に触れる重要性
    • 古い情報が古いと書いてあったりする:たとえば pylab
    • Gallery
      • 見ていて面白い
      • 「どこをいじるとどう変わるか」が視覚的にわかる
      • 公式情報なのできちんとアップデートしてくれている(はず)
      • 公式情報にソースがあるので自分でいろいろ書き換えていて破滅したとき、必ずオリジナルを復元できる
  • Jupyter (IPython)でのはまりどころ解説を作ろう
    • いったん変数を作ると他のセルでも読み込める(読み込めてしまう)
    • 「セルを上から順に読み込まないと動かない」問題の原因
    • カーネル再起動まで変数は残り続ける

Matplotlib

  • とりあえず本当に簡単な図を描く
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.01, 4, 201)
y1 = np.exp(x)
y2 = np.log(x)

plt.plot(x, y1, label="e^x")
plt.plot(x, y2, label="\log x")

plt.grid()
plt.legend()
#plt.axes().set_aspect('equal', 'datalim') # アスペクト比を合わせる
plt.show()

TeX の記録

量子力学の1粒子ハミルトニアン。 \begin{align} \hat{H} = \frac{1}{2m} \hat{p}^2 + V(x). \end{align}

自然言語処理100本ノック

第2章 Unix コマンド
  • 要検討:ローカルでやった方がデモンストレーションとしてはいいかもしれない
  • 参考ページ
    • ここでは pandas を使っている
    • これはこれで覚えると便利
    • Excel が処理できる
  • Google Colab 上では !ls のように ! をつけると Unix (Linux) コマンドが実行できる。
  • Mac ならターミナルから直接実行できる
  • Windows でも適当な手段でインストールできる
    • ただし OS の違いから純粋な Windows では意味を持たないコマンドもある
    • chown や chmod などの権限管理とか
  • すさまじく大量にあり、各コマンドはオプションも死ぬほどたくさんある。
    • 毎日ゴリゴリに使い込まければ覚えられるものではない。
    • 大事なコマンドをいくつか見て慣れ親しむことだけが目的。
補足
  • cd, ls などの(もっと)基本的なコマンドはカバーされていない。
  • 参考リスト:とりあえずこのくらい知っておくといい(名前だけ何となく覚えていればいい)
  • Python にも対応する関数がある
    • mv は shutil.move: https://note.nkmk.me/python-shutil-move/
    • shutil はたぶん shell utilities の略
  • Ruby だと「わかりやすさ」を考えて Linux コマンドと同じ名前の関数・メソッドで定義されている
準備
1
!wget https://nlp100.github.io/data/popular-names.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
--2020-07-12 03:48:25--  https://nlp100.github.io/data/popular-names.txt
Resolving nlp100.github.io (nlp100.github.io)... 185.199.111.153, 185.199.109.153, 185.199.110.153, ...
Connecting to nlp100.github.io (nlp100.github.io)|185.199.111.153|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 55026 (54K) [text/plain]
Saving to: ‘popular-names.txt.1'

popular-names.txt.1 100%[===================>]  53.74K  --.-KB/s    in 0.03s

2020-07-12 03:48:25 (2.03 MB/s) - ‘popular-names.txt.1' saved [55026/55026]
1
!wc --help
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Usage: wc [OPTION]... [FILE]...
  or:  wc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  A word is a non-zero-length sequence of
characters delimited by white space.

With no FILE, or when FILE is -, read standard input.

The options below may be used to select which counts are printed, always in
the following order: newline, word, character, byte, maximum line length.
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
  -l, --lines            print the newline counts
      --files0-from=F    read input from the files specified by
                           NUL-terminated names in file F;
                           If F is - then read names from standard input
  -L, --max-line-length  print the maximum display width
  -w, --words            print the word counts
      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/wc>
or available locally via: info '(coreutils) wc invocation'
10. 行数のカウント

行数をカウントせよ.確認にはwcコマンドを用いよ.

1
!wc -l ./popular-names.txt
1
2780 ./popular-names.txt
1
2
3
4
import pandas as pd

df = pd.read_table('./popular-names.txt', header=None, sep='\t', names=['name', 'sex', 'number', 'year'])
print(len(df))
1
2780
# 補足:wc コマンドの調査
  • 参考
  • 実際にターミナルで実演してみよう
11. タブをスペースに置換

タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.

1
!sed -e 's/\t/ /g' ./popular-names.txt | head -n 5
1
2
3
4
5
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880

s/何とか/実はこう書きたかった/

1
!head -n 5 popular-names.txt
1
2
3
4
5
Mary    F   7065    1880
Anna    F   2604    1880
Emma    F   2003    1880
Elizabeth   F   1939    1880
Minnie  F   1746    1880
12. 1列目をcol1.txtに,2列目をcol2.txtに保存

各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.

# Linux コマンド
1
2
3
4
5
!cut -f 1 ./popular-names.txt > ./col1_chk.txt
!cat ./col1_chk.txt | head -n 5

!cut -f 2 ./popular-names.txt > ./col2_chk.txt
!cat ./col2_chk.txt | head -n 5
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Mary
Anna
Emma
Elizabeth
Minnie
F
F
F
F
F
# Python
1
2
3
4
5
6
7
col1 = df['name']
col1.to_csv('./col1.txt', =False)
print(col1.head())

col2 = df['sex']
col2.to_csv('./col2.txt', =False)
print(col2.head())
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
0         Mary
1         Anna
2         Emma
3    Elizabeth
4       Minnie
Name: name, dtype: object
0    F
1    F
2    F
3    F
4    F
Name: sex, dtype: object
第 3 章 正規表現
正規表現の簡単な話
  • 分厚い本が何冊も出るくらいのごつい話
  • 例:「イギリス」という言葉が出てくる文章を調べたい
    • 単なる検索でいい
  • 例:「イギリス+単語」という言葉が出てくる文章を、その単語セットとともに調べたい。
    • 例えばイギリスではなく「イギリス連邦」「イギリスの勝利」のような形で調べたい
    • ここで正規表現が出てくる
  • もう少し web でよくある例
    • メールアドレスのバリデーション
    • 「メインの文字列@gmail.com」みたいなのをチェックする
  • メンテナンスが魔界
    • 正規表現は死ぬほど複雑で簡単な部類でさえすでに読みにくい
    • 複雑なものは本当に何もわからない
    • 時間が経つと書いた当人でさえ判別できないことはよくある
ファイル取得
1
!wget https://nlp100.github.io/data/jawiki-country.json.gz
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
--2020-07-12 03:48:38--  https://nlp100.github.io/data/jawiki-country.json.gz
Resolving nlp100.github.io (nlp100.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...
Connecting to nlp100.github.io (nlp100.github.io)|185.199.108.153|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5068362 (4.8M) [application/gzip]
Saving to: ‘jawiki-country.json.gz.1'

jawiki-country.json 100%[===================>]   4.83M  13.3MB/s    in 0.4s

2020-07-12 03:48:38 (13.3 MB/s) - ‘jawiki-country.json.gz.1' saved [5068362/5068362]
展開(解凍)
1
!gunzip ./jawiki-country.json.gz
行数確認
1
!wc -l ./jawiki-country.json
1
248 ./jawiki-country.json
先頭行の確認
1
!head -1 ./jawiki-country.json
1
{"title": "エジプト", "text": "{{otheruses|主に現代のエジプト・アラブ共和国|古代|古代エジプト}}\n{{基礎情報 国\n|略名 =エジプト\n|漢字書き=埃及\n|日本語国名 =エジプト・アラブ共和国\n|公式国名 ={{lang|ar|'''جمهورية مصر العربية'''}}\n|国旗画像 =Flag of Egypt.svg\n|国章画像 =[[ファイル:Coat_of_arms_of_Egypt.svg|100px|エジプトの国章]]\n|国章リンク =([[エジプトの国章|国章]])\n|標語 =なし\n|位置画像 =Egypt (orthographic projection).svg\n|公用語 =[[アラビア語]]\n|首都 =[[File:Flag of Cairo.svg|24px]] [[カイロ]]\n|最大都市 =カイロ\n|元首等肩書 =[[近代エジプトの国家元首の一覧|大統領]]\n|元首等氏名 =[[アブドルファッターフ・アッ=シーシー]]\n|首相等肩書 ={{ill2|エジプトの首相|en|Prime Minister of Egypt|label=首相}}\n|首相等氏名 ={{仮リンク|ムスタファ・マドブーリー|ar|مصطفى مدبولي|en|Moustafa Madbouly}}\n|面積順位 =29\n|面積大きさ =1 E12\n|面積値 =1,010,408\n|水面積率 =0.6%\n|人口統計年 =2012\n|人口順位 =\n|人口大きさ =1 E7\n|人口値 =1億人\n|人口密度値 =76\n|GDP統計年元 =2018\n|GDP値元 =4兆4,374億<ref name=\"economy\">IMF Data and Statistics 2020年2月3日閲覧([https://www.imf.org/external/pubs/ft/weo/2019/02/weodata/weorept.aspx?sy=2017&ey=2024&scsm=1&ssd=1&sort=country&ds=.&br=1&c=469&s=NGDP%2CNGDPD%2CPPPGDP%2CNGDPDPC%2CPPPPC&grp=0&a=&pr.x=57&pr.y=4])</ref>\n|GDP統計年MER =2018\n|GDP順位MER =45\n|GDP値MER =2,496億<ref name=\"economy\" />\n|GDP統計年 =2018\n|GDP順位 =21\n|GDP値 =1兆2,954億<ref name=\"economy\" />\n|GDP/人 =13,358<ref name=\"economy\" />\n|建国形態 =[[独立]]<br />&nbsp;-&nbsp;日付\n|建国年月日 =[[イギリス]]より<br />[[1922年]][[2月28日]]\n|通貨 =[[エジプト・ポンド]] (£)\n|通貨コード =EGP\n|時間帯 = +2\n|夏時間 =なし\n|国歌 =[[エジプトの国歌|{{lang|ar|بلادي، بلادي، بلادي}}]]{{ar icon}}<br>''我が祖国''<br>{{center|[[file:Bilady, Bilady, Bilady.ogg]]}}\n|ISO 3166-1 = EG / EGY\n|ccTLD =[[.eg]]\n|国際電話番号 =20\n|注記 =\n}}\n'''エジプト・アラブ共和国'''(エジプト・アラブきょうわこく、{{lang-ar|جمهورية مصر العربية}})、通称'''エジプト'''は、[[中東]]([[アラブ世界]])および[[北アフリカ]]にある[[共和国]]。[[首都]]は[[カイロ]]。\n\n[[アフリカ大陸]]では北東端に位置し、西に[[リビア]]、南に[[スーダン]]、北東の[[シナイ半島]]では[[イスラエル]]、[[ガザ地区]]と[[国境]]を接する。北は[[地中海]]、東は[[紅海]]に面している。南北に流れる[[ナイル川]]の[[河谷]]と[[三角州|デルタ]]地帯([[ナイル・デルタ]])のほかは、国土の大部分の95%以上が[[砂漠]]である<ref>[https://kotobank.jp/word/エジプト-36404 エジプト]藤井宏志『日本大百科全書』小学館 2020年2月1日閲覧</ref>。ナイル河口の東に地中海と紅海を結ぶ[[スエズ運河]]がある。\n\n== 国号 ==\n正式名称は[[アラビア語]]で {{lang|ar|'''جمهورية مصر العربية'''}}(ラテン[[翻字]]: {{transl|ar|DIN|Ǧumhūrīyah Miṣr al-ʿarabīyah}})。通称は {{lang|ar|'''مصر'''}}([[フスハー|標準語]]: {{transl|ar|DIN|Miṣr}} ミスル、[[アラビア語エジプト方言|エジプト方言]]ほか、口語アラビア語: {{IPA|mɑsˤɾ}} マスル)。[[コプト語]]: {{Lang|cop|Ⲭⲏⲙⲓ}}(Khemi ケーミ)。\n\nアラビア語の名称'''ミスル'''は、古代から[[セム語派|セム語]]でこの地を指した名称である。なお、セム語の一派である[[ヘブライ語]]では、[[双数形]]の'''ミスライム'''({{lang|he|מצרים}}, ミツライム)となる。\n\n公式の英語表記は '''Arab Republic of Egypt'''。通称 '''Egypt''' {{IPA-en|ˈiːdʒɨpt|}}。形容詞はEgyptian {{IPA-en|ɨˈdʒɪpʃ''ə''n|}}。エジプトの呼称は、古代[[エジプト語]]のフート・カア・プタハ([[プタハ]]神の魂の神殿)から転じてこの地を指すようになったギリシャ語の単語である、[[ギリシャ神話]]の[[アイギュプトス (ギリシア神話)|アイギュプトス]]にちなむ。\n\n[[日本語]]の表記はエジプト・アラブ共和国。通称[[wikt:エジプト|エジプト]]。[[漢字]]では'''埃及'''と表記し、'''埃'''と略す。この[[国名の漢字表記一覧|漢字表記]]は、[[漢文]]がそのまま日本語や[[中国語]]などに輸入されたものである。英語では「イージプト」と呼ばれる。\n\n* [[1882年]] - 1922年 ({{仮リンク|イギリス領エジプト|en|History of Egypt under the British}})\n* 1922年 - 1953年 [[エジプト王国]]\n* 1953年 - 1958年 [[エジプト共和国]]\n* 1958年 - 1971年 [[アラブ連合共和国]]\n* 1971年 - 現在 エジプト・アラブ共和国\n\n== 歴史 ==\n{{Main|エジプトの歴史}}\n\n=== 古代エジプト ===\n[[ファイル:All Gizah Pyramids.jpg|thumb|300px|right|[[ギーザ|ギザ]]の[[三大ピラミッド]]]]\n[[ファイル:Egyptiska hieroglyfer, Nordisk familjebok.png|thumb|260px|right|[[ヒエログリフ]]]]\n{{Main|古代エジプト}}\n\n「エジプトはナイルの賜物」という[[古代ギリシア]]の[[歴史家]][[ヘロドトス]]の言葉で有名なように、エジプトは豊かな[[ナイル川]]の[[三角州|デルタ]]に支えられ[[古代エジプト|古代エジプト文明]]を発展させてきた。エジプト人は[[紀元前3000年]]ごろには早くも中央集権国家を形成し、[[ピラミッド]]や[[王家の谷]]、[[ヒエログリフ]]などを通じて世界的によく知られている高度な[[文明]]を発達させた。\n\n=== アケメネス朝ペルシア ===\n3000年にわたる諸王朝の盛衰の末、[[紀元前525年]]に[[アケメネス朝]]ペルシアに支配された。\n\n=== ヘレニズム文化 ===\n[[紀元前332年]]には[[アレクサンドロス3世|アレクサンドロス大王]]に征服された。その後、[[ギリシャ人|ギリシア系]]の[[プトレマイオス朝]]が成立し、[[ヘレニズム]]文化の中心のひとつとして栄えた。\n\n=== ローマ帝国 ===\nプトレマイオス朝は[[紀元前30年]]に滅ぼされ、エジプトは[[ローマ帝国]]の[[属州]]となり[[アエギュプトゥス]]と呼ばれた。ローマ帝国の統治下では[[キリスト教]]が広まり、[[コプト教会]]が生まれた。ローマ帝国の分割後は[[東ローマ帝国]]に属し、豊かな[[穀物]]生産でその繁栄を支えた。\n\n=== イスラム王朝 ===\n7世紀に[[イスラム教|イスラム化]]。[[639年]]に[[イスラム帝国]]の[[将軍]][[アムル・イブン・アル=アース]]によって征服され、[[ウマイヤ朝]]および[[アッバース朝]]の一部となった。アッバース朝の支配が衰えると、そのエジプト[[総督]]から自立した[[トゥールーン朝]]、[[イフシード朝]]の短い支配を経て、[[969年]]に現在の[[チュニジア]]で興った[[ファーティマ朝]]によって征服された。これ以来、[[アイユーブ朝]]、[[マムルーク朝]]とエジプトを本拠地として[[歴史的シリア|シリア地方]]まで版図に組み入れた[[イスラム王朝]]が500年以上にわたって続く。特に250年間続いたマムルーク朝の下で[[中央アジア]]や[[カフカス]]などアラブ世界の外からやってきた[[マムルーク]](奴隷軍人)による支配体制が確立した。\n\n=== オスマン帝国 ===\n[[1517年]]に、マムルーク朝を滅ぼしてエジプトを属州とした[[オスマン帝国]]のもとでもマムルーク支配は温存された({{仮リンク|エジプト・エヤレト|en|Egypt Eyalet}})。\n\n=== ムハンマド・アリー朝 ===\n[[ファイル:ModernEgypt, Muhammad Ali by Auguste Couder, BAP 17996.jpg|thumb|180px|[[ムハンマド・アリー]]]]\n[[1798年]]、[[フランス]]の[[ナポレオン・ボナパルト]]による[[エジプト・シリア戦役|エジプト遠征]]をきっかけに、エジプトは[[近代国家]]形成の時代を迎える。フランス軍撤退後、混乱を収拾して権力を掌握したのはオスマン帝国が派遣した[[アルバニア人]]部隊の隊長としてエジプトにやってきた軍人、[[ムハンマド・アリー]]であった。彼は実力によってエジプト総督に就任すると、マムルークを打倒して総督による中央集権化を打ち立て、[[経済]]・[[軍事]]の近代化を進め、エジプトをオスマン帝国から半ば独立させることに成功した。アルバニア系ムハンマド・アリー家による[[世襲]]政権を打ち立てた([[ムハンマド・アリー朝]])。しかし、当時の世界に勢力を広げた[[ヨーロッパ]][[列強]]はエジプトの独立を認めず、また、ムハンマド・アリー朝の急速な近代化政策による社会矛盾は結局、エジプトを列強に経済的に従属させることになった。\n\n=== イギリスの進出 ===\nムハンマド・アリーは[[綿花]]を主体とする農産物[[専売制]]をとっていたが、1838年に宗主オスマン帝国が[[イギリス]]と自由貿易協定を結んだ。ムハンマド・アリーが1845年に三角州の堰堤を着工。死後に専売制が崩壊し、また堰堤の工期も延びて3回も支配者の交代を経た1861年、ようやく一応の完工をみた。1858年末には国庫債券を発行しなければならないほどエジプト財政は窮迫していた。[[スエズ運河会社]]に払い込む出資金の不足分は、シャルル・ラフィット([[:fr:Charles Laffitte|Charles Laffitte]])と割引銀行(現・[[BNPパリバ]])から借り、国庫債券で返済することにした。[[イスマーイール・パシャ]]が出資の継続を認めたとき、フランスの[[ナポレオン3世]]の裁定により契約責任を問われ、違約金が[[自転車操業]]に拍車をかけた。[[1869年]]、エジプトはフランスとともに[[スエズ運河]]を開通させた。この前後(1862 - 1873年)に8回も[[外債]]が起債され、額面も次第に巨額となっていた。エジプトはやむなくスエズ運河会社持分を398万[[スターリング・ポンド|ポンド]]でイギリスに売却したが、1876年4月に[[デフォルト]]した<ref>西谷進、「[https://doi.org/10.20624/sehs.37.2_113 一九世紀後半エジプト国家財政の行詰まりと外債 (一)]」 『社会経済史学』 1971年 37巻 2号 p.113-134,216\n, {{doi|10.20624/sehs.37.2_113}}</ref>。\n\n英仏が負債の償還をめぐって争い、エジプトの蔵相は追放された。[[イタリア]]や[[オーストリア]]も交えた負債委員会が組織された。2回目のリスケジュールでイスマーイール一族の直轄地がすべて移管されたが、土地税収が滞った<ref>西谷進、「[https://doi.org/10.20624/sehs.37.3_283 一九世紀後半エジプト国家財政の行詰まりと外債 (二)]」 社会経済史学 1971年 37巻 3号 p.283-311,330-33, {{doi|10.20624/sehs.37.3_283}}</ref>。\n\n[[1882年]]、[[アフマド・オラービー]]が中心となって起きた反英運動([[ウラービー革命]])がイギリスによって武力鎮圧された。エジプトはイギリスの[[保護国]]となる。結果として、政府の教育支出が大幅カットされるなどした。[[1914年]]には、[[第一次世界大戦]]によってイギリスがエジプトの名目上の[[宗主国]]であるオスマン帝国と開戦したため、エジプトはオスマン帝国の宗主権から切り離された。さらに[[サアド・ザグルール]]の逮捕・国外追放によって反英独立運動たる[[エジプト革命 (1919年)|1919年エジプト革命]]が勃発し、英国より主政の国として独立した。\n\n=== 独立・エジプト王国 ===\n第一次大戦後の[[1922年]][[2月28日]]に'''[[エジプト王国]]'''が成立し、翌年イギリスはその[[独立]]を認めたが、その後もイギリスの間接的な支配体制は続いた。\n\nエジプト王国は[[立憲君主制]]を布いて議会を設置し、緩やかな近代化を目指した。[[第二次世界大戦]]では、[[枢軸国軍]]がイタリア領リビアから侵攻したが、英軍が撃退した([[北アフリカ戦線]])。第二次世界大戦前後から[[パレスチナ問題]]の深刻化や、1948年から1949年の[[パレスチナ戦争]]([[第一次中東戦争]])での[[イスラエル]]への敗北、経済状況の悪化、[[ムスリム同胞団]]など政治のイスラム化([[イスラム主義]])を唱える社会勢力の台頭によって次第に動揺していった。\n\n=== エジプト共和国 ===\nこの状況を受けて[[1952年]]、軍内部の秘密組織[[自由将校団]]が[[クーデター]]を起こし、国王[[ファールーク1世 (エジプト王)|ファールーク1世]]を亡命に追い込み、ムハンマド・アリー朝を打倒した([[エジプト革命 (1952年)|エジプト革命]]<ref>片山正人『現代アフリカ・クーデター全史』叢文社 2005年 ISBN 4-7947-0523-9 p49</ref>)。生後わずか半年の[[フアード2世 (エジプト王)|フアード2世]]を即位させ、[[自由将校団]]団長の[[ムハンマド・ナギーブ]]が首相に就任して権力を掌握した。さらに翌年の1953年、国王を廃位して共和政へと移行、[[ムハンマド・ナギーブ|ナギーブ]]が首相を兼務したまま初代大統領となり、'''エジプト共和国'''が成立した。\n\n=== ナーセル政権 ===\n[[ファイル:Gamal Nasser.jpg|thumb|180px|right|[[ガマール・アブドゥル=ナーセル]]。[[第二次中東戦争]]に勝利し、スエズ運河を国有化した。ナーセルの下でエジプトは[[汎アラブ主義]]の中心となった]]\n[[1956年]]、第2代大統領に就任した[[ガマール・アブドゥル=ナーセル]]のもとでエジプトは[[冷戦]]下での中立外交と[[汎アラブ主義|汎アラブ主義(アラブ民族主義)]]を柱とする独自の政策を進め、[[第三世界]]・[[アラブ諸国]]の雄として台頭する。同年にエジプトは[[スエズ運河国有化宣言|スエズ運河国有化]]を断行し、これによって勃発した[[第二次中東戦争]](スエズ戦争)で政治的に勝利を収めた。[[1958年]]には[[シリア]]と連合して'''[[アラブ連合共和国]]'''を成立させた。しかし[[1961年]]にはシリアが連合から脱退し、[[国家連合]]としてのアラブ連合共和国はわずか3年で事実上崩壊した。さらに[[1967年]]の[[第三次中東戦争]]は惨敗に終わり、これによってナーセルの権威は求心力を失った。\n\n=== サーダート政権 ===\n[[1970年]]に急死したナーセルの後任となった[[アンワル・アッ=サーダート]]は、自ら主導した[[第四次中東戦争]]後に[[ソビエト連邦]]と対立して[[アメリカ合衆国]]など[[西側諸国]]に接近。[[社会主義]]的経済政策の転換、[[イスラエル]]との融和など、ナーセル体制の切り替えを進めた。[[1971年]]には、国家連合崩壊後もエジプトの国号として使用されてきた「アラブ連合共和国」の国号を捨てて'''エジプト・アラブ共和国'''に改称した。また、サーダートは、経済の開放などに舵を切るうえで、左派に対抗させるべくイスラーム主義勢力を一部容認した。しかしサーダートは、イスラエルとの和平を実現させたことの反発を買い、[[1981年]]に[[イスラム過激派]]の[[ジハード団]]によって[[暗殺]]された。\n\n=== ムバーラク政権 ===\n[[ファイル:Hosni Mubarak ritratto.jpg|thumb|180px|[[アラブの春]]で失脚するまで30年以上にわたり長期政権を維持した[[ホスニー・ムバーラク]]]]\n[[イラク]]の[[クウェート侵攻]]はエジプトの国際収支を悪化させた。サーダートに代わって副大統領から大統領に昇格した[[ホスニー・ムバーラク]]は、対米協調外交を進める一方、[[開発独裁]]的な[[政権]]を20年以上にわたって維持した。\n\nムバラク政権は1990年12月に「1000日計画」と称する経済改革案を発表した。クウェート解放を目指す[[湾岸戦争]]では[[多国籍軍]]へ2万人を派兵し、これにより約130億ドルも[[対外債務]]を減らすという外交成果を得た。累積債務は500億ドル規模であった。軍事貢献により帳消しとなった債務は、クウェート、[[サウジアラビア]]に対するものと、さらに対米軍事債務67億ドルであった。1991年5月には[[国際通貨基金]]のスタンドバイクレジットおよび[[世界銀行]]の構造調整借款(SAL)が供与され、[[パリクラブ]]において200億ドルの債務削減が合意された。エジプト経済の構造調整で画期的だったのは、ドル・ペッグによる為替レート一本化であった<ref>『エジプトの経済発展の現状と課題』 [[海外経済協力基金]]開発援助研究所 1998年 23頁</ref>。\n\n海外の[[機関投資家]]に有利な条件が整えられていった。イスラム主義運動は厳しく[[弾圧]]され、[[ザカート|喜捨]]の精神は失われていった。[[1997年]]には[[イスラム集団]]による[[ルクソール事件]]が発生している。1999年にイスラム集団は武装闘争放棄を宣言し、近年、観光客を狙った事件は起こっていない。しかし、ムバーラクが大統領就任と同時に発令した[[非常事態法]]は、彼が追放されるまで30年以上にわたって継続された<ref>[http://www.cnn.co.jp/world/30001719.html エジプト副大統領が野党代表者らと会談、譲歩示す]</ref>。\n\n2002年6月、エジプト政府は15億ドルの[[ユーロ債]]を起債したが、2002年から2003年に為替差損を被り、対外債務を増加させた<ref>IMF, ''Arab Republic of Egypt: Selected Issues'', 2005, [https://books.google.co.jp/books?id=aZDSd_fjJzkC&pg=PT49&dq=reschedule+egypt+eurobond&hl=ja&sa=X&ved=0ahUKEwiD0qHpn8DbAhWLWbwKHXRrDGQQ6AEIJzAA#v=onepage&q=reschedule%20egypt%20eurobond&f=false]</ref>。\n\n=== ムルシー政権 ===\n[[ファイル:Mohamed Morsi-05-2013.jpg|thumb|180px|民主化後初の大統領だった[[ムハンマド・ムルシー]]]]\n{{Main|エジプト革命 (2011年)|2012年エジプト大統領選挙}}\n[[チュニジア]]の[[ジャスミン革命]]に端を発した近隣諸国の民主化運動がエジプトにおいても波及し、[[2011年]]1月、30年以上にわたって独裁体制を敷いてきたムバーラク大統領の辞任を求める大規模なデモが発生した。同2月には大統領支持派によるデモも発生して騒乱となり、国内主要都市において大混乱を招いた。大統領辞任を求める声は日に日に高まり、2月11日、ムバーラクは大統領を辞任し、全権が[[エジプト軍最高評議会]]に委譲された。同年12月7日には{{仮リンク|カマール・ガンズーリ|en|Kamal Ganzouri}}を暫定首相とする政権が発足した。その後、2011年12月から翌年1月にかけて人民議会選挙が、また2012年5月から6月にかけて大統領選挙が実施され[[ムハンマド・ムルシー]]が当選し、同年6月30日の大統領に就任したが、人民議会は大統領選挙決選投票直前に、選挙法が違憲との理由で裁判所から解散命令を出されており、立法権は軍最高評議会が有することとなった。\n\n2012年11月以降、新憲法の制定などをめぐって反政府デモや暴動が頻発した({{仮リンク|2012年-13年エジプト抗議運動|en|2012–13 Egyptian protests}})。ムルシー政権は、政権への不満が大規模な暴動に発展するにつれて、当初の警察改革を進める代わりに既存の組織を温存する方向に転換した。{{仮リンク|ムハンマド・イブラヒーム・ムスタファ|ar|محمد إبراهيم مصطفى|label=ムハンマド・イブラヒーム}}が内相に就任した[[2013年]]1月以降、治安部隊による政治家やデモ隊への攻撃が激化。1月末には当局との衝突でデモ参加者など40人以上が死亡したが、治安部隊への調査や処罰は行われていない<ref>「『アラブの春』の国で繰り返される悪夢」 エリン・カニンガム 『Newsweek[[ニューズウィーク]]日本版』 2013年3月5日号</ref>。イブラヒーム内相は、「国民が望むならば辞任する用意がある」と2月に述べている<ref>{{Cite news\n|url=http://english.ahram.org.eg/News/63894.aspx\n|title=I will leave my position if people want: Egypt's interior minister\n|newspaper=アハラムオンライン\n|date=2013-02-02\n|accessdate=2013-05-08\n}}</ref>。下落する[[エジプト・ポンド]]がとめどなく[[アメリカ合衆国ドル|USドル]]に交換され、[[外貨準備]]を減らすような混乱が同月10日の[[ロイター通信]]で報じられている。下落は1月から起きており、同月には[[ドバイ]]のエミレーツNBD([[:en:Emirates NBD|Emirates NBD]])が[[BNPパリバ]]のエジプト支店を完全買収した。[[オイルマネー]]がエジプト経済を我が物にする社会現象が起こっていた。さらに『[[フィナンシャル・タイムズ]]』が1月19日に報じたのは、[[エチオピア]]がナイルの川上に48億ドルの予算をかけて[[ダム]]を造るという計画であった。混乱中のエジプトが水紛争で負ければ大きな水ストレスが生じるだろうと予測された。\n\n2013年4月、[[エジプト中央銀行]]は[[リビア]]から20億ドルの預金を得た。リビア側が利害を説明したところによると、リビアはエジプト株を100億ドル近く保有しているという。リビアは[[世界金融危機]]の時から欧米の[[メガバンク]]と癒着を疑われている。\n\nムルシー政権は発足後約1年後の[[2013年エジプトクーデター|2013年7月3日、軍部によるクーデター]]によって終焉を迎えた<ref>{{Cite news\n|url=http://middleeast.asahi.com/watch/2013070800008.html\n|title=エジプトのクーデターに至る過程:朝日新聞記事再録\n|work=asahi.com\n|newspaper=[[朝日新聞]]\n|date=2013-07-09\n|accessdate=2013-07-13\n}}</ref>。8月下旬にムバラクが釈放され、国内銀行が平常運転に復帰した。8月30日の[[CNN]]では、[[中国石油化工]]が米国[[ヒューストン]]のアパッチ([[:en:Apache Corporation|Apache Corporation]])とエジプト内[[油田]]事業を提携したことが報じられた。10月下旬、[[アラブ首長国連邦]]がエジプトに50億ドルの支援を申し出た。エジプトエリートの売国とソブリン危機は翌年4月まで深化していった。\n\nなお、イブラヒームは、クーデター後に成立した[[ハーゼム・エル=ベブラーウィー|ベブラーウィー]]暫定内閣でも続投している。\n\n=== アッ=シーシー政権 ===\n[[ファイル:Abdel_Fattah_el-Sisi_September_2017.jpg|thumb|180px|[[アブドルファッターフ・アッ=シーシー]]。2013年のクーデターを主導し、大統領に就任した]]\n2014年5月26日 - 28日に行われた大統領選挙では2013年のクーデターの主導者[[アブドルファッターフ・アッ=シーシー]]が当選して6月8日、大統領に就任し<ref>http://www.afpbb.com/articles/-/3017089 エジプトのシシ新大統領が就任、前大統領の追放からほぼ1年</ref>、8月5日からは[[新スエズ運河]]の建設など大規模なプロジェクトを推し進めた。[[2015年]][[3月13日]]には、[[カイロ]]の東側に向こう5 - 7年で、450億ドルを投じて新しい行政首都の建設も計画していることを明らかにした<ref>http://jp.reuters.com/article/topNews/idJPKBN0MC0B720150316 エジプト、カイロの東に新行政首都建設へ=住宅相(ロイター通信)</ref>。行政と経済の中心となる新首都はカイロと紅海の間に建設され、広さは約700平方キロメートルで、米[[ニューヨーク]]の[[マンハッタン]]のおよそ12倍の面積の予定であり<ref>http://jp.wsj.com/articles/SB10030317691824024149004580519060782977390 エジプト、新首都建設を計画―カイロと紅海の間に</ref>、大統領府などエジプトの行政を担う地区は当初覚書を交わした[[アラブ首長国連邦]](UAE)の[[エマール・プロパティーズ]]や[[中華人民共和国|中国]]の[[中国建築|中国建築股份有限公司]]との破談はあったものの[[2016年]]4月に地元企業によって工事を開始し<ref>{{Cite news|url=http://www.xinhuanet.com/english/2016-04/02/c_135246252.htm|tile=Egypt kicks off 1st phase of building new capital|work= [[新華社]]|date=2016-04-02|accessdate=2018-06-25}}</ref>、代わりにエジプト政府がピラミッド<ref>{{Cite news|url= https://zhuanlan.zhihu.com/p/41444500|title=埃及总理表示,将新首都CBD项目建成"金字塔"一样的地标|work= 知乎专栏|date=2018-08-06|accessdate=2018-08-18}}</ref>に匹敵する一大事業の[[ランドマーク]]と位置づけている、アフリカでもっとも高いビルも建設予定である経済を担う[[中央業務地区]]を中国企業が請け負って[[2018年]]3月に着工した<ref>{{Cite news|url=http://www.xinhuanet.com/english/2017-10/12/c_136672905.htm|tile=Chinese firm finalizes deal for building huge business district in Egypt's new capital|work= amwalalghad|date=2017-10-12|accessdate=2018-07-28}}</ref><ref>{{Cite news|url=http://en.amwalalghad.com/china-to-build-egypt-africa-tallest-tower-in-new-capital-spokesperson/|tile=China to build Egypt-Africa tallest tower in new capital: spokesperson|work= amwalalghad|date=2018-06-28|accessdate=2018-06-29}}</ref><ref>{{Cite news|url=https://www.bloomberg.com/news/articles/2018-03-18/china-to-finance-majority-of-new-egypt-capital-s-tower-district|tile=China to Finance Majority of New Egypt Capital's Tower District|work= [[ブルームバーグ (企業)|ブルームバーグ]]|date=2018-03-18|accessdate=2018-07-28}}</ref><ref>{{Cite news|url= http://eg.mofcom.gov.cn/article/todayheader/201803/20180302720170.shtml|title=中建埃及新行政首都CBD项目开工仪式在开罗举行|work= 中華人民共和国駐エジプト大使館|date=2018-03-21|accessdate=2018-06-25}}</ref>。\n\nUAEや中国と破談した背景には通貨不安が存在する。2016年11月3日、エジプト中央銀行が[[変動相場制]]を採用すると発表した。エジプト・ポンドが売られるのを革命の影響だけで片付けるには、この不安は長引きすぎている。同行は6日後、国際金融機関から20億ドルの[[シャドー・バンキング・システム#レポ市場|レポ借入]]を始めた。4月に[[国際通貨基金]]からも120億ドルを借りている。エジプトは経済主権を失っている。[[ガーディアン]]が10月4日に報じたところでは、国際金融機関の[[バークレイズ]]がエジプト事業を[[ダノン#ワファバンク|ワファバンク]]に売却した。\n\n2017年末、政府が[[世界銀行]]に対し、エチオピアのダム事業を差し止めるように要請した。世銀は5月にエジプトへ10億ドルを追加融資しており、エジプトは厳しい立場にある。翌2018年1月中旬にエチオピアとの水紛争が妥協に至った。5月末にエジプトの対外債務累積額は829億ドルであった。9月、ムバラクの息子ら2人([[:en:Gamal Mubarak|Gamal]] and [[:en:Alaa Mubarak|Alaa]])がエジプトの株価を操作した疑いで逮捕された。\n\n== 政治 ==\n{{エジプトの政治}}\n{{Main2|詳細は{{仮リンク|エジプトの政治|en|Politics of Egypt|ar|السياسة في مصر}}および[[近代エジプトの国家元首の一覧]]}}\n\n=== 政体 ===\n[[共和制]]\n=== 大統領 ===\n[[国家元首]]の大統領は、立法・行政・司法の三権において大きな権限を有する。また国軍([[エジプト軍]])の[[総司令官|最高司令官]]でもある。大統領の選出は、[[直接選挙]]による。任期は4年で、三選禁止となった<ref>{{Cite journal|和書|author = 鈴木恵美|coauthors = |title = エジプト革命以後の新体制形成過程における軍の役割|journal = 地域研究|volume = 12|issue = 1|pages = 135-147|publisher = 京都大学地域研究統合情報センター|location = |date = 2012-03-28|language = |url = http://www.cias.kyoto-u.ac.jp/publish/?cat=4|jstor = |issn = 1349-5038 |isbn =978-4-8122-1178-6|doi = |id = |naid = |accessdate = 2012-06-17}}</ref>。最高大統領選挙委員会(The Supreme Presidential Election Commission, SPEC)委員長は、最高憲法裁判所長官が兼任していたが、現在は副長官がその任を負う。\n\n第2代大統領[[ガマール・アブドゥル=ナーセル]]以来、事実上の終身制が慣例で、第4代大統領[[ホスニー・ムバーラク]]は[[1981年]]の就任以来、約30年にわたって[[独裁]]体制を築いた。ムバーラクの[[親米]]・親[[イスラエル]]路線が欧米諸国によって評価されたために、独裁が見逃されてきた面がある。当時は任期6年、多選可。議会が候補者を指名し、国民は[[信任投票]]を行っていた。ただし、2005年は複数候補者による大統領選挙が実施された。\n\n[[2011年]]9月に大統領選が予定されていたが、2011年1月に騒乱状態となり、[[2月11日]]、ムバーラクは国民の突き上げを受ける形で辞任した。翌日より[[国防大臣]]で[[エジプト軍最高評議会|軍最高評議会]]議長の[[ムハンマド・フセイン・タンターウィー]]が元首代行を務め、それは[[2012年エジプト大統領選挙]]の当選者[[ムハンマド・ムルシー]]が[[6月30日]]に大統領に就任するまで続いた。2011年[[3月19日]]、[[憲法改正]]に関する[[国民投票]]が行われ、承認された<ref name=jpnmofa>{{Cite web|title = エジプト・アラブ共和国 基礎データ|work = 各国:地域情勢|publisher = 外務省(日本)|url = http://www.mofa.go.jp/mofaj/area/egypt/data.html|accessdate =2016-10-01}}</ref><ref>{{Cite web|title = エジプト基礎情報~政治・外交|work = エジプト情報|publisher = 在エジプト日本国大使館|date = 2011-07-30|url = http://www.eg.emb-japan.go.jp/j/egypt_info/basic/seiji.htm|accessdate =2016-10-01}}</ref>。\n\nしかしムルシー政権発足からわずか1年後の2013年、[[2013年エジプトクーデター|軍事クーデター]]が勃発。ムルシーは解任され、エジプトは再び軍による統治へと逆戻りした。2014年1月に再び憲法が修正され<ref name=jpnmofa />、同年5月の大統領選挙を経て再び民政へと復帰した。\n\n=== 議会 ===\n議会は、[[一院制]]の'''人民議会'''(マジュリス・アッ=シャアブ)。全508議席で、498議席は公選、10議席は大統領指名枠<ref>2011年12月現在では、定数498議席のうち、3分の2(332議席)が政党(連合)リストによる[[比例代表制]]で、3分の1(166議席)が[[小選挙区制]]で選出される</ref>。任期5年。これとは別に、'''諮問評議会'''(シューラ)が1980年設置されたが、立法権は有さない大統領の諮問機関である<ref>{{Cite web| author = 鈴木恵美\n | coauthors =\n | title = エジプト\n | work = 中東・イスラーム諸国の民主化\n | publisher = NIHU プログラム・イスラーム地域研究、東京大学拠点\n | date =\n | url = http://www.l.u-tokyo.ac.jp/~dbmedm06/me_d13n/database/egypt/egypt_all.html\n | format =\n | doi =\n | accessdate = 2012-06-15}}</ref>。全270議席で、180議席が公選、90議席が大統領指名枠。\n\n=== 選挙 ===\n2011年[[11月21日]]、[[イサーム・シャラフ]]暫定内閣は、デモと中央[[治安部隊]]の衝突で多数の死者が出たことの責任を取り軍最高評議会へ辞表を提出した。軍最高評議会議長タンターウィーは[[11月22日]]テレビで演説し、「28日からの人民議会選挙を予定通り実施し、次期大統領選挙を2012年6月末までに実施する」と表明した<ref>[http://www.asahi.com/special/meastdemo/TKY201111220122.html エジプト・シャラフ内閣が総辞職表明 デモの混乱で引責] 『朝日新聞』 2011年11月22日</ref><ref>[http://www.asahi.com/special/meastdemo/TKY201111230004.html エジプト軍議長「近く挙国一致内閣」とテレビ演説] 『朝日新聞』 2011年11月23日</ref><ref>[http://www.asahi.com/special/meastdemo/TKY201111250136.html エジプト軍議長、元首相に組閣要請 選挙管理内閣を想定] 『朝日新聞』 2011年11月25日</ref>。人民議会選挙は2011年[[11月28日]]から[[2012年]][[1月]]までに、行政区ごとに3回に分けて、また、投票日を1日で終わりにせず2日間をとり、大勢の投票での混乱を緩和し実施、諮問評議会選挙も[[3月11日]]までに実施された。また[[5月23日]]と[[5月24日|24日]]に[[2012年エジプト大統領選挙|大統領選挙]]の投票が実施された。\n\nしかし、[[6月14日]]に最高[[憲法裁判所]]が出した「現行の議会選挙法は違憲で無効(3分の1の議員について当選を無効と認定)」との判決を受け<ref>[http://www.asahi.com/international/reuters/RTR201206150031.html「エジプト議会選は無効」、憲法裁が大統領選直前に違法判断] 『朝日新聞』 2012年6月15日</ref><ref>[http://www.news24.jp/articles/2012/06/15/10207632.html エジプト議会、解散へ 大統領選にも影響か] [[日テレNEWS24]] 2012年6月15日</ref>、[[6月16日|16日]]までにタンターウィー議長は人民議会解散を命じた<ref>{{Cite news\n  | author = カイロ共同\n | title = エジプト、軍が議会に解散命令 憲法裁判所の判断で\n | newspaper = 47NEWS\n | location =\n | pages = 6\n | language =\n | publisher = 共同通信\n | date = 2012-06-18\n | url = http://www.47news.jp/CN/201206/CN2012061701001315.html\n | accessdate = 2012-06-18}}</ref>。大統領選挙の決選投票は6月16日と[[6月17日|17日]]に実施され、イスラム主義系の[[ムハンマド・ムルシー]]が当選した。\n\n=== 政党 ===\n{{main|エジプトの政党}}\n\n2011年3月28日に改正政党法が公表され、エジプトでは[[宗教]]を基盤とした[[政党]]が禁止された。そのため、[[ムスリム同胞団]](事実上の最大[[野党]]であった)などは非合法化され、初めての選挙(人民議会選挙)では、ムスリム同胞団を母体とする[[自由公正党]]({{lang-ar|حزب الحرية والعدالة}} - {{lang|en|Ḥizb Al-Ḥurriya Wal-'Adala}}, {{lang-en-short|Freedom and Justice Party}})が結成された。また、[[ヌール党]]([[サラフィー主義]]、イスラーム保守派)、[[新ワフド党]](エジプト最古の政党)、[[政党連合]]{{仮リンク|エジプト・ブロック|en|Egyptian Bloc}}(含む[[自由エジプト人党]](世俗派)、[[エジプト社会民主党]](中道左派)、[[国民進歩統一党]](左派))、[[ワサト党]]、{{仮リンク|政党連合革命継続|en|The Revolution Continues Alliance}}、{{仮リンク|アダラ党|en|Justice Party (Egypt)|label=公正党}}({{lang-ar|حزب العدل}} - {{lang|en|Hizb ElAdl}}, {{lang-en-short|Justice Party}}、今回の革命の中心を担った青年活動家による政党)など、全部で50以上の政党が参加していた<ref>{{Cite web\n | last =\n | first =\n | authorlink =\n | coauthors =\n | title = エジプト・アラブ共和国 基礎データ\n | work = 各国:地域情勢\n | publisher = 外務省(日本)\n | date =\n | url = http://www.mofa.go.jp/mofaj/area/egypt/data.html\n | format =\n | doi =\n | accessdate =2012-06-17 }}</ref><ref>{{Cite web\n | last =\n | first =\n | authorlink =\n | coauthors =\n | title = エジプト基礎情報~政治・外交\n | work = エジプト情報\n | publisher = 在エジプト日本国大使館\n | date = 2011-07-30\n | url = http://www.eg.emb-japan.go.jp/j/egypt_info/basic/seiji.htm\n | format =\n | doi =\n | accessdate =2012-06-17 }}</ref>。\n\n=== 政府 ===\n* {{仮リンク|エジプトの首相|en|Prime Minister of Egypt|label=首相}}・{{仮リンク|ムスタファ・マドブーリー|en|Moustafa Madbouly}} 2018年6月就任。\n* {{仮リンク|エジプトの国防大臣の一覧|en|List of Ministers of Defence of Egypt|label=国防大臣}}・{{仮リンク|セドキ・ソブヒィ|en|Sedki Sobhi}} 2014年3月就任、エジプト軍総司令官。\n\n== 司法 ==\n{{Main2|詳細は[[エジプトの法]]}}\n[[ナポレオン法典]]と[[イスラム法]]に基づく、混合した法システム<ref>{{Cite web|title = Egypt| publisher = CIA-The World Factbook| url = https://www.cia.gov/library/publications/the-world-factbook/geos/eg.html| accessdate = 2012-06-15}}</ref>。フランスと同じく、司法訴訟と行政訴訟は別の系統の裁判所が担当する。{{仮リンク|フランスにおける裁判所の二元性|fr|Dualité des ordres de juridiction en France}}参照。\n* {{仮リンク|最高憲法裁判所|en|Supreme Constitutional Court of Egypt}} - 法律が違憲か否かを判断する。1979年設立。長官はアドリー・マンスール(2013年7月1日 - )<ref>{{Cite web| title = Aperçu Historique | publisher = 最高憲法裁判所\n  | url =http://www.hccourt.gov.eg/About/history.asp\n | accessdate = 2013-08-27}}</ref>。ほか、10人の判事は1998年から2013年7月までに着任している<ref>{{Cite web| title = Current Members of the Court | publisher = 最高憲法裁判所\n | date =\n | url =http://www.hccourt.gov.eg/CourtMembers/CurrentCourt.asp\n | accessdate = 2013-08-27}}</ref>。長官は[[最高大統領選挙委員会]](The Supreme Presidential Election Commission, SPEC)の委員長を兼任していた<ref>{{Cite news\n | author = 貫洞欣寛\n| title = エジプト司法が逆襲 ムバラク裁判「判決批判許さん」\n | newspaper = 朝日新聞 | date = 2012-06-09\n | url = http://digital.asahi.com/articles/TKY201206080567.html?ref=comkiji_txt_end\n | accessdate = 2012-06-15}}</ref>が、2012年9月には副長官ハーティム・バガートゥーが務めていた<ref>{{Cite web\n | title = 中東要人講演会\n | newspaper = 中東調査会 | date =\n | url = http://www.meij.or.jp/members/20120903124551000000.pdf\n | accessdate = 2012-09-09}}</ref>。\n* [[司法省]]管轄の一般の[[裁判所]] - [[最高裁判所]]([[破毀院]]、1931年設立)と以下の[[下級裁判所]]([[控訴院]]、[[第一審]]裁判所、[[地区裁判所]]および[[家庭裁判所]] - 2004年設立)からなる。\n* [[国務院]]管轄の[[行政裁判所]] - [[コンセイユ・デタ]] - 1946年設立<ref>{{Cite web| title = Judiciary Authority| publisher = Egypt State Information Service\n| url =http://www.sis.gov.eg/En/Templates/Categories/tmpListArticles.aspx?CatID=248\n | accessdate = 2013-08-29}}</ref>。2011年[[2月19日]]、従来の[[政党委員会]](政府運営)の申請却下に対する不服申し立てを認めた形の判決で、[[政党]]の許認可<ref>{{Cite web| title = エジプトでイスラーム政党が認可 | work =[中東研ニュースリポート]| publisher = [[日本エネルギー経済研究所]] 中東研究センター| date = 2月21日\n | url =http://jime.ieej.or.jp/htm/extra/ronbun/003pol.htm\n | format =\n | doi =\n | accessdate = 2012-05-19}}</ref>を、[[4月16日]]、[[与党]]・[[国民民主党 (エジプト)|国民民主党]](NDP)の解散を裁定した。\n\n== 国際関係 ==\n{{main|{{仮リンク|エジプトの国際関係|en|Foreign relations of Egypt}}}}\n国力、文化的影響力などの面からアラブ世界のリーダーとなっている。ガマール・アブドゥル=ナーセル時代には[[非同盟諸国]]の雄としてアラブに限らない影響力を持ったが、ナーセル死後はその影響力は衰えた。ナーセル時代は親ソ連だった外交はサーダート時代に入って親米路線となり、さらにそれに伴いイスラエルとの外交関係が進展。1978年の[[キャンプ・デービッド合意]]とその翌年のイスラエル国交回復によって親米路線は確立したが、これはイスラエルを仇敵とするアラブ諸国の憤激を買い、ほとんどのアラブ諸国から断交されることとなった。その後、[[1981年]]にサーダートが暗殺されたあとに政権を握ったムバーラクは親米路線を堅持する一方、アラブ諸国との関係回復を進め、1988年には[[シリア]]、[[レバノン]]、[[リビア]]を除くすべてのアラブ諸国との関係が回復した<ref>『アフリカを知る事典』、平凡社、ISBN 4-582-12623-5 1989年2月6日 初版第1刷 p.58</ref>。以降はアラブの大国として域内諸国と協調する一方、アフリカの一国として2004年9月には[[国際連合安全保障理事会]]の[[常任理事国]]入りを目指すことを表明した。[[2011年]]、[[パレスチナ]]の[[ガザ]]の[[国境検問所|検問所]]を開放した。また、[[イラン]]との関係を修復しようとしている<ref>[http://www.asyura2.com/11/lunchbreak47/msg/284.html エジプト:ガザ、出入り自由に 検問所開放、外交転換鮮明に]</ref>。\n\nシーシー政権はムスリム同胞団政権時代のこうした外交政策とは一線を画している。欧米や日本、親米アラブ諸国、イスラエルのほか、中国や[[ロシア]]<ref>[https://www.nikkei.com/article/DGXMZO24487270R11C17A2FF2000/ 「ロシアが中東に接近 プーチン大統領、エジプトに軍事協力 米の中東政策の揺らぎつく」][[日本経済新聞]]ニュースサイト(2017年12月11日)2019年1月9日閲覧。</ref>などと広範な協力関係を築いている。\n\n[[2017年カタール外交危機]]では、サウジアラビアとともに、ムスリム同胞団を支援してきたカタールと[[国交]]を断絶した国のひとつとなった。またサウジアラビアとは、[[アカバ湾]]口に架橋して陸上往来を可能とするプロジェクトが話し合われた([[チラン島]]を参照)。\n\n=== 日本国との関係 ===\n{{Main|日本とエジプトの関係}}\n\n== 軍事 ==\n[[ファイル:Abrams in Tahrir.jpg|thumb|陸軍の主力戦車[[M1エイブラムス]]]]\n{{Main|エジプト軍}}\n中東有数の軍事大国であり、イスラエルと軍事的に対抗できる数少ないアラブ国家であると目されている。2010年11月見積もりの総兵力は46万8,500人。[[予備役]]47万9,000人。兵員数は[[陸軍]]34万人([[軍警察]]を含む)、[[海軍]]1万8,500人([[沿岸警備隊]]を含む)、[[空軍]]3万人、[[防空軍]]8万人<ref>{{Cite book\n | title = The Middle East and North Africa 2012\n | publisher = Routledge\n | edition = 58th\n | date = 2011\n | page = 380\n | isbn = 978-1-85743-626-6}}</ref>。内務省管轄の中央[[治安部隊]]、[[国境警備隊]]と国防省管轄の革命[[国家警備隊]](大統領[[親衛隊]])の[[準軍事組織]]が存在する。\n\nイスラエルとは4度にわたる[[中東戦争]]で毎回干戈を交えたが、[[第二次中東戦争]]で政治的な勝利を得、[[第四次中東戦争]]の緒戦で勝利を収めたほかは劣勢のまま終わっている。その後はイスラエルと接近し、シーシー政権下ではシナイ半島で活動する[[イスラム過激派]]([[ISIS]])に対する掃討作戦で、[[イスラエル空軍]]による[[爆撃]]を容認していることを公式に認めた<ref>[http://www.tokyo-np.co.jp/article/world/list/201901/CK2019010602000123.html 「対IS イスラエルと協力」エジプト大統領 治安重視]『[[東京新聞]]』朝刊2019年1月6日(国際面)2019年1月9日閲覧。</ref>。\n\n軍事的にはアメリカと協力関係にあるため、[[北大西洋条約機構]](NATO)のメンバーではないものの同機構とは親密な関係を保っている。また、ロシアや中国からも武器の供給を受けており、中露の主導する[[上海協力機構]]への参加も申請している<ref>{{Cite web|date=2015-07-11|url=http://jp.sputniknews.com/politics/20150710/556387.html|title=上海協力機構事務総長:機構はカラー革命など恐れていない|publisher=Sputnik 日本|accessdate=2019-08-18}}</ref><ref>{{Cite web|date=2015-07-27|url=http://arab.rbth.com/news/2015/07/27/30859.html|title=وزير الخارجية المصري: مصر لا تستبعد عضويتها في منظمة \"شنغهاي\" للتعاون في المستقبل | روسيا ما وراء العناوين|publisher=ロシアNOWアラビア語版|accessdate=2019-08-18}}</ref><ref>{{Cite web|date=2016-06-23|url=http://www.interfax.com/newsinf.asp?id=683491|title=Syria, Israel, Egypt willing to join SCO's activity - president's special envoy|publisher=[[インテルファクス通信]]|accessdate=2019-08-18}}</ref>。\n\n== 地方行政区画 ==\n[[ファイル:Governorates of Egypt.svg|thumb|right|280px|エジプトの行政区画]]\n{{Main|エジプトの県}}\nエジプトの最上級の地方行政単位は、29あるムハーファザ({{lang|ar|محافظة}}, '''県'''、'''州''' と訳されることもある)である。[[知事]]は中央政府から派遣される官選知事で、内務省の管轄下において中央集権体制をとる。極端な行政区分でナイル川流域やナイル下流は非常に細分化されているにもかかわらず、南部は非常に大まかに分けられている。これは、ナイル流域以外が全域砂漠であり、居住者がほとんどいないことによるものである。\n\n=== 主要都市 ===\n{{Main|エジプトの都市の一覧}}\n{{Main|エジプトの県}}\n{{Col-begin}}\n{{Col-break}}\n* [[アシュート]]\n* [[アスワン]]\n* [[マラウィー]]\n* [[アブ・シンベル]]\n* [[アレクサンドリア]]\n* [[イスマイリア]]\n* [[インバーバ]]\n* [[エスナ]]\n* [[エドフ]]\n* [[エル・アラメイン]]\n* [[カイロ]]\n{{Col-break}}\n* [[ケナ]]\n* [[ギーザ]]\n* [[コム・オンボ]]\n* [[ザガジグ]]\n* [[サッカラ]]\n* [[シャルム・エル・シェイク]]\n* [[スエズ]]\n* [[スブラエルケーマ]]\n* [[ソハーグ県|ソハーグ]]\n* [[ダマンフール]]\n* [[タンター]]\n{{Col-break}}\n* [[ディムヤート]]\n* [[ハルガダ]]\n* [[ファイユーム]]\n* [[ベニスエフ]]\n* [[ポートサイド]]\n* [[エル=マハッラ・エル=コブラ|マハッラ・クブラー]]\n* [[マンスーラ]]\n* [[ミニヤー県|ミニヤ]]\n* [[メンフィス (エジプト)]]\n* [[ルクソール]]\n* [[ロゼッタ (エジプト)|ロゼッタ]]\n{{Col-end}}\n<!-- 五十音順 -->\n\n== 地理 ==\n{{Main2|詳細は{{仮リンク|エジプトの地理|en|Geography of Egypt}}}}\n[[ファイル:Egypt Topography.png|thumb|200px|エジプトの地形図]]\n[[ファイル:Egypt 2010 population density1.png|thumb|200px|エジプトの人口分布図]]\n[[アフリカ大陸]]北東隅に位置し、国土面積は100万2,450㎢で、世界で30番目の大きさである。国土の95%は砂漠で、ナイル川の西側には[[サハラ砂漠]]の一部である西部砂漠([[リビア砂漠]])、東側には[[紅海]]と[[スエズ湾]]に接する[[東部砂漠]]({{lang|ar|الصحراء الشرقية}} - シャルキーヤ砂漠)がある。西部砂漠には海抜0m以下という地域が多く、面積1万8,000km<sup>2</sup>の広さをもつ[[カッターラ低地]]は海面より133mも低く、[[ジブチ]]の[[アッサル湖]]に次いでアフリカ大陸で2番目に低い地点である。[[シナイ半島]]の北部は砂漠、南部は山地になっており、エジプト最高峰の[[カテリーナ山]](2,637m)や、[[旧約聖書]]で[[モーセ]]が[[モーセの十戒|十戒]]を授かったといわれる[[シナイ山]](2,285m)がある。シナイ半島とナイル河谷との間は[[スエズ湾]]が大きく湾入して細くくびれており、ここが[[アフリカ大陸]]と[[ユーラシア大陸]]の境目とされている。この細い部分は低地であるため、[[スエズ運河]]が建設され、紅海と地中海、ひいてはヨーロッパとアジアを結ぶ大動脈となっている。\n[[ファイル:S F-E-CAMERON 2006-10-EGYPT-LUXOR-0439.JPG|thumb|left|200px|[[ナイル川]]]]\n[[ナイル川]]は南隣の[[スーダン]]で[[白ナイル川]]と[[青ナイル川]]が合流し、エジプト国内を南北1,545Kmにもわたって北上し、河口で広大な[[三角州|デルタ]]を形成して[[地中海]]にそそぐ。[[アスワン]]以北は人口稠密な河谷が続くが、幅は5Kmほどとさほど広くない。上エジプト中部のキーナでの湾曲以降はやや幅が広がり<ref>『朝倉世界地理講座 アフリカI』初版所収「ナイル川の自然形態」春山成子、2007年4月10日(朝倉書店)p198</ref>、[[アシュート]]近辺で分岐の支流が[[ファイユーム]]近郊の[[モエリス湖|カールーン湖]]({{lang|ar|Birket Qarun}}、かつての[[モエリス湖]])へと流れ込む。この支流によって、カールーン湖近辺は肥沃な{{仮リンク|ファイユーム・オアシス|en|Faiyum Oasis}}を形成している。一方、本流は、[[カイロ]]近辺で典型的な扇状三角州となる'''[[ナイル・デルタ]]'''は、地中海に向かって約250Kmも広がっている。かつてはナイル川によって運ばれる土で、デルタ地域は国内でもっとも肥沃な土地だったが、[[アスワン・ハイ・ダム]]によってナイル川の水量が減少したため、地中海から逆に塩水が入りこむようになった。ナイル河谷は、古くから[[下エジプト]]と[[上エジプト]]という、カイロを境にした2つの地域に分けられている。前者はデルタ地域を指し、後者はカイロから上流の谷を指している。ナイル河谷は、世界でももっとも[[人口密度]]の高い地域のひとつである。\n\nナイル河谷以外にはほとんど人は住まず、わずかな人が[[オアシス]]に集住しているのみである。乾燥が激しく地形がなだらかなため、特にリビア砂漠側には[[ワジ]](涸れ川)が全くない。[[シワ・オアシス|シーワ]]、[[ファラフラ (エジプト)|ファラーフラ]]、[[ハルガ]]、バハレイヤ、ダフラといった[[オアシス]]が点在している<ref>『ミリオーネ全世界事典』第10巻 アフリカI([[学習研究社]]、1980年11月)p206</ref>。ナイル以東のシャルキーヤ砂漠は地形がやや急峻であり、ワジがいくつか存在する。紅海沿岸も降雨はほとんどないが、ナイルと[[アラビア半島]]を結ぶ重要な交通路に位置しているため、いくつかの小さな港が存在する。\n\n=== 国境 ===\n1885年に列強が[[ドイツ]]の[[ベルリン]]で開いた会議で、それまでに植民地化していたアフリカの分割を確定した。リビア国境の大部分で[[東経25度線|東経25度]]に、スーダンでは[[北緯22度線|北緯22度]]に定めたため、国境が直線的である。\n\nスーダンとの間では、エジプトが[[実効支配]]する[[ハラーイブ・トライアングル]]に対してスーダンも領有権を主張している。一方、その西にある[[ビル・タウィール]]は両国とも領有権を主張していない[[無主地]]である。\n\n=== 気候 ===\n{{Main2|詳細は{{仮リンク|エジプトの気候|en|Climate of Egypt}}}}\n国土の全域が[[砂漠気候]]で人口はナイル河谷および[[デルタ地帯]]、[[スエズ運河]]付近に集中し、国土の大半は[[サハラ砂漠]]に属する。夏には日中の気温は40℃を超え、50℃になることもある。降雨はわずかに[[地中海|地中海岸]]にあるにすぎない。冬の平均気温は下エジプトで13 - 14℃、上エジプトで16℃程度である。2013年12月にはカイロ市内でも降雪・積雪があったが、観測史上初ということで注目された。\n\n== 経済 ==\n{{Main2|詳細は{{仮リンク|エジプトの経済|en|Economy of Egypt}}}}\n[[ファイル:View from Cairo Tower 31march2007.jpg|thumb|left|220px|カイロはビジネス、文化、政治などを総合評価した[[世界都市#世界と指数|世界都市格付け]]でアフリカ第1位の都市と評価された<ref>[http://www.atkearney.com/documents/10192/4461492/Global+Cities+Present+and+Future-GCI+2014.pdf/3628fd7d-70be-41bf-99d6-4c8eaf984cd5 2014 Global Cities Index and Emerging Cities Outlook] (2014年4月公表)</ref>]]\n\n2018年のエジプトの[[GDP]]は約2,496億ドル(約27兆円)、一人当たりでは2,573ドルである<ref name=\"economy\" />。アフリカでは屈指の経済規模であり、[[BRICs]]の次に経済発展が期待できるとされている[[NEXT11]]の一国にも数えられている。しかし、一人当たりのGDPでみると、中東や北アフリカ諸国の中では、最低水準であり、[[トルコ]]の約4分の1、[[イラン]]の半分に過ぎず、更に同じ北アフリカ諸国である[[チュニジア]]や[[モロッコ]]に比べても、水準は低い<ref name=\"エジプト経済の現状と今後の展望\" >{{Cite report|author=堀江 正人|date=2019-01-08|title=エジプト経済の現状と今後の展望 ~経済の復調が注目される中東北アフリカの大国エジプト~|url=https://www.murc.jp/report/economy/analysis/research/report_190108/|publisher=[[三菱UFJリサーチ&コンサルティング|三菱UFJリサーチ&コンサルティング株式会社]]|accessdate=2020-02-03}}</ref>。\n\n[[スエズ運河]]収入と[[観光産業]]収入、更には在外労働者からの送金の3大外貨収入の依存が大きく、エジプト政府は、それらの手段に安易に頼っている<ref name=\"エジプト経済の現状と今後の展望\" />。更に政情に左右されやすい。\n\nかつては[[綿花]]の世界的生産地であり、ナイル川のもたらす肥沃な土壌とあいまって農業が重要な役割を果たしていた。しかし、通年灌漑の導入によってナイルの洪水に頼ることが減り、アスワン・ハイ・ダムの建設によって、上流からの土壌がせき止められるようになった。そのため、ダムによる水位コントロールによって農地が大幅に拡大した。農業生産高が格段に上がったにもかかわらず、[[肥料]]の集中投入などが必要になったため、コストが増大し、近年代表的な農業製品である綿製品は価格競争において後塵を拝している。\n\n[[1970年代]]に農業の機械化および各種生産業における機械への転換により、地方での労働力の過剰供給が見受けられ、労働力は都市部に流出し、治安・衛生の悪化及び社会政策費の増大を招いた。80年代には、[[石油]]産業従事者の増大に伴い、農業において労働力不足が顕著となる。このため綿花および綿製品の価格上昇を招き、国際競争力を失った。1990年代から、[[国際通貨基金|IMF]]の支援を受け経済成長率5%を達成するが、社会福祉政策の低所得者向け補助の増大および失業率10%前後と支出の増大に加え、資源に乏しく食料も輸入に頼るため、2004年には物価上昇率10%に達するなどの構造的問題を抱えている。現状、中小企業育成による国際競争力の強化、雇用創生に取り組んでいるが、結果が出ていない。[[2004年]]のナズィーフ内閣が成立後は、国営企業の民営化および税制改革に取り組んでいる。[[2008年]]、世界的な食料高騰によるデモが発生した。\n\nまた、「[[アラブの春]]」により、2012年~2014年の間は2~3%台と一時低迷していたが、その後政情の安定化により、2015年には、4%台に回復している。また[[IMF]]の勧告を受け、2016年に[[為替相場]]の大幅切り下げや[[補助金]]削減などの改革をしたことで、経済健全化への期待感より、外国からの資本流入が拡大していき、経済の復調を遂げている<ref name=\"エジプト経済の現状と今後の展望\" />。\n\n農業は農薬などを大量に使っているため世界一コストの高い農業となっているがそれなりの自給率を保っているし果物は日本にもジャムなどに加工され輸出されている。工業は石油などの資源はないが様々な工業が発展しており今後も成長が見込まれる。近年IT IC産業が急速に成長している。\nしかしながらGDPの約半分が軍関連企業が占めていて主に農業 建築業などの工業を担っている。\n金融はイスラーム銀行も近代式銀行の両方とも発達しており投資家層も厚くトランプ政権にはエジプトの敏腕女性投資家が起用されている。\n\n== 交通 ==\n{{Main|エジプトの交通}}\nエジプトの交通の柱は歴史上常に[[ナイル川]]であった。[[アスワン・ハイ・ダム]]の建設後、ナイル川の流れは穏やかになり、交通路として安定性が増した。しかし貨物輸送はトラック輸送が主となり、内陸水運の貨物国内シェアは2%にすぎない。[[ファルーカ]]という伝統的な[[帆船]]や、観光客用のリバークルーズなどの運航もある。\n\n[[鉄道]]は、国有の[[エジプト鉄道]]が運営している。営業キロは5,063キロにのぼり、カイロを起点として[[ナイル川デルタ]]や[[ナイル河谷]]の主要都市を結んでいる。\n\n航空は、[[フラッグ・キャリア]]である[[エジプト航空]]を筆頭にいくつもの航空会社が運行している。[[カイロ国際空港]]はこの地域の[[ハブ空港]]の一つである。\n\n== 国民 ==\n{{Main2|詳細は{{仮リンク|エジプトの人口統計|en|Demographics of Egypt}}}}\n[[ファイル:Cairo mosques.jpg|thumb|left|220px|[[カイロ]]の[[モスク]]]]\n=== 人口構成 ===\n[[ファイル:Egypt population pyramid 2005.svg|thumb|[[2005年]]の人口ピラミッド。30歳以下の若年層が非常に多く、若者の失業が深刻な問題となっている]]\n[[ファイル:Egypt demography.png|thumb|400px|[[国際連合食糧農業機関]]の2005年データによるエジプト人口の推移。1960年の3,000万人弱から人口が急増しているのが読み取れる]]\nエジプトの人口は8,254万人(2013年1月現在)で、近年急速に増大し続けている。年齢構成は0から14歳が33%、15から64歳が62.7%、65歳以上が4.3%(2010年)で、若年層が非常に多く、ピラミッド型の人口構成をしている。しかし、若年層はさらに増加傾向にあるにもかかわらず、経済はそれほど拡大していないため、若者の[[失業]]が深刻な問題となっており、[[2011年エジプト騒乱]]の原因のひとつともなった。年齢の中央値は24歳である。人口増加率は2.033%。\n\n=== 民族 ===\n{{See also|エジプト民族}}\n住民は[[ムスリム|イスラム教徒]]と[[キリスト教徒]]([[コプト教会]]、[[東方正教会]]など)からなる[[アラブ人]]がほとんどを占め、そのほかに[[ベドウィン]](遊牧民)や[[ベルベル人]]、{{仮リンク|ヌビア人|en|Nubian people}}、[[アルメニア人]]、[[トルコ人]]、[[ギリシア人]]などがいる。遺伝的に見れば、エジプト住民のほとんどが古代エジプト人の直系であり、[[エジプト民族]]との呼称でも呼ばれる所以である。また、エジプト人の大半は、イスラム勢力のエジプト征服とそれに続くイスラム系国家の統治の間に言語学的にアラブ化し、本来のエジプト語を捨てた人々であるとする見解がある。それだけではなく、長いイスラーム統治時代の人的交流と都市としての重要性から、多くのアラブ人が流入・定住していったのも事実である。1258年にアッバース朝が崩壊した際、[[カリフ]]周辺を含む多くの人々がエジプト(おもにカイロ近郊)へ移住したという史実は、中東地域一帯における交流が盛んであったことを示す一例である。現代においてカイロは[[世界都市]]となっており、また歴史的にも[[アル=アズハル大学]]は、イスラム教[[スンナ派]]で最高権威を有する教育機関として、中東・イスラム圏各地から人々が参集する。\n\nなお[[古代エジプト]]文明の印象があまりに大きいためか、特に現代エジプトに対する知識を多く持たない人は、現代のエジプト人を古代エジプト人そのままにイメージしていることが多い。すなわち、[[ギザの大スフィンクス]]や[[ギザの大ピラミッド]]を建て、太陽神やさまざまな神を信仰([[エジプト神話]])していた古代エジプト人を、現代のエジプト人にもそのまま当てはめていることが多い。しかし、上述のとおり現代エジプト人の9割はイスラム教徒であり、アラビア語を母語とするアラブ人である。それもアラブ世界の中で比較的主導的な立場に立つ、代表的なアラブ人のひとつである。\n\n=== 言語 ===\n{{Main2|詳細は{{仮リンク|エジプトの言語|en|Languages of Egypt}}}}\n現在のエジプトでは[[アラビア語]]が[[公用語]]である。これは、イスラムの征服当時にもたらされたもので、エジプトのイスラム化と同時に普及していった。ただし、公用語となっているのは[[正則アラビア語]](フスハー)だが、実際に用いられているのは[[アラビア語エジプト方言]]である{{要出典|date=2012年8月}}<!-- 実際に「通用」の意味か? 行政等の用語は? -->。\n\n古代エジプトの公用語であった[[エジプト語]](4世紀以降の近代エジプト語は[[コプト語]]の名で知られる)は、現在では少数のキリスト教徒が典礼言語として使用するほかはエジプトの歴史に興味を持つ知識層が学んでいるだけであり、これを話せる国民はきわめて少ない。日常言語としてコプト語を使用する母語話者は数十名程度である<ref>[http://www.dailystaregypt.com/article.aspx?ArticleID=106 The Dairy Star of Egypt 2007年1月23日]</ref>。他には地域的に[[ヌビア諸語]]、[[教育]]・[[ビジネス]]に[[英語]]、[[文化_(代表的なトピック)|文化]]においては[[フランス語]]なども使われている。\n\n=== 宗教 ===\n{{Main2|詳細は{{仮リンク|エジプトの宗教|en|Religion in Egypt}}}}\n{{bar box\n|title=宗教構成(エジプト)\n|titlebar=#ddd\n|width= 300px\n|float=right\n|bars=\n{{bar percent|イスラム教(スンナ派)|green|90}}\n{{bar percent|キリスト教その他|blue|10}}\n}}\n宗教は[[イスラム教]]が90%(ほとんどが[[スンナ派]])であり、[[憲法]]では[[国教]]に指定されている(既述の通り、現在では宗教政党の活動ならびにイスラム主義活動は禁止されている)<ref name=2010cia/>。その他の宗派では、エジプト土着の[[キリスト教会]]である[[コプト教会]]の信徒が9%、その他のキリスト教徒が1%となる<ref name=2010cia/>。\n\n=== 婚姻 ===\n多くの場合、婚姻時に女性は改姓しない([[夫婦別姓]])が、改姓する女性もいる<ref>[https://culturalatlas.sbs.com.au/egyptian-culture/naming-9bdb9e00-ffa6-4f6f-9b29-1616ec7bb952#naming-9bdb9e00-ffa6-4f6f-9b29-1616ec7bb952 Egyptian Culture], Cultural Atlas.</ref>。\n\n=== 教育 ===\n{{Main2|詳細は{{仮リンク|エジプトの教育|en|Education in Egypt}}}}\n[[ファイル:Bibalex-egypt.JPG|thumb|180px|[[新アレクサンドリア図書館]]]]\nエジプトの教育制度は、1999年から[[小学校]]の課程が1年延び、日本と同じく小学校6年・[[中学校]]3年・[[高等学校|高校]]3年・[[大学]]4年の6・3・3・4制となっている<ref>[http://www.mofa.go.jp/mofaj/toko/world_school/07africa/infoC70400.html 諸外国の学校情報(国の詳細情報) 日本国外務省]</ref>。[[義務教育]]は小学校と中学校の9年である。[[1923年]]のエジプト独立時に初等教育はすでに無料とされ、以後段階的に無料教育化が進み、[[1950年]]には著名な作家でもあった文部大臣[[ターハー・フセイン]]によって中等教育が無料化され、1952年のエジプト革命によって高等教育も含めたすべての公的機関による教育が無料化された。しかし、公立学校の[[教員]]が給料の少なさなどから個人の[[家庭教師]]を兼任することが広く行われており、社会問題化している<ref>[http://www.fukuoka-pu.ac.jp/kiyou/kiyo15_1/1501_tanaka.pdf 『福岡県立大学人間社会学部紀要』 田中哲也]</ref>。高額な授業料を取る代わりに教育カリキュラムの充実した私立学校も多数存在する。エジプト国内には、20万以上の小中学校、1,000万人以上の学生、13の主要大学、67の[[師範学校]]がある。\n\n[[2018年]]より「エジプト日本学校(EJS=Egypt-Japan School)」が35校、開校した<ref>[https://www.jica.go.jp/publication/mundi/1904/201904_03_01.html 「日本式教育」で、子どもたちが変わる! エジプト]</ref>\n<ref>[https://www.jica.go.jp/press/2018/20181004_01.html 「エジプト・日本学校」35校が開校:日本式教育をエジプトへ本格導入]</ref>。これは2017年に[[JICA]]が技術協力「学びの質向上のための環境整備プロジェクト」を開始ししたことに始まるもので、[[日本の学校教育]]で行われている[[学級会]]や生徒による清掃などをエジプトの教育に取り入れようとする教育方針である<ref>[https://www.nippon.com/ja/japan-topics/g00727/ エジプトの小学校に「日本式教育」、協調性など成果も]</ref>。試験的に導入した際には文化的な違いから反発も見受けられたが、校内での暴力が減った、子供が家でも掃除をするようになったなど、徐々に成果が見えるようになり本格的に導入されることになった<ref>[https://www.huffingtonpost.jp/entry/egypt-japan-school_jp_5cdba4c0e4b0c39d2a13534f 「日本式教育」はエジプトの教育現場をどう変えたか。「掃除は社会階層が低い人が行うもの」という反発を乗り越えて]</ref><ref>[https://egyptcesbtokyo.wordpress.com/2018/10/10/「エジプト・日本学校」について/ 「エジプト・日本学校」(EJS)について]</ref>。\n\n2005年の推計によれば、15歳以上の国民の[[識字率]]は71.4%(男性:83%、女性:59.4%)である<ref name=2010cia>[https://www.cia.gov/library/publications/the-world-factbook/geos/za.html CIA World Factbook \"Egypt\"]2010年1月31日閲覧。</ref>。2006年にはGDPの4.2%が教育に支出された<ref name=2010cia/>。\n\nおもな高等教育機関としては、[[アル=アズハル大学]](988年 p? )、[[吉村作治]]、[[小池百合子]]らが出身の[[カイロ大学]](1908年~)などが存在する。\n\n国立図書館として[[新アレクサンドリア図書館]]が存在する。\n\n== 文化 ==\n[[ファイル:Necip Mahfuz.jpg|thumb|[[ナギーブ・マフフーズ]]は[[1988年]]に[[ノーベル文学賞]]を受賞した]]\n{{Main2|詳細は{{仮リンク|エジプトの文化|en|Culture of Egypt}}}}\n\n* [[古代エジプト]]の建造物で有名。\n* [[ボードゲーム]]や[[カードゲーム]]の発祥の地としても知られている。\n* 座った時に足を組むと、相手に敵意があると受けとられる。\n\n=== 食文化 ===\n{{Main|エジプト料理}}\n\n=== 文学 ===\n{{Main|古代エジプト文学|アラビア語文学|エジプト文学}}\n古代エジプトにおいては[[パピルス]]に[[ヒエログリフ]]で創作がなされ、[[古代エジプト文学]]には『[[死者の書 (古代エジプト)|死者の書]]』や『[[シヌヘの物語]]』などの作品が現代にも残っている。7世紀にアラブ化したあともエジプトは[[アラビア語文学]]のひとつの中心地となった。近代の文学者として[[ターハー・フセイン]]の名が挙げられ、現代の作家である[[ナギーブ・マフフーズ]]は1988年に[[ノーベル文学賞]]を受賞している。\n{{clear}}\n\n=== スポーツ ===\n* [[サッカーエジプト代表]]の[[モハメド・サラー]]は[[プレミアリーグ]]で得点王、[[PFA年間最優秀選手賞]]を獲得、[[UEFAチャンピオンズリーグ 2018-19|2018-19シーズン]]に[[UEFAチャンピオンズリーグ]]優勝を果たした。\n* [[スカッシュ (スポーツ)|スカッシュ]]では[[21世紀]]に入ってからワールドオープン([[:en:World Squash Championships]])で男女ともに多くの優勝者を輩出している。\n\n=== 世界遺産 ===\n{{Main|エジプトの世界遺産}}\nエジプト国内には、[[国際連合教育科学文化機関|ユネスコ]]の[[世界遺産]]リストに登録された文化遺産が6件、自然遺産が1件登録されている。\n\n<gallery widths=\"180\" heights=\"120\">\nファイル:Egypt.Giza.Sphinx.01.jpg|[[メンフィスとその墓地遺跡|メンフィスとその墓地遺跡-ギーザからダハシュールまでのピラミッド地帯]](1979年、文化遺産)\nファイル:S F-E-CAMERON 2006-10-EGYPT-KARNAK-0002.JPG|古代都市[[テーベ]]とその墓地遺跡(1979年、文化遺産)\nファイル:Abou simbel face.jpg|[[アブ・シンベル]]から[[フィラエ]]までの[[ヌビア遺跡]]群(1979年、文化遺産)\nファイル:Al Azhar, Egypt.jpg|[[カイロ|カイロ歴史地区]](1979年、文化遺産)\nファイル:Katharinenkloster Sinai BW 2.jpg|* [[聖カタリナ修道院|聖カトリーナ修道院地域]](2002年、文化遺産)\nファイル:Whale skeleton 2.jpg|[[ワディ・アル・ヒタン]](2005年、自然遺産)\n</gallery>\n\n== 参考文献 ==\n*鈴木恵美編著『現代エジプトを知るための60章』、[[明石書店]]、2012年 ISBN 4750336483\n{{節スタブ}}\n\n== 脚注 ==\n{{脚注ヘルプ}}\n{{Reflist|2}}\n\n== 関連項目 ==\n* [[エジプト民族]]\n* [[エジプト美術]]\n* [[エジプト神話]]\n* [[エジプト軍]]\n* [[エジプト海軍艦艇一覧]]\n* [[エジプト革命 (2011年)]]\n* [[エジプトの法]]\n* [[エジプト関係記事の一覧]]\n\n== 外部リンク ==\n{{Wiktionary}}\n{{Commons&cat|Egypt|Egypt}}\n{{Wikivoyage|Egypt|エジプト{{en icon}}}}\n{{osm box|r|1473947}}\n{{ウィキポータルリンク|アフリカ|[[画像:Africa_satellite_orthographic.jpg|36px|ウィキポータルリンク アフリカ]]}}\n; 政府\n:* [http://www.egypt.gov.eg/arabic/home.aspx エジプト政府サービス・ポータル] {{ar icon}}\n:* [http://www.egypt.gov.eg/english/home.aspx エジプト政府サービス・ポータル] {{en icon}}\n:* [http://www.egypt.or.jp/.html 在日エジプト大使館 エジプト学・観光局] - 「観光情報」と「基本情報」{{ja icon}}\n:\n; 日本政府\n:* [https://www.mofa.go.jp/mofaj/area/egypt/ 日本外務省 HP>各国・地域情勢>アフリカ>エジプト・アラブ共和国] {{ja icon}}\n:* [https://www.eg.emb-japan.go.jp/itprtop_ja/.html 在エジプト日本国大使館] {{ja icon}}\n:** [https://www.eg.emb-japan.go.jp/itpr_ja/00_000035.html 在エジプト日本国大使館>エジプト情報]\n:\n; その他\n:* [https://www.jica.go.jp/.html 独立行政法人 JICA 国際協力機構]\n:** [https://www.jica.go.jp/egypt/ HP>各国における取り組み>中東>エジプト生活情報]\n:** [https://libportal.jica.go.jp/fmi/xsl/library/public/ShortTermStayInformation/MiddleEast/Egypt-Short.pdf HP>世界の現状を知る>世界の様子(国別生活情報)>中東>エジプト短期滞在者用国別情報(2011)]\n:* [https://www.jetro.go.jp/world/africa/eg/ 独立行政法人 JETRO 日本貿易振興機構 HP>海外ビジネス情報>国・地域別情報>アフリカ>エジプト]\n:* [https://www.jccme.or.jp/08/08-07-08.html 財団法人 JCCME 中東協力センター HP>中東各国情報>エジプト]\n:* [https://wikitravel.org/ja/%E3%82%A8%E3%82%B8%E3%83%97%E3%83%88 ウィキトラベル旅行ガイド - エジプト] {{ja icon}}\n:* {{Wikiatlas|Egypt}} {{en icon}}\n:* {{CIA World Factbook link|eg|Egypt}} {{en icon}}\n:* {{dmoz|Regional/Africa/Egypt}} {{en icon}}\n\n{{アフリカ}}\n{{アジア}}\n{{OIC}}\n{{OIF}}\n{{NATOに加盟していない米国の同盟国}}\n{{Authority control}}\n{{Coord|30|2|N|31|13|E|type:city|display=title}}\n\n{{デフォルトソート:えしふと}}\n[[Category:エジプト|*]]\n[[Category:共和国]]\n[[Category:軍事政権]]\n[[Category:フランコフォニー加盟国]]"}
20. JSON データの読み込み

Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import json

filename = 'jawiki-country.json'
with open(filename, mode='r') as f:
    for line in f:
        line = json.loads(line)
        if line['title'] == 'イギリス':
            text_uk = line['text']
            break


#### 確認
print(text_uk)
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
{{redirect|UK}}
{{redirect|英国|春秋時代の諸侯国| (春秋)}}
{{Otheruses|ヨーロッパの国|長崎県熊本県の郷土料理|いぎりす}}
{{基礎情報 |略名  =イギリス
|日本語国名 = グレートブリテン及び北アイルランド連合王国
|公式国名 = {{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br />
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}[[スコットランドゲール語]]
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}[[ウェールズ語]]
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}[[アイルランド語]]
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}[[コーンウォール語]]
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}[[スコットランド語]]
**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}アルスタースコットランド語</ref>
|国旗画像 = Flag of the United Kingdom.svg
|国章画像 = [[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]
|国章リンク =[[イギリスの国章|国章]]
|標語 = {{lang|fr|[[Dieu et mon droit]]}}<br />[[フランス語]]:[[Dieu et mon droit|神と我が権利]]
|国歌 = [[女王陛下万歳|{{lang|en|God Save the Queen}}]]{{en icon}}<br />''神よ女王を護り賜え''<br />{{center|[[ファイル:United States Navy Band - God Save the Queen.ogg]]}}
|地図画像 = Europe-UK.svg
|位置画像 = United Kingdom (+overseas territories) in the World (+Antarctica claims).svg
|公用語 = [[英語]]
|首都 = [[ロンドン]]事実上
|最大都市 = ロンドン
|元首等肩書 = [[イギリスの君主|女王]]
|元首等氏名 = [[エリザベス2世]]
|首相等肩書 = [[イギリスの首相|首相]]
|首相等氏名 = [[ボリスジョンソン]]
|他元首等肩書1 = [[貴族院 (イギリス)|貴族院議長]]
|他元首等氏名1 = [[:en:Norman Fowler, Baron Fowler|ノーマンファウラー]]
|他元首等肩書2 = [[庶民院 (イギリス)|庶民院議長]]
|他元首等氏名2 = {{仮リンク|リンゼイホイル|en|Lindsay Hoyle}}
|他元首等肩書3 = [[連合王国最高裁判所|最高裁判所長官]]
|他元首等氏名3 = [[:en:Brenda Hale, Baroness Hale of Richmond|ブレンダヘイル]]
|面積順位 = 76
|面積大きさ = 1 E11
|面積値 = 244,820
|水面積率 = 1.3%
|人口統計年 = 2018
|人口順位 = 22
|人口大きさ = 1 E7
|人口値 = 6643万5600<ref>{{Cite web|url=https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates|title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}</ref>
|人口密度値 = 271
|GDP統計年元 = 2012
|GDP値元 = 1兆5478億<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a=IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>
|GDP統計年MER = 2012
|GDP順位MER = 6
|GDP値MER = 2兆4337億<ref name="imf-statistics-gdp" />
|GDP統計年 = 2012
|GDP順位 = 6
|GDP値 = 2兆3162億<ref name="imf-statistics-gdp" />
|GDP/ = 36,727<ref name="imf-statistics-gdp" />
|建国形態 = 建国
|確立形態1 = [[イングランド王国]][[スコットランド王国]]<br />両国とも[[合同法 (1707年)|1707年合同法]]まで
|確立年月日1 = 927843|確立形態2 = [[グレートブリテン王国]]成立<br />1707年合同法
|確立年月日2 = 1707年{{0}}5月{{0}}1|確立形態3 = [[グレートブリテン及びアイルランド連合王国]]成立<br />[[合同法 (1800年)|1800年合同法]]
|確立年月日3 = 1801年{{0}}1月{{0}}1|確立形態4 = 現在の国号「'''グレートブリテン及び北アイルランド連合王国'''」に変更
|確立年月日4 = 1927年{{0}}4月12日
|通貨 = [[スターリングポンド|UKポンド]] (£)
|通貨コード = GBP
|時間帯 = ±0
|夏時間 = +1
|ISO 3166-1 = GB / GBR
|ccTLD = [[.uk]] / [[.gb]]<ref>使用は.ukに比べ圧倒的少数</ref>
|国際電話番号 = 44
|注記 = <references/>
}}

'''グレートブリテン及び北アイルランド連合王国'''(グレートブリテンおよびきたアイルランドれんごうおうこく{{lang-en-short|United Kingdom of Great Britain and Northern Ireland}}: '''UK''')[[ヨーロッパ大陸]]の北西岸に位置し[[グレートブリテン島]][[アイルランド島]]北東部その他多くの島々から成る[[立憲君主制]][[国家]]首都は[[ロンドン]][[日本語]]における[[通称]]の一例として'''イギリス'''、'''英国'''(えいこくがある(→[[#国名]])。

'''[[イングランド]]'''、'''[[ウェールズ]]'''、'''[[スコットランド]]'''、'''[[北アイルランド]]'''という歴史的経緯に基づく4つの[[イギリスのカントリー|カントリーと呼ばれる]]が[[同君連合]]型の単一の[[主権国家体制|主権国家]]を形成する<ref name="page823">{{cite web |url=http://webarchive.nationalarchives.gov.uk/+/http://www.number10.gov.uk/Page823 |title=Countries within a country |publisher=Prime Minister's Office |accessdate=10 January 2003}}</ref>独特の統治体制を採るが、一般的に[[連邦]]国家とは区別される。

[[国際連合安全保障理事会常任理事国]]の一国五大国であり[[G7]][[G20]]に参加するGDPは世界10位以内に位置する巨大な市場を持ちヨーロッパにおける四つの大国[[ビッグ4 (ヨーロッパ)|ビッグ4]]の一国である[[ウィーン体制]]が成立した[[1815年]]以来世界で最も影響力のある国家[[列強]]の一つに数えられるまた[[民主主義]][[立憲君主制]]など近代国家の基本的な諸制度が発祥した国でもある

イギリスの[[擬人化]]としては[[ジョンブル]][[ブリタニア (女神)|ブリタニア]]が知られる

==国名==
正式名称は英語で{{Lang|en|'''United Kingdom of Great Britain and Northern Ireland'''}}ユナイテッドキングダムオヴグレイトブリテンアンドノーザンアイルランド)」であり日本語では、「'''グレートブリテン及び北部アイルランド連合王国'''」とする場合法文など「'''グレートブリテン及び北アイルランド連合王国'''」とする場合条約文などがある

英語での略称は{{Lang|en|'''United Kingdom'''}}」、「{{Lang|en|'''UK'''}}」。[[日本語]]における一般的な通称は「'''イギリス'''」もしくは「'''英国'''」であるが稀に{{Lang|en|United Kingdom}}の[[直訳と意訳|直訳]]である「'''[[連合王国]]'''(れんごうおうこく)」が用いられることもある現在の公用文では英国が使用されており、「イギリスは口語で用いられることが多い<ref>[[日本放送協会|NHK]]で採用している他原則として英国を用いるメディアでも[[イギリス英語]]のような形では使用する</ref>。「連合王国は2003年まで法文において用いられていた<ref>[http://warp.da.ndl.go.jp/info:ndljp/pid/1368617/www.meti.go.jp/policy/anpo/moto/topics/country/country.pdf 輸出貿易管理令等における国名表記の変更について]([[経済産業省]]) 国立国会図書館のアーカイブより''2019-2-5閲覧''</ref>。

イギリス[[ポルトガル語]]で[[イングランド]]を指す{{Lang|pt|Inglez}}イングレス)」が語源で戦国時代にポルトガル人が来航した事に起源を持つ原義にかかわらず連合王国全体を指して使われており連合王国の構成体たるイングランドとは区別される[[江戸時代]]には[[オランダ語]]の{{Lang|nl|Engelsch}}エングルシュ)」を語源とする「'''エゲレス'''」という呼称も広く使用された<ref>[https://kotobank.jp/word/%E3%82%A8%E3%82%B2%E3%83%AC%E3%82%B9-444373 コトバンク「エゲレス」]</ref>。[[幕末]]から[[明治]]・[[大正]]期には「'''英吉利'''(えいぎりす)」や「大不列顛(だいふれつてん、大ブリテン)」と[[国名の漢字表記一覧|漢字で表記]]されることもあったが、前者が「英国」という略称の語源である。ただし「英国」は、狭義に連合王国全体でなくイングランド('''英格蘭''')のみを指す場合もある<ref>また、[[アメリカ合衆国]]に渡ることを「渡米」と言うように、イギリス、特にイングランドへ渡ることを「渡英」と言う([[二字熟語による往来表現の一覧]]を参照)。</ref>。

[[合同法 (1707年)|1707年合同法]]においては[[イングランド王国]]および[[スコットランド王国]]を一王国に統合すると宣言する同法において新国家名称は[[グレートブリテン王国]]またはグレートブリテン連合王国および連合王国とすると述べている<ref>{{cite web |url=http://www.scotshistoryonline.co.uk/union.html |title=Treaty of Union, 1706 |publisher=Scots History Online |accessdate=23 August 2011}}</ref><ref>{{cite book |url=http://books.google.com/?id=LYc1tSYonrQC&pg=PA165 |title=Constitutional & Administrative Law |page=165 |author=Barnett, Hilaire |author2=Jago, Robert |edition=8th |year=2011 |isbn=978-0-415-56301-7 |publisher=Routledge |location=Abingdon }}</ref>。しかしながら、「連合王国」という用語は18世紀における非公式の使用にのみ見られ、「長文式」でない単なる「グレート・ブリテン」であった1707年から1800年まで、同国はごくまれに正式名称である「グレート・ブリテン連合王国」と言及された<ref>See [[s:Act of Union 1707#Article 1 (name of the new kingdom)|Article One]] of the Act of Union 1707.</ref><ref name=name>"After the political union of England and Scotland in 1707, the nation's official name became 'Great Britain'", ''The American Pageant, Volume 1'', Cengage Learning (2012)</ref><ref name=name2>"From 1707 until 1801 ''Great Britain'' was the official designation of the kingdoms of England and Scotland". ''The Standard Reference Work:For the Home, School and Library, Volume 3'', Harold Melvin Stanford (1921)</ref><ref name=name3>"In 1707, on the union with Scotland, 'Great Britain' became the official name of the British Kingdom, and so continued until the union with Ireland in 1801". ''United States Congressional serial set, Issue 10;Issue 3265'' (1895)</ref><ref>{{cite web |url=http://www.historyworld.net/wrldhis/PlainTextHistories.asp?historyid=ab07 |title=History of Great Britain (from 1707) |authorlink=w:Bamber Gascoigne |author=Gascoigne, Bamber |publisher=History World |accessdate=18 July 2011}}</ref>。[[合同法 (1800年)|1800年合同法]]では、1801年にグレート・ブリテン王国と[[アイルランド王国]]が統合し、[[グレート・ブリテン及びアイルランド連合王国]]が成立した。現在の正式国名である「グレート・ブリテン及び北(部)アイルランド連合王国」は、[[北アイルランド]]のみが連合王国の一部としてとどまった1922年の[[アイルランド自由国]]独立および{{仮リンク|アイルランド分裂|en|Partition of Ireland}}後に採用された<ref>{{cite book |title=The Irish Civil War 1922–23 |author=Cottrell, P. |year=2008 |page=85 |isbn=1-84603-270-9}}</ref>。

イギリスは主権国家として国であるがイングランド[[スコットランド]][[ウェールズ]]それほどの段階ではないが北アイルランドも主権国家ではないが[[イギリスのカントリー|」(country]]と呼ばれる<ref name="alphabeticalNI">{{citation |author1=S. Dunn |author2=H. Dawson|year=2000 |title=An Alphabetical Listing of Word, Name and Place in Northern Ireland and the Living Language of Conflict |publisher=Edwin Mellen Press |location=Lampeter |quote=One specific problem&nbsp; in both general and particular senses&nbsp; is to know what to call Northern Ireland itself:in the general sense, it is not a country, or a province, or a state&nbsp; although some refer to it contemptuously as a statelet:the least controversial word appears to be jurisdiction, but this might change.}}</ref><ref>{{cite web |url=http://www.iso.org/iso/iso_3166-2_newsletter_ii-3_2011-12-13.pdf |title=Changes in the list of subdivision names and code elements |work=ISO 3166-2 |publisher=International Organization for Standardization |date=15 December 2011 |accessdate=28 May 2012}}</ref>。スコットランド、ウェールズ、北アイルランドは、権限の委譲による自治権を有する<ref>[http://books.google.com/?id=gPkDAQAAIAAJ Population Trends, Issues 75–82, p.38], 1994, UK Office of Population Censuses and Surveys</ref><ref name="citizenship">[http://books.google.com/?id=2u8rD6F-yg0C&pg=PA7 Life in the United Kingdom:a journey to citizenship, p. 7], United Kingdom Home Office, 2007, ISBN 978-0-11-341313-3.</ref>。イギリス首相のウェブサイトでは、連合王国の説明として「1国内の国々」という言葉が用いられていた<ref name="page823"/>。{{仮リンク|イギリスの12のNUTS1地域|en|NUTS of the United Kingdom}}統計のような複数の統計的概要において、スコットランド、ウェールズ、北アイルランドを「region」と言及している<ref>{{cite web |url=http://www.ons.gov.uk/ons/dcp171778_346117.xml |title=Statistical bulletin:Regional Labour Market Statistics |accessdate=5 March 2014 |archiveurl=https://web.archive.org/web/20141224045523/http://www.ons.gov.uk/ons/dcp171778_346117.xml |archivedate=2014年12月24日 |deadlinkdate=2018年3月 }}</ref><ref>{{cite web |url=http://www.gmb.org.uk/newsroom/fall-in-earnings-value-during-recession |title=13.4% Fall In Earnings Value During Recession |accessdate=5 March 2014}}</ref>。北アイルランドは「province」とも言及される<ref name="alphabeticalNI"/><ref name="placeApart">{{cite book |author=Murphy, Dervla |title=A Place Apart |year=1979 |publisher=Penguin |place=London |isbn=978-0-14-005030-1}}</ref>。北アイルランドに関しては、記述名の使用が「多くの場合、個人の政治的選好を明らかにする選択で議論の的になり得る」<ref>{{Cite book |last1=Whyte |first1=John |authorlink1=w:John Henry Whyte |last2=FitzGerald |first2=Garret|authorlink2=w:Garret FitzGerald|year=1991 |title=Interpreting Northern Ireland |location=Oxford |publisher=Clarendon Press |isbn=978-0-19-827380-6}}</ref>。

英語ではBritainという言葉は連合王国の同義語として頻繁に用いられる一方、「Great Britainという言葉は連合王国全体の緩い同義語として用いられる場合もあるが<ref>{{cite web |url=http://www.merriam-webster.com/dictionary/great%20britain |title=Merriam-Webster Dictionary Online Definition of '&#39;Great Britain'&#39;|publisher=[[:en:Merriam Webster|Merriam Webster]] |date=31 August 2012 |accessdate=9 April 2013}}</ref><ref>[[:en:New Oxford American Dictionary|New Oxford American Dictionary]]:"Great Britain:England, Wales, and Scotland considered as a unit. The name is also often used loosely to refer to the United Kingdom."</ref>、本来はイングランド、スコットランドおよびウェールズを指すものであり、北アイルランドを含む(すなわち、イギリス全体を指す)場合には用いるべきでないとされる<ref>{{cite news |url=http://www.guardian.co.uk/styleguide/page/0,,184840,00.html |title=Guardian Unlimited Style Guide |publisher=Guardian News and Media Limited |accessdate=23 August 2011 |location=London |date=19 December 2008}}</ref><ref>{{cite news |url=http://news.bbc.co.uk/1/hi/programmes/radio_newsroom/1099593.stm#g|title=BBC style guide (Great Britain)|accessdate=23 August 2011 |work=BBC News|date=19 August 2002}}</ref><ref>{{cite web |url=http://www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517 |title=Key facts about the United Kingdom|archiveurl=http://webarchive.nationalarchives.gov.uk/20121015000000/http://www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517|archivedate=3 November 2012 |accessdate=8 March 2015 |work=Government, citizens and rights |publisher=HM Government}}</ref>。

"GB"及び"GBR"イギリスの[[国際標準化機構|標準]]国名コード ([[ISO 3166-2:GB|ISO 3166-2]]及び[[:en:ISO 3166-1 alpha-3|ISO 3166-1 alpha-3]]を参照) でありその結果として国際機関がイギリスに言及する際に用いられることがあるさらにイギリスのオリンピックチームはGreat Britainもしくは[[Team GB]]の名称を用いる<ref>{{cite web |title=Great Britain |url=http://www.olympic.org/great-britain |publisher=International Olympic Committee |accessdate=10 May 2011}}</ref><ref>{{cite news|last1=Mulgrew|first1=John|title=Team GB Olympic name row still simmering in Northern Ireland|url=http://www.belfasttelegraph.co.uk/news/northern-ireland/team-gb-olympic-name-row-still-simmering-in-northern-ireland-28776939.html|accessdate=9 March 2015|work=Belfast Telegraph|date=2 August 2012}}</ref>。

形容詞のBritishイギリスに関する事項への言及によく用いられる。「Britishに明白な法的含意はないがイギリスの市民権及び[[:en:British nationality law|国籍に関する事項]]への言及に法律上用いられる<ref name="Bradley">{{cite book |url=http://books.google.com/?id=HT_GS2zgN5QC&pg=PA36 |title=Constitutional and administrative law |volume=1 |page=36 |author=Bradley, Anthony Wilfred |author2=Ewing, Keith D. |edition=14th |publisher=Pearson Longman |location=Harlow |year=2007 |isbn=978-1-4058-1207-8}}</ref>。イギリスの国民は、自らの国民性を表現するのに多数の異なる用語を用い、自らを[[イギリス人]]であるか、[[イングランド人]]、[[スコットランド人]]、[[ウェールズ人]]、[[:en:People of Northern Ireland|北アイルランド人]]、[[アイルランド人]]<ref>{{cite web |url=http://www.ark.ac.uk/nilt/2010/Community_Relations/NINATID.html |title=Which of these best describes the way you think of yourself? |year=2010 |work=Northern Ireland Life and Times Survey 2010 |publisher=ARK&nbsp;– Access Research Knowledge |accessdate=1 July 2010}}</ref>であるか、またはその両方であると見なし得る<ref>{{cite book |url=http://books.google.com/?id=u8gZklxHTMUC&pg=PA275 |title=Regionalism after regionalisation:Spain, France and the United Kingdom |pages=275–277 |author=Schrijver, Frans |publisher=Amsterdam University Press |year=2006 |isbn=978-90-5629-428-1}}</ref>。

2006{{仮リンク|イギリスのパスポート|en|British passport}}に新デザインが導入された新パスポートの1ページ目には[[英語]][[ウェールズ語]][[スコットランドゲール語]]で正式国名が記載されている<ref>{{cite news|url=http://www.guardian.co.uk/commentisfree/2010/dec/11/ian-jack-saddened-by-scotland-going-gaelic |location=London |work=The Guardian |first=Ian |last=Jack |title=Why I'm saddened by Scotland going Gaelic |date=11 December 2010}}</ref>。ウェールズ語での正式国名は"Teyrnas Unedig Prydain Fawr a Gogledd Iwerddon"であり、政府のウェブサイト上での略名は"Teyrnas Unedig"であるが<ref>{{cite web|url=http://www.direct.gov.uk/cy/Governmentcitizensandrights/LivingintheUK/DG_10012517CY|title=Ffeithiau allweddol am y Deyrnas Unedig|publisher=Directgov&nbsp;– Llywodraeth, dinasyddion a hawliau]|archiveurl=https://web.archive.org/web/20120924102112/http://www.direct.gov.uk/cy/Governmentcitizensandrights/LivingintheUK/DG_10012517CY|archivedate=2012年9月24日|accessdate=8 March 2015}}</ref>、通常は語形変化した形"Y Deyrnas Unedig"から"DU"と略される。スコットランド・ゲール語での正式国名は"Rìoghachd Aonaichte Bhreatainn is Èireann a Tuath"であり、略名は"Rìoghachd Aonaichte"である。

==歴史==
{{ブリテンの歴史}}
{{main|イギリスの歴史}}
[[ファイル:Descriptio Prime Tabulae Europae.jpg|thumb|left|[[クラウディオスプトレマイオス|プトレマイオス]]の[[地理学 (プトレマイオス)|地理学]]に基づく地図アルビオンと[[:en:Hibernia|ヒベルニア]]現在のアイルランドの文字が見える]]
[[ファイル:Lenepveu, Jeanne d'Arc au siège d'Orléans.jpg|thumb|left|[[ジャンヌダルク]]]]
{{Clear}}

古代のグレートブリテン島は[[アルビオン]]と呼ばれたラテン語起源でドーバーの白い崖に由来するとされる

1066年に[[ノルマンディー公]]であった[[ウィリアム1世 (イングランド王)|ウィリアム征服王]] (William the Conqueror) が[[ノルマンコンクエスト|イングランドを征服]]し大陸の進んだ[[封建制]]を導入して[[王国]]の体制を整えていった人口と[[経済力]]に勝るイングランドがウェールズとスコットランドを圧倒していった

13世紀[[第一次バロン戦争]][[第二次バロン戦争]]で[[フランス]]に政治を左右された1282年にウェールズ地方にもイングランドの州制度がしかれた14-15世紀にわたりフランスと[[百年戦争]]を展開したが1373年に[[英葡永久同盟]]を結んだ

[[ばら戦争]]を勝ち抜いた[[ランカスター朝]]は[[閨閥]]にバイエルン公でホラント伯の[[ヴィルヘルム1世 (バイエルン公)|ヴィルヘルム1世]]を迎えた1497[[ジョンカボット]]が北米海岸を発見した1514[[検閲]]できない外国商人飛脚が設立された1534[[国王至上法]]が出た1536年及び1543年の[[:en:Laws in Wales Acts 1535 and 1542|統一法]]の下スコットランドを正式に併合した{{仮リンク|ウェールズ法諸法|en|Laws in Wales Acts 15351542}})。1559キリスト教が[[イングランド国教会]]統一された1562年フランスで[[ユグノー戦争]]が起こってユグノーが移ってきた亡命者トレンチ家はイギリスで[[:en:Earl of Clancarty|クランカートリー伯]]となった<ref>Samuel Smiles, ''The Huguenots:Their Settlements, Churches, and Industries in England and Ireland'', Genealogical Publishing Com, 1868, pp.313-314.</ref>1588[[アルマダの海戦]]でカトリック勢力を破った1598[[ハンザ同盟]]の在ロンドン基地を閉鎖した

[[ファイル:London.bankofengland.arp.jpg|thumb|[[イングランド銀行]]]]
1600年[[イギリス東インド会社]]ができた1603年にイングランドとスコットランドが[[同君連合]]を形成したそして[[ヘンリーハドソン]]や[[ウィリアムバフィン]]が北米探検に活躍した1620[[ピルグリムファーザーズ]]が北米に上陸しまたフランスでユグノーが反乱しだした1628年に[[権利の請願]]がなされ翌年に[[リシュリュー]]がユグノーと和解した1639-1640スコットランド王国に国教会を強制しようとイングランドは二度の司教戦争を挑むが共に敗れてしまったそして矛先をアイルランド王国へ変えて[[チャールズ1世 (イングランド王)|チャールズ1世]][[オリバークロムウェル]][[ウィリアム3世 (イングランド王)|ウィリアム3世]]の3人が17世紀末まで苛め抜いたウィレム3世は[[ルイ14世]]に迫害されたユグノーに支えられ1694年[[イングランド銀行]]を設立した1702ユグノーだった[[:en:Matthew Decker|マシューデッカー]]がロンドンへ来た1704年にジブラルタルを占領し[[カトリック]]勢力を地中海に封じた1707年の合同法でイングランドとスコットランドは合邦しグレートブリテン王国となった[[ピューリタン]]とユグノーが商売敵のカトリックに対し統一戦線を組み上げたのである[[イギリス帝国]]の手が届く世界各地で宗教と経済が不可分にからみあった紛争が続いた植民地の争奪戦だけでなく[[ロシア帝国]]とアメリカ合衆国で利権を工作するときも彼らは常に優位であった繊維業における[[産業革命]]は綿花を輸出する[[アメリカ合衆国]]へ通貨を独占的に供給した

[[ファイル:Battle of Waterloo 1815.PNG|thumb|ユグノーから[[:en:Baron Northwick|ノースウィック男爵]]が出た頃イギリスは[[対仏大同盟]]の主役であった連合国が[[ワーテルローの戦い]]で勝利し[[ナポレオン戦争]]が終息したこうして[[パクスブリタニカ]]の時代が到来した]]
1801年の合同法でアイルランド王国と合邦しグレートブリテン及びアイルランド連合王国となった<ref>アイルランドにもユグノーが地位を占めていた[[:en:Baron Rendlesham|レンドルシャム男爵]]など</ref>しかし[[アイルランド共和軍]]は健在である統一戦線としては[[ジョージ4世 (イギリス王)|ジョージ4世]]の家柄勲章[[フリーメーソン]]加入すべてが戦利品であったフランス王が再びカトリックを強制することはないだろうしもはや[[神聖ローマ帝国]]もなくなっていた[[ベルギー]]を独立させ[[阿片戦争]]に勝利し統一戦線は鉄道通信の独占に注力したしかし統一戦線は事をやりすぎる癖があった[[ルイ16世]]には忌まわしき[[フォンテーヌブローの勅令]]を破棄させれば十分であったが[[フランス革命]]が[[ナポレオン]]を台頭させて神聖ローマだけでなく統一戦線まで脅かした支援した[[プロイセン王国]]がロシアと組んで[[オスマン帝国]]を攻撃するのも都合がよかったしかし[[普墺戦争]]で[[キール運河]]の利権をとられそうになったり[[普仏戦争]]で南ドイツ連邦が水の泡となったり[[オスマン債務管理局]]の利権を[[ドイツ帝国]]に奪われたりしてベルギーの統一戦線は飼い犬に手を噛まれた気持ちになった

[[栄光ある孤立]]と謳われた外交方針は[[エドワード7世 (イギリス王)|エドワード7世]]のときに放棄された[[1902年]]には[[日本]]とも[[日英同盟]]を締結した彼らはドイツを[[第一次世界大戦]]で敵対国として敗戦後の[[ヴァイマル共和政]]に対して多額の賠償金による債務奴隷にしたしかしアメリカ合衆国に対する影響力でイギリスはドイツにひけをとった1926年には[[バルフォア報告書]]が提出されたイギリスは[[ラザード]]を支配したが[[太平洋]]は支配できなかった[[ウィンザー朝]]の[[ジョージ5世 (イギリス王)|ジョージ5世]]による治世[[デビッドロイドジョージ]]政権下の[[1922年]]に[[英愛条約]]が発効され北部6州北アイルランド;アルスター9州の中の6州を除く26州がアイルランド自由国現[[アイルランド|アイルランド共和国]]として独立し[[1927年]]に現在の名称「'''グレートブリテン及び北アイルランド連合王国'''」へと改名したなおカントリーの一つであるスコットランドが独立すべきかどうかを問う住民投票が2014年9月に実施されたが独立は否決された<ref>{{cite web|url=http://www.cnn.co.jp/world/35023094.html|title=スコットランド独立の是非を問う住民投票実施へ 英国|author=<code>CNN.co.jp</code>|accessdate=2012-10-16}}</ref>。1925年受託者法([[:en:Trustee Act 1925|Trustee Act 1925]])の第61条は、裁判所に、公生かつ合理的に行動し、免責されるのが当然である受託者を、信託違反の責任から免除する権限を与えた<ref>Trustee Act, 1925. Article 61. "If it appears to the court that a trustee, whether appointed by the court or otherwise, is or may be personally liable for any breach of trust, whether the transaction alleged to be a breach of trust occurred before or after the commencement of this Act, but has acted honestly and reasonably, and ought fairly to be excused for the breach of trust and for ommitting to obtain the directions of the court in the matter in which he committed such breach, then the court may reliave him either wholly or partly from personal liability for the same."</ref><ref>1958年信託変更法([[:en:Variation of Trusts Act 1958|Variation of Trusts Act 1958]])は、信託を変更し、かつ受益者の利益のために信託財産を処理することを認可する広い権限を、裁判所に与えている。</ref>。この立法をなした[[イギリス議会]]は、[[世界恐慌]]が[[投資信託]]を通し大衆化した歴史にある程度の責任がある。イギリス投資信託全体の資産構成に占める下位証券の割合は、1933年で36.2%、1935年で42.0%、1938年で53.5%に上昇していった<ref>[[証券取引委員会]] ''Investment Trusts and Investment Companes'', Part 2, 連邦政府出版局 1939年 52頁;H.Burton and D.C.Corner, ''Investment and Unit Trusts in britain and America'', Elek Book, London, 1968, p.68.</ref>。

[[1939年]]の[[アドルフヒトラー]]総統の[[国家社会主義ドイツ労働者党|ナチ党]]率いる[[ナチスドイツ]]が[[ポーランド]]に侵攻し[[フランス]]とともに宣戦布告を行い[[バトルオブブリテン]]をはじめ[[西部戦線 (第二次世界大戦)|ヨーロッパ戦線]]では対独伊戦争[[太平洋戦争|太平洋戦線]]では対日戦争を経験しアメリカ合衆国の[[民主党 (アメリカ)|民主党]][[フランクリンルーズベルト]]大統領と[[大西洋憲章]]を共同で提唱した保守党の[[ウィンストンチャーチル]]政権による[[挙国一致内閣]]の下に勝利を得た[[第二次世界大戦]]後[[イギリス軍]]はドイツの[[ハンブルク]]や[[ハノーファー]]を占領し旧[[西ドイツ]]の形成の一役を担ったアメリカ合衆国は旧南ドイツ連邦と[[オーストリア]]西部を占領したアメリカ合衆国の占領地域は[[オランダ]]と歴史がつながっており[[戦間期]]にまして欧州東西の資本が錯綜した

イギリスは[[1945年]]の[[冷戦]]開始以降にかけて政治経済その他多くの面でアメリカ合衆国に覇権を譲ったまた[[資本主義]][[自由主義]]陣営の[[西側諸国]]の一国として[[ソビエト連邦]]とは敵対しながら政治面では[[労働党 (イギリス)|労働党]]の[[クレメントアトリー]]政権が「'''[[ゆりかごから墓場まで]]'''」をスローガンに[[福祉国家]]を作り上げた経済面ではイングランド銀行が[[ブレトンウッズ協定|ブレトンウッズ体制]]をめぐる駆け引きに競り負け1960年代のポンド危機と1970年代のセカンダリーバンキング危機に遭い、「[[英国病]]とまで呼ばれる[[景気後退|不景気]]に苦しんだ産業面では戦前から[[ゼネラルエレクトリック]]に[[産業革命]]の威光を奪われていたアトリー失脚後は保守党へ政権交代となりチャーチルが首相に再任する

第二次大戦中イギリスは帝国内で最大規模の人口を誇る[[イギリス領インド帝国|インド]]に対してヨーロッパ太平洋で複数の戦線を維持し又城内平和を維持するため戦後[[インド]]の地位に対して大幅な譲歩をせざるを得なかったイギリス政府は1947年にインド独立法を承認し[[印パ分離独立|インドとパキスタンの独立]]を翌[[1948年]]にはセイロン[[スリランカ]]の独立を承認した又大戦中に日本の支配下にあったビルママレーでもイギリス支配下に復することに混乱が見られ[[1948年]]に[[ビルマ]]ミャンマーの[[1957年]]に[[マレーシア]]の独立を承認した

[[1960年代]]に入るとフランス領西アフリカの独立要求を期に[[アフリカ]]諸国の独立運動が活発化し[[1960年]]に[[ナイジェリア]]が[[1962年]]に[[ウガンダ]]が[[1963年]]に[[ケニア]]が[[1964年]]に[[マラウイ]]と[[ザンビア]]がイギリスから独立を宣言した又[[1961年]]に[[南アフリカ共和国|南アフリカ]]が[[1966年]]に[[ローデシア]]が[[アパルトヘイト]]維持のためイギリスからの独立を宣言した

[[1956年]]には[[エジプト]]が[[スエズ運河]]の国有化を宣言し同地帯を占領したためイギリスフランス[[イスラエル]]との間で戦闘が勃発したこれが[[第二次中東戦争]]スエズ危機である英仏は国際世論の支持を得られなかったためスエズから撤退し[[地中海]]と[[紅海]]を結ぶスエズ運河の利権を喪失したまたエジプトの行動に励まされて中東地域でも独立運動が刺激され[[1971年]]に[[バーレーン]][[カタール]][[アラブ首長国連邦]]がイギリスから独立した

残る最大のイギリス植民地は[[香港]]だけになったがこれも1984年にマーガレットサッチャー首相と[[トウ小平|鄧小平]][[中華人民共和国]]中央軍事委員会主席の間で行われた英中首脳会談で新界の租借期限が切れる1997年に割譲地も含めて一斉に中国に返還されることになった[[香港返還|香港を返還]]したことでイギリスは主要な植民地のほぼ全てを喪失することになり世界の7つの海を跨いだ[[イギリス帝国]]は消滅していった

[[1964年]]には[[ハロルドウィルソン]]が首相に就任しアトリー以来13年ぶりに労働党が政権に復帰する[[1969年]]に[[イングランド]][[ウェールズ]] [[スコットランド]][[1973年]]に[[北アイルランド]]で死刑制度が一部例外を除き廃止されたまたウィルソン労働党政権下で[[妊娠中絶]]の合法化[[死刑]]制度の廃止及び[[同性愛]]の非刑罰化[[ソドミー法]]の廃止を含む社会的改革がなされ通貨[[スターリングポンド|ポンド]]の平価切り下げや日本の[[放送大学]]の模倣ともなった[[大学通信教育|通信制公立大学]]である[[オープン大学]]の設置などの政策が実施された

1980年代に成立した[[保守党 (イギリス)|保守党]]の[[マーガレットサッチャー]]政権は[[新自由主義]]による[[構造改革]][[ネオリベラリズム]][[サッチャリズム]]に基づく[[民営化]][[行政改革]][[規制緩和]]を急進させて[[小さな政府]]志向[[自由主義国家論]])、多くの[[失業]]者を出した地方経済は不振を極めロンドンを中心に[[金融]]産業などが成長した

1990年代政権は保守党の[[ジョンメージャー]]から労働党の[[トニーブレア]]に交代しイギリスは[[市場]]化一辺倒の[[政策]]を修正しつつかつての重厚な福祉国家にも逆戻りしない[[第三の道]]への路線に進むことになったまた[[1998年]]人権法を制定し[[死刑]]制度が完全に廃止されたこの頃からイギリスは久しぶりの好況に沸き、「老大国のイメージを払拭すべく「'''[[クールブリタニア]]'''」と呼ばれるイメージ戦略[[文化政策]]に力が入れられるようになった

2000年代2010年代[[21世紀]]に突入し労働党の[[ゴードンブラウン]]保守党の[[デーヴィッドキャメロン]]と政権が続く

[[2014年]]からは[[同性結婚]]が合法化された

[[2016年]][[6月23日]]に[[イギリスの欧州連合離脱是非を問う国民投票]]が実施されその結果僅差をもって離脱賛成派が過半数を占めたため[[イギリスの欧州連合離脱]]通称ブレグジットBrexitが決定された

これを受けてキャメロン首相兼保守党党首が責任を取る形で辞任を表明し[[テリーザメイ]]がサッチャーに続く2人目のイギリスの女性首相兼保守党党首として2016年[[7月13日]]に就任したメイ政権は新たに[[欧州連合離脱省]]を設置した

結果として[[2020年]][[1月31日]]午後11時([[グリニッジ標準時|GMT]])にイギリスは[[欧州連合]](EU)から脱退した<ref>{{Cite web|url=https://mainichi.jp/articles/20200201/k00/00m/030/008000c|title=英国がEU離脱 加盟国の離脱は初|publisher=毎日新聞|date=2020-02-01|accessdate=2020-02-01}}</ref>。

==地理==
{{main|イギリスの地理}}
[[ファイル:Uk topo en.jpg|thumb|200px|イギリスの地形図]]
[[ファイル:BenNevis2005.jpg|thumb|[[ブリテン諸島]]最高峰の[[ベンネビス山]]]]
イギリスはグレートブリテン島のイングランドウェールズスコットランドおよびアイルランド島北東部の北アイルランドで構成されているこの2つの大きな島とその周囲大小の島々を[[ブリテン諸島]]と呼ぶグレートブリテン島は中部から南部を占めるイングランド北部のスコットランド西部のウェールズに大別されるアイルランド島から北アイルランドを除いた地域はアイルランド共和国がある

北アイルランドとアイルランド共和国の国境の他にイギリスは[[大西洋]]に囲まれ東に[[北海]]南に[[イギリス海峡]]がある[[アイリッシュ海]]はグレートブリテン島とアイルランド島の間に位置するイギリスの総面積は243,610km<sup>2</sup>であり[[国の面積順リスト|世界第78位]]及び[[:en:List of European countries by area|ヨーロッパ第11位]]

イングランドの大部分は<!--rolling lowland terrain-->岩の多い低地からなり北西の山がちな地域[[湖水地方]]のカンブリア山脈)、北部ペニンネスの湿地帯ピークディストリクトの[[石灰岩]]丘陵地帯デールと呼ばれる渓谷[[パーベック島]][[リンカンシャー]]の石灰岩質の丘陵地帯から南イングランドの泥炭質のノースダウンズサウスダウンズチルターンにいたるイングランドを流れる主な河川は[[テムズ川]][[セヴァーン川]][[トレント川]][[ウーズ川]]である主な都市はロンドン[[バーミンガム]][[ヨーク (イングランド)|ヨーク]][[ニューカッスルアポンタイン]]などイングランド南部の[[ドーバー (イギリス)|ドーヴァー]]には[[英仏海峡トンネル]]があり対岸のフランスと連絡するイングランドには標高 1000m を超える地点はない

ウェールズは山がちで最高峰は標高 1,085m の[[スノードン山]]である本土の北に[[アングルシー島]]があるウェールズの首都また最大の都市は[[カーディフ]]で南ウェールズに位置する

スコットランドは地理的に多様で南部および東部は比較的標高が低くベンネビス山がある北部および西部は標高が高いベンネビス山はイギリスの最高地点で標高 1343 m であるスコットランドには数多くの半島ロッホと呼ばれる湖がありグレートブリテン島最大の淡水湖である[[ネス湖|ロッホネス]]もスコットランドに位置する西部また北部の海域には[[ヘブリディーズ諸島]][[オークニー諸島]][[シェトランド諸島]]を含む大小さまざまな島が分布するスコットランドの主要都市は首都[[エディンバラ]][[グラスゴー]][[アバディーン]]である

北アイルランドはアイルランド島の北東部を占めほとんどは丘陵地である中央部は平野でほぼ中央に位置する[[ネイ湖]]はイギリス諸島最大の湖である主要都市は[[ベルファスト]]と[[ロンドンデリー|デリー]]

現在イギリスは大小あわせて1098ほどの島々からなるほとんどは自然の島だがいくつかは[[クランノグ]]といわれる過去の時代に石と木を骨組みに作られしだいに廃棄物で大きくなっていった人工の島がある

イギリスの大半はなだらかな丘陵地及び平原で占められており国土のおよそ90%が可住地となっているそのため国土面積自体は[[日本]]のおよそ3分の2[[本州]]と[[四国]]を併せた程度であるが[[可住地面積]]は逆に日本の倍近くに及んでいるイギリスは[[森林]]も少なく日本が国土の3分の2が森林で覆われているのに対しイギリスの[[森林率]]は11%ほどである<ref>{{Cite web |url=http://yoshio-kusano.sakura.ne.jp/nakayamakouen6newpage3.html |title=中山徹奈良女子大教授の記念講演6 どうやって森を再生するかイギリスの例 |publisher=日本共産党宝塚市議 草野義雄 |accessdate=2014-5-10 |archiveurl=https://web.archive.org/web/20140512220911/http://yoshio-kusano.sakura.ne.jp/nakayamakouen6newpage3.html |archivedate=2014年5月12日 |deadlinkdate=2018年3月 }}</ref>。

その他{{仮リンク|領土紛争の一覧|en|List of territorial disputes|label=紛争中}}の[[フォークランド諸島]][[ジブラルタル]][[イギリス領インド洋地域|インド洋地域]]を含む[[イギリスの海外領土|14の海外領土]]を有する<ref>{{cite web |url=http://www.fco.gov.uk/en/about-us/what-we-do/overseas-territories |title=Working with Overseas Territories |publisher=[[:en:Foreign and Commonwealth Office|Foreign and Commonwealth Office]] |accessdate=3 May 2011}}</ref>。[[ガーンジー]]、[[ジャージー]]、[[マン島]]はイギリスの一部ではなく、イギリスの君主をともに君主とし、[[イギリス政府]]が防衛及び国際的表示に対して責任を負う[[イギリスの王室属領|王室属領]]である<ref>{{cite web |url=http://www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517 |title=Key facts about the United Kingdom |accessdate=3 May 2011 |publisher=[[:en:Directgov|Directgov]] |quote=The full title of this country is 'the United Kingdom of Great Britain and Northern Ireland'. 'The UK' is made up of England, Scotland, Wales and Northern Ireland. 'Britain' is used informally, usually meaning the United Kingdom. 'Great Britain' is made up of England, Scotland and Wales. The Channel Islands and the Isle of Man are not part of the UK. |archiveurl=http://webarchive.nationalarchives.gov.uk/20121015000000/http:/www.direct.gov.uk/en/Governmentcitizensandrights/LivingintheUK/DG_10012517 |archivedate=2012年10月15日 |deadlinkdate=2018年3月 }}</ref>。

===主要都市===
{{Main|イギリスの都市の一覧}}
イギリスは四つの非独立国であるイングランドスコットランドウェールズ北アイルランドより構成されるそれぞれの国は首都を持ちロンドンイングランド)、エディンバラスコットランド)、カーディフウェールズ)、ベルファスト北アイルランドがそれである中でもイングランドの首都であるロンドンはイギリス連合王国の首都としての機能も置かれている

イングランドの[[首都]]ロンドンは[[ヨーロッパ]]第2の規模の都市的地域及び[[ユーロスタット]]によれば[[欧州連合]]最大の約1,400万人の人口を有する[[:en:London commuter belt|都市圏]]であり重要な[[世界都市]]及び[[金融センター]]である<ref name="appsso.eurostat.ec.europa.eu show">{{cite web |url=http://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=met_pjanaggr3&lang=en |title=Metropolitan Area Populations |publisher=Eurostat |date=30 August 2012 |accessdate=4 May 2013}}</ref><ref>{{cite web|url=https://www.cia.gov/library/publications/the-world-factbook/geos/uk.html|title=The World Factbook|date=1 February 2014|work=[[Central Intelligence Agency]]|accessdate=23 February 2014}}</ref>。

ウェールズスコットランド北アイルランドの首都は各々カーディフエディンバラベルファストである
[[ファイル:Population density UK 2011 census.png|thumb|right|人口分布2011]]

{| class="infobox" style="text-align:center; width:100%; margin-right:10px; font-size:100%"
! colspan="10" style="background:#e9e9e9; padding:0.3em; line-height:1.2em;"| '''イギリスの