はてなキーワード: CSVとは
書式なしテキストとして貼り付け
「csvを読み込んで~、該当列を指定してsumifs関数を使ったんですけど~、0になるんですよ~」
「ああ、たぶん金額のところがテキストになっているから、csvを読み込みなおして、数値に変換するか、クエリ自体をコピペして別のシートに書式なしテキストとして張り付けて、該当行をvalue関数で変換してからsumifsをつかってやるといいよ」
わたしは聞くに堪えないと思い、説明している最中の同僚の胸倉をつかみ、頬を2回叩いた
「round関数が~」、「マクロで~」、「ピボットを~」、それでも同僚は話すのを止めないので、同僚の髪の後ろの主電源を切ったのち、電源を入れなおす
蛍光灯が明滅し、セミの鳴き声が逆再生され、私の思考も溶けていく
「あたいが読み込まれる~」と新人がつまんねえことを言いながら窓を突き破り、宙へ飲み込まれていく
世界は再起動され、0と1が書き込まれ、新世界が想像されていく
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>
/**************************************
・NULL演算子(??)は使えない。論理積(&&)は使える。
・オブジェクトの分割代入はできない。
・importはできない。 <h3>o- *************************************/</h3>
/**************************************
関数 <h3>o- *************************************/</h3>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
if (targetAnkerNumber !== null) {
const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);
messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);
return {
...r,
updatedLoopStatuses:
_LoopStatuses.updateMinAnker(targetAnkerNumber),
};
}
}
if (SETTINGS.postSettings.noAnkerPost) {
//返信対象無し、或いは返信しない設定の場合。アンカー無し投稿文を作る。
const r = _TextCsvCursors.takeNextRowTextAsNoAnker();
messageDisplay('返信対象無し。アンカー無し投稿。');
return {
...r,
updatedLoopStatuses: _LoopStatuses,
};
}
return null;
})();
if (p) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
}
wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));
}
}
/**
* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。
* @param {string} serverName サーバー名
* @param {MyPosterName} _MyPosterName
* @param {string} postMail メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
postMail,
_MyText,
).postSubstring(retryTimes, postTo5chTread, postConfirm);
if (r) {
back();
return;
}
wait(7);
const error = createPostErrorMessage().analyze();
messageDisplay(error.message);
if (error.order === 'KILL') {
kill();
} else if (error.order === 'SKIP') {
return;
} else if (error.order === 'TRUNCATE') {
back();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
if (
SETTINGS.postSettings.noAnkerPost === false &&
SETTINGS.postSettings.replyPost === false
) {
return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&
SETTINGS.postSettings.replyPostTextCsvStartRow < 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',
);
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||
SETTINGS.postSettings.replyPostTextCsvStartRow === 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',
);
}
}
/**
* 入力フォームを表示して入力されたスレのURLを受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
const posts = window.document.getElementsByClassName('post');
return new PostList(Array.from(posts).map((e) => new Post(e)));
}
/**
* 開いてるスレのレス全て取得してPostDOMListに格納して返す。
* @returns
*/
function createPostDOMList() {
const posts = window.document.getElementsByClassName('post');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document
https://github.com/lvnkae/blog-collection-filter
など。
例)
<>宇佐美 *定満
宇佐美定満
宇佐美 定満
宇佐美 定満
宇佐美 定満
等、姓名間にスペースが0個以上ある定満はを含むツイートを削除
URL | 概要 |
---|---|
https://blog.livedoor.com/ | ランキング、ブログ速報、カテゴリ、編集部の「推し」、おすすめブログ、ブログ速報 |
https://https://blog.with2.net/ranking/ | ランキング、新着記事 |
https://*,blogmura.com/ | ランキング |
各種ランキングからまとめサイトやコンビニ漫画系(嫁姑、DV、サレが云々)が消えてスッキリ。
しかしランキングサイトはまとめサイトに汚染されていたのだった
今どきはLINEに登録してスマホからブログ見るのが主流と聞き、需要は少なそうですがゼロでもないはず、と思い公開することにしました。amebloのことは忘れましょう。
あれば
CSVじゃ無理っすねー
https://docs.microsoft.com/ja-jp/power-query/connectors/media/json/sample-json-file.png
なんか急にリベラル様が「私達は9条があれば平和は守れるなんて言ってない! 9条は日本を縛るためのものと言ったことはあるけど!」「だから侵略させないためには、別に手を尽くす必要がある」と言っている。
日本で最高の知能が集まるリベラル様が間違いを言ってるはずがないので、自分の記憶が間違ってないか調べてみることにした。一般人から政党まで、いろいろとね。
また、憲法九条は、紛争を平和的に解決するという考えを、多くの国民に定着させてきました。こうして、他国に軍事介入しない、紛争の原因をつくらないということが、他国による日本侵略の要因をつくらず、平和を守ることにつながってきました。
このレベルの例なら私にも出せる。しかもこんな小粒ではなく大量に、だ!これを見ればリベラルどもも黙るだろう。
第11問 憲法第9条は、戦争を放棄し、戦力を持たないことを決めています。あなたは、この第9条は、日本の平和と安全に、どの程度役に立っているとお考えですか。リストの中からお答えください。
1.非常に役に立っている 29.4%
2.ある程度役に立っている 52.6%
4.まったく役に立っていない 2.3%
5.わからない、無回答 4.7%
そう、何とNHKによれば日本人の8割もが憲法9条が日本の平和と安全に資すると答えているのである!
どうだリベラルどもよ、これを見てもまだ9条が平和に役立つと言ったことがないなんて言えるか?言った人がいたとしても少数だなんて言えるか?国民の8割とはマイノリティーなのか?マジョリティーもマジョリティーなのである!
そして今明かされる衝撃の真実!大多数の日本人はお花畑リベラルかお花畑リベラルに洗脳された愚民だったんだよッッッッ!
おっといけない愚民なんて言葉は選民思想リベラル様の専売特許だったのであった。しかしまあなんて由々しき事態なんだ…。
日本は国際社会で、主としてどのような役割を果たすべきか聞いたところ、「環境・地球温暖化・感染症対策を含む保健などの地球規模の課題解決への貢献」を挙げた者の割合が63.9%、「人的支援を含んだ、地域情勢の安定や紛争の平和的解決に向けた取組を通じた国際平和への貢献」を挙げた者の割合が59.2%と高く、以下、「軍縮・不拡散の取組などを通じた世界の平和と安定への貢献」(41.2%)、
昨年度の内閣府の調査を見れば国民どもの思想を垣間見ることができる。4割が軍縮・不拡散を行うのが日本の役割だと述べているのだ。この夢想家どもがッッッ!
ちなみにCSVデータを見ると一番軍縮云々に賛同しなかったのは30代で26.1%しか賛同していない。次が18-29歳の37.3%なのでここだけ異様に低いのが分かる。不思議だね。
いや、ちょっと待ってほしい。「9条が日本の平和に役立っている」と主張したからといって「9条があれば日本は平和」と言ったことにならないはずだ。「他国に軍事介入しない、紛争の原因をつくらないということが、他国による日本侵略の要因をつくらず、平和を守ることにつながってきました」という文章を読んで「わあ、9条があれば侵略されることはないんだね!」と読解する人間はさすがにおるまい。確かに共産党は近いことを言ったこともあった気がしないでもないがこの文章だけではそうとは捉えられない。意外なことに原文を読んでも「他国に軍事介入しない」とは他国の戦争に自衛隊を派遣して怨みを買わない、「紛争の原因をつくらない」とは武器輸出をすることでイラクのような平和を脅かす集団を作るということをしてないという意味で、結果侵略される要因を作ることにならないため平和に資するのだといった程度のことしか書いていないのである。
第13問 あなたは、現在の世界の情勢から考えて、日本が戦争や紛争に巻き込まれたり、他国から侵略を受けたりする危険性がどの程度あると思いますか。リストの中からお答えください。
4.まったく危険はない 0.5%
5.わからない、無回答 1.9%
このように国民の8割が9条が日本の平和に役立っている一方で、国民のほとんどは侵略される危険性があると考えているわけだ。少なくとも国民大多数の中ではこの2つが両立しているということが論理必然的に分かる。
「9条が平和に役立つ」は「9条があれば侵略されない」ではない。データから国民全体の傾向として言えるのは「9条は平和に全く役立たないという意見の持ち主は限りなく少数派」、「多数派は9条は平和に資するがそれで侵略されないとも思っていない」といったところだろう。まあ相手の主張を0か1かで考えるのは楽だが、わりとこんな感じで程度問題だったりもする。「9条が日本を守ってきてくれた」と言う人に「どれくらい役に立ったの?」と聞いて「100%」と返ってくるかは微妙なところだ。そういうものである。
一応補足しておくと今同じ世論調査をすれば「9条が平和に役立っていない」と答える人が増えるのではないだろうか。この2017年の調査にはやはり集団的自衛権を巡る数々の議論があり「戦争に巻き込まれる可能性」が俎上に上がった余波が残っていると見るべきだし、その前に行われた2002年調査はイラク戦争直前でテロ特措法が成立するなど既存の法体系で対処できるか心配された時代であった。実際、同調査では2002年の方が2017年よりも憲法改正賛成派が多く、また9条が平和に役立つと答えている人も少なめである。ウクライナ侵略が行われている今であれば恐らく2002年調査に寄るかそれ以上に変動するかもしれない。国民世論と秋の空でただですら世論はぶれまくるのに出来事1つで更に右往左往するものだ。これは何があってもそこまで政治信条をあまり大きく動かさない我々政治厨が見逃す点で大抵国民世論に確固たる思想信条の基盤があると”必要以上”に考えがちだ。
ところでこれ1974,1992,2002,2017と調査が行われているのだが9条が平和に役立っていないと答えた人は1974年が一番多いのはちょっと面白くないですか?
個人的な意見を言えば、9条に全く平和に資するところがないとは思ってはいない。自衛隊派遣を巡って毎度国会が空転しているのを見れば軍事を増強しても他国視点だと侵略してくるとはあまり思えないというのはあるんじゃないか。専門家ぽく言うと安全保障のジレンマを軽減する信頼醸成措置的な何かになる要素はあるんじゃなかろうか。安全保障のジレンマは元々はリアリズム(国際政治学の学派の名前で一般的な意味とは異なる)が言ってたことで、信頼醸成措置は第二次安倍政権が作った「平成26年度以降に係る防衛計画の大綱」でも使われている言葉だから言葉としては存在するけど使い方が合ってるかは知らん。
なおデータで言えば一般抑止は計量するのが難しいので何とも言えないが、明日にでも戦争が始まりそうな状態から戦争をやめさせるという緊急抑止については統計分析が存在する。当然9条のデータなんて存在しないのだが、軍事同盟については緊急抑止についてのデータが存在する。代表例はHuthの研究なのだが何と相関関係はマイナスである…。まあこれは選択問題とか色々な理由で一般抑止はあるんじゃねっていうのは言われている。データで証明できてないじゃんwwお気持ち乙wwという世界ではないからね。
それ自体はどうでも良いのだが、同時に緊急抑止に関係あるのは長期の軍事力ではなく短期の軍事力だという分析結果もある(一般抑止は分らんが)。日本ではあまり聞かない議論なんだけど闇雲に軍事力軍事力言うよりその辺何が抑止に効果的なのかとかもうちょっと表で議論されてほしいんですけどね。
抑止とは、費用と危険が期待する結果を上回ると敵対者に思わせることにより、自分の利益に反する行動を敵対者にとらせないようにする努力である。したがって合理的敵対者に対してのみ働き得る機能である。
最後に1つだけ。引用した『軍事学入門』は軍事に詳しくリアリスト(国際政治学の学派の名前ではなく一般的な意味と同じ)であれば必ず通った書物だ(過言)。ちなみに自分は軍事通でもリアリストでもないダメ人間なのだが。読むと至極当然の抑止についての説明が書いてありますね?ところが最近の議論を見ているとこの当たり前の話を忘れてないか…という人がいる気もしないでもないのでここで紹介しておく。
もちろん「合理的」のニュアンスが難しいところだとは思うが。行動経済学が人間は非合理という話をした時、既存の経済学の「合理性」を拡張すれば対処できるものもあるよねって話になったりもしたんよね。その意味でこの「合理的」を「プーチンは戦争を起こす際に損得勘定もできないアホバカオタンコナス!だから軍事抑止力も意味ないんだ😭」って話にできるかは別の話。
・右と左ってどっちがどっちだっけ?
・エレベーターボタンって<|> と >|< どっちが開くだっけ?
・カンマ区切りのファイルって CVS と CSV どっちだっけ?
は全く問題ないんだけど、
女性を嫌悪するのって ミソジニー と ミサンドリー どっちだっけ?
は一瞬考えないと正しく確信を持てない。
ミソジニー (英: misogyny) は、ギリシア語の「μῖσος mîsos(嫌悪、憎しみ)」と「γυνή gunḗ(女性)」に由来する。
ミサンドリー(英: misandry)とは、語源はギリシャ語で、“憎悪”(希: μῖσος、mísos)と“男”(希: ἀνδρός、andrós)から。
https://ja.wikipedia.org/wiki/%E3%83%9F%E3%82%BD%E3%82%B8%E3%83%8B%E3%83%BC
https://ja.wikipedia.org/wiki/%E3%83%9F%E3%82%B5%E3%83%B3%E3%83%89%E3%83%AA%E3%83%BC
gunḗ (ジニー)が女性というのがピンとこなくて、むしろアラジンのジーニーを連想して余計に混乱する。
andrós(アンドリー)→アンドリュー→男性名→男性→misos男性→男性を嫌悪する→ミサンドリーは男性嫌悪→ミソジニーはその逆だから女性嫌悪
と考えないと正解できない。
みんなはパッと見で分かるのかな?
これが費用も安くて故障したとき、バックアップの NAS をメインに切り替えたら、わりとすぐ復旧できる。
一旦 USB 経由してるのは NAS は転送速度が遅いからで、うちの場合ネットワークの速度が 10MB/sec ぐらいしか出ん(勘違いでした 50MB/sec 以上は出てました)。
数テラ級の NAS とかになると、一晩じゃ絶対戻りきれないので、
運用しながらバックアップしながら復旧するのに、やっぱり2週間はかかる。
幸い障害時に一番に復旧させる必要な箇所のデータは CSV とかなので、先にそこのデータだけ復旧させたら、
あとはなんとか運用しながら復旧できる。
とりあえず大事なデータは NAS に入れろ!って言うのを周知。
個々のパソコンが壊れたら、
物理的に取り出して、USB 接続させてサルベージできるので、そこはあんまり困ってない。
(だったら RAID も同じ機器2台買って二重にしたいタチ)
取り回しのしやすい USB HDD を複数で多重バックアップさせておけば OK と思ってる。
NAS の HDD は Windows にマウント出来ないので一度 Linux 経由でマウントさせてサルベージさせてみようと思ったけど、差分とかどうやって取り出したらいいのか分からなかったし Linux 自信ないので難しかった。
それを踏まえると NAS が壊れたらややこしいので NAS のバックアップは必須。
困るのが
世代バックアップが出来ないぐらい(あんまりそんな問い合わせもないけど)
だから Mac の TimeMachine は個人であんなバックアップシステムは変態すぎる。
Buffalo の NAS は電源を付けたり消したりしているとすぐ壊れるので、24時間ずっと付けっぱなしの方が壊れない。
(Buffalo の昔のファン付き NAS はファンが壊れたらどうしようもなかったので、苦情も多かっただろう(ファン交換部品もオプションであったしね)、いま Buffalo の NAS はほぼファンレスなので耐久性も抜群に上がってきている)
あと Buffalo の NAS は機種によって勝手に画像のサムネイルを生成してしまう余計な機能がある NAS があるので、そう言った機能がないのがプレーンに使えてよい。
LS510DG や LS210DG など 510 210 の桁の品番が、そう言った余計な機能がない品番になる。
会社で使う分には勝手に色々なファイルを生成されるとバックアップに支障をきたすので、そう言った機能がない方がよい。
零細企業と言えども
NAS 4台もあるし、それにともなう USB 接続の HDD も必然的に多くなる。
この理屈で運用すると NAS の倍の USB HDD が必要になる、実際にそうしてるけど。
今余裕がないので予備の NAS でのバックアップが出来てないけど、まあなんとかなるか。って感じ。
「DiskMirroringTool Unicode版」のみ
この Unicode版じゃないと中国語のフォントなど文字によってバックアップ対象から外れてしまうし、4GB 以上のファイルもバックアップ出来ないので、
Unicode版な。
データは大切!これを分かってくれる人は意外と少ない。
あるリポジトリのルートにぶら下がっている多数のファイル群を整理し、部分的にWiki化することを進めている。
少しだけ進んだ。三つのファイルを消去し、Wiki化した。CSVファイルは Wiki化するときすごく気が咎める。
これは何とかならんものか?もちろんオンラインでもCSVをGFMテーブルに変換できるけど、そこまでするのはなぁ?!
あとGreetingCardというディレクトリの名前は いかがなものか? Addressとかいう名前にチェンジし、Mail User Agent
付属のCSVファイルもそこに格納することにしたら・・( ^ω^)・・・?
IMGというディレクトリがあるようにCSVというのも増設するほうがいいのかな?WikiからもCSディレクトリは参照できるし・・・( ^ω^)・・・
後編
行列はVBAなんかじゃ無理っぽいし、なんかプログラミング言語を覚えようと決める。
とりあえず両方試そうということで、RのためにRとRstudioをインストール。
プログラミングはなんかを製作する目標がないと挫折すると聞いていたので。
深層学習というものが流行ってると聞いて、ちょっと触りを勉強したくなる。
この本は面白かったので、深層学習を目標にプログラミングを覚えよう!
後になって、これはとんでもない間違いだったことに気づく。深層学習と機械学習の違いも判らないまま、RよりPythonを先に触ることに。
教本にしたのはこちら。
「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」
途中まではまあなんとか。
微分って便利だな。行列計算できるの便利だなっていうところまでいったが、クラスという概念が理解できず、途中からハテナが浮かんで読み進められず。
うん、もうちょっと易しい本を探そうと思って手に取ったのが
「独学プログラマー Python言語の基本から仕事のやり方まで」
なんとか読了。自信をつける。
実は、いまだにコマンドプロンプトとパワーシェルとbashの違いが分かってない。
つづいてPyQに2か月くらい登録してみる。
なかなかPythonが楽しくなってきたが、クラス意味が今一つ掴めないままいったん中断。
この辺で、自分は統計に興味があってもプログラミングに興味がないんじゃないかということに気づく。
なんだかんだもがきながら、PythonもRもモノにならず、日常のちょっとした計算やグラフを作ったりはExcelを使い続ける日々が続く。
あるいは、Excelで成形して、検定かけやすい形式にしてRで検定するとか。
Rに触れてなかったな、Rは完全に独学。「こんなことやりたいなぁ、ググってみるか、ほうなるほど」って感じ。
そんなさなか、放送大学で「Rで学ぶ確率統計」という講義があるのを知り、さっそく入学して受講。
なかなか面白かったし、PythonばっかりでRあんまり触ってなかったからいい刺激になった。
恥ずかしながら、負の二項分布やガンマ分布ってよう知らんかった。
しかし、講義は楽しかったがなにか書けるようになったかというとそんなことはなく、依然として基本はExcel。
まあ、実際csvじゃなく、手書きのデータとかをExcelに打ち込んだりする程度なんでPythonやRを使うまでもなかったというのもあるんだけど。
「Excelパワーピボット 7つのステップでデータ集計・分析を「自動化」する」
パワークエリを覚えたらピボット形式のExcelファイルとか、セルの結合が多用されたExcelファイルを、成形加工するのが非常に楽になった。
しかも、同じフォーマットで記録されてるデータならフォルダにぶち込んで一気にまとめ上げることも可能!
控えめにいって神!
としばらくパワークエリを礼賛してたのだけど、各ステップはPythonのpandasやRのdplyrでも出来ることに気づく。というか最初から気づけ。
こりゃ、一気に覚えちまおう、統計というより、データの前処理だなと思ってUdemyでRの動画を買ってみた。
AIエンジニアが教えるRとtidyverseによるデータの前処理講座
https://www.udemy.com/course/r-tidyverse-preprocess/
すっかりR信者になる。
それまで教本を呼んでもdplyrの便利さが今一つわからなかったのに、パワークエリで具体的にモノを作ると、dplyrに翻訳したら、すいすい。スピード10倍。
便利さにようやく気付く。
そんで、pandasに翻訳したらどうなんだろ?と思ったらもっと速いw
すごいなPython。
Rへの入信はたった数週間。再びPythonに興味。
さて、ゼロから作るディープラーニングを再開しようと思ったけれども、そもそも、機械学習をすっ飛ばして深層学習って無茶だったと反省し、まずは機械学習に。
機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)
で、この本がすごい。
5章あるんだけど、機械学習のアルゴリズムは5章だけなんだなw
それまでは何に割かれてるんだって?数式の証明とか、便利な計算法、例えばニュートン法とかラグランジュ未定乗数法とかw
こんだけ引っ張っておいて、いよいよ本番の第5章もゴリゴリ数式をスクリプトに落とし込んでいってるのに、「これは学習のためでscikit-learnっての使えばたった1行」っていう無慈悲w
いや、ほんと数学の勉強になったし、こうやってゴリゴリやるとなんのためにクラスというものが存在するのかようやくわかった。
線形代数って便利なんだなと。行列をスカラー値のように何の気なしに扱えるようになると、あの頃苦しんでいた実験計画法、タグチメソッド、今読み直したら別の印象があるんじゃないかなと思うようになったり。
この本を読む途中、「マンガでわかる統計学因子分析編」で学んだことが理解の助けになった。
なんたる僥倖。
線形回帰、リッジ回帰、SVM、PCA、k-means、クラスター分析、一気に手札が増えた。
Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析
実験計画法って、fisherの古典的なやつ、ラテン方格に割り付けて、ってやつかと思ったら、線形代数使えればもうなんでもありなのな。
これ、すごいな。
機械学習と実験計画法がここでつながるとか、控えめにいって最高だな。
まだ読了してないので、また後日。