python数据挖掘实验报告1
实验内容及步骤(包含简要的实验步骤流程)
1.使用Pandas_datareader获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。
2.使用Pandas_datareader获取世界银行数据库中美国(USA)、瑞典(SWE)、瑞士(CHE)三个国家近20年的NY.GDP.PCAP.KD数据,作图分析。
3.对于泰坦尼克的数据集,试分析幸存与否与独立登船的相关性(alone数据列)。
1.取五粮液(000858.sz)和古井贡酒(000596.sz)两只股票的三个月交易数据,做出收盘的变动图像。
需要注意的是目前模块已经迁徙到pandas-datareader包中,因此导入模块时需要由import pandas.io.data as web更改为import pandas_datareader.data as web,需要先下载pandas_datareader包
#导入pandas_datareader/datetime/seaborn/matplotlib库
import pandas_datareader.data as webdata
import datetime
import seaborn as sns
import matplotlib.pyplot as plt
#处理Seaborn图表内嵌中文字体问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_style({'font.sans-serif':['simhei','Arial']})
#用datatime生成日期数据
start_time = datetime.datetime(2020,6,30)
end_time = datetime.datetime(2020,9,30)
#通过Yahoo财经,查询股票信息
stock_code1 = input('美股直接输入股票代码如GOOG \n港股输入代码+对应股市,如腾讯:0700.hk \n国内股票需要区分上证和深证,股票代码后面加.ss或者.sz\n你要查询的股票代码是:')
stock_info1 = webdata.get_data_yahoo(stock_code1,start_time,end_time)
#展示前5行
#print(stock_info1.head())
stock_code2 = input('另一只要查询的股票代码是:')
stock_info2 = webdata.get_data_yahoo(stock_code2,start_time,end_time)
#绘制股票价格波动图
print('股票收盘价对比:')
sns.set()
plt.figure(figsize=(10,4))
plt.plot(stock_info1['Close'],'r-',label=stock_code1)
plt.plot(stock_info2['Close'],'k--',label=stock_code2)
plt.legend()
plt.savefig('股票收盘.png')
plt.show()

这里在做的时候,要pip下载一个datetime的库。要升级pip版本,按照cmd的提示命令就可以升级了。
- 使用Pandas_datareader获取世界银行数据库中美国(USA)、瑞典(SWE)、瑞士(CHE)三个国家近20年的NY.GDP.PCAP.KD数据,并作图分析。
#导入wb用于查询世界银行数据
#http://ju.outofmemory.cn/entry/308589
#https://pandas-datareader.readthedocs.io/en/latest/readers/world-bank.html?highlight=
#pandas_datareader.wb
import pandas_datareader.wb as worldbank
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
#处理Seaborn图表内嵌中文字体问题
sns.set()
sns.set_style({'font.sans-serif':['simhei','Arial']})
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
start_year = 1999
end_year = 2019
#查询数据库中所有国家信息
#countries = worldbank.get_countries()
#读取美国(USA)、瑞典(SWE)、瑞士(CHE)的NY.GDP.PCAP.KD数据
dat = worldbank.download(indicator="NY.GDP.PCAP.KD", country=["USA", "SWE","CHE"], start=start_year, end=end_year)
dat2draw=dat.unstack(level=0)
#dat2draw.plot()
plt.figure(figsize=(10,4))
plt.plot(dat2draw.iloc[:,0],'r-',label="SWE")
plt.plot(dat2draw.iloc[:,1],'b-*',label="CHE")
plt.plot(dat2draw.iloc[:,2],'g--',label="USA")
plt.title("人均GDP对比(美元计价)",fontsize=20)
plt.legend()
plt.savefig("三国GDP.png",dpi=300, bbox_inches="tight")

补充:iloc提取[[行],[列]]
比如


提取第0列的第0-2行
这样是提取全部行,第0列

这样是提取表格到第一条信息
3.对于泰坦尼克的数据集,试分析幸存与否与独立登船的相关性(alone数据列)
import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
import seaborn as sns
#处理Seaborn图表内嵌中文字体问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})
#载入泰坦尼克数据库,显示乘客信息的头5行
PasTit = sns.load_dataset('titanic')
print('前5行数据:')
print(PasTit.head())
#统计幸存者是否独立登船
survived=PasTit.groupby(['alone','survived']).size().unstack()
survived['sum']=survived[0]+survived[1]
survived['生还率']=survived[1]/survived['sum']
print()
print('乘客按照是否独立登船:')
print('False:不是独立登船;True:独立登船')
print(survived)
#幸存与否与独立登船相关性分析(相关系数)
X=PasTit['survived']
Y=PasTit['alone']
print(X.corr(Y))
#生成相关性热力图
plt.subplots(figsize=(9, 5)) # 设置画面大小
sns.heatmap(survived, annot=True, vmax=1, square=True, cmap="Blues")
plt.savefig('热力图.png')
plt.show()

这里有疑问的是形成的表格数据,必须要用survived这个参数才能生成热力图,不是很明白为什么。
形成的表格做条形图也做不出想要的效果,试了很长时间没有画出来。上课的时候再去询问一下老师。
五、实验总结(包括心得体会、问题回答及实验改进意见,可附页)
通过本次实验
1.巩固了Python程序编制,Numpy、Pandas、seaborn和Matplotlib包的使用。
2.掌握使用Pandas_datareader获取基本的数据,使用webdata.get_data_yahoo的方法从yahoo财经获取财经信息。
3.使用Matplotlib、seaborn做出收盘价的变动图像、近20年的NY.GDP.PCAP.KD数据和相关系数热力图
4.发现了一些要注意的点和疑惑的地方,对dataframe生成、索引切片和matplotlib画图还存在疑问,留存上课询问老师。
