文章目录
三.数据探索
数据质量分析
概念:检查原始数据中是否有脏数据。包括:缺失值,异常值,不一致的值,重复数据和特殊符号的数据(如#,*等)
缺失值分析
1.缺失值:数据记录的缺失与记录中某个字段信息的缺失,两者都会造成分析结构不正确。
2.产生原因:有些信息暂时无法获取或者获取的代价比较大;有些信息是被遗漏的;属性值不存在(如儿童的固定收入,未婚者配偶的姓名等)。
3.缺失值的影响:数据挖掘建模将丢失大量有用信息;数据挖掘模型所表现出来的不确定性增加,模型中蕴含的规律更难把握;包含空值的数据会使得建模过程陷入混乱,导致不可靠输出。
4.缺失值分析:简单的统计分析,得到缺失值属性的个数以及每个属性的未缺失数,缺失数与缺失率等。对于缺失值的处理,分三种,一是删除存在缺失值的记录,二是对可能的值进行插值,三是不处理。
异常值分析
1.异常值:样本中的个别明显偏离其他观测值的数据。
2.分析:
简单的统计量分析:明显不合适的数据,不符合常理的数据等等。如年龄超过200岁。
3σ 原则是在数据服从正态分布的时候用的比较多,在这种情况下,**异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。**在数据处理的时候,按照正态分布的性质,三个标准差以外的数据都可以被看作是错误的数据从而排除掉。
箱型图分析:分析比较客观,在识别异常值方面有一定的优越性。
例子:餐饮系统的销售量数据可能出现缺失值和异常值,用箱型图来分析数据。
import pandas as pd
sale = "D:\大学\大三\下学期\数据挖掘与分析\chapter3\demo\data\catering_sale.xls"
data = pd.read_excel(sale,index_col="日期")
print(data.describe())
#查看数据的基本情况
》》》》结果:
销量
count 200.000000
mean 2755.214700
std 751.029772
min 22.000000
25% 2451.975000
50% 2655.850000
75% 3026.125000
max 9106.440000
#绘制箱型图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure()#建立图像
p = data.boxplot(return_type = dict) #画箱型图 直接dataframe
x = p['fliers'][0].get_xdata()#"fliers":异常值标签
y = p['fliers'][0].get_ydata()
y.sort()#从小到大排序
'''
用annotate添加注释 防止图上点直接不清楚 调试
'''
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.5 -0.8/(y[i]-y[i-1]), y[i]))
else:
plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.5, y[i]))
plt.show()
》》》》》》》》结果
分析:
【箱体部分从上到下依次是:上四分位,均值,中位数,下四分位】
箱型图所对应的数据从上到下依次是 离群点【9106.44,6607.4,22.0,60.0,51.0】;上界【4060.3】;下界【2000】;最后可以把数据过滤规则定为400以下,5000以上为异常数据。
3.处理:
(1)缺失
设置为Null值;此类处理最简单,而且绝大多数情况下均使用此类处理;直接将异常值“干掉”,相当于没有该异常值。如果异常值不多时建议使用此类方法。
(2)填补
如果异常值非常多时,则可能需要进行填补设置,SPSSAU共提供平均值,中位数,众数和随机数、填补数字0共五种填补方式。
(3)不处理
一些异常值也可能同时包含有用的信息,是否需要剔除,应由分析人员自行判断。
一致性分析
数据不一致性是指数据的矛盾性,不相容性。在数据挖掘过程中,不一致数据主要发生在数据集成的过程中。
数据特征分析
对数据进行质量分析以后,接下来可通过绘制图表,计算某些特征量等手段进行数据的特征分析
1.分布分析
(1.)定量数据分布分析
对于定量数据而言,选择组数与组宽是做评率分布分析时最主要的问题,步骤如下:
-第一步:求极差【max-min】
-第二步:决定组距与组数【组距观察数据自己给出,一般组距都是左闭右开区间的;组数=极差/组距】
-第三步:决定分点【也就是分布区间表格】
-第四步:列出频率分布表
-第五步:绘制频率分布直方图
原则:各组是相斥的,且包含了所有数据,各组的组宽最好相等
例子:菜品“捞起生鱼片”在2014年第二个季度的销售数据,绘制销售量的频率分布表,频率分布图,对该定量数据做出相应分析。
##加载查看数据
import pandas
data = pd.read_excel("D:\大学\大三\下学期\数据挖掘与分析\chapter3\demo\data\catering_fish_congee.xls")
print(data.max()-data.min())
》》》》》结果:
2014-04-01 00:00:00 89 days 00:00:00
420 3915
dtype: object
'''
第一步:求极差 最大值-最小值=3915
第二步:分组 ,组距看实际情况可取为500 组数 = 极差/组距 = 3915/500 约等于8
第三步:决定分点
[0,500) [500,1000) ... [3500,4000)
第四步:会制频率分布直方表
第五步:绘制频率分布直方图
#分析生鱼片第二季度的销售数据 每天的销售额为x轴,频率与组距之比为y轴'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_excel("catering_fish_congee.xls", names = ['date','sale'])
#print(data.head())
#print(data['sale'].max())
#print(data['sale'].min())
bins = [0,500,1000,1500,2000,2500,3000,3500,4000]#由销售量分布区间可知
labels = ['[0,500)','[500,1000)','[1000,1500)','[1500,2000)',
'[2000,2500)','[2500,3000)','[3000,3500)','[3500,4000)']
#在对数据进行分段分组时,可采用cut方法,用bins的方式实现。这种情况一般使用于,对于销售量,年龄、分数等数据。
data["sale分层"] = pd.cut(data.sale, bins = bins, labels = labels)
"""print(data["sale分层"].head())
print(data.head())
"""
aggResult = data.groupby(by = ['sale分层'])['sale'].agg(np.size)
#pandas引入了agg函数,它提供基于列的聚合操作,进行计算。
#groupby是分组操作,不进行计算,或者说index的聚合操作。这种索引操作所返回的对象是一个已分组的DataFrame(如果传入的是列表或数#组)或已分组的Series。
#np.size:统计个数
#s.groupby([1,1,2,2]).agg(['min','max']):加[],agg的func仅接受一个参数,等效于s.groupby([1,1,2,2]).min()
## 对data1,把min更名为a,max更名为b
#df.groupby(['key1'])['data1'].agg({'a':'min','b':'max'})#这里的'min' 'max'为两个函数名
#重要技巧: groupby之后直接.reset_index()可以得到一个没有多级索引的DataFrame
#之后可以通过df.rename({‘old_col1’:‘new_col1’,‘old_col2’:‘new_col2’,…})重命名
#df1= df.groupby(['date'])['price'].agg({'sum','count'}).reset_index()
#print(aggResult,type(aggResult))
paggResult = round(aggResult/aggResult.sum(), 2, ) * 100
#round(数值,保留小数位数),当保留小数位大于0时采用四舍五入的方法
#print(paggResult,type(paggResult))
plt.figure(figsize=(10,10))#设置图标框大小尺寸
paggResult.plot(kind = 'bar', width = 0.8, fontsize = 10)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title("季度销售额频率分布直方图", fontsize = 20)
plt.show()
(2.)定性数据分布分析
对于定性变量,常常根据变量的分类类型来分组,可以采用饼状图和条形图来描述定性变量的分析。
#不同彩品在某段时间的销售量分布情况
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
data = pd.read_excel("catering_dish_profit.xls")
#饼图
x = data['盈利']
labels = data['彩品名']
plt.figure(figuresize=(8,6))
plt.pie(x,labels = labels)
plt.title("菜品销售量分布图")
plt.axis('equal')
plt.show()
#条形图
x = data['菜品名']
y = data['盈利']
plt.figure(figuresize=(8,6))
plt.bar(x,y)
plt.xlabel('菜品')
plt.ylabel('销量')
plt.title('菜品销量分布图')
plt.show()
2.对比分析
是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢以及各种关系是否协调。特别适用于指标间的横纵向对比,时间序列的比较分析。在对比分析中选择合适的对比标准是十分关键的,选得合适,才能做出客观的评价;选的不合适,可能得出错误的结论。
(1.)绝对数比较:比如排序好的条形图。上图。
(2.)相对数比较:由两个有联系的指标对比计算,用以反映客观现象之间数量联系程度的综合指标,其数量值表现为相对数。
-
结构相对数:将同一总体内的部分数值与全部数值进行对比,求得比重,用以说明事物的性质,结构或者质量,如居民食品支出额占消费支出总额的比重,产品合格率等。
-
比例相对数:将同意总体内不同部分的是数值进行比较,表明总体内各部分的比例关系,如人口性别比例,投资与消费比例。
-
比较相对数:将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系,如不同地区的商品价格对比,不同行业不同企业之间的某项指标对比等。
-
强度相对数:将两个性质不同但有一定联系的总量指标进行对比,用以说明现象的强度,密度和普遍程度,如人均国内生产总值yong“元/人”表示,人口密度用“人/平方米”表示等。
-
计划完成程度相对数:将同一时期实际完成数与计划数进行对比,用以说明计划完成程度。
-
动态相对数:将同一现象在不同时期的指标数值进行对比,用以说明发展方向和变化速度,如发展速度,增长速度等。
例子:以各菜品的销售数据为例,从时间维度上分析,可以看到A部门,B部门,C部门3个部门的销售金额随时间的变化趋势,可以了解在此期间哪个部门的销售金额较高,趋势比较平稳,也可以从单一部门(B部门)做分析,了解各年份的销售对比情况。
#部门之间销售额对比 折线图 import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei']#正常显示中文 data = pd.read_excel("dish_sale.xls") plt.figure(figsize=(8,6)) plt.plot(data['月份'], data['A部门'], color = 'green', label = 'A部门', marker = 'o') plt.plot(data['月份'], data['B部门'], color = 'red', label = 'B部门', marker = 's') plt.plot(data['月份'], data['C部门'], color = 'blue', label = 'C部门', marker = 'x') plt.legend() #显示图例 plt.ylabel('销售额(万元)') plt.xlabel('月份') #B部门各年之间销售金额对比 data1 = pd.read_excel("dish_sale_b.xls") plt.figure(figsize=(8,4)) plt.plot(data1['月份'], data1['2012年'], color = 'red', label = '2012年', marker = 'o') plt.plot(data1['月份'], data1['2013年'], color = 'blue', label = '2013年', marker = 's') plt.plot(data1['月份'], data1['2014年'], color = 'blue', label = '2014年', marker = 'x') plt.legend() plt.ylabel('销售额(万元)') plt.xlabel('年份') plt.show()
-
总体来看,三个部门的销售额呈递减趋势;A部门和C部门的递减趋势比较平稳;B部门的销售额下降趋势比较明显,进一步分析造成该现象的原因可能是原材料不足。
3.统计量分析
(1.)集中趋势度量
- 均值:所有数据的平均值【截断均值是去除高低极端值后的均值,极端值对均值的影响较大;加权均值反映均值中不同成分的重要程度】【算术平均数mean()】
- 中位数:将一组观察值从小到大按序排列,位于中间的数。
- 众数:数据集中出现最频繁的数。
(2.)离中趋势度量
- 极差:max-min
- 标准差:度量数据偏离均值的程度。
- 变异系数:度量标准差相对于均值的离中趋势。
- 四分位数间距:所有数值由小到大排列,分成四份,第一个分割点是下四分位,第二个分割点即中间位置是中位数,第三个分割位点是上四分位。上四分位数与下四分位数之差。
4.周期性分析
探索某个变量是否随着时间的变化而呈现出某种周期变化趋势。【年度,季度,月度,周度,天度,时度周期性趋势。】
例如:要对正常用户和窃电用户在2012年2月份与三月份日用电量进行预测,可以分布分析正常用户与窃电用户的日用电量时序图,直观的观察其电量变化趋势。
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv()
plt.figure(figsize=(8,6))
plt.plot(data["Date"],data["Eletricity"])
plt.xlabel("日期")
#设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.ylabel("每日用电量")
plt.title("正常用户用电量趋势")
plt.rcParams['font.sans-serif'] = ['SimHei']
#plt.axis('equal')
#窃电用户用电量分析
data1 = pd.read('')
plt.figure(figsize=(8,4))
plt.plot(data1['Date'],data1['Eletricity'])
plt.xlabel('日期')
plt.ylabel('日期')
#设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title('窃电用户每日用电量趋势')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
分析:总体来看,正常用户和窃电用户在2012年2月份与3月份日用电量呈现出周期性。以周为周期,由于周末不上班,所以用电量周末较低。工作日与非工作日的用电量比较平稳,没有太大波动。而窃电用户2012年2月份与3月份日用电量呈现出递减趋势,同样周末用电量最低。
5.贡献度分析
又称帕累托分析,原理是帕累托法则,又称20/80定律。同样的人放在不同的地方会产生不同的效益。例如,对一个公司来讲,80%的利润常常来自20%的最畅销产品,而其它80%的产品只产生20%的利润。
例子:某月海鲜系列10个菜品的盈利额已按照从大到小排序。如图分析,利用帕累托法则,应该增加对菜品A1-A7的成本投入,减少对A8-A10的成本投入来获得更高的盈利额。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('catering_dish_profit.xls', index_col = '菜品名')
data = data['盈利'].copy()
data.sort_values(ascending = False)#按值排序从大到小
#直方图
plt.figure(figsize = (8,6))
data.plot(kind = 'bar')
plt.ylabel('盈利(元)')
#斜线
p = 1.0 * data.cumsum() / data.sum()
p.plot(color = 'skyblue', 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"))#添加注释,85%标记,指导箭头样式
plt.ylabel('盈利(比例)')
plt.show()
6.相关性分析
分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程。
-
判断两个变量是否有线性相关的关系直接绘制散点图:正线性相关【点落在y = +kx周围】,完全正线性相关【y = +kx】;负线性相关【点落在y = -kx周围】,完全负线性相关【y = -kx】;非线性相关【弧线】,不相关。
-
需要同时考察多个变量间的相关关系绘制散点图矩阵。
-
计算相关系数【三个相关性系数(Pearson、Spearman和Kendall)反映的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表示相关性越强。】
1)Pearson相关系数【皮尔森相关系数】
2)Spearman秩相关系数【斯皮尔曼秩相关系数】
3) Kendall相关系数【判定相关系数】
例子:分析菜品日销量之间的相关性系数,为原料采购提供参考。
import pandas as pd data = pd.read_cexcel('catering_sale_all.xls', index_col = '日期') print(data.corr()) #相关系数矩阵,给出了任意两个菜品之间的相关系数 print(data.corr()['百合酱蒸凤爪']) #该菜和其它菜品的相关性 print(data['百合酱蒸凤爪'].corr(data['翡翠蒸香茜饺']))#这两个菜之间的相关性 》》》》》》》结果: 百合酱蒸凤爪 翡翠蒸香茜饺 金银蒜汁蒸排骨 ... 香煎韭菜饺 香煎罗卜糕 原汁原味菜心 百合酱蒸凤爪 1.000000 0.009206 0.016799 ... 0.127448 -0.090276 0.428316 翡翠蒸香茜饺 0.009206 1.000000 0.304434 ... 0.062344 0.270276 0.020462 金银蒜汁蒸排骨 0.016799 0.304434 1.000000 ... 0.121543 0.077808 0.029074 乐膳真味鸡 0.455638 -0.012279 0.035135 ... -0.068866 -0.030222 0.421878 蜜汁焗餐包 0.098085 0.058745 0.096218 ... 0.155428 0.171005 0.527844 生炒菜心 0.308496 -0.180446 -0.184290 ... 0.038233 0.049898 0.122988 铁板酸菜豆腐 0.204898 -0.026908 0.187272 ... 0.095543 0.157958 0.567332 香煎韭菜饺 0.127448 0.062344 0.121543 ... 1.000000 0.178336 0.049689 香煎罗卜糕 -0.090276 0.270276 0.077808 ... 0.178336 1.000000 0.088980 原汁原味菜心 0.428316 0.020462 0.029074 ... 0.049689 0.088980 1.000000 [10 rows x 10 columns] 百合酱蒸凤爪 1.000000 翡翠蒸香茜饺 0.009206 金银蒜汁蒸排骨 0.016799 乐膳真味鸡 0.455638 蜜汁焗餐包 0.098085 生炒菜心 0.308496 铁板酸菜豆腐 0.204898 香煎韭菜饺 0.127448 香煎罗卜糕 -0.090276 原汁原味菜心 0.428316 Name: 百合酱蒸凤爪, dtype: float64 0.009205803051836475 Process finished with exit code 0
Python主要数据探索函数【主要库是pandas统计特征与统计绘图,Matplotlib的绘图函数库】
-
基本统计函数
方法名 函数功能 所属库 sum() 计算数据样本的总和【按列计算】 pandas mean() 计算数据样本的算术平均数【按列计算】 pandas var() 计算数据样本的方差【按列计算】 pandas std() 计算样本的标准差【按列计算】 pandas corr() 计算数据样本的Sperman(Pearson)相关系数矩阵 pandas cov() 计算数据样本的协方差矩阵 pandas skew() 样本值的偏度(三阶矩) pandas kurt() 样本值的峰度(四阶矩) pandas describe() 给出样本基本统计描述【均值,标准差,最大最小,分位数】 pandas # corr(method='pearson/kendall/spearman'):用于计算皮尔森,肯德尔,斯皮尔曼相关系数;d为DataFrame对象,返回相关系数矩阵,s1与s2是Series对象,算的是两个series对象之间的相关系数 # 用法 # d.corr(method="spearman") # ns1.corr(s2,method="pearson") ## 计算相关系数 import pandas as pd df = pd.DataFrame([range(0,4), range(1,5)]) print(df) print("------------------") print(df.corr(method="spearman")) s1 = df.loc[0] s2 = df.loc[1] print("------------------") print(s1.corr(s2,method="pearson")) ..........>>>>> 0 1 2 3 0 0 1 2 3.0 1 2 3 4 NaN ------------------ 0 1 2 3 0 1.0 1.0 1.0 NaN 1 1.0 1.0 1.0 NaN 2 1.0 1.0 1.0 NaN 3 NaN NaN NaN NaN ------------------ 1.0 Process finished with exit code 0 ## 计算协方差矩阵 # 用法同上 import numpy as np import pandas as pd df1 = pd.DataFrame(np.random.randn(5,6))#生成5X6的随机矩阵 print(df1) print("--------") print(df1.cov()) print("--------") print(df1[0].cov(df1[1])) .......>>>>>> 0 1 2 3 4 5 0 -1.612165 -0.399937 -0.706673 -0.960382 0.130500 -0.268329 1 1.161665 -0.538577 -1.165917 -1.354291 0.485865 -0.380286 2 -0.161520 -0.240490 0.748768 -0.382483 -1.254675 0.092010 3 0.873999 1.630397 0.763374 -2.714897 0.272341 -1.088010 4 0.495306 -0.022903 0.956633 -0.754279 0.459501 1.674656 -------- 0 1 2 3 4 5 0 1.217284 0.351671 0.178661 -0.443910 0.252033 -0.037510 1 0.351671 0.782462 0.475523 -0.668794 0.103338 -0.381204 2 0.178661 0.475523 0.961551 -0.021880 -0.240460 0.367447 3 -0.443910 -0.668794 -0.021880 0.809401 -0.318515 0.616312 4 0.252033 0.103338 -0.240460 -0.318515 0.527716 0.034352 5 -0.037510 -0.381204 0.367447 0.616312 0.034352 1.053286 -------- 0.35167146777290775 Process finished with exit code 0 ## 计算数据样本的偏度[三阶矩,skew]\峰度[四阶矩,kurt] import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(5,6)) print('三阶矩:',df.skew()) print("四阶矩:",df.kurt()) .......>>>>>>>>> 三阶矩: 0 -0.298330 1 1.829276 2 0.867289 3 -0.328855 4 0.930303 5 0.181911 dtype: float64 四阶矩: 0 -2.091564 1 3.640028 2 1.478186 3 -2.061621 4 0.201642 5 0.379665 dtype: float64 Process finished with exit code 0
-
拓展特征函数
累积计算(cum),滚动计算(pd.rolling_)
方法名 函数功能 所属库 cumsum() 依次给出前1,2,…,n个数的和 pandas cumprod() … … … …的积 … cummax/min() … … … …的最大/最小值 … rolling_sum() 计算数据样本的总和 … … … … rolling_kurt() 计算数据样本的峰度【四阶矩】 cum系列是DataFrane或者Series对象的方法,用法:d/s.cumsum() ;rolling_…系列是pandas的方法,使用pandas.rolling__mean(d,k)【意思是每k列计算一次均值】。
import pandas as pd import numpy as np d = pd.DataFrame(np.random.randn(2,4)) print(d) print("--------") print(d.cumsum()) print("--------") print(d.rolling(2).sum())#依次对相邻两项求和 。。。。。。。》》》》》》 0 1 2 3 0 0.919216 0.572518 0.407163 1.044145 1 0.228686 0.930887 -0.893210 -0.232685 -------- 0 1 2 3 0 0.919216 0.572518 0.407163 1.044145 1 1.147901 1.503406 -0.486046 0.811460 -------- 0 1 2 3 0 NaN NaN NaN NaN 1 1.147901 1.503406 -0.486046 0.81146
-
绘图统计函数
函数名 功能 所属库 plot() 绘制线性二维图,折线图 Matplotlib/pandas pie() 饼图 Matplotlib/pandas hist() 二维线性直方图 Matplotlib/pandas boxplot() 箱型图 pandas plot(logy=True) y轴对数图像 pandas plt(yerr=error) 误差条形图 pandas
#绘图导库 import matplotlib.pyplot as plt import pandas as pd import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei']#正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #正常显示负号 plt.figure(figsize=(7,5))#创建图像区域,指定比例 #最后 plt.show()显示图像 ## matplotlib绘图 # plot:折线图 plt.plot(x,y,s) s指定绘图的类型,颜色,样式【o-->圆圈,+-->加号标记,-为实线,--为虚线】 plt.rcParams['font.sans-serif'] = ['SimHei']#正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #正常显示负号 plt.figure(figsize=(7,5))#创建图像区域,指定比例 x = np.linspace(0,2*np.pi,50) # x坐标输入 y = np.sin(x) # 计算对应x的正弦值 plt.plot(x, y, 'bp--') # 控制图形格式为蓝色带星虚线,显示正弦曲线 plt.show() # pie:饼图 plt.pie(size) size是一个列表,记录扇形的面积;explode:是否突出;colors:颜色;labels:标签;shadow:影音;startangle:开始角度;autopct:控制显示百分数 labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' # 定义标签 sizes = [15, 30, 45, 10] # 每一块的比例 colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'] # 每一块的颜色 explode = (0, 0.1, 0, 0) # 突出显示,这里仅仅突出显示第二块(即'Hogs') plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90) plt.axis('equal') # 显示为圆(避免比例压缩为椭圆) plt.show() # hist:直方图 ## plt.hist(x,y) x--->一维数组;y--->表示均匀分为y组,参考定量数据的分布分析绘制的直方图 ## DataFrame/Series对象内置的方法绘图 #用法d.plot(kind='box/hist/kde/pie/bar/line....')[箱型图、直方图、密度图、饼图、条形,线……里面也可以写matplotlib折线图的参数s] #箱型图 d.boxplot() d.plot(kind='box') # 绘制误差条形图 d.plot(yerr = error) error = np.random.randn(10)#定义误差列 y = pd.series(np.sin(np.arange(10)))# 均值数据列 y.plot(yerr=error) plt.show()
-