python loadtxt_Python 数据科学入门2:Matplotlib
第七章 從文件加載數(shù)據(jù)
很多時候,我們想要繪制文件中的數(shù)據(jù)。 有許多類型的文件,以及許多方法,你可以使用它們從文件中提取數(shù)據(jù)來圖形化。 在這里,我們將展示幾種方法。 首先,我們將使用內(nèi)置的csv模塊加載CSV文件,然后我們將展示如何使用 NumPy(第三方模塊)加載文件。
import matplotlib.pyplot as pltimport csvx = []y = []with open('example.txt','r') as csvfile: plots = csv.reader(csvfile, delimiter=',') for row in plots: x.append(int(row[0])) y.append(int(row[1]))plt.plot(x,y, label='Loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('Interesting GraphCheck it out')plt.legend()plt.show()123456789101112131415161718這里,我們打開樣例文件,包含以下數(shù)據(jù):
1,52,33,44,75,46,37,58,79,410,412345678910接下來,我們使用csv模塊讀取數(shù)據(jù)。 csv讀取器自動按行分割文件,然后使用我們選擇的分隔符分割文件中的數(shù)據(jù)。 在我們的例子中,這是一個逗號。 注意:csv模塊和csv reader不需要文件在字面上是一個.csv文件。 它可以是任何具有分隔數(shù)據(jù)的簡單的文本文件。
一旦我們這樣做了,我們將索引為 0 的元素存儲到x列表,將索引為 1 的元素存儲到y(tǒng)列表中。 之后,我們都設(shè)置好了,準備繪圖,然后顯示數(shù)據(jù)。
雖然使用 CSV 模塊是完全正常的,但使用 NumPy 模塊來加載我們的文件和數(shù)據(jù),可能對我們更有意義。 如果你沒有 NumPy,你需要按下面的步驟來獲取它。 為了了解安裝模塊的更多信息,請參閱 pip 教程。 大多數(shù)人應(yīng)該都能打開命令行,并執(zhí)行pip install numpy。
如果不能,請參閱鏈接中的教程。
一旦你安裝了 NumPy,你可以編寫如下代碼:
import matplotlib.pyplot as pltimport numpy as npx, y = np.loadtxt('example.txt', delimiter=',', unpack=True)plt.plot(x,y, label='Loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('Interesting GraphCheck it out')plt.legend()plt.show()1234567891011結(jié)果應(yīng)該是相同的圖表。 稍后,當我們加載數(shù)據(jù)時,我們可以利用 NumPy 為我們做一些更多的工作,但這是教程未來的內(nèi)容。 就像csv模塊不需要一個特地的.csv一樣,loadtxt函數(shù)不要求文件是一個.txt文件,它可以是一個.csv,它甚至可以是一個 python 列表對象。
第八章 從網(wǎng)絡(luò)加載數(shù)據(jù)
除了從文件加載數(shù)據(jù),另一個流行的數(shù)據(jù)源是互聯(lián)網(wǎng)。 我們可以用各種各樣的方式從互聯(lián)網(wǎng)加載數(shù)據(jù),但對我們來說,我們只是簡單地讀取網(wǎng)站的源代碼,然后通過簡單的拆分來分離數(shù)據(jù)。
import matplotlib.pyplot as pltimport numpy as npimport urllibimport matplotlib.dates as mdatesdef graph_data(stock): stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv' source_code = urllib.request.urlopen(stock_price_url).read().decode() stock_data = [] split_source = source_code.split('') for line in split_source: split_line = line.split(',') if len(split_line) == 6: if 'values' not in line: stock_data.append(line)1234567891011121314151617181920這里有很多步驟。首先,我們看到import。 pyplot像往常一樣導(dǎo)入,然后導(dǎo)入了numpy,然后是用于訪問互聯(lián)網(wǎng)的urllib,然后導(dǎo)入了matplotlib.dates作為mdates,它對于將日期戳轉(zhuǎn)換為 matplotlib 可以理解的日期很有用。
接下來,我們開始構(gòu)建我們的graph_data函數(shù)。在這里,我們首先定義包含股票數(shù)據(jù)的網(wǎng)址。之后,我們寫一些urllib代碼來訪問該 URL,然后使用.read讀取源代碼,之后我們繼續(xù)解碼該數(shù)據(jù)。如果你使用 Python 2,則不必使用decode。
然后,我們定義一個空列表,這是我們將要放置股票數(shù)據(jù)的地方,我們也開始使用split_source變量拆分數(shù)據(jù),以換行符拆分。
現(xiàn)在,如果你去看源代碼,用stock替換 URL 中的+stock+,像 AAPL 那樣,你可以看到大多數(shù)頁面數(shù)據(jù)確實是股票定價信息,但有一些頭信息我們需要過濾掉。為此,我們使用一些基本的過濾,檢查它們來確保每行有 6 個數(shù)據(jù)點,然后確保術(shù)語values不在行中。
現(xiàn)在,我們已經(jīng)解析了數(shù)據(jù),并做好了準備。我們將使用 NumPy:
date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data, delimiter=',', unpack=True, # %Y = full year. 2015 # %y = partial year 15 # %m = number month # %d = number day # %H = hours # %M = minutes # %S = seconds # 12-06-2014 # %m-%d-%Y converters={0: bytespdate2num('%Y%m%d')})12345678910111213我們在這里所做的是,使用numpy的loadtxt函數(shù),并將這六個元素解構(gòu)到六個變量。 這里的第一個參數(shù)是stock_data,這是我們加載的數(shù)據(jù)。 然后,我們指定delimiter(這里是逗號),然后我們指定我們確實想要在這里解包變量,不是一個變量,而是我們定義的這組變量。 最后,我們使用可選的converters參數(shù)來指定我們要轉(zhuǎn)換的元素(0),以及我們打算要怎么做。 我們傳遞一個名為bytespdate2num的函數(shù),它還不存在,但我們下面會編寫它。
第九章 時間戳的轉(zhuǎn)換
本教程的重點是將來自 Yahoo finance API 的日期轉(zhuǎn)換為 Matplotlib 可理解的日期。 為了實現(xiàn)它,我們要寫一個新的函數(shù),bytespdate2num。
def bytespdate2num(fmt, encoding='utf-8'): strconverter = mdates.strpdate2num(fmt) def bytesconverter(b): s = b.decode(encoding) return strconverter(s) return bytesconverter123456此函數(shù)接受數(shù)據(jù),基于編碼來解碼數(shù)據(jù),然后返回它。
將此應(yīng)用于我們的程序的其余部分:
import matplotlib.pyplot as pltimport numpy as npimport urllibimport matplotlib.dates as mdatesdef bytespdate2num(fmt, encoding='utf-8'): strconverter = mdates.strpdate2num(fmt) def bytesconverter(b): s = b.decode(encoding) return strconverter(s) return bytesconverterdef graph_data(stock): stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv' source_code = urllib.request.urlopen(stock_price_url).read().decode() stock_data = [] split_source = source_code.split('') for line in split_source: split_line = line.split(',') if len(split_line) == 6: if 'values' not in line and 'labels' not in line: stock_data.append(line) date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data, delimiter=',', unpack=True, # %Y = full year. 2015 # %y = partial year 15 # %m = number month # %d = number day # %H = hours # %M = minutes # %S = seconds # 12-06-2014 # %m-%d-%Y converters={0: bytespdate2num('%Y%m%d')}) plt.plot_date(date, closep,'-', label='Price') plt.xlabel('Date') plt.ylabel('Price') plt.title('Interesting GraphCheck it out') plt.legend() plt.show()graph_data('TSLA')12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849如果你繪制 TSLA,結(jié)果圖應(yīng)該看起來像這樣:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python loadtxt_Python 数据科学入门2:Matplotlib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电信wifi登录器
- 下一篇: 中boxplot函数的参数设置_如何在P