最近学习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刚好可以用来做饼图的参数。