「未分類」カテゴリーアーカイブ

熊澤3Dプリント

今回は3Dプリンターを使ってスマホスタンドを作成しました。始めはコップを作ろうとしていたのでしたがchatGPTに聞くと熱に弱いなどの問題があったため諦めました。最近、パソコンで作業をしながらスマホでゲームをしていたりオート周回などをしていたためいちいちスマホを持ち上げなくても画面が見えるようにしたいという望みからスマホスタンドを作ることにしました。また、机の上が狭いためどこに何があるかを分かりやすくしたいと思いました。

tinkercadではスマホスタンドを上のようなり、AnkerMakeでは下のようになりました。

実際に完成した物がこちらになります。

実際に使用してみると滑ってしまい固定できなかったため後ろにモバイルバッテリーなどの重さのあるものを置くことで固定に成功しました。滑り止めやストッパーを付けた方が良いなと思い今後の改善点です。しかし机の上が汚くものが多かったため重りに困らなく物のない場所を探す方が困難なため特に問題ではなかった。

実際にパソコンと併用してみると作成前に想像していたよりも使いやすかった。特にレポートを書く際にスマホの置き場所として重宝している。引用文献をスマホで探しそのページを開いたままパソコンでレポートを作成するなど少しずつ楽になっていいると思う。3Dプリンタを使ってみて作りたいものを形にするためには3Dプリンタの扱いに慣れる必要があると感じた。特に形の作り方や耐久性について慣れが足りていないと思ったものを形に出来ないなと感じた。。

永松3Dプリント

今回作成したのは、家の洗面所のスペースが足りなくなってきたため、洗面所に付けれるような小物入れを作成した。↓

実際に活用した感想としては、サイズを少し大きめに作ってしまったため扉が閉まらなくなってしまったが、それ以外はおおむね満足できる出来であった。

今回はもとからあった小物入れのサイズに近づけたものを作成したが、今後は今回のデータを基に底が深いバージョンや浅いバージョンなどが作れるため、必要に応じて作ろうと思う。

海田3Dプリント

机の上に使っていないペンがたくさんあるので、今回は引き出しを作りました。

これはティンカーキャドで作成した引き出しの中と外の箱になっています。

印刷するときは中はそのままの向きで作れますが、外はそのままでは印刷できないので画像の向きに直しました。

完成したものがこちらです。寸法通りに作れてていい感じです。

ペンを入れるとこんな感じ、縦幅はちょうどいいサイズで多く入るのが完璧!

HADで因子分析

はじめに
以前のブログで紹介した、統計ソフトHADについて紹介する。
今回は、DLからの一連の流れと、基礎統計量・因子分析の算出を行う。

インストラクション動画

心理学ではプロマックス回転

抽出方法・回転方法の説明

1. 抽出方法
・最尤法:母集団を推定する考え方。イメージとしては、全国規模。
・主因子法:今得られてるデータの中でまとめる方法。学生の中だけ。
・最小二乗法:よく使われる。尺度の単位を考慮する。

2. 回転方法
・プロマックス回転 (斜交回転)
 因子同士に相関があるようにまとめる方法。心理学は、人の心に関係するという共通事項があるので、相関があると見なしプロマックス回転を使う。
・バリマックス回転 (直交回転)
 反対に相関がないことを前提にする場合はバリマックス回転を使う。

因子分析手順
・分析1回目は, スクリープロットなどから因子数を予測する。
・分析2回目は, それをもとに因子負荷量を算出する。
・算出したら事前に建てた目安をもとに項目の削除を行う。目安としては, 共通性を0.2以下の項目は削除。パターン行列は0.4以上の項目で区切る。内的整合性の検討は, α=.80とするなど適宜調整する。
・分析3回目以降は, 項目の削除がある場合行う。
・残りは, 因子の命名, 下位尺度の算出。表の作成は, 因子負荷量・共通性・α係数・相関行列があればok.(固有率, 寄与率, 累積寄与率を書くことも)

質問紙研究の分析
・因子分析:尺度作成時 (作成しなくても行う場合も)
・相関分析:下位尺度得点から, 他に使用した尺度と
・分散, 重回帰分析:より詳細なデータが欲しいとき
・t検定:因子, 尺度内で, 高群/低群を25%ずつ抽出

因子分析のレポート(SPSS)
 過去に質問紙の作成を行って、因子分析・相関分析・t検定を行った例。統計ソフトは, SPSSを用いた。2年次に執筆したレポートだから書き方が間違いだらけ。表は動画内か先行研究などを参照してください。ついでにSPSSのマニュアルも添付。

マニュアル

====================================================================

余談(js-starとの比較)

js-starと分析結果が合うか確認してみた。
画像の通り、結果は合っていたが、なぜか有意差が出た時にHADのp値の表記がバグる。おそらく設定が足りてないんだと思うがなぜだ。まあでも、心理学レポートのフォーマットにあった図表もでるし、分析の選択も楽だし、外部ソフトを仲介せず、エクセル操作できるのはかなりお得。あとは使いこなせるかが問題

HADを使ってみる

はじめに
 卒論の統計処理を行おうとしたものの、js-starでは3要因の分散分析までしかできないことを知った。以前のブログで分析候補を挙げたところ、生理指標の大半が4, 5要因分散分析のため、かなり厳しめである。sasはちょいと面倒だし、だからといってspssを使うにも一々大学行って、21:50までしかできないから、新たなる統計ソフトのHADを使ってみる。分析したら、図表を作ってくれるらしい。

HADの詳細
・機能一覧:こちら
・DLサイト:こちら

Polar H10マニュアル

Polar H10は心拍計測トラッキングであり、多くの人から高く評価されている。高精度の心拍計測であり、Bluetoothでデータを取得できる優れものである。赤く囲まれたところから計測することができるようになっている。そんな計測器が実験室でも使うことができるようになったため、使い方について紹介する。

                 ↑ Polar H10

Polar H10を使う前にいくつか準備しなければいけない。

準備
 1, スマートフォンで ”Polar Flow” をインストールする。
   ↓
 2, Polar のアカウントを作成する。
  (生年月日や身長体重活動レベル等の設定は適当でも問題ないが、アカウント名等
   は英語で設定を行う必要がある)
   ↓
 3, ログイン

上記にある準備が出来たら、実際に Polar を装着し、心拍を計測していく。

計測
 1, Polar のバンドを若干きつめに腹部(鎖骨の少し下あたり)に装着し、本体をボタン部分に着け
  る(本体が前に来るように装着する)。
   ※本体を装着することで、電源が自動的に入る。
   ↓
 2, Polar Flow の設定から「その他のアウトドア」をタップし「その他の室内」にする。
   ↓
 3, 設定にあるペアリングを行う。
   ↓
 4, 「スタート」を押すと計測が記録される。
   ↓
 5, 「一時停止」を押し、停止ボタンを長押しすることで、トレーニングセッションを
  保存するか聞かれるので、保存を選択する。

文章の説明だけだとわからないところもあると思うので動画も用意しました。
  1から3までの流れの動画
  4から5までの流れの動画

ここまでで計測データが保存されたので、保存されたデータをパソコンで確認します。

保存データ確認方法
 1, こちらのサイトから Polar Flow に行き、サインインする。
   ↓
 2, カレンダーが表示され、計測日の記録をクリックする。
   ↓
 3, 「セッションをエクスポート」をクリックし、セッション(csv)を選択する。

以上のことを行うことで、Excelとして保存されます。それでは確認していきましょう。

Excel の確認方法

左の写真にあるようにB列にあるのが計測時間,C列にあるのが心拍数の数値となっている。もちろんグラフを出すこともできる(今回はじっとして計測していたため、あまり変化が見られないグラフとなっている)。

今回は心拍数のみを計測したが、心拍変動なども計測できるようだ。

Pythonを用いたツンデレChat GPTとの対話

サンプル動画

ツンデレ

開発環境準備
・Chat GPT:テキストを考える
・Coeiroink:テキスト読みあげ→Voicevoxはコードを指定すれば使える
・Notepad++:プログラム書く
・python:プログラム動作
・IrfanView:Chat GPTリロードのスクショに

*Pythonの開発環境設定も忘れずに

Pythonプラグ(参考サイト

$ pip install requests
$ pip install pydub
$ pip install pyaudio
$ pip install pillow
$ python hello_ink.py

*ctrl+Cでpython対話終了

ファイルの保存先

Cドライブ直下に「INK」というファイルを作成し、そこにNotepad++で書いたプログラムなど今回用いるファイルを格納する。INK意外にした場合、プログラムを書き換える必要がある(auto01.py)。

Anaconda Navigater

以前使用したのが保存されないのか、「Anaconda Navigater→INK」を選択してからでないと左画像のようにPrompt内で(base)のままでエラーをはかれる。

動作チェック
そもそもCoeiroinkに読んでもらえるかの動作チェックは下記プログラムから。9行目のspeaker_idからつくよみちゃんのタイプを切り替える(ID6など)。

import json
 
import requests
from pydub import AudioSegment, playback
 
# パラメータ
text = "こんにちは、つくよみちゃんです。よろしくお願いします。"  # セリフ
text2="先日さ、友達とカラオケに行ったんだけど、その時の話がすごく面白かったんだよね。みんなで歌って楽しんでいたんだけど、途中で友達の一人が「誰か知らないけど、めちゃくちゃ上手い人が歌ってる!」って言い出したんだ。";
speaker_id = 1  # スピーカーID (0:つくよみちゃん)
 
# 音声合成のクエリの作成
response = requests.post(
    "http://localhost:50031/audio_query",
    params={
        'text': text2,
        'speaker': speaker_id,
        'core_version': '0.0.0'
    })
query = response.json()
 
# 音声合成のwavの生成
response = requests.post(
    'http://localhost:50031/synthesis',
    params={
        'speaker': speaker_id,
        'core_version': "0.0.0",
        'enable_interrogative_upspeak': 'true'
    },
    data=json.dumps(query))
 
# wavの音声を再生
playback.play(AudioSegment(response.content,
    sample_width=2, frame_rate=44100, channels=1))

実行するためのプログラム
この後に出てくる「setting01.txt」というChat GPT性格設定に使うテキスト文を元に、ヤンデレなり、ツンデレなり、思春期の娘など自分の好きなタイプに合わして会話できる。

注意点
・15行目:txtファイルの呼び出し
・21, 55, 69行目:カーソル位置
・38行目:画面のサイズを適当に→設定からMaxサイズを調べちょい減らした値

#auto01.py
import pyautogui
import pyperclip
import time
import json
import requests
from pydub import AudioSegment, playback
 
speaker_id = 0  # スピーカーID (0:つくよみちゃん)
#speaker_id = 1  # スピーカーID (まなノーマル)
config=""
 
##########################################
def copy_and_paste(text):
    with open('C:/INK/setting1.txt', 'r',encoding='utf-8') as f:
        config = f.read()
    #print(config)
 
    # インプット部分をクリックします
    #pyautogui.moveTo(-905, 1370)
    pyautogui.moveTo(361, 994)
    pyautogui.click()
    time.sleep(0.5)
 
    #print(text)
    print("_")
     
    #入力する
    pyperclip.copy(text)
    pyautogui.hotkey('ctrl', 'v')
    pyperclip.copy(config)
    pyautogui.hotkey('ctrl', 'v')
    pyautogui.press('enter')
 
    #出力終了を待つ
    time.sleep(1)
    print('scan ',end='')
    search_region = (0, 800, 900, 1070)
    
    time.sleep(5)
    
    
    while pyautogui.locateOnScreen('C:/INK/regbutton.png', region=search_region) == None:
        time.sleep(0.1)
        print('>',end='')
    print(" found")
    
   
    
         
    #下までスクロール
    #time.sleep(1)
    #pyautogui.scroll(-5000)
    #time.sleep(1)
    pyautogui.moveTo(856, 923)
    pyautogui.click()
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
    pyautogui.press('down')
 
    #x, y = -548, 1321
    x, y = 856, 901
    step=20
    prev_clipboard = pyperclip.paste()
 
    time.sleep(1)
 
    for i in range(40):
        y -= step
        pyautogui.moveTo(x, y)
        pyautogui.click()
         
        # クリップボードのテキストを取得して表示する
        clipboard_text = pyperclip.paste()
        #print(y, clipboard_text)
        if clipboard_text != prev_clipboard:
            break
         
        # 前回のクリップボードの内容を更新する
        prev_clipboard = clipboard_text    
 
    print(clipboard_text)
    pyautogui.moveTo(1791, 1220) #コンソールに復帰
    pyautogui.click()    
    return clipboard_text
 
##########################################
def speakINK(msg):
    # 音声合成のクエリの作成
    response = requests.post(
        "http://localhost:50031/audio_query",
        params={
            'text': msg,
            'speaker': speaker_id,
            'core_version': '0.0.0'
        })
    query = response.json()
      
    # 音声合成のwavの生成
    response = requests.post(
        'http://localhost:50031/synthesis',
        params={
            'speaker': speaker_id,
            'core_version': "0.0.0",
            'enable_interrogative_upspeak': 'true'
        },
        data=json.dumps(query))
      
    # wavの音声を再生
    playback.play(AudioSegment(response.content,
        sample_width=2, frame_rate=44100, channels=1))    
     
##########################################
def main():
  
    print("チャットをはじめます。q または quit で終了します。")
    print("-"*50)
    while True:
        user = input("<あなた>\n")
        if user == "q" or user == "quit":
            print("お疲れ様でした")
            break
        else:
            buf1=copy_and_paste(user)
            speakINK(buf1)
 
 
 
# 現在のカーソル位置を取得
#current_position = pyautogui.position()
#print("現在のカーソル位置:", current_position)
 
 
 
#buf1=copy_and_paste("こんにちは")
#speakINK(buf1)
 
 
 
#image_location  = pyautogui.locateOnScreen('C:/Users/Science/SELENIUM/clipicon.png')
#print(image_location )
 
if __name__ == "__main__":
    main()

人格設定
Chat GPTの人格設定で、文頭に「。」がついていると読み込みやすい。「~の話し方」「~という感じで」とかアバウトでok.

。敬語は使わず、ヤンデレの話し方をして下さい。回答は50~100文字くらいで行ってください。口調は「なんで逃げるの?」とか「あなたのことは何でも知ってる」「私だけはずっと側にいるよ」といった感じで話してください。

カーソル位置の取得
Pythonで勝手に文章のコピペ(コントロール)してもらうのに、座標を一つずつ教えてやらないといけないみたい。x, y座標を調べるためのプログラムは「auto02」。やり方は下記動画の通りマウスカーソルを合わして実行するだけ。座標の入力は「auto01」21, 55, 69行目。

#auto02.py
import pyautogui
import pyperclip
import time
  
# 現在のカーソル位置を取得
time.sleep(1)
current_position = pyautogui.position()
print("現在のカーソル位置:", current_position)

参考サイト(152)
Pythonで画面操作
Pythonでつくよみ

質問紙調査

Forms作成方法

【項目作成】

テキスト
 内省報告や氏名など文字・数値入力。「長い回答」をオンにすると段落を構成できるため、回答者が見返すのに便利な機能。「・・・」から数値制限(年齢回答時に外れ値対策)を行える。Youtube, 画像などの挿入も可能。

選択肢
 性別などの回答に用いる。複数回答もチェックを入れると可能になる。「・・・」から選択肢をシャッフルすることができる。

リッカート
 尺度の回答。「ステートメント=項目」「オプション=~件法」。

セクション
 尺度や基本項目(氏名や年齢など)の切り替えなど目印に使える。

【回答リンク】

回答者:リンク
調査者:リンク

質問紙レポート

授業内で独自に作成した尺度を基に、「大学生のSNS利用が対人ストレスに及ぼす影響」について調査して、レポート化したもの。2年次に作成したため、結果の書き方等ツッコミどころはあるため、温かい目で見守って下さい。

Finometer 勉強会

長野ゼミの卒論生がフィノメーターを使用するとのことで、「重田・永松・河田・漆師さん・長野先生」の5人で使用方法を学んだ。後ほど、永松さんが使用方法をブログに投稿するため、ざっくりとメモ書きしておく。

マニュアル・プログラム】
2014年時点でtairaさんがゲーム時の生体計測を扱っており、そこにフィノメーターに用いるマニュアル・プログラム一式を添付 (E-152:リンク)されてた!!

↑これを読めば一先ず使用可能に…

【使用方法】
1, 本体の電源を入れる

USBケーブルでPCと接続して、フィノメーターの電源を入れる。

ソフト「BeatScope Easy」を立ち上げ、、3枚目画像のように青く光ればok.
(光らなければもう一度やり直し)

2, カフの装着

注意点
・カフ自体、高価で繊細なため、使用時は細心の注意を
・カフを装着の際、開きすぎると割れてしまうため指1本通るくらいに留める
・計測中は指を通さないと破裂する恐れがある
・保存時は段ボールを噛ましておくと長持ちする
・S14とかが年号で、22が一番新しかった気がする

非利き手の腕に通して、マジックテープで固定する。
測定部位は、心臓付近が好ましいため、画像のようにクッション等で調節する。

装着位置
・中指の第1, 2関節の中間の腹部
・カフの黒点(光センサー)が指の側面を挟むように装着

光センサがズレると計測できず、またきつく装着すると圧迫されてしまう。手首につける方は腕時計に近い位置でかつ緩めに装着する)

3, 高さセンサーの装着

肘より少し上らへんにマジックテープで固定して、固定したちょい先をめくって高さセンサを貼り付ける。高さセンサはもちろん心臓の高さまでもっていく。3枚目画像のように、水色の丸で囲った部分(カフ・高さセンサ)の差圧で血圧を測定するらしい。

高さセンサの装着が終了次第、フィノメーターのコマンド「Height」を音が鳴るまで長押し。-00表示になれば補正が完了する。-10でも開始できるけど、-70とかは「start/stop」でリセットしてから、もう一度「Height」を押す。

4, 計測開始

ソフト「BeatScope Easy」を立ち上げ、中央上にある”Start”から実験参加者の基本的なプロフィール(赤丸は必須回答)を入力したらok. Fingerにチェックをつけることと、明らかに身長が低い人には気をつける(年齢は大学生だから同じでいい)。

水色:CO
黄色:血管抵抗

あとはHRなど。左下の赤丸部分が測定経過時間を表している。
脈波(オレンジ)が直線が多くあると調整段階のため、少々待機。

注意点
前半5分は測定値が乱れてしまうため、切り捨てなければならない。そのため、安静期4分ならば6~8分とる必要があるため、実験スケジュールを確認。
指先が冷えていると外れ値がバンバン出やすい。実際にあったのがこれ↓ 

手先が冷たいといえばもちろん某しげたのお手て。
周囲からの評判も生理指標が汚い男として知れ渡ってしまった。

 ←Fitbit_HR

まあそんなことは置いといて、手先がめっちゃ冷たい人だと計測が困難。見極め方は「HR50~100」が良いとされているため、それ以下(HR20, 30)だった場合…

あとは市販の血圧計190, フィノメーター140であれば差分の50を全体の値から引いていくという方法もあるらしい。先生曰く。つまり、脈波(オレンジ)が横ばいになっていると計測できておらず、安静期間までを伸ばす。

残りの計測器外し方は、メモの通り。

分析方法に関してはスマホで動画撮影したのでそれを使ってもらえればと(毎回新しいファイルで動画編集した結果画質がごみになりました…)。

データ処理
1, exportから .csvファイルをデスクトップに保存(BeatScope Easy)
2, Beat Helperからファイルを変換する
3, 変換したファイルをもとにグラフ化する(一人ずつ変換を行う)