前提・実現したいこと
Pythonを使って、対象箇所における70cm格子ごとの横断勾配を求めたいです。
想定手順とわからない箇所
1.XYZ値を含むcsvデータの読み込み
2.列ごと(XYZごと)にラベル付け
3.対象地におけるXYの最大値と最小値を抽出
4.XY面における70cm格子の作成
5.各格子内のXZ値を使って、XZ値の近似線の傾きを求める
6.A列B列C列(XYZ)は元の値を据え置き D列に求めた近似線の傾きを挿入
7.csvデータとして出力
D列の横断勾配は70cmごとに区切って対象とした点にリンクする形で挿入したいです。そのため、出力データのA列、B列、C列、D列はすべて同じデータ数となることを想定しています。
データは位置情報(XYZ値)を含む点群データとなっています。
点群はXY軸に対して並べられており、XとYの最小値はそれぞれ0であり、同一の点となっています。
簡易的な説明となってしまい申し訳ございませんが、ご回答よろしくお願いいたします。
入力データは実際には下図の通り、XY軸に対してまっすぐに並列されています。
該当のソースコード
import pandas as pd import csv import numpy as np import sympy as sp import io #入れたいデータを選択 pd.read_csv("〇〇〇") #入れたいデータを選択 df=pd.read_csv("〇〇〇",names=("X","Y","Z")) #CSVを列ごとにラベル付け X=df["X"] Y=df["Y"] Z=df["Z"] #XとYの最大・最小を抽出 Xmax = (max(X)) Xmin = (min(X)) Ymax = (max(Y)) Ymin = (min(Y)) Xi = (Xmax - Xmin)/0.7 Yi = (Ymax - Ymin)/0.7 #70cmの格子の作成 grid_X = Xmin + (0.7+(0.7*Xi))/2 + (0.7*Xi)/2 grid_Y = Ymin + (0.7+(0.7*Yi))/2 + (0.7*Yi)/2 """ わからない箇所 """ list1 = [X] list2 = [Y] list3 = [Z] list4 = [横断勾配] with open('〇〇〇', 'w', newline="") as f: writer = csv.writer(f) for kekka in zip(X,Y,Z,横断勾配): writer.writerow(kekka)
試したこと
np.polyfitを使って、70cm格子内の近似線の傾きを求めることができるのではないかと考えていますが、うまく実行できませんでした。