# sklearn玩具数据集
# 鸢尾花 数据集使用
from sklearn.datasets import load_iris,load_wine,fetch_20newsgroups # 导入 数据集 load本地 feath联网
from sklearn.model_selection import train_test_split # 数据集划分方法
from sklearn.feature_extraction import DictVectorizer # 字典类型划分方法
import pandas as pd
import numpy as np
def iris():
# 是几个np数组和list
# iris字典中有几个重要属性:
# data 特征
# feature_names 特征描述
# target 目标
# target_names 目标描述
# DESCR 数据集的描述 一串英文
# filename 下后到本地保存后的文件名
# print(iris.data) # 全部数据的值 是一个二维pandas矩阵 也是一个X值
# print(iris.feature_names) # 每一列的列名
# print(iris.target) # 每一个矩阵行对应的一个Y值
# print(iris.target_names) # Y值对应的花的类型
iris = load_iris()#鸢尾花数据 实例化对象 本地加载了一个csv文件 变为了一个字典
data1=iris.data[80]
print(iris.target_names[iris.target[80]])
# print(iris.DESCR)
print(iris.data)
print(iris.target)
print(type(iris.data))
print(type(iris.target))
print(iris.feature_names)
# 组合为 dataframe
df1=pd.DataFrame(columns=iris.feature_names)
df1[iris.feature_names]=iris.data
df1["target"]=iris.target
print(df1)
def wine():# 葡萄酒特征集
wine=load_wine()
print(wine.data)
print(wine.feature_names)
print(wine.target)
print(wine.target_names)
df1=pd.DataFrame(columns=wine.feature_names)
df1[wine.feature_names]=wine.data
df1["target"]=wine.target
print(df1)
def get_real_world_dataset():# 现实世界的数据集获取 下载 使用fetch_20newsgroups()方法下载 这个是获得20条新闻类别的数据集 其他的现实数据 有不同的获取方法
# data_home 下载的路径 subset 下载数据的种类 test(测试集)train 训练集 all全部
# 下载可以就可以当本地的用 第一次下载完第二次就可以直接加载了不用下载 这个数据集没有feature_names
data=fetch_20newsgroups(data_home="assets",subset="all")
# print(data.feature_names)
def load_local_file(): # 加载本地文件夹 df读csv文件 读Excel文件 文件格式如果没有对应的读取工具请下载
data=pd.read_csv("assets/ss.csv")
print(data)
def data_set_divide():# 重点 数据集的划分
# 导包
# 首先要有数据 获取 这里直接自定义了
arr1=[14,3,25,435,6461,43,2,41]
arr2=[6,4,8,3,4,6,8,9]
# train_test_split()方法 返回训练集,测试集 传入数组 和划分的大小 多少部分为训练集
# x_train1,x_test1=train_test_split(arr1,test_size=0.8)
# 有映射关系的两个数据集进行划分 个数要相同 返回两个四个值 两个训练集和测试集之间有对齐关系下标相同 虽然是打乱了,但打乱的过程都一样
# stratify=arr2 按照arr2的结构分层取 arr2有三种数据 那就每一种数据取80来 防止验证集和训练集的内容种类重复度过高 返回值的类型跟传入的类型一样
# random_state随机数种子控制随机结果 随机数种子一样得到的随机结果也一样 假随机 不写的话每次结果不一样 shuffle洗牌
# x_train2,x_test2,y_train2,y_test2=train_test_split(arr1,arr2,train_size=0.8,stratify=arr2,shuffle=True,random_state=4)
# 多个数组也可以直接传入
# 重要的关键字参数有:
# test_size 值为0.0到1.0的小数,表示划分后测试集占的比例
# random_state 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同
# sklearn.model_selection.train_test_split(*arrays,**options)
# data=np.arange(100).reshape(50,2)
# 鸢尾花数据集划分
iris=load_iris()
x=iris.data
y=iris.target
x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.8,stratify=y,random_state=666)
print(x_train.shape)
print(y_train.shape) # 传入的是数组的话没有shape 先转为np 再shape
print(x_test.shape)
print(y_test.shape)
# 字典数据集的划分
# 可以划分非稀疏矩阵
# 用于将字典列表转换为特征向量。这个转换器主要用于处理类别数据和数值数据的混合型数据集 数值和汉字
# 对于类别特征`DictVectorizer` 会为每个不同的类别创建一个新的二进制特征,如果原始数据中的某个样本具有该类别,则对应的二进制特征值为1,否则为0。
data4 = [{'city':'成都', 'age':30, 'temperature':20},
{'city':'重庆','age':33, 'temperature':60},
{'city':'北京', 'age':42, 'temperature':80},
{'city':'上海', 'age':22, 'temperature':70},
{'city':'成都', 'age':72, 'temperature':40},
]
mode1=DictVectorizer(sparse=False) # sparse是否返回稀疏矩阵(一个二元的坐标) 创建字典划分工具
data5=mode1.fit_transform(data4) # 使用工具转换字典 他就相当于是把汉字变成列 用0,1表示这列是否为真 数字的列名也变为列但就是具体的数字
x_train5,y_train5=train_test_split(data5,random_state=666,train_size=0.8)
if __name__=="__main__":
# iris()
# wine()
# demo3()
# demo4()
data_set_divide()
pass