Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rでドレミ/Do-Re-Mi_with_R
Search
florets1
September 28, 2026
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rでドレミ/Do-Re-Mi_with_R
florets1
September 28, 2026
More Decks by florets1
See All by florets1
整数計画ソルバーで遊ぼう/using_an_integer_programming_solver_in_r
florets1
0
54
データ分析をはじめよう/lets_start_data_analysis
florets1
2
1.1k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
870
Tableauとggplot2の背景/Background_of_Tableau_and_ggplot2
florets1
0
110
Rで学ぶデータハンドリング入門/Introduction_to_Data_Handling_with_R
florets1
0
180
人工知能はクロスジョインでできている/AI_Is_Built_on_Cross_Joins
florets1
0
140
仮説の取扱説明書/User_Guide_to_a_Hypothesis
florets1
4
510
複式簿記から純資産を排除する/eliminate_net_assets_from_double-entry_bookkeeping
florets1
1
530
カイ二乗検定は何をやっているのか/What_Does_the_Chi-Square_Test_Do
florets1
7
2.6k
Other Decks in Programming
See All in Programming
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
190
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
300
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
No More NoSuchMethodError
exoego
1
110
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
200
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.7k
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
450
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
180
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
1k
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.3k
Designing for Performance
lara
612
70k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
Paper Plane (Part 1)
katiecoart
PRO
2
12k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
WENDY [Excerpt]
tessaabrams
14
40k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
370
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
Why Our Code Smells
bkeepers
PRO
340
58k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Transcript
Rでドレミ 2026.10.03 Tokyo.R #122 1
ピアノの鍵盤、なぜこんな並び方 ・1オクターブに白鍵7個、黒鍵5個 ・白鍵の間隔:全・全・半・全・全・全・半 ・そもそも、なぜ12音 →「倍音」が原因なんです 2
Rで説明します 3
音には倍音が含まれている 弦を弾くと ・弦全体が振動 ・2つに分かれて振動 ・3つに分かれて振動 ・4つに分かれて振動 ・… これらが同時に起こります 4
1倍, 2倍, 3倍, 4倍, … 一つの音の中には 基本となる周波数だけでなく 自然数倍の周波数「倍音」も含まれています 私たちは、基本音だけを聞いているのではなく 倍音の合成を一つの「音」
として聞いています。 5
周波数2倍 弦のちょうど半分のところを押さえて 半分の長さの弦を鳴らしてみます 波長は半分 周波数は2倍 もとの音と調和してきれいに響きます 6
周波数2倍=1オクターブ上 ×2, ×3, ×4, ×5 , ×6, ×7,… ×1, ×2,
×3, ×4, ×5, ×6, ×7,… 人間は、周波数が2倍になった音を 1オクターブ上の同じ名前の音 として扱っています 周波数2倍の音は、もとの音に最初から含まれている倍音の一つです それらを特別に近い関係の音と感じているのです 7
周波数3倍 2で割って 1.5倍 周波数3倍はもとの音から1オクターブ上なので 1オクターブ下げて( 2で割って)考えましょう。 この音も、もとの音とよく調和します 弦で考えると 長さは2/3 周波数は3/2=1.5
8
1.5倍を繰り返してみる ある音から周波数を1.5倍すると よく調和する別の音が得られます その音からさらに1.5倍するとまた よく調和する別の音が得られます 正規化 ただし、そのままではどんどん音が高くなってしまいます そこで、2倍を超えたら2で割り、常に同じオクターブ内に戻します 9
1.5倍を繰り返してみる(Rで) 10
コードの説明 何をやっているのか 周波数を1.5倍する操作を繰り返し、2倍を超えたらオクターブを下げて 周波数を常に1~2の範囲に収めます 1.5倍を繰り返したいので、1.5をbaseという変数に入れています このあと指数乗を使って、以下のように計算します 1.5^0 = 1 1.5^1
= 1.5 1.5^2 = 2.25 1.5^3 = 3.375 … 11
コードの説明 seq()は連続した数を作る関数 この場合は、0, 1, 2, 3, …, 20 という21個の数を作ります 1.5倍を0回、1回、2回、…20回と繰り返すための指数です
12
コードの説明 ^はべき乗 baseは1.5、exponentは0~20なので 1.5 ^ c(0, 1, 2, 3, …)
が一度に計算され、結果は 1.000 1.500 2.250 3.375 … となります Rはfor文を書かなくてもベクトルに対してまとめて 計算することができます 13
コードの説明 やっていること:2倍を超えたら2で割って、1~2の範囲に戻します 例えば freq = 5.0625 log(freq, 2) は「2を何乗するとfreqになるか」 2^2
< 5.0625 < 2^3 なのでlog(freq, 2)は2と3の間 trunc()で小数部分を切り捨てて結果は 2 したがって normal_freq = 5.0625 / (2^2) 結果は1.265625となり、1~2の範囲に収まります つまり、何回オクターブを下げればよいかを調べて、その分で割っています 14
「正規化」について 2倍を超えたら2で割って、1~2の範囲に戻す この操作のことを、今回の発表では「正規化」と呼ぶことにします 例えばもとの周波数を1とすると 1, 2, 4, 8, … これらはすべてオクターブ違いの同じ名前の音と考え
1→1, 2→1, 4→1, 8→1 のようにして、オクターブ違いを取り除き、すべて1~2の範囲に収めます 正規化によって、音の高さそのものではなく 1オクターブの中のどの位置にいるのか だけを比較できるようにするのです 15
データフレーム化 これまで別々に作っていた exponent, freq, normal_freq という3つのベクトルを、ひとつの データフレームにまとめています 16
1周した! 正規化周波数(normal_freq)が 1.00≒1.01 ほぼ同じ つまり 周波数の1.5倍を12回 繰り返したら1周して 同じ音が現れた 17
音は12個にしよう 周波数の1.5倍を12回 繰り返したら1周 13個目からは同じ音 18
12件だけにしぼる |> はパイプ演算子です 左側のデータdfを 右側のfilterに流している というイメージで読みます 19
←基準音 ←相性が悪い音 基準音との響きがよくない 20
目印をつける mutateで列を追加しています パイプ演算子でデータが左から右へ流れているように読んでください 21
セルに色をつける 0は白、1は黒 22
ソートする arrangeでソートを行いました normal_freq(正規化周波数)の昇順 23
Cド Dレ 名前をつける Eミ Fファ Gソ Aラ Bシ 白鍵にドレミファソラシという名前をつけました 24
Photo: Kjethdubns / Wikimedia Commons, CC0 1.0 25
Cド Gソ Dレ Aラ Eミ Bシ ソートを戻す Fファ この順番だと、黒鍵はドとの距離が遠いことがわかりやすいですね 26
Cド Gソ Dレ Aラ Eミ Bシ 五度圏とも一致 Fファ 27
五度圏とは ・音を理解しやすくした図 ・音に関する諸々が整理されて とても便利な早見表 実は 12音の構成過程からみると、そもそも 五度圏の音並びが先であって、これを わざわざ別の基準でソートし直したのが ドレミファソラシなのです 28
ちょっと補足 12回で1周する と説明してきましたが 実際は少しズレています 1.00≠1.01 現代のピアノでは 12個の音に少しずつズレを 分担してもらっています 29
Cド 現在のピアノでは Dレ 隣の鍵盤との周波数比を 2^(1/12)として Eミ Fファ Gソ 1.00=1.00 ピッタリ1周
Aラ Bシ 30
まとめ 31
まとめ ・1オクターブが12音 ・白鍵7個、黒鍵5個 ・白鍵の間隔:全・全・半・全・全・全・半 「倍音」が原因でした 響きのよい2倍音と3倍音(正規化すると1.5倍) から構成した結果なのです 32