数据挖掘 之 数据可视化与数据分析

相关库:numpy、panda、matplotlib

    • 一些基础方法

1.1绘制函数图

plt.plot(x, y, format_string, **kwargs) 
  • x:x轴数据,列表或数组,可选

  • y:y轴数据,列表或数组

  • format_string:控制曲线的格式字符串,可选,由颜色字符、风格字符和标记字符组成。

颜色字符

说明

颜色字符

说明

‘b’

蓝色

‘m’

洋红色

‘g’

绿色

‘y’

黄色

‘r’

红色

‘k’

黑色

‘c’

青绿色 cyan

‘w’

白色

‘#008000’

RGB某颜色

‘0.8’

灰度值字符串

风格字符

说明

‘-‘

实线

‘–’

破折线

‘-.’

点划线

‘:’

虚线

’ ’ ’ ‘

无线条

标记字符

说明

标记字符

说明

‘.’

点标记

‘1’

下花三角标记

‘,’

像素标记(极小点)

‘2’

上花三角标记

‘o’

实心圈标记

‘3’

左花三角标记

‘v’

倒三角标记

‘4’

右花三角标记

‘^’

上三角标记

’s’

实心方形标记

‘>’

右三角标记

‘p’

实心五角标记

‘<’

左三角标记

‘*’

星形标记

‘h’

竖六边形标记

‘d’

瘦菱形标记

‘H’

横六边形标记

‘|’

垂直线标记

‘+’

十字标记

‘D’

菱形标记

‘x’

x标记

**kwargs:第二组或更多,(x,y,format_string)
常用的参数:
color:控制颜色,color=’green’
linestyle:线条风格,linestyle=’dashed’
marker:标记风格,marker = ‘o’
markerfacecolor:标记颜色,markerfacecolor = ‘blue’
markersize:标记尺寸,markersize = ‘20’
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(4,2))


x = np.linspace(0, 2*np.pi, 50)
print(x)#均分计算指令
y = np.sin(x)
plt.plot(x,y,'bp--')
plt.show()

1.2绘制饼状图

import matplotlib.pyplot as plt
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1,
 startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, 
 rotatelabels=False, *, normalize=None, data=None)

x: 即每个扇形的占比的序列或数组
explode:如果不是None,则是一个len(x)长度的数组,指定每一块的突出程度;突出显示,设置每一块分割出来的间隙大小
labels:为每个扇形提供标签的字符串序列
colors:为每个扇形提供颜色的字符串序列
autopct:如果它是一个格式字符串,标签将是fmt % pct。如果它是一个函数,它将被调用。
shadow:阴影
startangle:从x轴逆时针旋转,饼的旋转角度
pctdistance, default: 0.6每个饼片的中心与由autopct生成的文本的开头之间距离与半径的比率,大于1的话会显示在圆外
labeldistance, default 1.1饼状图标签绘制时的径向距离(我认为这个也与8类似是个比率)。如果设置为None,则不绘制标签,而是存储在图例()中使用。
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
task = ["高数上下复习(15h)","英语每日指标(14h)","最优化(5h)","数据挖掘实验(15h)","考研择校(4h)","数学建模规划(5h)","jupyter学习(5h)"]
time = np.array([15,14,5,15,4,5,5])
totaltime = sum(time)

plt.pie(x=time,labels=task,
        autopct='%1.1f%%', #*饼图上标注百分比
        shadow=False,  #*是否有阴影
        startangle=0  #*逆时针旋转角度
        )
# plt.axis('equal')  # 显示为圆(避免比例压缩为椭圆)
plt.show()

1.3绘制直方图(分箱)

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, \*, data=None, \*\*kwargs)
参数:此方法接受以下描述的参数:
x:此参数是数据序列。
bins:此参数是可选参数,它包含整数,序列或字符串。
range:此参数是可选参数,它是箱子的上下限。
density:此参数是可选参数,它包含布尔值。
weights:此参数是可选参数,并且是一个权重数组,与x的形状相同。
bottom:此参数是每个容器底部基线的位置。
histtype:此参数是可选参数,用于绘制直方图的类型。 {‘bar’,‘barstacked’,‘step’,‘stepfilled’}
align:此参数是可选参数,它控制如何绘制直方图。 {‘left’,‘mid’,‘right’}
rwidth:此参数是可选参数,它是条形图的相对宽度,是箱宽度的一部分
log:此参数是可选参数,用于将直方图轴设置为对数刻度
color:此参数是一个可选参数,它是一个颜色规格或一系列颜色规格,每个数据集一个。
label:此参数是可选参数,它是一个字符串或匹配多个数据集的字符串序列。
normed:此参数是可选参数,包含布尔值,而是使用density关键字参数。

import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000)
plt.hist(x,10)
plt.show()

2d直方图:4.6Python数据处理篇之Matplotlib系列(六)---plt.hist()与plt.hist2d()直方图 - 简书 (jianshu.com)

含曲线拟合:(138条消息) [391]matplotlib.pyplot中的hist函数_周小董的博客-CSDN博客_ax.hist

含堆叠式:(138条消息) matplotlib.pyplot.hist参数详解_TravelingHat的博客-CSDN博客_matplotlib.pyplot.hist

1.4绘制箱型图(胡须图)

df.plot.box(title="title")  # 箱型图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100,4000,5000]

df = pd.DataFrame(data)
df.plot.box(title="title")  # 箱型图
plt.grid(linestyle="--", alpha=0.3)  # 显示网格线
plt.show()

绘制多个箱型图及简便用法:Python pandas.DataFrame.plot.box用法及代码示例 - 纯净天空 (vimsky.com)

1.5贡献度分析(帕累托分析)

给出产品的销售额,按照大到小排序,绘制积分变换曲线(由0->1递增,且斜率逐渐变小)

p.plot(color='r', secondary_y=True, style='-o', linewidth=2)
# secondary_y = True:设置第二纵坐标

plt.annotate(format(p[6], '.4%'),  # 文字内容
             xy=(6, p[6]),  # 点标注的位置
             xytext=(6*0.9, p[6]*0.9),   # 文字标记的位置
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
import pandas as pd
import matplotlib.pyplot as plt
import xlrd

# xlrd是读excel,xlwt是写excel的库
dish_profit = r'E:\data\catering_dish_profit.xls'
# 读取数据(设置主键为菜品名)、显示的时候自动设置横轴中文标记
data = pd.read_excel(dish_profit, index_col='菜品名')
print(data)

data = data['盈利'].copy()  # 复制一份
print(data)
data= data.sort_values(ascending=False)
data.plot(kind='bar')   # 绘制柱状图

p = 1.0*data.cumsum()/data.sum()    # data.cumsum():求积分 Σ0,Σ1,Σ2,Σ3……
p.plot(color='r', secondary_y=True, style='-o', linewidth=2)
# secondary_y = True:设置第二纵坐标

# 标记特殊点!详细教程:https://blog.csdn.net/TeFuirnever/article/details/88946088
plt.annotate(format(p[6], '.4%'),  # 文字内容
             xy=(6, p[6]),  # 点标注的位置
             xytext=(6*0.9, p[6]*0.9),   # 文字标记的位置
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))   # arrowprops #箭头参数,参数类型为字典dict


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.ylabel('盈利(元)')
plt.show()

(139条消息) plt.annotate()函数解析(最清晰的解释)_我是管小亮的博客-CSDN博客_plt.annotate(s=r's\hat{y}=29.40+1.55*$'+'广告费支出', x

1.6周期性分析

import pandas as pd
import matplotlib.pyplot as plt
df_normal = pd.read_csv(r"E:\data\user.csv")
print(df_normal)

plt.figure(figsize=(8,4))
plt.plot(df_normal["Date"],df_normal["Eletricity"])
plt.xlabel("日期")
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()

ax.xaxis.set_major_locator(x_major_locator)
plt.ylabel("每日电量")
plt.title("正常用户电量趋势")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()


df_steal = pd.read_csv(r'E:\data\Steal user.csv')
plt.figure(figsize=(10,9))
plt.plot(df_steal["Date"],df_steal["Eletricity"])
plt.xlabel("日期")
plt.ylabel("日期")

# (解决横轴单位间隔太小)自定义刻度间隔:
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)

plt.title("窃电用户电量趋势")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()

1.7相关性分析

相关性公式:

Pearson(皮尔逊)相关系数:

重要代码:

(120条消息) Seaborn绘制热力图_菇綡的博客-CSDN博客_seaborn 热力图

(122条消息) seaborn—sns.heatmap绘制热力图_哎呦-_-不错的博客-CSDN博客_heatmap热力图

# 计算相关性矩阵:
data.corr()
# 热力图绘制:
sns.set()
ax=sns.heatmap(uniform_data)
plt.show()

获取数据、计算相关系数

import pandas as pd
catering_sale = r'E:\data\catering_sale_all.xls'
print(catering_sale)
data = pd.read_excel(catering_sale,index_col='日期')
print(data)

print(data.corr())
print(data.corr()['百合酱蒸凤爪'])
print(data['百合酱蒸凤爪'].corr(data['翡翠蒸香茜饺']))

绘制相关性热力图

import seaborn as sns
import numpy as np
sns.set()
uniform_data=np.array(data.corr())
ax=sns.heatmap(uniform_data)
plt.show()

1.8Lasso回归寻找关键影响属性

1.9灰色模型实现短期预测

1.10支持向量回归模型

2.库的学习

较基础:3.3 Contours 等高线图_哔哩哔哩_bilibili

【matplotlib常用统计图】05更多的绘图工具的了解_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值