buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Python 好きなピンクを相関分析してみる

社内でLTイベントで「ピンク色のRGB値」と「好き度」に 関連があるのかを相関分析して発表しました

データ準備

24種類のピンクの好き度を「0~5」で0.5刻みで数値にしました ピンク色、何種類知ってる?デザインに使えるピンク色24選&事例11選

私の好きな・そうでもないピンクはこんな感じです

f:id:butorisa:20201020135517p:plain

好きなピンクとRGB値にどんな関連があるのでしょうか?

import requests
from bs4 import BeautifulSoup
# スクレイピングでHTMLを取得
response = requests.get('https://goworkship.com/magazine/pink-palette-design/')
soup = BeautifulSoup(response.content, 'html.parser')

# <h4>タグの色の名前を取得
color_name = soup.find_all('h4')

color_list = []
for color in color_name:
    # color:bs4.element.Tag
    str_color = color.text
    color_mod = str_color.replace('<h4>', '')
    color_mod = color_mod.replace('</h4>', '')
    color_list.append(color_mod)

print(color_list)

['1. サーモン', '2. ウォーターメロン', '3. ファンダンゴ', '4. ベビーピンク', '5. バブルガム', '6. クリーミーピンク', '7. タフィーピンク', '8. ラベンダー', '9. アマランサス', '10. ローズピンク', '11. ブリック', '12. マゼンタ', '13. フラミンゴ', '14. カーネーション', '15. ツリアン', '16. レモネード', '17. スリーズ', '18. ウルトラピンク', '19. パンチ', '20. フレンチローズ', '21. ルビー', '22. ホットピンク', '23. フューシャ', '24. ピンク', '1. ホットピンク', '2. カーネーション', '3. ピギーピンク', '4. ベビーピンク', '5. ライトピンク', '6. チェリーブロッサム', '7. ラベンダー', '8. フューシャ', '9. チャイナピンク', '10. コンゴピンク', '11. ピンクレース']

# <p>タグのRGB値を取得
rgb = soup.find_all('p')

rgb_list = []
for el in rgb:
    str_rgb = el.text
    if 'RGB\u3000' in str_rgb:
        rgb_mod = str_rgb.replace('<p>', '')
        rgb_mod = rgb_mod.replace('</p>', '')
        rgb_mod = rgb_mod.replace('RGB\u3000', '') # RGB+全角スペース
        rgb_mod = rgb_mod.replace(' ', ',')
        rgb_list.append(rgb_mod)
print(rgb_list)

['253,171,159', '254,127,156', '223,82,134', '245,195,194', '254,91,172', '255,105,180', '249,135,197', '251,174,210', '241,156,187', '255,102,204', '251,96,127', '255,0,144', '252,163,183', '255,166,201', '222,111,161', '253,185,200', '222,49,99', '255,111,255', '236,85,120', '246,74,138', '224,17,95', '248,24,148', '255,0,255', '252,15,192']

取得した色の名前とRGB値を手動でcsvにしました(がんばれなかった)

相関分析を実行

import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt  
%matplotlib inline
import seaborn as sons

csv_data = pd.read_csv('reg_pink.csv')
data = pd.DataFrame(csv_data)
pd.DataFrame(csv_data)

長いので10色だけ載せています

f:id:butorisa:20201020135605p:plain

# RedとLIKEの関連
x = data[['R']]
y = data[['LIKE']]

# 相関分析
df = data[[x.columns[0], y.columns[0]]]
corr_mat = df.corr(method='pearson')
print(corr_mat)

sons.heatmap(corr_mat,  
            vmin=-1.0,  
            vmax=1.0,  
            center=0,  
            annot=True, # True:格子の中に値を表示  
            fmt='.1f',  
            xticklabels=corr_mat.columns.values,  
            yticklabels=corr_mat.columns.values  
           )  
plt.show()

f:id:butorisa:20201020135734p:plain

# GreenとLIKEの関連
x = data[['G']]
y = data[['LIKE']]

# 相関分析
df = data[[x.columns[0], y.columns[0]]]
corr_mat = df.corr(method='pearson')
print(corr_mat)

sons.heatmap(corr_mat,  
            vmin=-1.0,  
            vmax=1.0,  
            center=0,  
            annot=True, # True:格子の中に値を表示  
            fmt='.1f',  
            xticklabels=corr_mat.columns.values,  
            yticklabels=corr_mat.columns.values  
           )  
plt.show()

f:id:butorisa:20201020135757p:plain

# BlueとLIKEの関連
x = data[['B']]
y = data[['LIKE']]

# 相関分析
df = data[[x.columns[0], y.columns[0]]]
corr_mat = df.corr(method='pearson')
print(corr_mat)

sons.heatmap(corr_mat,  
            vmin=-1.0,  
            vmax=1.0,  
            center=0,  
            annot=True, # True:格子の中に値を表示  
            fmt='.1f',  
            xticklabels=corr_mat.columns.values,  
            yticklabels=corr_mat.columns.values  
           )  
plt.show()

f:id:butorisa:20201020135654p:plain

相関分析で分かったこと

RGBいずれも高い相関はなかったですが、「Greenが低いピンクのほうが好き度が高い」感じです Greenは高いと白に近づくので、私は濃いピンクが好きそうです!