# -*- coding: utf-8 -*-
"""
Created on Fri Oct  4 20:41:20 2019@author: shenlong
"""import osimport numpy as npimport matplotlib.pyplot as pltimport pandas as pd"""代码说明:programmer_1: 制作箱线图data.boxplot-->数据转为箱线图的字典格式plt.annotate-->绘图programmer_2: 计算数据range-->极差var-->方差dis-->四分距programmer_3: 画出盈利图(比例和数值)programmer_4: 计算成对相关性data.corr()-->dataframe中相互之间的相关性data.corr()[u'百合酱蒸凤爪'] -->dataframe某一项与其他项的相关性"""def programmer_1(file_name):catering_sale = file_namedata = pd.read_excel(catering_sale, index_col=u'日期')plt.figure()# 画箱线图p = data.boxplot(return_type='dict')x = p['fliers'][0].get_xdata()y = p['fliers'][0].get_ydata()y = np.sort(y)for i in range(len(x)):# 处理临界情况, i=0时temp = y[i] - y[i - 1] if i != 0 else -78 / 3# 添加注释, xy指定标注数据,xytext指定标注的位置(所以需要特殊处理)plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.05 - 0.8 / temp, y[i]))plt.show()def programmer_2(file_name):catering_sale = file_namedata = pd.read_excel(catering_sale, index_col=u'日期')data = data[(data[u'销量'] > 400) & data[u'销量'] < 5000]statistics = data.describe()[u'销量']statistics['range'] = statistics['max'] - statistics['min']statistics['var'] = statistics['std'] / statistics['mean']statistics['dis'] = statistics['75%'] - statistics['25%']print(statistics)def programmer_3(file_name):dish_profit = file_name  #餐饮菜品盈利数据data = pd.read_excel(dish_profit, index_col=u'菜品名')data = data[u'盈利'].copy()data.sort_values(ascending=False)plt.figure()data.plot(kind='bar')plt.ylabel(u'盈利(元)')p = 1.0 * data.cumsum() / data.sum()p.plot(color='r', secondary_y=True, style='-o', linewidth=2)plt.annotate(format(p[6], '.4%'),xy=(6, p[6]),xytext=(6 * 0.9, p[6] * 0.9),arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))plt.ylabel(u'盈利(比例)')plt.show()def programmer_4(file_name):catering_sale = file_namedata = pd.read_excel(catering_sale, index_col=u'日期')data.corr()data.corr()[u'百合酱蒸凤爪']data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])if __name__ == "__main__":path = os.getcwd()# programmer_1(path + '/data/catering_sale.xls')# programmer_2(path + '/data/catering_sale.xls')# programmer_3(path + '/data/catering_dish_profit.xls')# programmer_4(path + '/data/catering_sale_all.xls')pass
import pandas as pd
import numpy as np
'''
#餐饮数据
catering_sale='catering_sale.xls'#将文件路径命名
#读取数据,指定日期为索引列
df=pd.read_excel(catering_sale,index_col=u'日期')
#首先可以先使用describe()函数查看数据的基本情况:
df.describe()
#检测异常值的方法可以使用箱型图:
import matplotlib.pyplot as plt
# 用来正常显示中文标签
# plt.rcParams['dont.sans-serif'] = ['SimHei']
plt.rcParams['font.sans-serif'] = ['SimHei']    # 用来正常显示中文标签
# # 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
plt.figure()
'''
'''
画箱型图,这里画箱型图有两种方法:
1. 一种是直接调用DataFrame的boxplot();
2. 另一种是调用Series或者DataFrame的plot()方法,并用kind参数指定箱型图(box);
'''
'''
p = df.boxplot(return_type='dict')
# 'flies'即为异常值的标签
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
for i in range(len(x)):if i > 0:plt.annotate(y[i],xy = (x[i],y[i]), xytext = (x[i]+0.05-0.8/(y[i]-y[i-1]),y[i]))else:plt.annotate(y[i],xy = (x[i],y[i]),xytext = (x[i]+0.08,y[i]))
plt.show()'''
'''
上下的两个标线表示的是上界和下界(四分位点),超过上下界的值就是异常,但是那其中
几个散点离上下界比较近,所以可以把865,4060.3,4065.2归为正常值,将22,51,60,6607.4,9106.44归为异常值;
'''
'''
#找到异常值
'''
'''数据特征分析
对于定量数据可以通过绘制频率分布表,绘制频率分布直方图,茎叶图的方式进行直观的分析;
对于定性分类的数据,可以使用饼图和条形图的方式来查看显示分布情况;
统计量分析
极差反映了最大值和最小值的分布情况;
标准差用来度量数据偏离均值的程度;
变异系数度量标准差相对于均值的离中趋势;四分位数间距表示上下四分位数之差,越大表示变异程度越大;
'''
'''
# 过滤异常数据
df = df[(df[u'销量'] > 400)&(df[u'销量'] < 5000)]
statistics = df.describe()
print('过滤掉异常数据之后的数据情况:\n',statistics)
# 极差
statistics.loc['range'] = statistics.loc['max'] - statistics.loc['min']
print('极差是:\n',statistics.loc['range'])
# 变异系数
statistics.loc['var'] = statistics.loc['std'] / statistics.loc['mean']
print('变异系数是:\n',statistics.loc['var'])
# 四分位数间距
statistics.loc['dis'] = statistics.loc['75%'] - statistics.loc['25%']
print('四分位数间距:\n',statistics.loc['dis'])
#贡献度分析
# 初始化参数
dish_profit = 'catering_dish_profit.xls'
df = pd.read_excel(dish_profit,index_col = u'菜品名')
df = df[u'盈利'].copy()
# 表示按降序排列
df.sort_values(ascending=False)
# 导入图像库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']    # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   #用来正常显示负号plt.figure()
# 显示直方图
df.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0 * df.cumsum()/df.sum()
p.plot(color = 'r',secondary_y=True,style='-o',linewidth=2)
# 添加注释,即85%处的标记,这里包括了指定箭头样式
plt.annotate(format(p[6],'.4%'),xy=(6,p[6]),xytext=(6*0.9,p[6]*0.9),arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))plt.show()
# 相关性分析
catering_sale = 'catering_sale_all.xls'
# 读取数据,指定'日期'列为索引列
data = pd.read_excel(catering_sale,index_col = u'日期')
# 相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()
# 只显示"百合酱蒸风爪"与其他菜式的相关系数
data.corr()[u'百合酱蒸凤爪']
# 计算两者的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])
#计算两个列向量的相关系数:
# 计算两个列的相关系数
# 生成样本D,一行为1-7,一行为2-8
'''
D = pd.DataFrame([range(1,8),range(2,9)])
print(D)
# 提取第一行
S1 = D.loc[0]
print(S1)
# 提取第二行
S2 = D.loc[1]
print(S2)
# 计算S1,S2的相关系数:有person(皮尔逊系数),kendall(肯德尔系数),spearman(斯皮尔曼系数)
print(S1.corr(S2,method='pearson'))
print(S1.corr(S2,method='kendall'))
print(S1.corr(S2,method='spearman'))# 计算协方差矩阵D = pd.DataFrame(np.random.randn(6,5)) # 产生6*5的随机矩阵
print(D.cov()) #计算协方差矩阵
print('第一列和第二列的协方差:\n',D[0].cov(D[1]))  # 计算第一列和第二列的协方差# 计算 6 * 5 随机矩阵的偏度(三阶矩)/峰度(四阶矩)D = pd.DataFrame(np.random.randn(6,5)) # 产生6*5的随机矩阵
# 偏度:通过对偏度系数的测量,我们能够判定数据分布的不对称程度以及方向
print('偏度:\n',D.skew())
# 峰度:是研究数据分布陡峭或平滑的统计量,通过对峰度系数的测量,我们能够判定数据分布相对于正态分布而言是更陡峭还是平缓。
print('峰度:\n',D.kurt())#统计特征函数
# 使用cumsum来获取某一列的前n项和
D = pd.Series(range(0,20)) # 构造Series,内容为0-19共20个整数
print(D)
print('前n项和:\n',D.cumsum(0)) # 给出前n项和
# 问题:当其大于列数时,表示什么意思呢?#绘图函数
#直线
import matplotlib.pyplot as plt # 导入作图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize = (7,5)) # 创建图像区域,指定比例
import numpy as np
#设置起点,终点和步长
x = np.linspace(0, 2*np.pi, 50)  # x坐标输入
y = np.sin(x) # 计算对应x的正弦值
plt.plot(x, y, 'bp--') # 控制图形格式为蓝色带星虚线,显示正弦曲线
plt.legend()
plt.title('6不6')
plt.xlabel('游戏人生')
plt.ylabel('努力加油')
plt.show()#饼图
import matplotlib.pyplot as plt
labels = 'Frogs','Hogs','Dogs','Logs' # 定义标签
sizes = [15, 30, 45, 10] #每一块的比例
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'] #每一块的颜色
#explode = (0,0.09,0,0) # 突出显示,这里仅仅突出第二块
explode = (0,0.09,0,0.09) # 突出显示,这里仅仅突出第二块
plt.pie(sizes,explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',shadow=True, startangle=90)
plt.axis('equal') #显示为圆(避免比例压缩为椭圆)
plt.title('西瓜圆不圆')
plt.show()#直方图
import matplotlib.pyplot as plt
import numpy as np
seed=np.random.seed(10)#这样即便设置随机数,这个图也不会乱变了
x = np.random.randn(1000) # 1000个服从正态分布的随机数
plt.hist(x, 10) # 分成10组进行绘制直方图
plt.show()#绘制箱型图
'''
绘制箱型图的两种方法:
1. 直接调用DataFrame的boxplot()方法;
2. 调用Series或者DataFrame的plot()方法,并用kind参数指定箱型图(box);
'''
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
seed_=np.random.seed(100)
x = np.random.randn(1000) # 1000个服从正态分布的随机数
D = pd.DataFrame([x,x+1]).T # 构造两列的DataFrame
D.plot(kind = 'box') # 调用Series内置的作图方法画图,用kind参数指定箱型图box
plt.title('人生苦短,我用python')
plt.show()#折线图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号import numpy as np
import pandas as pd
# np.arange()返回一个ndarray而不是一个列表
x = pd.Series(np.exp(np.arange(20))) # 原始数据
# 对图像左上方做好标记
x.plot(label = u'原始数据图',legend = True)
plt.show()
x.plot(logy = True, label = u'对数数据图',legend = True)
plt.show()#绘制误差图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号import numpy as np
import pandas as pd
np.random.seed(11)
error = np.random.randn(10) # 定义误差列
y = pd.Series(np.sin(np.arange(10))) #均值数据列
y.plot(yerr = error) #绘制误差图
plt.show()#数据预处理'''
数据清洗
缺失值处理
缺失值处理一般采用:均值/中位数/众数插补,使用固定值,最近邻值插补,回归法,插值法
拉格朗日插值:
'''
# 用拉格朗日法进行插补
import pandas as pd
from scipy.interpolate import lagrange # 导入拉格朗日函数
import xlwt
inputfile = 'catering_sale.xls' # 销售数据路径
outputfile = './sales.xls' # 输出数据路径
data = pd.read_excel(inputfile) # 读入数据
data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None # 过滤异常值,将其变为空值# 自定义列向量插值函数
# s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):y = s[list(range(n-k,n)) + list(range(n+1, n+1+k))] # 取数y = y[y.notnull()] # 剔除空值return lagrange(y.index, list(y))(n) # 插值并返回插值结果# 逐个元素判断是否需要插值
for i in data.columns:for j in range(len(data)):if (data[i].isnull())[j]: #如果为空即插值data[i][j] = ployinterp_column(data[i],j)data.to_excel(outputfile) # 输出结果, 写入文件
#数据结构
#函数
#循环
#用好这三点,一门语言基本就是学会了
#数据变换
#数据归一化
# 数据规范化
import pandas as pd
import numpy as np
datafile = 'normalization_data.xls' #参数初始化
data = pd.read_excel(datafile,header = None) # 读取数据
(data - data.min())/(data.max() - data.min()) # 最小-最大规范化
(data - data.mean())/data.std() # 零-均值规范化
data/10**np.ceil(np.log10(data.abs().max())) # 小数定标规范化#数据离散化(聚类)
#等宽法,等频法,基于聚类分析的方法;def cluster_plot(d, k):  # 自定义作图函数来显示聚类结果import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号plt.figure(figsize = (8, 3))for j in range(0, k):plt.plot(data[d==j], [j for i in d[d==j]], 'o')plt.ylim(-0.5, k-0.5)return plt# 数据离散化:根据某列的数值来进行分组
import pandas as pd
datafile = './data/discretization_data.xls' #参数初始化
data = pd.read_excel(datafile) # 读取数据
data = data[u'肝气郁结证型系数'].copy()
k = 4
# 1. 等宽离散化,各个类别依次命名为0,1,2,3
d1 = pd.cut(data, k, labels= range(k))
# 2. 等频率离散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1] # 使用describe函数自动计算分位数
w[0] = w[0] * (1-1e-10)
d2 = pd.cut(data, w, labels = range(k))# 3. 基于聚类分析的方法
from sklearn.cluster import KMeans # 引入KMeans
kmodel = KMeans(n_clusters = k, n_jobs = 4) # 建立模型,n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data.values.reshape((len(data), 1)))
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(by=0) # 输出聚类中心,并且排序(默认随机排序)# # python3中没有rolling_mean的方法,需要将其改为rolling.mean
w = c.rolling(2).mean().iloc[1:]
# w[0]
# .mean(2).iloc[1:] # 相邻两项求中点,作为边界点
w = [0] + list(w[0]) + [data.max()] # 把首末边界点加上
d3 = pd.cut(data, w, labels = range(k))cluster_plot(d1, k).show()
cluster_plot(d2, k).show()
cluster_plot(d3, k).show()# 线损率属性改造
import pandas as pd
# 参数初始化
inputfile = './data/electricity_data.xls' #供入供出电量数据
outputfile = './electricity_data.xls' # 属性改造后的电量数据
data = pd.read_excel(inputfile) # 读入数据
data[u'线损率'] = (data[u'供入电量'] - data[u'供出电量'])/data[u'供入电量']
data.to_excel(outputfile, index = False) # 保存结果
#数据规约
# 主成分分析降维代码
inputfile = './data/principal_component.xls'
outputfile = './dimention_reducted.xls' # 降维后的数据
data = pd.read_excel(inputfile, header = None) # 读入数据
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(data)
pca.components_ # 返回模型的各个特征向量
pca.explained_variance_ratio_ # 返回各个成分各自的方差百分比# 使用pca的结果
pca = PCA(3)
pca.fit(data)
low_d = pca.transform(data) # 用它来降低维度
pd.DataFrame(low_d).to_excel(outputfile) # 保存结果
pca.inverse_transform(low_d) # 必要时可以用inverse_transform()函数来复原数据#常用预处理函数:
D = pd.Series([1,1,2,3,5])
# 进行数据去重的两种方法
D.unique()
np.unique(D)

数据可视化与数据预处理相关推荐

  1. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  2. python可视化的优势_「数据可视化」数据可视化的优势有哪些?

    数据可视化的优势有哪些?大数据可视化的实际意义是协助人更强的分析数据,信息内容的品质挺大水平上取决于其表达形式.对大数字列举所构成的数据信息中所包括的实际意义开展剖析,使剖析結果数据可视化. 实际上大 ...

  3. 什么是数据可视化,数据可视化有什么价值

    "数据可视化"这个词看上去似乎让人有点摸不着头脑,但其实在实际生活中也有类似的应用. 举个例子,媒婆给你介绍对象,前面给你铺垫一堆,如五官端正.身材修长.皮肤雪白(各种繁杂的信息描 ...

  4. Python 数据可视化—下载数据(CSV文件格式、JSON格式)

    Python 数据可视化-下载数据CSV文件格式.JSON格式 网上下载数据,并对这些数据进行可视化,可视化以两种常见格式存储的数据:CSV 和JSON. 我们将使用Python模块csv 来处理以C ...

  5. Tikz作图教程:pgfplots宏包二维数据可视化的数据导入方法

    pgfplots 绘图思想简介 下面一段介绍来自pgfplots说明文档的引言部分,它对pgfplots的绘图思想作了清晰地描述: 科研工作者在交流研究结果.论文时,将数据可视化往往是必要和方便的. ...

  6. R 多变量数据预处理_R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)...

    作者:穆晨 来源:https://www.cnblogs.com/muchen/p/5310732.html 阅读目录 数据分布图简介 绘制基本直方图 基于分组的直方图 绘制密度曲线 绘制基本箱线图 ...

  7. R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)...

    作者:穆晨 来源:https://www.cnblogs.com/muchen/p/5310732.html 阅读目录 数据分布图简介 绘制基本直方图 基于分组的直方图 绘制密度曲线 绘制基本箱线图 ...

  8. 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

    阅读目录 数据分布图简介 绘制基本直方图 基于分组的直方图 绘制密度曲线 绘制基本箱线图 往箱线图添加槽口和均值 绘制2D等高线 绘制2D密度图 数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据 ...

  9. python交互式数据可视化_python数据可视化工具

    熟知python的人都知道,python上常用的一款数据可视化工具是Matplotlib,但是Matplotlib是静态的.那么,Python中除了matplotlib外,还有哪些数据可视化工具呢?其 ...

最新文章

  1. 卷积Convolution
  2. DbgPrint 函数流程分析
  3. 大屏可视化分配率是什么意思_什么是分配率?
  4. MySQL InnoDB的缓冲池之预读失效和缓存池污染
  5. 中文转数字 java_java将阿拉伯数字转换为中文数字
  6. Springboot集成axis1.4
  7. C#面向对象--命名空间
  8. html按钮按下效果_html提交按钮标签代码是什么,怎么使用?(示例)
  9. Keil3/4/5 For C51安装教程(附Baidu 云链接)
  10. .NET伪静态使用以及和纯静态的区别
  11. 手机拍摄的身份证怎么制作为复印件?
  12. 热门城市地铁svg矢量图
  13. python获取所有上市公司的加权净资产收益率
  14. python发送邮件群发软件_python使用tkinter写的邮件群发软件-python图形界面编程
  15. 面向对象:期待在正确的时间,遇见更好的你
  16. 如何理解凸优化中的共轭函数的定义?
  17. android模拟器横屏快捷键,Android模拟器横屏切换方法
  18. luogu P4848 崂山白花蛇草水
  19. Python基础之图像识别
  20. php 新增 php_printer扩展,printer扩展的一些使用疑问

热门文章

  1. CSS transition delay简介与进阶应用
  2. Cassandra 原理介绍
  3. 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...
  4. Android应用程序组件Content Provider的启动过程源代码分析(6)
  5. 最新宣布:Intuit和微软公司就Intuit合作平台的最新版Windows Azure SDK扩大合作关系...
  6. centos配置-java-php-mysql【转载参考】
  7. 结构体为什么要4字节对齐
  8. 编程珠玑第七章 粗略估算
  9. linux服务器的搭建配置与应用,linux服务器的搭建与配置
  10. 批量图片压缩工具:JPGCompact 2.0绿色版