数据分析-统计

我做了一个导航站(域名是挂路灯的全拼gualudeng.com),里面精选了各种影视,动漫,黑科技,实用工具,搞笑有趣的站点,动动大家可爱的小手,点进来看看吧,良心站点。 

#coding=utf-8
import numpy as np
import pandas as pd
from copy import copy
import matplotlib
import statsmodels.api as sm
from scipy import stats
import matplotlib.pyplot as plt
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.sandbox.stats.runs import runstest_1samp
from Apriori_ath.Apriori import *
import fp_growth as fp
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale
from sklearn.decomposition import FactorAnalysis
#帮助函数
np.set_printoptions(suppress=True)
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
'''
a=pd.Series([1,2,3])
print(dir(a))
print(help(a.append))
print (type(a))
'''
      
#换行问题
'''
a = [1,2,3,5,8,4,5,6,9,8,7,4,5,
     5,6,5,4,5,4,5,4,5,45,4,5,4,5,4] #在[].{}.()中可以直接回车换行
a = "adsadsadsa\
dafssdsds"
print(a)
'''

#赋值问题
'''
a = [1,2,3]
b=a #传的是地址 
#解决办法
#b = copy(a)
c = [5,6]
b.append(c)
print(a)
c.append(7)
print(a)
'''

#数据类型
'''
a = 5.25
print(int(a))
print(type(str(a)))
print(repr(a))
print(eval('2+8'))
'''

#字符串
'''
a = '"hello world"'
print(a)
a = a+"."*10
print(a)
a="as5s55"
a="asdasdsa\\"
print(a.isalnum())
a="dada"
print(a.isalpha())
a="11111"
print(a.isnumeric())
print(a.replace('1','3'))
'''

#数据结构
'''
a = [1,2,3,4,5,6]
print(a[::-1])
print(a[::2])
b = [7,8,9]
print(a+b)
print(b*2)
print(2 in a)
print(max(a))
for i,j in enumerate(a):
    print (i,j)
b1 = ['a','b','c']
for i in zip(b1,b):#生成的是迭代器
    print(i)

b = b1.copy()
b.append([1,2])
print(b1)    

b.extend([1,2])
print(b)    
print (b.index('b'))
print(b.remove('b'))
print(b)

a = {'a':1,'b':2,'c':3}
print(a.keys(),a.values())
'''

#局部变量与全局变量
'''
total=0
def func():
    
    #total = 3
    #print(total)
    
    global total
    total=5
    print(total)
func()
print(total)
'''
    
#numpy 数组合并
'''
a = np.array(np.arange(1,10,1).reshape(3,3))
b = np.array(np.arange(11,20,1).reshape(3,3))
print (np.concatenate((a,b),axis=0))
print(a.ravel())
print(a+b)

#可广播数组
x,y = np.ogrid[1:10,0:5]  #相当于确定想x,y的定义域
x1,y1=np.meshgrid(np.arange(1,10,1),np.arange(0,5,1))
# print (x,y)
# print(x1,y1)
z = x+y
z1=x1+y1
print(z)
print(z1)
'''

#描述统计
#偏度
'''
a = pd.Series([1,2,5,8,6,9,7,8])
print(a.skew()) #左偏
#峰度
print(a.kurt())
'''

#单总体均值区间估计
'''
data = np.random.normal(0,1,10000)
print (np.var(data),np.mean(data))
print (sm.stats.DescrStatsW(data).zconfint_mean(alpha=0.05))
print (sm.stats.DescrStatsW(data).tconfint_mean(alpha=0.05))
mean,var,std = stats.bayes_mvs(data,alpha=0.05)
print(mean)
'''

#正态单总体方差,均值,标准差区间估计.
'''
data = np.random.normal(0,1,10000)
mean,var,std = stats.bayes_mvs(data,alpha=0.05)
print(mean,var,std)
'''
#单总体比例参数估计
'''
print(sm.stats.proportion_confint(95,100,alpha=0.01,method='normal'))
'''

#单总体均值的z假设检验
'''
data = pd.read_csv('moisture.csv')
plt.hist(data.moisture,bins=40)
plt.show()
#样本数大于30个可以用z统计量检验
#原假设u<=4
print(sm.stats.DescrStatsW(data.moisture).ztest_mean(value=4,alternative='larger'))
#alternative='larger'表示备择假设为u>4
#P>0.05 则接受原假设
'''

#单总体均值的t假设检验
'''
data = pd.read_csv('mobile.csv')
#原假设 u<=82
print(sm.stats.DescrStatsW(data.csi).ttest_mean(value=82,alternative='larger'))
#t统计量为-0.68,p=0.75>0.05所以接受原假设。样本均值小于82
'''

#单总体比例假设检验

#原假设p<=0.97
#print(sm.stats.proportions_ztest(95,100,value=0.97,alternative='larger'))
#p值0.82>0.05 所以接受原假设,总体正确率低于97%


#两独立总体假设检验

#原假设两个参数总体的均值相等
'''
data = pd.read_csv('battery.csv')
print (data.tech.value_counts())
#绘制两个总体的箱线图
arr=[]
for i in set(data.tech):
    arr.append(list(data[data.tech==i]['Endurance']))
plt.boxplot(x=arr,labels=set(data.tech))    
plt.show() 
#首先判断两个总体的方差是否有显著差异
print("两者描述",data.groupby('tech').describe())
print (stats.levene(data[data['tech']==1]['Endurance'],data[data['tech']==2]['Endurance']))   
#p=0.218>0.05所以认为方差相等。
#在此基础上开始进行t检验
print(stats.ttest_ind(data[data['tech']==1]['Endurance'],data[data['tech']==2]['Endurance']
                      ,equal_var=True))
#p=0.0038<0.05 所以认为均值不相等,两个总体的均值具有显著差异


#两个总体均值差值检验
print(sm.stats.ttest_ind(data[data['tech']==1]['Endurance'],data[data['tech']==2]['Endurance']
                   ,alternative='smaller',value=0.1))
#原假设 u1-u2<=-0.1结果p=4.66e-05<0.05所以拒绝原假设。即u2-u1>0.1
'''


#方差分析 相当于多个总体均值相等的假设检验
'''
data = pd.read_csv('dc_sales.csv')

#单因素方差分析
#数据分组
group = data.pixel.unique()
arr=[]
for i in group:
    arr.append(data[data['pixel']==i]['sales'].values)

#方差同质性检验
print(stats.levene(*arr))
#*的作用。print(stats.levene(arr[0],arr[1],arr[2],arr[3],arr[4]))
#p值大于0.05表示方差同质
print(stats.f_oneway(*arr))
#p值<0.05说明样本间有显著性差异
#下面的本质是一样的
print(stats.f_oneway(arr[0],arr[1]))
print(stats.ttest_ind(arr[0],arr[1],equal_var=True))



#下面找出哪一个分组对销量的影响是显著的
#多重比较检验(其实就是两两方差分析)
res = pairwise_tukeyhsd(data['sales'],data.pixel,alpha=0.05)
print(res.summary())
#可以看出第2组和第5组是造成差异的主要因素
'''



#非参数检验
'''
data = pd.read_csv('water.csv')
print(sm.stats.DescrStatsW(data.Net).ztest_mean(value=600,alternative='smaller'))
#z检验说明不合格
print(sm.stats.DescrStatsW(data.Net).ttest_mean(value=600,alternative='smaller'))
'''

#分布的检验
#检验下面的数据是否服从正态分布
'''
data = pd.read_csv('ks.csv')
print(sm.stats.diagnostic.kstest_normal(data.observation))
#p值小于0.05可以认为是不服从正态分布的
#绘图
plt.hist(data.observation,bins=50)
plt.show()

#测试
data = np.random.normal(0,1,500)
print(sm.stats.diagnostic.kstest_normal(data))
plt.hist(data,bins=100)
plt.show()
'''


#游程检验(样本是否是随机的)
'''
data = pd.read_csv('runs.csv')
print(runstest_1samp(np.asarray(data.economics),cutoff='median'))
#具有随机性
print(runstest_1samp(np.asarray(data.statistics),cutoff='mean'))
#p=0.053>0.05也具有随机性
'''


#相关分析
'''
data = pd.read_csv('car_corr.csv')
print(data.corr())
'''

#点二列相关性分析
'''
data = pd.read_csv('scorebygender.csv')
#先方差分析
print(stats.f_oneway(data[data['gender']==0]['score'],data[data['gender']==1]['score']))
#p=0.87>0.05所以男女之间的成绩没有明显差异
#点二列相关分析
print(stats.pointbiserialr(data['gender'],data['score'])) #第一个参数要求是0.1型数据
#两种方式的结果竟然一样。NB
'''

#离散型数据相关性分析
'''
data = pd.read_csv('graduate.csv') #注意数字的大小要表示程度的大小
print(data.head())
s,p = stats.spearmanr(data)
print("相关系数",s)
print("p值",p)
print((data.Teaching-data.Tutor).sum()/len(data.Major))
'''

#关联项分析
#Aprori算法
'''
data_set = load_data_set()  #算法自带测试数据
L, support_data = Generate_L(data_set, 5, 0.2) 
#返回的L是所有长度小于等于3的频繁项集,支持度为0.2
#support_data是每一个频繁项集对应的支持度

rule_list = Generate_Rule(L, support_data, 0.7)
#返回置信度为0.7以上的关联规则
print(L)
print(rule_list)
'''

'''
for Lk in L:
    print("="*55)
    print("frequent " + str(len(list(Lk)[0])) + "-itemsets\t\t支持度")
    print("="*55)
    for frequent_set in Lk:
        print(frequent_set, support_data[frequent_set])
print()
print("Rules")
for item in rule_list:
    print(item[0], "=>", item[1], "置信度: ", item[2])
'''

#fp_growth算法
'''
dataset = [['e1', 'e2', 'e5'], 
                ['e2', 'e4'],
                ['e2', 'e3'],
                ['e1', 'e2', 'e4'],
                ['e1', 'e3'],
                ['e2', 'e3'],
                ['e1', 'e3'],
                ['e1', 'e2', 'e3', 'e5'],
                ['e1', 'e2', 'e3']]

support = 0.2*len(dataset) #支持度为0.4
frequent_itemsets = fp.find_frequent_itemsets(
    dataset, minimum_support=support, include_support=True)
#注意minimum_support参数支持度是个数,你可以把它转换为比例
#这个算法不能控制频繁项的长度,上一个算法可以.
'''


#打印频繁项集
'''
print(type(frequent_itemsets))   # 返回的是一个迭代器
for itemset, support in frequent_itemsets:    # 将generator结果存入list
    print((itemset,"置信度:",support/len(dataset)))    
'''
#生成关联规则
#print(fp.Generate_Rule(frequent_itemsets,0.7,len(dataset)))  #第一个参数是迭代器


#pca主成分分析
'''
data = pd.read_csv('live.csv',encoding='gb2312')
model = PCA(n_components=7,whiten=True)#whiten表示数据标准化
column = data.District
print(column)
res = model.fit(scale(data.iloc[:,1:8]))

#print(res.explained_variance_ratio_)#贡献率发现前两个主成分的贡献率高,所以降为2维数据
#降为经济生活,和就业两个主成分
#print(res.components_)#主成分载荷
new_data = res.transform(scale(data.iloc[:,1:8]))
#print("主成分得分:",new_data[:,:2])
plt.scatter(new_data[:,0],new_data[:,1])
j=0
for i in column.values:
    plt.text(new_data[:,0][j],new_data[:,1][j],column.values[j])
    j=j+1
plt.xlabel(u"经济生活")
plt.ylabel(u"就业形式")
plt.show()#由图可以看出北京的经济生活和就业形式都比较好
'''   
    
    
#因子分析
'''
data = pd.read_csv('internet_cafe.csv')
data = data.iloc[:,1:len(data.columns)]
res = FactorAnalysis(n_components=2).fit(scale(data))
print("因子载荷:",res.components_)
print("数据在两个因子上的得分:",res.transform(scale(data)))#两个因子分别是人员服务质量和技术质量
'''

文件包地址 链接:https://pan.baidu.com/s/1lNYGwfqRYUkGPdIiSzLhWA 
提取码:dxtg 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值