カテゴリー: Uncategorized

  • 家庭用3Dプリンターの最強機種 Creality 3D Sermoon D1

    家庭用3Dプリンターの最強機種 Creality 3D Sermoon D1

    家庭用3Dプリンターとして、個人的にはこれに勝る機種はないのではないかと思えるような機種です。

    コスパ、実用性、デザイン全てにおいて素晴らしい機種です。
    デメリットもありますが、それでも価格を考えるとこれ以上ないのではん?と思えます。

    Creality 3D Sermoon D1

    Sermoon D1の特徴

    低価格帯の家庭用では珍しく、完全密閉型の3Dプリンターであり、造形物を作るときに熱が逃げにくく綺麗に造形ができやすいという特徴があります。

    そしてアルミ合金製のフレームと透明な側板によってできているため、制作の様子が全方向から確認することができます。

    造形サイズは280 x 260 x 310 mmと非常に大きく、大型のものを印刷する上で非常に便利です。

    PLA, ABSにはもちろん問題なく対応しています。

    操作はタッチスクリーンで非常に操作しやすいです。

    Sermoon D1のスペック(販売ページより)

    買って、使ってみて

    まず買ってみて驚くのはそのサイズ。
    箱が届いて部屋に入れようとしたら、扉ギリギリぐらいのサイズ。

    実際に家に届いたときに外箱が玄関の扉を通らないということがあるようです。

    本体サイズは外箱より小さいので、中身を取り出せば入れることはできますが、それでもやはりサイズは圧巻です。

    本体サイズは50o x 500 x 531 mmあるようで、部屋に置くにはそれなりにスペースが必要になります。

    これも密閉式であるというのがやはり関係しており、造形サイズは280 x 260 x 310 mmであるが、それの二倍近く横幅があります。

    届いてからの組み立ては非常に簡単で二つの部品を取り付けるだけでした。

    この機種の最大の特徴は静音性にあると思います。
    ファンが100%動いていても非常に静かです。

    真隣で夜眠ることは流石にできませんが、昼寝程度であれば全然問題なくできますし、隣で電話していても3Dプリンターの音はほとんど聞こえないようです。

    ラフトをつけて印刷しても、ラフトは簡単にはずれます。

    ラフトをつけなくても、造形物によっては問題なく非常に綺麗に作成することができます。

    印刷中はステージがあったかくなっているため造形物は接着していますが、印刷が終わるとステージが覚めるため、簡単に造形物を取り出せます。
    ステージの素材がなんか不思議な素材で、印刷後にステージから簡単に外れるのは非常に楽しいです。

    おすすめ設定

    初期設定でも十分に綺麗に印刷できますが、より綺麗に印刷するために自分なりに設定を詰めて、いい感じになったのもを紹介します。

    https://drive.google.com/file/d/1ZBnrYzihwzA0iWwKvfA8w2feE9WD4-Wn/view?usp=sharing

    creality slicerの設定です。
    基本的には、infill(どれぐらい中身を詰めるか)を好きなように決めます。
    僕は15%です。

    フィラメントを引き戻すときの速度であるretraction speed(引き戻し速度)を遅くして、印刷スピードを遅くします。
    ヘッドの移動速度は制作物がきちんとできる程度の速さまで上げました。

    どの項目が、どのような値なのかを知ることである程度自分自身でカスタムすることができます。

    今回のご紹介は一例であることと、僕が他の人のおすすめ設定をやったときにあまりうまくいかなかったように、自分の環境に合った設定を見つける参考程度にしてみてください。

    デメリット

    やはり家庭用ということもあり、デメリットはいくつかあります。

    ・オートレベリングが付いていないため、初心者にとって最初感覚を掴むのは難しい

    ・フィラメントが変えるのが難しい(これって全部?)

    ・レビューが少なく、設定をいじろうとしたときに参考にできるようなものがあまりなかった

    ・SDカードにデータを入れなければならないので、Wi-Fiでデータを送るとかそういったことはできない。

    家庭用機種の中では非常に使いやすく、初心者にも上級者にもお勧めできる機種です。
    もし3Dプリンター欲しいと思っているかたはぜひ購入してみてください。

  • 工事不要のタンク式食洗機[MOOSOO MX-10]のレビュー

    工事不要のタンク式食洗機[MOOSOO MX-10]のレビュー

    一人暮らしで食器って無限に溜まっていくし、結構洗うのめんどくさかったりしますよね。
    自炊をしようとしても、洗い物がめんどくさいからモチベが上がらす結局重い腰が上がらずと言いますよね。

    僕自身は自炊頑張ろうって一人暮らし始めて思って、そのモチベとして食洗機を買いました!!
    色々悩んだ結果、このMOOSOOのMX-10を選びました。

    この記事では、なぜこの食洗機なのか、そしてよく似ているMAXZEN[マクスゼン] JDW03BS01になぜしなかったのかを書いていきたいと思います。

    なぜMOOSOO?

    まず、自宅で食洗機を買うにあたって、工事不要のタンク式にするか、通常の食洗機にするかを考えます。
    僕の場合は賃貸で、工事めんどくさいなってことで工事不要のタンク式にしました。

    タンク式ではコンセントを繋いで、水をタンクに入れ、洗剤を入れるだけで皿を洗うことができます。
    届いた当日から使えるので、非常に便利で、移動も楽々することができます。

    タンク式を選ぶにあたって、最近は安価なモデルから高価なモデルまでたくさん出ています。
    そこで置き場所を考えます。

    僕は今回置き場所は冷蔵庫の上で、結構高い位置になります。
    一人暮らしでスペースのない家にとって、食洗機を置けるような場所(ある程度の広さがあって、流しが近い場所)は冷蔵庫の上が非常に多いのではないでしょうか

    写真には大きさがわかるようにクレラップを立ててます。
    意外に大きい!!


    タンクに水を入れるときに、なるべく水を入れるところは低い位置で入れやすいところがいいって考えると給水口が下にあるのがいいですよね。

    ただ、多くのタンク式の食洗機のモデルは上に水を入れる口があって、高い位置に置くと水を入れにくいというデメリットがあります。
    給水口が下側前面にあるタンク式の食洗機は現状調べてみたところ、パナソニックのNP-TSP1-W、MAXZENのJDW03BS01、MOOSOOのMX-10でした。
    ちなみに、洗浄力に関しては評価見てもよっぽどのことがない限り、基本は落ちます。

    この三つのモデルの中でパナソニックにしたいのは山々なのですが、値段が・・・。
    ってことで、下の二つのモデルになりました。
    両方とも3万円以内ぐらいで買えるので、結構良さそう。(耐久性が不安だけど)

    MAXZENとMOOSOOの違いは?

    二つのモデルは見た目も非常に似てて、洗浄モードも非常に似ているので、何が違うんだって思うと思います。
    大きな違いは乾燥機能にあります

    MAXZENでは送風乾燥であるのに対して、MOOSOOでは温風送風乾燥となります。
    MOOSOOだと洗い終わって乾燥が終わるとそのまま食器棚に戻すことができます。(MAXZENは使ったことないのでどこまで乾くかはわかりませんが)

    洗い終わったら食洗機の蓋を開けておけば良いことなのですが、MOOSOOだと温風乾燥がついているのですぐに乾いて、食器の数が比較的少なくて済みます。

    値段的にはMAXZENの方が少し安いので、乾燥機能がそこまで必要ないって人はMAXZENで十分だと思います。(洗いに関してはほとんど変わらないようなので)

    MOOSOOの方は楽天、アマゾンともによくクーポンを配っているので、結構お値打ち価格で購入することができるので、そうなるとMAXZENとそこまで変わらないかもしれないですね。

    使い方


    まず初めに、排水ホースと下のポンプから水を吸い上げるアダプター(吸水ホース)を裏側につけます。
    先につけてから置き場所に置くことをお勧めします。

    給水ホースは分岐水栓を使うときに使います。
    使うと、タンクに水を入れなくてもよくなりますが、ホースがごちゃるのでおすすめはしません。

    そして、排水ホースを流しにいい感じになるように起きます。
    排水ホースをクリップする吸盤つきのクリップがひとつついているので、それで固定しましょう。
    僕は一回、排水ホースが暴れて部屋がすごいことになりました。

    あとはコンセントを入れて、使うだけ。
    1回目は庫内成功のため、空で洗浄します。

    以上で使用できるようになるので、非常に簡単です。

    排水ホースは1.5mぐらいあるので、冷蔵庫ぐらいの高さから、多少流しまでスペースがあっても十分つなげることができます。

    洗った乾燥としては、カレーとかの結構めんどくさい汚れのついたお皿も非常に綺麗に洗うことができ、ぬめりとかもなく、非常に満足しています。

    まとめ

    個人的に一人暮らしの始めこそ、自炊を頑張るのであればぜひ食洗機は買った方がいいです。
    安いモデルもたくさんあるので、ちょっと頑張れば非常に便利な暮らしが待ってます。

    今後、耐久度とかに関しても追記していきます。

    リンク


    AmazonでMOOSOO MX-10に非常に似たVIBMIの食洗機が出ていますが、情報があまりないため今回は取り上げません。
    Amazonの表記では機能は本当に全く同じだけど、怪しいし、個人的にはお勧めしないかな・・・。

  • labelImgのインストール方法[2022年12月更新]

    labelImgのインストール方法[2022年12月更新]

    物体クラスタリングを行う上で、元々ある学習モデルだけでなく、自分が作った学習モデルも使いたくなる時があると思います。

    物体クラスタリングで有名なツールとして、YOLOがありますが、その学習データーを作る際に、labelImg(大文字でLABELIMG)は非常に有用なツールとなります。

    そのlabelImgのインストール方法についてご紹介します。

    環境

    OS : Windows 10 (macOS Montereyでもできました)
    Python :3.9.7 (3.6以降)

    インストール方法

    Anacondaを用いて、仮想環境を作り、そこでインストールする方法をおすすめします。
    それによって、他の環境に影響を与えることなく、インストールすることができます。

    仮想環境の名前はわかれば良いので、なんでも良いのですが、今回は”labelimg_env”にします。
    以下のコマンドをAnaconda promptで実行しましょう。

    conda create -n labelimg_env python=3.9

    今回はpython3.9でインストールしていますが、3.6以降であれば特に問題はないかと思います。

    次に、pipとsetuptoolsの更新をおこなっておきましょう。
    これを行うことによって、謎のエラーを防げます(多分)。

    python -m pip install --upgrade pip setuptools

    そして、labelImgをインストールします。

    pip install labelImg

    インストールされたか確認は以下のコマンドで確認できます。

    pip list

    この中に、labelImgがあれば成功です。

    起動

    まず、仮想環境に入ります。

    conda activate labelimg_env

    labelImgを起動します。

    labelImg

    別のウィンドウで画面がひらけばOKです!!

    あとがき

    LabelImgはPyQt5によって、GUIが作られています。
    pythonのバージョンが3.6以降がいいのは、PyQt5のバージョンでPython 3.6以降を必須としているからです(現状)。

    基本的には最新バージョンで問題ないかと思います。

  • Kindle(無印)って実際どうなの?

    Kindle(無印)って実際どうなの?

    夜本読みたいなと思って、Amazonブラックフライデーもあるし、Kindleを購入しようと思いました。

    ただ、Kindleには4つぐらいバリエーションがあります。

    前まで数年前のKindle paper whiteを使っており、画面の質感がずっと見てても目が疲れなくて非常によかったのでそれを選ぼうかと思いましたが、Kindleも結構いいという評価を見て、使い倒すだけだし、夜読むだけだから安いやつでいいかという気持ちでKindleを選びました。

    ブラックフライデーで約9000円から約5000円への値引きをしています。
    そして、Kindle端末を買うと、月額980円のKindle unlimitedが3ヶ月分無料なので、実質2000円ぐらいで端末を買ったことになります。
    安い!!!!

    実際のKindleがこちら

    箱が届いてまず思ったのは、めっちゃ薄いということです。

    箱の中身はシンプルで、充電コードと本体、説明書です。
    充電コードはmicro-usbなので、type-Cが普及している今としてはちょっと不便ですが、でも充電は一週間に一回ぐらいでいいので、全然マイナスポイントではありませんね。

    画面はkindle paperwhiteと違って、フロントライトで、スペック上解像度は劣りますが、それは比べてみた時にわかることであり、実際には本を読むには十分すぎる画質です。

    また、反射はかなり抑えられているし、夜読んでも画面は目が疲れず、思っていた以上によかったというのが第一印象でした。

    昔のKindle paperwhiteの一番嫌だったところは動作が非常に重く、本を調べたり、めくったりするのも結構ストレスでしたが、今回のKindleはそれよりは結構動作速度は上がっていて、ちょっと前のスマホ使っている気分ぐらいでした。

    値段差を考えても、他の機種がこれの二倍以上お金を払って買う価値があるのかどうかは結構人によるかと思いますが、Kindle無印もコスパとしては非常に良く、普段使いできる機種でした。

    また、値段が安いからとことん使い倒せるし、非常にいい買い物をしたなと思います。

    ぜひみなさんもkattemitekudasai.

  • PWM出力を使ってパルス波の周波数, Duty比を変更する [Arduino UNO]

    PWM出力を使ってパルス波の周波数, Duty比を変更する [Arduino UNO]

    PWM出力とは

    PWMとはpulse width modulationの略で、パルス幅変調と日本語では言います。
    波長のデューティー比(Duty cycle)を変えることによって、変調を行う方法です。

    詳しくは前回の記事で説明されています。

    ArduinoのPWM出力

    Arduino UNOではATmega328と呼ばれるMicrochip社のマイコンをメインチップとして使っています。
    Arduinoのプログラムを考える上で、深みにハマっていくとマイコンのデータシートを見ていかなければならなくなりますので、一回見てみると面白いかと思います。(事実今がそう)

    Arduinoには三つのタイマー(Timer/Counter)があります。
    このタイマーはArduinoプログラムの時間に関係しています。
    delay()やtone()などの関数はこのタイマーを使って計測されています。

    Timer/CounterPin番号ビット数役割PWM周波数
    Timer05, 68 bitArduinoの時間を管理
    delay(), millis(), micros()など
    977 Hz
    Timer19, 1016 bitServoライブラリなど490 Hz
    TImer23, 118 bittone()など490 Hz

    今回このタイマーをいじることでPWMの出力を変えるということをします。
    ちなみに、応用するとタイマーの根本を変えるので、delay()などの関数もいい感じに変えたりすることができたりするかも?(どちらかというと影響を受けて狂ったりすることの方が多そう)

    TImer0は基本的にシステム全体に関わることが多いので、TImer1を使用することをお勧めします。

    参考になるサイト集
    https://playground.arduino.cc/Main/TimerPWMCheatsheet/
    https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
    https://atooshi-note.com/arduino-1hz-pwm/
    http://blog.kts.jp.net/arduino-pwm-change-freq/
    http://garretlab.web.fc2.com/arduino/inside/hardware/arduino/avr/cores/arduino/wiring_analog.c/analogWrite.html

    プログラムの概要

     プログラムの全体の方針として、Arduinoのタイマーをレジスタの設定を変えることで自由にPWM出力の周波数を変更することができるようにします。

    目的としては、低い周波数を出力できるようにしたく、10 Hzを出力できるようなプログラムにします。

    今回は10番ピンにLEDを繋いで、その光の周波数、Duty比を自由に変更できるようにするプログラムを作成します。
    10番ピンなので、TImer1を使用します。

    プログラムコード

    //レジスタの設定を変えるためのもの
    #include <avr/io.h>
    int PWMPin = 10;
    
    //関数の定義
    //frq:周波数 (1Hz~指定できる)
    //duty:指定したいduty比
    void HzWrite(int frq, float duty) { 
    
        // モード指定
      TCCR1A = 0b00100001;
      TCCR1B = 0b00010100; //分周比256を用いる
    
      // TOP値指定
      OCR1A = (unsigned int)(31250 / frq);
    
      // Duty比指定
      OCR1B = (unsigned int)(31250 / frq * duty);
    }
    
    
    void setup() {
      pinMode(PWMPin, OUTPUT);
    }
    
    void loop() {
      HzWrite(10, 0.5);
      delay(5000);
      digitalWrite(PWMPin, LOW);
      delay(5000);
    
    }

    プログラムの説明

    まず、レジスタの設定を変えるために、<avr/io.h>をインクルードします。

    #include <avr/io.h>

    次に、delay()と一緒に使って、10 Hzの出力を5秒ごとに繰り返すという関数を作るため、HzWriteという関数を指定します。カッコ内には周波数、Duty比を指定できるようにします。

    void HzWrite(int frq, float duty) { 
    
    }

    次にモードの指定です、。
    今回使うレジスタはTCCR1A/TCCR1Bです。(TCCR: Timer/Counter Control Register)
    ここで1というのはTImer1を示しており、Timer2を使いたければTCCR2A/TCCR2Bを使います。

    PWM周波数を〇〇Hzとして設定するには、TOP値を自分で指定する必要があります。
    TOP値が大きければ大きいほど出力される周波数は低くなります。
    今回は10 Hzで例を取っているので、16MHzというシステムクロックと比べると非常に遅いので、大きなTOP値と分周を指定する必要がある。よって、なるべく大きいTimer1を使用します。


    Timer0, 2の8 bitではTOP値の最大値は255(2^8 – 1)であり、Timer1の16 bitでは65535(2^16 – 1)となる
    (最大値が-1となるのは、0~255もしくは0~65535となるため、数字の数が2^xになるが、最大値は-1しなければならない。)

    システム的には、TOP値までカウンタをインクリメント(0, 1, 2, と数えていく)し、OCRxA/OCRxB(xはカウンタ番号、カウンタについて2つの出力ピンA, Bが割り当てられている。)と一致した時にピンの出力を変化させる(LOW→HIGHのように)。そして、カウンタがTOP値まで到達すると今度は0までデクリメント(65535, 65534, 65533と上から数えていく)し、インクリメントの時と同様にOCRxA/OCRxBと一致した時にピンの出力を変化させます。

    Arduino UNOではこのカウンタのインクリメントするスピードは分周比の設定を変えることによって、ある程度変えることができます。(ある程度とは、1/8/64/256/1024 の中から選択できるということ)
    分周比は周波数を分周(周波数を1/n倍すること)するときの比(n)です。
    つまり、1000 Hzを分周比10で分周すると100 Hzになります。

    ちなみに、分周比1ではArduino UNO(ATmega328)のシステム動作クロックである16MHzで操作します。

    つまり、TOP値とOCRxA/OCRxBの値、分周比を変えることによって、自由に出力の変換点を変えることができます。

    今回は10Hzを指定したいので余裕を持って分周比256で行います。
    1カウントする時間は、Unoなら16MHzなので1 / 16MHz = 62.5ns(分周1)
    分周比を256にすると、TOPまでカウントした際には62.5ns x 256 x 65535 = 1.04856 secなので、1 Hzを指定できるようになる。

    今回このプログラムでは1 Hz ~ 31250 Hzまでの周波数を作り出すことができる。
    しかし、31250に近づくにつれてDuty比の指定ができなくなっていきます。
    Duty比を細かく設定したい際には300 Hz程度までしか作成することができません。

    このプログラムでは分周比の設定を変更することで、自分の使用用途にあった周波数帯を作れるようなプログラムを作ることができます。

    TCCRaA/TCCR1Bには何を指定するのかを書きます。
    ここら辺の細かいところはなんか難しいので、データシートを使って、なんとなく指定していきましょう。

    今回は2進数で示しているので、最初に0bがついています。TCCR1AではCOM1A1, COM1A0, COM1B, 無指定, 無指定, WGM11, WGM10 を 1 か 0 で設定します。
    TCCR1B には それぞれ、無指定(ICNC1), 無指定(ICES1), 無指定, WGM13, WGM12, CS12, CS11, CS10 を設定します。

    TCCR1Aの指定(ATmega328データシートより)
    TCCR1Bの指定(ATmega328データシートより)

    まず、今回はModeはPWMモードがPhase Correct and Frequency Correct であるMode9を指定する。
    今回TOP値OCR1Aに指定する。

    モードの指定(ATmega328データシートより)

    よって、WGM13 / WGM12 / WGM11 / WGM10 はそれぞれ、1,0,0,1 

    出力の指定(ATmega328データシートより)

    COM1B0 / COM1B0 は 0, 0 が 無出力、0, 1 が トグル動作 (一致時の出力を反転)、
    1, 0 は カウンタ がOCR1A/B – TOP間 にある場合 LOW、0 – OCR1A/B間 は HIGH となるよう出力、
    1, 1 は1, 0 の逆です。

    今回は周波数をOUTPUTのLEDをLOWとHIGHで変えるため、1B0 / COM1B0 は1, 0の値を指定します。

    スケッチを書く際にわかりやすいので 1, 0 を選択します。

    分周比の指定(ATmega328データシートより)

    今回分周比は256を指定するため、CS12/CS11/CS10は1, 0, 0を指定する。

    まとめると、以下のようになる。

    TCCR1A = 0b00100001;
    TCCR1B = 0b00010010;

    次にOCR1AとOCR1Bを設定し、周波数とDuty比を指定したもので出力してもらうように指定します。

      // TOP値指定
      OCR1A = (unsigned int)(31250 / frq);
    
      // Duty比指定
      OCR1B = (unsigned int)(31250 / frq * duty);

    今回Phase and Frequency Correct PWMを用いる際には、インクリメントしディクリメントすることから、出力される周波数は以下のように示すことができます。

    周波数frq = IC の動作周波数 / (分周比 * TOP値 * 2)

    逆にTOP値を指定するときは

    TOP値 = IC の動作周波数 / (分周比 x frq x 2)

    今回Arduino UNOで分周比256とした際には

    TOP値 = OCR1A = 16,000,000 / (256 x frq x 2) = 31250 / frq

    LOWとHIGHが入れ替わるタイミングはOCR1A/OCR1B = Duty比としたいため、

    OCR1B = 31250 / frq x duty

    オーバーフローを防ぐため、Unsigned intを指定している。

    出力のメインはこちら

    void setup() {
      pinMode(PWMPin, OUTPUT);
    }
    
    void loop() {
      HzWrite(10, 0.5);
      delay(5000);
      digitalWrite(PWMPin, LOW);
      delay(5000);
    
    }

    PWMPinつまり10ピンをOUTPUTで指定し、HzWrite()で周波数とDuty比を指定する。
    delay()でまった後に、digitalWrite(PWMPin, LOW)で出力をなくし、delay()する。

    以上がプログラムの全貌と解説です。

    後書き

    PWM出力の周波数を変更する方法のブログに関して、Arduinoで検索するよりも、AVRとか、ATmega328, 328Pなどのように検索した方が多く出てきました。

    今回はざっくりとしたブログでしたが、より深く知りたい人は調べてみてください。

  • データフレームにおける特定の値の抜き出し[Python]

    データフレームにおける特定の値の抜き出し[Python]

    Pythonのデータフレームに関して、ある特定の値を抜き出すことは意外にも難しいです。
    それは、Pythonのデータフレームはデータフレームの形式で扱うことが前提であり、ある行を抜き出したり、切り取ったり、追加したりは非常に簡単に行うことができます。

    ただ、値を抜き出そうとする時にはなぜか値として抜き出せず、データフレームの形のままだったり、問題がいろいろ発生します。

    ここでは、ある特定の条件を満たすデータフレームの値を抜き出す方法を記載します。
    他に多分いい方法とかあるのかもしれませんが、今現状僕の状態ではこれが限界です。

    まず、状況として、以下のデータフレームがあったときに、赤枠で囲った20の値を抜き出そうとします。

    ここで問題になるのは、上記のような単純なデータフレームであればインデックスがわかり、一発で抜き出すことができますが、大量のデータであったときにインデックス番号を確認してそれを使うことは非常に難しいです。

    大量にデータがあったときに、キーとなる列(顧客番号、idなど)を手がかりにデータを抜き出すことが効率的です。
    そこで、下のような状況で抜き出そうとします。

    つまり、Aの列でAichiの行のBの値を抜き出したいとします。
    その時には一度で抜き出すことはできず、二段階踏んで値を抜き出します。

    まず、上記と同様のデータフレームを作成します。

    import pandas as pd
    df = pd.DataFrame({ 'A' : ["Tokyo", "Aichi", "Osaka"],
                        'B' : [10, 20, 30],
                        'C' : [100, 200, 300]})
    df

    次に、Aの列のAichiの行を抜き出します。

    a = df[df["A"] == "Aichi"]
    
    print(a)

    そうすることで、Aichiを含む行を抜き出すことができました。
    最後に、この行のBの列の値を抜き出します。

    b = a.at[a.index[0], "B"]
    
    print(b)

    このようにすることで、抜き出すことができます。
    回りくどいですが、これが僕が現在使っている方法です。

    他に方法があればコメント等で教えていただけると幸いです。

    import pandas as pd
    df = pd.DataFrame({ 'A' : ["Tokyo", "Aichi", "Osaka"],
                        'B' : [10, 20, 30],
                        'C' : [100, 200, 300]})
    
    a = df[df["A"] == "Aichi"]
    b = a.at[a.index[0], "B"]
    print(b)

    上記のプログラムのまとめです。

  • Pythonの例外処理を行うtry, except

    Pythonの例外処理を行うtry, except

    pythonでのプログラムの時に、エラーが起こることがあります。
    エラーはプログラムが正常に組み立てられていないことを示してくれるいいやつなのですが、
    時に、エラーのせいでプログラムが動かなくなってしまう時があります。

    構文的には正しいのに、実行時にエラーが出ることがあります。
    構文が文法的に正しくない時に出るエラーを構文エラー
    文法的に正しいのに、論理的に間違っているエラーを例外と言います。

    例外の例として、
    TypeError:演算する者同士の方が異なっている
    EX. word/2 , 4*number

    ZeroDivisionError:0で割ってしまっている
    EX. 3/0

    ValueError:型は合っているが、値が適切でない
    EX. int(“string”)

    条件分岐をすることによって、エラーを未然に防ぎ、論理的に正いプログラムを作成することも可能ですが、エラーが怒った時には例外処理を行うという処理を行うという選択肢を取ることもできます。

    その時に使用するのがtry, exceptです。

    try: 
        実行したい処理(例外を含むかもしれない)
    except エラー名:
        例外発生時に行う処理

    といったように使います。
    例として、

    try:
        print(10 / 0)
    except ZeroDivisionError:
        print('できませんでした')
    #出力
    できませんでした

    となります。
    ただ、exceptで捉えることができるエラーは指定されたエラーのみ
    (今回のプログラムではZeroDivisionErrorのみ)なので、そのほかのエラーが発生した場合に関しては、プログラム実行時にエラーとして出力されます。

    複数のエラーが想定される際には、except エラー名: を追加しましょう。

    try:
        print(10 / 0)
    except ZeroDivisionError:
        print('できませんでした')
    except ValueError:
        print('値がうまく合致しませんでした')

    except節は複数指定することができます。

    except節で例外名を全て指定しないと、全ての例外をキャッチすることが可能です。

    try:
        print(10 / 0)
    except:
        print('できませんでした')

    ただ、これに関して、全ての例外をキャッチしてしまうということで、プログラム制作者が想定していない例外が発生した時にもそのエラーを隠してしまうので、使用する際には非常に注意が必要です。

    try-exceptの構文に関連して、例外が発生した後の処理を指定したりする説があります。
    それを軽く記述しておきます。
    詳しくは別のブログで紹介しようと思います。

    • raise:故意に例外を発生させる
    • pass例外発生後に何も処理を行わない
    • else例外が発生しなかった場合にのみ処理
    • finally例外の発生に関わらず必ず処理