网易数据分析师 - 【项目01】 商铺数据加载及存储 &【项目02】 基于Python的算法函数创建

版权声明:欢迎转载~ 转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/86737540

【项目01】 商铺数据加载及存储

'''
【项目01】  商铺数据加载及存储

作业要求:
1、成功读取“商铺数据.csv”文件
2、解析数据,存成列表字典格式:[{'var1':value1,'var2':value2,'var3':values,...},...,{}]
3、数据清洗:
① comment,price两个字段清洗成数字
② 清除字段缺失的数据
③ commentlist拆分成三个字段,并且清洗成数字
4、结果存为.pkl文件
'''

# 数据读取

f = open('商铺数据.csv','r',encoding='utf8')
for i in f.readlines()[:5]:
    print(i.split(','))  
# 查看数据

# 创建comment、price、commentlist清洗函数  ## 因为comment,price, commentlist三组数据,亟需清洗:仔细看之后,觉得这种数据清洗,也是因地制宜来的。
## 根据关键字判断,然后截取到里面的量化数据
# 函数式编程

def fcm(s):
    if '条' in s:
        return int(s.split(' ')[0])
    else:
        return '缺失数据'
# comment清洗函数:用空格分段,选取结果list的第一个为点评数,并且转化为整型

def fpr(s):
    if '¥' in s:
        return float(s.split('¥')[-1])
    else:
        return  '缺失数据'
# price清洗函数:用¥分段,选取结果list的最后一个为人均价格,并且转化为浮点型

def fcl(s):
    if  ' in s:
        quality = float(s.split('                                ')[0][2:])
        environment = float(s.split('                                ')[1][2:])
        service = float(s.split('                                ')[2][2:-1])
        return [quality,environment,service]
    else:
        return  '缺失数据'
# commentlist清洗函数:用空格分段,分别清洗出质量、环境及服务数据,并转化为浮点型

# 数据清洗

datalst = []  # 创建空列表

f.seek(0) ## seek()方法,从0开始移动,应该不可能是移动0
n = 0  # 创建计数变量
for i in f.readlines()[1:20]: ## 后面跟着1:20是从第一行,到第19行吗?
    data = i.split(',') ## 把这些数据拆分成列表
#     print(dat])
    classify = data[0]             # 提取分类
    name = data[1]                 # 提取店铺名称
    comment_count = fcm(data[2])   # 提取评论数量
    star = data[3]                 # 提取星级
    price = fpr(data[4])           # 提取人均
    add = data[5]                  # 提取地址
    qua = fcl(data[6])[0]          # 提取质量评分
    env = fcl(data[6])[1]          # 提取环境评分
    ser = fcl(data[6])[2]          # 提取服务评分
    if  '缺失数据' not in [comment_count, price, qua]:   # 用于判断是否有数据缺失 ## 这一段及下面的真看不太懂
        n += 1
        data_re = [['classify',classify],
                  ['name',name],
                  ['comment_count',comment_count],
                  ['star',star],
                  ['price',price],
                  ['address',add],
                  ['quality',qua],
                  ['environment',env],
                  ['service',ser]]
        datalst.append(dict(data_re))   # 生成字典,并存入列表datalst
#         print('成功加载%i条数据' %n) ## 用到了上面的计数变量
    else:
        continue
    
print(datalst) 
# print('总共加载%i条数据' %n)

# 数据存储.pkl数据

import pickle
pic = open('C:/Users/shuol/Desktop/data.pkl','wb') ## data.pkl用什么打开? 为什么要存成data.pkl
pickle.dump(datalst,pic)  ## 估计dump方法的作用是将datalst,也就是python的字典格式文件,转化为pickle文件
pic.close()
print('finished!')
# 将数据存成了pkl文件

# 读取pkl文件

pic2 = open('C:/Users/shuol/Desktop/data.pkl','rb')
readpkl = pickle.load(pic2)
print(readpkl)

【项目02】 基于Python的算法函数创建

'''
【项目02】  基于Python的算法函数创建

作业要求:
根据不同题目,完成代码书写并成功运行

# 题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的两位数?都是多少?
# 该题目不用创建函数

n = 0  # 计数变量 
for i in range(1,5):
    for j in range(1,5):
        if i != j:
            n += 1
            print("满足条件的数字为:%i%i" %(i,j))
print('总共有%i个结果' %n)

# 题目2:输入三个整数x,y,z,请把这三个数由小到大输出,可调用input()。(需要加判断:判断输入数据是否为数字)
# 提示:判断是否为数字:.isdigit()
# 该题目需要创建函数

def f(n):
    lst =[]
    for i in range(1,n+1):
        x = input('请输入第%i个数字:'%i)
        while x.isdigit() == False:
            x = input('输入内容不为数字,请重新输入第%i个数字:'%i)
        else:
            lst.append(float(x))
    return(sorted(lst))

f(4)  # 执行函数
'''
# 题目3:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
# 提示:利用while语句,条件为输入的字符不为'\n'.
# 该题目不需要创建函数

st = input('请输入一行字符:\n')
letters = 0
space = 0
digit = 0
others = 0
for c in st:
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print ('char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others))

# 题目4:猴子吃桃问题
# 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
# 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
# 提示:采取逆向思维的方法,从后往前推断。
# 该题目不需要创建函数

n = 1
for day in range(9,0,-1):
    m = (n + 1) * 2
    n = m
print('第一天猴子共摘了%i个' %n)

# 题目5:猜数字问题,要求如下:
# ① 随机生成一个整数
# ② 猜一个数字并输入
# ③ 判断是大是小,直到猜正确
# ④ 判断时间
# 提示:需要用time模块、random模块
# 该题目不需要创建函数

import time
import random
    
play_it = input('do you want to play it.(\'y\' or \'n\')')   # 询问是否参与游戏
while play_it == 'y':
    c = input('input a character:\n')   # 输入参与游戏人物
    i = random.randint(0,100)
    print( 'please input number you guess:\n')
    a = time.time()  # 记录开始时间
    guess = int(input('input your guess:\n'))
    while guess != i:
        if guess > i:
            print( 'please input a little smaller')
            guess = int(input('input your guess:\n'))
        else:
            print( 'please input a little bigger')
            guess = int(input('input your guess:\n'))
    b = time.time()  # 记录结束时间
    usedtime = b - a
    print( 'It took you %.2f seconds' % usedtime)
    if usedtime < 15:
        print( 'you are very clever!')
    elif usedtime < 25:
        print( 'you are normal!')
    else:
        print( 'you are stupid!')
    print( 'Congradulations')
    print( 'The number you guess is %d' % i)
    break
else:
    print('hehe')

猜你喜欢

转载自blog.csdn.net/qq_42442369/article/details/86737540
今日推荐