0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

頻発月経とは

頻発月経は、オムロン ヘルスケア株式会社様のウェブサイト「オムロン式美人」にて、以下のように説明されています。

一般的に、生理の周期は25日~38日が正常の範囲内です。これより短い場合は、頻発月経といいます。

分析の動機

当方数カ月ほど頻発月経を経験しており、今の状態は理想的な状態と比べてどれほど悪いのかを数値的に知りたい、また、次の生理周期の予測を月経の前後および最中の体調不良の対策に役立てたいと考えました。

頻発月経に悩む世の女性にも活用していただけると幸いです。

分析手順

今回は、説明変数を「月経があった月」、目的変数を「生理周期(前の月経の開始日から次の月経の開始日の前日までの日数)」として単回帰分析を行います。

また、言語はPythonを使用しております。

まず全体的な分析の手順を示します。

  1. 単回帰分析に必要な外部ライブラリをインポートする
  2. 月経があった月と生理周期のデータを準備する
  3. 先ほど準備したデータを分析しやすいように加工する
  4. 回帰モデルを作り、データを学習させる
  5. 学習結果を散布図と回帰直線として表示する
  6. 学習結果から、来月の生理周期を予測する

次に、実際に使用したデータとコードを示します。

1. 単回帰分析に必要な外部ライブラリをインポートする

numpyなどの外部ライブラリをインポートします。
また、ここでグラフをインラインで表示するように設定します。

import numpy as np
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
sns.set()
%matplotlib inline

2. 月経があった月と生理周期のデータを準備する

pandasのDataFrameを用いて、月経があった月と生理周期のデータの2次元データを作成します。

data = {
    'Month': ['2022-12', '2023-1', '2023-2', '2023-3', '2023-4','2023-5','2023-6','2023-7','2023-8','2023-9','2023-10','2023-11'],
    'Period': [29,30,23,22,24,22,20,26,23,27,23,20],
}
df = pd.DataFrame(data)

3. 先ほど準備したデータを分析しやすいように加工する

先ほどのデータでは、月経があった月を文字列データとして記述しています。
このままだと回帰分析の手法が使えないので、文字列データを数値データに変換します。

# 月を数値に変換
df['NumericMonth'] = pd.to_datetime(df['Month'], format='%Y-%m').dt.to_period('M').astype('int64').astype('int32')

4. 回帰モデルを作り、データを学習させる

まず、単回帰分析に必要な外部ライブラリをインポートします。

import sklearn
from sklearn import linear_model

次に、先ほど読み込んだ外部ライブラリと加工したデータを用いて、単回帰分析モデルを作成し、データを学習させます。

# 説明変数と目的変数の取得
X = df[['NumericMonth']]
y = df['Period']

# モデルの作成と学習
model = linear_model.LinearRegression()
model.fit(X, y)

5. 学習結果を散布図と回帰直線として表示する

学習したデータをもとに、モデルに回帰直線の予測をさせます。
予測した直線を、元データの散布図とともに表示します。

# 予測
y_pred = model.predict(X)

# 回帰直線の描画
plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='pink', label='Actual')
plt.plot(X, y_pred, color='red', label='Regression Line')
plt.title('Polymenorrhea')
plt.xlabel('Numeric Month')
plt.ylabel('Period')
plt.ylim(0, 40)
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()

# グラフを表示
plt.show()

6. 学習結果から、来月の生理周期を予測する

# 来月の説明変数を作成
next_month = pd.DataFrame({'NumericMonth': [df['NumericMonth'].max() + 1]})

# 来月の出力を予測
next_month_pred = model.predict(next_month)

print("来月の出力の予測値:", next_month_pred[0])
# 出力: 来月の出力の予測値: 21.242424242424192

頻発月経の判断の目安が24日であることを考慮すると、あまりよろしくない結果であることが分かります。

留意事項

  • データ分析に関しては初心者なので、コードの作成はChatGPTに手伝ってもらいました。
  • 今回は単回帰分析を使用しておりますが、今後は他の回帰分析の方法も試してみます。
  • 初投稿です。訂正すべき箇所等ございましたらご指摘頂けるとありがたいです。
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?