企业数据化运营的数据来源:
从结构类型上分为:结构化和非结构化(网页、文本、图像、视频、语音)
从数据来源类型上分为:数据文件、数据库、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之后怎么解析。
我们现在就是要用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')
网友评论