├── 波士顿房价预测 ├── Boston_Price_Predict.py ├── 回归分析.doc ├── 波士顿房价分析.ipynb ├── 波士顿房价分析报告.html └── 逻辑回归.docx ├── 足球运动员的特征分析 ├── 代码 │ └── SoccerAnalysis.py ├── 工程使用说明 └── 资源文件 │ ├── FullData.csv │ ├── 足球运动员的特征分析.ipynb │ └── 足球运动员的特征分析说明.html └── 项目说明 /波士顿房价预测/Boston_Price_Predict.py: -------------------------------------------------------------------------------- 1 | # 时间:2020.10.27 13点31分 2 | # 任务:波士顿房价预测 3 | # 目标:给定某地区的特征 4 | 5 | # 导入必要的库 6 | import numpy as np 7 | import matplotlib as mpl 8 | import matplotlib.pyplot as plt 9 | import pandas as pd 10 | import sklearn 11 | import sklearn.datasets 12 | 13 | # 设置 matplotlib 支持中文的显示 14 | plt.rcParams["font.family"]="SimHei" 15 | 16 | # 设置 matplotlib 支持负号的显示 17 | plt.rcParams["axes.unicode_minus"]=False 18 | 19 | #显示所有的列 20 | pd.set_option('display.max_columns', None) 21 | 22 | #显示所有的行 23 | pd.set_option('display.max_rows', None) 24 | 25 | #设置value的显示长度为100,默认为50 26 | pd.set_option('max_colwidth',100) 27 | # 获取需要分析的数据集,注意这里的load_boston()有括号,不然会报错 28 | boston_hoursing=sklearn.datasets.load_boston() 29 | 30 | # 导入数据集中的所有特征变量 31 | boston_feature=boston_hoursing.data 32 | #导入特征名 33 | boston_feature_name = boston_hoursing.feature_names 34 | 35 | # 导入数据集中的标签,也就是目标值:房价 36 | boston_target=boston_hoursing.target 37 | 38 | # 使用pandas设置要画出的内容框架:数据,列显示,标签值 39 | boston_hoursing_show=pd.DataFrame(boston_feature) 40 | boston_hoursing_show.columns=boston_feature_name 41 | boston_hoursing_show["Price"]=boston_target 42 | boston_hoursing_show.head() 43 | 44 | # 绘制价格与住宅面积的散点图 45 | plt.scatter(boston_hoursing_show.ZN,boston_hoursing_show.Price) 46 | plt.xlabel("住宅面积") 47 | plt.ylabel("住房价格") 48 | 49 | # 绘制价格与平均房间数的散点图 50 | plt.scatter(boston_hoursing_show.RM,boston_hoursing_show.Price) 51 | plt.xlabel("平均房间数") 52 | plt.ylabel("住房价格") 53 | 54 | # 绘制价格与到就业中心的加权平均距离的散点图 55 | plt.scatter(boston_hoursing_show.DIS,boston_hoursing_show.Price) 56 | plt.xlabel("到就业中心的加权平均距离") 57 | plt.ylabel("住房价格") 58 | 59 | # 绘制价格与高速公路的便利指数的散点图 60 | plt.scatter(boston_hoursing_show.RAD,boston_hoursing_show.Price) 61 | plt.xlabel("高速公路的便利指数") 62 | plt.ylabel("住房价格") 63 | 64 | # 绘制价格与犯罪率的散点图 65 | plt.scatter(boston_hoursing_show.CRIM,boston_hoursing_show.Price) 66 | plt.xlabel("犯罪率") 67 | plt.ylabel("住房价格") 68 | 69 | # 异常值处理:通过观测有16个目标值值为50.0的数据点需要被移除 70 | i_=[] 71 | for i in range(len(boston_target)): 72 | if boston_target[i] == 50: 73 | i_.append(i)#存储房价等于50 的异常值下标 74 | 75 | boston_feature = np.delete(boston_feature,i_,axis=0)#删除房价异常值数据 76 | boston_target = np.delete(boston_target,i_,axis=0)#删除异常值 77 | print("当前数据集中的特征数据的行数以及列数为:",np.shape(boston_feature)) 78 | print("当前数据集中的标签数据的行数为:",np.shape(boston_target)) 79 | 80 | # 将数据划分为测试机和训练集,测试样本30% 81 | from sklearn.model_selection import train_test_split 82 | boston_feature_train,boston_feature_test,boston_target_train,boston_target_test=train_test_split(boston_feature, 83 | boston_target, 84 | random_state=0, 85 | test_size=0.30) 86 | 87 | # 1.导入线性回归 88 | from sklearn.linear_model import LinearRegression 89 | 90 | # 2.创建模型:线性回归 91 | boston_model1 = LinearRegression() 92 | 93 | # 3.训练模型 94 | boston_model1.fit(boston_feature_train,boston_target_train) 95 | 96 | # 训练后的截距 97 | a1 = boston_model1.intercept_ 98 | # 训练后的回归系数 99 | b1 = boston_model1.coef_ 100 | print('最佳拟合线:截距a = ',a1,'\n回归系数b = ',b1) 101 | 102 | # 训练数据的预测值 103 | boston_feature_predict1=boston_model1.predict(boston_feature_train) 104 | for i, prediction in enumerate(boston_feature_predict1): 105 | print('Predicted: %s, Target: %s' % (prediction, boston_target_test[i])) 106 | 107 | # 模型评估 108 | accurucy_1=boston_model1.score(boston_feature_test , boston_target_test) 109 | print("模型的准确性为:",accurucy_1) 110 | 111 | # 逻辑回归 112 | # 1.导入逻辑回归 113 | from sklearn.linear_model import LogisticRegression 114 | 115 | # 2.创建模型:逻辑回归 116 | boston_model2 = LogisticRegression() 117 | 118 | # 3.数据处理 119 | for i in range(len(boston_feature_train)): 120 | print("boston_feature_train:",i,"boston_feature_train[i]:",boston_target_train[i]) 121 | for j in range(len(boston_feature_train[i])): 122 | boston_feature_train[i][j]=int(boston_feature_train[i][j]*1000) 123 | for i in range(len(boston_target_train)): 124 | print("boston_target_train:",i,"boston_target_train[i]:",boston_target_train[i]) 125 | boston_target_train[i]=int(boston_target_train[i]*1000) 126 | 127 | # 4.模型训练 128 | boston_model2.fit(boston_feature_train,boston_target_train) 129 | 130 | # 评估模型的准确率 131 | accurucy_2=boston_model2.score(boston_feature_test,boston_target_test) 132 | print("模型的准确性为:",accurucy_2) 133 | -------------------------------------------------------------------------------- /波士顿房价预测/回归分析.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeniusDog/MachineLearningProject/2b4ec40a44209e93da7d1c058fca22414ba88fd3/波士顿房价预测/回归分析.doc -------------------------------------------------------------------------------- /波士顿房价预测/逻辑回归.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeniusDog/MachineLearningProject/2b4ec40a44209e93da7d1c058fca22414ba88fd3/波士顿房价预测/逻辑回归.docx -------------------------------------------------------------------------------- /足球运动员的特征分析/代码/SoccerAnalysis.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 描述:足球运动员的特征分析小项目代码部分 3 | ''' 4 | 5 | # 导入分析需要用到的库 6 | import numpy as np 7 | import pandas as pd 8 | import matplotlib as mpl 9 | import mptplotlib.pyplot as plt 10 | 11 | # 设置 matplotlib 支持中文的显示 12 | mpl.rcParams["font.family"]="SimHei" 13 | 14 | # 设置 matplotlib 支持负号的显示 15 | mpl.rcParams["axes.unicode_minus"]=False 16 | 17 | # pandas 加载数据集FullData.csv,数据对象为player 18 | player=pd.read_csv(r"FullData.csv") 19 | 20 | # 显示当前所有列的数据集 21 | pd.set_option("max_columns",100) 22 | player.head() 23 | 24 | # 对数据集进行简单的数据查看:如缺失信息等 25 | # 通过info方法查看缺失信息(以及每列的类型信息) 26 | player.info() 27 | 28 | # 使用player对 Club_Position 属性这行非空的数据进行过滤,过滤完再传回给player 29 | player=player[player["Club_Position"].notnull()] 30 | player.info() 31 | 32 | # 查看异常值 33 | player.describe() 34 | 35 | # 查看是否包含重复值 36 | player.duplicated().any() 37 | 38 | # 如果包含重复值,调用下面这条语句,inplace=True 返回的结果在player上执行,不会生成新的对象 39 | # player.drop_duplicates(inplace=True) 40 | 41 | # 再次查看player对象,开始观察数据 42 | player.head() 43 | 44 | # 将 Height 中的cm替换成空格 45 | player["Height"]=player["Height"].map(lambda x:int(x.replace("cm",""))) 46 | # player["Height"]=player["Height"].str.replace("cm","").astype(np.int) 47 | 48 | # 将 Weight 中的kg替换成空格 49 | player["Weight"]=player["Weight"].map(lambda x:int(x.replace("kg",""))) 50 | # player["Weight"]=player["Weight"].str.replace("kg","").astype(np.int) 51 | 52 | 53 | # 再次查看player对象 54 | player.head() 55 | 56 | # 查看运动员身高,体重,评分信息的分布图:核密度估计图kde 57 | player[["Height","Weight","Rating"]].plot(kind="kde") 58 | 59 | # 足球运动员左脚和右脚上的偏差:统计情况 60 | player["Preffered_Foot"].value_counts() 61 | 62 | # 将上面左右脚的统计结果进行画图:条形图bar 63 | player["Preffered_Foot"].value_counts().plot(kind="bar") 64 | 65 | # 从球员的平均评分考虑:先根据Club分组,再获取Rating,然后对分组的内容进行计算 66 | s=player.groupby("Club")["Rating"].agg(["count","sum","mean"]) 67 | 68 | # 对结果s进行过滤,只需要前10的内容 69 | s=s[s["count"]>10] 70 | 71 | # 根据count将s进行降序排序,显示前十位的结果 72 | s.sort_values("count",ascending=False).head(10) 73 | 74 | # 根据mean将s进行降序排序,显示前十位的结果 75 | s.sort_values("mean",ascending=False).head(10) 76 | 77 | # 从球员的平均评分考虑:先根据Nationality分组,再获取Rating,然后对分组的内容进行计算 78 | s_Nationality=player.groupby("Nationality")["Rating"].agg(["count","sum","mean"]) 79 | 80 | # 对结果s进行过滤,只需要前10的内容 81 | s_Nationality=s_Nationality[s_Nationality["count"]>10] 82 | 83 | # 根据mean将s进行降序排序,显示前十位的结果 84 | s_Nationality.sort_values("mean",ascending=False).head(10) 85 | 86 | # 哪个俱乐部拥有5年及其以上的球员 87 | # 获取年份,并转化成数值类型 88 | year=player["Club_Joining"].map(lambda x:int(x.split("/")[-1])) 89 | # 除了用int()转化,也可以使用np.int转化 90 | # year=year.astype(np.int) 91 | 92 | # 获取5年以上球员的信息 93 | t=player[(2020-year) & (player["Club"] !="Free Agents")] 94 | 95 | # 将结果显示出来 96 | t["Club"].value_counts().head(10).plot(kind="bar") 97 | 98 | # 全体运动员的出生月份与评分是否有关系 99 | y=player["Birth_Date"].str.split("/",expand=True) 100 | y[0].value_counts().plot(kind="bar") 101 | 102 | # 知名运动员(评分80分以上为知名)的出生月份与评分是否有关系 103 | y_perfect=player[player["Rating"]>=80] 104 | y_perfect=player["Birth_Date"].str.split("/",expand=True) 105 | y_perfect[0].value_counts().plot(kind="bar") 106 | 107 | # 足球运动员的号码是否与位置有关 108 | # 去除替补球员和后备队球员 109 | t=player[(player["Club_Position"] != "Sub" ) & (player["Club_Position"] !="Res")] 110 | 111 | # 为了便于观察,将对应球员俱乐部的号码和位置进行分组 112 | x=t.groupby(["Club_Kit","Club_Position"]).size() 113 | x[x>50].plot(kind="bar") 114 | 115 | # 足球运动员的身高和体重是否有关联,散点图查看 116 | player.plot.scatter(x="Height",y="Weight") 117 | 118 | # 采用相关系数的方法,来观察哪些指标对数据集的影响大 119 | player.corr() 120 | 121 | # 假设不知到数据集中后两行的含义,由数据集的特征来推断GK_Handling 122 | #player.info() 123 | 124 | # 现根据 Club_Position 对其进行分组 125 | t=player.groupby("Club_Position") 126 | 127 | # 获取分组后GK_Handling的均值情况,条形图展示 128 | t["GK_Handling"].agg("mean").plot(kind="bar") 129 | 130 | # 假设不知到数据集中后两行的含义,由数据集的特征来推断GK_Reflexes 131 | #player.info() 132 | 133 | # 现根据 Club_Position 对其进行分组 134 | t=player.groupby("Club_Position") 135 | 136 | # 获取分组后GK_Handling的均值情况,条形图展示 137 | t["GK_Reflexes"].agg("mean").plot(kind="bar") 138 | 139 | # 观察年龄与评分之间的关系 140 | t=player[["Age","Rating"]] 141 | 142 | # 使用pandas将年龄Age进行离散化 143 | t["Age"]=pd.cut(player["Age"],bins=[0,20,30,40,60],labels=["小","中","大","很大"]) 144 | 145 | # 根据t的年龄进行分组,得到评分的均值 146 | t.groupby("Age")["Rating"].mean().plot(kind="line",xticks=[0,1,2,3,4],marker="o") 147 | -------------------------------------------------------------------------------- /足球运动员的特征分析/工程使用说明: -------------------------------------------------------------------------------- 1 | 足球运动员数据分析 2 | 该分析过程是对数据的一种 3 | 1.这篇文章主要是关于足球运动员数据集的一个分析,所作的工作仅是对数据的一个分析,重点在于熟悉python的数据分析方法 4 | 2.首先是对数据的预处理:缺失信息处理(过滤,补全),异常值处理,重复值处理 5 | 3.对想要调查的数据进行数据分析,画出相关的图:条形图bar,线性图line,散点图,核密度估计图kde 6 | 使用说明:下载文件(点击第三个下载Code按钮),打开 “足球运动员的特征分析说明.html” ,内含实验过程和分析数据内容 7 | SoccerAnalysis.py 包含该项目的代码部分 8 | FullData.csv 是需要使用的数据集 9 | 足球运动员的特征分析.ipynb 是ipynb文件 10 | -------------------------------------------------------------------------------- /项目说明: -------------------------------------------------------------------------------- 1 | MachineLearningProject 2 | 机器学习和数据挖掘的项目 3 | 1.足球运动员数据分析项目 4 | --------------------------------------------------------------------------------