目录
- 为什么要学习数据分析
- 什么是数据分析
- 环境安装
- 认识jupyter notebook
- matplotlib
* - matplotlib绘制折线图 plt.plot
- maplotlib基础绘图
-- 设置图片大小 plt.figure(figsize=,dpi=)
- 保存到本地 plt.savefig(save_path)
- 添加x,y轴刻度 plt.xticks(x)
- 调整x轴或y轴上的刻度表示 plt.xticks(x, x_label, rotation)
- 设置中文(fc-list命令 font_manager模块)
- 添加x轴、y轴描述信息 plt.xlable() plt.ylabel() plt.title()
- 绘制网格 plt.grid
- 绘制多个折线 plt.legend()
- 线条的样式(比如颜色,透明度等) plt.plot(x,y, label, color = 'orange', linestyle = '-.')
- 常用统计图
- - matplotlib绘制散点图 plt.scatter()
- matplotlib绘制条形图 plt.bar() plt.barh()
- matplotlib绘制直方图 plt.hist
- 更多的绘图工具
数据分析:
- 基础概念和环境
- matplotlib:绘图
- numpy:处理数值型数组
- pandas:在numpy的基础之上,除了能够处理数值型数组之外,还能处理字符串,列表,时间序列等等数据类型。
; 为什么要学习数据分析
从大量的数据中找出规律,对大量的数据进行统计分析,统计出感兴趣的规律供后续使用。绘图使我们能够更好地理解数据,并从一堆数据中找到经验或结论,供他人使用。
[En]
From a large number of data, find rules, statistics and analysis of a large number of data, statistics out the rules of interest for follow-up use. Drawing enables us to better understand the data and find experiences or conclusions from a pile of data for others to use.
- 有岗位需求 爬虫+数据分析
- 是python数据科学的基础
- 是机器学习课程的基础
什么是数据分析
数据分析就是使用适当的方法对收集到的大量数据进行分析,帮助人们做出判断,以便采取行动。
[En]
Data analysis is to use appropriate methods to analyze a large amount of data collected to help people make judgments in order to take action.
数据分析的流程:
提出问题-》准备数据-》分析数据-》获得结论-》成果可视化, ...
环境安装
conda: https://www.anaconda.com/download/
创建环境:
conda create --name env_name python=3
切换环境:
windows: activate env_name
linux/macos: source activate env_name
认识jupyter notebook
jupyter notebook:一款变成、文档、笔记、展示软件。
启动命令:
jupyter notebook
matplotlib
纯用python实现的库,matplotlib能将数据进行可视化,更直观地呈现,使数据更加客观、更具说服力。
matplotlib是最流行的python底层绘图库,主要做数据可视化图标,名字取材于matlab.
matplotlib能够绘制折线图,散点图,柱状图,直方图,箱线图,饼图等。
但是,我们需要知道不同的统计图到底能够表示出什么,以此来决定选择哪种统计图来更直观的呈现我们的数据
matplotlib绘制折线图 plt.plot
plt.plot(x,y)画一条线
多个plt.plot画多条线
from matplotlib import pyplot as plt
x = range(2,26,2)
y = [15,13,14,15,16,20,21,23,24,25,20,19]
plt.plot(x,y)
plt.show()
结果:
maplotlib基础绘图
设置图片大小 plt.figure(figsize=,dpi=)
生成指定大小的高清图,必须在plt.plot函数之前设置。
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8), dpi=80)
x = range(2,26,2)
y = [15,13,14,15,16,20,21,23,24,25,20,19]
plt.plot(x,y)
plt.show()
结果:
保存到本地 plt.savefig(save_path)
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8), dpi=80)
x = range(2,26,2)
y = [15,13,14,15,16,20,21,23,24,25,20,19]
plt.plot(x,y)
plt.savefig('d:\pic.png')
plt.show()
结果:
添加x,y轴刻度 plt.xticks(x)
比如 x轴和y轴表示什么, 这个图表示什么
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8), dpi=80)
x = range(2,26,2)
y = [15,13,14,15,16,20,21,23,24,25,20,19]
plt.plot(x,y)
plt.xticks(range(2,25))
plt.yticks(range(min(y),max(y)+1))
plt.show()
结果:
调整x轴或y轴上的刻度表示 plt.xticks(x, x_label, rotation)
将 数字刻度与字符串刻度一一对应,数据长度必须一样。
如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]
import random
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8), dpi = 80)
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.plot(x,y)
_x = x[::10]
_xticks_labels = ['{0}:{1}'.format(10+int(i/60),i%60) for i in _x]
plt.xticks(x[::10],_xticks_labels, rotation = 90)
plt.show(
结果:
设置中文(fc-list命令 font_manager模块)
matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字。
查看linux/mac/windows下面支持的字体:
fc-list 查看支持的字体
fc-list :lang=zh 查看支持的中文(冒号前面有空格)
如何修改matplotlib的默认字体?
通过 matplotlib.rc函数可以修改,具体方法参见源码(windows/linux)
通过matplotlib 下的 font_manager模块可以解决(windows/linux/mac)
matplotlib.rc函数
font = {'family' : 'monospace',
'weight' : 'bold',
'size' : 'larger'}
matplotlib.rc('font', **font)
font_manager模块
使用fc-list查看字体文件路径,然后利用该路径实例化font_manager
font_manager.FontProperties(fname="C:/WINDOWS/Fonts/msyhbd.ttc")
plt.xticks(x[::10],_xticks_labels, rotation = 45, fontproperties = my_font)
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:/WINDOWS/Fonts/msyhbd.ttc")
fig = plt.figure(figsize=(20,8), dpi = 80)
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.plot(x,y)
_x = x[::10]
_xticks_labels = ['{0}点{1}分'.format(10+int(i/60),i%60) for i in _x]
plt.xticks(x[::10],_xticks_labels, rotation = 45, fontproperties = my_font)
plt.show()
结果:
添加x轴、y轴描述信息 plt.xlable() plt.ylabel() plt.title()
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:/WINDOWS/Fonts/msyhbd.ttc")
fig = plt.figure(figsize=(20,8), dpi = 80)
x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
plt.plot(x,y)
_x = x[::10]
_xticks_labels = ['{0}点{1}分'.format(10+int(i/60),i%60) for i in _x]
plt.xticks(x[::10],_xticks_labels, rotation = 45, fontproperties = my_font)
plt.xlabel('时间',fontproperties = my_font)
plt.ylabel('温度 单位(摄氏度)',fontproperties = my_font)
plt.title('10点到12点每分钟气温的变化情况', fontproperties = my_font)
plt.show()
结果:
绘制网格 plt.grid
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:/WINDOWS/Fonts/msyhbd.ttc')
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x = range(11,31)
plt.figure(figsize=(20,8), dpi= 80)
plt.plot(x,y)
x_ticks_labels = [str(x) + '岁' for x in x]
plt.xticks(x,x_ticks_labels, fontproperties = my_font)
plt.grid(alpha = 0.4)
plt.show()
结果:
绘制多个折线 plt.legend()
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:/WINDOWS/Fonts/msyhbd.ttc')
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)
plt.figure(figsize=(20,8), dpi= 80)
plt.plot(x,y, label = '自己')
plt.plot(x,y2, label = '同桌')
x_ticks_labels = [str(x) + '岁' for x in x]
plt.xticks(x,x_ticks_labels, fontproperties = my_font)
plt.grid(alpha = 0.4)
plt.legend(prop = my_font, loc = 'upper left')
plt.show()
结果:
线条的样式(比如颜色,透明度等) plt.plot(x,y, label, color = 'orange', linestyle = '-.')
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = 'C:/WINDOWS/Fonts/msyhbd.ttc')
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)
plt.figure(figsize=(20,8), dpi= 80)
plt.plot(x,y, label = '自己', color = 'orange', linestyle = ':')
plt.plot(x,y2, label = '同桌', color = 'cyan', linestyle = '-.')
x_ticks_labels = [str(x) + '岁' for x in x]
plt.xticks(x,x_ticks_labels, fontproperties = my_font)
plt.grid(alpha = 0.4, linestyle = '--')
plt.legend(prop = my_font, loc = 'upper left')
plt.show()
结果:
- 标记出特殊的点(比如告诉别人最高点和最低点在哪里)
- 给图片添加一个水印(防伪,防止盗用)
常用统计图
折线图
以折线的上升或下降来表示统计数量的增减变化的统计图。
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
; 直方图
由一系列高度不等的纵向条纹或线段表示数据分布的情况。
一般用横轴表示数据范围,纵轴表示分布情况。
特点: 绘制连续性的数据,展示一组或者多组数据的分布状况(统计)
条形图
排列在工作表的列或行中的数据可以绘制到条形图中。
特点: 绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)
; 散点图
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量
之间是否存在某种关联或总结坐标点的分布模式。
特点: 判断变量之间是否存在数量关联趋势, 展示离群点(分布规律)
matplotlib绘制散点图 plt.scatter()
假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b =[26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:/WINDOWS/Fonts/msyhbd.ttc')
y1 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y2 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
x1 = range(1,32)
x2 = range(51,82)
fig = plt.figure(figsize=(20,8), dpi = 80)
plt.scatter(x1,y1, label='3月份',)
plt.scatter(x2,y2, label='4月份')
x1_labels = ['3月{}日'.format(i) for i in x1[::3]]
x2_labels = ['10月{}日'.format(i%50) for i in x2[::3]]
plt.xticks(list(x1[::3]) + list(x2[::3]), x1_labels + x2_labels, fontproperties = my_font, rotation = 45)
plt.xlabel('时间', fontproperties = my_font)
plt.ylabel('温度', fontproperties = my_font)
plt.title('3月和10月份的温度变化', fontproperties = my_font)
plt.legend(prop = my_font)
plt.show()
结果:
散点图的应用场景:
- 不同条件(维度)之间的内在关联关系
- 观察数据的 *离散聚合程度
matplotlib绘制条形图 plt.bar() plt.barh()
示例一:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] 单位:亿
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:/WINDOWS/Fonts/msyhbd.ttc')
x_labels = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","摔跤吧!\n爸爸","加勒比海盗5:\n死无对证","金刚:\n骷髅岛","极限特工:\n终极回归","生化危机6:\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:\n殊死一战","蜘蛛侠:\n英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
x = range(len(x_labels))
y = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
fig = plt.figure(figsize= (15,10), dpi = 80)
plt.bar(x,y, width= 0.7, label='电影销量')
plt.xticks(x, x_labels, fontproperties = my_font, rotation = 90)
plt.legend(prop = my_font)
plt.show()
结果:
横着的条形图
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:/WINDOWS/Fonts/msyhbd.ttc')
x_labels = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
x = range(len(x_labels))
y = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
fig = plt.figure(figsize= (15,10), dpi = 80)
plt.barh(x,y, height= 0.3, label='电影销量',color = 'orange')
plt.yticks(x, x_labels, fontproperties = my_font)
plt.grid(alpha = 0.3)
plt.show()
结果:
示例二:假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
from turtle import width
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:/WINDOWS/Fonts/msyhbd.ttc')
x_labels = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
y1 = [15746,312,4497,319]
y2 = [12357,156,2045,168]
y3 = [2358,399,2358,362]
x1 = list(range(len(x_labels)))
x2 = [i+0.2 for i in x1]
x3 = [i+0.4 for i in x1]
plt.figure(figsize=(20,8), dpi = 80)
plt.bar(x1,y1, width=0.2, label='9月14日')
plt.bar(x2,y2, width=0.2, label='9月15日')
plt.bar(x3,y3, width=0.2, label='9月16日')
plt.xticks(x2,x_labels, fontproperties = my_font)
plt.legend(prop = my_font)
plt.show()
结果:
条形图的应用场景:
- 数量统计
- 频率统计(市场饱和度)
示例三、在美国2004年人口普查发现有124 million的人在离家相对较远的地方工作。根据他们从家到上班地点所需要的时间,通过抽样统计(最后一列)出了下表的数据,这些数据能够绘制成直方图么?
interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
from matplotlib import pyplot as plt
from matplotlib import font_manager
interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
plt.figure(figsize= (20,8), dpi = 80)
plt.bar(range(len(quantity)), quantity, width = 1)
_x = [i-0.5 for i in range(13)]
_xtick_labels = interval + [150]
plt.xticks(_x, _xtick_labels)
plt.grid()
plt.show()
结果:
matplotlib绘制直方图 plt.hist
假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?
from matplotlib import pyplot as plt
from matplotlib import font_manager
a = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
d = 3
num_bins = (max(a) - min(a)) //d
plt.figure(figsize=(20,8), dpi = 80)
plt.hist(a, num_bins)
plt.xticks(range(min(a), max(a)+d, d))
plt.grid()
plt.show()
结果:
频数分布直方图
频率分布直方图
直方图应用场景:
- 用户的年龄分布状态
- 一段时间内用户点击次数的分布状态
- 用户活跃时间的分布状态
更多的绘图工具
plotly:可视化工具中的github,相比于matplotlib更加简单,图形更加漂亮,同时兼容matplotlib和pandas
使用用法:简单,照着文档写即可。
文档地址: https://plot.ly/python/
Original: https://blog.csdn.net/sherryhwang/article/details/123048686
Author: sherryhwang
Title: 数据分析(一)- 数据分析基础及matplotlib
相关阅读
Title: r包安装固定版本r包 安装某个版本r包 安装特定版本的R包
r安装固定版本 安装某个版本 安装特定版本的R包
1采用大家普遍使用的指定R包版本的方法安装
require(devtools)
install_version("ggplot2", version = "3.2.1",
repos = "http://cran.us.r-project.org")
继续采用第二种指导R包版本的方法,就是在官网下载对应版本的R包原始代码文件
install.packages(("E:/ggplot2_3.2.1.tar.gz"))
3.如何查找旧版本的R包并且下载
https://blog.csdn.net/weixin_45865390/article/details/108219671
查找旧版本
网上给的都是如何下载某个旧版本的R包,在你已知版本的情况下。那我又不知道到底有什么版本。
so,先找到有什么版本的包
网址(https://cran.r-project.org/src/contrib/Archive/)
这个网址里面就是个各种各样的包的历史,随便打开一个看看
————————————————
这里是引用如果想特定搜索某个包(以TensorFlow为例)可以在上述第一个页面搜索,按字母顺序,也可以在网址后面直接输入这个包。例如:
我要找tensorflow的历史版本。直接输入tensorflow就可以了
下载特定版本
packageurl "http://cran.r-project.org/src/contrib/Archive/tensorflow/tensorflow_1.14.0.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
**
下载特定的r r-base版本
**
r安装固定版本r-base 安装某个版本r-base 安装特定版本的r-base
对于window系统看这个链接:
https://cran.r-project.org/bin/windows/base/old/
**
安装低版本的R语言、和自行下载安装各个版本的R语言包、以及多环境运行R
**
- 下载并安装最新的R版本软件,以国内的清华的镜像为例(国内镜像速度快)
https://mirrors.tuna.tsinghua.edu.cn/CRAN/
- 官网上如何下载老版本或低版本(旧版本)的R语言(同时下载多个版本的R,功能运行更加丰富)
https://cran.r-project.org/bin/windows/base/old/
- 官网上如何去自行下载安装各个版本的R语言包(当运行install.packages()不行时)
https://cran.r-project.org/bin/windows/contrib/
- 如何在Rstudio多个版本R语言环境进行选择(当要运行低版本R的包时)
打开RStudio —> 点击Tools —> Global Options —> General —> R version —> Change 具体如下
————————————————
版权声明:本文为CSDN博主「卧新实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ChenQihome9/article/details/81949965
Original: https://blog.csdn.net/qq_52813185/article/details/124973065
Author: YoungLeeyou
Title: r包安装固定版本r包 安装某个版本r包 安装特定版本的R包

【PyTorch】 转换张量的数据类型

基于WT588F02KD语音芯片在出租车计价器的应用方案设计解析

利用瑞芯微3399Pro推理yoloV5s目标检测模型:踩坑笔记

对于tensorflow里dataset的batch的理解

DAC音频播放

(超详细)张正友标定法原理及公式推导

Ubuntu16.04系统之——安装Anaconda和Tensorflow

win10安装TensorFlow2.8.0

keras_contrib使用问题

参加胶东开发者技术大会有感

SER 语音情感识别-论文笔记5

人工智能笔记

启英泰伦CI-C22GS02(ci1122)单麦离线智能语音模块制作声控小台灯

微信小程序框架部署:mpvue+typescript
