#------------------------------------------------------------
# PCA讲解
#------------------------------------------------------------------
#1.导入可以进行PCA降维的库
from sklearn.decomposition import PCA
#2.先准备一下数据,这里我们用sklearn库自带的iris数据
from sklearn.datasets import load_iris
iris = load_iris()
iris.data #这是一个二维数组,里面只有具体数值,是一个4列的数据,每列是一个变量
iris.feature_names #4个变量的名字,是一个列表
#3.用PCA对我们的数据进行降维
#我们先实例化一个pca模型,对具体参数进行设定,比如n_compents,刚开始我们不知道提取几个主成分比较合适,我们不妨设为最大值4
PCA1=PCA(n_components=4)
#然后代入数据进行拟合
PCA1.fit(iris.data)
#如何查看各个主成分对原变量总体信息的解释比例呢?
PCA1.explained_variance_ #返回每个主成分对原信息解释的绝对值
PCA1.explained_variance_ratio_ #返回每个主成分对原信息的解释比例
#上面命令的结果为array([0.92461872, 0.05306648, 0.01710261, 0.00521218])
#可以看到第一个主成分的解释比例非常高,根据经验提取一个主成分就可以。如果你希望提取原数据更多信息,不妨提取两个主成分,
#具体提取几个只能自己根据经验和实际要求进行判断,比如我们最后决定提取两个
#就可以执行后面的命令
PCA2=PCA(n_components=2) #必须重新实例化这个模型,因为后面计算主成分的话可能会对矩阵进行旋转。
#然后传入数据进行模型拟合,这个fit_transform方法调用后会直接返回降维后的结果
#比如前面我们设定了n_components=2,也就是保留两个主成分,那么结果就会返回第一主成分和第二主成分的值
result1=PCA2.fit_transform(iris.data) #返回一个二维数组,两列数据。
#result1就是我们最终想要的降维后的主成分
#我们可以直接去拿这些主成分去建模,而不用使用原有的数据。

BOBOLEYOUYOU
2020-12-03
#导入库
from sklearn.decomposition import PCA
#PCA是一个类,我们用下面的命令查看PCA这个类的一些属性
help(PCA)
'''
class PCA(sklearn.decomposition.base._BasePCA)
| PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)
'''


#我们重点说明一下n_components这个参数的含义,这个参数的默认取值为None.
#给这个参数赋值的时候可以是一个整数,比如为3,则这个参数的意思是你提前前3个特征(主成分)。
#如果这个参数赋值的时候你赋值为0-1之间的一个浮点数比如0.8,则是指定让其选择前k个主成分,使得这k个主成分能包含原变量所有信息的0.8
在实际的应用中,我们通常会将这个参数值设定为多少呢?
其实这个是没有固定标准的,现在就说一下我发现的一些经验。
如果n_components这个参数你想设定为0-1之间的一个浮点数,统计学人通常会设定为80%,也就是要求包含的主成分对原变量能够解释80%。
如果n_components这个参数你想设定一个整数,你可以多试几次,比如第一次设定为5,然后看下能解释原变量的百分之多少,然后再逐步减少主成分的个数,比如设定为4试试,看下总解释程度是否明显降低。
BOBOLEYOUYOU
2020-11-30
静态类型语言
一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。
动态类型语言
一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。
强类型语言
一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。
弱类型语言
一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 '12' 和整数 3 进行连接得到字符串'123',然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。
夏光军
2020-11-28
con.cursor()表示返回连接的游标对象,通过游标执行SQL语句。con.commit()表示提交数据库修改语句,con.rollback()表示回滚,就是取消当前的操作,db.close()表示关闭连接
夏光军
2020-11-28
上面就是根据模型估计出来的系数算的可决系数,回归系数你是没有办法改变和自行设定的,他这个回归系数估计的时候就是使得残差平方和更小,你自己尝试的话不可能找到更好的回归系数的。
ermutuxia
2020-11-27
import pandas as pd
import numpy as np
data=pd.read_excel("D:\\360安全浏览器下载\\平方.xlsx")
colname=data.columns
for i in colname:
print(i)
data[str(i)+"_平方"]=data.loc[:,i].map(lambda x :x**2)
wangxishi
2020-11-27
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 23 11:01:18 2020
@author: Administrator
"""
#导入库
import pandas
import matplotlib.pyplot as plt
import xlrd
path="D:\\360安全浏览器下载\\PGC_问答站-趋势分析(2020-10-29至2020-11-27).xls"
#导入数据
#在这里没有采用常规的导入方法,比如read_excel第一个参数直接设定为excel路径,是因为
#我们所用的这个excel文件的编码方式比较特殊,必须指定编码方式才能正确导入
#而pd.read_excel函数不支持编码参数encoding设定,所以我们用这种方式对pd.read_excel函数第一个参数io进行赋值
data=pd.read_excel(xlrd.open_workbook(path,encoding_override="GB2312"),sheet_name='趋势分析',skiprows=4,skipfooter=2)
#把2020年11月份的数据筛出来。
needdata=data[data["时段"].str.find("2020-11")!=-1].loc[:,["时段","独立访客"]]
#把时段变量变成日期格式
needdata["时段"]=needdata["时段"].map(lambda x:pd.Timestamp(x))
#对数据进行重新排序和重设索引
needdata.sort_values(by="时段",inplace=True)
needdata.reset_index(inplace=True,drop=True)
needdata["星期几"]=needdata["时段"].map(lambda x:x.dayofweek)+1
needdata["是否为工作日"]=needdata["星期几"]<6
#接下来计算本月剩余天数每天的平均进度,以便完成老板规定的本月目标
#如果最后一天的数据还没有统计完,还需要去掉最后一天的数据
needdata=needdata.iloc[0:-1,:]
本月天数=30
本月每日目标=800
本月目标=本月每日目标*30 #24000
本月已完成部分=needdata["独立访客"].sum()
本月已过工作日天数=needdata["时段"][needdata["是否为工作日"]].count()
本月已过周末天数=needdata["时段"][needdata["是否为工作日"]==False].count()
本月已过天数=needdata.shape[0]
本月平均每日完成=本月已完成部分/本月已过天数
本月平均每个工作日完成=needdata["独立访客"][needdata["是否为工作日"]].sum()/本月已过工作日天数
本月平均每个周末日完成=needdata["独立访客"][needdata["是否为工作日"]==False].sum()/本月已过周末天数
本月剩余天数=本月天数-本月已过天数
本月未完成部分=本月目标-本月已完成部分
本月未完成部分的任务分配到每天=本月未完成部分/本月剩余天数
print("本月天数:",本月天数)
print("本月每日目标:",本月每日目标)
print("本月目标:",本月目标)
print("本月已完成部分:",本月已完成部分)
print("本月已过天数",本月已过天数)
print("本月平均每日完成",本月平均每日完成)
print("本月平均每个工作日完成:",本月平均每个工作日完成)
print("本月平均每个周末日完成:",本月平均每个周末日完成)
print("本月未完成部分:",本月未完成部分)
print("本月剩余天数:",本月剩余天数)
print("本月未完成部分的任务分配到每天",本月未完成部分的任务分配到每天)ermutuxia
2020-11-27
针对你上面这个问题:
怎么看回归模型的R方呢
你可以看下我写的这个帖子:
https://www.pinggu.com/post/details/5fbf74ba0afef507eb9689ff
wangxishi
2020-11-26
针对你上面这个问题:
我想实现画图出来看到每个点的值,怎么实现呢
你可以看下我写的这个帖子:
https://www.pinggu.com/post/details/5fbf6e6b6e1c01077c785069
wangxishi
2020-11-26
好的,我试试呀。
ermutuxia
2020-11-26
是不是安装路径有中文导致的问题?
ermutuxia
2020-11-26