大学生のアルバイトと、大学の学費
僕が住んでいる地域のコロナ感染状況は、都市部よりはマシですが、いろいろなことが止まってしまっています。
それは仕方ないのですが、大学院生としては、アルバイトが止まると生活費や学費などの支払いが辛くなり、本当に死活問題になります。筆者も、収入が1割以下になっているので、大変です。
そんな中、政府や各大学等が支援策を検討、実施してくださっているのは、とてもありがたいことです。
ネットニュースでもそんな情報を見かけるのですが、そこにあるコメントがとても辛辣なものが多いことに驚きました。
独断と偏見が入った要約ですが、
「遊んでるくせに」「さっさと働け」「甘えるな」「勉強してないだろ」
など、本当に心ない声が多かったです。
実際に遊んでいる人も確かにいますが、学びたいことを真面目に勉強している人も多くいます。
大体の大学生の学費や生活費は、仕送りと奨学金とアルバイト代で賄われていると思います。
仕送りは親の収入次第、奨学金は紛れもなく借金です。結果、学生はアルバイトで学費と生活費を稼ぎます。
ここから本題ですが、昔と今は、全く状況が違うと思います。
違うのは、学費と入学金の金額です。
文科省と厚労省の統計情報を使って、国立大の4年間でかかる負担を調べてみました。
具体的には、
年間経費(円)=(在学中の学費4年分+入学金)/4
負担率(%)=年間経費/サラリーマン平均年収×100
で計算しました。
これで、負担率は、
1人の子供で、親の年収に対しどれくらい割合の金額を1年間で大学に支払うか
という指標になるかと思います。
結果が以下の表です。
入学年度:現在年齢(歳):年間経費:平均年収:負担率
H25:25:60.6万円:473万円:12.8%
H15:35:59.9万円:491万円:12.3%
H5 :45:50.2万円:477万円:10.5%
S63:50:38.4万円:394万円:9.7%
S58:55:27.3万円:338万円:8.1%
S53:60:17.7万円:260万円:6.8%
でした。
明らかに、現在の方が負担率が高くなっていることがわかります。そして、その増加した負担の一部は、学生に向いていると思われます。
私立大は調べてないのでわかりませんが、もっと負担率が高いと思われます。
景気、経済等その他の要素は、全く含めていないので一概には言えませんが、ざっと計算するだけでも今、60歳の人の倍近くの負担になっています。
これだけではほとんど何も言えないと思いますが、
(1)アルバイト代激減
(2)ただでさえ、学生の負担が増えている
(3)教育を捨てることは国とその将来を捨てるということ。
ということを、心ないコメントをしている人に、知っていただきたいなと思って、非常に珍しいですが、政治に関わることを発信させていただきました。
(今回の投稿は個人の意見であり、所属機関などは全く関わりありません(公開してませんが)。また、限定的な根拠と情報で解析しています。無断転載や引用等禁止です。コメントは建設的なものをお願いします。喧嘩するつもりは全くありませんし無視します。あまりログインしませんが、最近ネット怖いので、予防線を張っておきます。)
出典
(1)文科省の国交私立大学の授業料等の推移
(2)厚労省の賃金構造基本統計調査
(3)(2)を基にしたサラリーマン年収のとあるサイト
c言語で2次元配列を一気に読み込みさせる方法
お久しぶりです。かずです。
研究の進捗はほとんどないですが、最近、効率化できたprogramがあるので記載。
天文学でカタログをいじるなどのデータサイエンスをしていると、二次元の配列をよく使います。
しかし、その全ての情報を読み込ませようとすると、(一次元)配列もその設定も長ったらしいことになります。
例えば、こんな感じ。
FILE *fp;
if*1==NULL){
printf("ファイル読み込めません\n");
}
for(i=0; fgets(buf1,sizeof(buf1),fp)!=NULL; i++){
fscanf(fp,"%f %f %d %d %f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %f %f",&r2_0_3[i],&r2[i],&pix1[i],&pix2[i],&bunsi[i],&sigmaA1[i],&bunbo[i],&sigmaA2[i],&B1[i],&sigmaB1[i],&B2[i],&sigmaB2[i],&gosa1[i],&gosa2[i],&Con[i],&sgmCon[i],&logCon[i],&sigmaCon[i],&xcl[i],&ycl[i],&xc[i],&yc[i]);
tentai=i;
}
fclose(fp);
とまぁ、こんな感じで、非常に書くのが大変なのです。
それを、
for(i=0; fgets(buf,sizeof(buf),fpcat1)!=NULL; i++){
fscanf(fpcat1,"%s",name[i]);
for(j=0;j<number;j++){
fscanf(fpcat1,"%f",&sample[i][j]);
}
tentai1=i;
}
これでスッキリしました。
この場合は、1列目にchar型のものが入っているので、それだけ別で読み込み、残りの数値は全部float型にはなってしまいますが、「sample[i][j]」という二次元配列にねじ込みます。
よって、i行目のj列目というふうに指定することで、大きな二次元配列でも読み込むことができ、カタログの情報をケチることなく扱うことができます。
ということで、今日はここまで。
今から、久々にGALAXEV使います。
*1:fp=fopen(fname1,"r"
brewでのgnuplotインストールで、--with-aquaterm --with-x11でエラーでる問題
最近、PCの調子が悪く、OSの再インストールを余儀なくされました(泣)
なので、今まで、構成していたソフトだの何だのを再インストールしなければならないのですが、私はメインのplotツールとして、「gnuplot」を使っています。
そして、Mac OSにおけるgnuplotのインストールは、「brew install gnuplot」が最もよく使われると思います。
手順としては、
(1)xcodeインストール
(2)aquatermインストール
(3)x11インストール
この3つは、他のブロガーさんとかを見るとやり方載ってるので、ググれば特に問題なくできました。
そこで、満を持してgnuplotをインストールするために、
(4)「brew install gnuplot --with-aquaterm --with-x11」
と打ち込んだわけです。
すると、インストールされない。なんか、ググると「--with」オプションがダメらしい。
けど、オプション付けないと出力が「qt」でインストールされてしまう。
「export HOMEBREW_NO_AUTO_UPDATE=1」
で、自動アップデートを止めるとできると書いてあった。
(参考:gnuplotがお亡くなりになられた - パンうめぇ)
しかし!!
インストールされない。
3日悩み、ググり続け、見つけたのが、このサイト(https://anatofuz.hatenablog.com/entry/2019/04/28/114844)
brewの拡張機能で、以前のインストールツールを使えば、オプション付けられることが判明。
(1)「brew tap ie-developers/ie」
で、拡張機能をインストール
(2)「brew install ie-developers/ie/gnuplot --with-x11 --with-aquaterm」
でインストールすると、うまくいきました!!
いやー解決解決
そして、拡張した機能は
「brew uninstall ie-developers/ie/gnuplot」で削除可能だそうです。
いやー助かりました(笑)
PythonとC言語
Pythonは、最近注目されているプログラミング言語で、天文業界でも使用者数が急速に伸びてきていると思われるHotな言語です。
一方で、C言語は昔からあるプログラミング言語であることは、みなさんご存知だと思います。
正直、Pythonは非常に便利です。
だって、moduleをimportすれば、複雑な計算や統計量の算出、機械学習までやってくれるんですから。
しかし、ここで、若輩者ですが、私はPythonに頼りきることに警鐘を鳴らします。
非常に便利なPython moduleですが、問題点は中身がブラックボックスであること。
もちろん、中身を確認すれば良いのですが、他の言語を用いて作られていることもあり、さらには、その中の論理を理解しなければならないので骨が折れる(天才は理解してしまうのでしょうが)。
また、いくつかのmoduleは数値等によって、対応しきれない場合があること(統計量を出したり、表の形変えたりなどの時に実際あった)。
そういう場合、Python moduleに頼りきっていると、完全に詰みます。
となった時に、Pythonで純粋な数値計算のプログラムを組みと、なんとものんびりとした計算速度(C言語userの私からするとほんと亀(笑))。
だから、基本はC言語で書けるようにしておいて、計算負荷のかからないものや、Python moduleで上手く行く計算などをPythonでやるのが、最も良い方法なのでは?と個人的には思っています。
要は、プログラミング言語のいいとこ取りをすればいいんです!!
みなさんも、自分に合った方法を見つけてくださいね!!
c言語でメモリ足らなくなった時に、使えるメモリを増やす方法(malloc関数)
c言語で大きな配列を用意しなければならない時に、メモリが足らなくて「Segmentation Fault」と怒られることがよくあります。
これは、そのPCが使えるメモリ量を、宣言した関数で必要なメモリ量が上回ってしまうために起きます(プログラムは間違っていないにも関わらず)。
c言語の良いところは、高速計算が得意な部分です。Pythonとかは便利だけど、やっぱ遅い。多くのサンプルに対して、長時間計算させるプログラムを実行させるには、Pythonよりもc言語が適していると思います。
なのに、大規模配列でメモリ制限を食らうと、c言語の良さが活かしきれません。
それを防ぐために、計算で使っているメモリ以外の記憶領域からメモリを一時的に借りてきて、大規模配列の宣言を可能にする方法をメモしておきます。
結論は
malloc関数を用いることです。
通常、float型で配列を用意する時、
float abc[100]={};
というように用意しますが、
malloc関数を用いる場合、最初の宣言はポインタの状態にします。
float *array;
その後、malloc関数を使って、
array=(float*)malloc(10000000*sizeof(float));
と書くと、大きな配列を用意することができます。
これは、sizeがfloatの配列を1000000個用意してくださいという指示になります。
一時的に借りているだけなので、最後にこのメモリを解放する必要があるため、free関数を使って、
free(array);
とすると、メモリを解放して元の状態に戻すことができます。
ちなみに2次元の配列を用意したいときは、
for文でmallocを回してあげれば良いです。
float *def[10000];
for(j=0;j<10000;j++){
def[j]=(float*)malloc(10000*sizeof(float));
}
とすると、10000×10000の配列が出来上がります。
メモリ解放はfreeを回してあげればいいので、
for(j=0;j<10000;j++){
free(def[j]);
}
とすると、元に戻ります。
これで、大規模な配列を用意し、大きな計算もメモリを気にすることなく実行できます。
(とは言っても限りはありますでしょうから、メモリ節約はできるだけ行いましょう)。
anaconda, Pythonの導入とヒートマップの作成
anaconda, Pythonの導入とヒートマップの作成
忙しい時期がひと段落したので(まだ終わってないけど)、少しずつ最近身につけたスキルを公開して行きます。
目的は、C言語 - gnuplotでは描きにくいヒートマップを、Pythonで描きたいと思ったことです。
まず、anacondaという(Pythonに必要なツールがたくさん入った?、天文系だけ?)ツールをインストールします。
のページからPython 3の方をダウンロードしインストールします。
普通にインストールしてください(特に変わったことはしない)。
その後、ヒートマップを綺麗に書くためのモジュールである「seaborn」をインストールします。anaconda入ってるので、condaコマンドを使います。
conda install seaborn
これで、準備が整ったので、「jupyter notebook」を使ってプログラムを書いていきます。
jupyter notebookとは、ブラウザ上でPythonの編集、実行ができるツールで、簡単にプログラムと実行ができます。
まぁ、騙されたと思って
jupyter notebook
と打ち込んでください(描きたいデータの入ったディレクトリのターミナル上に)
するとブラウザが立ち上がります。
(私の個人的なファイルがいくつか入っていますが、気にせず)
その後、右上の「New」と書かれた下矢印を選択し、Python 3を選択します。
(黒丸のやつ)
すると、こんなのが新しいタブで立ち上がります。
この「In[ ]:」と書かれた部分にPythonのプログラムを書き込んでいくわけです。
実行は「Shift」を押しながら「enter(return)」です。
Inputデータは、
x y z
1 10 100
2 20 200
といった縦に並んだ形を想定しています。
そのため、ヒートマップを描くプログラムの前にピボットを作ります。
----
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.read_csv("map1.txt", dtype="float", sep="\s+")
pivot = pd.pivot_table(data=df, values='z', columns='x', index='y', aggfunc=np.mean)
print(pivot)
----
上から4行がimportしたものです(C言語でいう#include)。
で、5行目がmap1.txtを読み込んで、「df」に入れた。空白でseparateしているので、sep="\s+"です。
6行目がdfをピボットにしてpivotに入れる作業。その際、xを横軸に、yを縦軸に、zを値にするように設定しています
7行目でprintし中身を確認。
シフト押しながらエンターすると、ピボットが出来上がりました。
いよいよ、これを使ってヒートマップを描きます。
----
plt.figure(figsize=(12, 9))
sns.heatmap(pivot, vmin='-12', vmax='-8', cmap='Reds')
plt.savefig('./heatmap_sSFR_all.png')
----
1行目でサイズを決め、2行目でプロット(max=-8,min=-12,カラーは赤)、3行目で保存です。
結果、このようなヒートマップが描けました。
Pythonを導入し始めたところ(ほぼ描画専門として)で、わからないところも多いです。
コメントや、効率的になる方法があれば教えてください。
ちなみに、ヒートマップの軸を反転させる方法ってあるんですかね???