投稿

5月, 2018の投稿を表示しています

[ソフト] gnuplotでcsvファイルをプロットするときの注意点

gnuplot( gnuplot homepage )でcsvファイルのデータをプロットするときに注意が必要な場合があるので、解説していきます。 まず、gnuplotでデータファイルに書かれているデータをプロットするとき、デフォルトではデータはスペース区切りとして扱われます。ただcsvファイルのようにカンマで区切られているもの、またtsvファイルのようにタブで区切られていたりするものは、gnuplotでプロットするときは注意が必要になります。これはgnuplotのデフォルトがスペース区切りであることによるものです。なので、スペース区切りではないファイルをプロットする場合は、区切り方法を変更してやる必要があります。   gnuplotでファイルの区切りを指定するにはカンマ区切りの場合は set datafile separator comma としてやります。なお他の区切りの場合はcommaの部分を "\t" のように指定してやればよいです。 カンマ区切りもそれで表すことができ set datafile separator "," とすることも出来ます。 (なお set datafile separator "comma"  と書いてしまうと失敗します) さてcsvファイルの読み込みについては少しややこしい場合があって、例えば 1, 3 2, 4 3, 1 4, 5 のようにカンマの後ろに1つスペースが入ってる場合には、上で説明した設定をしなくてもプロット出来るようです。一応スペースがあるのでデフォルトの設定通り読み込まれているとは考えられるのですが、 1,3 2,4 3,1 4,5 のようにカンマのみの場合はやはり上記の設定が必要になります。csvファイルというとカンマの後ろにスペースが入っているものが結構多かったりするので、意外に設定が必要なことに気が付かないままgnuplotを使っている場合もあるかも知れません。注意してみてください。 なおgnuplotの区切り方法の設定に関してはgnuplotのマニュアル(バージョン5.2) p123で説明されています。 (バージョン5.0のマニュアルではp117)

[統計] サイコロ5個同時に振ったときの合計の分布

イメージ
先日から少しばかりプログラミングの練習をかねて統計の問題を扱ってみています。まぁ「統計」と言っても最近流行りの「ビックデータ」やらなんやらではなく基礎的な問題から取り組んでみています。 ※先日扱ったネタ↓ [統計] コインで表を1、裏を0とした時に4つ一度に投げた場合に合計がどうなるかの確率を計算 今回は以前のコインネタと同様に、典型的なサイコロを扱った問題を扱ってみます。 問題設定 想定としてサイコロ5個を用います。前回と同様に実際のサイコロではなく、プログラミングで乱数を扱うことで仮想的にサイコロとして扱います。 で、観測する事象は、 一度にサイコロ5個を振ったときの全サイコロの出目の合計 とします。これをn回繰り返してそのとき出た出目の合計をグラフにプロットして可視化していくことにします。可視化することでだいたいの分布を目視で判断出来るだろうなぁ、という狙い。今回はそこまでで、それ以上踏み込んだりはしません(というかあまりネタを詰め込んでやるとめんどうなので…)。 プログラミング 前回は省略しましたが、今回プログラミングしたときのコードは以下のようになります。 import random s = 1000 for i in range(s): ci = i + 1 a1 = random.randint(1, 6) a2 = random.randint(1, 6) a3 = random.randint(1, 6) a4 = random.randint(1, 6) a5 = random.randint(1, 6) asum = a1 + a2 + a3 + a4 + a5 print(ci, asum) プログラミングは前回同様Pythonを使っています。 簡単に解説すると、初めに乱数モジュールを読み込んで、次に変数sに何回繰り返しするか指定してあります。 そしてループをs回繰り返すようにして、乱数で1〜6までの整数を生成してひとまず変数aなんちゃらに入れておきます。この変数aなんちゃらがそれぞれ1個1個のサイコロの出目になります。a1〜a5をサイコロ5個として扱う算段です。 今回の目的として出目の合計を求めたいので、aなんちゃらを足し

[統計] コインで表を1、裏を0とした時に4つ一度に投げた場合に合計がどうなるかの確率を計算

イメージ
プログラミングの練習がてら、統計的な問題の計算をやってみることにしました。 問題 問題は コインを4つ用意  コインの表を「1」、裏を「0」とする 4つのコインを一度に投げる 4つのコインの裏表を判定して合計を求める としました。 解説 4つのコインの裏表の組み合わせは「0, 1」で表すと(sumは4つのコインの合計) 0, 0, 0, 0 : sum 0 1, 0, 0, 0 : sum 1 0, 1, 0, 0 : sum 1 0, 0, 1, 0 : sum 1 0, 0, 0, 1 : sum 1 1, 1, 0, 0 : sum 2 1, 0, 1, 0 : sum 2 1, 0, 0, 1 : sum 2 0, 1, 1, 0 : sum 2 0, 1, 0, 1 : sum 2 0, 0, 1, 1 : sum 2 1, 1, 1, 0 : sum 3 1, 1, 0, 1 : sum 3 1, 0, 1, 1 : sum 3 0, 1, 1, 1 : sum 3 1, 1, 1, 1 : sum 4 となります。 全事象の数は2^4 = 16 それぞれの事象を合計(sum)ごとに分けると sum 0 : 1 (6.25%) sum 1 : 4 (25.00%) sum 2 : 6 (37.50%) sum 3 : 4 (25.00%) sum 4 : 1 (6.25%) となります。合計が2になる確率が最も高く、続いて合計1と3、そして合計1と4が最も低い確率となります。 これを実際にコインを投げてこの確率になるか確かめるわけですが、実際にコインを投げ続けるのは大変過ぎるのでプログラミングを組んでコンピューター上で仮想実験することにしました。 プログラミング プログラミング言語はPythonを用いました。 コインを投げるにあたっては、randomモジュールのrandint()関数で整数0, 1のいずれかが出る乱数を用いて対応することにしました。 手順としてはまずコインを1回投げる毎に合計を求めます。そして合計0〜4の5つのうちそれぞれ何回出ているのかを求めて、出た回数の確率を求めていきます。 例えば1投目で合計0となったとすれば、 sum 0 :

Kindle Paperwhiteのソフトウェアバージョンを5.9.5.1に上げてみま…すでに上がってた

以前にブログでKindle Paperwhiteのソフトウェアバージョンを上げた件について書いてきました。 Kindle Paperwhiteのソフトウェアバージョンを5.9.4に上げてみました Kindle Paperwhiteのソフトウェアバージョンを5.9.5に上げてみました で、前回のバージョンアップからそれほど日が経ってはいないのですが、ふと気になって調べてみると、 5.9.5.1 というバージョンが出ていました。 アップデートの内容としては「パフォーマンスの改善」のみのようです。 さてとりあえずダウンロードしてアップデートしようと思って試してみたのですが、ファイルを本体に転送するとなぜかエラーが出て来てしまいました。ダウンロード失敗してファイル破損でも起こしてるんだろうかと思い、もう一度ダウンロードし直してもダメ。 はて、これはどういうことだろう?と思ったのですが、ここでKindle本体でバージョン表示させて確認してみると、すでに「5.9.5.1」にバージョンが上がってました。たぶん自動でアップデートされたんでしょう。ファイル転送してもエラーが出たのはすでに最新版が適用されていたからかと。 何はともあれアップデートは済んでいたので、まぁ良しとしましょう。

Calc(LibreOffice) : 1つのセル内において改行で分けられているデータを2つのセルに分離する方法

イメージ
表計算のデータで、1つのセル内に改行で分けられている2つのデータが入っているというケースがあります。 例えば以下のような地図データの緯度経度が一緒になっているケース。 (例として分かりやすく1つだけ抜き出し、フォントも大きくして見やすくしてあります) このままでは計算や他にデータを使いたい場合に取り回しが悪いので、これを「緯度」と「経度」で2つのセルにそれぞれを分離したいと思います。 LibreOfficeのCalcにはデータを分離する「テキストをデータへ」という機能があります。それを用いると一応分離は出来るのですが、分離後は一つ下のセルに分離されたデータが移行します。この例のようにセル一つだけ扱う場合は特に問題はないですが、これが縦にデータがいくつも並んでいるケースでは都合が悪いです。出来れば対象のセルの右側のセルに分離したデータを移行したいので、ここではその方法について解説していきます。 なお、ここで用いるLibreOffice Calcのバージョンは5.1.6.2です。 まず「テキストをデータへ」という機能ですが、区切りに見なす記号として改行記号「\n」を入力してもそれでは分離されないようです。(なぜか縦のセルにすることは出来る模様) そこで、手順を変えて別の方法で分離することを考えます。 Calcには文字の検索・置換機能があるので、まずこれを利用します。以下のスクリーンショットのように 検索する文字列に「\n」 置換後の文字列に「 」(スペース1つ) を入力します。 置換を実行すると以下のようになります。ここでは単に改行記号をスペースに置き換えただけなので、この段階では1つのセルに2つのデータが入ったままです。 次に「テキストをデータへ」を用います(メニューバーの「データ」から選択)。ここで以下のスクリーンショットのように、 「次の記号で区切られたフィールド」を選択して「スペース」にチェックを入れます。 OKを押すと以下のようにちゃんと右側のセルに2つ目のデータを分離して移行させることが出来ます。 もし右側のセルに空きが無い場合は、「列の挿入」で空きセルの列を増やしてやればよいでしょう。 とりあえず、話としては 改行記号をスペースに置換する スペースを区切りとして2つのセル

スポンサーリンク