Pyhton 数据分析与展示

                                                Pyhton 数据分析与展示

Matplotlib库
            使用:matplotlib.pyplot是绘制各类可视化的图形命令子库,相当于快捷方式
      引入:
import matplotlib.pyplot as plt
               示例:
import matplotlib.pyplot as plt #引入pyplot
plt.plot([4,2,1,7,3,6,9,5,4])  #使用援助设置点
plt.ylabel("example") #添加点
plt.show() #展示图片
                            
                说明:plt.plot()只有一个数组或者列表的时候,参数被当做y轴,x轴以索引自动       生成
                示例:
import matplotlib.pyplot as plt
plt.plot([0,1,2,3,4],[7,4,6,2,8])#同时设定x,y轴的数值
plt.ylabel("example2")
plt.savefig("example2",dpi=600) #保存图像,默认为png格式,dpi为设置图片的dpi
plt.show()
 

        pyplot的绘图区域:
          使用:plt.subplot(nrows,ncols,plot_numbers)
import numpy as np
import matplotlib.pyplot as plt


def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)

#创建不同的参数
a = np.arange(0.0,5,0.02)
b = np.arange(0.0,10.0,0.04)

#subplot的参数(2,1,1) 代表2行1列 放在第一列
plt.subplot(2,1,1)

plt.plot(a,f(a))

#放在第二列
plt.subplot(212)

plt.plot(b,f(b))

plt.show()

                    
    pyplot的plot()函数:
            plt.plot(x,y,format_string(格式字符串),**kw)
            x 可选,x轴数据,列表或者数组
            y  必选,数据同x轴
            format_string 可选,控制曲线的格式字符串
            注:当绘制多条曲线的时候 各曲线的x数据不能省略
        示例:
import matplotlib.pyplot as plt
import numpy as np


a = np.arange(10)
plt.plot(a,a*1, a,a*2,  a,a*1.5, a,a*3.0)

plt.show()
                 
    pyplot的中文显示
        pyplot默认并不支持中文显示,需要rcParams 
        注意:要导入matplotlib库(import matplotlib)
        rcParams参数:
            'font.family' 设置显示字体
            'font.style' 字体风格 normal 或italic(斜体)
            'font.size' 字体大小
        支持的字体参数
        'SimHei' 黑体
        'Kaiti' 楷体
        'LiSu' 隶书
        'FangSong' 仿宋
        'YouYuan' 幼圆
        'STSong' 宋体
    全局字体设置(不推荐)
import matplotlib.pyplot as plt

import numpy as np

import matplotlib


a = np.arange(10)

#print(a)

#全局字体设置

matplotlib.rcParams['font.family']='SimHei'

plt.plot(a,a*1, a,a*2,  a,a*1.5, a,a*3.0) 

plt.title("example3")

plt.ylabel('纵轴值')

plt.show()
            
        局部设置(推荐):
         

        在有中文的地方增加fontproperties属性

        

示例:
import matplotlib.pyplot as plt

import numpy as np


a=np.arange(0.0,5.0,0.02)

#fontproperties ='字体' 具体支持字体见前面 fontsize 设置字体的大小 
plt.xlabel("横轴:时间",fontproperties='Kaiti',fontsize=15)

plt.ylabel("纵轴:振幅",fontproperties="Kaiti",fontsize=15)

plt.plot(a,np.cos(2*np.pi*a),'r--')

plt.title("example3",fontsize=18)

plt.show()

        
 

    pyplot的文本显示函数

    plt.xlabel() x轴文本
    plt.ylabel() y轴文本
    plt.title() 图像标题文本
    plt.text() 任意位置文本
    plt.annotate() 图像中增加带箭头的注解
       示例:

                

 

pyplot的基础图标函数

plt.plot(x,y,...) 绘制坐标图
plt.boxplot(data,notch,position) 绘制箱形图
plt.bar(left,height,width,bottom) 绘制条形图
plt.barh(with,bottom,left,height) 绘制横向条形图
plt.polar(theta(θ),r) 绘制极坐标
plt.pie(data,explode) 绘制饼图
示例:
    条形图的绘制
    
import matplotlib.pyplot as plt

import numpy as np

#创建x坐标
a = np.arange(10)
#创建y的数据集
height=[1,4,5,6,3,8,9,4,5,2]

plt.title("条形图的绘制",fontproperties="Kaiti",fontsize=20)
#绘制条形图
plt.bar(a,height,0.5,0)


plt.show()
        
        直方图的绘制
import matplotlib.pyplot as plt

import numpy as np


#创建随机数种子
np.random.seed(0)

#创建均值和方差
mu,sigma=100,200

#创建了一个随机数数组 均值和方差为100,200 数组大小为100
a=np.random.normal(mu,sigma,size=100)

#将这个数组的随机数分成40组
plt.hist(a,40)

plt.show()
            
 

       饼图的绘制
    示例:

import matplotlib.pyplot as plt

#创建图像标签
lables= ['a','b','v','e']
#数据大小
sizes =[15,25,35,25]
#图像的大小
explode = [0,0.1,0,0]

plt.pie(sizes,explode=explode,labels=lables,autopct='%1.1f%%',
        shadow=False,startangle=180)
#plt.axis('equal') #在12行添加
plt.show()
                
       设置成圆图 添加代码
plt.axis('equal') #在12行添加

                

 

引力波的绘制:

资源文件:http://python123.io/dv/grawave.html
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

#波形文件
#速率 数据
rate_h,hstrain= wavfile.read(r"H1_Strain.wav","rb")
# print(rate_h,hstrain)
#print(len(hstrain))
#print(hstrain.shape)
rate_l, lstrain = wavfile.read(r'L1_Strain.wav', 'rb')


#读取出来 转置
#理论模型
reftime,ref_H1 = np.genfromtxt('wf_template.txt').transpose()
#计算出时间间隔
htime_interval = 1/rate_h
ltime_interval = 1 / rate_l

#计算出单位时间的数据量
htime_len = hstrain.shape[0]/rate_h
# 时间坐标原点在中心 绘制时间与数据一一对应
htime = np.arange(-htime_len/2,htime_len/2,htime_interval)
# print(len(htime))
ltime_len = lstrain.shape[0] / rate_l
ltime = np.arange(-ltime_len/2,ltime_len/2,ltime_interval)

#绘制H1 Strain
fig = plt.figure(figsize=(12,6))

plth = fig.add_subplot(221)
plth.plot(htime,hstrain,'y')
plth.set_xlabel("时间(s)",fontproperties="Kaiti")
plth.set_ylabel("H1 Strain")
plth.set_title("探测器数据1",fontproperties="Kaiti",fontsize=20)

#绘制 L1  Strain

pltl = fig.add_subplot(222)
pltl.plot(ltime,lstrain,'g')
pltl.set_xlabel("时间(s)",fontproperties="Kaiti")
pltl.set_ylabel("L1 Strain")
pltl.set_title("探测数据2",fontproperties="Kaiti",fontsize=20)

#绘制标准数据
pltref = fig.add_subplot(212)
pltref.plot(reftime,ref_H1)
pltref.set_xlabel("时间(s)",fontproperties="Kaiti")
pltref.set_ylabel("Template")
pltref.set_title("标准数据",fontproperties="Kaiti",fontsize=20)
fig.tight_layout()

plt.show()
实践:从 中国国家统计局获取分省经济增长数据绘制折线图
    代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
# 地区
city_labels=['北京市','天津市','河北省','河北省','内蒙古自治区','辽宁省','吉林省']
#获取数据
data = np.loadtxt('分省月度数据.csv',delimiter=',',dtype=float)
#获取数据形状
print(data.shape)
#抽取城市,因为城市过多,不利于分析,抽取7组
city_data_style=data.shape[0]

num=0
for city in range(7):
    plt.plot(data[city][::-1])
plt.ylabel("较去年同期增长百分比(%)",fontproperties="Kaiti",fontsize=17)
plt.xlabel("月份",fontproperties="Kaiti",fontsize=17)
plt.legend(city_labels,loc=0,ncol=3,)
plt.xticks([0,1,2,3,4,5,6,7,8,9,10,11,],
           ['16年7月','16年8月','16年9月','16年10月','16年11月','16年12月','17年1月','17年2月','17年3月','17年4月','17年5月','17年6月',])
plt.title("16年7月-17年6月,分省同比增长数据显示图",fontproperties="Kaiti",fontsize=20,)

plt.show()
图形:

 示例二:
import numpy as np
import matplotlib.pyplot as plt

a = np.loadtxt('2015-2017data.csv',delimiter=',')
print(a.shape)

b = a[0][::-1]
# print(len(b))

#数据处理
def data_handle(list):
    '''
    计算出每一个的月的收入
    :param list:当年的月份累计收入
    :return: 每个月份的收入
    '''
    m = []
    m.append(list[0])
    for x in range(len(list)-1):
        n = list[x+1]-list[x]
        m.append(n)
    return m

c = b[0:11]
d = b[11:22]
e = b[22:len(b)]
month_list =[c,d,e]

n = []
for x_list in month_list:
    x = data_handle(x_list)
    n.append(x)

# print(n)
print(len(n))

for x in range(len(n)):
    plt.plot(n[x])
lables=['2015','2016','2017']
plt.legend(lables,loc=0,ncol=1)
plt.xticks([0,1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11,12])
plt.xlabel('月份',fontproperties='Kaiti',fontsize=17)
plt.ylabel('销售额(亿元)',fontproperties='Kaiti',fontsize=17)
plt.title('2015-2017(6)商品房销售额统计图',fontproperties='Kaiti',fontsize=17)

plt.show()



 

 Pandas数据特征分析
        Series类型:
            创建的方法:    
                Python列表,index与列表个数一致
                标量值,index表达Series类型的尺寸
                Python字典 键值对中的键是索引,index从字典中进行选择操作
                ndarrary 索引和数据都可以通过ndarrary类型创建
                其他函数,range()函数
            操作方式:
                Series包括index和values两部分
                Series的操作类似于ndarrary和python的字典操作
                    
                    
                            

 
             Series会自动对齐不同索引的数据,数据之间的相加是根据索引确定的            
             Series对象和索引都可以有一个名字,存储在属性.name中  
             对象数值既可以随意修改并立即生效
          
                       

 

        Pandas DataFrame类型

            基本操作
                    

 

           DateFrame的类型:是一个二维带"标签"的数组
                重新索引:
                    方法: .reindex(index=None,columns=None.....)的参数
                        index , columns 新的行列定义
                        fill_value 重新索引中,用于填充缺失位置的值
                        method 填充方法 ffill当前值向前填充.bfill向后填充
                        limit 最大填充量
                        copy 默认为True 生成新的对象,False时,新旧相等不复制        
            示例:
                    
 

            索引类型的常用方法:

                .append(idx) 链接另一个index对象产生新的index对象
                .diff 计算差集,产生新的index对象
                .intersection(index) 计算交集
                .union(idx) 计算并集
                .delete(loc) 删除loc位置的元素
                .inesrt(loc,a)在loc位置上添加一个元素e
            示例:
                    
 

        Pandas的数据类型运算:

            .add(d,**argws) 加法
            .sub(d,**argws) 减法
            .mul(d,**argws) 乘法
            .div(d,**argws) 除法

            

 


    

 

 
 

 
 

发表评论