はCSV

2017-06-20 4 views
0

EDITから特定の列のみを抽出Pythonでプロット:Pythonとプログラミングにかなり新しいはCSV

、と私は、ログ(x)のログに第一及び第四列をプロットしたいと思います:質問を短縮する提案として(y)グラフ。そして正直言って、私はこれから必要な2つの列だけを抽出する方法を結び付けていません。

16:58:58 | 2.090 | 26.88 | 1.2945E-9 | 45.8 
16:59:00 | 2.031 | 27.00 | 1.3526E-9 | 132.1 
16:59:02 | 2.039 | 26.90 | 1.3843E-9 | 178.5 
16:59:04 | 2.031 | 26.98 | 1.4628E-9 | 228.9 
16:59:06 | 2.031 | 27.04 | 1.5263E-9 | 259.8 
16:59:08 | 2.027 | 26.84 | 1.6010E-9 | 271.8 
+0

大幅にあなたの人生を簡素化します! – nbeuchat

+0

ようこそ:ツアーに参加してください。これらの2つの質問を2つの別々の質問に分けてください。まず、おそらく、あなたは正しい形でデータを取得したいと考えています。次に、それをプロットすることについて心配したいと思います。 –

+0

@nbeuchatそれをチェックすることは、これまでのところうまく見えます。 –

答えて

0

使用パンダ:

import pandas as pd 
df = pd.read_csv("data.txt", delimiter="\s[|]\s+", header=None, index_col=0) 
df.plot(y=4) 

enter image description here

が(それは時間の対数がどうあるべきかはっきりしていないので、これは、対数スケールを無視することに注意してください)

+0

Hehe申し訳ありませんが、私はそれが冗談だと​​思ったので、時間のログにはコメントしませんでした。ログは16時ではなく、[s]で$ \ Delta t $に変換した後、$ log(\ Delta t)$に変換します。しかし、私はそのステップを行うことができると思います。 –

0

の場合あなたは優れたpandasを使用したくない、ここでは蒸気のアプローチです。 `pandas`ライブラリを使用して

import matplotlib.pyplot as plt 
import math 
import datetime as dt 

test = """16:58:58 | 2.090 | 26.88 | 1.2945E-9 | 45.8\n 
16:59:00 | 2.031 | 27.00 | 1.3526E-9 | 132.1\n 
16:59:02 | 2.039 | 26.90 | 1.3843E-9 | 178.5\n 
16:59:04 | 2.031 | 26.98 | 1.4628E-9 | 228.9\n 
16:59:06 | 2.031 | 27.04 | 1.5263E-9 | 259.8\n 
16:59:08 | 2.027 | 26.84 | 1.6010E-9 | 271.8\n""" 

lines = [line for line in test.splitlines() if line != ""] 

# Here is the real code 
subset = [] 

for line in lines: 
    parts = line.split('|') 
    ts = dt.datetime.strptime(parts[0].strip(), "%H:%M:%S") 
    num = math.log(float(parts[3].strip())) 
    subset.append((ts, num)) 

# now there is a list of tuples with your datapoints, looking like 
# [(datetime.datetime(1900, 1, 1, 16, 58, 58), 1.2945E-9), (datetime.datetime(1900, 1, 1, 16, 59), ...] 
# I made this list intentionally so that you can see how one can gather everything in a tidy way from the 
# raw string data. 

# Now lets separate things for plotting 
times = [elem[0] for elem in subset] 
values = [elem[1] for elem in subset] 

# now to plot, I'm going to use the matplotlib plot_date function. 
plt.figure() 
plt.plot_date(times, values) 
# do some formatting on the date axis 
plt.gcf().autofmt_xdate() 
plt.show() 

A plot!

+0

私は確信していません '行= [行のtest.splitlines()行の場合!=" "]' は –

+0

解決方法には影響しません。テストデータブロックをファイルからのreadlineを模倣するフォーマットにするメカニズムです。あなたは 'real code'コメントの下で心配する必要があります。つまり、 'test'文字列からの行のリストを生成します。 –