Kevin's Data Analytics Blog

データサイエンティスト、AIエンジニアを目指す方に向けて情報発信していきます。

DB Browser for SQLiteにCSVファイルをインポート

DB Browser for SQLiteCSVファイルをインポートする方法を紹介します。
SQLの書き方を勉強・実習するにあたって、一からデータベースを構築するよりも、CSVファイルをデータベースに読み込む方が簡単なのでおススメです。
CSVファイルをインポートするにあたって、日本語のファイルを扱う場合の文字コードと、データの型に注意が必要ですので、備忘録を兼ねて手順をまとめました。

データベースの作成

「新しいデータベース」をクリックして、データベースファイルの保存先を指定します。
f:id:dskevin:20220213214029p:plain:h320

テーブルの作成は「キャンセル」をクリックします。
f:id:dskevin:20220213214201p:plain:h320

CSVファイルのインポート

「ファイル」→「インポート」→「CSVファイルからテーブルへ」をクリックします。
f:id:dskevin:20220213214332p:plain:h320

読み込み対象のCSVファイルを選択します。
f:id:dskevin:20220213214436p:plain:h320

テーブル名には、ファイル名がデフォルトで設定されます。
日本語のデータを含むファイルをインポートする場合、文字化けが発生することがあります。
f:id:dskevin:20220213214714p:plain:h320

エンコードで「Shift_JIS」を選ぶと多くの場合に直ります。
f:id:dskevin:20220213214847p:plain:h320

f:id:dskevin:20220213214926p:plain:h320

また、このとき、必要に応じて「先頭行をカラム名に」をチェックします。

データの型変更

データを読み込む時に、ツールが自動でデータの型を判定します。間違えている場合は、手動で直す必要があります。今回の例では、「年俸」のカラムが文字列型と判定されました。
f:id:dskevin:20220219114114p:plain:h320

対象のテーブル名を選択し、「テーブルを変更」をクリックします。
f:id:dskevin:20220219114237p:plain

テーブル定義の編集画面が表示されますので、データの型を修正します。整数型の「INTEGER」を指定します。
f:id:dskevin:20220219114346p:plain:h320

SQL実行

SQL実行」タブを開いて、SQL文を記述します。
年俸のデータ型が正しく指定できていることを確認するために、数値の比較を条件に入れてクエリを実行します。
なお、テーブル名には、CSVファイルのファイル名(インポート時のデフォルト値)を指定します。また、日本語のカラム名を指定する場合は、ダブルクォーテーションで囲む必要があります。

SELECT * FROM npb_players
WHERE "年俸">50000

f:id:dskevin:20220219114616p:plain:h320

正しくSQL実行できました。

まとめ

DB Browser for SQLiteCSVファイルをインポートする方法を紹介しました。
これから、SQLについての勉強・スキルアップをしたい方にとって、本記事が少しでもお役に立てば幸いです。
今回も、実際にPCで操作している様子を動画にまとめました。よければこちらもご確認ください。
youtu.be

最後まで読んでいただき、ありがとうございました!

DB Browser for SQLiteのセットアップ方法・使い方

今回は、DB Browser for SQLiteのセットアップ方法と使い方について紹介します。

SQLiteとは

SQLiteは、以下の特徴を持ったデータベースです。
・設定が簡単
・フリーで使用することができる
・PC上のアプリケーションとしても動作可能(サーバの用意が不要)
そのため、簡易的にデータベースを構築したい場合や、SQLの練習環境として、SQLiteがおすすめです。

DB Browser for SQLiteとは

DB Browser for SQLiteは、SQLiteのデータベースをGUIで操作することができるツールです。テーブルを作成したり、SQL文を実行することができます。
f:id:dskevin:20220211171128p:plain:h320

セットアップ

インストーラのダウンロード

以下のサイトから、PC環境に合わせてインストーラをダウンロードします。
https://sqlitebrowser.org/dl/

f:id:dskevin:20220211221305p:plain:h320

インストール

インストーラを起動します。「Next」をクリック。
f:id:dskevin:20220211221506p:plain:h320

「I accept ...」にチェックを入れて、「Next」をクリック。
f:id:dskevin:20220211221809p:plain:h320

必要に応じて、ショートカットの作成をチェックして、「Next」をクリック。
f:id:dskevin:20220211222112p:plain:h320

カスタム設定は特に不要ですので、「Next」をクリック
f:id:dskevin:20220211222257p:plain:h320

「Install」をクリックして、インストールします。
f:id:dskevin:20220211222743p:plain:h320

使い方

データベース・テーブルの作成

プログラムを起動して、「新しいデータベース」をクリックします。
f:id:dskevin:20220211222937p:plain:h320

データベースファイルの保存先を指定します。
f:id:dskevin:20220211223115p:plain:h320

テーブルの定義画面が表示されますので、テーブル名、フィールド名、フィールドの属性値を設定します。
f:id:dskevin:20220211223305p:plain:h320

「データ閲覧」タブから、挿入ボタンをクリックし、データを挿入します。
f:id:dskevin:20220211223507p:plain:h320

「変更を書き込み」をクリックして、データを保存します。
f:id:dskevin:20220211223726p:plain:h320

SQLの実行

SQL実行」タブから、SQLを記述して、実行ボタンをクリックします。
f:id:dskevin:20220211223919p:plain:h320

先ほど作成したテーブルからデータを取得できました。
f:id:dskevin:20220211224105p:plain:h320

まとめ

SQLiteおよび、DB Browser for SQLiteについて紹介しました。昨今のデジタル化時代においてデータを利活用することが求められる中、データベースから必要なデータを抽出するスキルは、必要不可欠なスキルになると感じています。これから、SQLについての勉強・スキルアップをしたい方にとって、本記事が少しでもお役に立てば幸いです。
今回も、実際にPCで操作している様子を動画にまとめました。よければこちらもご確認ください。
youtu.be

最後まで読んでいただき、ありがとうございました!

[機械学習 実践]プロ野球選手の年俸を査定するAIを作成|LightGBM|Machine Learning|Python

機械学習の実践例として、プロ野球選手の成績と年俸のデータを使って、機械学習モデルの作成・予測実行してみました。

イメージは以下のとおりです。
f:id:dskevin:20220116104836p:plain:h320
f:id:dskevin:20220116104850p:plain:h320
f:id:dskevin:20220116104905p:plain:h320

準備

lightgbmパッケージのインストール

LightGBMを使うためには、lightgbmパッケージが必要です。インストールしていない場合は、コマンドプロンプトを開いて、以下のコマンドを実行するとインストールできます。

pip install lightgbm

sweetvizパッケージのインストール

データの可視化で、Sweetvizを使用します。日本語データを扱うための設定が若干複雑でしたので、今回は説明は割愛します。(別の機会に紹介します。)
もし、インストール済でない場合、機械学習モデルの作成自体はできますので、スキップしても大丈夫です。

データの取得

機会学習に必要な数値を以下のサイトから取得し、CSVファイルに保存します。欠損値データの除去などの前処理も事前に行います。
プロ野球データFreak

実装

1. ライブラリのインポート

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# データ可視化用ライブラリ →未インストールの場合はインポート不要
import sweetviz as sv
sv.config_parser.read('sweetviz_setting.ini')

# 機械学習用ライブラリ LightGBM
import lightgbm as lgb

# テストデータ分割用ライブラリ
from sklearn.model_selection import LeaveOneOut

# 評価用ライブラリ
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

2. データの読み込み・確認

pitcher = pd.read_csv('../data/npb_stats_salary_pitcher.csv', encoding='cp932')
pitcher
pitcher[pitcher['年']==2021]
# Sweetviz →未インストールの場合はスキップ
sv_out = sv.analyze(pitcher)
sv_out.show_html('../output/sv_report.html')

3. 機械学習の適用

# 説明変数用カラム
X_columns = pitcher.columns[3:-1]
X_columns
# 説明変数
X = pitcher[X_columns].copy()
# 目的変数
y = pitcher['年俸']
X
y
# モデル学習、予測
# モデルのインスタンスの作成
model = lgb.LGBMRegressor()

# Leave one out法で、モデルの学習と予測を繰り返す
loo = LeaveOneOut()
actual = []
pred = []
cnt = 0
for train_index, test_index in loo.split(X):
    # データの分割
    x_train, x_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y[train_index], y[test_index]
    
    # モデルの学習
    model.fit(x_train, y_train) # モデルの学習

    # テストデータの予測
    y_pred = model.predict(x_test)
    actual.append(y_test.values[0])
    pred.append(y_pred[0])

    # 340人分(2021年データ)で終了
    cnt+=1
    if cnt == 340:
        break
# 散布図を描画(実値 vs 予測値)
plt.plot(actual, actual, color = 'red', label = 'x=y') # 直線y = x
plt.scatter(actual, pred) # 散布図のプロット
plt.xlabel('y_actual') # x軸ラベル
plt.ylabel('y_pred') # y軸ラベル
plt.title('y_actual vs y_pred') # グラフタイトル
# モデル評価
# rmse: 平均二乗誤差の平方根
mse = mean_squared_error(actual, pred)
rmse = np.sqrt(mse)
print('RMSE :',rmse)

# r2: 決定係数
r2 = r2_score(actual,pred)
print('R2 :',r2)

4. 結果の出力

# 2021年の340人分に結合
pitcher_v2 = pitcher.head(340).copy()
pitcher_v2['年俸(AI)'] = pred
pitcher_v2
# CSVファイルに出力
pitcher_v2.to_csv('../output/npb_stats_salary_pitcher_output.csv', index=False, encoding='cp932')

結果

機械学習で算出した年俸額の上位5選手(投手・野手)は、以下のとおりでした。

投手

選手名チーム背番号年齢年数防御率試合勝利敗北セーブホールド勝率打者投球回被安打本塁打与四球死球奪三振失点自責点WHIPDIPS年俸年俸(AI)
田中 将大E183383.012349000.308624155.21311729512654521.033.589000034551
大野 雄大D2233112.9522711000.389566143.11211226211848471.033.133000031805
平野 佳寿B1637132.346132930.2516343304903711110.913.241500031591
則本 昂大E143193.1723115000.688584144.21231835315256511.093.423000029512
マルティネスH373141.62194000.692553140.2108638513825251.042.631000027793

野手

選手名チーム背番号年齢年数打率試合打席数打数安打本塁打打点盗塁四球死球三振犠打併殺打出塁率長打率OPSRC27XR27年俸年俸(AI)
鈴木 誠也C12790.3171325334351383888987688070.4330.6391.07210.039.773100036256
柳田 悠岐H933110.314159351615528806696122060.3880.5410.9297.897.596100034681
島内 宏明E3531100.25714159948612521962978872150.3850.4770.8636.396.381200034395
丸 佳浩G832140.26511845739210423555630120050.3650.4950.866.56.494500033422
山田 哲人S129110.2721375814931343410147651000100.370.5150.8856.716.845000030991
※実際には、様々な要素が年俸に反映されていると思いますので、こちらの結果自体は参考値として捉えていただけると助かります。

まとめ

プロ野球選手の成績・年俸を題材として機械学習の使い方を紹介しました。Pythonで用意されているライブラリ関数を使うことで、複雑なプログラミング無しで機械学習を使った処理が実装できると感じていただけたと思います。今回扱ったLightGBM以外にも、たくさんの機械学習アルゴリズムPythonで用意されていますが、使い方は同様です。今後また紹介していきたいと思います。

今回の内容を動画でも紹介していますので、もしよければこちらもご覧ください。
youtu.be

本記事が皆様のお役に立てば幸いです。最後まで読んでいただき、ありがとうございました!

jQuery csv2tableの使い方

今回は、csv2tableというjQueryプラグインを使って、CSVファイルをWebブラウザ上で表示する方法を紹介します。

JavaScript/jQuery

JavaScriptを使うと、Webページ上の表示をユーザの操作に合わせて動的に変えられます。さらに、jQueryというJavaScriptのライブラリを使用することで、複雑な処理を簡単に実装できます。

jQuery csv2tableの取得

以下のページからcsv2rableのjsファイルを取得します。
https://jsgt.org/lib/jquery/plugin/csv2table/v002/test.htm

「Source」を右クリックしてファイルを保存します。
f:id:dskevin:20211220174226p:plain:h320

HTMLの編集

csv2rableを使って、CSVファイルの読み込みと表示を行います。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="./jquery.csv2table-0.02-b-4.4.js" type="text/javascript" charset="utf-8"></script><!--jsファイルを指定-->
</head>
<body>
    <div id="view0"></div>
    <script>
    $(function(){
      $('#view0').csv2table('./npb_stats_hitter_utf8.csv'); //CSVデータを指定
    });
    </script>
</body>
</html>

HTML表示

Webブラウザで表示したイメージです。
f:id:dskevin:20211220175305p:plain:h320

まとめ

jQueryを使うことで、自分でJavaScriptで複雑な処理を書かずに、簡単に実装できました。今後も便利なプラグインがあれば紹介していきたいと思います。
また、今回も環境の設定方法から実装までの様子を動画にまとめました。よければこちらもご確認ください。
youtu.be

本記事が皆様のお役に立てば幸いです。最後まで読んでいただき、ありがとうございました!

Webページ上でCSVデータを表示・検索するHTML/JavaScript

CSVファイルから読み込んだテーブルデータをWebページ上に表示して、テーブル内の文字を検索するための、HTML/JavaScriptを紹介します。
f:id:dskevin:20211128172158p:plain:h160

HTMLコード

以下の処理を行います。

  • 検索ボックスで文字列を受取る
  • JavaScriptを実行
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>NPB 投手成績一覧 2009年~2021年</title>
</head>
<body>
    <h1>NPB 投手成績一覧 2009年~2021年</h1>
    <!--検索入力-->
    <form action="#">
    <input type="text" name="search" value="" id="search" />
    </form>
    <!--テーブル表示-->
    <table border="1" id="result">
        <tbody id="data_csv"></tbody>
    </table>
    <!--JavaScript-->
    <script type="text/javascript" src='./table_data_search.js'></script><!--JavaScriptを指定-->
    <script>
        getCsvData('http://127.0.0.1:5500/npb_stats_pitcher_utf8.csv');<!--CSVデータを指定-->
    </script>
</body>
</html>

 

JavaScriptコード

以下の処理を行います。

  • CSVファイルの読み込み
  • HTMLのテーブル形式に変換
  • レコード検索機能
// レコード検索処理
window.addEventListener( "DOMContentLoaded", 
    function(){
        const search = document.forms[ 0 ].search;
        const table = document.querySelector( "table" );
        const nohit = table.parentNode.insertBefore(document.createElement( "div" ), table.nextNode);
        nohit.textContent = "該当なし";
        nohit.style.display = "none";
        search.oninput = function(){
            const key = search.value.replace( /([\\\*\+\.\?\{\}\(\)\[\]\^\$\-\|\/])/g, "\\$1" );
            let hit = 0;
            [].forEach.call( table.rows,
                function( row, index ){
                    if( index==0 ){ return false }
                    row.style.display = [].some.call( row.cells,
                        function( cell ){
                            return ( new RegExp( key ) ).test( cell.textContent );
                        }
                    ) ? "table-row" : "none" ;
                    row.style.display=="table-row" ? hit++ : hit ;
                }
            );
            nohit.style.display = hit ? "none" : "block" ;
        }
    },
    false
);

const outputElement = document.getElementById('data_csv');

// CSVデータの読み込み
function getCsvData(dataPath) {
    const request = new XMLHttpRequest();
    request.addEventListener('load',
        (event) => {
            const response = event.target.responseText;
            convertArray(response);
        }
    );
    request.open('GET', dataPath, true);
    request.send();
}

// CSVデータをHTMLのテーブル形式に変換
function convertArray(data) {
    const dataArray = [];
    const dataString = data.split('\n');
    for (let i = 0; i < dataString.length; i++) {
        dataArray[i] = dataString[i].split(',');
    }
    let insertElement = '';
    dataArray.forEach(
        (element) => { insertElement += '<tr>';
            element.forEach(
                (childElement) => { insertElement += `<td>${childElement}</td>` }
            );
            insertElement += '</tr>';
        }
    );
    outputElement.innerHTML = insertElement;
}

 

表示イメージ

検索ボックスに値を入れるとその文字列を含む行が表示されます。




チーム背番号選手名防御率試合勝利敗北セーブホールド勝率打者投球回被安打本塁打与四球死球奪三振失点自責点WHIPDIPS
2021巨人11平内 龍太14.4030100.000245.082205882.007.52
2021巨人12デラロサ2.8346107131.00017541.13831223415131.213.43
2021巨人15サンチェス4.68145500.50031773.082132335440381.445.02
2021巨人17大竹 寛3.8640001.000112.150000112.143.12
2021巨人18菅野 智之3.19196700.462465115.2901525710241410.993.85
2021巨人19山崎 伊織------------------
2021巨人20戸郷 翔征4.27269800.529639151.21301958613875721.244.16
2021巨人21井納 翔一14.4050100.000265.0113105882.409.52
2021巨人23野上 亮磨1.6590114.0006316.1816015330.863.00
2021巨人26今村 信貴2.71173400.42927463.06652235921191.403.47
2021巨人30鍵谷 陽平3.1959301151.00018242.13951803019151.354.51
2021巨人33太田 龍------------------
2021巨人35桜井 俊貴5.402910061.00014533.13571612020201.536.09
2021巨人41中川 皓太2.475843125.57122054.24721054917151.042.57
2021巨人42メルセデス3.77177500.58336986.09652257436361.373.06
2021巨人45畠 世周3.075243111.57139096.283132549737331.123.73
2021巨人46鍬原 拓也------------------
2021巨人47髙橋 優貴3.392711900.550598140.2125186127657531.325.00
2021巨人49ビエイラ2.935603191.00022855.13832616418181.162.98
2021巨人50戸根 千明4.822920101.00016137.12542433620201.314.75
2021巨人53高梨 雄平3.695522120.50017139.03422154717161.413.07
2021巨人54直江 大輔4.9140110.0005111.0151424661.735.21
2021巨人56伊藤 優輔------------------
2021巨人57高木 京介4.421510011.0008118.12217015991.583.34
2021巨人58山本 一輝------------------
2021巨人59田中 豊樹2.84390002.00015238.02252013713121.114.38
2021巨人62横川 凱3.3820100.000378.092209431.384.87
2021巨人63古川 侑利18.0010000.000112.031310443.0014.12
2021巨人64大江 竜聖4.094700013.00014533.02921722316151.394.15
2021巨人90戸田 懐生0.0030000.000123.030100001.334.12
2021巨人91井上 温大------------------
2021巨人92沼田 翔平7.7120000.000112.131103221.716.12
2021巨人95堀岡 隼人------------------
2021巨人99山口 俊3.56152800.20033778.16663738334311.313.49


 
なお、 上記のデータは、以下のサイトから取得しました。
読売ジャイアンツ投手成績 - プロ野球データFreak

まとめ

JavaScriptを使うことで、Webページ上の表示をユーザの操作に合わせて動的に変えられます。このとき、別のページに遷移する場合に比べて、動作が軽いのが特徴です。実際の業務において、社内の情報共有サイトにデータを載せる際に、このような検索機能を付けたところ好評でした。

また、これからHTML/JavaScriptを使ってみたいという方に向けて、環境の設定方法から実装までの様子を動画にまとめました。よければこちらもご確認ください。
youtu.be


本記事が皆様のお役に立てば幸いです。最後まで読んでいただき、ありがとうございました!

確率分布の期待値・分散・母関数まとめ~離散分布~

今回は、統計検定1級/準1級の対策として、各確率分布の期待値・分散・母関数について整理しました。

1. 離散一様分布

定義

離散型の確率変数 𝑋 について、全ての事象の起こる確率が等しい分布のこと

確率関数

 P(X=x)=\dfrac{1}{n}

期待値

 E(X)=\dfrac{n+1}{2}

分散

 V(X)=\dfrac{n^{2}-1}{12}

確率母関数

 E(t^{X})=\dfrac{t(1-t^{n})}{n(1-t)}

積率母関数(モーメント母関数)

 E(t^{tX})=\dfrac{e^{t}(1-e^{nt})}{n(1-e^{t})}

2. ベルヌーイ分布

定義

確率変数が 2 つの値(0,1)しか取らない離散確率分布のこと。確率 𝑝 で 1 となり、確率 1−𝑝 で 0 となる。

確率関数

 P(X=x)=p^{x}(1-p)^{1-x}

期待値

 E(X)=p

分散

 V(X)=p(1-p)

確率母関数

 E(t^{X})=1-p+tp

積率母関数(モーメント母関数)

 E(t^{tX})=1-p+pe^{t}

3. 二項分布

定義

確率pのベルヌーイ試行をn回行ったときに、ある事象が何回起こるかを表す確率分布のこと。 ※n=1のとき、ベルヌーイ分布になります。

確率関数

 P(X=x)={}_n C_x p^{x} (1-p)^{n-x}

期待値

 E(X)=np

分散

 V(X)=np(1-p)

確率母関数

 E(t^{X})=(pt+1-p)^{n}

積率母関数(モーメント母関数)

 E(t^{tX})=(pe^{t}+1-p)^{n}

4. ポアソン分布

定義

単位時間あたりに平均 λ 回起こる事象が、単位時間あたりに 何回起こるかを表す確率分布のこと

確率関数

 P(X=x)=e^{-\lambda} \dfrac{\lambda ^x}{x!}

期待値

 E(X)=\lambda

分散

 V(X)=\lambda

確率母関数

 E(t^{X})=e^{\lambda(t-1)}

積率母関数(モーメント母関数)

 E(t^{tX})=e^{\lambda(e^{t}-1)}

5. 超幾何分布

定義

成功状態をもつ母集団から非復元抽出したときに成功状態がいくつあるかという確率を与える離散確率分布の一種である。(引用:Wikipedia

確率関数

 P(X=x)= \dfrac{{}_M C_x \cdot {}_{N-M} C_{n-x}} {{}_N C_n}

期待値

 E(X)= n\dfrac{M}{N}

分散

 V(X)= n\dfrac{M}{N}\biggl(\dfrac{(N-n)(N-M)}{N(N-1)}\biggr)

確率母関数

簡単な式で表せない

積率母関数(モーメント母関数)

簡単な式で表せない

6. 幾何分布

定義

成功確率pのベルヌーイ試行を繰り返し実行し、初めて成功するまでの失敗回数をXとしたとき、Xは幾何分布に従う。
※初めて成功するまでの試行回数(失敗回数+1)と定義する場合もある

確率関数

 P(X=x)=p(1-p)^{x}

期待値

 E(X)=\dfrac{1-p}{p}

分散

 V(X)=\dfrac{1-p}{p^{2}}

確率母関数

 E(t^{X})=\dfrac{p}{1-t(1-p)}

積率母関数(モーメント母関数)

 E(t^{tX})=\dfrac{p}{1-e^{t}(1-p)}

7. 負の二項分布

定義

成功確率pのベルヌーイ試行を繰り返し実行し、r回成功するまでの失敗回数をXとしたとき、Xは負の二項分布に従う。※r=1のとき、幾何分布になります。

確率関数

 P(X=x)={}_{x+r-1} C_x p^{r}(1-p)^{x}

期待値

 E(X)=\dfrac{r(1-p)}{p}

分散

 V(X)=\dfrac{r(1-p)}{p^{2}}

確率母関数

 E(t^{X})=\biggl(\dfrac{p}{1-t(1-p)}\biggr) ^{r}

積率母関数(モーメント母関数)

 E(t^{tX})=\biggl(\dfrac{p}{1-e^{t}(1-p)} \biggr) ^{r}

導出方法

多くの参考書において、これらの導出は、数式の途中計算や公式等の前提知識の説明が省略されていることが多いため、理解に時間がかかると感じていました。
今回、自分用に整理したものを、動画にしてみました。途中の流れを細かく説明しています。必要に応じてご確認ください。
youtu.be

対策本

統計検定1級/準1級の対策本としては、以下の書籍があります。

こちらの書籍は、検定の範囲内のトピックが幅広く網羅されていますが、数式や解説が省略されている個所が多い印象です。あくまでも、出題範囲のトピックを確認するための用途として使用し、詳細の内容はインターネット等で確認し理解を深めるのが良いと思います。

まとめ

確率分布の期待値・分散・母関数について整理しました。また、導出方法についてまとめた動画および、対策本について紹介しました。
本記事が、統計検定の対策を進める上で、お役に立てば幸いです。

Pythonでコイントスをするアプリを作ってみた|Pyinstaller

Pythonコイントスをするアプリを作ってみましたので、画像イメージとソースコードをこちらに残します。

画面イメージ

f:id:dskevin:20210929215023p:plain
f:id:dskevin:20210929215044p:plain
f:id:dskevin:20210929215058p:plain

ソースコード

cointoss.py

#!/usr/bin/env python
# coding: utf-8

import os
import sys
import time
import random

title='''
                            ■        
         ■                  ■          
                            ■          
    ■■■■ ■ ■■■■  ■■  ■ ■■■  ■  ■■■■    
    ■    ■ ■■  ■■  ■ ■■  ■■ ■ ■■  ■    
    ■    ■ ■   ■   ■ ■    ■ ■ ■   ■■   
     ■■  ■ ■   ■   ■ ■    ■ ■ ■■■■■■   
       ■ ■ ■   ■   ■ ■    ■ ■ ■        
    ■  ■ ■ ■   ■   ■ ■■  ■■ ■ ■■       
    ■■■■ ■ ■   ■   ■ ■■■■■  ■  ■■■■    
                     ■                 
                     ■                 
                     ■                 
                                           
             ■                             
                       ■                   
 ■■■■  ■■■■  ■ ■ ■■■  ■■■■  ■■■■  ■■■■ ■■■■
■■  ■ ■■  ■■ ■ ■■  ■■  ■   ■■  ■■ ■    ■   
■     ■    ■ ■ ■    ■  ■   ■    ■ ■    ■   
■     ■    ■ ■ ■    ■  ■   ■    ■  ■■   ■■ 
■     ■    ■ ■ ■    ■  ■   ■    ■    ■    ■
■■  ■ ■■  ■■ ■ ■    ■  ■■  ■■  ■■ ■  ■ ■  ■
 ■■■■  ■■■■  ■ ■    ■   ■■  ■■■■  ■■■■ ■■■■
                                           
'''


omote='''
      ■■■■■■■■■■■■■■■
    ■■■             ■■■
   ■■                 ■■
  ■■        ■■         ■■
  ■         ■■          ■
 ■   ■■■■■■■■■■■■■■■■    ■
 ■          ■■           ■
 ■    ■■■■■■■■■■■■■■     ■
 ■          ■■           ■
 ■          ■■           ■
 ■  ■■■■■■■■■■■■■■■■■■   ■
 ■         ■■■■          ■
 ■       ■■■  ■   ■■     ■
 ■      ■■    ■■ ■■      ■
 ■   ■■■■■     ■■■       ■
 ■  ■■■  ■      ■■       ■
 ■       ■    ■  ■■      ■
 ■       ■■■■■■   ■■■    ■
 ■    ■■■■■■       ■■■   ■
  ■    ■             ■■ ■
  ■■                   ■■
   ■■                 ■■ 
    ■■■             ■■■
      ■■■■■■■■■■■■■■■
'''

ura='''
      ■■■■■■■■■■■■■■■     
    ■■■■■■■■■■■■■■■■■■■   
   ■■■■■■■■■ ■■■■■■■■■■■
  ■■■■■■■■■■  ■■■■■■■■■■■
  ■■                  ■■■
 ■■■■■■■■■■■■■■■■■■■■■■■■■
 ■■■■■              ■■■■■■
 ■■■■■  ■■■■  ■■■■  ■■■■■■
 ■■■■■              ■■■■■■
 ■■■■■  ■■■■  ■■■■  ■■■■■■
 ■■■■■              ■■■■■■
 ■■■■■■■■■■■  ■■■■■■■■■■■■
 ■■■■                ■■■■■
 ■■■■■■■■■■■  ■■■■■■■■■■■■
 ■■■                  ■■■■
 ■■■■■■■■■  ■  ■■■  ■■■■■■
 ■■■■■■■   ■■■  ■   ■■■■■■
 ■■■      ■■■■■   ■■■■■■■■
 ■■■ ■■■■ ■■   ■   ■■■■■■■
  ■■■■■      ■■■■■    ■■■
  ■■■■■ ■■■■■■■■■■■■■■■■■
   ■■■■■■■■■■■■■■■■■■■■■ 
    ■■■■■■■■■■■■■■■■■■■
      ■■■■■■■■■■■■■■■
'''

def toss():
    for i in range(4):
        # print("コイントス中:")
        print(" ")
        print(omote)
        time.sleep(0.1)
        os.system('cls')
        print(" ")
        print(ura)
        time.sleep(0.1)
        os.system('cls')

def main():
    counter_total = 0
    counter_omote = 0
    counter_ura = 0
    while(1):
        print(title)
        print('')
        print('Enterキーを押してコイントスを開始します。終了するときは、"q"キーを押します')
        x = input()
        os.system('cls')
        if x == 'q':
            break
        else:
            toss()
            counter_total += 1
            result = random.randint(0, 1)
            if result == 0:
                counter_omote += 1
                print("結果:")
                print(omote)
            else:
                counter_ura += 1
                print("結果:")
                print(ura)
        print('実施回数:'+str(counter_total) + '  表:'+str(counter_omote) + '  裏:'+str(counter_ura))
        x = input()
        os.system('cls')

if __name__ == '__main__':
    main()
    sys.exit(0)

注意:文字をアスキーアート風に描いています。ブログ画面の表示上ズレていますが、テキストエディタにコピペすれば、以下の様にきれいに見えると思います。

f:id:dskevin:20210929222026p:plain

実行方法

Pythonがインストール済の環境であれば、コマンドプロンプトなどの実行環境から以下のように実行できます。

python cointoss.py

exeファイルへの変換方法

Pythonプログラムをexeファイル化することで、Pythonをインストールしていない環境でも、アイコンをクリックするだけで簡単にPythonプログラムを実行できるようになります。
f:id:dskevin:20210929222314p:plain

exeファイル化する際には、Pyinstallerを使用します。やり方は以下の動画で公開していますので、よければこちらをご確認ください。
youtu.be

また、Pyinstallerで作成したexeファイルのエラー発生時の対処方法について、別記事に公開していますので、こちらも必要に応じてご確認ください。
dskevin.hatenablog.com

まとめ

コイントスをするPythonプログラムのソースコードを公開しました。
本記事が、Pythonを使ったプログラミングを学習する際の参考になれば幸いです。
最後まで読んでいただき、ありがとうございました。