ささモンメモ

普段つぶやききれないことをこちらで

(一部の)高校生は大人顔負けの超ブラック生活を送っている

最近は「ブラック○○」っていうのが流行っていますね。働き方改革も進められて,社会人の残業時間も厳しく管理され,削減する傾向にあるようです。

個人的には「ブラック」の基準がどんどん下がってきて,なんでもかんでもブラックって言うような風潮になってきている気もしますが…

大人も顔負けの「ブラック生活」を送る高校生

僕はとある進学塾でバイトをしていますが,そこで高校生たちと接していると,「社会人よりも大変な生活を送っているのでは…」という生徒が結構いるわけです。

特に大変なのは強豪の運動部に入っているケースなどで,平日は

 05:00 起床
 06:00 登校
 07:00~08:00 朝練
 08:30~15:00 授業
 16:00~19:00 部活
 20:00~22:00 塾
 23:00 帰宅
 00:00 就寝

という感じの超過酷なスケジュール。そして土日も休めるわけではなく部活の練習や大会があったりします。

部活と塾を両立させて頑張っている生徒は多く,ここまで極端な例はそう多くはないにしろ,かなり大変な毎日を送っている高校生は結構います。

体力が一番ある時期なので多少の無理は効くかもしれませんが,やはりオーバーワークになってしまっている生徒も見受けられるので,もう少しいまの高校生たちを取り巻く環境を見直すべきなのかもしれないと感じます(入試改革もさらに受験勉強を長期化させかねないのでブラック化に拍車をかけるかも…?)。

一方で,こうやって頑張っている生徒たちを見ていると自分ももっと頑張らねば…と思感じさせられます。

専攻実験をPythonでやってみた(その3・終)

過去2回の続きです。

smon.hatenablog.com

smon.hatenablog.com

2次元フーリエ変換

最後のプログラミングの課題で,(数値データで)円を作る→フーリエ変換する→フーリエ逆変換(して元に戻ることを確認)する,という課題があるので,これをPythonでやってみます。

実験ではC言語でひたすら書いてもらっているのですが,Pythonだと拍子抜けするほど短くなります。

円を作る
import numpy as np
import matplotlib.pyplot as plt

nx = 256
ny = 256

i0 = 132
j0 = 124
r  = 84.0

re = np.zeros((nx, ny))
im = np.zeros((nx, ny))

for j in range(ny):
    for i in range(nx):
        if (i-i0)**2 + (j-j0)**2 < r**2:
            re[j][i] = 100.0
            im[j][i] = 0.0
        else:
            re[j][i] = 0.0
            im[j][i] = 0.0           
            
re.tofile('redata.flt')
im.tofile('imdata.flt')

これで円ができあがり,実部データと虚部データが保存されます。

f:id:sasamon677:20181026012115p:plain

2次元フーリエ変換

続いて保存した実部データと虚部データを使ってフーリエ変換していきます。

import numpy as np
import matplotlib.pyplot as plt

nx = 256
ny = 256

#fltファイルの読み込み
ispace_re = np.fromfile('redata.flt').reshape((nx, ny))
ispace_im = np.fromfile('imdata.flt').reshape((nx, ny))

ispace_data = np.vectorize(complex)(ispace_re, ispace_im)  #実部と虚部を複素数型として統合
ispace_data = ispace_data.reshape((nx, ny)) #1次元データを2次元データに並べ替え

kspace_data = np.fft.fft2(ispace_data)      #2次元フーリエ変換
kspace_data = np.fft.fftshift(kspace_data)  #直流成分が左上の端に来るので,中央に来るようにシフト

k_re = kspace_data.real  #実部のみ抽出
k_im = kspace_data.imag  #虚部のみ抽出

plt.imshow(k_re)

k_re.tofile('redata_fft.flt')
k_im.tofile('imdata_fft.flt')

なんとフーリエ変換が1行で書けてしまいます。恐るべしnumpy!
波数空間(k空間)の実部はこのようになります。

f:id:sasamon677:20181026012515p:plain

2次元フーリエ逆変換

上記と逆のことをすればOK。

import numpy as np
import matplotlib.pyplot as plt

nx = 256
ny = 256

#fltファイルの読み込み
kspace_re = np.fromfile('redata_fft.flt').reshape((nx, ny))
kspace_im = np.fromfile('imdata_fft.flt').reshape((nx, ny))

kspace_data = np.vectorize(complex)(kspace_re, kspace_im)  #実部と虚部を複素数型として統合
kspace_data = kspace_data.reshape((nx, ny)) #1次元データを2次元データに並べ替え

ispace_data = np.fft.ifft2(kspace_data)      #2次元フーリエ変換
#ispace_data = np.fft.fftshift(ispace_data)  #直流成分が左上の端に来るので,中央に来るようにシフト

ispace_re = ispace_data.real  #実部のみ抽出
ispace_im = ispace_data.imag  #虚部のみ抽出
ispace_abs = np.absolute(ispace_re, ispace_im)

plt.imshow(ispace_abs)

ispace_re.tofile('redata_ifft.flt')
ispace_im.tofile('imdata_ifft.flt')

絶対値画像を出してみると,きちんともとの円に戻っていることがわかります。

f:id:sasamon677:20181026012737p:plain

まとめ

もちろんC言語も勉強しておく必要がありますが,Pythonの便利さも(特に専攻実験を受けた方には)伝わったかなと思います。

Python初心者にとっては専攻実験の内容を焼き直すのは結構いい練習になるので,もし興味のある方は遊んでみると面白いかも。

専攻実験をPythonでやってみた(その2)

前回の続きです。
smon.hatenablog.com

今回も,実験テキストでサンプルコードとして載っている部分をPythonで書いてみます。
自分でコーディングしてもらう部分や,考察に関わる部分などは一切触れていません。(授業・実験の公平性を期すためです)

正方形を描く

import numpy as np
import matplotlib.pyplot as plt

nx = 256
ny = 256

ar = np.zeros((nx, ny))

for j in range(ny):
    for i in range(nx):
        if 64 <= i <= 192 and 64 <= j <= 192:
            ar[j][i] = 100
        else:
            ar[j][i] = 0

plt.imshow(ar)

実行すると正方形が表示されます。

f:id:sasamon677:20181025013612p:plain

最初にnumpyとmatplotlibというのをインポートしていますが,numpyは数値計算ライブラリ,matplotlibはグラフ描画などに使うライブラリです。
とくにnumpyは関数や配列などを扱う際には必須のとても重要かつ便利なライブラリ。これのおかげで学術分野でPythonが使いやすくなっています。

また,

a < b < c  # a < b and b < c と同義

のように2つ以上の不等式を一発で書けるのも地味に便利。

サイノグラムの作成

逆投影を行う前のサイノグラムを数値データで作るという作業があるのですが,そのサンプルコードをPythonで書き直すとこんな感じ。

import numpy as np
import matplotlib.pyplot as plt

nx = 256
ny = 256
ntheta = 256

x1 = 32.0
y1 = 32.0
r  = 24.0

sino = np.zeros((nx, ny))

for k in range(ntheta):
    theta = 2.0 * np.pi * k / ntheta
    x0 = x1 * np.cos(theta) + y1 * np.sin(theta)
    
    for i in range(nx):
        x = i - nx/2
        
        if -r <= x-x0 <= r:
            sino[k][i] = np.sqrt(r**2 - (x0-x)**2)
        else:
            sino[k][i] = 0.0

plt.imshow(sino)

実行するとサイノグラムが表示されます。

f:id:sasamon677:20181025235712p:plain

さらにこの配列(sino)をバイナリ形式で保存したければ,

sino.tofile('sinogram.flt')

と最後に1行書くだけでfltファイルとして保存できてしまいます。すばらしい。

専攻実験をPythonでやってみた(その1)

大学でTAをしている専攻実験で,C言語でのプログラミングのテーマを扱っているのですが,Pythonでやってみようという企画です。

興味のある方はぜひ試してみてください。Cより記述量が圧倒的に少なくて済むので「あの実験はなんだったんだ…」という気持ちになるかもしれませんが。

Anacondaをインストールして,統合環境のSpyderを使っています。インストールは「Anaconda」でググってぽちぽちしていくだけなので非常に簡単です。

Hello World

print("Hello world")

なんとこの1行だけで,きちんと

Hello world

と表示されます。

和の計算

1から100,000までの和を求める計算です。

s = 0.0
for i in range(0, 100000):
    i += 1
    s = s + i
print(s)

実行結果はこちら。

5000050000.0

正しく計算できていますね。ちなみにfor文の条件指定は,0から始まる場合は

for i in range(100000):

のように省略して終わりの条件だけ書いてもOKです。

Pythonはインデントの深さでfor文やif文などの範囲が決まるので,カッコとかをいちいち書かなくていいのがありがたいです。
あと変数の宣言とか型指定をしなくてよいのもC言語と大きく違うところ。

追記

ここで出しているのはもともと実験の中でもサンプルコードを写経したりする基本的な部分だけで,これを見たからと言って実験でチートできるわけではないのでご安心(?)を。

横書き文書の句読点はどれが正しいのか

フォントとか文書の体裁とかの類の話は結構好きというかこだわるほうなんですが,その中でも前から気になっていたのは句読点について。

横書き文書ではおもに3通りの組み合わせがある

日本語はもともと縦書きだったわけですが,縦書きの句読点は「、。」一択だと思います。というかそれ以外見たことないです。

しかし,横書きとなるとおもに次の3通りの組み合わせが使われているようです。

①「、。」(点,丸)

②「,。」(カンマ,丸)

③「,.」(カンマ,ピリオド) ※カンマやピリオドは全角

 ここまで挙げると残りの「、.」(点,ピリオド)の組み合わせは?となるかもしれませんが,これはまず見ないので除外します。

ちなみに以前ついったーでアンケートを取ってみたことがあります。

こんなに種類あったっけと思った方はぜひパソコンを開いてみてください。WindowsであればIMEオプションの詳細から句読点の組み合わせを選択できるメニューが見つかるはずです。

f:id:sasamon677:20181020213637p:plain

で,僕はというとここまで読んでいておわかりのとおり②の「,。」を普段使っています。これには(いちおう)大きく2つ理由があります。

文科省文化庁)的には「,。」が正しいことになっている

まずは文部科学省の外局,文化庁が制定している「公用文作成の要領」。ここの中に次のような記述があります。

句読点は,横書きでは「,」および「。」を用いる。

 というわけでどうやら②が国の定める正式な横書き句読点だそうです。実際に文科省の検定教科書なんかを見ると,横書きのものはすべて「,。」で統一されています。教科書使っていたころはこんなこと気にしてなかったですが。

ただ,国の機関のHPなどを見ると,さすがに文化庁は「,。」で統一されていますが,ほかの省庁だと「、。」なんかも見られるのであまり守られている感じはないですね。

僕の大学のHPではページによって両者が混在しているような状況でした。

読点はカンマのほうが文章が締まって見える

もうひとつの理由は,読点が「、」よりも「,」のほうが文章全体が締まって見えるから。

「今回の実験では、前回よりも精度が向上し、以下に示す結果を得た。」

「今回の実験では,前回よりも精度が向上し,以下に示す結果を得た。」

 短い例文だとわかりづらいかもしれませんが,個人的には下のほうがすっきりとして見やすいように思います。

理系の文書では「,.」もよく使われる

理系の文書では,数字やアルファベットなどが多く登場します。そのときはやはり読点が「、」だとどうも座りが悪いんですよね。

「x, yを実数とし、a=1、b=2とする。」

「x, yを実数とし,a=1,b=2とする。」

やはりカンマを用いたほうが数字などとも相性がよい気がします。

さらに理系の文書の場合は,句点も「.」(ピリオド)を使うことが結構あります。理系大学生向けの教科書なんかは「,.」が使われていることが多いですし,論文も投稿先によっては「,.」が指定されているところもあると聞いたことがあります。僕も学部の卒論だけは「,.」で書きました。

普段は「,.」だとちょっと堅苦しい感じがするのと,カンマとピリオドの区別がぱっと見だとつきづらいので使っていません。

おわりに

 句読点も調べてみるといろいろ議論されているようで奥が深そうです。そして僕はいまだにスマホで読点をカンマに設定する方法を知らないのですが(カンマにしたいときはわざわざ記号から入力している),もしあったら教えていただきたいです…

アンケートなどの締切までの期間はどのくらいが適切か

大学での委員会的な活動やイベントの幹事なんかをしていてふと思ったことがこれ。

よくアンケートを取ったり集計したりする機会があったんですが,特に学生側の意見を吸い上げて大学側と交渉するとなるとアンケートの回収率が大事になってきます。

こういうお堅いものだけでなく,LINEの日程調整なんかでも同じことが言えるんじゃないでしょうか。

でも,これがなかなか集まらなくて苦労することが多いんですよね。そこで,アンケートの締切までの期間と回収率についてちょっと気になりました。

締切は思い切って短くしたほうがいいのでは

個人的には「ちょっと短すぎないかな?」ぐらいの締切がちょうどいいのではと思っています。特に最近は紙ベースではなくWebで回答するケースが多くなっているので,「その場で」回答してもらうことが重要なりそう。

急かすのも失礼かなと思って締切まで1週間ぐらいの余裕を持たせることも結構ありますが,そうすると「あとで回答しておけばいいや」となり,そのまま忘れ去られてしまうことが多い気がします。たぶん自分が回答する立場でもそうなってしまいそう。
結局,締切直前にリマインドを送ってからぼちぼち集まりはじめるという流れはあるあるです。

あまりに短すぎてもそもそも周知できないという問題がありますが,思い切って当日中~数日以内という短めの締切にすれば,「いま答えておかなきゃ!」となって回答率も上がるのではないしょうか。

 アンケートの内容などによって事情も異なるかもしれませんが,回答期間と回答率には相関があるような気がするので,調べてみたら面白いかもしれませんね。飲み会の幹事なんかにも応用できそう。

入試年度の表現は統一してほしい

高校生向けの塾でバイトをしているので,センター試験の廃止と,いわゆる新テスト(大学入学共通テスト)の導入というのは結構身近な話題なのですが,文科省大学入試センターの発表やニュースなどを見ていてすごく気になる点があります。それは導入時期の書き方についてです。

新テストは2020年から?それとも2021年から?

新テストの導入に関して,ニュースなどでは「2020年度から」と報じられることが多いと思います。文部科学省大学入試センターの資料でも「平成32年度(=2020年度)から」と書かれています。

もちろん「年度」というのはその年の4月~翌年の3月までのことなので,「2021年1月から」が正解となります(新テストもセンター試験同様1月に実施されることになりました)。

ここまではごく自然な話のように見えますが,実はこれ,非常に誤解を招きやすい表現なんです。実際に2020年1月からだと勘違いされている親御さんもいらっしゃいました。なぜこのような勘違いが生じるのでしょうか?

入試年度は入学年度で表すことが多い

各大学での案内や,予備校での資料などは,基本的に「○○年度入試」というと(「○○年度中に実施する入試」ではなく)「○○年度入学者のための入試」を表すことが多いです。たとえば,いまの受験生がこの冬に臨む入試は,2018年度入試です。

ということは,新テストは「2021年度入試から」導入ということになります。大学入試センターも試験案内にはこのような表現を使っています。それなのに,「2020年度の入試から変わる!」と言われると誤解してしまう人もいるでしょう。

2018年1月のセンター試験を「平成30年度試験」と案内している大学入試センターが,2021年1月の新テストを「平成32年度」と書くのはなんだか変な感じです。

誤解をなくすためにも,(せめて同一機関の中では)入試年度の表現は統一するべきではないでしょうか。