2桁の正の整数を10個乱数により発生させ,それらをカンマで区切ったものを data.csv というファイル名で保存するプログラムを作成しましょう.
77 78 34 89 23 17 23 73 24 71解答例
設問 ii. で書き込んだデータを読み出して,それら値の平均値を求めるプログラムを作成しましょう.
98 85 72 31 41 17 95 81 59 54 Mean of above numbers: 63.3 |
CSVファイルを読み込むと自動的に2次元のリストとして扱うので,今回のように1行しか無い場合でも2次元配列として添字が2つ必要になります.解答例
10 から 20 の範囲の整数を乱数により発生させ,その個数分の2桁の正の整数を乱数で発生させることを5回繰り返し,2次元の乱数リストを作ります.次にそれらの値を CSV ファイルに書き込むプログラムを作成しましょう.結果はEXCELで確認してみてください.
29 59 49 23 16 78 55 30 13 93 32 40 28 19 78 84 94 55 46 37 40 61 85 30 96 45 34 47 17 30 81 85 80 20 55 86 65 79 70 65 24 45 77 73 30 56 49 29 51 58 78 84 37 84 13 37 65 26 89 56 27 44 66 88 35 26 49 50 |
保存するファイル名は適当につけてください.解答例
ここまで CSV データの書き込みや読み出しについて実際に動作の確認を行ってきましたが,例えば EXCEL でファイルを開いたままにしておくと,そのファイルへの上書きは出来ません.また,毎回同じ名前で自動保存を行うと,ファイルが次々と上書きされてしまいます.
そういったことを避けるために,ファイル名に保存した日時をつけておいて,ファイル名が重ならないようにすることが実験データの保存などではよくあります.そのような日時のことを「タイムスタンプ」とも言います.
そこで,今回は実際に1秒に1回乱数を発生させることを10回行い,乱数が発生した時間を一緒に記録するとともに,ファイル名にタイムスタンプをつけることを行ってみましょう.そのためには2つのモジュールを読み込む必要があります.
一つ目は時間を取得する time モジュールです.以下のようにすることで PC の内部の時計の時間を 1970年1月1日からの秒数を取得できます.
now = time.time() |
上のスクリプトは1970年1月1日からの秒数を取得するものです.つぎつぎに時間を計測して引き算すると経過時間が計算できます.
ということで,0から9までの範囲の整数を乱数で10回発生させますが,その際に sleep 関数で 1 秒ずつ遅延させて発生させ,その経過時間と乱数を記録するプログラムを作成しましょう.
time.sleep(1) |
一方,現在の日付と時間は datetime モジュールを使用して取得します.
import datetime time_stamp = datetime.datetime.now().strftime('%Y%m%d_%H-%M-%S') print(time_stamp) |
上のスクリプトを実行すると,結果は以下のように「年月日_時:分:秒」の文字列が生成されます.これをファイル名に付加すればファイル名が重なることを防ぐことができます.
20250605_18-05-17 |
書式は見ればわかると思いますので,自分の好きな形式に変えることも当然可能です.実行結果は以下のようになるものとします.
0.0 5 1.014711618423462 4 2.0240678787231445 5 3.0338213443756104 4 4.079335451126099 5 5.12665057182312 2 6.136709690093994 4 7.197190046310425 7 8.242853164672852 8 9.279803037643433 8 |
解答例