第2章 数据化运营的数据来源

作者: 马淑 | 来源:发表于2018-10-29 08:59 被阅读74次

企业数据化运营的数据来源:
从结构类型上分为:结构化和非结构化(网页、文本、图像、视频、语音)
从数据来源类型上分为:数据文件、数据库、API、流式数据、外部公开数据、其他。

1. 使用read()、readline()、readlines()读取数据

建议使用 with open('text.txt','r') as f:语句来打开文件,因为这样在操作结束后会自动关闭文件。

Python读取.txt文件有三种方法:

  • f.read(): 一次输出文件中的全部内容字符串
  • f.readline() : 每次读文件中的一行数据
  • f.readlines() : 一次读全部行,每行组成列表输出

f.tell() : 输出指针位置

with open('text.txt','r') as f:
        fulltext = f.read()
        print('f.read()一次输出文件中的全部内容字符串:')
        print(fulltext)
        print(f.tell())
with open('text.txt','r') as f:
        line1 = f.readline()
        print('f.readline()读第1行:',line1)
        print(f.tell())
        line2 = f.readline()
        print('f.readline()读第2行:',line2)
        print(f.tell())
with open('text.txt','r') as f:
        alllines=f.readlines()
        print('f.readlines()一次读全部行,每行组成列表输出:')
        print(alllines)
        print(f.tell())

=========== RESTART: D:/Books/Python数据分析与数据化运营/chapter2/mycode.py ===========
f.read()一次输出文件中的全部内容字符串:
line1: This is line1
line2: This is line2
42
f.readline()读第1行: line1: This is line1

22
f.readline()读第2行: line2: This is line2
42
f.readlines()一次读全部行,每行组成列表输出:
['line1: This is line1\n', 'line2: This is line2']
42
>>> 
2. 使用Numpy的load_txt()、load()、fromfile()读取数据

(不常用,暂跳过)

3. 使用Pandas的read_csv()、read_fwf()、read_table()读取数据

pd.read_csv()语法:
read_csv(filepath, seq=',', header='infer', names=None, skiprows=None, nrows=None)
sep:分隔符号
names:列名
skiprows:要跳过的行
nrows:分隔符号

import pandas as pd
csv_data = pd.read_csv('csv_data.csv',names=['col1','clo2','col3','col4','col5'])
print(csv_data)

=========== RESTART: D:/Books/Python数据分析与数据化运营/chapter2/mycode.py ===========
   col1  clo2  col3  col4  col5
0     0     1     2     3     4
1     5     6     7     8     9
2    10    11    12    13    14
>>> 

pd.read_fwf()语法:
read_fwf(filepath, widths=[], names=[]),按照指定宽度切割读取数据。
width:使用的字段宽度
names:列名

import pandas as pd
fwf_data = pd.read_fwf('fwf_data', widths=None, names=None)
print(fwf_data)

=========== RESTART: D:/Books/Python数据分析与数据化运营/chapter2/mycode.py ===========
    col1   clo2   col3   col4
0  a2331  a9013  a3211  a9981
1  b4432  b3199  b9766  b2212
2  c3294  c1099  c7631  c4302
>>> 

pd.read_table()语法:
read_table('table_data.txt',sep='\t', names=None, index_col=None)
read_csv()是read_table()的sep=','时的一个特例。

import pandas as pd
table_data = pd.read_table('table_data.txt',sep=';', names=['col1','col2','col3','col4','col5'])
print(table_data)

=========== RESTART: D:/Books/Python数据分析与数据化运营/chapter2/mycode.py ===========
   col1  col2  col3  col4  col5
0     0     1     2     3     4
1     5     6     7     8     9
2    10    11    12    13    14
>>> 

补充几个我认为比较常用的案例:
pd.read_excel():读取Excel

#pd.read_excel(filepath, sheet_name=0, header=0, names=None, index_col=None, skiprows=None, nrows=None)
import pandas as pd
pd.read_excel('example.xlsx',sheetname="Sheet2")

pd.read_json():读取列表形式的json

#pd.read_json(filepath, orient=None, typ='frame', encoding=None)
import pandas as pd
data_json = pd.read_json('example.json')
print(data_json)
json内容:
------------
[{"a": 1, "b": 2, "c": 3},
 {"a": 4, "b": 5, "c": 6},
 {"a": 7, "b": 8, "c": 9}]

程序输出:
------------
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

pd.read_sql():读取SQL请求或数据库中的表

#pd.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
import pymysql 
import pandas as pd 
con = pymysql.connect(host="127.0.0.1",user="root",password="123456",db="testdb") 
data_sql=pd.read_sql("select * from city limit 10",con) 
print(data_sql)
4. 从数据库中读取数据

http://dev.mysql.com/downloads/connector/python下载`mysql-connector-python-8.0.13-py3.6-windows-x86-64bit.msi,安装成功后,在python IDE 中输入import mysql.connector,不报错则说明成功安装导入。
python读取数据库的基本方法:

import mysql.connector
config = {'host':'127.0.0.1',      #主机
          'user':'root',           #用户名
          'password':'111111',     #密码
          'port':3306,             #端口
          'database':'sys',#数据库
          'charset':'gb2312'       #字符编码
          }
cnn = mysql.connector.connect(**config) #建立MySQL连接
cursor = cnn.cursor()                   #获得游标
sql = 'select * from sys_config'             #sql语句
cursor.execute(sql)
data = cursor.fetchall()

for i in data[:2]:
        print(i)
cursor.close()
cnn.close()

=========== RESTART: D:\Books\Python数据分析与数据化运营\chapter2\mycode.py ===========
('diagnostics.allow_i_s_tables', 'OFF', datetime.datetime(2018, 10, 7, 14, 34, 44), None)
('diagnostics.include_raw', 'OFF', datetime.datetime(2018, 10, 7, 14, 34, 44), None)
>>> 

MySQL语言相关内容另见专题《数据分析常用SQL技巧》:https://www.jianshu.com/c/fadedb168614

Python也可以胜任一些MySQL的数据计算工作,为什么要用MySQL不用Python?

MySQL对关系型数据的实体关系、完整性约束方面比较成熟稳定,另外python的事务处理在某些情况下会面临资源瓶颈、工作效率的问题从而导致程序崩溃和报错,对于海量数据来说更是如此。

5. 获取并解析json数据

调用API会得到json格式的数据,另外在网页跳转的时候,也会有一个json传送数据。以下就来试下获取京东评论的json之后怎么解析。


使用开发者工具-->Network,点击翻页,这时会给出一个json,右击选择在新窗口打开 json内容

我们现在就是要用json库去解析新tab里面的内容,获取评论部分。首先使request库根据这个tab的网址获取json内容,存储在变量fulltext中,截取树结构存储到data,根据data的树结构接着对data取poorRate(二级节点),comments(一级节点)。comment可以直接放到数据框里存储到csv。

# -*- coding: utf-8 -*-

import requests
import json
import pandas as pd
import time

url = {'Merries':'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv9028&productId=1335852&score=1&sortType=5&page=',#花王拉拉裤
           'Huggies':'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv92777&productId=4712716&score=1&sortType=5&page='#好奇拉拉裤
       }
big_df = pd.DataFrame([])
for brand,url1 in url.items():
        print(brand)
        for i in range(1, 10):
                print('Page: ', i)                          
                url2 = str(i)
                uel3 = '&pageSize=10&isShadowSku=0&rid=0&fold=1'
                          
                finalurl = url1+url2+uel3
                print(finalurl)
                fulltext = requests.get(finalurl)
                time.sleep(0.1)

                start_point=fulltext.text.find('(')+1
                data=json.loads(fulltext.text[start_point:-2])
                print(data)
                poorRate  = data['productCommentSummary']['poorRate']
                print(poorRate)
                comments = data['comments']
                print(comments)
                df = pd.DataFrame(comments)
                big_df = pd.concat([big_df,df])
                print(big_df)

        big_df.to_csv(brand+'.csv',mode = 'w+',encoding='utf_8_sig')                
print('finished')

相关文章

网友评论

    本文标题:第2章 数据化运营的数据来源

    本文链接:https://www.haomeiwen.com/subject/fybvtqtx.html