日本脱出系ホームレスのマルチリンガルな日々

フルリモート引きこもりが外国語からプログラミング言語を使った海外生活を垂れ流す

Pythonで夏にまつわる単語の相関関係をグラフ化してみた for アドベントカレンダー

f:id:humuhimi:20181219130652p:plain

pythonと相関グラフ

すみませんだいぶドタバタで、アドベントカレンダーを書き始めます。

ネタがないので、先週やったpythonの練習をここで披露したいと思います!!

 

今回はグーグル先生から夏の単語「summer」と「swimming lesson」の検索結果を頂き、そこから相関関係がどうなのかをグラフにしてみたいと思います。

 

 

1.まずはx,yの相関係数を求める式(find_corr_x_y)をコーディングする(practice3_5)

def find_corr_x_y(x,y):
# if len(x) != len(y):
n = len(x)
try:
n2 = len(y)
if n != n2:
raise ValueError("invalid length of args!!")
except(Exception,ValueError) as e:
print(e)
else:
# find sum of product
prod = []
for xi, yi in zip(x,y):
prod.append(xi*yi)
sum_prod_x_y = sum(prod)
sum_x = sum(x)
sum_y = sum(y)
squared_sum_x = sum_x**2
squared_sum_y = sum_y**2
x_square = []
for xi in x:
x_square.append(xi**2)
# find the sum
x_square_sum = sum(x_square)
y_square = []
for yi in y:
y_square.append(yi**2)
y_square_sum = sum(y_square)

# use formula to calculate correlation
numerator = n*sum_prod_x_y - sum_x*sum_y
denominator_item1 = n*x_square_sum - squared_sum_x
denominator_item2 = n*y_square_sum - squared_sum_y
denominator = (denominator_item1*denominator_item2)**0.5
correlation = numerator/denominator

return correlation


x = [1,2,3]
y = [4,6]

print(find_corr_x_y(x,y))


2行目から21行目は変数の代入や公式に必要な部分ごとの計算をしています。

f:id:humuhimi:20181219131508p:plain

相関係数とは何か。その求め方・公式・使い方と3つの注意点 を引用(https://atarimae.biz/archives/7966)

22行目から26行目は公式に沿って式を組み立てています。

 

 

2.グーグル先生(Google Correlate)からcsvファイルをもらう

リンク↓

www.google.com

f:id:humuhimi:20181219130045p:plain

https://www.google.com/trends/correlate/

ここから、summerを検索!

そしたら、色々な夏に関係する言葉と相関係数が表示される

scvファイル形式でダウンロードする

 

3.pycharmで全体をコーディングしていく!

 

ここから、correlate-summer.csvファイルを作業ディレクトリに加え,メイン(practice3_8.py)のファイルに上記で作ったfind_corr_x_y(practice3_5),csvを読み込むのためのモジュール,グラフ作成用のモジュールmatplotlib.pyplotをimportしてくる。

f:id:humuhimi:20181219132523p:plain

correlate-summer.csv

 

import csv
import matplotlib.pyplot as plt

from Chapter3.practice3_5 import find_corr_x_y


def scatter_plot(x,y):
plt.scatter(x,y)
plt.xlabel('summer')
plt.ylabel('swimming-lesson_correlation')
plt.show()


def read_csv(filename):

with open(filename) as f:
reader = csv.reader(f)
next(reader)

summer = []
highest_correlated = []

for row in reader:
summer.append(float(row[1]))
highest_correlated.append(float(row[2]))
if len(summer) == 100:
break
return summer,highest_correlated

・scatter_plotで分散図を作る

・read_csvcsvファイルを読み込む

それぞれ100個ずつデータを持ってくるところでストップさせる。

if __name__ == '__main__':
summer, highest_correlated = read_csv('correlate-summer.csv')
corr = find_corr_x_y(summer,highest_correlated)
print('Highest correlation:{0}'.format(corr))
scatter_plot(summer,highest_correlated)

よってここで相関係数とグラフが出力される!

 

Highest correlation:0.9457379186632333

f:id:humuhimi:20181219133322p:plain

夏と水泳教室の相関グラフ

走り書きですが、こんな感じです!

ありがとうございました!!