上一次的文章一元线性回归
数据例子
以下是一个plt画出房子,人口,年龄等数据的直方图,为什么要画直方图呢?因为直方图本身是一种统计数据,比如年龄为45的总共有几个,年龄为30的总共有几个,学会画直方图以后,就可以从数据直方图中获取部分启发式洞见。先不要管意义是什么,先学会画直方图,在python中使用pandas和matplotlib.pyplot来画出直方图,并且理解,直方图是"直观分类"的统计就行
数据如下图所示
这一份数据有2万多行,本身其实就是大数据的统计后的数据,然后再进行二次分析,代表着经纬度的房子上的数据,一次一次的数据统计和清洗,本身就是一个艰苦的工作,所以网络上存在着那种所谓的平台,能直接做出最终结果的工具,几乎是很难做到的,数据科学是一个需要"洞见"的科学。
import pandas as pdimport os import matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesdef load(path):csvpath = os.path.join(path,"housing.csv")return pd.read_csv(csvpath)plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=Falsehdata=load("./datasets/housing")print(hdata.head())print(hdata.info())hdata.hist(bins=50,figsize=(20,15))plt.show();
摄像头例子
以下是摄像头数据,这是一份虚拟数据,经纬度上的摄像头记录了每小时经过的人流和车流,以及摄像头的品牌
先看摄像头的品牌直方图
hdata=load("./datasets")print(hdata.head())print(hdata.info())hdata["brand"].hist()#hdata.plot(kind="scatter", x="longitude", y="latitude")#hdata.hist(bins=50,figsize=(20,15))plt.show();
显示了hik,dah,yushi三个品牌的摄像头个数,很直观吧
数据清理
使用pandas DataFrame 属性中:
1 dropna() 函数
2 drop() 函数
3 fillna() 函数
median = data["people"].median()data["people"].fillna(median)
意思为将数据中为空的未曾统计的经过摄像头的数目都使用中位均值来代替。
数据预测
下面使用上一次我们使用的线性回归来预测经过某一个摄像头的人口流量
当然说明:所有数据都是模拟的,并且真实的预测并没有如此"线性",而是和很多因素有关。这里做简单的计算,和上一次不同的是使用多元线性回归。
import pandas as pdimport os import matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesimport numpy as np import sklearn.linear_modeldef load(path):csvpath = os.path.join(path,"camera.csv")return pd.read_csv(csvpath)plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=Falsehdata=load("./datasets")print(hdata.head())print(hdata.info())hdata["brand"].hist()#X = np.c_[hdata["longitude"]] + np.c_[hdata["latitude"]]#Y = np.c_[hdata["people"]]X = hdata.loc[:, ('longitude','latitude')]Y = hdata.loc[:, 'people']print(X)print(Y)"""多元线性"""model = sklearn.linear_model.LinearRegression()model.fit(X, Y)X_new = [[217,135]]print(model.predict(X_new))#hdata.plot(kind="scatter", x="longitude", y="latitude")#hdata.hist(bins=50,figsize=(20,15))plt.show();
预测出位置217,135在这个时间段的人口流量为281左右。