项目2 数据可视化

第十五章 生成数据

matplotlib数学绘图库

pygal专注生成适合在数字设备上显示的图表

15.1 绘制折线图

import matplotlib.pyplot as plt #导入matplotlib中的pyplot模块并指定别名plt

squares = [1, 4, 9, 16, 25]

plt.plot(squares)

plt.show()

15.1.1 修改标题、坐标轴文字和线条粗细、校正图形

import matplotlib.pyplot as plt

values = [1, 2, 3, 4, 5] #横坐标轴

squares = [1, 4, 9, 16, 25] #纵坐标

plt.plot(values, squares, '-og', linewidth = 5, markerfacecolor = 'b') #-og表示实线、圆圈点、绿色

plt.title('Square Numbers', fontsize = 24)

plt.xlabel('Value', fontsize = 20)

plt.ylabel('Squares of Value', fontsize = 20)

plt.tick_params(axis = 'x', labelsize = 16) #如果要同时设置,可以axis = 'both'

plt.tick_params(axis = 'y', labelsize = 20)

plt.show()

利用matplotlib绘制折线图

15.2.2 使用scatter()绘制散点图

在上例使用plt.plot()时,将'-og'换成'og'可以实现散点图

但是有时候我们需要设置各个数据点的样式,比如换颜色,设置大小

使用scatter(),并向它传递一对x,y坐标,并设置样式

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]

y_values = [1, 4, 8, 16, 32]

plt.scatter(x_values, y_values, s=100)

plt.title('Scatter Numbers', fontsize = 25)

plt.xlabel('independent variable', fontsize = 15)

plt.ylabel('dependent variable', fontsize = 15)

plt.tick_params(axis = 'both', which = 'both', labelsize = 12) #这里的which参数是主刻度(major)和副刻度(minor),默认是'both'

plt.show()


利用matplotlib绘制散点图

15.2.3 自动计算数据

利用Python遍历循环

import matplotlib.pyplot as plt

x_values = list(range(1,1001))

y_values = [x ** 2 for x in x_values]

plt.scatter(x_values, y_values, s = 20)

plt.title('Squares of Values', fontsize = 18)

plt.xlabel('Value', fontsize = 15)

plt.ylabel('Square of Values', fontsize = 15)

plt.tick_params(axis = 'both', labelsize = 10)

plt.axis([0, 1100, 0, 1100000]) #这里设置坐标轴的取值范围

plt.show()

调用scatter()时传递实参edgecolor='none'会消除默认的黑色轮廓,显示蓝色实心点(默认蓝色),传递实参c = 'red'显示红色


利用matplotlib绘制散点图

15.2.4 自定义颜色

上面提到的c = 'red'是一种办法

另外可以使用RGB颜色模式自定义颜色

传递参数c,设置为一个(元组),包含三个0~1的小数值,分别表示红、绿、蓝分量,值越接近1颜色越浅.

15.2.5 使用颜色映射

调用scatter()时,将参数c设置成y值列表,并使用参数cmap告诉pyplot使用哪个颜色映射

matplotlib.org的examples页面,找到color examples,点击colormaps_reference,了解更多的颜色映射

15.2.6 自动保存图表

plt.show()替换为plt.savefig()

plt.savafig('图片名.png', bbox_inches='tight'), 后面参数表示将图表多余的空白区域裁剪掉,省略这个实参会保留空白区域.

15.3 随机漫步

from random import choice

class Randomwalk(): #在random_walk.py中创建一个类

    def __init__(self, num_points = 5000):

        self.num_points = num_points

        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]) #确定方向

            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

            next_y = self.y_values[-1] + y_step

            self.x_values.append(next_x)

            self.y_values.append(next_y)


import matplotlib.pyplot as plt

from random_walk import Randomwalk

while True:

    rw = Randomwalk()

    rw.fill_walk()

    point_numbers = list(range(rw.num_points))

    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, 

cmap=plt.cm.Blues, edgecolor='none', s = 10) #设置样式

    plt.show()

    keep_running = input('would u like another walk?(y/n):')

    if keep_running == 'n':

        break

随机漫步可视化

15.3.1 隐藏坐标轴

plt.axes().get_xaxis().set_visible(False)

plt.axes().get_yaxis().set_visible(False)

15.3.2 调整尺寸适合屏幕

plt.figure(figsize=(10,6)) #单位是英寸,需要先调整尺寸,再绘制图

15.4 使用pygal模拟掷骰子

15.4.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) #randint()返回1到self.num_sides之间的随机数

15.4.2 掷骰子

die_visual.py

from die import Die

die = Die()

results = []

for roll_num in range(100): #表示掷骰子100次

    result = die.roll()

    results.append(result)

print(results)

15.4.3 分析结果

接上面代码

frequencies = []

for value in range(1, die.num_sides+1):

    frequency = results.count(value)

    frequencies.append(frequency)

print(frequencies)

15.4.4 绘制直方图

接上面代码

import pygal

hist = pygal.Bar() #先创建实例,再增加属性

hist.title = '掷骰子10000次的结果' #设置标题

hist.x_labels = ['1', '2', '3', '4', '5','6']

hist.x_title = '结果'

hist.y_title = '结果的频数'

hist.add('Damon的作品', frequencies) #这里'Damon的作品'表示图例

hist.render_to_file('die_visual.svg')


掷骰子可视化分析

第十六章 下载数据

模块csv和json

16.1 CSV文件格式

在github上下载文件,利用Octo Mate插件

16.1.1 分析CSV文件头

province_distribution.py

import csv

filename = 'province distribution.csv' #这里我导出了我司二月份百度推广的地域数据

with open(filename) as f:

    reader = csv.reader(f)

    header_row = next(reader) #csv中的方法,它返回文件中下一行

    print(header_row)

['日期', '账户', '省', '消费', '展现', '点击', '点击率', '平均点击价格', '网页转化', '商桥转化', '电话转化']

16.1.2 打印文件头及其位置

--snip--

with open(filename) as f:

    reader = csv.reader(f)

    header_row = next(reader)

    for index, column_header in enumerate(header_row): #这里的enumerate()获取每个元素的索引及其值

        print(index, column_header)

0 日期

1 账户

2 省

3 消费

4 展现

5 点击

6 点击率

7 平均点击价格

8 网页转化

9 商桥转化

10 电话转化

16.1.3 提取并读取数据

--snip--

with open(filename) as f:

    reader = csv.reader(f)

    header_row = next(reader)

    province = []

    for row in reader:

        province.append(row[2]) #注意这里的索引用中括号

    print(province)

['北京', '上海', '天津', '广东', '福建', '广西', '河北', '河南', '湖北', '湖南', '江苏', '江西', '山东', '浙江']

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容