質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

980閲覧

pythonを用いExcelのように計算をしたい

m-nakao

総合スコア2

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/10 06:14

編集2021/08/10 09:32

前提・実現したいこと

python初心者です。

現状:ラズベリーパイと光センサーを用い、8:00~17:00まで1秒毎の光センサー抵抗値のデータをCSV形式で収集しております。
プログラムはpythonを使い収集しております。
光センサーのデータは100未満を稼働、100以上を非稼働とし稼働率をCSVでExcelで計算しています。

実現したい事:pythonを使用して
1.CSVファイルを別CSVファイルを作る。

#!/usr/bin/python3

#pandasをインポート
import pandas as pd
import datetime

#CSVを読み込み、dfに代入
df = pd.read_csv("/home/pi/Desktop/cp_log.csv",names=("time","resist"))

#dfをCSV出力

df.to_csv("/home/pi/Desktop/cp900_log.csv")

※元のCSVファイルは何かあった時のために保存しておきます。

2.範囲指定をし、光センサーの抵抗値を100未満を1,100以上を0とし計算する。
CSVができるわけですが
イメージ説明

3.LCD1602で計算値を表示させる。

発生している問題・エラーメッセージ

困っている点は
1.範囲の指定の仕方
2.光センサーの抵抗値を計算
この2点のコードの記述の仕方が分かりません。

試したこと

pythonで「ExcelでいうCOUNTIFを繰り返し行う」のようなことをやりたい
https://teratail.com/questions/223367
を参考にさせていただいたのですが、

**2のresistの100未満の値を0、100以上の値を1にするコードの記述の仕方を調査したのですが分かりませんのでご教示をお願い致します。

**1は900行ごとに範囲を指定したいので
”llong(900)"を記述することで解決できるかなと考えております。

補足情報(FW/ツールのバージョンなど)

pythonのverは3.7.3です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

p19ljk

2021/08/10 06:55

「実現したい事:8:00~17:00まで15分毎にディスプレイに稼働率を表示させたいです。」 これはここで聞くべき"実現したいこと"ではないかと思います。 「これを実現するにはこういうロジックで、こういう計算をしたいのですがどうやって記述するかがわからない」というような質問であれば適切かと思います。 「とにかく売れるアプリが作りたいけどどうしたらいいですか?」というような丸投げとおなじになってしまいますよ。 もう少し目標実現に向けてのステップを刻んで、「ここまではできたけどここがわからない」くらいには落とし込んだほうが良いかと。
m-nakao

2021/08/10 09:36

ご指摘いただきありがとうございます。質問を修正いたしました。
guest

回答2

0

ベストアンサー

pandas.Grouperで指定期間毎に集計できます。
以下のコードでは稼働状態を1or0の値に変換し、その平均から稼働率を求めています。
なお、LCDなどへの表示はご自身で実装ください。

Python

1import pandas as pd 2import random 3 4# テストデータ 5random.seed(110) 6tm = pd.date_range('2018-08-01 08:00:00', '2018-08-01 10:00:00', freq='1S') 7val = [random.uniform(50, 150) for _ in range(len(tm))] 8df = pd.DataFrame({'time': tm, 'val' : val}) 9 10 11df['work'] = (df['val'] < 100).astype(int) # 稼働=1, 非稼働=0 12ret = df.groupby(pd.Grouper(key='time', axis=0, freq='900S')).mean()['work'].reset_index() 13print(ret) 14""" 15 time work 160 2018-08-01 08:00:00 0.493333 171 2018-08-01 08:15:00 0.486667 182 2018-08-01 08:30:00 0.497778 193 2018-08-01 08:45:00 0.488889 204 2018-08-01 09:00:00 0.487778 215 2018-08-01 09:15:00 0.494444 226 2018-08-01 09:30:00 0.486667 237 2018-08-01 09:45:00 0.503333 248 2018-08-01 10:00:00 0.000000 25"""

投稿2021/08/10 07:10

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m-nakao

2021/12/02 08:33

can110様 遅くなり大変申し訳ございません。 ありがとうございます。Pandas Grouperをご教示いただき有難うございます。
guest

0

python

1import csv, os 2import pandas as pd 3import numpy as np 4import datetime 5 6#対象のファイルのパス文字列を指定 7file_path = os.path.join(".","/home/pi/Desktop/cplog.csv") 8print("file name:" + file_path) 9 10 11#CSVファイルからdfへ変換 12df = pd.read_csv(file_path,names = ["tm","CP1","CP2","CP3","CP4"]) 13df["tm"] = pd.to_datetime(df["tm"]) 14 15#読み込んだデータの表示 16df.head(97500) 17print(df) 18 19#TODO:dfからの目的のデータの取得 20ret1 = df.groupby(pd.Grouper(key="tm", axis=0, freq='900S')).mean()['CP1'].reset_index() 21ret2 = df.groupby(pd.Grouper(key="tm", axis=0, freq='900S')).mean()['CP2'].reset_index() 22ret3 = df.groupby(pd.Grouper(key="tm", axis=0, freq='900S')).mean()['CP3'].reset_index() 23ret4 = df.groupby(pd.Grouper(key="tm", axis=0, freq='900S')).mean()['CP4'].reset_index() 24print(ret1,ret2,ret3,ret4) 25

これで、900秒おきのデータはprintできました。ただ、8:00~17:00まででは無く他の時間もNanでprintされてしまいます。

投稿2021/12/02 08:38

m-nakao

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問