【问题标题】:Plotting 2 columns from multiple csv files from NASDAQ in a directory在目录中绘制来自 NASDAQ 的多个 csv 文件的 2 列
【发布时间】:2017-08-04 08:48:16
【问题描述】:

我正在尝试制作一个程序,在其中读取目录中的多个 csv 文件。文件已从http://www.nasdaqomxnordic.com/aktier/historiskakurser下载

第一行是sep=,它被跳过了。分隔符为';'

问题是,即使我从所有 csv 文件中打印了数据,我也只能得到空白图。

这个想法是在第 6 列中显示一个数据图,其中日期为 x 轴(第 0 列),一次显示一个 csv 文件,依此类推,直到给定目录为空。

我希望 csv 文件(纸张)的名称仅作为标题。现在我得到了目录/csv 名称。

即使打印了数据,matplotlib 似乎也无法正确理解 csv 文件。

我的代码如下所示:

import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style


ferms = glob.glob("OMX-C20_ScrapeData_Long_Name/*.csv")

for ferm in ferms:
    print(ferm)

# define the dataframe

    data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';',  header=0)

    print(data)
    data.head()

    pylab.rcParams['figure.figsize'] = (25, 20)
    plt.rcParams['figure.dpi'] = 80
    plt.rcParams['legend.fontsize'] = 'medium'
    plt.rcParams['figure.titlesize'] = 'large'
    plt.rcParams['figure.autolayout'] = 'true'
    plt.rcParams['xtick.minor.visible'] = 'true'

    plt.xlabel('Date')
    plt.ylabel('Closing price')
    plt.title(ferm)
    plt.show()

我尝试了其他一些方法来打开 csv 文件,但结果是一样的。没有曲线。 希望各位有经验的大侠指点一下。

【问题讨论】:

  • 应该对缩进/代码进行一些编辑
  • 你实际在哪里绘制数据?

标签: python csv numpy matplotlib stockquotes


【解决方案1】:

我对您的代码做了一些补充。我从您链接的页面下载了一个文件并运行了以下代码。更改您的 ferms 并再次添加 for 循环。你没有得到任何东西的一个原因是你没有在任何地方绘制数据。你已经改变了美学和一切,但在你的代码中没有任何地方告诉python你想要绘制这个数据。

其次,即使您添加了绘图命令,它仍然不会绘图,因为 DateClosing price 都不是数字格式。我将Date 列更改为datetime 格式。您的 Closing price 是一个逗号分隔的字符串。它可以代表一个以千为单位的数字,也可以是小数。我假设它是一个小数,尽管它更可能是一个以逗号分隔的以千为单位的数字。我已使用 pandas 数据框的 apply 方法使用名为 to_num 的自定义函数将其更改为数字。它用小数替换逗号。

import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style

ferm = glob.glob("Downloads/trial/*.csv")[0]

def to_num(inpt_string):
    nums = [x.strip() for x in inpt_string.split()]
    return float(''.join(nums).replace(',', '.'))

# print(ferm)
data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';',  header=0)
data['Date'] = pd.to_datetime(data['Date'])
data['Closing price'] = data['Closing price'].apply(to_num)

# print(data)
# data.head()
pylab.rcParams['figure.figsize'] = (25, 20)
plt.rcParams['figure.dpi'] = 80
plt.rcParams['legend.fontsize'] = 'medium'
plt.rcParams['figure.titlesize'] = 'large'
plt.rcParams['figure.autolayout'] = 'true'
plt.rcParams['xtick.minor.visible'] = 'true'
plt.xlabel('Date')
plt.ylabel('Closing price')
plt.title(ferm)
plt.plot(data.loc[:,'Date'], data.loc[:,'Closing price']) # this line plots the data
plt.show()

编辑

保持与您相同的代码结构 -

import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style

ferms = glob.glob("OMX-C20_ScrapeData_Long_Name/*.csv")

def to_num(inpt_string):
    nums = [x.strip() for x in inpt_string.split()]
    return float(''.join(nums).replace(',', '.'))

for ferm in ferms:
    data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';',  header=0)
    data['Date'] = pd.to_datetime(data['Date'])
    data['Closing price'] = data['Closing price'].apply(to_num) # change to numeric

    # print(data)
    # data.head()
    pylab.rcParams['figure.figsize'] = (25, 20)
    plt.rcParams['figure.dpi'] = 80
    plt.rcParams['legend.fontsize'] = 'medium'
    plt.rcParams['figure.titlesize'] = 'large'
    plt.rcParams['figure.autolayout'] = 'true'
    plt.rcParams['xtick.minor.visible'] = 'true'
    plt.xlabel('Date')
    plt.ylabel('Closing price')
    plt.title(ferm)
    plt.plot(data.loc[:,'Date'], data.loc[:,'Closing price'])
    plt.show()

【讨论】:

  • 非常感谢,现在该找点乐子了。
  • @Hennng 你在做股票预测或相关工作吗?
  • 我想制作一些代码来成为关注各种股票的人。现在,当雅虎似乎关闭时,我尝试使用谷歌和纳斯达克。我发现 OMX-20 在 nasdaq 上更容易找到。我的想法是从有趣的股票和论文列表中制作股票曲线,以便根据曲​​线决定我是否有兴趣出售或购买。我的银行有一个来自 SIX 的非常好的程序,但他们跳过了它,因为只有少数人能够使用它。稍后我也会尝试玩一些数学,但目前我认为眼睛还不错。 :-)
  • @Hennng 听起来很有趣。我一直在寻求对股票价格做类似的事情,但使用统计模型来使用股票数据进行预测。
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 2014-04-16
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多