OmniAICreator/Qiita-1.07M huggingface dataset:
【Flutter】AnimatedNotchBottomBarを実装してみて

こんにちは！
今回はAnimatedNotchBottomBarというパッケージを使ってBottomBarに動きをつけてみました。

# パッケージ
https://pub.dev/packages/animated_notch_bottom_bar

# 実装内容

![Qiita_1029.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/70f5ab02-6e95-0f11-ea0d-cbb3ac196fef.gif)


# パラメータ

| 1 | 2 |
|:-:|:-:|
| notchBottomBarController  | ページを制御できるコントローラー  |
| bottomBarItems  | ナビゲーション項目。必要な項目は 1 つ以上 6 つ未満です  |
| onTap  |  アイテムがタップされたときにリッスンする必要があり、選択されたアイテムのインデックスを提供します。 |
|  color |  下部バーの背景色 |
| removeMargins  | デフォルトでは、サイドとボトムの余白を削除するには false にします  |
| bottomBarWidth  |  Web およびデスクトップ アプリに幅を提供します |
|  durationInMilliSeconds |  継続時間をミリ秒単位で設定します |
| showLabel  |  下部バー項目の下のラベルを表示または非表示にします |
| itemLabelStyle  | 下部バーの項目テキストスタイル  |
| showShadow  |  false の場合、下部のバーの標高は削除されます |
| showBlurBottomBar  |  true の場合、下のバーがぼやけて見えます |
| blurOpacity  |  ぼかし効果の不透明度を設定します |
| blurFilterX  |   x 軸にガウスぼかしを適用する画像フィルターを作成します |
| blurFilterY  |  Y 軸にガウスぼかしを適用する画像フィルターを作成します |
| notchColor  |  ノッチの色をカスタマイズ可能 |
| notchGradient  | ノッチにグラデーションを追加します  |
| showTopRadius  |  false に設定すると、上部の角の半径が削除されます |
| showBottomRadius  | false に設定すると、上部の角の半径が削除されます  |
| elevation  | 下部バーの標高を設定します  |
| bottomBarHeight  | 下部バーの高さを設定します  |

# 実装コード

```php
AnimatedNotchBottomBar(
      notchBottomBarController: _controller,
      notchColor: Colors.lightBlue,
      kBottomRadius: 10.0,
      kIconSize: BorderSide.strokeAlignCenter,
      color: Colors.blue,
      bottomBarItems: const [
        BottomBarItem(
          inActiveItem: Icon(
            Icons.home_filled,
            color: Colors.white,
          ),
          activeItem: Icon(
            Icons.home,
            color: Colors.white,
          ),
        ),
        BottomBarItem(
          inActiveItem: Icon(
            Icons.star_outline,
            color: Colors.white,
          ),
          activeItem: Icon(
            Icons.star,
            color: Colors.white,
          ),
        ),
        BottomBarItem(
          inActiveItem: Icon(
            Icons.settings_outlined,
            color: Colors.white,
          ),
          activeItem: Icon(
            Icons.settings,
            color: Colors.white,
          ),
        ),
      ],
      onTap: (index) {
        setState(() {});
      },
    )
```


以上になります！
最後まで読んでいただきありがとうございました！
HTML CSS　最初にやるべきこと

# 目的
HTMLを書く際の手順や方法を一度しっかりまとめようと思いました。
自分なりの解釈ですので、ご了承ください。

# 最初にすべきこと
①htmlに以下を記述
```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" href="">
    <title>タイトル名</title>
    <meta name="description" content="ディスクリプションです">
    <!--font-awesomeを使用する際に記述-->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
    <link rel="stylesheet" href="./css/reset.css">
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>

</body>
</html>
```

②cssフォルダを作成、その中にreset.cssとsyle.cssを作成
③reset.cssに以下を記述
```css
* {
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
  }
  
  html, body, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, div, span, img, a, table, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    font-weight: normal;
    font-size: 100%;
    vertical-align: baseline;
  }
  
  header, footer, nav, section, article, aside, figure, figcaption {
    display: block;
  }
  
  body {
    line-height: 1;
  }
  
  ol, ul {
    list-style: none;
    list-style-type: none;
  }
```

# HTMLを記述していく
①セクションを作成していく

:::note
ここで大枠を決めていく。
:::

```html
<section class="top">

</section>
<section class="middle">

</section>
```

②記述していく。

:::note warn
記述していく際は、セクションごとに完成を目指そう！
:::

# CSSの設定
大枠の大きさを決める。

:::note
大枠の大きさを決めることで、画面全体に表示させなくて済む
:::
```css
大枠の名前 {
    width: 80%;
    max-width: 1200px; /*この大きさはいくつでも良い*/
    margin: 0 auto; /*両側を空ける事ができる*/
```


# 最後に
これで、HTMLを書き始めることができるはず。
電子ペーパーが反応しない君へ…ESP32と4.3inch e-Paper UART Module 【10628】4.3インチ 800×600 E-Paper 電子ペーパーモジュール UART接続

### はじめに
先日電子ペーパーを使用して、ハッカソンに出場しました。
開催当日、電子ペーパーをいじり始めたんですが…

**とにかく、画面描画ができない。**

通電した際に画面が一度黒く反転するものの、その後は真っ白のまま...

---

### 使用機材
- **電子ペーパーのモデル**：4.3inch e-Paper UART Module
【10628】4.3インチ 800×600 E-Paper 電子ペーパーモジュール UART接続
- **メーカー**：WaveShare
- **マイコンボード**：ESP32
- **IDE**：Arduino IDE

![スクリーンショット 2024-10-29 8.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3644890/b13fd782-baa3-e484-4155-b2e640300597.png)

---

### 問題発生
- 画面が真っ白のままで動かない
- 公式ドキュメントの配線通りにしても無反応
- 謎のエラーが出たまま、原因も不明で、正直お手上げ状態…

---

### 解決への道
いろいろ試行錯誤した結果、どうやら公式ドキュメントに載ってたピン配置を参考に実装していたのが間違ってたっぽいです。Twitterで「電子ペーパーの表示できてる人いないかな～？」って探して、実際にうまくいっている配線を見つけて確認してみました。

1. **公式じゃなく、実際に動いてる人の配線を真似する**  
   公式の接続方法はうまくいかないから、Twitterで表示できてる人の配線を探して、接続先を照らし合わせました。
   具体的にはD2に繋ぐと書かれているところを18番ピンに挿すことでうまくいきます。

2. **正しい配線に変えると…**  
   見つけた配線方法に変えてみたら、あっさり表示されるようになりました！  

| | |
| --- | --- |
|![スクリーンショット 2024-10-29 8.45.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3644890/2e93da45-7cc2-4c78-3dca-bf08efa6da77.png)|![スクリーンショット 2024-10-29 8.47.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3644890/b022a162-dd3b-2db5-64e4-8b9880c77a26.png)|
---

### まとめ
今回のハッカソンでは、公式に必ず欲しい情報があるとは限らないことを実感しました。他の人の成功例を参考にすることで解決につながる場合もあるので、困ったときは実際に動いている例を探すのもひとつの方法です。

電子ペーパーが動かないと悩む君へ、この経験が役に立てば幸いです！

---
### 参考リンク
[千石電子の購入リンク](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-58UC)
[公式サイトのリンク](https://www.waveshare.com/wiki/4.3inch_e-Paper_UART_Module)
※ピン配置は間違っているので注意
※ただ、参考コードもあるので読むのが吉
Raspberry Pi OS 2024-10-22 Release-note 翻訳

（追記：2024/11/19に、Raspberry Pi OS 2024-11-19 がリリースされています）
https://qiita.com/utaani/items/68c019fb9373b411c374 

https://downloads.raspberrypi.com/raspios_armhf/release_notes.txt
 
  * labwc コンポジターが Raspberry Pi の全モデルでデフォルトとして使用されるようになりました
  * wf-panel-pi は実行時にプラグインを動的にロードするようになりました
  * raindrop - arandr に代わる新しいスクリーン設定ツール
  * スクリーンキーボードの squeekboard がインストールされ、タッチスクリーン付きシステム上では自動的に実行、そうでないシステム向けにはrc-guiで手動で有効にすることができます。
  * タッチスクリーンのサポートが改善 - 長押しで右クリック、ダブルタップするとダブルクリックになります
  * アップデートインストーラーがパネルコードから別の独立したGUIアップデータパッケージに移動
  * アイコンテーマで欠落していたカーソルを追加
  * インストールウィザードはデフォルトでBluetooth HIDデバイスを自動ペアリングしなくなりました - ファイル「/boot/firmware/btautopair」を作成して有効にするか、最初の実行後にウィザードで再設定します。
  * シャットダウンダイアログのCPU負荷を軽減するためにPi 5の電源ボタンの処理を変更しました
  * Raspberry Pi Connectは、専用のシステムトレイアイコン内のパネルプラグインとrc-guiのオプションで制御されるようになりました。
  * Raspberry Pi Connectの画面共有は、実行中のWayVNCサーバーが検出されたらすぐに利用可能になりました。
  * メインメニューに安全情報のURLを追加しました
  * Chromium パッケージの名前が chromium-browser から chromium に変更されました
  * pcmanfm のさまざまなメモリリークを修正
  * バグ修正 - ヘッドレスシステムで外観設定を実行するとクラッシュする
  * バグ修正 - アプリケーションのプロパティダイアログでアイコン選択ツールを開くとクラッシュする
  * 翻訳を更新しました
  * Chromium が 130.0.6723.58 に更新されました
  * Firefox を 132.0 にアップデート
  * ラズベリーパイファームウェア a2e586ba98ce68f7d11b1c717ad8329b95dcb3b6
  * Linuxカーネル6.6.51 - 5aeecea9f4a45248bcf564dec924965e066a7bfd
Windowリモート接続時にキーボードが英語になってしまったときの対処

# リモートデスクトップに接続すると英語になる
何故かLinuxからリモート接続すると時々キーボードが英語キーボードになってしまうことがあります。（原因不明、意味不明です）
これを簡単に治す方法がわかったので書いておきます。

# 対処
１．一旦リモートデスクトップ環境からログアウトした状態でリモート接続を切ります。
２．日本語環境のWindowsPC(仮想PCでもOK)でリモート接続してログインした状態で接続を切ります。
このとき日本語キーボードになっていることを確認してください。
３．切断します。
４．Linuxからリモート接続すると直っていっます。
シート色塗り用

以下のVBAコードを使って、指定されたシートの特定の列を、別ブックの"rule"シートの1列目を参照して、文字列が一致するセルに"rule"シートと同じ色を塗ることができます。

vba
コードをコピーする
Sub ApplyColorsBasedOnRule()
    Dim wbRule As Workbook
    Dim wsRule As Worksheet
    Dim ruleRange As Range
    Dim cell As Range
    Dim targetSheets As Variant
    Dim targetColumns As Variant
    Dim i As Integer
    Dim j As Integer
    Dim ws As Worksheet
    Dim targetColumn As Range
    Dim ruleCell As Range

    ' 参照するルールブックを開く
    Set wbRule = Workbooks.Open("C:\Path\To\Your\RuleWorkbook.xlsx")
    Set wsRule = wbRule.Sheets("rule")
    
    ' ルール範囲を設定 (1列目全体)
    Set ruleRange = wsRule.Columns(1)

    ' 対象シートと列の配列を設定
    targetSheets = Array("Story", "Likes", "Dislikes", "Impression")
    targetColumns = Array("Story_base", "Likes_base", "Dislikes_base", "Imp_base")

    ' 各対象シートをループ
    For i = LBound(targetSheets) To UBound(targetSheets)
        Set ws = ThisWorkbook.Sheets(targetSheets(i))
        Set targetColumn = ws.Range(targetColumns(i) & ":" & targetColumns(i))
        
        ' 対象列の各セルをループ
        For Each cell In targetColumn
            ' ルール範囲をループして一致する文字列を探す
            For Each ruleCell In ruleRange
                If cell.Value = ruleCell.Value Then
                    ' 一致する文字列があれば、セルの色をルールのセルの色に設定
                    cell.Interior.Color = ruleCell.Interior.Color
                    Exit For
                End If
            Next ruleCell
        Next cell
    Next i

    ' ルールブックを閉じる
    wbRule.Close False
End Sub
手順:
上記のコードをコピーして、VBAエディターに貼り付けます。
Workbooks.Open行のパスを、実際のルールブックのパスに置き換えます。
マクロを実行します。
このコードは、"rule"シートの1列目の各セルの値を、指定されたシートの指定された列と比較し、一致する場合にそのセルの色を"rule"シートのセルの色に設定します。
Rspec のエラー - expected: 1 time with any arguments / received: 2 times with any arguments

# エラー例

```
expected: 1 time with any arguments
received: 2 times with any arguments
```

# 原因

1回だけのメソッド呼び出しを期待しているのに、2回呼び出されている

# 修正の例

```diff
- expect(SomeClass).to receive(:foo)
+ expect(SomeClass).to receive(:foo).at_least(:once)
```

# 注意

「1回以上呼び出される」という検証にしてしまうと、検証的にはゆるい
適切な回数分だけ呼び出されることを検証した方が確かだ

```rb
expect(SomeClass).to receive(:foo).exactly(2).times
```

参考

https://rspec.info/documentation/3.5/rspec-mocks/RSpec/Mocks/MessageExpectation.html
wslでrust その3

# 概要
wslでrustやってみた。
systemに正規表現エンジンが、無いらしい。
regexクレートを呼びつけて、使ってみた。
電卓やってみた。

# 参考にしたページ

https://note.com/gifufpv/n/n0be3a67ae6fa


# 操作手順

```

~$ cd rust

~/rust$ ls
hello  hello.rs  hello0  openmind  zundoko

~/rust$ cargo new dentaku
     Created binary (application) `dentaku` package

~/rust$ cd dentaku

~/rust/dentaku$ cargo add regex
    Updating crates.io index
      Adding regex v1.11.1 to dependencies.
             Features:
             + perf
             + perf-backtrack
             + perf-cache
             + perf-dfa
             + perf-inline
             + perf-literal
             + perf-onepass
             + std
             + unicode
             + unicode-age
             + unicode-bool
             + unicode-case
             + unicode-gencat
             + unicode-perl
             + unicode-script
             + unicode-segment
             - logging
             - pattern
             - perf-dfa-full
             - unstable
             - use_std
    Updating crates.io index

~/rust/dentaku$ explorer.exe .

~/rust/dentaku$ cargo build
  Downloaded regex v1.11.1
  Downloaded regex-syntax v0.8.5
  Downloaded regex-automata v0.4.8
  Downloaded 3 crates (1.2 MB) in 0.74s
   Compiling memchr v2.7.4
   Compiling regex-syntax v0.8.5
   Compiling aho-corasick v1.1.3
   Compiling regex-automata v0.4.8
   Compiling regex v1.11.1
   Compiling dentaku v0.1.0 (/home/ore/rust/dentaku)
    Finished dev [unoptimized + debuginfo] target(s) in 26.50s

~/rust/dentaku$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/dentaku`
3 4 + 2 *
["3", "4", "+", "2", "*"]
14

~/rust/dentaku$

```

以上
AWS re:Inventに行く前に〜国際カンファレンスに行く前に気をつけたいこと〜

## これは何?

昨年国際カンファレンスに行った知人に聞いたアメリカのカンファレンスに行く時に気をつけるべきことと自分で調べたことをまとめます。

---

## 移動はなるべくタクシーを使う(特にラスベガス)

- バスは平気で遅れるので日本の感覚で信頼してはいけない。
- 歩くと昼間の大通りでもボッタクリをする奴らがたくさんいる。謎のサインを高額で売りつけられる等の被害が多数あり，銃社会なので逆らうと危険。
- **マスク**をつけていると日本人 or 台湾人と思われてカモにされるのでやめよう

---

## 何を着ていくべきか

日本人でアニメ好きならアニメTシャツを着ていくと話しかけられるかも

---

## 持っていくべきもの

- 日本のお菓子(意外と喜ばれる)
- 水着: プールがついていたりするので
- 飲料水: 買うと高いので何本か持っていこう
- かばんやキャリーケースにはAir Tagなどをつけておく

---

## 事前準備

- 人気の講座はすぐ埋まるので早めに予約しておく
paiza.ioでrust その6

# 概要
paiza.ioでrustやってみた。
練習問題やってみた。

# 練習問題
hello.cをコンパイル、実行せよ。

# サンプルコード

```

use std::fs;
use std::io::{Write, BufWriter};
use std::process::Command;

fn main() {
		let b = "
#include <stdio.h>

int main() {
  printf(\"Hello World\");
}
";
        let mut f = BufWriter::new(fs::File::create("hello.c").unwrap()); 
		f.write(b.as_bytes()).unwrap();
		f.flush();

        let output0 = Command::new("gcc").arg("hello.c").output().expect("failed to execute process");
        let hello0 = output0.stderr;
        println!("{}", std::str::from_utf8(&hello0).unwrap());
        
        let output = Command::new("./a.out").output().expect("failed to execute process");
        let hello = output.stdout;
        println!("{}", std::str::from_utf8(&hello).unwrap());
}


```

# 実行結果

```

Hello World
```

# 成果物

https://paiza.io/projects/ApcO5ahQgtfMjjK8snff9Q


以上
どんなアプリを作りたいか。ではなく、どんなアプリを運用できるか。で考える

　アプリは作ろうと思えばだれでも作れる。小学生や中学生でも作ってる。だが、運用になると話は別である。特にユーザー投稿型のアプリは法的リスクも色々ある。そういったリスクとアプリを天秤にかけて、自分がどういったアプリなら運用できるかを考えるのが大事である。これを考えるにはまず自分というものをよく知らないとだめだ。自分はどんなストレスに弱いのか？　どんなミスをよくするのか？　どんなことに嫌悪感を感じるのか？　など、自分についてよく考えてそれを文書化する。そうすると自分がどんなアプリを運用できるかが見えてくる。たとえば法的リスクの責任に弱い人間ならば、法的リスクのないアプリを開発しなければならない。つまり運用者が自分であるならば、リスクは自分が負うので、そのリスクに自分が耐えられるか、ということが肝心である。
picoCTF #Forensics - endianness-v2

■問題
Here's a file that was recovered from a 32-bits system that organized the bytes a weird way. We're not even sure what type of file it is. Download it here and see what you can get out of it 

こちらは32ビットシステムから復元されたファイルです。このシステムは独特な方法でバイトを整理していたため、このファイルがどのような形式かも確かではありません。このファイルをダウンロードして、調べてみてください。

■解き方

①ファイルの内容を確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/a4d9124b-322a-a907-ef3c-5fd268908437.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/797a2a58-6a2c-29b1-28cc-7c81c7920e30.png)
exiftoolではJPEGというキーワードが出力された。
fileで確認するとdataと出力されたため、データがばらばらになっていることがわかる。
※dataの場合、ファイルの形式が不明、もしくは特定の形式として認識できないものを表す。

②endianness-v2という問題分を改めて確認する
エンディアンは、コンピュータがデータをメモリに格納する際のバイトの順序を指す。具体的には、ビッグエンディアンとリトルエンディアンの2つの形式がある。

ビッグエンディアン（Big Endian）
上位バイト（最も大きな値のバイト）を先に、下位バイトを後に格納する形式
16進数のデータ 0x1234 をメモリに格納する場合、ビッグエンディアンでは 12 34 の順になる。
ネットワークプロトコルや一部のアーキテクチャはビッグエンディアンを採用している。

リトルエンディアン（Little Endian）
下位バイトを先に、上位バイトを後に格納する形式
0x1234 は、リトルエンディアンでは 34 12 として格納される。
多くのPCアーキテクチャ（Intel x86、x86_64など）で使用される方式

③32ビットシステムでは4バイトが1つのまとまりで操作されるため、
4バイト単位でエンディアン変換を行ってみる
※CyberChefを使用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/6160140a-a693-e225-d5e8-42fb99d95ad5.png)
Inputにファイルをアップロードして
Opetationsから「To Hex」「Swap endianness」「Render Image」
をRecipeにドラッグする。
To Hexで16進数に変換させ、Swap endiannessで4バイト単位でエンディアンを並び替える。Remder Imageでフラグの画像を表示させる。
2024/10/29主にITとかセキュリティの記事

日清ファルマ通販サイトの不正購入事件から学ぶECサイトセキュリティ強化の必要性
https://cybersecurity-park.com/3247/

中国、トランプ氏の携帯標的＝情報窃取狙いサイバー攻撃か―米報道(10/26)
https://www.risktaisaku.com/articles/-/96693

中国、トランプ氏の携帯標的＝情報窃取狙いサイバー攻撃か―米報道(10/28)
https://news.livedoor.com/article/detail/27440151/

中国、トランプ氏の携帯標的(10/26)
https://www.hamakei.com/gpnews/1487275/

中国ハッカー、トランプ氏の電話標的
米報道　ハリス陣営も(10/27)
https://www.nikkei.com/article/DGKKZO84391100W4A021C2EA3000/

[アップデート]Amazon GuardDuty S3マルウェア保護機能有効化時のIAMロール作成が非常に楽になりました！(10/27)
https://dev.classmethod.jp/articles/update-guardduty-s3-malware-0click-role/

ディープ・フェイク制作会社の社長の顔が、詐欺動画に利用される皮肉(10/27)
https://www.gizmodo.jp/2024/10/fraudulent-use-of-deep-fakes.html

AWS CDKの脆弱性が発覚したらしいので元レポートを読んでみた(10/27)
https://zenn.dev/ncdc/articles/df170f524d9c0c

謎解き･ARGプレイヤーのための「OSINT CTF」超入門(10/28)
https://zenn.dev/ryo_a/articles/8144885ffa0e60

米国 ODNI FBI CISA 不在者投票の投票用紙を破っている映像はロシアの活動家によるフェイク...(10/27)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/10/post-8c54f2.html

米国 日米韓三カ国国家安全保障アドバイザー会議共同声明(10/27)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/10/post-8e9d1d.html

デルタ航空、システム障害の費用でCrowdStrikeを提訴(10/27)
https://jp.investing.com/news/stock-market-news/article-93CH-907131

ネット広告でブランド洋服が格安、注文したが商品届かず…偽の通販サイトだった　見分けるポイントは？【教えて！相談員さん】(10/27)
https://www.fukuishimbun.co.jp/articles/-/2161219

パソコンの動作が急に遅くなりました。改善するためのチェックポイントはありますか？(10/27)
https://news.allabout.co.jp/articles/o/85202/

アングル：スリーマイル原発、ＡＩ電力需要で進む前代未聞の再稼働プロジェクト(10/27)
https://jp.reuters.com/markets/oil/UZTTYLIPMNPORCCPS5A47VZUQA-2024-10-26/

北朝鮮軍の装備は冷戦期の遺物…ロシアに最も有用なのは特攻隊員(10/27)
https://s.japanese.joins.com/JArticle/325442

すっかり話題に上らなくなったWeb3、人のふんどしで相撲を取ったのが間違いだった(10/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02598/101800014/

盗っ人たけだけしいランサムウエア攻撃者
「個人情報が漏れたのは被害企業のせい」　見せしめに風評被害を与える新手口に注意(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800012/101600263/

「安い」オフショアはもう終わる、IT人材不足に悩む日本企業の焦点は賃金よりも供給力(10/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02991/102400001/

「ポケトーク」がアプリからハード重視の戦略に回帰、理由は米国での急成長にあり(10/28)
https://xtech.nikkei.com/atcl/nxt/column/18/00086/00332/

ヒトもカネも時間も足りない、「ひとり情シス」のセキュリティーに過酷な現状(10/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02988/102200001/

日本政府も対策を呼びかけ、SMSでユーザーを釣る「スミッシング」を徹底図解(10/28)
https://xtech.nikkei.com/atcl/nxt/column/18/02986/102200002/

EBPM（Evidence Based Policy Making）(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/102300180/

基幹システムの開発に失敗　アクセンチュアに124億円の賠償請求 日本通運(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/102300166/

空飛ぶ基地局「HAPS」　商用化が目前に(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600014/102300189/

雇用に潜む「制度化された差別」　日本企業のDXを阻む壁を見直せ(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/102300177/

2～3週間周期でエラーを繰り返す　解決の鍵は「送信元ポート番号」(10/28)
https://xtech.nikkei.com/atcl/nxt/mag/nnw/18/041800004/101600082/
フラットファイルデータベースにおける会員制サイトの構築の考察

　フラットファイルデータベースとはフラットファイル、つまりtxtやcsvなどの単一のファイルで構成されるデータベースである。データベースが使えない安価なレンタルサーバーであっても、フラットファイルによるデータ管理は行えることがある。そのため安価なレンタルサーバーでもフラットファイルデータベースを使えば会員制サイトぐらいなら作れそうである。
 　だがこれには当然、フラットファイルデータベースのデメリットがある。データレコードをCSVファイルで管理することを考える。つまり掲示板を作るならユーザーの会員情報や投稿データをCSVファイルに保存するというものである。フラットファイルを使った大型掲示板のロールモデルとしては2ch（現5ch）があげられるだろう。2chはデータをファイルで管理しておりフラットファイルデータベースによる作例の1つであると言える。2chは大規模な掲示板であったが、フラットファイルであってもアクセスはさばくことができたと思われるが（read.cgiなどの改善は必要であったが）、これはフラットファイルデータベースの可能性を示すものであると言える。
  フラットファイルデータベースは利点も多い。それはデータがファイルなので目に見える形になっていることである。FTPソフトでデータファイルをダウンロードしてエディタで開けばデータをすぐに見ることができる。こういったお手軽さはRDBにはない魅力であると言える。
　だが会員制サイトはどうだろうか。認証と認可によるシステムをフラットファイルで作るというのは、例として考えられるのはLinuxなどである。Linuxはユーザーの情報をファイルで管理しておりフラットファイルデータベースであると言える。だがLinuxの場合は何万何十万というユーザーをさばく必要はないため、パフォーマンスの面ではどうなのかはわからない。フラットファイルデータベースであっても会員制サイトは作れるだろうが、サイトのユーザーが増えた場合にパフォーマンスがどうなるか怪しいところである。
 　1行144文字、100万行のCSVファイルをパースすると筆者の環境では12秒かかる。これは会員情報が含まれるCSVファイルからユーザー情報を検索する場合に最悪コストが12秒ということになる。だが100万行と言うとユーザー数は100万人であり、そこまで大規模なシステムを前提とするのかという疑問は残る。つまり1万人ぐらいの規模を前提とすれば、十分フラットファイルであってもパフォーマンスは現実的なものになるだろう。
　フラットファイルはトランザクション処理が難しいため、トランザクションが必要な処理は極力書かないほうにした方がいいと思われる。つまり1つのPOSTでは1つのファイルのみを更新し、関連ファイルを同時に更新しない。関連ファイルを同時に更新しようとするとトランザクションが発生し、1つ目のファイルの更新に成功して2つ目のファイルの更新に失敗した場合にデータの不整合が発生する。
　2chは非常によくできたフラットファイルシステムで、長期稼働・多アクセスを実現しているが、ネット上の記事を読むとファイルロックを一切使わない設計にしているとか。2chが見本にしたあめぞうでサイトが落ちることが多くあり、それを見た運営者が考えた解決策だという。
　会員制サイトの種類にもよるだろう。例えばSNSのようなコミュニケーション・サイトであれば、ユーザーの投稿数は無限に増え続ける。そのためSNSはフラットファイルシステム向きではないと言える。では掲示板はどうだろうか。掲示板であればスレッド単位でレス数を制限すれば、ファイルの増大にも対応でき、またファイルが壊れた場合の障害も分散できるメリットがある。そういった意味で、2chのシステム的にフラットファイルは適していたと言える。
　つまりこのことからわかるのは、会員制サイトからデータベースを選択するのではなく、データベースから会員制サイトを選択すると言うことである。つまりフラットファイルデータベースに適した会員制サイトを選び、それを構築するのが最も適していると言える。データベースの向き不向きの問題である。
First Aid テスト設計#1（パフォーマンステスト）

# 概要

テスト設計に関する記事を何本か書きたいと思います。

この記事を書こうと思ったきっかけは実務での反省にあります。

先日、テスト設計がまっったくの未経験の状態でテスト仕様書の作成の仕事を振られ、何のインプットもなくふんわり設計してレビューを投げたところ、ぼっろぼろで返ってきたということがありました。
これではいけないと思い、テスト設計について一から学び、そのアウトプットとして記事を書こうというのがきっかけです。

ほぼほぼ自省録ですが、テスト設計未経験の人が
「明日までに自走でテスト作ってね^^」
と言われたときに、短時間で最低限のインプットができるような**応急処置的**な記事を目指して書きます。

そのような状況が実際にあるのかと言われれば疑問ですが。


- **はじめに**

なぜ一本目の記事がパフォーマンステストなのかと言いますと、上述のレビューで指摘が一番多かったからです。

機能的にシンプルなもののテストだったので、機能テストの設計の指摘は少なかったのですが、高負荷になることが考えられる機能だったので、パフォーマンステストにはそれなりのクオリティが求められました。

で、何をもってそれなりとするのかってところですが、それはテスト設計の前段階の性能要求で決定する必要があります。

- **性能要求の決定**

パフォーマンステストとはそもそも、
"ソフトウェアを設計もしくは企画する段階で設定された性能が期待通りにでているかをチェックするためのテスト"
なので、その機能に求められる性能を明確化しなければなりません。

ここでいう性能とは、処理時間、応答時間、データ処理量やCPUやメモリなどのリソースの使用率などの数値が当てはまります。

そして、これら性能に対する要件が決まったら、それらを基に各テストケースの期待値を作り込むイメージです。


>テスト設計前に性能要求を数値的に決定すべし。

- **パフォーマンステストの設計**

1で期待値が決まったので、実際のテストケースを作ることを考えます。

対象機能（ソフトウェア）に対し、どのようなテストデータ（テスト条件）・手順で実施するかを明確にします。

パフォーマンステストのテストデータはできるだけ本番と同じものが良いです。
私は本番のデータが取得できる環境だったので、それをテストデータとして使用しました。
もし本番データが顧客のデータなどで使えない場合は、できる限りサイズやバリデーションが本番と同じになるようにダミーデータを作成するのが良いです。

具体的な手順はその機能がどのようなものか、つまり、webアプリのバックなのかフロントなのかそれともバッチなのかによるので割愛します。

>テストデータには本番と同等のデータを使うべし。

- **パフォーマンステストの実施**  

さて、テストケースが作成できたので、実施のテストの実施を考えます。

私は結合テストフェーズでパフォーマンステストを初めて実施しようとしてました。
しかし、ソフトウェアが動くようになったらすぐに実施しろ、というのがパフォーマンステストの定石らしいです。

その理由としては、結合テストや総合テストで性能的に問題があることが見つかっても、問題箇所が機能のコア部分であることが多く、手遅れなことが多いため、らしいです。

つまりパフォーマンステストの初回実施はコーディングフェーズで、そのあとの単体/結合/総合テストフェーズ、リリース前、リリース後に都度実施するのがベストプラクティスのようです。

ただ、コーディングフェーズで本番環境に近いサイズやバリデーションを持ったダミーデータを大量に用意しておくこと結構ハードルが高いような気もしますが。。。

  >パフォーマンステストはソフトウェアが動くようになった段階から開始すべし

- おわりに

いかがでしたでしょうか。

まとめてみると大したことがないなと思うと同時に、この大したことないことをできていなかったんだなあと少し悲しい気分になりました。
が、まあこれも成長の余地だと前向きに受け止めます。
記述の誤りなど何か少しでも気になることがあれば遠慮なくお申し付けください。

【参考文献】
高橋寿一著　(2023)　「知識ゼロから学ぶソフトウェアテスト改訂版 アジャイル・クラウド時代のソフトウェアテスト」 翔泳社
picoCTF #Forensics - Mob psycho

■問題
Can you handle APKs? Download the android apk here. 

APKファイルに対応していますか？ここからAndroid APKをダウンロードしてください。

■解き方
①unzipで解凍しつつ"flag"をキーワードとしてgrep
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/ad99ada2-fde2-bfa9-ea07-7b180a0d8c31.png)

②flag.txtにフラグが隠されていそうなので、
　catで確認してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/1924211e-83c3-76f7-7173-602a2e295f36.png)

③16進数でエンコードされているためデコードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519665/6566abd6-da94-c9b6-57a9-6b8bf2a614d9.png)
【Figma】LINE Flex Messageカードの管理を効率化してみた

こんにちは。

テックリードのTerukiです。

今日はLINEのFlex MessageのOh my teethでの管理方法について紹介します。


# Flex Messageとは

そんなの知っとるわい！という方は次の章まで飛ばしてください:pray:

[Flex Message](https://developers.line.biz/ja/docs/messaging-api/flex-message-elements/)とは、LINEの公式アカウントなどで送られてくるリッチなカードのこと及びその仕組みのことです。

CSSのFlexboxのようなイメージでスタイリングをすることができ、CSSを触れる人なら比較的簡単に独自のカードを作ることができます。

サンプル↓
![サンプル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/629e9d29-2867-ad4d-be81-6e6fe58aa8b9.png)

このFlex Messageはjson形式で表現されていて、実際にユーザーにLINEで送る際もjsonをAPIにPOSTすることでそのカードを送ることができます。

# 管理が大変
Oh my teethも公式アカウント上でFlex Messageを送るために、データベース上にjsonを格納するなどしていますが数が増えてくるとどれがどんなカードだったか全く分からなくなります。

公式アカウントを駆動するアプリケーションを作っている方なら共感してもらえるのかなと勝手に思っているのですが、実際にそのjsonを公式アカウントに送信するか[Flex Message Simulator](https://developers.line.biz/flex-simulator/)を使わないとどんなデザインだったのか確認できません。

そんな中でどうにかもっと楽に管理できないか考えた結果思いついたのがFigmaのウィジェットでした。

# 本題

もともとFigma自体はプロダクトのデザインに使っていたのでLINEのカードもFigmaで管理できたら良いなと思っていました。

Flex MessageはCSSのFlexboxと似たようなものですし、Figmaのオートレイアウトも若干機能は足りないですがFlexboxみたいなことができるので、もしかしたらうまいこといくかもと思いFigmaウィジェットを作ってみたのでした。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/0723966b-8a9f-9624-611b-d9d1235ced90.png" width="300" >


こちらは左がFigmaのウィジェットで右がFlex Message Simulatorのスクリーンショットです。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/bf266288-cbed-b857-f716-bd6e60cff951.png" width="200" />

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/d8c97da0-a3dc-ef5b-b1ac-4fd4dbed3f7b.png" width="200" />

ボタンの中のテキストの位置が若干ずれてますがかなりいい線行ってるのではないでしょうか。

Figmaのオートレイアウトにもうちょっと細かい設定ができれば更に再現度を上げることができそうですが、どんなデザインだったかを確認するという用途には十分な再現性かなと思っています。

使い方は簡単で、編集ボタンを押した後に出てくるテキストエリアにFlex Messageのjsonを貼り付けてUpdateを押すだけです。（ここのUIがなんかダサいのはご愛嬌）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/435f6f2a-6894-0e7a-81f2-b2de92b44cdb.png)

もちろんカルーセルにも対応しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/3bd60d85-e08d-d7b8-27d2-bc44efcb4fef.png)


ここまでできたらFigmaにある矢印などを繋いで流れを分かりやすくしたり、テキストで補足を書いてみたりなどいろいろできそうですよね。

このウィジェットは無料で公開されているので、気になったら使ってみてください。

https://www.figma.com/community/widget/1245058332634323480

再現度が100%というわけではないので、構成によっては大幅に崩れてしまうカードもなくはないとは思いますが、ある程度のカードならそこそこの精度で描画してくれます。

position: absoluteなどを使っているようなカードは厳しそうです:sob:

# 終わりに

実はこのウィジェット自体は去年の6月に一応完成していたのですが、あまりに忙しくて今日までこのようなお知らせを書けずにいました:sob:

去年から更にFlex Messageのカードは増えていますが、比較的秩序を保てているのはこのウィジェットがあったからだと思っているので本当に作って良かったです。

このウィジェットは現在Oh my teethのプライベートリポジトリで管理されていますが、準備ができたらOSSとして公開しようかなと思っています。

その際は是非Contributeしてもらえると嬉しいです。

今日はここまで。では。

※このFigmaウィジェットについては、LINEの運営会社であるLINEヤフー株式会社は何も関わっておりませんのでこのFigmaウィジェットについての問い合わせはご遠慮ください。

# Oh my teethについて
Oh my teethでは未来の歯科体験を創るために日々活動しています。

Techチームではより良いユーザー体験を提供するべく、Webフロントエンドからバックエンド、スマホアプリに機械学習モデルなど、さまざまなプロダクトを開発しています。

一緒に未来の歯科体験を創りませんか？興味がある方は是非こちらを確認してください。

https://oh.careers/

カジュアル面談も可能なので気軽に応募してみてください！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192685/0138b492-e02b-852e-61fa-fc065b53d285.png" width="450" />
初心者向け：コードを改変して学ぶ効果的な方法

## 初心者向け：コードを改変して学ぶ効果的な方法

プログラミングを学び始めるとき、書かれたコードをただ模写するだけでは、深い理解に繋がりにくいことが多いです。そこで、実際にコードを少しずつ改変して、どう動作が変わるかを確認しながら学習する方法が非常に効果的です。この記事では、コードの改変を通じてプログラムの仕組みを理解するための具体的な手順を紹介します。

---

### 1. **変数の値を変更してみる**

変数はプログラムの中でさまざまなデータを保持しています。変数の値を変えることで、出力がどう変わるのかを確認してみましょう。次の例を参考にして、コードの中の変数の値を変更してみてください。

```python
# 元のコード
x = 10
y = 5
result = x + y
print(result)  # 出力: 15

# 改変例
x = 20  # 新しい値に変更
y = 5
result = x + y
print(result)  # 出力がどう変わるか確認
```

**目的**: 変数に新しい値を入れることで結果がどう変化するかを確認します。これにより、各変数がプログラムの中でどのように使われているか、役割を理解しやすくなります。

---

### 2. **条件分岐の条件を変えてみる**

次に、プログラムの流れを変える「条件分岐」について学びましょう。if文を使って条件を設定し、その条件が満たされたときだけコードを実行するようにします。条件を変えることで、どのように出力が変化するかを確認してみましょう。

```python
# 元のコード
x = 10
if x > 5:
    print("xは5より大きい")
else:
    print("xは5以下")

# 改変例
x = 3  # 条件を満たさない値に変更
if x > 5:
    print("xは5より大きい")
else:
    print("xは5以下")
```

**目的**: 条件が満たされる場合と満たされない場合の挙動を確認し、if文の仕組みや条件分岐の動きを理解します。

---

### 3. **ループの回数を変更してみる**

ループ処理は、同じ処理を繰り返し行いたいときに使用します。ここでは、ループの回数を変更して、どのように出力が変わるかを確認してみましょう。

```python
# 元のコード
for i in range(3):
    print("Hello")

# 改変例
for i in range(5):  # 繰り返し回数を増やす
    print("Hello")
```

**目的**: ループの回数や範囲を変えることで、繰り返し処理が出力にどのように影響するかを確認し、ループの基本的な動作を理解します。

---

### 4. **関数の引数を変えてみる**

関数は、プログラムの特定の動作をひとまとまりにして、繰り返し使えるようにしたものです。ここでは、関数に渡す「引数」を変えてみて、出力がどのように変わるかを確認しましょう。

```python
# 元のコード
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")  # 元の呼び出し

# 改変例
greet("Bob")  # 名前を変えてみる
```

**目的**: 関数の引数がどのように動作や出力に影響を与えるかを確認します。関数の理解が深まり、さまざまな引数で関数を使い回す方法も学べます。

---

### 5. **エラーを意図的に引き起こしてみる**

プログラムの学習にはエラーも欠かせません。エラーが発生したときのメッセージを読むことで、コードの改善ポイントやエラーへの対応方法を学べます。ここでは、ゼロで割るエラーを試してみましょう。

```python
# 元のコード
x = 10
y = 0
result = x / y  # ゼロで割るとエラーが出る
```

**目的**: 意図的にエラーを発生させ、エラーメッセージを確認することで、どのような状況が問題になるのかを理解し、将来のエラー対応力をつけます。

---

### まとめ

コードを少しずつ改変していくことで、プログラムの挙動や各部分の役割についてより深く理解できます。重要なのは、**変更を行う前に結果を予測し、それを実行して確認する**ことです。この予測と確認を繰り返すことで、プログラミングの考え方や流れを掴むことができます。

- **変数の変更**で、データが結果にどう影響するかを確認。
- **条件分岐の改変**で、if文の動作を理解。
- **ループの変更**で、繰り返しの動作を確認。
- **関数の引数変更**で、関数が応答する方法を学ぶ。
- **エラーを意図的に引き起こす**ことで、エラーメッセージの読み方と原因追跡の基礎を学ぶ。

プログラミング学習は、小さな実験を繰り返しながら進めることで、理解が深まり、応用力も高まります。少しずつ手を動かしながら学び、楽しみながらスキルを身につけましょう！
Pythonでデータを正規化する方法

# Pythonでデータを正規化する方法

データの正規化は、異なるスケールのデータを共通の範囲（通常は0から1）にスケーリングし、機械学習モデルの性能を向上させるための重要な前処理です。本記事では、Pythonでのデータ正規化の一般的な手法について解説し、それぞれのPython実装例を紹介します。

---

## 目次

1. [Min-Max 正規化](#min-max-正規化)
2. [Z-score 標準化](#z-score-標準化)
3. [カスタム正規化関数](#カスタム正規化関数)
4. [正規化手法の選択と考慮点](#正規化手法の選択と考慮点)
5. [参考文献](#参考文献)

---

## 1. Min-Max 正規化

Min-Max正規化は、データを0から1の範囲にスケーリングする最も一般的な方法です。以下の式で計算されます：

\[
\text{normalized\_value} = \frac{\text{value} - \text{min\_value}}{\text{max\_value} - \text{min\_value}}
\]

### Pythonでの実装

以下のコードは、`sklearn.preprocessing`の`MinMaxScaler`を使って、データを0から1に正規化する例です。

```python
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# サンプルデータ
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# MinMaxScalerを使用した正規化
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)

print("元のデータ:")
print(data)
print("\n正規化後のデータ:")
print(normalized_data)
```

### 動作の流れ

1. `MinMaxScaler`クラスのインスタンスを作成します。
2. `fit_transform`メソッドでデータを適合（fit）させ、変換（transform）します。

この手法はデータの相対的な関係を保持するため、非常に一般的に使用されますが、外れ値に対して敏感です。

---

## 2. Z-score 標準化

Z-score標準化は、データの平均を0、標準偏差を1にする標準化手法です。以下の式で計算されます：

\[
\text{standardized\_value} = \frac{\text{value} - \text{mean}}{\text{standard\_deviation}}
\]

### Pythonでの実装

以下は、`sklearn.preprocessing`の`StandardScaler`を使用してデータを標準化するコードです。

```python
from sklearn.preprocessing import StandardScaler

# StandardScalerを使用した標準化
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)

print("\n標準化後のデータ:")
print(standardized_data)
```

### 動作の流れ

1. `StandardScaler`を使用して、データを適合および変換します。
2. Z-score標準化により、データは平均が0、標準偏差が1の範囲にスケーリングされます。

この方法は、外れ値の影響を軽減するための手段としても役立ちます。

---

## 3. カスタム正規化関数

独自の正規化手法を使いたい場合には、NumPyを使用してカスタム関数を作成することができます。以下は、各特徴量（列）ごとに最小値と最大値を計算して0から1の範囲にスケーリングする関数の例です。

```python
import numpy as np

def custom_normalize(data):
    min_val = np.min(data, axis=0)
    max_val = np.max(data, axis=0)
    return (data - min_val) / (max_val - min_val)

# カスタム正規化の実行
custom_normalized_data = custom_normalize(data)

print("\nカスタム正規化後のデータ:")
print(custom_normalized_data)
```

### 動作の流れ

1. 最小値と最大値を計算し、データを0から1にスケーリングします。
2. カスタム正規化関数を使用すると、特定の要件に合わせたデータのスケーリングが可能です。

---

## 4. 正規化手法の選択と考慮点

正規化の手法は、データの特性や機械学習アルゴリズムの要件に応じて選択します。一般的には次のような特性が考慮されます：

- **Min-Max正規化**：データの相対的な関係を保ちながら0から1にスケーリングしますが、外れ値に敏感です。
- **Z-score標準化**：平均0、標準偏差1にするため、外れ値の影響を軽減し、線形回帰やクラスタリングに向いています。
- **カスタム正規化**：特定の範囲にデータをスケーリングする必要がある場合や、独自のスケーリング条件に合わせたい場合に有効です。

---

## 参考文献

1. [DigitalOcean - Normalize Data in Python](https://www.digitalocean.com/community/tutorials/normalize-data-in-python)
2. [Qiita - データの正規化](https://qiita.com/RyutoYoda/items/e6193f72e6e5fb7a9333)
3. [Note Nkmk - Pythonでデータの正規化](https://note.nkmk.me/python-list-ndarray-dataframe-normalize-standardize/)
4. [Pierian Training - Normalize Data Tutorial](https://pieriantraining.com/tutorial-how-to-normalize-data-in-python/)
5. [Codexa - Pythonでのデータ正規化方法](https://www.codexa.net/normalization-python/)

---

データの正規化は、モデルのパフォーマンスや訓練の安定性を向上させるために重要な処理です。特に、異なるスケールの特徴量を含むデータセットを扱う場合には、正しい正規化を適用することでモデルの精度を高めることが可能です。
Anacondaを使いこなそう！ よく使うコマンドとその活用術

Anacondaは、データサイエンスや機械学習で必須のPythonパッケージをまとめた、パワフルなプラットフォームです。

本記事では、Anacondaを使い始めるにあたって知っておきたい基本的なコマンドから、日々の作業を効率化する便利なコマンドまでご紹介します。

**1. 環境構築と管理**

- **conda create**: 新しい仮想環境を作成します。
    
    ```
    conda create -n <環境名> python=<バージョン>
    ```
    
    - 例： `conda create -n myenv python=3.8`
- **conda activate**: 作成した仮想環境をアクティブ化します。
    
    ```
    conda activate <環境名>
    ```
    
- **conda deactivate**: アクティブな仮想環境を非アクティブ化します。
- **conda env list**: 作成済みの仮想環境の一覧を表示します。(conda info -e でもできる)
- **conda env remove**: 不要になった仮想環境を削除します。
    
    ```
    conda env remove -n <環境名>
    ```
    

**2. パッケージ管理**

- **conda install**: パッケージをインストールします。
    
    ```
    conda install <パッケージ名>
    ```
    
    - 例： `conda install numpy pandas`
- **conda update**: パッケージを最新バージョンに更新します。
    
    ```
    conda update <パッケージ名>
    ```
    
    - 全てのパッケージを更新する場合： `conda update --all`
- **conda remove**: パッケージをアンインストールします。
    
    ```
    conda remove <パッケージ名>
    ```
    
- **conda search**: パッケージを検索します。
    
    ```bash
    conda search <キーワード>
    ```
    
- **conda list**: インストール済みのパッケージ一覧を表示します。

**3. その他便利なコマンド**

- **conda info**: Anacondaのバージョン情報などを表示します。
- **conda clean**: インストールキャッシュなどを削除し、ディスク容量を解放します。

**まとめ**

本記事では、Anacondaでよく使うコマンドをご紹介しました。これらのコマンドを駆使することで、Python環境の構築からデータ分析、機械学習の実行まで、スムーズに行うことができます。

Anacondaは非常に高機能なプラットフォームであり、ここで紹介したコマンドはほんの一部です。ぜひ公式サイトなども参考に、Anacondaの可能性を最大限に引き出してください。
外れ値が含まれるデータセットの扱い方

# 外れ値が含まれるデータセットの扱い方

データ分析において、外れ値（アウトライアー）の存在は、モデルの精度や信頼性に影響を与えることがあります。外れ値が分析結果に悪影響を及ぼす場合、その特定と処理が必要です。本記事では、外れ値の検出や処理方法について、Pythonでの実装例を交えながら説明します。

---

## 目次

1. [外れ値の検出方法](#外れ値の検出方法)
    - Zスコア法
    - IQR (四分位範囲) 法
2. [外れ値の処理方法](#外れ値の処理方法)
    - 削除
    - 変換
    - 補完
    - トリミング
3. [統計的手法の選択](#統計的手法の選択)
4. [データの性質の考慮](#データの性質の考慮)
5. [可視化による確認](#可視化による確認)
6. [統計的検定による客観的判定](#統計的検定による客観的判定)
7. [ドメイン知識の活用](#ドメイン知識の活用)
8. [外れ値に強いモデリング手法](#外れ値に強いモデリング手法)
9. [まとめ](#まとめ)
10. [参考文献](#参考文献)

---

## 1. 外れ値の検出方法

### Zスコア法

Zスコア法では、データポイントが平均からどれだけ離れているかを標準偏差単位で測定します。通常、絶対値が3以上のZスコアを持つデータポイントを外れ値とみなします。

**Pythonでの実装例**:

```python
import numpy as np

# サンプルデータ
data = [10, 12, 13, 12, 500, 15, 14]

# Zスコアを計算
mean = np.mean(data)
std_dev = np.std(data)
z_scores = [(x - mean) / std_dev for x in data]

# Zスコアが3以上のものを外れ値とする
outliers = [x for x, z in zip(data, z_scores) if abs(z) > 3]
print("外れ値 (Zスコア法):", outliers)
```

### IQR (四分位範囲) 法

IQR法では、データの第1四分位数（Q1）と第3四分位数（Q3）から1.5×IQR未満または1.5×IQR以上に位置するデータポイントを外れ値とみなします 。

**Pythonでの実装例**:

```python
import numpy as np

# サンプルデータ
data = [10, 12, 13, 12, 500, 15, 14]

# 四分位範囲を計算
Q1, Q3 = np.percentile(data, [25, 75])
IQR = Q3 - Q1
outliers = [x for x in data if x < Q1 - 1.5 * IQR or x > Q3 + 1.5 * IQR]
print("外れ値 (IQR法):", outliers)
```

---

## 2. 外れ値の処理方法

### a) 削除

外れ値を含むデータを削除する方法です。データの一部が失われるデメリットがあるため、サンプルサイズが小さい場合は慎重に行う必要があります 。

### b) 変換

外れ値の影響を軽減するために、対数変換やBox-Cox変換などの手法を適用する方法です 。

### c) 補完

外れ値を中央値や平均値などで置き換えることで、データの連続性を保持します 。

### d) トリミング

データの両端から一定の割合（例：5%や10%）を削除し、外れ値の影響を緩和する方法です 。

---

## 3. 統計的手法の選択

外れ値の影響を抑えるため、ロバストな統計手法を採用することが推奨されます。例えば、平均の代わりに中央値を使用したり、ピアソンの相関係数の代わりにスピアマンの順位相関係数を用いることが有効です 。

---

## 4. データの性質の考慮

外れ値が真の異常値（測定エラーなど）か、それとも重要な情報を含む極端な値なのかを慎重に判断する必要があります。データの文脈を理解することで、外れ値が持つ意味を適切に捉えることが可能です 。

---

## 5. 可視化による確認

箱ひげ図やヒストグラムを使ってデータの分布を視覚的に確認することが効果的です。これにより、外れ値がどこに存在するかを直感的に把握できます 。

---

## 6. 統計的検定による客観的判定

スミルノフ・グラブス検定などの統計的検定手法を用いることで、外れ値を客観的に判定できます。この方法は主観的な判断に頼らず、数値的な根拠に基づいて外れ値を判断するために役立ちます 。

---

## 7. ドメイン知識の活用

データに関する専門的な知識を活用することで、外れ値が重要な情報を含んでいるかどうかを判断できます。例えば、金融データでは急激な価格変動が重要なイベントを示していることがあるため、単純に外れ値として除外せずに慎重に考慮することが必要です 。

---

## 8. 外れ値に強いモデリング手法

外れ値の影響を受けにくいアルゴリズム（例：決定木ベースのモデル）を選択したり、アンサンブル手法を用いることで外れ値の影響を抑えることができます。例えば、ランダムフォレストやXGBoostなどの手法は、外れ値の影響が少ないモデルの構築に適しています 。

---

## 9. まとめ

外れ値の処理は、データの性質や分析目的に基づいて慎重に行うことが重要です。外れ値がモデルに及ぼす影響を正確に把握し、適切な検出・処理方法を選択することで、モデルの精度と信頼性を向上させることが可能です。

---

## 参考文献

1. [Sales Analytics - 外れ値の判断と処理方法](https://www.salesanalytics.co.jp/column/no00397/)
2. [Blog Since2020 - データ分析における外れ値処理](https://blog.since2020.jp/data_analysis/%E5%A4%96%E3%82%8C%E5%80%A4%E3%81%AE%E5%87%A6%E7%90%86%E6%96%B9%E6%B3%953%E9%81%B8%EF%BC%81/)
3. [Codexa - Pythonでの外れ値検出方法](https://www.codexa.net/python-outlier/)
4. [Note - Pythonを使った外れ値検出と処理](https://note.com/united_code/n/n7c49170b882f)
5. [Gochikika - 外れ値の処理と対策](https://gochikika.ntt.com/Preprocessing/outlier.html)

---

外れ値の存在を適切に把握し、適切な処理を行うことで、データ分析における信頼性とモデルの安定性が向上します。
Pythonによるデータ処理結果のグラフ表示方法

### Pythonによるデータ処理結果のグラフ表示方法

本記事では、Pythonを使用してデータ処理結果をグラフで視覚化する手順を説明します。グラフの種類やカスタマイズ方法についても触れ、データの可視化を簡単に行えるようになることを目指します。

---

### 目次

1. [はじめに](#はじめに)
2. [Pythonでのグラフ作成の準備](#pythonでのグラフ作成の準備)
3. [Matplotlibの基本的な使い方](#matplotlibの基本的な使い方)
   - 3.1. 折れ線グラフ
   - 3.2. 散布図
   - 3.3. 棒グラフ
   - 3.4. ヒストグラム
4. [グラフのカスタマイズ](#グラフのカスタマイズ)
5. [複数のデータセットの表示](#複数のデータセットの表示)
6. [グラフの表示と保存](#グラフの表示と保存)
7. [実装例: 処理結果の時系列データのグラフ化](#実装例-処理結果の時系列データのグラフ化)
8. [まとめ](#まとめ)
9. [参考文献](#参考文献)

---

### 1. はじめに
データの視覚化は、処理結果を理解しやすくするための重要な手法です。Pythonのライブラリ`Matplotlib`を使用すれば、データをグラフ化して可視化できます。ここでは、基本的なグラフ作成手順とカスタマイズの方法について説明します。

---

### 2. Pythonでのグラフ作成の準備

まず、`Matplotlib`ライブラリをインストールしてインポートします。

```python
import matplotlib.pyplot as plt
```

---

### 3. Matplotlibの基本的な使い方

#### 3.1 折れ線グラフ
折れ線グラフは、時系列データや連続したデータの変化を表す際に便利です。
```python
plt.plot(x, y)
```

#### 3.2 散布図
散布図は、2つの変数間の相関関係を確認する際に役立ちます。
```python
plt.scatter(x, y)
```

#### 3.3 棒グラフ
カテゴリごとの値の比較に適しています。
```python
plt.bar(x, y)
```

#### 3.4 ヒストグラム
データの分布を視覚化し、頻度を把握するのに適しています。
```python
plt.hist(data)
```

---

### 4. グラフのカスタマイズ

- タイトル: `plt.title('グラフタイトル')`
- x軸ラベル: `plt.xlabel('X軸ラベル')`
- y軸ラベル: `plt.ylabel('Y軸ラベル')`
- 凡例: `plt.legend()`

---

### 5. 複数のデータセットの表示

複数のデータセットを一つのグラフに表示することで、データの比較が簡単になります。
```python
plt.plot(x1, y1, label='データ1')
plt.plot(x2, y2, label='データ2')
plt.legend()
```

---

### 6. グラフの表示と保存

#### グラフの表示
```python
plt.show()
```

#### グラフの保存
```python
plt.savefig('graph.png')
```

---

### 7. 実装例: 処理結果の時系列データのグラフ化

次のコード例では、データ処理結果を折れ線グラフで表示し、タイトルや軸ラベル、マーカー、グリッドを設定します。

```python
import matplotlib.pyplot as plt

# データの例
time = [1, 2, 3, 4, 5]
values = [10, 15, 13, 18, 20]

plt.figure(figsize=(10, 6))
plt.plot(time, values, marker='o')
plt.title('処理結果の時系列変化', fontsize=20)
plt.xlabel('時間', fontsize=14)
plt.ylabel('値', fontsize=14)
plt.grid(True)
plt.show()
```

---

### 8. まとめ

Pythonの`Matplotlib`ライブラリを活用することで、さまざまな形式のグラフを簡単に作成し、データを視覚化することができます。データの性質や分析の目的に合わせて適切なグラフ形式を選択し、カスタマイズすることで、データの理解を深めることが可能です。

---

### 9. 参考文献

[1] https://ai-kenkyujo.com/programming/python/graph/  
[2] https://udemy.benesse.co.jp/data-science/data-analysis/python-graph.html  
[3] https://www.digitalocean.com/community/tutorials/graph-python  
[4] https://matplotlib.org/stable/gallery/index.html
TDDにおけるフィクスチャーとファクトリの理解　-デザインパターンとテスト駆動開発-

# TDDにおけるフィクスチャーとファクトリの理解-デザインパターンとテスト駆動開発-

スマートコントラクトの開発を行う中で、テストコードの書き方を学んでいるときに疑問があったので調べてみた。
ブロックチェーン開発の基本として、テスト駆動開発（TDD）を採用している。
フィクスチャーとファクトリは、どちらもテストや開発において重要な役割を果たしますが、それぞれ異なる目的と使用方法があります。

### ファクトリ（Factory）

**ファクトリ**は、オブジェクトのインスタンスを生成するためのデザインパターンです。スマートコントラクトの開発においては、特定のコントラクトのインスタンスを生成するために使用されます。ファクトリは、コントラクトのデプロイやインスタンス化を簡素化するために使用されます。

#### 主な特徴

- **インスタンス生成**: 特定のコントラクトのインスタンスを生成します。
- **デプロイ**: コントラクトをデプロイするためのメソッドを提供します。
- **再利用性**: 複数のインスタンスを生成するために再利用できます。

#### 例

以下のコードは、Hardhatを使用してコントラクトのファクトリを取得し、コントラクトをデプロイする例です。

```javascript
describe('Tokenコントラクト', () => {
  let Token;
  let hardhatToken;
  let owner;
  let addr1;
  let addr2;
  let addrs;

  beforeEach(async () => {
    // Tokenコントラクトのファクトリを取得
    Token = await ethers.getContractFactory('Token');
    // テスト用のアカウントを取得
    [owner, addr1, addr2, ...addrs] = await ethers.getSigners();
    // Tokenコントラクトをデプロイ
    hardhatToken = await Token.deploy();
  });

  it('正しいオーナーが設定されているべき', async () => {
    expect(await hardhatToken.owner()).to.equal(owner.address);
  });
});
```

### フィクスチャー（Fixture）

**フィクスチャー**は、テストを実行するために必要な初期設定や環境を準備するためのコードやデータのことを指します。フィクスチャーは、テストの一貫性を保ち、再現性のあるテスト環境を提供するために使用されます。

#### 主な特徴

- **初期設定**: テストを実行する前に必要な初期設定を行います。
- **一貫性**: 各テストケースが一貫した初期状態から開始されることを保証します。
- **再利用性**: 複数のテストケースで同じフィクスチャーを再利用できます。

#### 例

以下のコードは、Hardhat Toolboxを使用してフィクスチャーを定義し、テストで使用する例です。

```javascript
// Hardhat Toolboxを使用したテスト
describe('Hardhat Toolboxを使用したテスト', () => {
  // テスト用のフィクスチャーを定義
  async function deployTokenFixture() {
    // 複数のテスト用アカウントを取得
    const [owner, addr1, addr2] = await ethers.getSigners();
    // Tokenコントラクトをデプロイ
    const hardhatToken = await ethers.deployContract("Token");
    // テストに有用なフィクスチャーを返す
    return { hardhatToken, owner, addr1, addr2 };
  }

  it('トークンの総供給量が所有者に割り当てられていること', async function () {
    // フィクスチャーをデプロイ
    const { hardhatToken, owner } = await loadFixture(deployTokenFixture);
    // オーナーのトークン残高を取得
    const ownerBalance = await hardhatToken.balanceOf(owner.address);
    // トークンの総供給量がオーナーの残高と等しいことを確認
    expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);
  });
});
```

### まとめ

- **ファクトリ**:

  - オブジェクトのインスタンスを生成するためのデザインパターン。
  - コントラクトのデプロイやインスタンス化を簡素化するために使用される。
  - 例: `ethers.getContractFactory`メソッドを使用してコントラクトのファクトリを取得。
- **フィクスチャー**:

  - テストの初期設定や環境を準備するためのコードやデータ。
  - テストの一貫性と再現性を保証するために使用される。
  - 例: `loadFixture`メソッドを使用してフィクスチャーをデプロイ。

これにより、フィクスチャーとファクトリの違いが明確になり、それぞれの役割と使用方法が理解できると思います。
複数のグラフを重ねて描画する際に発生しがちなエラーとその解決方法

### 複数のグラフを重ねて描画する際に発生しがちなエラーとその解決方法

複数のデータセットを1つのグラフに重ねて表示する際、表示や設定で問題が発生することがよくあります。本記事では、複数グラフの描画でよく見られるエラーとその対処方法を紹介します。

---

### 目次

1. [グラフが重ならず別々に表示される問題](#グラフが重ならず別々に表示される問題)
2. [x軸のデータが正しく対応していない問題](#x軸のデータが正しく対応していない問題)
3. [凡例が表示されない問題](#凡例が表示されない問題)
4. [グラフのスケールが合わない問題](#グラフのスケールが合わない問題)
5. [ラベルが重なる問題](#ラベルが重なる問題)
6. [まとめ](#まとめ)
7. [参考文献](#参考文献)

---

### 1. グラフが重ならず別々に表示される問題

#### 問題
`plt.figure()`を複数回呼び出すと、各呼び出しで新しい図が作成され、グラフが同じ表示領域に重ならないことがあります。

#### 解決方法
1つの`plt.figure()`内で複数の`plot`関数を使用します。

```python
# 間違い
plt.figure()
plt.plot(x1, y1)
plt.figure()  # 新しい図を作成してしまう
plt.plot(x2, y2)

# 正しい方法
plt.figure()
plt.plot(x1, y1)
plt.plot(x2, y2)
```

---

### 2. x軸のデータが正しく対応していない問題

#### 問題
異なるデータセットをプロットする際に、`plt.plot(x, y1, y2)`と記述すると、y2がx軸データとして解釈されてしまうことがあります。

#### 解決方法
`x`軸のデータをそれぞれ指定してプロットします。

```python
# 間違い
plt.plot(x, y1, y2)

# 正しい方法
plt.plot(x, y1)
plt.plot(x, y2)
```

---

### 3. 凡例が表示されない問題

#### 問題
複数のデータセットを同じグラフに表示する際、凡例が表示されず、どのラインがどのデータを示しているのかが分からなくなることがあります。

#### 解決方法
`label`パラメータを各プロット関数に設定し、`plt.legend()`を使用して凡例を表示します。

```python
plt.plot(x, y1, label='データ1')
plt.plot(x, y2, label='データ2')
plt.legend()
```

---

### 4. グラフのスケールが合わない問題

#### 問題
y軸のスケールが異なる複数のデータを1つのグラフに表示すると、データの1つが見づらくなることがあります。

#### 解決方法
2つの異なるy軸を持つ二軸グラフを使用します。

```python
fig, ax1 = plt.subplots()
ax1.plot(x, y1, 'b-')
ax1.set_ylabel('Y1', color='b')

ax2 = ax1.twinx()
ax2.plot(x, y2, 'r-')
ax2.set_ylabel('Y2', color='r')
```

---

### 5. ラベルが重なる問題

#### 問題
x軸やy軸のラベルが重なり、視認性が低下することがあります。

#### 解決方法
軸ラベルを回転させる、または図のサイズを調整してラベルが重ならないようにします。

```python
plt.xticks(rotation=45)  # x軸ラベルを45度回転
plt.figure(figsize=(12, 6))  # 図のサイズを調整
```

---

### 6. まとめ

複数のグラフを重ねて描画する際には、各種の設定や関数の呼び出し順によってエラーが発生しやすいですが、今回紹介した方法で大部分の問題を解決できます。データの特徴に合わせて最適な方法を選択し、見やすいグラフを作成しましょう。

---

### 参考文献

[1] https://qiita.com/yamac131/items/ac63268680cf0cb603a7  
[2] https://blog.imanect.com/137-2/  
[3] https://magazine.techacademy.jp/magazine/39544  
[4] https://natsutan.hatenablog.com/entry/20110713/1310513258  
[5] https://how2matplotlib.com/matplotlib-bar-chart-labels-overlap.html
複数のグラフを重ねて描画する際の色と線の種類を管理する方法

### 複数のグラフを重ねて描画する際の色と線の種類を管理する方法

複数のデータセットを1つのプロットに描画する際、色や線のスタイルを調整して視覚的に区別しやすくすることが重要です。ここでは、Matplotlibを使用して色や線の種類を指定・管理するいくつかの方法について説明します。

---

### 目次
1. [色の指定方法](#1-色の指定方法)
2. [線のスタイル指定方法](#2-線のスタイル指定方法)
3. [カラーサイクルの設定](#3-カラーサイクルの設定)
4. [プロットごとの手動設定](#4-プロットごとの手動設定)
5. [カラーマップの使用](#5-カラーマップの使用)
6. [まとめ](#まとめ)
7. [参考文献](#参考文献)

---

### 1. 色の指定方法

色の指定には複数の方法があります。以下の例では、異なる形式で色を指定しています。

- **名前付き色**: `'red'`, `'blue'`, `'green'` など
- **16進数カラーコード**: `'#FF0000'`, `'#0000FF'` など
- **RGB値**: `(1, 0, 0)`（赤）, `(0, 0, 1)`（青）

```python
plt.plot(x, y1, color='red')
plt.plot(x, y2, color='#0000FF')
plt.plot(x, y3, color=(0, 1, 0))
```

---

### 2. 線のスタイル指定方法

線のスタイルも指定でき、視覚的にグラフの区別がしやすくなります。

- **実線**: `'-'`
- **破線**: `'--'`
- **点線**: `':'`
- **一点鎖線**: `'-.'`

```python
plt.plot(x, y1, linestyle='-')
plt.plot(x, y2, linestyle='--')
plt.plot(x, y3, linestyle=':')
```

---

### 3. カラーサイクルの設定

複数のプロットがある場合、カラーサイクルを設定することで、自動的に異なる色が割り当てられます。

```python
import matplotlib.pyplot as plt
from cycler import cycler

colors = ['red', 'blue', 'green', 'purple']
plt.rc('axes', prop_cycle=(cycler('color', colors)))

# プロット例
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.show()
```

---

### 4. プロットごとの手動設定

各プロットに対して色や線のスタイルを指定する方法です。`label`を指定すると凡例にも自動で適用されます。

```python
plt.plot(x, y1, color='red', linestyle='-', label='Line 1')
plt.plot(x, y2, color='blue', linestyle='--', label='Line 2')
plt.plot(x, y3, color='green', linestyle='-.', label='Line 3')
plt.legend()
plt.show()
```

---

### 5. カラーマップの使用

カラーマップを使用すると、多数のデータセットを色分けする際に便利です。

```python
import numpy as np
import matplotlib.pyplot as plt

num_lines = 5
x = np.linspace(0, 10, 100)
y = [np.sin(x + i) for i in range(num_lines)]
cm = plt.get_cmap('viridis')  # カラーマップの選択

for i in range(num_lines):
    plt.plot(x, y[i], color=cm(i / num_lines), label=f'Line {i+1}')

plt.legend()
plt.show()
```

---

### 6. まとめ

これらの手法を活用することで、複数のグラフを1つの図に効果的に描画し、視覚的な区別をつけることができます。各データの内容や視認性に応じて、最適な色と線のスタイルを選択してください。

---

### 参考文献
[1] [How to Change Line Color in Matplotlib](https://how2matplotlib.com/matplotlib-line-colors.html)  
[2] [Multiple Lines in Matplotlib](https://www.geeksforgeeks.org/plot-multiple-lines-in-matplotlib/)  
[3] [Matplotlib Legend Guide](https://qiita.com/yamac131/items/ac63268680cf0cb603a7)  
[4] [Python Plotting with Matplotlib](https://ai-kenkyujo.com/programming/python/graph/)
Pandasのilocメソッド：基本概念と使用方法

# Pandasの`iloc`メソッド：基本概念と使用方法

Pandasの`iloc`メソッドは、データフレーム内のデータを位置ベースで抽出するための重要なツールです。以下では、その基本的な概念と使用方法について解説します。

---

## 目次
1. [ilocの基本概念](#ilocの基本概念)
2. [ilocの基本的な使用方法](#ilocの基本的な使用方法)
   - [単一の行または列の選択](#単一の行または列の選択)
   - [複数の行または列の選択](#複数の行または列の選択)
   - [範囲指定による選択](#範囲指定による選択)
3. [ilocの特徴と注意点](#ilocの特徴と注意点)
4. [使用例](#使用例)
5. [参考文献](#参考文献)

---

## ilocの基本概念

`iloc`は「integer location」の略で、整数ベースのインデックスを使用してPandasのデータフレーム内の行や列を選択するためのメソッドです。このメソッドは、データフレームの各要素に位置ベースでアクセスできるため、ラベルではなく数値インデックスを使って行や列を指定します  。

### 主な特徴
- **位置ベースの選択**: 0から始まる整数インデックスで行と列を選択します。
- **データフレーム操作が容易**: 数値インデックスを使用することで、データフレームの特定の位置に簡単にアクセスできます。

---

## ilocの基本的な使用方法

### 単一の行または列の選択

単一の行または列を選択するためには、行または列のインデックスを指定します。

```python
# 2行目を選択
row = df.iloc[1]

# 1列目を選択
column = df.iloc[:, 0]
```

### 複数の行または列の選択

複数の行や列を選択する際は、インデックスのリストを指定します。

```python
# 2行目と4行目を選択
rows = df.iloc[[1, 3]]

# 1列目と3列目を選択
columns = df.iloc[:, [0, 2]]
```

### 範囲指定による選択

`iloc`ではスライスを使って範囲を指定することができ、特定の範囲内の行または列を抽出できます 。

```python
# 0行目から3行目まで選択（3行目は含まない）
rows_range = df.iloc[0:3]

# 全ての行の、0列目から2列目まで選択
columns_range = df.iloc[:, 0:2]
```

---

## ilocの特徴と注意点

1. **整数インデックスのみ**: `iloc`は整数インデックスのみを受け付け、ラベルは使えません  。

2. **0ベースのインデックス**: Pythonの慣例に従い、最初の要素のインデックスは0から始まります 。

3. **範囲指定時の終了インデックスの扱い**: 範囲を指定した際、終了インデックスは結果に含まれません 。

4. **単一値と複数値の返り値の違い**:
   - 単一の行や列を選択した場合は`Series`オブジェクトが返され、複数行や複数列を選択すると`DataFrame`が返されます 。

5. **ラベルベースの選択との違い**: `iloc`は位置ベースの選択を行いますが、`loc`メソッドはラベルベースの選択を行います。このため、インデックスラベルを用いる場合は`loc`が適しています  。

---

## 使用例

以下は、`iloc`を使用してデータフレームの特定の位置にあるデータを抽出する例です。

```python
import pandas as pd

data = {'Name': ['John', 'Jane', 'Alice', 'Bob'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}
df = pd.DataFrame(data)

# 2行目を選択
print(df.iloc[1])

# 1列目と3列目を選択
print(df.iloc[:, [0, 2]])

# 0行目から2行目まで、全ての列を選択
print(df.iloc[0:2, :])
```

このコードは、`iloc`を使って行や列を選択し、データを抽出する基本的な方法を示しています。

---

## 参考文献

[1] "Pandas iloc[] method in Python," Shanelynn, available at https://www.shanelynn.ie/pandas-iloc-loc-select-rows-and-columns-dataframe/  
[2] "pandas DataFrame iloc Property," W3Schools, available at https://www.w3schools.com/python/pandas/ref_df_iloc.asp  
[3] "Python Pandas iloc() function," FavTutor, available at https://favtutor.com/articles/pandas-iloc/  
[4] "Python | Extracting rows using Pandas iloc[]," Geeks for Geeks, available at https://www.geeksforgeeks.org/python-extracting-rows-using-pandas-iloc/  
[5] "Pandas iloc Usage with Examples," Spark by Examples, available at https://sparkbyexamples.com/pandas/pandas-iloc-usage-with-examples/  

各特徴や注意点についての説明は、ShanelynnやGeeks for Geeks、W3Schoolsの記事を参考にし、具体的なコード例や概念説明を基にしました   。特に、位置ベースの選択とラベルベースの選択の違いについてはSpark by Examplesの記事を参照しています 。