import matplotlib.pyplot as pltimport matplotlib.patches as patchesimport matplotlib.font_manager as fmfrom matplotlib import rcParams# フォントの設定font_path = '/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc' # 適切な日本語フォントファイルを指定してくださいfont_prop = fm.FontProperties(fname=font_path)rcParams['font.family'] = font_prop.get_name()# 政党名とそれぞれの位置(Avarage?)parties = {'自由民主党': ((0.1, 0.9), (0.1, 0.9)),'公明党': ((-0.1, 0.3), (0.0, 0.5)),'日本維新の会': ((0.6, 1.0), (0.2, 0.8)),'参政党': ((-0.2, 0.2), (0.7, 0.9)),'日本保守党': ((0.6, 0.9), (0.8, 1.0)),'国民民主党': ((0.0, 0.4), (-0.1, 0.2)),'立憲民主党': ((-0.6, 0.2), (-0.5, 0.1)),'れいわ新撰組': ((-0.7, -0.3), (-0.7, -0.3)),'社民党': ((-0.9, -0.5), (-0.6, -0.3)),'日本共産党': ((-0.9, -0.7), (-0.3, -0.1)),'U.S.A.': ((0.75, 1.0), (-1.0, -0.20)),'China': ((-1.0, -0.25), (0.75, 1.0)),# 修正された位置}# グラフの設定plt.figure(figsize=(8, 6))# 軸の設定plt.axhline(0, color='black', linewidth=0.5, ls='--') # x=0plt.axvline(0, color='black', linewidth=0.5, ls='--') # y=0plt.grid(color='gray', linestyle='--', linewidth=0.5)# 政党ごとに異なる色を設定colors = {'自由民主党': 'blue','公明党': 'yellow','日本維新の会': 'green','参政党': 'orange','日本保守党': 'purple','国民民主党': 'brown','立憲民主党': 'cyan','れいわ新撰組': 'magenta','社民党': 'pink','日本共産党': 'red','U.S.A.': 'gray','China': 'gray',}# データプロットfor party, ((x_min, x_max), (y_min, y_max)) in parties.items():rect = patches.Rectangle((x_min, y_min),x_max - x_min,y_max - y_min,alpha=0.3,color=colors[party], # 色を設定label=party)plt.gca().add_patch(rect)plt.text((x_min + x_max) / 2, (y_min + y_max) / 2, party,fontsize=9, ha='center', va='center')# 軸の範囲plt.xlim(-1.1, 1.1)plt.ylim(-1.1, 1.1)# タイトルplt.title('日本の政党の経済軸と政治軸')plt.xlabel('経済軸 (左: 社会主義, 右: 資本主義)')plt.ylabel('政治軸 (下: 自由主義, 上: 国家主義)')plt.grid()plt.show()
芥川龍之介が「蜘蛛の糸」を発表して百年。高二の秋の文化祭,クラスの仮装行列のテーマが 蜘蛛の糸だった。お釈迦様の極楽タワーの竹を近所から切り出し,地獄の焔と煙の絵を描いた。犍陀多に続いて蜘蛛の糸(登山部の赤いザイル)に群がる地獄の亡者だったころ。
2024年10月26日土曜日
政党マップ
2024年7月20日土曜日
プログラミング的思考(3)
Q(koshix):プログラミング的思考とComputational Thinkingの共通点と相違点をおしえてください。情報教育において,どちらが有用でしょうか。A(Perplexity PRO):プロサーチ・プログラミング的思考の定義を検索する・Computational Thinkingの定義を検索する・プログラミング的思考とComputational Thinkingの共通点と相違点を比較する・情報教育においてプログラミング的思考とComputational Thinkingのどちらが有用かを評価する回答プログラミング的思考とComputational Thinkingの共通点と相違点
共通点・目的達成のための論理的思考: 両者とも、目的を達成するために論理的に手順や方法を考える力を重視しています。これは問題解決において非常に重要です。・抽象化と分解: どちらも、問題を小さな部分に分解し、それぞれを抽象化して理解する能力を必要とします。このプロセスにより、複雑な問題を扱いやすくします。・シミュレーションと試行錯誤: どちらも、シミュレーションや試行錯誤を通じて、最適な解決策を見つけることを重視します。
相違点■プログラミング的思考・効率の重視: 目的達成のために最適な方法を見つけることに重点を置きます。例えば、洗濯の手順を効率的に行う方法を考える。・具体的な手順の構築: 具体的な手順やアルゴリズムを作成し、それを実行することに焦点を当てます。・プログラミング教育の一環: 主にプログラミング教育の中で教えられ、具体的なプログラムの作成を通じて学びます。■Computational Thinking・広範な適用: 計算論的思考は、プログラミングだけでなく、日常生活や他の学問分野にも適用されます。例えば、データの整理やパターン認識。・概念的な理解: 計算論的思考は、問題を解決するための概念的な枠組みを提供し、広範な問題に適用可能です。・コンピュータ科学の基盤: コンピュータ科学全般の基盤として教えられ、プログラミング以外の多くの分野にも応用されます。情報教育における有用性どちらが情報教育において有用かは、教育の目的や対象によって異なります。・プログラミング的思考は、具体的なプログラムを作成する能力を養うために非常に有用です。プログラミングの基礎を学ぶことで、論理的思考力や問題解決能力が向上します。・Computational Thinkingは、より広範な問題解決能力を養うために有用です。これは、プログラミングだけでなく、データ分析やシステム設計など、他の多くの分野にも応用可能です。したがって、初等教育やプログラミングの基礎を教える場合には「プログラミング的思考」が有用です。一方で、より広範な問題解決能力やコンピュータ科学全般の理解を深めるためには「Computational Thinking」が有用です。両者をバランスよく取り入れることで、学生は具体的な技術スキルと広範な問題解決能力の両方を身につけることができます。Sources:1: https://kids.athuman.com/cecoe/articles/000178/2: https://www.koov.io/column/2103: https://products.sint.co.jp/topsic/blog/computational-thinking4: https://www.cs.cmu.edu/afs/cs/usr/wing/www/ct-japanese.pdf
2024年7月11日木曜日
サイコロの雌雄
Q(koshix):立方体のサイコロの展開図を描画するpythonプログラムを下さい。展開図は6つの正方形の面が接して並ぶものです。各面には1〜6の数が適当は大きさの小丸(ドット)で表現されます。展開図を組み立てたときに向かいあう面の数の和が7になるように配置されます。1の面の小丸は少し大きい赤色ですが,他の面の2-6の小丸は黒です。
A(Claude 3.5 Sonnet):→SVGファイルが生成されて保存されるはずが失敗→画面にも表示されないので,pngファイルに変更→画面に出力された(OK)ので,雌雄を判定させる。Q(koshix):以下の定義からこのサイコロの展開図の雌雄を判定してください。サイコロの目の割り振りは、ほぼ「天一地六東五西二南三北四」(雌サイコロ)と決まっている。これは、日本だけの特徴ではなく、世界的な共通点である。ただし、「南三」でなく「北三」になっているサイコロもあり、「南三」を雌サイコロ、「北三」を雄サイコロと呼ぶこともある(異性)。サイコロの雌雄の見分け方は、1・2・3の面が集まる頂点を正面に置き、1→2→3の順に見たときに時計回りになるのが雄サイコロ、反時計回りになるのが雌サイコロである。→ただしく雌であると判定できた,エライ→雌雄の両方の展開図を上下に出力させる→日本語ラベルが文字化けしているので修正させる→なかなか修正できず何度も失敗する→こちらから日本語設定のサンプルコードを与える→できた!日本語ラベルと展開図が重なっているので右シフトを依頼→Claude 3.5 Sonnetの無料制限オーバーで停止,PROへの移行を勧められるChatGPT-4oに移動Q(koshix):サイコロの雌雄の展開図を表示する以下のpythonプログラムで,日本語ラベルと展開図が少し重なっているので,展開図を少し右に動かしてください。Q(koshix):今度は,展開図の右側が画面からはみ出して欠けてしまいました。なんとかなりませんか。Q(koshix):雄サイコロの方は向かいあう目の数の和が7になっていないところがあります。4の目と5の目を入れ替えてください。Q(koshix):いや、そうではなくて,1,2,3の配置は元のままでよかったのです。それらと6はそのままで,4の目と5の目だけを入れ替えてという意味です。Q(koshix):雄のサイコロの2の目と3の目も入れ替わりましたよ。そこは元のままなのです。Q(koshix):雄サイコロはまだ直っていませんよ
2024年7月9日火曜日
東京都知事選挙(5)
Q(koshix):次のように正方形の領域を分割して色を塗るJuliaプログラムをつくってください。(1) 6個の世代人口データがあります。この値に比例して正方形を水平線で分割します。 つまり,上から,20代,30代,40代,50代,60代,70代の人口に比例した長方形 ができます。(2) 各長方形を,n人の候補者(A,B,C,...)の支持率をつかって垂線で分割します。 つまり,各年代ごとに,Aの支持率,Bの支持率,Cの支持率,その他の支持率と なります。これらの支持率の和は100%であり,それが正方形の横軸の長さになります。(3) 各年代のAの支持率のブロックは色#28A745,Bの支持率のブロックは色#F39C12, Cの支持率のブロックは色#3498DB,その他の支持率のブロックは色#CA8888 とします。(4) 各世代の人口数は,{48,68,100,133,132,117}とします。(5) 20代の支持率は,{0.27,0.44,0.11,0.18}とします。30代の支持率は,{0.30,0.31,0.18,0.21}とします。40代の支持率は,{0.36,0.32,0.15,0.16}とします。50代の支持率は,{0.42,0.25,0.16,0.16}とします。60代の支持率は,{0.41,0.22,0.26,0.11}とします。70代の支持率は,{0.51,0.11,0.31,0.08}とします。A(Claude 3.5 Sonnet):using CairoMakie# データの準備populations = [48, 68, 100, 133, 132, 117]total_population = sum(populations)support_rates = [[0.27, 0.44, 0.11, 0.18], # 20代[0.30, 0.31, 0.18, 0.21], # 30代[0.36, 0.32, 0.15, 0.17], # 40代[0.42, 0.25, 0.16, 0.17], # 50代[0.41, 0.22, 0.26, 0.11], # 60代[0.51, 0.11, 0.31, 0.07] # 70代]colors = ["#28A745", "#F39C12", "#3498DB", "#CA8888"]age_labels = ["18-", "30-", "40-", "50-", "60-", "70-"]# プロットの作成fig = Figure(size=(800, 600))ax = Axis(fig[1, 1], ylabel="人口割合", xlabel="支持率")current_y = 0.0for (i, pop) in enumerate(populations)segment_height = pop / total_populationrates = support_rates[i]current_x = 0.0for (j, rate) in enumerate(rates)poly!(ax, [current_x, current_x+rate, current_x+rate, current_x],[current_y, current_y, current_y+segment_height, current_y+segment_height],color=colors[j])current_x += rateend# 年代ラベルを追加text!(ax, -0.05, current_y + segment_height/2, text=age_labels[i],align=(:right, :center), fontsize=14)current_y += segment_heightend# 軸の設定ax.yticks = (collect(0:0.2:1), ["0%", "20%", "40%", "60%", "80%", "100%"])ax.xticks = (collect(0:0.2:1), ["0%", "20%", "40%", "60%", "80%", "100%"])# 凡例の追加elements = [PolyElement(polycolor = c) for c in colors]Legend(fig[1, 2], elements, ["小池百合子", "石丸伸二", "蓮舫", "その他"],"候補者", tellheight=false, tellwidth=true)# タイトルの追加Label(fig[0, :], "年代別支持率", fontsize = 24)# グラフの表示display(fig)
2024年6月14日金曜日
合計特殊出生率(3)
using Gadflyusing Composeusing DataFramesX = [46.6,47.4,49.4,47.7,49.9,51.2,50.0,50.4,50.9,49.9,49.3,49.0,44.2,49.0,50.4,52.0,50.4,52.3,49.5,51.7,51.4,51.6,51.9,51.4,52.2,44.4,43.5,48.8,47.0,48.5,49.2,51.9,48.9,50.7,49.9,49.3,51.1,49.6,46.1,46.2,48.5,48.6,48.5,49.5,49.4,49.2,45.8]Y = [1.06,1.23,1.16,1.07,1.10,1.22,1.21,1.22,1.19,1.25,1.14,1.14,0.99,1.13,1.23,1.35,1.34,1.46,1.32,1.34,1.31,1.25,1.29,1.29,1.38,1.11,1.19,1.29,1.21,1.33,1.44,1.46,1.32,1.33,1.40,1.36,1.40,1.31,1.30,1.26,1.46,1.49,1.47,1.39,1.49,1.48,1.60]Labels = ["北海道","青森","岩手","宮城","秋田","山形","福島","茨城","栃木","群馬","埼玉","千葉","東京","神奈川","新潟","富山","石川","福井","山梨","長野","岐阜","静岡","愛知","三重","滋賀","京都","大阪","兵庫","奈良","和歌山","鳥取","島根","岡山","広島","山口","徳島","香川","愛媛","高知","福岡","佐賀","長崎","熊本","大分","宮崎","鹿児島","沖縄"]plot(x=X, y=Y, label=Labels, Geom.point, Geom.label, Theme(major_label_font="CMU Serif",minor_label_font="CMU Serif",major_label_font_size=12pt,minor_label_font_size=12pt), Guide.xlabel("女性有配偶率"),Guide.ylabel("合計特殊出生率"))
2024年6月7日金曜日
合計特殊出生率(2)
library(showtext)
font_add("Hiragino", "/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc")
showtext_auto()
X <- read.table('/Users/koshi/Desktop/birth.txt', header = TRUE)
par(family = "Hiragino") # 利用可能なフォントを指定
plot(X\$年, X\$合計特殊出生率, type="o", pch=16, xlab="", ylab="")
t = c(range(X\$合計特殊出生率), X\$合計特殊出生率[length(X[,1])])
axis(4, t, t)
title("合計特殊出生率", line=0.5)
#title("Total Fertility Rate", line=0.5)
# x軸とy軸のメモリの位置を手動で指定
x_ticks <- pretty(X$年, 15) # 15個のメモリを生成
y_ticks <- pretty(X$合計特殊出生率, 16) # 16個のメモリを生成
# x軸に対してグリッド線を描画
for (i in x_ticks) {
abline(v = i, col = "lightgray", lty = "dotted")
}
# y軸に対してグリッド線を描画
for (i in y_ticks) {
abline(h = i, col = "lightgray", lty = "dotted")
}
年 出生数 合計特殊出生率
1953 1868040 2.70
1954 1769580 2.48
1955 1730692 2.37
1956 1665278 2.22
1957 1566713 2.04
1958 1653469 2.11
1959 1626088 2.04
1960 1606041 2.00
1961 1589372 1.96
1962 1618616 1.98
1963 1659521 2.01
1964 1716761 2.05
1965 1823697 2.14
1966 1360974 1.58
1967 1935647 2.23
1968 1871839 2.13
1969 1889815 2.13
1970 1934239 2.13
1971 2000973 2.16
1972 2038682 2.14
1973 2091983 2.14
1974 2029989 2.05
1975 1901440 1.91
1976 1832617 1.85
1977 1755100 1.80
1978 1708643 1.79
1979 1642580 1.77
1980 1576889 1.75
1981 1529455 1.74
1982 1515392 1.77
1983 1508687 1.80
1984 1489780 1.81
1985 1431577 1.76
1986 1382946 1.72
1987 1346658 1.69
1988 1314006 1.66
1989 1246802 1.57
1990 1221585 1.54
1991 1223245 1.53
1992 1208989 1.50
1993 1188282 1.46
1994 1238328 1.50
1995 1187064 1.42
1996 1206555 1.43
1997 1191665 1.39
1998 1203147 1.38
1999 1177669 1.34
2000 1190547 1.36
2001 1170662 1.33
2002 1153855 1.32
2003 1123610 1.29
2004 1110721 1.29
2005 1062530 1.26
2006 1092674 1.32
2007 1089818 1.34
2008 1091156 1.37
2009 1070036 1.37
2010 1071305 1.39
2011 1050807 1.39
2012 1037232 1.41
2013 1029817 1.43
2014 1003609 1.42
2015 1005721 1.45
2016 977242 1.44
2017 946146 1.43
2018 918400 1.42
2019 865239 1.36
2020 840835 1.33
2021 811622 1.30
2022 770759 1.26
2023 727277 1.20
2024年5月21日火曜日
散歩地図
Q(koshix):天理市の地図のうえで,自宅を中心として半径が500mの倍数となる円を1倍から6倍まで描画したいのです。なるべく簡単で具体的な手順や方法あるいはプログラムを一つ教えてください。言語は,JuliaでもMathematicaでもPythonでもRでも構いませんA(GPT-4o):Pythonを使用して天理市の地図上に自宅を中心として半径が500mの倍数となる円を描画する方法を示します。この手順では、以下のライブラリを使用します。・folium: インタラクティブな地図の作成・geopy: 緯度経度の計算以下の手順に従ってください。1.必要なライブラリをインストールします。(sh)pip install folium geopy2.次に、Pythonスクリプトを作成します。以下のコードをコピーして実行してください。(python)import foliumfrom geopy.distance import geodesic# 自宅の緯度と経度を設定(天理市の例として)home_location = (34.596047, 135.819249)# フォリウムマップの作成m = folium.Map(location=home_location, zoom_start=15)# 半径500mの倍数となる円を1倍から6倍まで描画for i in range(1, 7):radius = 500 * ifolium.Circle(location=home_location,radius=radius,color='blue',fill=True,fill_opacity=0.1).add_to(m)# 自宅のマーカーを追加folium.Marker(location=home_location, popup="Home").add_to(m)# 地図を保存m.save('tenri_map.html')このコードは、以下の手順で動作します。1.home_locationに自宅の緯度と経度を設定します。この例では天理市の中心付近の座標を使用していますが、実際の自宅の座標に置き換えてください。2.folium.Mapを使用して地図を作成し、初期の表示位置とズームレベルを設定します。3.半径500mの倍数となる円を1倍から6倍まで描画します。folium.Circleを使用して円を描画し、radius引数で半径をメートル単位で指定します。4.自宅の位置にマーカーを追加します。5.作成した地図をHTMLファイルとして保存します。保存されたtenri_map.htmlファイルをブラウザで開くと、自宅を中心とした円が描かれた地図が表示されます。