fc2ブログ

RからPythonへの道(8)

 2019年最後のブログです。今回は「7. 回帰分析(単回帰)」について、RとPythonで計算して行きたいと思います。以前、Excel分析ツールのお話をした際にも、ExcelRPythonの3つのツールで「単回帰分析」をしました。今回も内容が重複する所がありますが、書籍『東京大学のデータサイエンティスト育成講座』を教材として、「単回帰分析」をPythonとRで行いました。 まずは、Pythonのコードです。前回と同様にネット上のデータファイル(zipファイル)をダウンロードし、単回帰分析するコードです。
# Single Regression
import requests, zipfile
from io import StringIO
import io
import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt

# data file download
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip'
r = requests.get(url, stream = True)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()

# data read
student_data_math = pd.read_csv('student-mat.csv',sep=";")

# Regression analysis
reg = linear_model.LinearRegression()
X = student_data_math.loc[:,['G1']].values
Y = student_data_math.loc[:,['G3']].values
reg.fit(X, Y)

print('Slope: ', reg.coef_)
print('Intercept:', reg.intercept_)
print('Coefficient of determination: ',reg.score(X, Y))

# data plot
plt.scatter(X,Y)
plt.xlabel('G1 grade')
plt.ylabel('G3 grade')
plt.plot(X, reg.predict(X)) # fitting line
plt.show()
Pythonコードの実行結果は以下の通りです。
Slope:  [[1.10625609]]
Intercept: [-1.65280383]
Coefficient of determination: 0.64235084605227
Python_res_plot.png 次にRのコードです。
# Single Regression

# datafile download
DLfile = tempfile()
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip"
download.file(url, DLfile)
unzip(DLfile)

# data read
student_data_math = read.csv("student-mat.csv", header=TRUE, sep=";")

# Regression analysis
reg_lm = lm(student_data_math$G3~student_data_math$G1)
# Slope
print(reg_lm$coefficients[2])
# Intercept
print(reg_lm$coefficients[1])
# Coefficient of determination
print(cor(student_data_math$G1, student_data_math$G3)^2)

# data plot
plot(student_data_math$G1, student_data_math$G3, xlab="G1 grade", ylab="G3 grade",pch=16)
# fitting line
abline(reg_lm)
 Rコードの実行結果は以下の通りです。
> print(reg_lm$coefficients[2])
student_data_math$G1
1.106256
> # Intercept
> print(reg_lm$coefficients[1])
(Intercept)
-1.652804
> # Coefficient of determination
> print(cor(student_data_math$G1, student_data_math$G3)^2)
[1] 0.6423508
R_res_plot.png 個人的にはRのコードがシンプルで好きですね。次回は重回帰分析の話をします。それでは、来年こそは今年よりも良い年にしたいものです・・。

『RからPythonへの道』バックナンバー
(1) はじめに
(2) 0. 実行環境(作業環境)
(3) 1. PythonからRを使う方法
   2. RからPythonを使う方法
(4) 3. データフレーム
(5) 4. ggplot
(6) 5.行列
(7) 6.基本統計量
スポンサーサイト



RからPythonへの道(7)

 前回からしばらく時間が経ちました。今回は「6.基本統計量」について、RとPythonで計算していきたいと思います。
以前、Excel分析ツールのお話をした際にも「基本統計量」を算出したことがあります。

 いつもはRのコードからPythonのコードに変換していましたが、今回は書籍『東京大学のデータサイエンティスト育成講座』を教材として、PythonのコードからRのコードへの変換を行いました。 まずは、Pythonのコードです。ネット上のデータファイル(zipファイル)をダウンロードし、基本統計量を計算するコードです。
import numpy as np
import pandas as pd
import requests, zipfile
from io import StringIO
import io

# datafile download
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip'
r = requests.get(url, stream = True)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()

# data read
student_data_math = pd.read_csv('student-mat.csv',sep=";")
print(student_data_math.head())
print(student_data_math.info())
print(student_data_math['sex'].head())
print(student_data_math['absences'].head())

# basic statistics
print(student_data_math.groupby('sex')['age'].mean())

print('average: ', student_data_math['absences'].mean())
print('median: ', student_data_math['absences'].median())
print('mode: ', student_data_math['absences'].mode())
print('std: ', student_data_math['absences'].std())
print('var: ', np.sqrt(student_data_math['absences'].var()))

print(student_data_math['absences'].describe())
print(student_data_math['absences'].describe()[6] - student_data_math['absences'].describe()[4])
print(student_data_math.describe())
Pythonコードの実行結果は以下の通りです。
# 15行目の実行結果
school sex age address famsize Pstatus Medu Fedu ... goout Dalc Walc health absences G1 G2 G3
0 GP F 18 U GT3 A 4 4 ... 4 1 1 3 6 5 6 6
1 GP F 17 U GT3 T 1 1 ... 3 1 1 3 4 5 5 6
2 GP F 15 U LE3 T 1 1 ... 2 2 3 3 10 7 8 10
3 GP F 15 U GT3 T 4 2 ... 2 1 1 5 2 15 14 15
4 GP F 16 U GT3 T 3 3 ... 2 1 2 5 4 6 10 10

[5 rows x 33 columns]

# 16行目の実行結果

RangeIndex: 395 entries, 0 to 394
Data columns (total 33 columns):
school 395 non-null object
sex 395 non-null object
age 395 non-null int64
address 395 non-null object
famsize 395 non-null object
Pstatus 395 non-null object
Medu 395 non-null int64
Fedu 395 non-null int64
Mjob 395 non-null object
Fjob 395 non-null object
reason 395 non-null object
guardian 395 non-null object
traveltime 395 non-null int64
studytime 395 non-null int64
failures 395 non-null int64
schoolsup 395 non-null object
famsup 395 non-null object
paid 395 non-null object
activities 395 non-null object
nursery 395 non-null object
higher 395 non-null object
internet 395 non-null object
romantic 395 non-null object
famrel 395 non-null int64
freetime 395 non-null int64
goout 395 non-null int64
Dalc 395 non-null int64
Walc 395 non-null int64
health 395 non-null int64
absences 395 non-null int64
G1 395 non-null int64
G2 395 non-null int64
G3 395 non-null int64
dtypes: int64(16), object(17)
memory usage: 102.0+ KB
None

# 17行目の実行結果
0 F
1 F
2 F
3 F
4 F
Name: sex, dtype: object

# 18行目の実行結果
0 6
1 4
2 10
3 2
4 4
Name: absences, dtype: int64

# 21行目の実行結果
sex
F 16.730769
M 16.657754
Name: age, dtype: float64

# 23-27行目の実行結果
average: 5.708860759493671
median: 4.0
mode: 0 0
dtype: int64
std: 8.00309568710818
var: 8.00309568710818

# 29行目の実行結果
count 395.000000
mean 5.708861
std 8.003096
min 0.000000
25% 0.000000
50% 4.000000
75% 8.000000
max 75.000000
Name: absences, dtype: float64

# 30行目の実行結果
8.0

# 31行目の実行結果
age Medu Fedu traveltime ... absences G1 G2 G3
count 395.000000 395.000000 395.000000 395.000000 ... 395.000000 395.000000 395.000000 395.000000
mean 16.696203 2.749367 2.521519 1.448101 ... 5.708861 10.908861 10.713924 10.415190
std 1.276043 1.094735 1.088201 0.697505 ... 8.003096 3.319195 3.761505 4.581443
min 15.000000 0.000000 0.000000 1.000000 ... 0.000000 3.000000 0.000000 0.000000
25% 16.000000 2.000000 2.000000 1.000000 ... 0.000000 8.000000 9.000000 8.000000
50% 17.000000 3.000000 2.000000 1.000000 ... 4.000000 11.000000 11.000000 11.000000
75% 18.000000 4.000000 3.000000 2.000000 ... 8.000000 13.000000 13.000000 14.000000
max 22.000000 4.000000 4.000000 4.000000 ... 75.000000 19.000000 19.000000 20.000000

[8 rows x 16 columns]
 次にRのコードです。
# Basic statistics  
library(dplyr)

# datafile download
DLfile = tempfile()
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip"
download.file(url, DLfile)
unzip(DLfile)

# data read
student_data_math = read.csv("student-mat.csv", header=TRUE, sep=";")
head(student_data_math)
str(student_data_math)

head(student_data_math['sex'])
head(student_data_math['absences'])

# Basic statistics
student_data_math_gr = group_by(student_data_math, sex)
summarise(student_data_math_gr, mean=mean(student_data_math_gr$age))

mean(student_data_math$age[student_data_math['sex'] == 'F'])
mean(student_data_math$age[student_data_math['sex'] == 'M'])

sprintf("Average: %f", mean(student_data_math$absences))
sprintf("Median: %f", median(student_data_math$absences))
sprintf("Mode: %s", names(which.max(table(student_data_math$absences))))
sprintf("Var: %f", var(student_data_math$absences))
sprintf("std: %f", sd(student_data_math$absences))

summary(student_data_math$absences)
summary(student_data_math[sapply(student_data_math, is.numeric)])
Rコードの実行結果は以下の通りです。
# 12行目の実行結果
school sex age address famsize Pstatus Medu Fedu Mjob Fjob
1 GP F 18 U GT3 A 4 4 at_home teacher
2 GP F 17 U GT3 T 1 1 at_home other
3 GP F 15 U LE3 T 1 1 at_home other
4 GP F 15 U GT3 T 4 2 health services
5 GP F 16 U GT3 T 3 3 other other
6 GP M 16 U LE3 T 4 3 services other
reason guardian traveltime studytime failures schoolsup famsup paid
1 course mother 2 2 0 yes no no
2 course father 1 2 0 no yes no
3 other mother 1 2 3 yes no yes
4 home mother 1 3 0 no yes yes
5 home father 1 2 0 no yes yes
6 reputation mother 1 2 0 no yes yes
activities nursery higher internet romantic famrel freetime goout Dalc
1 no yes yes no no 4 3 4 1
2 no no yes yes no 5 3 3 1
3 no yes yes yes no 4 3 2 2
4 yes yes yes yes yes 3 2 2 1
5 no yes yes no no 4 3 2 1
6 yes yes yes yes no 5 4 2 1
Walc health absences G1 G2 G3
1 1 3 6 5 6 6
2 1 3 4 5 5 6
3 3 3 10 7 8 10
4 1 5 2 15 14 15
5 2 5 4 6 10 10
6 2 5 10 15 15 15

# 13行目の実行結果
'data.frame': 395 obs. of 33 variables:
$ school : Factor w/ 2 levels "GP","MS": 1 1 1 1 1 1 1 1 1 1 ...
$ sex : Factor w/ 2 levels "F","M": 1 1 1 1 1 2 2 1 2 2 ...
$ age : int 18 17 15 15 16 16 16 17 15 15 ...
$ address : Factor w/ 2 levels "R","U": 2 2 2 2 2 2 2 2 2 2 ...
$ famsize : Factor w/ 2 levels "GT3","LE3": 1 1 2 1 1 2 2 1 2 1 ...
$ Pstatus : Factor w/ 2 levels "A","T": 1 2 2 2 2 2 2 1 1 2 ...
$ Medu : int 4 1 1 4 3 4 2 4 3 3 ...
$ Fedu : int 4 1 1 2 3 3 2 4 2 4 ...
$ Mjob : Factor w/ 5 levels "at_home","health",..: 1 1 1 2 3 4 3 3 4 3 ...
$ Fjob : Factor w/ 5 levels "at_home","health",..: 5 3 3 4 3 3 3 5 3 3 ...
$ reason : Factor w/ 4 levels "course","home",..: 1 1 3 2 2 4 2 2 2 2 ...
$ guardian : Factor w/ 3 levels "father","mother",..: 2 1 2 2 1 2 2 2 2 2 ...
$ traveltime: int 2 1 1 1 1 1 1 2 1 1 ...
$ studytime : int 2 2 2 3 2 2 2 2 2 2 ...
$ failures : int 0 0 3 0 0 0 0 0 0 0 ...
$ schoolsup : Factor w/ 2 levels "no","yes": 2 1 2 1 1 1 1 2 1 1 ...
$ famsup : Factor w/ 2 levels "no","yes": 1 2 1 2 2 2 1 2 2 2 ...
$ paid : Factor w/ 2 levels "no","yes": 1 1 2 2 2 2 1 1 2 2 ...
$ activities: Factor w/ 2 levels "no","yes": 1 1 1 2 1 2 1 1 1 2 ...
$ nursery : Factor w/ 2 levels "no","yes": 2 1 2 2 2 2 2 2 2 2 ...
$ higher : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
$ internet : Factor w/ 2 levels "no","yes": 1 2 2 2 1 2 2 1 2 2 ...
$ romantic : Factor w/ 2 levels "no","yes": 1 1 1 2 1 1 1 1 1 1 ...
$ famrel : int 4 5 4 3 4 5 4 4 4 5 ...
$ freetime : int 3 3 3 2 3 4 4 1 2 5 ...
$ goout : int 4 3 2 2 2 2 4 4 2 1 ...
$ Dalc : int 1 1 2 1 1 1 1 1 1 1 ...
$ Walc : int 1 1 3 1 2 2 1 1 1 1 ...
$ health : int 3 3 3 5 5 5 3 1 1 5 ...
$ absences : int 6 4 10 2 4 10 0 6 0 0 ...
$ G1 : int 5 5 7 15 6 15 12 6 16 14 ...
$ G2 : int 6 5 8 14 10 15 12 5 18 15 ...
$ G3 : int 6 6 10 15 10 15 11 6 19 15 ...

# 15行目の実行結果
sex
1 F
2 F
3 F
4 F
5 F
6 M

# 16行目の実行結果
absences
1 6
2 4
3 10
4 2
5 4
6 10

# 20行目の実行結果
# A tibble: 2 x 2
sex mean

1 F 16.7
2 M 16.7

# 22行目の実行結果
[1] 16.73077
# 23行目の実行結果
[1] 16.65775

# 25-29行目の実行結果
[1] "Average: 5.708861"
[1] "Median: 4.000000"
[1] "Mode: 0"
[1] "Var: 64.049541"
[1] "std: 8.003096"

# 31行目の実行結果
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 0.000 4.000 5.709 8.000 75.000

# 32行目の実行結果
age Medu Fedu traveltime
Min. :15.0 Min. :0.000 Min. :0.000 Min. :1.000
1st Qu.:16.0 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:1.000
Median :17.0 Median :3.000 Median :2.000 Median :1.000
Mean :16.7 Mean :2.749 Mean :2.522 Mean :1.448
3rd Qu.:18.0 3rd Qu.:4.000 3rd Qu.:3.000 3rd Qu.:2.000
Max. :22.0 Max. :4.000 Max. :4.000 Max. :4.000
studytime failures famrel freetime
Min. :1.000 Min. :0.0000 Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:4.000 1st Qu.:3.000
Median :2.000 Median :0.0000 Median :4.000 Median :3.000
Mean :2.035 Mean :0.3342 Mean :3.944 Mean :3.235
3rd Qu.:2.000 3rd Qu.:0.0000 3rd Qu.:5.000 3rd Qu.:4.000
Max. :4.000 Max. :3.0000 Max. :5.000 Max. :5.000
goout Dalc Walc health
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:2.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:3.000
Median :3.000 Median :1.000 Median :2.000 Median :4.000
Mean :3.109 Mean :1.481 Mean :2.291 Mean :3.554
3rd Qu.:4.000 3rd Qu.:2.000 3rd Qu.:3.000 3rd Qu.:5.000
Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
absences G1 G2 G3
Min. : 0.000 Min. : 3.00 Min. : 0.00 Min. : 0.00
1st Qu.: 0.000 1st Qu.: 8.00 1st Qu.: 9.00 1st Qu.: 8.00
Median : 4.000 Median :11.00 Median :11.00 Median :11.00
Mean : 5.709 Mean :10.91 Mean :10.71 Mean :10.42
3rd Qu.: 8.000 3rd Qu.:13.00 3rd Qu.:13.00 3rd Qu.:14.00
Max. :75.000 Max. :19.00 Max. :19.00 Max. :20.00
 今回、PythonとRで「基本統計量」を計算しました。微妙にコマンドが異なる所がありましたが、違和感なく双方で対応は取れそうです。

『RからPythonへの道』バックナンバー
(1) はじめに
(2) 0. 実行環境(作業環境)
(3) 1. PythonからRを使う方法
   2. RからPythonを使う方法
(4) 3. データフレーム
(5) 4. ggplot
(6) 5.行列

WindowsタブレットをUbuntu化する

 あっという間に今年も残り10日ですね。12月に入って何かと忙しい毎日を送っており、一段落したと思ったら、体調を崩して、熱を出す始末。現在も体調を回復させている途中・・。今年は健康も含め、あまり良いことがなかったので、来年こそは良い年にしたいなと思います。

 今回は、現実逃避?の一環で取り組んでいた、LenovoのWindowsタブレットのUbuntu化についてお話します。Lenovo_YOGA Tablet 2-851Fこのタブレットは5年ほど前に購入したもので、スペックは以下の通り。
 Model: Lenovo YOGA Tablet 2-851F
 OS: Windows10 Home(Windows8.1を無償Upgrade)
 CPU: Atom Z3745 1.33GHz
 Memory: 2.00GBlenovo_tablet_windows.png
 WindowsタブレットはWindows PCをそのままタブレットにしただけで、iPadに比べると使い勝手がすごく悪いですね。操作にマウスやキーボードが欲しくなることが多々あります。Windows自身もそもそも重たいし、Atomはさらにしんどいですね。購入したのは自分で自業自得なんですが・・使えば使うほどWindowsはイライラします・・。

 以前からこのタブレットをUbuntu化して快適に使ってやろうと思い、トライして来ましたが、うまく行かなくて、結局そのまま使われることもなく、放置されたままでした。
 今回、十分な時間を作ることができ、何度もトラブりながらようやくUbuntu化できましたので、その内容をお話します。

トラブり内容は以下の三点です。順を追ってお話します。
 ① 外付けメディアでブートできるまでのトラブル
 ② セットアップ時のトラブル
 ③ Wi-Fi設定のトラブル

① 外付けメディアでブートできるまでのトラブル
 まず、出鼻をくじかれたのが、外付けメディアでブートができなかったことです。ボリューム+ボタンを長押しながら電源を入れることで、以下のBIOSが立ち上がります。lenovo_tablet_boot1.png外付けのUbuntuインストールメディアをUSBポートにつないだ上で、Boot MenuからSecure Bootを「Off」にして本体を起動させますが、何度やっても、忌々しいWindows10起動画面が出現・・。lenovo_tablet_boot2.png ネット上で色々調べていると、まず、USBポートを認識してくれていないことが分かりました。試行錯誤を繰り返しましたが、結局原因は特定できず・・。BIOSの問題ではなく、Windows10自身がおかしいと考え、Windows10を立ち上げて、システム修復を行いました。

修復後再起動すると、「EFI USB Device (Generic-SD/MMC)」がBIOSで選択できるようになりました。lenovo_tablet_boot3.pngこれで、1つ目のトラブルは解決し、インストール作業へと進めました。

② セットアップ時のトラブル
 外付けUSBメディアは認識できて安心したのも束の間、インストールは何も進みませんでした。インストールするUbuntuのバージョンが18.04で、32bitハードウェアではNGなのかな?と思い、32bit対応のOS(Ubuntu16.04)も試しましたが、ブートせずにNG。
 またもや、ネット上で原因調査を継続。lenovo_tablet_setup.png最終的にインストールメディア(Ubuntu18.04)の「EFI−BOOTフォルダ」内に、「bootia32.efi」というファイルを置けばうまく行くとの記事を参考に、このファイルをネットで探して所定フォルダ内に入れて、再トライ。

 電源を入れると、インストーラが起動しました。これで2つ目のトラブルが解決したと喜んでいた所、インストールの終盤の「grub2パッケージをインストールしています」の画面で、以下のエラーが発生。え〜・・なんでやねん・・。

「GRUBのインストールに失敗しました」
’grub-efi-ia32’パッケージを/target/にインストールするのに失敗しました。GRUBブートローダなしではインストールしたシステムは起動しません。

 原因を調べていく中で、ブートエリアにファイルがコピーできていないのではないかということが薄っすらと分かりました。先程のBIOSに出ていた「Windows Boot Manager」が悪さをしているのではないかと考え、インストール途中で立ち上がっている中途半端なUbuntuからこのWindowsのブートエリアを消去しました。

 再起動すると「EFI USB Device (Generic-SD/MMC)」のみのBoot環境で、期待通り、最後までエラーを出さずにインストールを終えることができました。lenovo_tablet_boot4.png2つ目のトラブル解決しました。

③ Wi-Fi設定のトラブル
 無事にインストールでき、安心したのも束の間、タブレット内蔵のWi-Fiが認識しないトラブルに気付きました。USBのWi-Fi子機を挿すとWi-Fiが利用できるのですが、本筋ではないですね。

 ネットで調べていると、サイト情報からUbuntuカーネルをバージョンアップする必要があることが分かりました。カーネルをバージョンアップさせて、再起動すると、ヒットしており、内蔵Wi-Fiを認識できました。3つ目のトラブルも解決しました。

長い道のりでしたが、すべてのトラブルが解決し、Ubuntuタブレットに生まれ変わりました。lenovo_tablet_ubuntu.png
 操作性は、iPadほどではありませんが、動きはWindowsに比べはるかに快適です。十分遊べそうなので、何かに使っていこうと思います。

ブログのURLをhttpsに変更する

 いまさらですが、先日、ブログのURLをhttpからSecureなhttpsに変更しました。以前からSafariでWeb閲覧する際に、httpサイトを閲覧すると「安全ではありません」と表示が出ており、気になっていました。自分のブログサイトを確認しても同じだったので・・。httpサイト例_191201 早速、ブログの管理ページの「設定ー環境設定」を選択した後、上部メニューの「ブログの設定ーSSL設定」を選択し、以下の画面を出しました。SSL_setting_191201.pngその画面で、SSLを「有効」にして「更新する」ボタンを押すと、ファイル変換しているような画面が出て、数秒後に完了。操作は簡単で、自動でhttpsに変換してくれます。ネット記事等で調べてはいましたが、カウンタなどの外部サービスを参照しているURLは再設定する必要があるとのこと。

 変換後、確認すると予想通り、バーコード仕様のカウンタが消えていました。myblog_before_191201.png 再度、管理ページの「設定ープラグインの設定」を選択し、カウンタ再設定_191201プラグインの中から「FC2カウンター」を選択し、編集画面の下にある「設定」ボタンを押すことで、カウンタが復活しました。myblog_after_191201.png
 その後、問題なく利用できているのですが、ブログアクセス数が最近増加していることに気付きました。アクセスログを調べると、「googleクローラー」なる怪しげなアクセス元を見つけました。アクセス数も異常なくらい多い(その他のアクセスが少ない・・)。アクセスログ確認_191201より詳細に調べると、アクセスは米国からでgooglebot.comから確認されるだけで、
 66.249.79.76
 66.249.79.78
 66.249.79.80
 66.249.79.91
 66.249.79.93
の5箇所から自動でアクセスされていることが分かりました。GoogleCrawler_191201.png 一瞬ブログサイトが攻撃されているのかと思いましたが、Googleクローラーとは、ウェブページを巡回し、情報を収集してデータベースに登録(インデックス)するプログラム(ロボット)のことで、サイトの新しいページや更新された箇所を読み、検索結果ページに最新データを反映していくとのことで、悪者?ではないようです。まずは安心、だけどなんとなく気持ち悪い・・。httpからhttpsにブログのURLを変更したことにより、Googleのデータベースが更新されているのでしょう・・。

 この10日間のGoogleクローラーからのアクセスをまとめると以下の通りです。URLを変更した11/24を境に、急増していました。最近は1日150回アクセスされているようです・・。GoogleCrawler_AccessSummary_191201.png
 httpsサイトは、Google検索結果でも優先的に表示されるとの話がネット上に書かれてあったので、念のため、「考えるエンジニア」を検索してみると、1番目に表示されました。googleサーチ_191201今まで1番目に表示されることはなかったので、これもhttpsに切り替えたのが原因なのでしょうね。Googleクローラからのアクセス数はしばらくウォッチしていきたいと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: