使う度に調べるので、メモしておきます。

1. 40歳から44歳の人の人数を数えろ
=COUNTIFS($B$1:$B$498, ">=45",$B$1:$B$498, "<50" )
2.55歳から59歳の人の不満値の平均値を求めよ
=AVERAGEIFS($J$1:$J$498, $B$1:$B$498, ">=55",$B$1:$B$498, "<60" )
Keywords: COUNTIF, COUNTIFS, AVERAGEIFS
江端智一のホームページ
使う度に調べるので、メモしておきます。

1. 40歳から44歳の人の人数を数えろ
=COUNTIFS($B$1:$B$498, ">=45",$B$1:$B$498, "<50" )
2.55歳から59歳の人の不満値の平均値を求めよ
=AVERAGEIFS($J$1:$J$498, $B$1:$B$498, ">=55",$B$1:$B$498, "<60" )
Keywords: COUNTIF, COUNTIFS, AVERAGEIFS
最近は聞かれなくなった言葉に、『自分探し』というものがあります。
One word that is no longer heard these days is "self-discovery.
―― 自分とは何者であるか
"Who I am"
哲学的な問いですが、私、この答を見つける最適最短手段を知っています。
This is a philosophical question, but I know the best and shortest way to find the answer.
『「育児」and/or「介護」の当事者になる』
Becoming a Party to "Childcare" and/or "Caregiving"
これだけです。
That's all.
-----
もう、そりゃ、自分が認識していなかった自分が「もろ見え」です。
I can already "see" myself that I didn't recognize.
特に、肉体的、精神的限界に至った時の、自分の中に潜む「どす黒い感情」が赤裸々に見えて ―― 自分でびっくりします。
Especially when I reach my physical and mental limits, I can see nakedly the "black emotions" that lurk within me -- I am surprised at myself.
『極限状態の戦場では、その人の本質が明らかになる』と言われます。
It is said that "the nature of a person is revealed on the battlefield under extreme conditions.
その意味で、「育児」「介護」は準戦場と言えるかもしれません。
"In this sense, "childcare" and "caregiving" could be described as a quasi-battlefield situation.
-----
もちろん、好んで戦場に行く必要はありません。
Of course, you do not have to go to the battlefield by preference.
これらを忌避して生きてもいいんですか ―― いいんです(楽天カードのCM風)。
Is it OK to live in evasion of these things? -- it's OK (Rakuten Card commercial style).
-----
ただ、個人的に言えば ―― 『「育児」and/or「介護」の当事者』になった人は「信用できる」とは思います。
However, speaking personally -- I think that people who have been "involved in "childcare" and/or "caregiving" are "trustworthy".
一方、このような「体験至上主義」が、いわゆる、結婚ハラスメント、育児ハラスメント、介護ハラスメントの温床になっている、という自覚もあります。
On the other hand, we are also aware that this "experience-history principle" has become a breeding ground for so-called marriage harassment, childcare harassment, and caregiver harassment.
官能の人工知能 ~深層学習を最も分かりやすく説明するパラダイムOver the AI ―― AIの向こう側に(22)
で使ったソースコード(cpp)が見つからなかったので、添付しておきます。
I could not find the source code (cpp) used in the following, so I am attaching it.
ついでに、破壊実験の方も
Code for destructive experiments
口に出せない介護問題の真実 ~「働き方改革」の問題点とは何なのか
The Truth About Unspoken Nursing Care Issues - What is the Problem with "Workplace Reform"?
This program is based on the following page
https://qiita.com/ufoo68/items/9e4ca04578ba0f5fa5ff

This program solves the XOR problem using MLP with one hidden layer.
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
//num of units
#define NUM_INPUT 2
//#define NUM_HIDDEN 20
#define NUM_HIDDEN 2
double sigmoid(double x) {
return 1/(1+exp(-x));
}
//derivative of sigmoid function
double d_sigmoid(double x) {
double a = 0.1;
return a*x*(1-x);
}
int main(void) {
srand((unsigned)time(NULL));
//train data
double train_x[4][NUM_INPUT+1] = {{0, 0, -1},{0, 1, -1},{1, 0, -1},{1, 1, -1}};
double d[4] = {0, 1, 1, 0};
//net
double w[NUM_HIDDEN+1][NUM_INPUT+1];
double v[NUM_HIDDEN+1];
double y[4][NUM_HIDDEN+1];
double z[4];
double eta = 0.1;
int epoch = 1000000;
//other
int i, j, k, l;
double tmp = 0;
//update weights using rand()
for(l=0; l<NUM_HIDDEN+1; l++) {
for(i=0; i<NUM_INPUT+1; i++) {
w[l][i] = ((double)rand() / ((double)RAND_MAX + 1));
}
}
for(i=0; i<NUM_HIDDEN+1; i++) {
v[i] = ((double)rand() / ((double)RAND_MAX + 1));
}
//tain
for(k=0; k<epoch; k++) {
//feedforward
for(j=0; j<4; j++) {
//hidden
for(l=0; l<NUM_HIDDEN; l++) {
for(i=0; i<NUM_INPUT+1; i++) {
tmp += train_x[j][i] * w[l][i];
}
y[j][l] = sigmoid(tmp);
tmp = 0;
}
y[j][NUM_HIDDEN] = -1;
//output
for(i=0; i<NUM_HIDDEN+1; i++) {
tmp += y[j][i] * v[i];
}
z[j] = sigmoid(tmp);
tmp = 0;
//backward
//output
for(i=0; i<NUM_HIDDEN+1; i++) {
v[i] = v[i] - eta * y[j][i] * d_sigmoid(z[j]) * (z[j] - d[j]);
}
//hidden
for(l=0; l<NUM_INPUT+1; l++) {
for(i=0; i<NUM_HIDDEN+1; i++) {
w[i][l] = w[i][l] - eta * train_x[j][l] * d_sigmoid(y[j][i]) * d_sigmoid(z[j]) * (z[j] - d[j]) * v[i];
}
}
}
/*
//print detail
printf("z=");
for(i=0; i<4; i++) {
printf("%f ", z[i]);
}
printf("epoch:%d\n",k);
*/
}
//predict
for(j=0; j<4; j++) {
//hidden
for(l=0; l<NUM_HIDDEN; l++) {
for(i=0; i<NUM_INPUT+1; i++) {
tmp += train_x[j][i] * w[l][i];
}
y[j][l] = sigmoid(tmp);
tmp = 0;
}
y[j][NUM_HIDDEN] = -1;
//output
for(i=0; i<NUM_HIDDEN+1; i++) {
tmp += y[j][i] * v[i];
}
z[j] = sigmoid(tmp);
tmp = 0;
}
//print result
printf("z=");
for(i=0; i<4; i++) {
printf("%f ", z[i]);
}
printf("epoch:%d\n",k);
for(i=0; i<NUM_INPUT+1; i++) {
for(l=0; l<NUM_HIDDEN+1; l++) {
printf("w[%d][%d]:%f\n", i, l, w[i][l]);
}
}
for(i=0; i<NUM_HIDDEN+1; i++) {
printf("v[%d]:%f\n",i, v[i]);
}
return 0;
}
Save this program as a name "mlp.c", compile ">gcc mlp.c" and execute ">./a.exe"
高校の時は、漠然と応用物理学を専攻したいと思っていました。
In high school, I vaguely wanted to major in applied physics.
大学では電子工学を、大学院では電気工学を、
I studied electronics in college and electrical engineering in graduate school.
そして、その後は、以下の図に記載した業務に携わり、
Then, afterwards, I was involved in the operations described in the following diagram.

で、本日、
So, the following card arrived today.

が、届きました。
-----
―― 思えば、遠くに来たもんだ
"Come to think of it, I've come a long way"
と、しみじみと実感しています。
I am deeply aware of this.
I went to the patent search site again today to prepare documents.
ところが、
However,

というメッセージを受けて、今、困っています。
I am now in trouble because I received th above message.
メンテナンスは必須ですので、仕方がないことです。
Maintenance is a must, so it is inevitable.
しかし、『動いているのが当たり前と思っているものが止まる』というのは、困るものです。
However, it is troubling when 'things that we take for granted to be moving stop.
-----
そういえば、今回のコラムで、
In this column, I wrote
江端:「ああ、それは分かります。私たちは、普段から『私が突然いなくなっても、社会は1mmも困らない』ことを良く知っていますが、その事実を直視すると凹みますからね」
Ebata: "Oh, I understand that. We usually know very well that 'even if I suddenly disappear, society will not be troubled one millimeter,' but when we face that fact, it makes a dent, you know."
と記載しました。
で、今、
So, now, I am thinking
―― 私の価値って、特許検索エンジンの価値の1/1000以下よりも、はるかに低いんだろうなぁ
"I guess my value is much less than 1/1000th of the value of a patent search engine"
とか思って、勝手に凹んでいます。
And I am depressed on my own.
本日は、コラムがリリースされましたので、お休みです。
Today's diary is taken off, as the new column has been released.
------
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━……‥‥・・・
連載記事アラート《アイティメディアID》 ………………………… 2023/02/25
Serial Article Alert 《Itimedia ID》 ........................ 2023/02/25
・・・‥‥……━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
「「お金に愛されないエンジニア」のための新行動論」の最新記事が掲載されました。
The latest article on "New Behavioral Theory for 'Engineers Not Loved by Money'" has been published.
■最新記事
- Latest Articles
1日1回の外出は2000円の価値? 「孤独」がもたらす損失を試算してみる
Is going out once a day worth 2,000 Yen? Let's estimate the loss that "loneliness" brings.
(イラストをクリックすると、記事に飛びます)
(Click on the figure to jump to the article)
今回は、「移動」と「ウェルビーイング」を解析した論文を読み解いてみました。
In this issue, I read a paper analyzing "mobility" and "wellbeing".
そこで得た結論は、「孤独を回避して幸せになりたいのなら、毎日外へ出ろ」というものです。
The conclusion I came to was, "If you want to avoid loneliness and be happy, go outside every day".
こちらにも記載しましたが、3月に、大学生の学生の講義のコマを3つ持つ旨、担当指導教授から指示を受けました。
In March, I have been instructed by my supervisor to have three lecture sessions for university students.
各種のネタは持っているのですが、まあ、最近なら『"AI"がウケがいいだろう』と思って、その旨を教授に返事をしました。
I had a variety of ideas, but I thought, well, "'AI' would be popular these days," I replied to the professor.
―― で、今、講義の準備に頭を抱えています。
Now, the "preparation for lectures" is giving me a headache.
-----
講義だけなら、1時間程度くらい、デタラメな英語をしゃべる続けることはできると思うのです。
I think I can keep speaking bullshit English for about an hour of the lecture.
That training was completed 20 years ago.
問題は「練習問題」です。
The problem is "practice problems".
AIというのは、基本的には『コンピュータプログラムを使った、暴力的な力まかせの計算の強行』です。
AI is basically 'violent forced computation' using computer programs.
―― プログラミングを知らない学生に、「座学」で「手計算」で「計算用紙」を使って、AIの計算プロセスを練習させる
"How to have students who do not know programming practice the AI calculation process in a "classroom" setting, using "hand calculations" and "calculation paper"
これが、想像を絶するほど難しいのです。
This is unimaginably difficult.
正直、どこから手をつけたら良いのか分からない、という感じです。
Frankly, I don't know where to start.
加えて、『講義の時間がわずか1時間』という制約が、私を苦しめています。
In addition, the restriction of 'only one hour of lecture time' has been a pain for me.
例えば、ベイズ推論、ファジィ推論、それぞれのAI技術の解説に、最低「5時間」は欲しいのですが、現状、それぞれ15分しかありません。
For example, I would like at least "5 hours" to explain the AI techniques of Bayesian and fuzzy reasoning, but currently I have only 15 minutes each.
このまま講義に突入すれば、『想像を絶するほど、つまらない講義になるだろう』と予感しています。
I have a feeling that if I go into the lecture as it is, 'it will be the most boring lecture imaginable'.
という訳で、ここ数日、ずっと頭を抱え続けています。
This is why I have been keeping my head in the sand for the past few days.
-----
「数学教育が、なぜ、あれほどつまらないものになるか」の断片を、理解したような気がします。
I think I understand a piece of "why math education can be so boring".
ここに至って、私は『数学教育を楽しいものにするには、少なくとも、今のコマの5~10倍以上の時間が必要だ』ということに、気がつきました。
It was here that I came to the realization that 'to make math education fun, we need at least five to ten times as much time as we have in our current frames.
Golang 文字列を数値に変換する方法で、文字列→実数なら、これが一番てっとり早そう
dest_lat, err := strconv.ParseFloat(row[2], 64)
strconv.ParseIntとstrconv.ParseUnitは、文字列を解析して整数型を返す関数
それぞれ符号付き整数型と符号なし整数型に対応している。
ODデータ(csv):20220518weekday
領域データ(csv):yamaguchi_area
出力データ(csv):new_20220518weekday
その他: 年齢を乱数を使って適当に作成しているコードも入っている
// ~/yamaguchi/src_try1/others/main61.go
// Usage: go run main61.go 20220518weekday.csv new_20220518weekday.csv
package main
import (
"database/sql"
"encoding/csv"
"fmt"
"log"
"math/rand"
"os"
"strconv"
_ "github.com/lib/pq"
)
func main() {
file, err := os.Open("yamaguchi_area.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
r := csv.NewReader(file)
rows, err := r.ReadAll() // csvを一度に全て読み込む
if err != nil {
log.Fatal(err)
}
str := "SELECT ST_Covers(st_geomfromtext('POLYGON(("
// 行ごとに
for i, row := range rows {
if i == 0 {
continue // CSVのヘッダー行を無視
}
str += row[1] + " " + row[2] + ", " // rowのままで取り出せば、文字列になっている
}
str1 := str[:len(str)-2] + "))'),st_geomfromtext('LINESTRING(" // 上記の最後の", "を削除して、文字列を追加
dbMap, err := sql.Open("postgres",
"user=postgres password=password host=192.168.0.23 port=15432 dbname=yama_db sslmode=disable")
log.Println("------------------ map db open ------------------")
if err != nil {
log.Fatal("OpenError: ", err)
}
defer dbMap.Close()
///////////////////////////////////////
//file2, err2 := os.Open("20220518weekday.csv")
file2, err2 := os.Open(os.Args[1]) // 第1パラメータ
if err2 != nil {
log.Fatal(err2)
}
defer file2.Close()
r2 := csv.NewReader(file2)
rows2, err2 := r2.ReadAll() // csvを一度に全て読み込む
if err != nil {
log.Fatal(err2)
}
file3, err3 := os.Create(os.Args[2]) // 第2パラメータ
if err3 != nil {
panic(err)
}
w := csv.NewWriter(file3)
var id int
for _, row := range rows2 {
//if i == 0 {
// continue // CSVのヘッダー行を無視
//}
str2 := str1 + row[0] + " " + row[1] + ", " + row[2] + " " + row[3]
str2 += ")'))"
fmt.Println(str2)
rows1, err := dbMap.Query(str2)
if err != nil {
log.Fatal(err)
}
defer rows1.Close()
//var dt string
var dt bool
for rows1.Next() {
if err := rows1.Scan(&dt); err != nil {
fmt.Println(err)
}
// fmt.Println(dt)
if dt {
//if err := rows.Scan(&id, &age, &type1, &departure_name, &departure_number, &departure_lat, &departure_lng, &arrival_name, &arrival_number, &arrival_lat, &arrival_lng); err != nil {
// fmt.Println(err)
// 上記のSQLのフォームと同じ形でcsvファイルを作る
var age int
fmt.Println("row[4]:", row[4])
// id_str := strconv.Itoa(id) // idを文字列に
if row[4] == "10-15" {
age = 10 + rand.Intn(5)
} else if row[4] == "15-29" {
age = 15 + rand.Intn(5)
} else if row[4] == "20-24" {
age = 20 + rand.Intn(5)
} else if row[4] == "25-29" {
age = 25 + rand.Intn(5)
} else if row[4] == "30-34" {
age = 30 + rand.Intn(5)
} else if row[4] == "35-39" {
age = 35 + rand.Intn(5)
} else if row[4] == "40-44" {
age = 40 + rand.Intn(5)
} else if row[4] == "44-49" {
age = 45 + rand.Intn(5)
} else if row[4] == "50-54" {
age = 50 + rand.Intn(5)
} else if row[4] == "55-59" {
age = 55 + rand.Intn(5)
} else if row[4] == "60-64" {
age = 60 + rand.Intn(5)
} else if row[4] == "65-69" {
age = 65 + rand.Intn(5)
} else if row[4] == "70-74" {
age = 70 + rand.Intn(5)
} else if row[4] == "75-80" {
age = 75 + rand.Intn(5)
} else if row[4] == "80-84" {
age = 80 + rand.Intn(5)
} else if row[4] == "85-89" {
age = 85 + rand.Intn(5)
} else if row[4] == "90-94" {
age = 90 + rand.Intn(5)
} else if row[4] == "95-99" {
age = 95 + rand.Intn(5)
} else {
age = 15 + rand.Intn(65) // 15箸キ79までの乱数
}
type1 := "resident"
departure_name := ""
_row1, _ := strconv.ParseFloat(row[1], 64)
_row0, _ := strconv.ParseFloat(row[0], 64)
departure_number, departure_lng, departure_lat := fixPosition(dbMap, _row1, _row0) // row[1], row[0]の順番に注意
arrival_name := ""
_row3, _ := strconv.ParseFloat(row[3], 64)
_row2, _ := strconv.ParseFloat(row[2], 64)
arrival_number, arrival_lng, arrival_lat := fixPosition(dbMap, _row3, _row2) // row[3], row[2]の順番に注意
output := []string{fmt.Sprint(id), fmt.Sprint(age), type1, departure_name, fmt.Sprint(departure_number), fmt.Sprint(departure_lat), fmt.Sprint(departure_lng), arrival_name, fmt.Sprint(arrival_number), fmt.Sprint(arrival_lat), fmt.Sprint(arrival_lng)}
//output := []string{row[0], row[1], row[2], row[3], row[4]}
fmt.Println("output:", output)
if err = w.Write(output); err != nil {
log.Fatal(err)
}
id++ // idの加算
}
}
err = rows1.Err()
if err != nil {
panic(err)
}
defer w.Flush()
if err := w.Error(); err != nil {
log.Fatal(err)
}
}
}
// 指定した座標に近いDB上の座標を取得
func fixPosition(db *sql.DB, _x1, _y1 float64) (int, float64, float64) {
// Scan用の仮変数
var source int
var longitude float64
var latitude float64
var dist float64
upperLimitMeter := 1500.0 // 近傍ノードの上限を1500 mに設定
str := fmt.Sprintf(
// 修正前: ways (道) の中から最近傍を取得
// "SELECT source, x1 AS longitude, y1 AS latitude, ST_Distance('SRID=4326;POINT(%v %v)'::GEOGRAPHY, the_geom) AS dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(%v %v)'), %.1f) ORDER BY dist LIMIT 1",
// 修正後: ways_vertices_pgr (点座標) の中から最近傍を取得
"SELECT id AS source, lon AS longitude, lat AS latitude, ST_Distance('SRID=4326;POINT(%v %v)'::GEOGRAPHY, the_geom) AS dist FROM ways_vertices_pgr WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(%v %v)'), %.1f) ORDER BY dist LIMIT 1",
_x1, _y1, _x1, _y1, upperLimitMeter,
)
//fmt.Println(str)
rows, err := db.Query(str)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
foundGoodMapNode := false
for rows.Next() {
foundGoodMapNode = true
if err := rows.Scan(&source, &longitude, &latitude, &dist); err != nil {
fmt.Println(err)
}
//fmt.Println(source, longitude, latitude, dist)
}
if !foundGoodMapNode {
log.Println("Warning: in func fixPosition: Good Map Node not found for query point (",
_x1, ",", _y1, ")")
}
return source, longitude, latitude
}