数据集基本操作

一.  数据格式的转换(Csv<=>Txt)

import csv
import pandas as pd


def txtToCsv():  # 将txt数据集格式转换为Csv格式
    '''
        txt转换Csv
        :return:
    '''
    csvFile = open("../Data/Iris.csv", 'w', newline='', encoding='utf-8')
    writer = csv.writer(csvFile)
    csvRow = []  # 用来存储csv文件中一行的数据
    header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
    writer.writerow(header)
    f = open("../Data/Iris.txt", 'r', encoding='GB2312')
    for line in f:
        csvRow = line.split()
        writer.writerow(csvRow)  # 将csvRow中数据写入csv文件中
    f.close()
    csvFile.close()


def csvToTxt():  # CSV转换Txt格式
    '''
        CSV转换TXT
        :return:
    '''
    data = pd.read_csv('../Data/1.csv')
    # header = ['UserId', 'Sports', ' Religious', 'Nature', 'Theatre', 'Shopping', 'Picnic']
    with open('../Data/1.txt', 'a+') as f:
        # f.writelines(header)
        # f.write('\n')
        for line in data.values:
            f.write((str(line[0]) + ' ' + str(line[1]) + ' ' + str(line[2])
                     + ' ' + str(line[3]) + ' ' + str(line[4]) + '\n'))
    f.close()


while (True):
    print("数据集格式转换菜单\n" + "1.CSV转换成TXT\n" + "2.TXT转换成CSV\n" + "0.退出\n")
    num = int(input("输入菜单号:"))
    if num == 1:
        csvToTxt()
        print("数据集格式转换完成;请继续进行操作")
    elif num == 2:
        txtToCsv()
        print("数据集格式转换完成;请继续进行操作")
    else:
        print("退出系统")
        break

运行图示:

图1.1 运行程序前数据集图(左:buddymove_holidayiq.csv,右边:Iris.txt)

 图1.2 运行程序前数据集图(左:buddymove_holidayiq.txt,右边:Iris.csv)

二.  读取数据

1.读取数据矩阵

def operData(fileName):
    """
        操作数据:
        :param fileName:数据集名称(带相对路径)
        :return:
    """
    # 读取csv格式数据,将数据转换为数据集数组
    data_arr = csv2Arr(fileName)
    # 输出全部点
    # header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
    # dp = pd.DataFrame(data_arr, columns=header,dtype=float)
    print("数据矩阵:\n" + str(data_arr))

 2.读取特定数据点

def readCsv(fileName):
    '''
        输出精确数据点
        :param fileName: 
        :return: 
    ''''''
    :param fileName: 
    :return: 
    '''
    data_arr = csv2Arr(fileName)
    p = int(input("输入要查询的数据点行数:"))
    q = int(input("你需要查询的数据点的列数:"))
    print("第" + str(p) + "行,第" + str(q) + "列的数据点为\n" + str(data_arr[p - 1][q - 1]))

3.读取数据集的基本信息及特殊读取

def CSvinfo(fileName):
    '''
        数据集的基本信息
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(fileName)
    print(df.info())  # 输出数据表的基本信息
    print(df)  # 将df替换成df.to_string(),将展示全部数据


def csvheader(filename):
    '''
        特殊查询
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(filename)
    q = int(input("请输入需要读取的数据集的前多少行的数据"))
    print(df.head(q))

4. 分类读取

def readCsv(filename):
     '''
        分类查询
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(filename)  # 读文件返回DataFrame对象
    df = pd.DataFrame(df)
    data_arr = np.array(df)
    header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
    print("类:" + str(header))
    q = input("请属于类标签:")

    for i in range(len(header)):
        if q == header[i]:
            m = int(i)
    idex = []
    for i in range(len(data_arr)):
        idex.append(data_arr[i][m])
    idex = pd.unique(idex).tolist()
    print("数据该类分类数目:" + str(idex))
    list = []
    for i in range(len(idex)):
        temp_list = []
        list.append(temp_list)
    for i in range(len(data_arr)):
        if data_arr[i][m] in idex:
            a = data_arr[i][m]
            list[idex.index(a)].append(data_arr[i])
    i = float(input("输入你要查询的类表"))
    for j in range(len(idex)):
        if i == idex[j]:
            print("类标签为的数据集:" + str(i))
            print(np.array(list[j]))
            break;

6.读取代码总合

import numpy as np
import pandas as pd


def csv2Arr(fileName):
    """
        准备数据: 从csv文件中解析数据
        :param fileName:数据集名称(带相对路径)
        :return:data_arr:数据集数组(含标签,2维数组,类型:ndarray)
    """
    df = pd.read_csv(fileName)  # 读文件返回DataFrame对象
    df = pd.DataFrame(df)
    data_arr = np.array(df)  # 将DataFrame转换为ndarray
    return data_arr


def operData(fileName):
    """
        操作数据:
        :param fileName:数据集名称(带相对路径)
        :return:
    """
    # 读取csv格式数据,将数据转换为数据集数组
    data_arr = csv2Arr(fileName)
    # 输出全部点
    # header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
    # dp = pd.DataFrame(data_arr, columns=header,dtype=float)
    print("数据矩阵:\n" + str(data_arr))


def readCsv(fileName):
    '''
        输出精确数据点
        :param fileName: 
        :return: 
    ''''''
    :param fileName: 
    :return: 
    '''
    data_arr = csv2Arr(fileName)
    p = int(input("输入要查询的数据点行数:"))
    q = int(input("你需要查询的数据点的列数:"))
    print("第" + str(p) + "行,第" + str(q) + "列的数据点为\n" + str(data_arr[p - 1][q - 1]))


def CSvinfo(fileName):
    '''
        数据集的基本信息
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(fileName)
    print(df.info())  # 输出数据表的基本信息
    print(df)  # 将df替换成df.to_string(),将展示全部数据


def csvheader(filename):
    '''
        特殊查询
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(filename)
    q = int(input("请输入需要读取的数据集的前多少行的数据"))
    print(df.head(q))


def readCsv(filename):
    '''
        分类查询
        :param fileName: 数据集名称(带相对路径)
        :return:
    '''
    df = pd.read_csv(filename)  # 读文件返回DataFrame对象
    df = pd.DataFrame(df)
    data_arr = np.array(df)
    header = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
    print("类:" + str(header))
    q = input("请属于类标签:")

    for i in range(len(header)):
        if q == header[i]:
            m = int(i)
    idex = []
    for i in range(len(data_arr)):
        idex.append(data_arr[i][m])
    idex = pd.unique(idex).tolist()
    print("数据该类分类数目:" + str(idex))
    list = []
    for i in range(len(idex)):
        temp_list = []
        list.append(temp_list)
    for i in range(len(data_arr)):
        if data_arr[i][m] in idex:
            a = data_arr[i][m]
            list[idex.index(a)].append(data_arr[i])
    i = float(input("输入你要查询的类表"))
    for j in range(len(idex)):
        if i == idex[j]:
            print("类标签为的数据集:" + str(i))
            print(np.array(list[j]))
            break;


filename = "../Data/Iris.csv"
while (True):
    '''
        主菜单
        
    '''
    print(
        "数据集输出菜单\n" + "1.数据集基本信息及数据集数据输出\n" + "2.查询数据点\n" + "3.数据矩阵\n" + "4.输出数据集前面的数据\n" + "5.按相同属性查询数据\n" + "0.退出\n")
    num = int(input("输入菜单号:"))
    if num == 1:
        CSvinfo(filename)
        print("操作完成;请继续进行其他操作")
    elif num == 2:
        readCsv(filename)
        print("操作完成;请继续进行其他操作")
    elif num == 3:
        operData(filename)
        print("操作完成;请继续进行其他操作")
    elif num == 4:
        csvheader(filename)
        print("操作完成;请继续进行其他操作")
    elif num == 5:
        readCsv(filename)
    else:
        print("退出系统")
        break

三.数据的基本分析

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats

def npData(filename):
    '''
            数据的基本分析
            :param fileName: 数据集名称(带相对路径)
            :return:
        '''
    df = pd.read_csv(filename)  # 读文件返回DataFrame对象
    df = pd.DataFrame(df).drop(labels=['User Id'],axis=1)
    data_arr = np.array(df)
    for i in range (len(data_arr.T)):
        num=data_arr[:,i]
        print(f'第{i+1}列')
        print("最大值{:.2f}".format(num.max()))
        print("最小值{:.2f}".format(num.min()))
        print("平均值{:.2f}".format(np.mean(num)))
        print("中位值{:.2f}".format(np.median(num)))
        print("标准差{:.2f}".format(np.std(num)))
        print("方差{:.2f}".format(np.var(num)))
        print("众数{:.2f},出现了{}次".format(stats.mode(num,keepdims=True)[0][0],stats.mode(num,keepdims=True)[1][0]))


npData('../Data/1.csv')

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ashpyxia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值