Python関連のことを調べてみた2022年03月14日

Python関連のことを調べてみた2022年03月14日
目次

pandas:ユーザごとに1週間単位で集計する

# 実行環境
* Python 3.10.2
* pandas 1.4.1

# やりたいこと
以下のデータを、`user`ごとに1週間単位(日曜日始まり)の合計の`count`を算出したいです。

“`csv:data.csv
user,date,count
alice,2022-03-01,1
alice,2022-03-05,2
alice,2022-03-06,3
alice,2022-03-07,4
alice,2022-03-12,5
alice,2022-03-13,6
alice,2022-03-14,7
bob,2022-03-12,100
bob,2022-03-13,101
“`

“`
In [63]: df =pandas.read_csv(“qiita-table.csv”)

In [64]: df
Out[64]:
user date count
0 alice 2022-03-01 1
1 alice 2022-03-05 2
2 alice 2022-03-06 3
3 a

元記事を表示

【物体検出】2万種類の物体検出ができるDeticを試してみる 〜デモからテストまで〜

Meta(旧 Facebook)が2022年1月に発表した新しい物体検出器であるDetic(Detecting Twenty-thousand Classes using Image-level Supervision)を試していきます。
今回は公式のチュートリアルに沿って実装方法を紹介します。
Google colabを使用して簡単に物体検出のモデルを実装することができますので、ぜひ最後までご覧ください。
# Deticとは
Detic(Detecting Twenty-thousand Classes using Image-level Supervision)とはMeta(旧 Facebook)が発表した新しい物体検出器です。
画像分類データセットを使った物体検出器のトレーニングを可能とする事で、物体検出の検出分類数(vocabulary)を大幅に拡張しました。
これにより、物体検出時にアンカーボックスを用いる必要がなく、画像分類のデータセットで物体検出のトレーニングが可能となりました。
出典と公式実装は以下のリンクよりご確認いただけます。

https://arxiv.org/

元記事を表示

[Python]enumを使って多次元配列をするときの注意点

# Background
[paizaスキルチェック](https://paiza.jp/challenges) のある問題を解いていたときに、2次元配列を使ってある区画の範囲に色を塗るといった処理が必要となりました。そこで各要素を列挙型を使ってみたのですが思った処理結果が出なかったので紹介します。

# Initialize

ここで色の列挙型と区画を初期化してみます。

“`Python
class Color(Enum):
WHITE = 0
RED = 1
GREEN = 2
BLUE = 3

# width:5 height:4 の2次元配列を作る
mat = [[Color.WHITE] * 4] * 5

for r in mat:
for c in r:
print(c.name, end=” “)
print(“\n”)
“`

“`shell
WHITE WHITE WHITE WHITE

WHITE WHITE WHITE WHITE

WHITE WHITE WHITE WHITE

元記事を表示

pythonでテキストファイルに書き込みするならwrite使うよりprint使う方が簡単だよ。

# Pythonでテキストファイルに書き込み
今日は、Pythonを書く人なら誰でも知っていると思われる、テキストファイルの書き込みについての小ネタ。
なぜか、「python、ファイル、書き込み」とかでググると、以下のような感じの説明をしてるウェブサイトばかりが出てくる。
1. `open`関数で書き込みモード(“w”)のファイルオブジェクト(`_io.TextIOWrapper`)を作成して、
1. `write`か`writelines`で書き込む!!!!!!!!!

確かに、これが最も基本的な書き方であることは間違いないが、正直なところ`write`関数での書き込みは面倒くさいし意外と難しい。なんと言っても、書き込み内容を文字列(`str`)型に整形する必要がある。テーブル形式で書き出したいときなんて、区切り文字までつけないとならないし発狂ものである。(標準のcsvモジュールとかpandasとかnumpyのcsv出力の機能を使えばいいという指摘は最もである。しかし、ダメだとは分かっていても、ヘッドにコメントを付けたいみたいなときもあるわけで、標準のwrite関数を使わざる得ない時

元記事を表示

Nuitkaで失敗しやすいポイントを解説

NuitkaはPythonのプログラムを実行可能ファイルにすることができるソフトです。
Nuitkaについてはこちらの記事が非常に参考になります。

https://blog.tsukumijima.net/article/python-nuitka-usage/

この記事ではNuitkaで失敗しやすいポイントを解説します。
バージョン0.7時点の情報です。

## 特定のモジュールを含めるようにする

`–follow-imports`オプションを使うと自動的に使用するモジュールをビルドしてくれますが、たまにうまく動作しない場合があります。
例えば`eth-hash`モジュールでは、動的に必要モジュールを読み込むためか、動作に必要な`eth_hash.backends.pycryptodome`をビルドしてくれません。
ビルドは通りますが、実行するとエラーになってしまいます。

https://github.com/ethereum/eth-hash/blob/fc3b9dda5f1ce5f908c7c0cbbbc63adb4e030da9/eth_hash/utils.py#L

元記事を表示

お絵描きロジック(ピクロス)をpulpで解く

## お絵かきロジックとは
以下のルールでマスを埋めていくパズルの一種です.
イラストロジック,ののぐらむ,ピクロスと呼ばれることもあるようです.

1. タテ,ヨコ各列,数字の数だけマスを連続して黒く塗る
1. 数字が複数ある場合は,右から(or上から)数字の分だけ黒く塗る
1. ただし,数字同士がつながらないように間に少なくとも一つ空白を入れる

例えば,この問題は
![スクリーンショット 2022-03-13 20.01.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2596013/9e92c58b-0643-46f3-d5ce-fd764b5a17fe.png)

このようになります.
![スクリーンショット 2022-03-13 20.20.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2596013/cbdd417a-47db-bfee-0e1a-47ebfd24487c.png)
引用問題:

元記事を表示

python(networkx)によるネットワーク分析メモ4 グループ

pythonによるネットワーク分析のメモ書きとなります。
networkxを使用します。

内容・コードがまとまっていないので、詳細については参考書の参照をお願いします。

機会があればしっかり勉強していこうと思います。

### ネットワーク分割
#### Kernighan-Linアルゴリズム
まず、与えられたネットワークを任意に2つのグループに分割した状態からスタートする。
分割された各グループから頂点を1つずつ選び、その2頂点の所属グループを交換したときに、グループ間の辺の数が最も減少するような2頂点を交換する、という処理を繰り返すことによって、グループ間の辺の数が少ない分割を得る。

“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import networkx as nx

data = pd.read_csv(‘anketo.csv’, encoding=’shift-jis’)
data.head()

元記事を表示

python(networkx)によるネットワーク分析メモ3 経路

pythonによるネットワーク分析のメモ書きとなります。
networkxを使用します。

内容・コードがまとまっていないので、詳細については参考書の参照をお願いします。

機会があればしっかり勉強していこうと思います。

### 幅優先探索と深さ優先探索
ネットワーク$G=(V,E)$の2頂点$v_s$と$v_t$が与えられて、$v_s$から$v_t$への経路を探索することを考える。
幅優先探索(BFS)は、$v_s$に隣接する距離1の頂点をすべて探し、次に距離2のすべての頂点、さらに距離3のすべての頂点という順で探索していく手法である。

“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import networkx as nx

data = pd.read_csv(‘anketo.csv’, encoding=’shift-jis’)
data.head()
“`