mrrpropy 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,632 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "a7949c0d",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Tutorial document for RGB Hexagram (Kondo 2025)"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "markdown",
13
+ "id": "2dd34030",
14
+ "metadata": {},
15
+ "source": [
16
+ "This jupyter lab demonstrates the creation of RGB hexagrams based on Kondo (2025) and a tutorial on analysis with RGB hexagrams using sample data. <br>\n",
17
+ "Please see other jupyter labs for examples of application to 4D and 5D data."
18
+ ]
19
+ },
20
+ {
21
+ "cell_type": "code",
22
+ "execution_count": 1,
23
+ "id": "dfbb593d",
24
+ "metadata": {},
25
+ "outputs": [],
26
+ "source": [
27
+ "import pandas as pd\n",
28
+ "import numpy as np\n",
29
+ "import time\n",
30
+ "import matplotlib.pyplot as plt\n",
31
+ "import matplotlib.gridspec as gridspec\n",
32
+ "from matplotlib.colors import ListedColormap\n",
33
+ "from matplotlib.colors import LinearSegmentedColormap"
34
+ ]
35
+ },
36
+ {
37
+ "cell_type": "markdown",
38
+ "id": "ccb2df2e",
39
+ "metadata": {},
40
+ "source": [
41
+ "# Create RGB Hexagram array data"
42
+ ]
43
+ },
44
+ {
45
+ "cell_type": "markdown",
46
+ "id": "461bcbad",
47
+ "metadata": {},
48
+ "source": [
49
+ "The size of the RGB hexagram can be specified by changing the coefficient k (see Kondo 2025 for details). <br>\n",
50
+ "(k<=11 is recommended.)"
51
+ ]
52
+ },
53
+ {
54
+ "cell_type": "code",
55
+ "execution_count": 2,
56
+ "id": "1ec05cde",
57
+ "metadata": {},
58
+ "outputs": [
59
+ {
60
+ "name": "stdout",
61
+ "output_type": "stream",
62
+ "text": [
63
+ "grid size : 24\n",
64
+ "center pos: 6\n",
65
+ "RGB pos for Green:\n",
66
+ "R: 6, 22\n",
67
+ "G: 3, 6\n",
68
+ "B: 22, 3\n",
69
+ "CYM pos:\n",
70
+ "C: 6, 3\n",
71
+ "Y: 3, 22\n",
72
+ "M: 22, 6\n",
73
+ "----\n",
74
+ "basic RGB-W grid num: 2\n",
75
+ "one-cycle grid num : 18\n",
76
+ "max-cycle grid num : 30\n",
77
+ "changing ratio : 85.0\n",
78
+ "min changing ratio : 51.0\n",
79
+ "----\n",
80
+ "sample grid cycle\n",
81
+ "R->Y->G->C->B->M->...\n",
82
+ "rgb_hex shape: (24, 24)\n",
83
+ "----\n",
84
+ "output_filename-> r_file: rw_hex_test_d.csv , g_file: gw_hex_test_d.csv , b_file: bw_hex_test_d.csv n_file nw_hex_test_d.csv\n"
85
+ ]
86
+ }
87
+ ],
88
+ "source": [
89
+ "from generate_rgb_hex import generate_rgb_hex\n",
90
+ "\n",
91
+ "# input RGB hexagram size parameter\n",
92
+ "k = 2\n",
93
+ "\n",
94
+ "# generate RGB hexagram array-> r_hex:Red data, g_hex:Green data, b_data:Blue data, num_hex:Area data\n",
95
+ "# r,g,b_hex array data between 0 to 1, num_hex data between 1 to 15\n",
96
+ "r_hex, g_hex, b_hex, num_hex = generate_rgb_hex(k)"
97
+ ]
98
+ },
99
+ {
100
+ "cell_type": "markdown",
101
+ "id": "07665754",
102
+ "metadata": {},
103
+ "source": [
104
+ "# Plotting base RGB hexagram results"
105
+ ]
106
+ },
107
+ {
108
+ "cell_type": "markdown",
109
+ "id": "be83eb92",
110
+ "metadata": {},
111
+ "source": [
112
+ "r_hex: Red, g_hex: Green, and b_hex: Blue normalized RGB value distribution are plotted. <br>\n",
113
+ "num_hex is the Areas of RGB hexagram"
114
+ ]
115
+ },
116
+ {
117
+ "cell_type": "code",
118
+ "execution_count": 3,
119
+ "id": "2fc91c12",
120
+ "metadata": {},
121
+ "outputs": [
122
+ {
123
+ "name": "stderr",
124
+ "output_type": "stream",
125
+ "text": [
126
+ "includes Axes that are not compatible with tight_layout, so results might be incorrect.\n"
127
+ ]
128
+ },
129
+ {
130
+ "data": {
131
+ "image/png": "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\n",
132
+ "text/plain": [
133
+ "<Figure size 1296x864 with 6 Axes>"
134
+ ]
135
+ },
136
+ "metadata": {
137
+ "needs_background": "light"
138
+ },
139
+ "output_type": "display_data"
140
+ }
141
+ ],
142
+ "source": [
143
+ "fig = plt.figure(figsize=(18, 12))\n",
144
+ "gs = gridspec.GridSpec(2, 3, width_ratios=[1, 1, 0.05], height_ratios=[1, 1]) # 2行3列\n",
145
+ "\n",
146
+ "# position of each plot\n",
147
+ "ax0 = fig.add_subplot(gs[0, 0]) # r_hex\n",
148
+ "ax1 = fig.add_subplot(gs[0, 1]) # g_hex\n",
149
+ "cax1 = fig.add_axes([0.82, 0.53, 0.015, 0.4]) # [left, bottom, width, height]\n",
150
+ "\n",
151
+ "ax2 = fig.add_subplot(gs[1, 0]) # b_hex\n",
152
+ "ax3 = fig.add_subplot(gs[1, 1]) # num_hex\n",
153
+ "cax3 = fig.add_axes([0.82, 0.05, 0.015, 0.4])\n",
154
+ "\n",
155
+ "# r_hex\n",
156
+ "im0 = ax0.imshow(r_hex[:, :], vmin=0, vmax=1, cmap='coolwarm', origin='lower')\n",
157
+ "ax0.set_title('r_hex RGB Hexagram data', fontsize=16)\n",
158
+ "ax0.axis('off')\n",
159
+ "\n",
160
+ "# g_hex\n",
161
+ "im1 = ax1.imshow(g_hex[:, :], vmin=0, vmax=1, cmap='coolwarm', origin='lower')\n",
162
+ "ax1.set_title('g_hex RGB Hexagram data', fontsize=16)\n",
163
+ "ax1.axis('off')\n",
164
+ "fig.colorbar(im1, cax=cax1, label='g_hex value')\n",
165
+ "cb1 = fig.colorbar(im1, cax=cax1)\n",
166
+ "cb1.set_label('rgb_hex value', fontsize=16)\n",
167
+ "cb1.ax.tick_params(labelsize=14)\n",
168
+ "\n",
169
+ "# b_hex\n",
170
+ "im2 = ax2.imshow(b_hex[:, :], vmin=0, vmax=1, cmap='coolwarm', origin='lower')\n",
171
+ "ax2.set_title('b_hex RGB Hexagram data', fontsize=16)\n",
172
+ "ax2.axis('off')\n",
173
+ "\n",
174
+ "# num_hex\n",
175
+ "im3 = ax3.imshow(num_hex[:, :] * 256.0, vmin=0, vmax=19, cmap='tab20', origin='lower')\n",
176
+ "ax3.set_title('num_hex Index Map', fontsize=16)\n",
177
+ "ax3.axis('off')\n",
178
+ "cb3 = fig.colorbar(im3, cax=cax3)\n",
179
+ "cb3.set_label('Index', fontsize=16)\n",
180
+ "cb3.set_ticks(np.arange(0, 16, 3))\n",
181
+ "cb3.ax.tick_params(labelsize=14)\n",
182
+ "\n",
183
+ "plt.tight_layout(rect=[0, 0, 0.85, 1])\n",
184
+ "plt.show()\n"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 4,
190
+ "id": "9e91ad12",
191
+ "metadata": {},
192
+ "outputs": [
193
+ {
194
+ "name": "stdout",
195
+ "output_type": "stream",
196
+ "text": [
197
+ "(24, 24)\n",
198
+ "(24, 24)\n",
199
+ "(24, 24)\n"
200
+ ]
201
+ }
202
+ ],
203
+ "source": [
204
+ "print(r_hex.shape)\n",
205
+ "print(g_hex.shape)\n",
206
+ "print(b_hex.shape)"
207
+ ]
208
+ },
209
+ {
210
+ "cell_type": "markdown",
211
+ "id": "8850df81",
212
+ "metadata": {},
213
+ "source": [
214
+ "# Plotting RGB hexagrams by RGB values"
215
+ ]
216
+ },
217
+ {
218
+ "cell_type": "markdown",
219
+ "id": "d2625c1a",
220
+ "metadata": {},
221
+ "source": [
222
+ "Generated RGB values are used for plotting color plots."
223
+ ]
224
+ },
225
+ {
226
+ "cell_type": "code",
227
+ "execution_count": 5,
228
+ "id": "dd4a9d31",
229
+ "metadata": {},
230
+ "outputs": [
231
+ {
232
+ "name": "stdout",
233
+ "output_type": "stream",
234
+ "text": [
235
+ "(24, 24)\n"
236
+ ]
237
+ },
238
+ {
239
+ "data": {
240
+ "image/png": "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\n",
241
+ "text/plain": [
242
+ "<Figure size 2160x1080 with 4 Axes>"
243
+ ]
244
+ },
245
+ "metadata": {},
246
+ "output_type": "display_data"
247
+ }
248
+ ],
249
+ "source": [
250
+ "# Read CSV files\n",
251
+ "r_df = pd.read_csv('rw_hex_test_d.csv', header=None)\n",
252
+ "g_df = pd.read_csv('gw_hex_test_d.csv', header=None)\n",
253
+ "b_df = pd.read_csv('bw_hex_test_d.csv', header=None)\n",
254
+ "n_df = pd.read_csv('nw_hex_test_d.csv', header=None)\n",
255
+ "\n",
256
+ "# Replace negative values with zero\n",
257
+ "n_df[n_df < 0] = 0\n",
258
+ "n_df[n_df > 100] = 0\n",
259
+ "\n",
260
+ "r_df = r_df.iloc[:, :]\n",
261
+ "g_df = g_df.iloc[:, :]\n",
262
+ "b_df = b_df.iloc[:, :]\n",
263
+ "n_df = n_df.iloc[:, :]\n",
264
+ "\n",
265
+ "# Normalize RGB values to the range 0~1\n",
266
+ "r = np.clip(r_df.values, 0, 1)\n",
267
+ "g = np.clip(g_df.values, 0, 1)\n",
268
+ "b = np.clip(b_df.values, 0, 1)\n",
269
+ "\n",
270
+ "# Combine RGB values into a single array\n",
271
+ "rgb = np.dstack((r, g, b))\n",
272
+ "\n",
273
+ "# Convert to 1 column\n",
274
+ "r_series = r_df.stack().reset_index(drop=True)\n",
275
+ "g_series = g_df.stack().reset_index(drop=True)\n",
276
+ "b_series = b_df.stack().reset_index(drop=True)\n",
277
+ "\n",
278
+ "print(r_df.shape)\n",
279
+ "\n",
280
+ "# Plotting\n",
281
+ "fig, axs = plt.subplots(1, 4, figsize=(30, 15))\n",
282
+ "fsiz=32\n",
283
+ "\n",
284
+ "# Colormap Definition\n",
285
+ "n_bins = 256 # Colormap fineness\n",
286
+ "r_colors = [(0, 0, 0), (1, 0, 0)] # RGB values in the range 0-1\n",
287
+ "r_cmap_name = 'black_to_red'\n",
288
+ "\n",
289
+ "g_colors = [(0, 0, 0), (0, 1, 0)]\n",
290
+ "g_cmap_name = 'black_to_green'\n",
291
+ "\n",
292
+ "b_colors = [(0, 0, 0), (0, 0, 1)]\n",
293
+ "b_cmap_name = 'black_to_blue'\n",
294
+ "\n",
295
+ "# Create color maps\n",
296
+ "cmr = LinearSegmentedColormap.from_list(r_cmap_name, r_colors, N=n_bins)\n",
297
+ "cmg = LinearSegmentedColormap.from_list(g_cmap_name, g_colors, N=n_bins)\n",
298
+ "cmb = LinearSegmentedColormap.from_list(b_cmap_name, b_colors, N=n_bins)\n",
299
+ "\n",
300
+ "# plotting each data\n",
301
+ "im1 = axs[0].imshow(r, cmap=cmr, origin='lower')\n",
302
+ "axs[0].set_title('Red', fontsize=fsiz)\n",
303
+ "axs[0].tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)\n",
304
+ "\n",
305
+ "im2 = axs[1].imshow(g, cmap=cmg, origin='lower')\n",
306
+ "axs[1].set_title('Green', fontsize=fsiz)\n",
307
+ "axs[1].tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)\n",
308
+ "\n",
309
+ "im3 = axs[2].imshow(b, cmap=cmb, origin='lower')\n",
310
+ "axs[2].set_title('Blue', fontsize=fsiz)\n",
311
+ "axs[2].tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)\n",
312
+ "\n",
313
+ "im4 = axs[3].imshow(rgb, interpolation='nearest', origin='lower')\n",
314
+ "axs[3].set_title('RGB', fontsize=fsiz)\n",
315
+ "axs[3].tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)\n",
316
+ "\n",
317
+ "plt.show()"
318
+ ]
319
+ },
320
+ {
321
+ "cell_type": "markdown",
322
+ "id": "04b58635",
323
+ "metadata": {},
324
+ "source": [
325
+ "# Plotting an RGB hexagram using the sample 3D data"
326
+ ]
327
+ },
328
+ {
329
+ "cell_type": "markdown",
330
+ "id": "93075a03",
331
+ "metadata": {},
332
+ "source": [
333
+ "This tutorial shows the distribution of sample 3D data on an RGB hexagram generated. <br>\n",
334
+ "For tutorials using 4D and 5D data, please see other jupyter labs."
335
+ ]
336
+ },
337
+ {
338
+ "cell_type": "code",
339
+ "execution_count": 6,
340
+ "id": "d4f739d4",
341
+ "metadata": {},
342
+ "outputs": [
343
+ {
344
+ "name": "stdout",
345
+ "output_type": "stream",
346
+ "text": [
347
+ "[[46 61 90]\n",
348
+ " [54 83 60]\n",
349
+ " [34 53 73]\n",
350
+ " [26 57 97]\n",
351
+ " [31 57 82]]\n"
352
+ ]
353
+ }
354
+ ],
355
+ "source": [
356
+ "import numpy as np\n",
357
+ "\n",
358
+ "# Average scores (settable for each subject and study time)\n",
359
+ "mean_scores = [20, 55, 75] # 3 subjects and stydy time\n",
360
+ "\n",
361
+ "# Standard deviation\n",
362
+ "std_dev = 15\n",
363
+ "\n",
364
+ "# Random seed\n",
365
+ "np.random.seed(0)\n",
366
+ "\n",
367
+ "# Number of persons\n",
368
+ "psn = 100000\n",
369
+ "\n",
370
+ "# Generate scores (psn x number of subjects)\n",
371
+ "scores = np.random.normal(loc=mean_scores, scale=std_dev, size=(psn, len(mean_scores)))\n",
372
+ "\n",
373
+ "# Round to nearest integer\n",
374
+ "scores = np.rint(scores)\n",
375
+ "\n",
376
+ "# Create max score array: default 100, but 200 for subjects with mean 150\n",
377
+ "max_scores = np.where(np.array(mean_scores) == 150, 200, 100)\n",
378
+ "\n",
379
+ "# Clip each column individually using broadcasting\n",
380
+ "scores = np.clip(scores, -1, max_scores)\n",
381
+ "\n",
382
+ "# Convert to int\n",
383
+ "scores = scores.astype(int)\n",
384
+ "\n",
385
+ "# Display top 5 rows\n",
386
+ "print(scores[:5])"
387
+ ]
388
+ },
389
+ {
390
+ "cell_type": "code",
391
+ "execution_count": 7,
392
+ "id": "49ae1103",
393
+ "metadata": {},
394
+ "outputs": [
395
+ {
396
+ "data": {
397
+ "image/png": "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X//1X6t6n5kzZ7J48WIuuuiiit5nSww4kiT10osrVjCtglsDTWttrdi1Slm4cCFz587tCB61us+JJ57IiSeeWNV7FrOLSpKkfqS1tZX999+flpYW9t13X04//XTuuecejjrqKPbZZx/mzJnDnDlzeOc738khhxzCu971Lh5++GE2btzIJZdcwm233cbBBx/MbbfdBsDixYtpbm5m77335pvf/GbZ9wDKus9Pf/pTbrjhBj71qU8B8PTTTzN58mTGjx/P+PHj+eMf/8jatWs5/vjjGT9+PAcddFBH3frCgCNJUj/zyCOPcMEFF7B06VKWLl3KLbfcwuzZs7nqqqu44oor2H///fnDH/7AggULmD59Op///OcZNmwY06dP57TTTmPhwoWcdtppACxdupS7776bOXPmcNlll/Haa6+VdQ+grPuccsopXer+mc98hve+970sWrSI+fPnc+CBB3LXXXex2267sWjRIh588EGOPfbYPj8ju6gkSepn9tprL8aNGwfAgQceyKRJk4gIxo0bR2trKy+99BJTpkxh2bJlRERHaCnl+OOPZ/jw4QwfPpw3velNPP3002XdA9im+2x27733MmPGDAAGDx7MjjvuyLhx47jgggv43Oc+xwknnMB73vOevjwewBYcSZL6neHDh3e8HjRoUMfxoEGDaGtr44tf/CJHH300Dz74IP/1X/+1xfVjOl9r8ODBtLW1lXUPYJvusyX77rsv8+fPZ9y4cXzhC19gegUGWhtwJEnKmZdeeondd98dgBtuuKHj/MiRI3nllVfqep9JkyZxzTXXALBp0yZeeuklnnzySbbbbjvOOOMMLrzwQubPn9/nutlFJUlSL40aO7aiM59GjR1bket89rOfZcqUKVx++eUcf/zxHeePPvporrzySg4++GAuvvjimtzn/PPP7/KZq6++mnPOOYfrrruOwYMHc8011/Dyyy9z4YUXMmjQIIYOHdoRgPoiUkp9vkijmTBhQpo7d25Vrl1qzYMDjjmGD3/sY1W5n7qbNWsWzc3N9a7GgOCzrh2fdW319nkvWbKEt73tbZWvUI5VYi+qzUo9/4iYl1KaUFzWFpxtVGrNg1s3bqxPZSRJUkmOwZEkSbljwJEkSbljwJEkSbljwJEkSbljwJEkSbnjLCpJknrpkq9cwoqnV2y9YJnGjhnL9It7t4pvU1MTc+fOZfTo0b2+/9y5c5kxY0bHppv9mQFHkqReWvH0CppObqrY9VrvbK3YtXpjwoQJTJjQbUmZfskuKkmS+pHW1lb2339/Tj/9dN72trfxoQ99iHXr1gHwrW99i0MPPZRx48axdOlS2tvb2WeffXj22WcBaG9v561vfSvPPvssP/7xjznooIMYP348f//3fw8UFkA84YQTAFizZg1Tp05l3LhxvP3tb+enP/0pmzZtoqWlhYMOOohx48bx9a9/vT4PoQwGHEmS+pmHH36Yf/7nf2bJkiXssMMOfPe73wVg9OjRzJ8/n09+8pNcddVVDBo0iDPOOIObb74ZgHvuuYfx48ez6667Mn36dO6++24WLVrEzJkzu93jS1/6EjvuuCMPPPAAf/nLX5g4cSILFy7kiSee4MEHH+SBBx5g6tSpNf29t4UBR5KkfmbPPffkqKOOAuCMM85g9uzZAHzwgx8E4LDDDqM12yPrE5/4BDNmzADg+uuv7wglRx11FC0tLXz/+99n06ZN3e5xzz33cO6553Yc77TTTuy9994sX76cT3/609x1113ssMMOVfsd+8qAI0lSPxMRJY+HDx8OwODBg2lrawMKYWjMmDHce++9zJkzhw984AMAfO973+Pyyy/n8ccf57DDDmP16tVbve9OO+3EokWLaG5u5nvf+x5nn312JX+tijLgSJLUz6xYsYI//elPANxyyy28+93v3mL5s88+mzPOOINTTz2VwYMHA/Doo49y5JFHMn36dHbddVcef/zxLp953/vex3e+852O4xdeeIHnnnuO9vZ2TjnlFC6//HLmz59f4d+scpxFJUlSL40dM7aiM5/GjhlbVrn99tuP73znO3ziE5/ggAMO4JOf/CTf+ta3eix/4oknMnXq1C5jZi688EKWLVtGSolJkyYxfvx4fve733W8/4UvfIFzzz2Xgw46iMGDB3PppZfylre8halTp9Le3g7AV77ylV7+ptVnwJEkqZd6u2ZNXw0ZMoSbbrqpy7nNY26gMN171qxZHceLFi1i/Pjx7L///h3nfvazn3W7bnNzM83NzQBsv/323Hjjjd3KNHKrTWcGHEmScuzKK6/kmmuu6ZhJNVA4BkeSpH6kqamJBx98sOzyF110EY899thWx+nkjQFHkiTljgFHkiTlTlUDTkT8S0Q8FBEPRsStETEiIvaKiPsi4pGIuC0i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\n",
398
+ "text/plain": [
399
+ "<Figure size 576x432 with 1 Axes>"
400
+ ]
401
+ },
402
+ "metadata": {
403
+ "needs_background": "light"
404
+ },
405
+ "output_type": "display_data"
406
+ }
407
+ ],
408
+ "source": [
409
+ "import numpy as np\n",
410
+ "import matplotlib.pyplot as plt\n",
411
+ "\n",
412
+ "\n",
413
+ "# Colors and labels for each subject\n",
414
+ "subjects = ['mathmatics', 'physics', 'chemistry']\n",
415
+ "colors = ['red', 'green', 'blue']\n",
416
+ "\n",
417
+ "plt.figure(figsize=(8, 6))\n",
418
+ "\n",
419
+ "# Histogram of each subject plotted over one another\n",
420
+ "for i in range(3):\n",
421
+ " plt.hist(scores[:, i],\n",
422
+ " bins=101,\n",
423
+ " range=(-1, 100),\n",
424
+ " alpha=0.5,\n",
425
+ " color=colors[i],\n",
426
+ " label=subjects[i],\n",
427
+ " edgecolor='black')\n",
428
+ "\n",
429
+ "plt.title('score distribution')\n",
430
+ "plt.xlabel('score')\n",
431
+ "plt.ylabel('persons')\n",
432
+ "plt.legend()\n",
433
+ "plt.grid(True)\n",
434
+ "plt.tight_layout()\n",
435
+ "plt.show()"
436
+ ]
437
+ },
438
+ {
439
+ "cell_type": "code",
440
+ "execution_count": 8,
441
+ "id": "00214fdb",
442
+ "metadata": {},
443
+ "outputs": [
444
+ {
445
+ "name": "stdout",
446
+ "output_type": "stream",
447
+ "text": [
448
+ "[[0.55294118 0.61386139 0.9009901 ]\n",
449
+ " [0.64705882 0.83168317 0.6039604 ]\n",
450
+ " [0.41176471 0.53465347 0.73267327]\n",
451
+ " [0.31764706 0.57425743 0.97029703]\n",
452
+ " [0.37647059 0.57425743 0.82178218]]\n"
453
+ ]
454
+ }
455
+ ],
456
+ "source": [
457
+ "import numpy as np\n",
458
+ "\n",
459
+ "# Prepare an empty array for normalization (same shape)\n",
460
+ "normalized_scores = np.zeros_like(scores, dtype=float)\n",
461
+ "\n",
462
+ "# Normalized (per column) for each subject\n",
463
+ "for i in range(scores.shape[1]):\n",
464
+ " max_val = np.max(scores[:, i])\n",
465
+ " normalized_scores[:, i] = (scores[:, i] + 1) / (max_val + 1) # -1点→0, max→1になるよう調整\n",
466
+ "\n",
467
+ "# Display of top 5 rows\n",
468
+ "print(normalized_scores[:5])"
469
+ ]
470
+ },
471
+ {
472
+ "cell_type": "code",
473
+ "execution_count": 9,
474
+ "id": "7fcfea32",
475
+ "metadata": {},
476
+ "outputs": [
477
+ {
478
+ "name": "stdout",
479
+ "output_type": "stream",
480
+ "text": [
481
+ "elapsed time: 2.96 sec, data size: 100000 , RGB hexagram size parameter: 2\n",
482
+ "(24, 24)\n"
483
+ ]
484
+ }
485
+ ],
486
+ "source": [
487
+ "#initialized position data\n",
488
+ "pos_data_rgb = np.zeros((r.shape[0], r.shape[1])) # np.maxval(scores)\n",
489
+ "\n",
490
+ "start_time = time.time()\n",
491
+ "\n",
492
+ "for i in range(psn):\n",
493
+ " tmp_data_rgb = np.zeros((r.shape[0], r.shape[1]))\n",
494
+ " tmp_data_r = np.zeros((r.shape[0], r.shape[1]))+normalized_scores[i,0]\n",
495
+ " tmp_data_g = np.zeros((r.shape[0], r.shape[1]))+normalized_scores[i,1]\n",
496
+ " tmp_data_b = np.zeros((r.shape[0], r.shape[1]))+normalized_scores[i,2]\n",
497
+ " \n",
498
+ " # Calculate the value of the difference in each coordinate of the RGB hexagram\n",
499
+ " tmp_data_rgb = (r-tmp_data_r)**2.0 + (g-tmp_data_g)**2.0 + (b-tmp_data_b)**2.0\n",
500
+ " \n",
501
+ " # Get the index (coordinates) of the minimum value\n",
502
+ " min_index = np.unravel_index(np.argmin(tmp_data_rgb), tmp_data_rgb.shape)\n",
503
+ " \n",
504
+ " # Add 1 to the corresponding coordinates (in this case, the number of persons, but any variable can be used)\n",
505
+ " pos_data_rgb[min_index[0],min_index[1]] += 1\n",
506
+ "\n",
507
+ "end_time = time.time()\n",
508
+ "\n",
509
+ "elapsed_time = end_time - start_time\n",
510
+ "print(f\"elapsed time: {elapsed_time:.2f} sec, data size:\",psn,\", RGB hexagram size parameter:\",k)\n",
511
+ "\n",
512
+ "print(pos_data_rgb.shape)"
513
+ ]
514
+ },
515
+ {
516
+ "cell_type": "code",
517
+ "execution_count": 10,
518
+ "id": "d8c6cf18",
519
+ "metadata": {},
520
+ "outputs": [
521
+ {
522
+ "data": {
523
+ "image/png": "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\n",
524
+ "text/plain": [
525
+ "<Figure size 864x864 with 2 Axes>"
526
+ ]
527
+ },
528
+ "metadata": {
529
+ "needs_background": "light"
530
+ },
531
+ "output_type": "display_data"
532
+ }
533
+ ],
534
+ "source": [
535
+ "# Mask to plot only areas with a value greater than or equal to 1\n",
536
+ "masked_data = np.ma.masked_less(pos_data_rgb, 1)\n",
537
+ "\n",
538
+ "# Plot the results and add a color bar\n",
539
+ "fig, axs = plt.subplots(1, 1, figsize=(12, 12))\n",
540
+ "fsiz=32\n",
541
+ "im = axs.imshow(n_df, cmap='tab20', origin='lower',alpha=0.3)\n",
542
+ "im = axs.imshow(masked_data, cmap='jet', origin='lower')\n",
543
+ "\n",
544
+ "# Added color bar\n",
545
+ "cbar = plt.colorbar(im, ax=axs, shrink=0.8)\n",
546
+ "cbar.set_label('Frequency (≥1)', fontsize=fsiz * 0.6)\n",
547
+ "\n",
548
+ "axs.set_title('Score distribution data size:'+str(psn), fontsize=fsiz)\n",
549
+ "axs.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)"
550
+ ]
551
+ },
552
+ {
553
+ "cell_type": "markdown",
554
+ "id": "f26dd824",
555
+ "metadata": {},
556
+ "source": [
557
+ "# Percentage of data in each Area of the RGB hexagram"
558
+ ]
559
+ },
560
+ {
561
+ "cell_type": "code",
562
+ "execution_count": 11,
563
+ "id": "0b3181b9",
564
+ "metadata": {},
565
+ "outputs": [
566
+ {
567
+ "name": "stdout",
568
+ "output_type": "stream",
569
+ "text": [
570
+ "percentage of Area 1 : 0.335 %\n",
571
+ "percentage of Area 2 : 0.424 %\n",
572
+ "percentage of Area 3 : 8.413 %\n",
573
+ "percentage of Area 4 : 61.530 %\n",
574
+ "percentage of Area 5 : 13.348 %\n",
575
+ "percentage of Area 6 : 0.688 %\n",
576
+ "percentage of Area 7 : 0.000 %\n",
577
+ "percentage of Area 8 : 0.001 %\n",
578
+ "percentage of Area 9 : 1.968 %\n",
579
+ "percentage of Area 10 : 13.220 %\n",
580
+ "percentage of Area 11 : 0.050 %\n",
581
+ "percentage of Area 12 : 0.001 %\n",
582
+ "percentage of Area 13 : 0.000 %\n",
583
+ "percentage of Area 14 : 0.000 %\n",
584
+ "percentage of Area 15 : 0.022 %\n"
585
+ ]
586
+ }
587
+ ],
588
+ "source": [
589
+ "# sum of pos_data_rgb\n",
590
+ "total_sum_rgb = np.sum(pos_data_rgb)\n",
591
+ "\n",
592
+ "sum_xy_list = [] # Store each sum of n_df = 1 to 15\n",
593
+ " \n",
594
+ "for i in range(1, 16):\n",
595
+ " mask = (n_df * 256.0 == i)\n",
596
+ " indices = np.where(mask)\n",
597
+ " sum_xy = np.sum(pos_data_rgb[indices]) # Sum of Areas that match each n_df value\n",
598
+ " sum_xy_list.append(sum_xy)\n",
599
+ " print(\"percentage of Area\", i, \": \", f\"{100.0 * sum_xy / total_sum_rgb:.3f}\", \"%\")\n"
600
+ ]
601
+ },
602
+ {
603
+ "cell_type": "code",
604
+ "execution_count": null,
605
+ "id": "c5f65f32",
606
+ "metadata": {},
607
+ "outputs": [],
608
+ "source": []
609
+ }
610
+ ],
611
+ "metadata": {
612
+ "kernelspec": {
613
+ "display_name": "Python 3",
614
+ "language": "python",
615
+ "name": "python3"
616
+ },
617
+ "language_info": {
618
+ "codemirror_mode": {
619
+ "name": "ipython",
620
+ "version": 3
621
+ },
622
+ "file_extension": ".py",
623
+ "mimetype": "text/x-python",
624
+ "name": "python",
625
+ "nbconvert_exporter": "python",
626
+ "pygments_lexer": "ipython3",
627
+ "version": "3.6.8"
628
+ }
629
+ },
630
+ "nbformat": 4,
631
+ "nbformat_minor": 5
632
+ }