Python生成数据和分析

Python数据生成知识总结

1.1绘制折线图

导入import matplotlib.pyplot as plt

plt来调用

写出一个列表,用plot()方法绘制,生成折线图

plt.show()展示界面

 

1.2import matplotlib.pyplot as plt     
squares = [1,4,9,16,25]    
plt.plot(squares,linewidth = 5) #
描绘出图表函数,设置线条宽度
#
设置图标标题,给坐标加上标签
plt.title("Square Number",fontsize = 24)
plt.xlabel("Value",fontsize = 14)
plt.ylabel("Square of Value",fontsize = 14)
plt.show()

这样写默认在x轴上从04,而y轴显然是1-5数的平方,为了解决这个问题,需要修改x轴上的数值,加上input_values = [1,2,3,4,5]这个列表,并在plt.plot()方法上添加参数,

plt.plot(input_values,squares,linewidth = 5)

 

2.1绘制点分布图

使用scatter()方法,传递xy坐标,在那个位置上绘制出那个点

plt.scatter(2,4,s=5)       #s= 设置点的半径大小

plt.show()

#设置图标标题,给坐标加上标签
plt.title("Square Number",fontsize = 24)
plt.xlabel("Value",fontsize = 14)
plt.ylabel("Square of Value",fontsize = 14)

#设置刻度标记大小
plt.tick_params(axis = 'both',which='major',labelsize = 14)
plt.show()

       2.2将列表里的数值用scatter绘制成点

x_values =[1,2,3,4,5]
y_values = [1,4,9,16,25]
plt.scatter(x_values,y_values,s=20)     #
绘制x_valuesy_ values里的数据
#
设置图标标题并给坐标加上标签
plt.title("Square Numbers",fontsize = 4)
plt.xlabel("Value",fontsize = 4)
plt.ylabel("Value",fontsize = 4)
#
设置刻度标记大小
plt.tick_params(axis = 'both',which='major',labelsize = 14)
plt.show()

这个和1.2里的示例一样的,只是使用的方法不同

 

2.3使用列表计算数据

下面在列表里进行运算,使用cmap传递实现颜色映射,深浅随着y值大小递增

'''创建一个列表,取值从11000'''
x_values = list(range(1,1001))
y_values = [x**2 for x in x_values]    #y
列表里面的数值是x列表对应值的平方
#
将参数c设置成一个y值列表,用参数cmap告诉pyplot使用颜色映射

#使用edgecolors=’none’删除数据点的轮廓
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,edgecolors='none',s=10)
#
设置图标标题并给坐标加上标签
plt.title("Square Numbers",fontsize = 4)
plt.xlabel("Value",fontsize = 4)
plt.ylabel("Value",fontsize = 4)
plt.tick_params(axis = 'both',which='major',labelsize = 14)
plt.show()
plt.savefig('D:/squares_plot.png',bbox_inches='tight')    

‘’’自动保存图标到文件到外部文件夹,因为Pycharm里无法显示’’’

 

3.随机分布

3.1 创建一个类能自己在(0,0)随机选择方向,有两个列表存储经过的每个点的坐标

classRandomWalk():
    def fill_walk(self,num_points=50000):
        #
初始化随机漫步的点
        self.num_points = num_points
        #
为做出随机决策,将所有的选择都存储在一个列表里
        #
所有随机决策都始于(0,0)
        self.x_values = [0]
        self.y_values = [0]

              #随机选择方向

              whilelen(self.x_values)<self.num_points:
                   x_direction = 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,5])
                   y_step = y_direction * y_direction
                  #
拒绝原地停留
                   if x_step == 0 and y_step == 0:
                        continue
                   '''
计算下一个点的xy的值'''
                    next_x = self.x_values[-1] + x_step
                   next_y = self.y_values[-1]  + y_step

#next_x的值添加到x_values这个属性列表里
     self.x_values.append(next_x)   
    self.y_values.append(next_y)

 

3.2绘制随机分布图:
from random_walk import RandomWalk

#只要程序处于活动状态,就不断的模拟随机漫步
while True:
    #
实例化RandomWalk,并将其属性列表包含的点都绘制出来
   rw = RandomWalk()
    rw.fill_walk()         #
调用Random类里面的分布点的方法

       plt.scatter(rw.x_values,rw.y_values,s=1)

       plt.show()

 

3.3给点上色并选择多次分布

point_numbers =list(range(rw.num_points))
#
点的颜色随着y的值递增
plt.scatter(rw.x_values,rw.y_values,c=point_numbers ,cmap=plt.cm.Blues,edgecolors='none',s=1)

 

#设置绘图窗口的尺寸
plt.figure(dpi=128,  figsize=(10,6))    

 #figure()用于指定图标的宽度、高度、分辨率和背景色

询问是否继续漫步:

keep_running =input("Make another walk? (y/n)")
if keep_running == 'n':
    break

当然也可以这样写(unrecommend):

keep_running = input("Makeanother walk? (y/n)")
if keep_running == 'y':
    continue

不过这样y没反应,而且n会继续显示窗口

3.4可以加上这样的语句隐藏坐标轴

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

3.5突出起点和终点

'''突出起点和终点'''
plt.scatter(0,0,c='green',edgecolors='none',s=10)
#
绘制两个点
plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=10)

: 可以在def fill_walk(self,num_points=50000): 属性这里设置点的数量

4.使用Pygal模拟掷骰子

4.1安装Pygal模块

可以在cmd使用pip install Pygal,也可以在pycharmsetting里面下载

4.2创建一个骰子类

from random importrandint
'''
模拟掷骰子'''
class Die():
    #
设置骰子面数为6,即存储的数据个数为6
    num_sides= 6
    #
__init()__方法接收一个可选参数,设定为面数
    def __int__(self,num_sides):
        self.num_sides = num_sides

    #
roll()方法使用randint()来返回一个1和面数之前的随机数
    def roll(self):
        return randint(1, self.num_sides)

4.3掷骰子

from die importDie
#
创建一个D6的实例
d6 = Die()
results = []           #
创建空列表来存储结果
for roll_num in range(1000):             #
掷了1000次骰子
    result = d6.roll()
    results.append(result)
print(results)

列表长度是1000

4.4分析结果

frequencies = []
for value in range(1,d6.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)                             #
将分析的数据加到列表里
print(frequencies)

分析6个面在执行1-1001次中出现的次数,将results里的同一个数值加起来

 

4.4将数据可视化:

#对结果可视化
hist = pygal.Bar()
hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = ['1','2','3','4','5','6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add('D6',frequencies)
hist.render_to_file('D:/die_visual.svg')

结果展示:

4.5同时两个掷骰子:

from die importDie
import pygal
die_1 = Die()
die_2 = Die()
results = []
for roll_num in range(50000):
    result = die_1.roll() + die_2.roll()      #
将两个结果加起来
    results.append(result)
#
分析结果,将结果存放在frequencies
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2,max_result+1):         #
两个骰子出现次数的取值
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)
#
可视化结果
hist = pygal.Bar()
hist.title = "Results of rolling two D6 and D10 dice 1000 times."

‘’‘因为是两个骰子一起掷,所以出现的情况是这样的’‘’
hist.x_labels = ['2','3','4','5','6','7','8','9','10','11','12']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"         
hist.add('D6+D10',frequencies)         #
设置图例
hist.render_to_file('D:\dice_visual.svg')     #
图表存放的位置


 

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/80462997