из CSV-файла: конвертировать метку времени unix первого столбца в год и создать график - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать сюжет из CSV-файла. В CSV-файле первый столбец является меткой времени, второй - шестой столбец - разные стороны. Я хочу создать график, где ось x - это год (т.е. 2004 год), и построить график со значениями сторон в процентах по оси y.

CSV-файл выглядит так:

 date,CSU/CDU,SPD,Gruene,FDP,Linke
 891468000.0,34,44,6,5,6
 891986400.0,34,44,6,5,6
 892677600.0,35,43,6,5,5
 894405600.0,32,46,6,6,5
 895010400.0,33,46,5,5,5

Я попробовал приведенный ниже код.

 import numpy as np
 import matplotlib.pyplot as plt


 with open('polldata.csv') as f:

    names = f.readline().strip().split(',')
    data = np.loadtxt(f, delimiter=',')

 cols = data.shape[1]
 for n in range (1,cols):     
     plt.plot(data[:,0],data[:,n],label=names[n])

 plt.xlabel('year',fontsize=14)
 plt.ylabel('parties',fontsize=14)  

 plt.show()

Из первого столбца моего CSV-файла я хочу преобразовать эту временную метку в год. Кроме того, мне нужно отобразить ее в виде гистограммы, чтобы можно было легко идентифицировать стороны дифференциации цвета.

Я хочу, чтобы график выглядел аналогично 5-му на следующей странице

(https://moderndata.plot.ly/elections-analysis-in-r-python-and-ggplot2-9-charts-from-4-countries/)

СПАСИБО ЗА ПРЕДЕЛА!

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать csv reader от pandas. Документация здесь: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

это выглядит так:

импорт панд как pd

import matplotlib.pyplot as plt
import datetime

df = pd.read_csv("polldata.csv", delimiter=',')

df['date'] = df['date'].apply(lambda ts: datetime.datetime.utcfromtimestamp(ts).strftime('%Y'))
print(df)

ols = df.columns
for n in range (len(cols)):
    plt.plot(df,label=cols[n])

plt.xlabel('year',fontsize=14)
plt.ylabel('parties',fontsize=14)

plt.show()

будет напечатано:

   date  CSU/CDU  SPD  Gruene  FDP  Linke
0  1998       34   44       6    5      6
1  1998       34   44       6    5      6
2  1998       35   43       6    5      5
3  1998       32   46       6    6      5
4  1998       33   46       5    5      5

это тебя начало?

...