Pythonで夏にまつわる単語の相関関係をグラフ化してみた for アドベントカレンダー
すみませんだいぶドタバタで、アドベントカレンダーを書き始めます。
ネタがないので、先週やった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行目は変数の代入や公式に必要な部分ごとの計算をしています。
22行目から26行目は公式に沿って式を組み立てています。
2.グーグル先生(Google Correlate)からcsvファイルをもらう
リンク↓
ここから、summerを検索!
そしたら、色々な夏に関係する言葉と相関係数が表示される
scvファイル形式でダウンロードする
3.pycharmで全体をコーディングしていく!
ここから、correlate-summer.csvファイルを作業ディレクトリに加え,メイン(practice3_8.py)のファイルに上記で作ったfind_corr_x_y(practice3_5),csvを読み込むのためのモジュール,グラフ作成用のモジュールmatplotlib.pyplotをimportしてくる。
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で分散図を作る
それぞれ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
走り書きですが、こんな感じです!
ありがとうございました!!