【STA24】Pythonで使った関数備忘録その0<ファイル自動操作>

4月からPythonを習い初めて、STA24スキー滑走計測データのデータ処理をPython でやってきて、ようやく一段落したので、この3か月で使ってきたコマンドをメモしておきます。

DF関係1:膨大なスキー滑走データをターン1個ずつの連番付きのcsvファイルに分割して保存してある
DF関係2:分割したファイル群をひとまとめに同じ処理ができるように連番順に読み込んで処理できる

この記事途中で途切れてますが、思いついたときに追記していきます。

●pandas DF関係

分類とimport 命令
CSVファイル関連

import pandas as pd
df = pd.read_csv(filename, low_memory=True)
 csvファイルをdfに読み込む
df.to_csv(r’C:/RTK_Log/_’ + basename)
dfをcsvファイルに書き込む
ファイル名指定
ファイル名抽出
連番ファイル抽出連番ファイルソート

import tkinter
import tkinter.filedialog as FileDialog
import os
from os.path import dirname, basename
from os.path import join

 

 

 

iDir = r’C:/RTK_Log/’
 fTyp = [(*.csv;*.xlsx;*.xls”), (“すべてのファイル”, “*.*”)]
 filename = FileDialog.askopenfilename(parent=root, initialdir=iDir, filetypes=fTyp)
idirで場所指定
fTypで種類指定
FileDialogが開いて
filenameが戻る
指定したファイル名からパス名抽出

  pathn = dirname(filename)

指定したファイル名からファイル名のみ抽出

basename = os.path.basename(filename)
①ファイル名から日付を抽出 ”_Month-Day-Hour-minute”

datestr=re.findall(r’_\d+-\d+-\d+-\d+’, fname)

②ファイル名から連番を抽出 “_No_”
serstr=re.findall(r’_\d+_’, fname)
③抽出した連番のファイル名を前後2分割
names=fname.split(serstr[0])
正規表現を使ってファイル名から欲しい内容を抽出するとファイルの自動操作が自在にできます
④ディレクトリ内の連番がついた同じシリーズファイル名抽出
#パス名取得pathn

pathn = dirname(fn)
#Dir内のファイルリスト抽出 files
 files = os.listdir(pathn)
#連番”_No_”がついた連番を抽出
serstr=re.findall(r’_\d+_’, fname)
#fnameをserstr[0]で分割して連番の前後names[0] とnames[1]抽出
names=fname.split(serstr[0])
#連番付きのファイル名を抽出
datelist = [s for s in files if names[0] in s and names[1] in s]
  #連番ファイルのソートでファイル順をそろえたファイルリスト作成
        result=[]
        for i in range(0,len(datelist)):
                No_str=re.findall(r’_\d+_’, datelist[i])
                print(i,”:No_str=”,No_str)
                #No_val.append(re.findall(r’\d+’, No_str[0]))
                if len(No_str)>0:
                        valint=int( re.sub(r”\D”, “”, No_str[0]))
                        result.append( valint)
                #print(“result=”,result)
                #print(i,”:No_val=”,No_val)
        print(“result=”,result)
        result_sorted=sorted(result)
キー入力
ENTERで進む
 v= input(” keyin =>ENTER”)
  if v==’r’:
キー入力で文字をいれて、ENTERを押すとvに代入される。
1文字だけでENTER無しは、バグになりやすいから使わない
カラム内行計算 ①現在行と1つ上の行で掛け算

df[“colmult”]=df[‘col’] * df[‘col’].shift(1)

②現在行と一つ上の行で引き算してcoldiff列に代入

 df[“coldiff”]=df[“col”].diff()

③現在行と1つ上の行で移動平均10個

 df[“colave10”]=df[“col”].rolling(10).mean()

 

上下で掛け算して、正負判別すると極値が判る。
上下で引き算して差分を得る上下複数行で移動平均を得る
カラム間計算 ①カラム同士で、引き算掛け算

df[“colResult”]=df[“col_1”]+df[“col_2”]*0.25
 df[“rolldiff”]=df[“roll”].diff()*10
1行で計算判別
 ①360度以上なら360度引く、以外はそのまま
df[“colResult”] = np.where(df[“col”] > 360, df[“col”] – 360, df[“col”])

②数値以外のデータを含む行を抽出

nonNum= df.apply(lambda x: not pd.to_numeric(x,errors=’coerce’).notnull().all(), axis=1)
③簡単な計算
df[‘Vector’] = df.apply(lambda row:math.sqrt(row[‘ax’]**2+row[‘ay’]**2), axis=1)
ListからDF作成
①listで個々のデータを収集してからdf作成
 while i <len(No)
 list=[i,・,・,・]
 list_All.append(list)
     i+=1
df=pd.DataFrame(list_All)
DFからList作成 ①列のLIST :全行

list=[]

listcol=df.loc[:,”col”]#列名を使っているのでlocを使う

②行のList :全列

listrow=[]

listrow=df.iloc[rowNo,:]#列名を使っていないので、ilocを使う

loc,ilocに注意

 

●matplot 関係

分類とimport
相関付
ペアプロット

import seaborn as sns
 pairplot(df_pplot,supname)#相関付きペアプロット
def pairplot(df,basenam):
        g = sns.PairGrid(df, height=1.6, dropna=False)
        g.map_diag(draw_hist)
        g.map_upper(sns.regplot, scatter_kws={“s”: 8}, line_kws={“color”:  “r”})
        g.map_lower(corr_func)
        g.figure.suptitle(“2D_”+basenam,y=0.995,size=12, weight=2, color=”red”)
        g.savefig(‘C:/RTK_Log/hokan/ITPreg’+basenam+’.png’)
QIITAに掲載されていたものです、作者の感謝
https://tinyurl.com/2pqfvnam

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です