Python项目——数据可视化

安装matplotlib包

数据可视化:通过可视化表示探索数据规律
数据挖掘:使用代码探索数据集的规律和关联
数据集:数据列表,大数据等

  1. 使用pip安装Python包
    pip是一个负责为你下载并安装Python包的程序。
    pip是Python的软件包安装器。它可以让你轻松安装和管理Python软件包及其依赖项。你可以使用pip来安装第三方库和框架,这些库和框架通常不包含在Python标准库中。pip通常在安装Python时会默认安装,但如果需要的话也可以单独安装它。安装pip的说明 http://www.ituring.com.cn/book/1861

  2. 检查是否安装了pip
    在终端窗口执行命令 python -m pip --version
    命令输出当前安装的版本和所在的python环境信息
    要安装pip,访问 https://bootstrap.pypa.io/get-pip.py
    将浏览器中出现的get-pip.py 的代码复制并保存为py文件,以管理员身份运行。

  3. 安装matplotlib
    使用Pycharm安装包,文件-设置-Project项目-Pycharm解释器-左下角的±搜索需要的包,点击安装包

测试matplotlib
在窗口中 import matplotlib

matplotlib的使用
要查看使用matplotlib可制作的各种图表,请访问http://matplotlib.org/的示例画廊。单击画廊中的图表,就可查看用于生成图表的代码。
AI助手:
可以通过在命令行中输入 python 进入Python解释器,然后执行以下代码查看Python的位数:

import struct
print(struct.calcsize("P") * 8)

执行上述代码后,输出的结果为 64 表示Python是64位安装的,输出的结果为 32 则表示Python是32位安装的。

使用matplotlib.pyplot绘制折线图

使用matplotlib进行简单的绘画:
模块pyplot包含了许多用于生成图表的函数
导入模块import matplotlib.pyplot as plt 并制定别名 plt
创建数字列表squares = [1,4,9,16,25]
使用函数plot()绘图。使用函数show()打开matplotlib查看器显示绘制的图形。
函数Plot()默认第一个数对应的x坐标为0,如需改变,需提供输入值。
修改标签文字和线条粗细:
参数fontsize指定图表中的文字大小
函数title() ,xlabel(),ylabel()设置标题
==函数tick_params()==设置刻度的样式,axis参数可以指定需要设置的轴,可以是’x’、'y’或’both’中的任何一个。labelsize参数用于设置刻度标签的字体大小。
使图形显示中文plt.rcParams['font.sans-serif']=['KaiTi']

import matplotlib.pyplot as plt
input_values = [1,2,3,4,5]
squares = [1,4,9,16,25]
plt.plot(input_values,squares,linewidth=5) #设置线宽
plt.title('title',fontsize=24)
plt.xlabel('value',fontsize=15)
plt.ylabel('square of value',fontsize=14)
#设置标题和xy轴标签
plt.tick_params(axis='both',labelsize=14)
plt.show()

在matplotlib中,轴上的刻度间距是自动确定的,不过我们可以通过一些方法来控制刻度间距。以下是几种常见的方法:

  1. 使用plt.xticks()或plt.yticks()函数手动设置轴上的刻度,并且可以选择设置刻度间距。

例如:plt.xticks(range(0, 100, 10)) # 表示设置x轴的刻度为0, 10, 20, …, 90

  1. 使用plt.locator_params()函数来自动设置刻度间距。

例如:plt.locator_params(axis=‘x’, nbins=10) # 表示自动设置x轴的刻度间距为10。

  1. 在绘图函数中,传递一个包含所有刻度的列表。

例如:plt.plot(x, y, xticks=[0, 5, 10, 15, 20]) # 表示设置x轴的刻度为0, 5, 10, 15, 20。

需要注意的是,不同的绘图函数对刻度的控制可能不一样,具体可以查看相关函数的文档。

使用scatter()绘制散点图

  1. 使用scatter绘制单个点,直接将点的xy坐标传递给scatter()函数
import matplotlib.pyplot as plt

plt.scatter(2,4,s=50)#在坐标轴上标出一个点(2,4),点的大小为100个像素.s=100指明点的大小为100像素

plt.rcParams['font.sans-serif']=['KaiTi']
plt.title('标题',fontsize=14)
plt.xlabel('自变量',fontsize=10)
plt.ylabel('观测值',fontsize=10)
plt.tick_params(axis='both',which='major',labelsize=10)#which='major'表明设置的是主刻度线和标签,如果设置为`'minor'`则表示次要刻度线和标签。

plt.show()
  1. 使用scatter()绘制一系列点,向scatter()传递两个分别包含x值与y值的列表。
import matplotlib.pyplot as plt

x_values = [1,2,3,4,5]
y_values = [2,3,6,8,20]
plt.scatter(x_values,y_values,c='pink',s=50)#s=100指明点的大小为100像素,参数c指定点的颜色

plt.rcParams['font.sans-serif']=['KaiTi']
plt.title('标题',fontsize=14)
plt.xlabel('自变量',fontsize=10)
plt.ylabel('观测值',fontsize=10)
plt.tick_params(axis='both',which='major',labelsize=10)#which='major'表明设置的是主刻度线

plt.show()
  1. 自动计算数据并绘制
    使用range()函数生成整数序列x值,使用表达式计算对应的y值
import matplotlib.pyplot as plt

x_values = list(range(1,101))
y_values = [x**2 for x in x_values]
plt.scatter(x_values,y_values,c='pink',s=10)#s=100指明点的大小为100像素

plt.rcParams['font.sans-serif']=['KaiTi']
plt.title('标题',fontsize=14)
plt.xlabel('自变量',fontsize=10)
plt.ylabel('观测值',fontsize=10)
plt.tick_params(axis='both',which='major',labelsize=10)#which='major'表明设置的是主刻度线

plt.axis([0,110,0,11000])#设置坐标轴的取值范围
plt.show()
  1. 使用颜色映射
import matplotlib.pyplot as plt

x_values = list(range(1,101))#range(1,101)生成从1到100的所有整数,并通过list转化为列表
y_values = [x**2 for x in x_values]
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Reds,edgecolor='none',s=30)
#使用颜色映射,将参数c设置为y值列表,用参数camp告诉pyplot使用哪个颜色映射,cmap: 指定颜色映射,这里使用的是'Reds',即使用红色系的颜色。cmap=plt.cm.Reds_r表示反转颜色。
----snip------

http://matplotlib.org/ 了解pyplot中所有的颜色映射
若要保存图表,plt.savefig('title.png',bbox_inches='tight'该文件将存储在py文件所在的目录,实参bbox_inches指定将图表的多余空白裁剪,保留则省略。

随机漫步

  1. 编写RandomWalk类
#random_walk.py
from random import choice
class RandomWalk():
    '''一个生成随机漫步数据的类'''
    def __init__(self,num_points=5000):#num_points指定生成的点数
        '''初始化随机漫步的属性'''
        self.num_points = num_points
        #所有随机漫步从(0,0)开始
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        '''计算随机漫步包含的所有点'''
        #不断漫步,直到达到指定的长度
        while len(self.x_values)<self.num_points:
            #决定前进方向以及距离
            x_direction = choice([1,-1]) #使用choice选择方向,1为向右,-1为向左
            x_distance = choice([0,1,2,3,4])
            x_step = x_direction * x_distance
            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance
            #拒绝原地踏步
            if x_step == 0 and y_step == 0:
                continue
            next_x = self.x_values[-1] + x_step#得到下一个点的xy坐标并添加到列表中
            next_y = self.y_values[-1] + y_step
            self.x_values.append(next_x)
            self.y_values.append(next_y)

  1. 创建一个RandomWalk实例,并绘制所有的点
#rw.visual.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk

#创建随机漫步实例,并绘制所包含的点
rw = RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()
  1. 不断模拟随机漫步
import matplotlib.pyplot as plt
from random_walk import RandomWalk

def create_rw():
    #创建随机漫步实例,并绘制所包含的点
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values,rw.y_values,s=15)
    plt.show()

while True:
    #不断模拟随机漫步
    create_rw()
    keep_running = input('再来一次?(y/n)')
    if keep_running == 'n':
        break
  1. 使用颜色映射
import matplotlib.pyplot as plt
from random_walk import RandomWalk

def create_rw():
    #创建随机漫步实例,并绘制所包含的点
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values,rw.y_values,c=list(range(rw.num_points)),cmap=plt.cm.Reds_r,s=15)
    plt.show()
-----snip------
  1. 隐藏坐标轴,使用函数plt.axes()

plt.axes().get_xaxis().set_visible(False)这段代码的作用是将横坐标轴隐藏,只显示纵坐标轴。

plt.axes()函数用于创建一个Axes对象,可以对这个对象进行各种设置,如设置坐标轴范围、标签、刻度等。在这个例子中,我们先使用plt.axes()函数创建一个Axes对象,然后再使用该对象的get_xaxis()方法获取x轴对象,最后调用set_visible(False)方法将x轴隐藏。

隐藏坐标轴可以使绘图更加简洁,特别是在一些特别的情况下,比如对称性的图像或者只关注某个特定区域的图像。

  #隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

使用Paygal模拟掷骰子

查看图标类型以及生成图形的代码: http://www.pygal.org/

  1. 创建Die类模拟掷骰子
from random import randint
class Die():
    def __init__(self,num_sides=6):
        '''创建一个骰子,默认6面'''
        self.num_sides = num_sides

    def roll(self):
        return randint(1,self.num_sides)#返回一个1到指定面数之间的任意整数
  1. 掷骰子+分析结果
    引入类Die,并创建一个实例即掷骰子D6
    掷骰子100次,统计每个点数出现的次数,得到频率列表
from die import Die
# 创建一个D6
die = Die()
# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(100):
    result = die.roll()
    results.append(result)
print(results)

# 分析结果
frequencies = []
for value in range(1, die.num_sides + 1): #遍历所有的面数,从1到die.num_sides
    frequency = results.count(value) #对每个面的点数出现的次数进行计数
    frequencies.append(frequency)

print(frequencies)
  1. 绘制直方图
    使用add()将一系列值添加到图表中,'D6’是在图表中显示的数据集名称,frequencies是相应的数据集的列表。
    使用hist.render_to_file('die_visual.svg')生成交互的图表,可在浏览器打开查看;该文件在对应py文件目录下存储。
import pygal                          
-------snip----------
#绘制直方图,对结果可视化
hist = pygal.Bar() #创建Bar实例,并存储在hist中
hist.title = 'Result of rolling one D6 100 times.' 
hist.x_labels = ['1','2','3','4','5','6']
hist.x_title = 'Result'
hist.y_title = 'Frequency of Result'
hist.add('D6',frequencies) #使用add()将一系列值添加到图表中,'D6'是在图表中显示的数据集名称,frequencies是相应的数据集的列表
hist.render_to_file('die_visual.svg')

同时掷两个骰子

创建两个D6骰子

import pygal    
from die import Die

# 创建2个D6
die_1 = Die()
die_2 = Die()
# 掷多次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(100):
    result = die_1.roll() + die_2.roll()
    results.append(result)
print(results)
# 分析结果
frequencies = []
max_resual = die_1.num_sides+die_2.num_sides
for value in range(1, max_resual + 1): #遍历所有的面数,从1到die.num_sides
    frequency = results.count(value) #对每个面的点数出现的次数进行计数
    frequencies.append(frequency)
    ------------snip-------------------------------------------------------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值