Categories
データサイエンス

jupyter notebookで自作したクラスを自動でimport

jupyter notebookで自作したクラス(モジュール)をインポートできない

Pythonは自分で作成したクラスを簡単にインポートできます。

from ファイル名 import クラス名

ですが、jupyter notebookで作ったクラスをインポートしようとしても、エラーとなってしまいます。

これは、jupyter notebookでは.pyファイルではなく.ipynbファイルとして保存されるため、クラス(モジュール)のインポートができません。

jupyter notebookで自作したクラス(モジュール)をインポートする方法

自作したクラスをインポートできないようだと、jupyter notebookは正直使い物にならないので、インポートする方法を紹介します。

ファイルをPythonファイルでダウンロード

作成した自作クラス(モジュール)のファイルをjupyter notebook上で「File」→「Download」→「Python(.py)」を選びます。

ファイルを同じフォルダへ移動

ダウンロードしたファイルは通常「ダウンロード」フォルダに保存されるので、そのファイルを自作クラスを参照したい.ipynbファイルと同じフォルダへ移動します。(通常は自作したクラスの.ipynbファイルと同じフォルダで構いません)

これでクラス(モジュール)のインポートが可能になります。

jupyter notebookで.pyファイルを自動作成

これでクラスのインポートはできるようになりましたが、毎回これを行うのは面倒なので、自作クラスを保存するたびに自動的に.pyファイルを生成する方法を紹介します。

jupyter_notebook_config.pyファイルを探す

まず、configファイル(jupyter_notebook_config.py)を探します。通常はホームディレクトの下に.jupyterフォルダがあり、その中に入っています。

jupyter_notebook_config.pyファイルが見つからない場合は作成が必要

もし、 configファイルが見つからない場合はそもそも作成されていない可能性がありますので、その場合は、Anacondaプロンプトなどから下記のコマンドを実行すると jupyter_notebook_config.pyファイルが生成されます。

jupyter notebook --generate-config

.pyファイルを自動保存する関数を作成

この jupyter_notebook_config.pyファイルの最後に、以下を追記して保存します。この関数では.pyファイルと.htmlファイルを自動生成するようになっていますが、 htmlの生成が不要であれば、check_call([‘jupyter’, ‘nbconvert’, ‘–to’, ‘html’, fname], cwd=d) の一行を削除してください。

#--------------------------
# Create html and py file automatically
#--------------------------
import os
from subprocess import check_call
def post_save(model, os_path, contents_manager):
    if model['type'] != 'notebook':
        return
    d, fname = os.path.split(os_path)
    check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)
    check_call(['jupyter', 'nbconvert', '--to', 'html', fname], cwd=d)
c.FileContentsManager.post_save_hook = post_save

jupyter notebookを再起動したら完了です。

]]>
Categories
サッカー 英語

サッカー好きにおすすめの英語リスニング用Youtube動画1

ネイティブの英会話を学ぶ教材が見つからない。。。

英語のリスニングの練習には洋画や海外ドラマが良いとよく言われますが、上級者じゃないとなかなかついていけないし、スラングや専門用語などが入るとちんぷんかんぷんになりませんか?

TEDもおすすめとよく言われますが、TEDも専門的な話だったり、ネイティブスピーカーではない人も結構いるので、なかなか良い講演が見つかりません。

しかも、TEDは話自体が面白くないので、ついつい飽きてしまいがち。

なので、なにか良い教材は無いかなと毎日探しているのですが、最近いくつか面白いYoutube動画を見つけたので紹介します。

Virgil van Dijk vs Joe Gomez | ‘Who Am I?’ Liverpool Teammates Quiz

まず、1つ目はイギリスSky Sportsの1コーナーの”Who Am I“です。

このコーナーは2選手がチームメイトの特徴や経歴などを早押しで競うクイズ対決です。問題文や選手の会話なども想像しやすいので、少し聞き取れなくても話の全体像をイメージできて聞き取りやすいです。

このWho Am Iの中でも、リバプールのジョー・ゴメスとファン・ダイクの動画がおすすめです。ジョー・ゴメスは父親はガンビア人、母親はイギリス人でロンドン生まれのロンドン育ちなのもあって変な訛りもなく、かつネイティブらしい早口で話しています。

一方、ファン・ダイクはオランダ出身ですがイングランドの生活も長いので英語も流暢です。ですが、ネイティブほど砕けた口調ではないので、ジョー・ゴメスよりも聞き取りやすいです。

このコーナーが盛り上がったというのもありますが、 2人ともあまりもごもごしていないので聞き取りやすいです。

下の動画はトッテナムのハリー・ケインとソン・フンミンの対決ですが、ケインは ロンドン出身ですが、発言がこもっていて聞き取りづらいのがわかります。

これを見てソン・フンミンが予想以上に英語が堪能なのでちょっとびっくりしました。これだけコミュニケーションが取れればあれだけ活躍できるのも納得です。

Dennis Bergkamp & Ian Wright | Full Interview | “We felt like Arsenal could be champions.”

つづいては、アーセナルのレジェンド、イアン・ライトのチャンネルからこちらもレジェンドのデニス・ベルカンプとの対談動画です。

奇しくもジョー・ゴメスとファン・ダイクと同じでライトはロンドン出身、ベルカンプはオランダ出身という組み合わせですが、対談ということもあってか丁寧というか砕けてない非ネイティブの典型的な話し方になっています。一方のライトはネイティブなのでたまに早口になりますが言葉自体は綺麗で聞き取りやすいです。

この動画のおすすめは、ベルカンプがインテルからアーセナルへ移籍した経緯やアーセナルに加入した当初の感想などが詳しく語られているので、話自体がとても興味深いです。

さらに、同時期に監督に就任したアーセン・ベンゲルについても語っていて、12:05頃に「グランパス」という言葉も出てくるのは、こんなレジェンドたちの口からJリーグのクラブの名前が出てくる事に驚きです。

Patrice Evra picks incredible Ultimate XI of players he has played with | MNF

最後はこれまたSky Sportsから、「Monday Night Football」 から、元マンチェスターUのパトリス・エヴラが選ぶベスト11です。エヴラが選手を選んだ理由や選手の特徴などを紹介するので話の内容自体が理解しやすいのが、おすすめの理由です。

個人的には、エヴラが自分自身を選んだところと、右サイドバックに同僚のGネビルではなく、バルセロナやユベントスで活躍したダニ・アウベスを挙げているところをキャラガーや司会者に突っ込まれているところが面白いです。

エヴラはフランス出身ですが、フランス人にしては珍しくしっかりとした発音で聞き取りやすいです。その一方、イングランド北西部のマージーサイド出身でリバプール一筋のジェイミー・キャラガーは話し方に特徴があるので、ちょっと聞きづらいところがあります。

2人の間に位置する司会者は流暢な英語でエヴラとキャラガーと比較してきれいな英語であることがわかるのも、この動画をおすすめする理由の1つです。

リスニング教材探しのポイント

サッカー関連の動画はたくさんあるのですが、試合動画の実況は聞き取りづらかったり、文章になってなかったりするのであまりおすすめできません。また、Youtuberが試合結果やフォーメーションなどを解説したりしている動画もありますが、早口過ぎたり砕けすぎてて分かりづらいので、ニュース番組でかつ討論やインタビュー以外の動画がおすすめです。

]]>
Categories
データサイエンス

機械学習初心者がKaggleのTitanic課題でモデルを作る

機械学習の挑戦者が集まるKaggle

機械学習初心者だったら、「Pythonでモデリングの勉強はして機械学習を実際にやってみたいけど、データがない」と悩んだことはありませんか?

そんなあなたにおすすめしたいのがKaggleです。 Kaggleは大きく分けて2つの特徴があります。1つは企業や政府とデータサイエンティスト/機械学習エンジニアを繋げる「マッチング」。

そして、もう1つが「Competetion(コンペ)」という、 企業や政府がコンペ形式(競争形式)で課題を提示し、参加者が作成した分析モデルのうち、最も制度の高い分析モデルを買い取る仕組みです。

Kaggleは無料で初心者に優しい

Kaggleは無料でコンペに参加が可能です。しかも、企業から提供されているトレーニング用のデータを利用して、モデルの訓練やテストデータで評価も可能なので、コンペ自体に参加する自信がない初心者でも、これらのデータを使ってモデル作成のトレーニングをすることができます。

Kaggleの会員登録については特に難しくないので、ここでは省略します。

PythonでTitanicの生存者を予測する

今回は最も有名な課題の1つである「Titanic: Machine Learning from Disaster」(タイタニック:災害からの機械学習)を実際に行ってみます。これはあのタイタニック号の乗船リストから生還者を予測します。

手順

予測モデルの作成と結果の検証を行うまでの手順になります。

  1. データセットのダウンロード
  2. データセットの内容把握
  3. 前処理
  4. 予測モデルの作成
  5. テストデータを使って予測
  6. 予測結果をKaggle上で検証

データセットのダウンロード

まずはKaggleのサイトから下記の2つのCSVファイルをダウンロードします。各課題では「Data」ページに、データセットの説明が記載されていますので熟読することをおすすめします。

  • train.csv (学習用データ)
  • test.csv (テスト用データ)

データセットの内容把握

それではいよいよPythonで予測モデルの作成に取り掛かります。最初にCSVファイルをインポートしてデータセットの中身を確認しましょう。

※私はJupyter notebookを使用していますので、通常のPythonと若干違う箇所があるかもしれません。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# CSVファイルを同じフォルダに格納していますが、別のフォルダに格納する場合はフォルダの指定をしてください。
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

無事取り込みが完了したら、train.csv内の中身や項目を確認します。

train.head()

各カラムの説明は以下の通りです。

PassengerId乗客者ID
Survived生存フラグ(0=死亡、1=生存)
Pclassチケットクラス
Name乗客の名前
Sex性別(male=男性、female=女性)
Age年齢
SibSpタイタニックに同乗している兄弟/配偶者の数
parchタイタニックに同乗している親/子供の数
ticketチケット番号
fare料金
cabin客室番号
Embarked出港地(タイタニックへ乗った港)

このうち、Pclass(チケットクラス)は以下を表します。

  • 1 = 上層クラス(お金持ち)
  • 2 = 中級クラス(一般階級)
  • 3 = 下層クラス(労働階級)

また、Embarked(出港地)は以下の3種類になります。

  • C = Cherbourg
  • Q = Queenstown
  • S = Southanmpton

同じようにtest.csvの中身も確認しましょう。

test.head()

train.csvとほぼ同じカラム構成ですが、test.csvには”Survived”カラムが無いのがわかります。つまり、「予測モデルを作成してSurvivedを予測して、実際の正解と比較しましょう」というのが今回の課題になります。

次に両方のサイズを確認しましょう。

test_shape = test.shape
train_shape = train.shape
print(train_shape)
print(test_shape)

trainは891名の乗船者情報があり、12個のカラムで構成されています。一方、testは418名の乗船者でカラムがtrainより1個少なく11個となっているのは、上で説明した”Survivied”が存在しないためです。

続いて、 pandasのdescribe()を使って、各データセットの統計データを確認してみましょう。

train.describe()

countの部分を見ると、Ageで欠損があるのがわかります。

次にヒストグラムで見てみましょう。

train.hist(figsize = (12,12));

続いてヒートマップで相関関係を見ます。

plt.figure(figsize=(10,10))
sns.heatmap(train.corr(), annot =True, square=True, vmax=1, vmin=-1, center=0,cmap='Blues_r');

PclassとFareが負の相関がみられますが、それ以外はあまりなさそうです。

性別と生存の関係性も見ましょう。

sns.countplot(x='Sex' , hue = 'Survived',data = train);

‘Survived’=1が生存で0が死亡ですので、女性の方が生存率が高いのがわかります。では、 Pclass(チケットクラス) でも比較してみましょう。

sns.countplot(x='Pclass', hue = 'Survived',data = train);

Pclass=1(上層クラス)だけ生存者数が死者数を上回っていますが、 生存者数はどのクラスも同じくらいです。ただ、Pclass=3(下層クラス)の死者数が圧倒的に多い事がわかります。

最後に、これら両方を組み合わせたヒストグラムを見てみます。

sns.catplot(x="Pclass", col="Sex", hue="Survived",data=train, kind="count");

同様にtestの方も見てみましょう。

test.describe()

testの方は、AgeだけでなくFareにも1件欠損があるのがわかります。ヒストグラムや相関は省略します。

欠損値の確認

欠損値の確認はisnull().sum()で行います。

train.isnull().sum()
test.isnull().sum()

上がtrain、下がtestの欠損値の個数になります。 trainではAge、Cabin、Embarkedに、testではAge、Fare、Cabinに欠損値が存在するのがわかります。

※予測モデルの作成ではこの欠損値の扱い方で結果が大きく変わってきます。

前処理

予測モデルの作成の前に色々やっていくことがあります。その1つが欠損値の処理です。上で調べたようにtrainで欠損値を含むのは

  • Age
  • Cabin
  • Embarked

の3つですが、今回はCabinは使わないのでAgeとEmbarkedの2つの欠損値を埋めていきます。

欠損値を埋めるのにはfillna()を使用します。それではまずはAgeから始めます。今回はとりあえず、ということでAgeには平均を入れます。平均はmedian()を使います。

train['Age'] = train['Age'].fillna(train['Age'].median())

Embarkedですが、こちらはカテゴリ変数なので最頻値を入れたいと思います。ですが、その前に、Embarkedの種類と、各変数の個数を調べてみましょう。

train['Embarked'].unique()

array([‘S’, ‘C’, ‘Q’, nan], dtype=object)

説明どおり、3種類あることがわかりました。 (※nanは値がないことを意味しています)

では次に、各変数の個数を調べます。

train["Embarked"].value_counts()

Embarkedは”S”が最も多いことがわかりましたので、今回は欠損値には”S”を入れることにします。fillna(“S”)で直接入れても構いませんし、最頻値をmode()で算出して入れるのも同じです。その場合、mode()はpandas.DataFrameを返すので、iloc[0]を使ってpandas.Seriesとして取得する必要があります。

train['Embarked'] = train['Embarked'].fillna('S')
# または下でもOK
train['Embarked'] = train['Embarked'].fillna(train['Embarked'].mode().iloc[0])

同じようにしてtestのAgeの欠損値を埋めます。

test['Age'] = test['Age'].fillna(test['Age'].median())

最後に、testに1件だけあったFareの欠損値も平均値で埋めます。

test['Fare'] = test['Fare'].fillna(test['Fare'].median())
test['Fare'].isnull().sum()

終わったら、欠損値がなくなっているか確認します。

train['Age'].isnull().sum()
train['Embarked'].isnull().sum()
test['Age'].isnull().sum()
test['Fare'].isnull().sum()

カテゴリ変数の変換

予測モデル作成の前にもう1つやらなければならないのが、カテゴリ変数の変換です。Embarkedのように文字列があるとエラーになってしまうため、すべて数値に変換しなければなりません。

最初に、各カラムの型を確認します。

train.dtypes

今回使用するなかで変換が必要なのは、Sexと Embarkedになります。

pandas.get_dummies()を使って文字列を数値型に変換

カテゴリ変数を変換する際はいくつか方法はありますが、今回はpandas.get_dummies()を使います。

補足:pandas.get_dummies()とは

get_dummies()は指定したカラムの中身の値の数だけカラムを作成して、該当する箇所に1を入れます。

train_sex = train[['PassengerId','Sex','Sex']]
train_sex.columns = columns=['PassengerId','Sex','Sex_replace']
train_sex.head()
train_sex = pd.get_dummies(train_sex, columns=['Sex_replace'])
train_sex.head()

このように、Sex_replaceカラムからSex_replace_femaleとSex_replace_maleの2のカラムが作成され、Sex = ‘male’の行は Sex_replace_male = 1になり、 Sex = ‘female’の行は Sex_replace_female = 1になります。

この時元のカラム(Sex_replace)は無くなりますので注意しましょう。

では、実際にSexについて行います。

train = pd.get_dummies(train, columns=['Sex'])
train.head()

Sex_femaleとSex_maleカラムが作成されているのがわかります。続いてEmbarkedも行います。

train = pd.get_dummies(train, columns=['Embarked'])
train.head()

testについても同様に行います。

test = pd.get_dummies(test, columns=['Sex'])
test = pd.get_dummies(test, columns=['Embarked'])
test.head()

カテゴリ変数の変換について

「カテゴリ変数を0,1,2・・・のような数値に変換すれば?」と思った人もいるかも知れません。今回の性別のように値が2種類しかない場合は0,1でも良いのですが、3種類以上ある場合、1,2、3としてしまうと、3=1+2という関係性ができあがってしまう可能性がでてきます。それを避けるために、今回のようにpandas.get_dummies()を使うのが安全です。

不要なカラムの削除

これは最初に行っても良いのですが、今回は”PassengerId”, “Name”, “Ticket”, “Cabin”カラムは予測に使うのは難しいので、今回は削除して、それ以外の”Pclass”(チケットクラス),”Age”, “Sex”,” SibSp”(同乗兄弟・姉妹・配偶者者数),”Parch”(同乗親子者数), “Fare”で予測します。

ただし、最後にtestの”PassengerId”を使うので、これだけtest_PassengerIdに格納しておきます。

train = train.drop(['PassengerId','Name','Ticket','Cabin'],axis=1)
test_PassengerId = test['PassengerId']
test = test.drop(['PassengerId','Name','Ticket','Cabin'],axis=1)
train.head()
test.head()

予測モデルの作成

データとラベルに分割

最初に、trainを訓練データと訓練ラベル(評価・結果)に分割します。

trainのうち、最初の1カラム目”Survived”が評価ラベル(=結果)になるのでこれをy_trainに、それ以外のカラムが訓練データになるのでX_trainに入れます。

X_train, y_train, X_test, y_testという変数名は予測モデルでは頻繁に出てきますので、変な名前をつけるよりはこれを毎回使うようにしたほうが間違いを避けられます。

X_train = train.iloc[:, 1:]
y_train= train.iloc[:,0]
X_train.head()
y_train.head()

決定木で予測モデルを作成

いよいよ、予測モデルの作成になります。 今回は「決定木」を使って予測します。

  1. DecisionTreeClassifierをインポート
  2. DecisionTreeClassifierを作成
  3. fit()に上記で作成したX_train,y_trainを引数に加えて実行
  4. predict()にtestを引数に加えて実行
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state = 0, max_depth=4)
clf = clf.fit(X_train , y_train)
pred = clf.predict(test)
pred

結果(pred)は下記のようになります。

結果のサイズをみると、418行生成されているのがわかります。

pred.shape

最後に、結果をCSVに格納しますが、上記だけだとどの乗客が生存・死亡したのかがわかりませんので、先ほど保管しておいたPassengerId(test_PassengerId)と組み合わせてからCSVに出力します。ファイルはUTF-8形式で書き込みます。

df_pred = pd.DataFrame(test_PassengerId, columns=['PassengerId'])
df_pred["Survived"] = pred
df_pred = df_pred.set_index('PassengerId')
df_pred.to_csv("titanic_pred.csv", index_label = ["PassengerId"], encoding='utf-8')

結果ファイルをテキストエディタで開くと下記のようになります。

Kaggleで結果を検証

このCSVファイルをKaggleにアップロードして検証します。 Kaggleへログイン後、タイタニックページへ進み、以下の手順で検証を行います。

  1. 上部メニューに「Submit Predictions」という項目がありますので、こちらをクリック
  2. ファイルをアップロード
  3. 下の「Make Submission」をクリック

数分で結果が返ってきます。右側の「Score」が正解率にいなります。今回は76.5%でした。

下にある「Jump to your position on the leaderboard 」をクリックすると、自分が世界中で何番目かがわかります。中には正解率100%の人もいるので驚きです。

次回は、他の予測モデルで挑戦したいと思います。

]]>
Categories
ガジェット

大満足!Mesh Wi-FiのTP-Link Decoの設定&レビュー

私の家はFiber(ケーブル)を契約して、自宅はプロバイダーから提供されたルーターでWi-Fiを使っているのですが、2階にある私の部屋だとたまに接続できなかったり、遅かったりしたので、メッシュWi-FiのTP-Linkの「Deco M4」を購入してみました。

M4のスペック

中身はとてもシンプルです。箱を開けると、本体2本と電源ケーブルが2個。これだけです。2つとも同じですが、1台がメイン(モデムと接続)で、もう1台が中継器になります。

ちなみに、スペックは2020年時点では申し分ないです。

ワイヤレス規格IEEE 802.11 ac/n/a 5 GHz, IEEE 802.11 b/g/n 2.4 GHz
通信速度 2.4 GHz 最大300 Mbps 5 GHz 最大867Mbps
周波数2.4 GHz 5 GHz(自動選択)
アンテナ2 内蔵アンテナ (各ユニット)
CPUQualcomm CPU
対応モードルーター・アクセスポイントモード
サイズ(高さ)190 × (幅)90 × (奥行き)90mm
WAN/LANポート自動対応ポート × 2

設定手順

設定はアプリで行います。アプリ内のナビに従って進めていくだけなのでとても簡単です。

  1. Deco M4の電源を入れて、モデムに接続
  2. アプリに従って設定を進める

ただその反面、プロバイダーによって特殊な設定が必要な場合はカスタマイズへの案内が分かりづらいです。

設定の事前準備

アプリの手順に沿って進めます。まず最初に、

  • 今まで使っていたWi-Fiルーターをモデムから外して電源を切る
  • モデムの電源を落とす
  • Deco M4の梱包物を開封

を行っておいてください。アプリは基本的にはインターネットに繋がなくても進められますが、後で説明するプロバイダーの接続設定が必要になる場合がありますので、その場合は携帯の回線などインターネットに接続できる回線を準備しておきましょう。

モデムとDeco M4の起動

アプリを起動してWi-Fiルーターの一覧からM4を選択
必要物の確認だけなので「NEXT」をクリック。
モデムの電源を切りましょう
モデムとDeco M4の電源を入れて、モデムとDeco M4を接続します。

Deco M4に電源を入れると、上部のマークが黄色に点灯します。(画像では白っぽく見えますが実際は黄色です)

一般的にモデムは起動に約2〜3分程度かかります。起動すると地球のようなマークが緑色に点灯するので確認しましょう。

一方、Deco M4の方も上部のマークが青く点灯すれば準備完了です。

Deco M4とアプリの接続

次にアプリに従って進むと、アプリ(スマートフォン)がDeco M4を探しに行くので少し待ちます。数分すると、SSIDが「Deco_XXXX」というWi-Fiが見つかります。

名前についてはDeco M4本体の裏側にプリントされているので間違って近所の人のを拾っていないか念のため確認しましょう。(といっても通常このあと設定するので、ここで他人のを拾う可能性はほぼゼロです)

Wi-Fiネットワークの作成(SSIDの作成)

次にWi-Fiネットワークを自分で作成します。通常、プロバイダーなどから指定されてルーターにシールが貼ってあるやつです。

Deco M4では自分で作成するので、SSID(KEY)とパスワードは必ずどこかにメモ・保存しておきましょう。

従来のWi-Fiから置き換える人は、家に多くの機器(スマホ、PC、TVなど)がある人はSSIDやパスワードを変更しなければならないのでかなり面倒なので、従来のSSID・パスワードと同じものを設定することをおすすめします。

※このとき、以前のWi-Fiルーターをモデムに接続しているとそっちと重複してしまうため、古いWi-Fiルーターは切断して電源を落としておきましょう。

SSIDとパスワードの入力
SSIDとパスワードの確認

Wi-Fiネットワークを作成すると、アプリがそのWi-Fiネットワークへ接続を試みるので少し待ちます。

アプリが新しく作成されたWi-Fiネットワークに接続成功

Wi-Fiネットワークに接続が成功すると、続けてインターネットに接続テストします。

これで成功すれば終了です。お疲れさまでした。

接続失敗。ISPの設定が必要な場合

残念ながら、インターネットに接続ができない場合、「接続失敗」の画面になります。この場合、インターネットプロバイダー(フレッツ、Yahoo!など)の独自の設定をしなければなりません。

詳しくは「Wi-Fiルーター フレッツ 設定」などでググると出てきます。ちなみに、私の場合はニュージーランドのSparkという会社で、Set up a non-Spark modemという設定用ページがあり、「spark own wifi configuration」ググったら出てきました。

ISP(インターネット・サービス・プロバイダー)の設定

アプリでISPの設定画面に進みます。 ここで「次へ」進まずに「VLANの設定」をクリックします。

VLAN Settingを選択

ここで先ほど説明した各プロバイダーの設定情報を入力します。以下は私が契約しているSpark社の場合になります。

  • Connection Type(接続タイプ):PPPoE
  • Username(ユーザー名): [email protected]
  • Passwor(パスワード):password

入力後、「NEXT(次へ)」をクリックして先に進んで再度接続を試みます。

通信速度

自室でテストを行ったところ、Deco M4に変えたら最大103Mbpsまで上がりました。(我が家の契約(Fibre)は最大下り100Mbps)

以前のWi-Fiルーター(Spark社)
Deco M4

以前はつながらない事もあったので、そこから考えると劇的な進歩です。ちなみに、以前はWi-Fiルーターを1階に1個だけ置いていたのですが、1階では下りで100Mbps出ていたので、Wi-Fiルーター自体の速度性能はもともと悪くありませんでした。

ですので個人的には速度が上がったことよりも、しっかり繋がる事の方に感動しています。

バンドステアリング機能

その他、Deco M4でおすすめなのが、 「バンドステアリング機能」です。

一般的なルーターは2.4GHzと5GHzの2つの電波が飛んでいますが、Deco M4ではその2つの電波を自動的に空いている周波数に変えるので、PCやスマホ側でいちいち選択する必要がありません。

以前のWi-Fiルーターは2.4GHzと5GHzの2つのWi-Fiネットワークが別々に存在していて、私のノートPCでは、1階で使うときは5GHzを選んで、2階の自室で使うときに繋がらなくなったら2.4GHzを選んでいたのでその手間が省けて煩わしさがなくなりました。

ユーザー登録と子供の機能制限

Deco M4ではアプリ内で利用者の登録ができて、登録者ごとに簡単に機能制限をつけられます。なので、子供を登録して保護者による制限をつけることで、子どもたちが安心してインターネットを楽しめるようにできます。

我が家では娘のiPadでは2時間/日、有料サービスの利用不可を設定しています。

レビュー:コスパ最高、ITに詳しくない人でも簡単設定

一言で言えば、Deco M4を買って大満足です。繋がりにくかった自室でも快適に使える事に満足したのはもちろんですが、それがわずか1万円ちょっとでできてしまったし、設定自体も1時間もかからずに終わったので、設定をしたことがない人でも戸惑うことなくできると思います。

あとは、バンドステアリング機能や機能制限などは買ってから気づいたのですが、これもなかなか便利です。

もし、

  • 自宅の一室がWi-Fiが繋がりにくい
  • 回線速度が遅い
  • 子供のインターネット使用を規制かけたいけど、良い案がない
  • Wi-Fiルーターにそんなにお金をかけたくない

と言ったことで悩んでいる人にはDeco M4はとてもおすすめです。Amazonなどで購入できますので、興味のある人は下記をクリックして商品を詳しく見てください。

]]>
Categories
パーツ

ELITE VOLANOにMisuro b+の取り付け方

最近はもっぱら自宅でElite VOLANOという固定ローラーを使ってZwiftでトレーニングしているのですが、そのElite VOLANOがPCやiPhoneアプリで反応しなくなったので、電池切れかな?と思って、通信機器であるMisuro b+の電池を交換しました。

その時にちょっとしたトラブルがあったので、取り付け方について紹介したいと思います。

電池はCR2032が基本、でも2025でもOK

まず電池ですがCR2032を使用することになっています。しかし我が家にはCR2025しかなかったので、とりあえず試したところあっさり通信できました。

CR2032とCR2025の違い

ところで、CR2032とCR2025の違いは何でしょう?実は最初の20は円の大きさで、後ろの32や25は厚みを表しています。つまり、2032と2025は厚さが違うだけです。

しかも、Misuro b+は電池の取り付け部分が金具で電池を押さえつけるように固定するタイプなので、2025の厚さでも対応しました。

LEDランプの確認

次に、蓋を開けてから電池を入れます。蓋は開けるというよりも引っ張っるタイプですので、強引に開けないように気をつけてましょう。

蓋を無事開けたら電池を交換します。(写真は2032になっていますが、これは後日2025から変えたときのものです)

電池を差し込むと、右上のLED(写真の黄色○の部分)が点滅します。VOLANOの場合は14回点滅すればOKですが、回数が違う場合は、左側のボタン(写真の人差し指の下)を1回押します。

すると、再びLEDが複数回点滅します。この点滅はボタンを1回押す毎に1回増えます。

ボタン押す→1回点滅→ボタン押す→2回点滅→ボタン押す→3回点滅・・・・・ボタン押す→15回点滅→ボタン押す→1回点滅

というように、15回点滅すると次は1回に戻るので、誤って多く点滅させてしまっても慌てずに15回点滅まで進めて、最初からやり直せます。

Misuro b+の入れる向きが重要

そしていよいよ、Misuro b+をVOLANOに入れます。ここで重要なのが入れる向きです。

Misuro b+をELITE VOLANOへ挿入

ポイントは2つ。

  • 蓋を上に入れる
  • リアホイール側から前を見て文字が読める方向に入れる

これを間違えるとZwiftは最初だけ認識してくれますが、ペダルを回しても反応しないので気をつけましょう!

zwiftと通信すると、パワーメーターで反応しますが、先程のLEDの回数を間違えてたり、挿入方法を間違えると、下の画像の2つ目のように反応はするのですが、どれだけペダルを踏んでもワット数は増えません。

ELITE VOLANOはコスパ最高

コロナウィルスの影響で自宅にいなければならないので体もなまりますが、こんな時に最適なのがロードバイクとZwiftです。

ロードバイクとZwiftをやるには通信可能なローラー台が必要ですが、おすすめのローラー台がELITE VOLANOです。低価格ながらワット数をZwiftに送れるのが最大の魅力です。

Tacx(タックス) Neo Smart インタラクティブトレーナーなど高機能で魅力的なローラー台もありますが、非常に高額なのでまずはELITE VOLANOから始めてみるのがおすすめです。

ELITE VOLANOについては以前レビューを書きましたので、ぜひこちらも読んでください。

]]>
Categories
WordPress

WordPressでHTTP 500エラーの対処法

WordPressでひっそりと別のサイトを作成(今は放置状態)しているのですが、ある日、突然Google Search Consoleから 「カバレッジ」の問題が新たに 検出されました 、メールが届きました。

特に大きな変更をしたわけではないのですが、気になったので、あれこれ調べて試しても効果がなかったので、サーバーの運営会社(さくらインターネット)に問い合わせました。

HTTP500エラーが発生する主な原因

  • .htaccessの「記述」「書式」「文字コード・改行コード」に問題がある
  • PHPに関する設定をphp.iniにせず、.htaccessに PHP_Flag や PHP_Value など記述している
  • CGI・PHPのパーミッション等、設定に誤りがある(705 または 755 に設定していない)
  • CGI・PHPプログラムが正しく動作していない

php.iniでエラー内容を表示

さくらインターネットからは一般的な回答だったのですが、1つ興味深い設定を教えてくれたので、紹介します。

php.iniに display_errors=on と記述して保存することで、エラー内容が表示されます。

さくらインターネットの場合の設定方法

  • サーバコントロールパネルへログイン
  • 「PHP設定の編集」をクリック
  • display_errors=on と記述し、「保存する」をクリック

これで、今までHTTP500エラーが表示されていたサイトをリロードすると、エラーが発生している場所が表示されました。

原因はプラグイン

あまり使っていなかったプラグインが原因でしたので、FTPソフトを使って手動でディレクトリごと削除しました。

そして、再びサイトをリロードすると、今度はきちんと表示されました。

1週間くらい悩んでましたが、サーバー会社のサポートのおかげで助かりました。

HTTP500エラーの原因は多々ありますが、エラー箇所すら見つけられずに手探りの状態だったので、エラーの表示はとても役に立ちます。

ですが、万が一エラーが表示されて他の人に見られるとハッキングのヒントにもなりかねないので気をつけましょう。

]]>