最近学习Python,记录作业代码,以便后续查阅。今天顺便把效果图贴上好了。
1、漲跌幅为今日Adj Close-昨日AdjClose)/昨日Adj Close,日期為x軸,漲跌幅為y軸,畫出折線圖
import numpy as np import pandas as pd import matplotlib.dates as mdates #處理日期 import matplotlib.pyplot as plt #讀入數據 df = pd.read_csv('AAPL.csv') x = df['Date'] x = pd.to_datetime(x) #轉換為日期,否則下面的日期設置不會生效 y = df['Adj Close'].pct_change() * 100 #計算變化的百分比,這個方法很方便 y[0] = 0 #將第一條缺失值填充為0,作為起點 #plt.gca()函數獲得當前坐標軸,然後才能設置參數或作圖,plt.plot()內部實現了這一步驟 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) #設置x軸主刻度顯示格式(日期) plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=2)) #設置x軸主刻度間距 plt.xlabel("Date") plt.ylabel('Change Rate(%)') plt.title('Apple Stock Trend') plt.plot(x,y)
2、將漲跌幅絕對值大於3%的點用紅點標註:
#只需要在第1題答案后追加如下代碼: for i in range(len(y)): if abs(y[i])>3: plt.scatter(x[i], y[i], color='r', marker='o',s=80,alpha=0.6)
还以为会涉及到图像合并,Python结合matplotlib还是挺简单的,直接绘制散点就行了。
3、直方图,这个没什么说的,与条形图的不同就在于它通常表现的是连续数据
import numpy as np import pandas as pd import matplotlib.pyplot as plt #讀入數據 df = pd.read_csv('adult.data.txt',header = None) group = range(0,100,10) #設置分組 plt.hist(df[0],group) #第二個參數是對連續數據的分組
4、饼图:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('adult.data.txt',header = None) data =df.groupby(by=7).size() #類型為Series,直接使用index和values作為標籤和對應的值 labels = data.index sizes = data.values plt.pie(sizes,labels=labels,autopct='%1.1f%%',startangle=90) #startangle表示餅圖的起點,explode參數可以設置該塊是否從圓心炸開 plt.axis('equal') #設置為正圓形,不加這一行不是正圓形 plt.show()
饼图的主要参数就是sizes,对应每个类型的数量,labels对应饼图上显示的标签。通过groupby来分组(参数是数据框的第几列),返回值不能直接用,通过size()方法得到Series类型,Series的index和values刚好可以用来做饼图的参数。