如何重命名df:
方法一:r_cx.columns=["Frequency"] 这种重命名方法是直接修改原来的dataframe。但所有列名都需要重命名。
方法二: df.rename(columns={"oldName1": "newName1", "oldName2": "newName2"})
s_r=s.reset_index(drop=False)#.reset_index保留索引并对索引重新排序
1、分布分析
1、数量领域分布分析
第一步:极差:值越小,越稳定;值越大,越不稳定。
第二步:频数分布:分组区间pd.cut,确定每个区间的频数、频数、累积频数、累积频数
r_zj["累计频率%"]=r_zj["累计频率"].apply(lambda x:"%.2f%%" %(x*100))
r_zj.style.bar(subset=["频率","累计频率"])#表格样式
第三步:绘制直方图(区间)
x=len(r_zj) y=r_zj["频率"] m=r_zj["频率"]
for i,j,k in zip(range(x),y,m):#zip 可以有两个以上的值
plt.text(i-0.1,j+0.01,"%i"%k,颜色="k")
2. 定性字段分布分析
定性字段:除了与定量字段相同外,我们还需要制作饼图。
2. 对比分析
1、绝对值的比较:减法——相互比较的大小差异不能太大(1)折线图的比较(2)多系列条形图的比较(3)堆积图中正负数的比较
2、相对值比较:除法
(1)结构比较:也可以体现“强度”两个性质不同但有一定联系的总量指标的比较,用来说明“强度”、“密度”和“普遍程度”。例如:GDP“元/人”、人口密度“人/平方公里”
一个。各组在整体中所占的比例,反映整体的内部结构,b折线图
(2)比例比较:在分组的基础上比较整体不同部分的指标值,a消费/工资B.面积图
(3)空间比较(同时横向比较):同时比较不同空间内相似现象的指标值,反映不同空间内相似现象的差异程度以及现象发展的不平衡程度。一个。一个月四种产品内部销量对比b条形图
(4)纵向比较(不同时间):a计算累计增长、逐期增长,固定基数增长率=累计增长/基期水平-1,环比增长率=报告期/上期水平-1
b.折线图:比较同一现象在不同时间的指标值,反映现象数量随时间发展变化的程度和趋势。
# 最基本的方法,计算动态相对数发展速度
# 动态相对数(发展速度)=某现象报告期值/同一现象基期值
# 基期:用于比较的基期
# 报告期:要研究的期间,也称为计算期
3.统计分析:张密度图
定量数据的统计描述,从集中趋势和离散趋势两个方面:均值、众数、中位数、四分位数、方差
1.集中趋势:算术平均数、平均数、加权平均数、众数、中位数
2. 离散趋势:极差、分位数差.describe、方差、标准差.var
4. 帕累托分析
(1)首先将数值从大到小排序并绘制直方图
(2)计算累计比例data.cumsum()/data.sum()并绘制副轴折线图
(3)找到第一个大于80%的指数,即这个指数之前一直是80%。
(4) 找出该索引是哪个索引
5.正态分布
正态分布:均值决定位置,标准差决定分布幅度——越胖越离散,越瘦越集中;当平均值=0 时,标准分布
#浓度:峰值位于中心,即平均值所在的位置;对称性:以均值为中心,左右对称;均匀变异性:中间是主要分布点,周围区域会均匀减少;总面积=1
第一步:初步检查直方图:密度图,直方图+密度图
图=plt.figure(figsize=(10,6))
ax1=Fig.add_subplot(2,1,1)
ax1.scatter(s.index,s.values)
ax2=Fig.add_subplot(2,1,2)
s.hist(bins=20,ax=ax2)
s.plot(kind="kde",secondary_y=True,ax=ax2)
第二步:QQ图测试:即散点图。将值从小到大排序。横坐标为每个数据对应的百分位p(百分位p[i],p[i]=(i-0.5)/n);纵坐标为对应值;散点图是否在一条直线上(第三个四分位数- 第一个四分位数)。纵坐标也可以是(值-平均值)/标准差的q值,它是每个值标准化的结果;
st=s["值"].describe()
x1,y1=0.25,st["25%"] x2,y2=0.75,st["25%"]
ax3=图.add_subplot(3,1,3)
ax3.plot(s_r["p"],s_r["value"],"k.",alpha=0.1)--不指定图形,直接使用xy来绘制
ax1.plot([x1,x2],[y1,y2],"-r",color="R")
步骤3:K-s 检验
K_S检验:将样本数据的累积频率分布f(x)与理论分布g(x)(如正态分布)进行比较,f(x)-g(x)为最大值,p值0.05接受f(x), p0。 05拒绝f(x)并接受g(x)
1.#推导过程:(1)累积频数分布:次数、累积次数、累积频数(2)标准化值-将非正态分布转为正态分布:(值-均值u)/std标准差(3)检查标准正态分布,对应理论值(4) D=累积频率- 理论分布最大值(5) 将得到的最大值与显着性比较表进行比较,看p 值是否大于0.05。如果更大,则满足g(x)
2.#Direct K-s检验算法:(1)求均值和标准差(2)导入stats模块,stats.kstest(df["value"],"norm",(u,std))(3)统计是D值,pvalue是p值
从scipy 导入统计数据
stats.kstest(df["值"],"范数",(u,std))
6. 相关分布
1.相关性分析: (1)首先用简单散点法看相关性:两个变量:正相关、负相关b多变量相关分析:散点矩阵(二)
2.皮尔逊相关系数:必须满足正态分布。如果通过公式得到系数0.5,那就是相关的了。
(1)检验正态分布——K_S检验(2)如果符合正态分布,求系数:r=data["(x-u1)*(y-u2)"].sum()/(np.sqrt (data["(x-u1)**2"].sum() * data["(y-u2)**2"].sum()))--xy是多个变量的值( 3)通过r得到相关性
#pearson相关系数算法:data.corr()
3.sperman相关系数:适合非正态分布
(1) 将多个变量的列从小到大排序并列出“等级” (2) 求d=等级1 - 等级2 以及d 的平方(3) rs=1-6*(data[ "d2" ].sum())/(n*(n**2-1))其中n=len(数据)
Spearman相关系数算法:data.corr(method="spearman")
7. 数据处理
1.缺失值处理:删除记录、数据插值、不处理
(1)判断是否存在缺失值:isnull notnull 返回Boolean类型
(2)删除缺失值dropna
(3)填写缺失数据:fillna(method="pad"/"ffill"填充前=backfill/bfill填充后)
(4) 替换缺失数据:replace(old list, new, inplace)
2. 缺失值插补
(1)均值、中位数、众数插值
(2) 邻近值填充:fillna(method="pad"/"ffill" 填充前一个值=backfill/bfill 填充后一个值)
(3)拉格朗日插值法:数学知识平面上的n个点可以用多项式表示:y=a0+a1x1+a2x2+.+a(n-1)x(n-1),只求其值a0,a1.可以是
从scipy.interpolate 导入拉格朗日
x=[3, 6, 9] y=[10, 8, 4]
print(lagrange(x,y))#得到多项式方程,三个值为a0,a1,a2
打印(拉格朗日(x,y)(10))
df=pd.DataFrame({"x":np.arange(15)})
df["y"]=lagrange(x,y)(df["x"])#根据(x,y)的值插值新x的新y值
plt.plot(df["x"],df["y"],linestyle="--",color="k")
示例:#lagrange 实际应用
一个。用中位数填充缺失值并绘制密度图
b.不处理,绘制密度图——绘图时自动排除缺失值
c.lagerand插值:只对缺失值位置的前5个和后5个数据进行插值
def f(s,n,k=5):--s值,n缺失值位置,根据前后k个数据进行k插值
y=s[列表(范围(n-k,n+1+k))]
y=y[y.notnull()]
返回拉格朗日(y.index,列表(y))(n)
对于我在范围内(len(数据)):
如果data.isnull()[i]:
数据[i]=f(数据,i)
打印(f(数据,i))
data.dropna(inplace=True)
data.plot(kind="kde",ax=axes[3],style="--k",grid=True,)
3、异常值处理:异常值分析:箱线图/3西格玛原理;异常值处理方式:删除/修正填充
3 sigma 原则:如果数据服从正态分布,则离群值定义为偏离均值超过标准差3 倍的值(符合此规律的正态分布中的p(|x-u|3 sigma)=0.03原则)
步骤:(1)正态分布检验:k-s检验(2)绘制数据的密度曲线和+-3倍标准差的垂直线(3)找出异常值和正常值,并绘制散点图绘图错误=数据[ np.abs(data-u)3*std]data_c=数据[np.abs(data-u)=3*std]
箱线图- 比3 sigma 更准确(1) 绘制箱线图并确定是使用内限还是外限来定义缺失值(示例中使用内限) (2) 计算q1, q3 、iqr、内限(3)误差大于内限(q3+1.5*iqr)且小于内限(q1-1.5*iqr);正常值:(q1-1.5*iqr)和(q3+1.5*iqr)之间(4)绘制散点图
4. 数据标准化
(1)0-1归一化:比z-score更常用;
# 记录数据的最大值和最小值,并以Max-Min为基准对数据进行归一化(即Min=0,Max=1)
# x=(x - 最小值)/(最大值- 最小值)
def f(df,*列):
df_n=df.copy()
对于cols: 中的col
ma=df_n[col].max()
mi=df_n[col].min()
df_n[col+"_n"]=(df_n[col]-mi)/(ma-mi)
返回df_n
df_n=f(df,"值1","值2")
应用:value1的权重为0.6,value2的权重为0.4。确定哪个指标具有最佳的整体状况。
一个。标准化0-1处理b按权重计算综合指数并从大到小排序c绘制折线图
(2) z-score标准化:将样本从服从一般分布标准化为服从正态分布;值越大,离均值越远;在分类和聚类算法中,两个不同数据的相似性:平均水平、与平均趋势的距离
#Z分数(z-score)是分数与均值之差除以标准差的过程z=(x-)/,其中x是具体分数,是均值, 是标准差
#Z值的量表示原始值与平均值之间的距离,以标准差为单位计算。当原始分数低于平均值时,Z为负数,否则为正数。
def f_z(df,*列):
df_n=df.copy()
对于cols: 中的col
u=df_n[col].mean()
std=df_n[col].std()
df_n[col+"_zn"]=(df_n[col]-u)/std
返回df_n
f_z(df,"值1","值2")
5.数据连续属性的离散化
(1)等宽法:pd.cut(数据、划分、左右开闭、标签组名)
cats.codes#leveltags
cats.categories#各个值的范围
pd.value_counts(cats)#每个区间的频率
(2)等频法:pd.qcut()将相同数量的记录放入区间
3. 数学建模
np.random.RandomState 随机数种子。对于随机数生成器来说,只要种子(seed)相同,生成的随机数序列就相同。
监督学习:通过现有数据训练得到模型,样本值x,结果值y,包括回归-线性回归(得到具体的连续值)和分类-KNN最近邻分类(离散值),如:看病医生询问症状:回归是根据5个症状的描述来判断需要吃多少天的药;分类是根据已有的症状来判断你患有什么疾病;
无监督学习:没有结果值y,都是样本值(特征)x;进行聚类或降维- PCA 主成分分析、K 均值聚类
随机算法:蒙特卡罗模拟算法
监督学习-线性回归:指确定两个或多个变量之间相互依赖的定量关系的统计分析方法,分位数线性回归和非线性回归
监督学习-KNN近邻分类:在距离空间中,如果一个样本的K个近邻中的大多数属于某个类别,那么该样本也属于这个类别
无监督学习-PCA主成分分析:无监督算法+基本降维算法,将原始数据通过线性变换转化为一组各维度线性独立的表示,用于提取数据的主要特征成分
主成分分析:(是统计分析的中间步骤,但实际上是降维的结果)
降维:如果有100个维度降为10个维度,主要考虑的是如何提取核心特征,并通过核心特征来描述新的特征。
比如你现在做线性回归,你会发现有100个参数。如果直接进行回归拟合,曲线会非常复杂,甚至过拟合。
现在我们需要将100个参数改为10个参数作为回归量,需要用到主成分分析。
无监督学习-K-means聚类:典型的基于距离的聚类算法
K-means:一种基于原型和分区的距离技术,用于查找用户指定数量(k) 的簇
使用欧几里德距离作为相似性度量
随机算法——蒙特卡罗模拟:又称随机抽样、统计实验方法,一种利用随机数解决计算问题的方法。
将要解决的问题与一定的概率模型联系起来,利用计算机实施统计模拟或抽样,得到问题的相似解。
1.回归
#导入线性回归模块
从sklearn. Linear_model 导入LinearRegression
回归分为线性回归和非线性回归
1. 线性回归
np.random.RandomState(1) 随机数种子
x=[1,2,3]
将x改为3*1:x[:np.newaxis]
得到:[[1],
[2],
[3] ]
将x改为1*3:x[np.newaxis,]
获取:[[1,2,3]]
1.单变量线性回归https://www.cnblogs.com/nxld/p/6123239.htmlhttps://www.cnblogs.com/magle/p/5881170.html
(1)建立回归模型:model=LinearRegression()
(2)输入自变量x和因变量y:model.fit(xtrain[:np.newaxis],ytrain)--以矩阵形式传入
(3) 拟合结果:斜率model.coef_截距model.intercept_
(4)拟合曲线:xtest=np.linespace(0,10,1000) ytest=model.prdeict(xtest[:np.newaxis]) --预测方法
(5)绘制散点图和拟合直线
**错误:#错误:拟合线与实际值之间的差异符合均值为0且具有标准差的正态分布。
xtrain、ytrain:散点图; xtest、ytest:直线;
2. 多元线性回归
np.dot(a,b):如果ab是一维,则内积法求x1y1+x2y2+x3y3
若ab是多维,则用矩阵乘法求
3. 线性回归模型的评估
从sklearn 导入指标计算均方误差
#SSE和方差:拟合数据与原始数据之间的平方误差之和。越接近0,拟合越完全(回归线无法解释的偏差)
#MSE均方误差:拟合数据与原始数据之间的平均误差平方和mse=metrics.mean_absolute_error(ytrain,ytest)
#RMSE均方根:MSE的平方根rmse=np.sqrt(mse)
#R平方决定系数: (1) SSR拟合数据与原始数据均值之差的平方和(2) SST原始数据与均值之差的平方和(反映因变量值的整体波动)
#SST=SSE+SSR R-square=SSR/SST 取值范围[0,1]越接近1,拟合越好
R 平方: r 2=model.score(xtrain[:np.newaxis],ytrain)
#Summary:r2接近1(大于0.8就很好了),mse更小(哪个最适合多元回归模型)
#主成分分析中:如果回归模型1有10个参数,则r2=0.85;将10个参数降维为3个参数,成为三元回归模型2,r2=0.93,因此主成分分析后的回归模型比之前更好
应用示例: # 给定建筑面积和物业费,预测总价:总价=影响因子1*建筑面积+影响因子2*物业费+回归系数-截距
2.KNN最近邻分类
基于分类数据构建模型,对未分类数据进行分类。分类问题是用来给事物贴标签的,标签是离散值。
(1)导入KNN模块并定义模型(2)输入自变量x和因变量y(3)预测
KNN:将样本分为N类。每个类别在空间中都有一个点。查看新样本最接近哪个类别,并且属于该类别。
例如:打架次数x,接吻次数y,新样本xy分析其所属电影类型
a=[18,90]
knn.预测(a)
报告错误:ValueError: 需要2D 数组,却得到1D 数组: 数组=[18 90]。
如果数据具有单个特征,则使用array.reshape(-1, 1) 重塑数据;如果数据包含单个样本,则使用array.reshape(1, -1) 重塑数据。
答:https://www.jianshu.com/p/60596270e94e
新sklearn中的所有数据都必须是二维矩阵,即使是单行或单列,也必须使用reshape进行转换。
a=np.array(a).reshape(1,-1) #reshape 将数组重组为数组
1.从sklearn导入knn模块导入neighbors
进口警告
warnings.filterwarnings("忽略")
#忽略发出的警告
构建knn模型导入neighbors.KNeighborsClassifier()
knn.fit(x,y)
获取预测值:knn.predict() 注意:这里sklearn需要是二维矩阵
2.植物分类(算法模型中有很多数据库,比如植物、房价等)
从sklearn导入数据集
iris=datasets.load_iris() 花卉属性库
knn=neighbors.KNeighborsClassifier()
knn.fit(x,y)
knn.predict()
3.合并合并方法:
合并(左,右,如何="内部",上,左_上,右_上)
方式:内交集、外并集、左连接、右连接
on:要添加的索引或列,在left和right中找到
left_on: 左
科普:http://datahref.com/archives/169iris是一个鸢尾花数据集,其中包含150个样本,对应于数据集的每一行。每个样本包含四个特征和样本的类别。
3.PCA主成分分析
示例:1000 个样本的100 个(x1, x2.x100) 维度减少为10 个(a1, a1.a10) 维度
10个变量a1-a10各由100个变量组成,关系为a1b1+a2b2+.+a10b10
a1=e11x1+e12x2+.+e1100x100
a1 是新变量x1 是旧变量
这里e11是由100个原始变量x组成的变量a1的特征向量
b1 是a1 的新特征值
核心:这里的e11是由100个原始变量x组成的变量a1的特征向量。在降维之前,有几个维度的特征向量。
核心:b1是新a1的特征值,对应几个维度
b1.b10从大到小排序,并做累加和。当贡献率达到85%后,前几个就是主成分。
1.加载主成分分析模块PCA from sklearn.decomposition import PCA
2、降维n为:pca=PCA(n_components=1)
3.构建模型:pca.fit(原始数据)pca.explained_variance输出特征值b,pca.components_output特征向量e1,pca.n_components输出分量编号
4.返回降维后的数据:x_pca=pca.transform(df)
5、如果特征值b很多,则筛选出85%以上的主成分:
s=pca.explained_variance_
df=pd.DataFrame({"b":s,"b_sum":s.cumsum()/s.sum()})
4. 聚类K 均值
https://blog.csdn.net/kevinelstri/article/details/52622960
1、根据现有样本的距离划分,首先需要确定样本大致分为多少类(簇)。
例如:已有4个点,位于簇内;再添加几个点,根据它们的位置将它们划分在簇周围,并重新计算簇的位置;重复步骤2,直到所有簇不再发生变化;
缺点:需要提前决定划分多少个簇
2.from sklearn.datasets.samples_generator import make_blobs:make_blobs聚类数据生成器
x,y_true=make_blobs(n_samples=300, #创建XX条数据
center=4, #生成4类数据,类别数
cluster_std=0.5, #每个类别的方差,方差越小,越聚集,方差越大,越分散=[0.2,0.2,0.4,0.7]
random_state=0, #随机数种子
n_features=2)#默认每个样本特征数为2 #x生成数据值,y生成数据对应的类别标签(0,1,2,3) 3.导入K-means模型:from sklearn.cluster import KMeans 4.构建模型: kmeans = KMeans(n_cluster=4)分为多少类/簇 5.kmeans.fit(x) y_kmeans=kmeans.predict(x)生成每个数据聚类后的类别值0,1,2,3 6.cen = kmeans.cluster_centers获取几个不同簇的中心点 总结:#K-means聚类样本数据需要知道本身有多少类(簇n_clusters)才能K-Means分析,便于以后回归或分类5.随机算法:蒙特卡洛模拟
np.where(condition,xy,)当condition为true,返回x;否则返回y 1. π的计算-xy离中心点的距离是否下雨1,若小于就在园内,不小于在圆外:正方形面积4r方,圆面积πr平方,比值=4π;正方形随机点的数量/圆随机点的数量求出π (1)np.random.uniform(min,max,n)最小值,最大值,随机个数均匀分布 (2)判断xy是否在正方形内还是圆内:计算xy的点和中心点(0,0)的距离是否小于1 d = np.sqrt((x-a)**2+(y-b)**2) res = sum(np.where(d (3)#导入circle模块 from matplotlib.patches import Circle circle = Circle(xy=(a,b),radius=r,alpha=0.5,color="gray") #xy圆心 radius半径 axes.add_patch(circle) plt.grid(True,linestyle="--",linewidth="0.8") 2.积分问题:# 积分的计算:落到灰色领域多少个点 函数y=x的平方,所以只要值小于y=x的平方就可以 xi = np.linspace(0,1,100) yi = xi**2 plt.plot(xi,yi,"--k") plt.fill_between(xi,yi,0,color="gray",alpha=0.5,label="area") #填充图表【揭秘企业数据背后的秘密:专业数据分析师的职业之路】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
数据分析师的工作听起来很有意思!
有13位网友表示赞同!
想知道数据分析师每天都在做些什么?
有20位网友表示赞同!
最近一直在想学习数据分析,感觉很有挑战性。
有7位网友表示赞同!
做好数据分析师需要很强的逻辑思维能力吧?
有15位网友表示赞同!
数据分析师在科技行业应该非常受欢迎啊!
有18位网友表示赞同!
学习数据分析可以帮我在工作中更胜一筹吗?
有19位网友表示赞同!
有没有一些好的资料推荐,可以入门学习数据分析呢?
有9位网友表示赞同!
数据世界这么复杂,数据分析师们真是太厉害了!
有12位网友表示赞同!
数据分析师是不是需要编程能力呀?
有18位网友表示赞同!
希望未来有一天我能成为一名优秀的データ分析師!
有19位网友表示赞同!
学习数据分析需要时间和精力付出吗?
有20位网友表示赞同!
听起来数据分析能让你帮助公司做出更好的决策。
有18位网友表示赞同!
数据分析师的工作环境应该很现代吧?
有17位网友表示赞同!
想认识一些数据分析师,问问他们工作体验。
有16位网友表示赞同!
我比较好奇数据分析应用在不同的行业的情况。
有8位网友表示赞同!
数据分析是不是一个非常热门的专业?
有11位网友表示赞同!
有没有什么技能可以帮助我在数据分析方面的学习里加分?
有6位网友表示赞同!
数据分析师需要对很多工具很熟悉吗?
有12位网友表示赞同!
感觉做数据分析,自己也得喜欢看数字吧?
有17位网友表示赞同!
数据分析的未来发展趋势是什么呢?
有12位网友表示赞同!