python 은 어떻게 사이트 데 이 터 를 기어 오 르 고 데이터 시각 화 를 합 니까?
python 직위 와 관련 된 데이터 정 보 를 추출 하고 추출 한 데 이 터 를 csv 각종 파일 에 저장 한 다음 에 csv 파일 관련 필드 의 데 이 터 를 세척 하고 데이터 시각 화 전시,막대 그래프 전시,직사 도 전시,어 클 라 우 드 전시 등 을 포함 하여 시각 화 된 데이터 에 따라 진일보 한 분석 을 한다.나머지 분석 과 전시 독자 가 스스로 발휘 하고 확장 할 수 있 는 것 은 각종 분석 과 서로 다른 저장 방식 등 을 포함한다.
1.기어 오 르 기 및 분석 관련 의존 가방
Python 버 전:Python 3.6요청:다운로드 페이지math:위로
pylab:그림 을 설정 하면 중국 어 를 표시 할 수 있 습 니 다상기 설치 또는 사용 과정 에서 독자 가 설치 또는 가 져 오기 실패 등 문제 에 부 딪 힐 수 있 습 니 다.자체 바 이 두 는 가방 에 의존 하 는 적당 한 버 전 을 선택 하 십시오.
2.웹 페이지 구조 분석
Chrome 을 통 해'python 엔지니어'를 검색 한 다음 에 오른쪽 단 추 를 누 르 면 검사 또는 F12 를 클릭 하고 검사 기능 으로 웹 소스 코드 를 봅 니 다.다음 페이지 를 누 르 면 브 라 우 저의 검색 표시 줄 의 url 이 변 하지 않 습 니 다.이것 은 체크 망 이 반 파충류 체 제 를 만 들 었 기 때 문 입 니 다.직위 정 보 는 소스 코드 가 아니 라 JSON 파일 에 저장 되 어 있 기 때문에 저 희 는 JSON 을 직접 다운로드 합 니 다.사전 방법 으로 데 이 터 를 직접 읽 습 니 다.원 하 는 python 직위 와 관련 된 정 보 를 얻 을 수 있 습 니 다.
기어 오 르 려 는 python 엔지니어 직위 정 보 는 다음 과 같 습 니 다.
우리 가 원 하 는 데 이 터 를 얻 기 위해 서 우 리 는 프로그램 으로 브 라 우 저 를 모 의 하여 웹 페이지 를 조회 해 야 합 니 다.그래서 우 리 는 기어 오 르 는 과정 에서 머리 정 보 를 추가 합 니 다.머리 정보 도 우리 가 웹 페이지 를 분석 함으로써 얻 은 것 입 니 다.웹 페이지 를 통 해 우 리 는 이 요청 의 머리 정 보 를 알 고 요청 한 정보 와 요청 방식 은 POST 요청 입 니 다.이렇게 하면 우 리 는 이 url 이 우리 가 생각 하 는 데 이 터 를 받 아 진일보 한 처 리 를 요청 할 수 있다.
웹 페이지 정보 코드 는 다음 과 같 습 니 다.
import requests
url = ' https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
def get_json(url, num):
"""
url requests ,
:return:
"""
url1 = 'https://www.lagou.com/jobs/list_python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?labelWords=&fromSearch=true&suginput='
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
'Host': 'www.lagou.com',
'Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=',
'X-Anit-Forge-Code': '0',
'X-Anit-Forge-Token': 'None',
'X-Requested-With': 'XMLHttpRequest'
}
data = {
'first': 'true',
'pn': num,
'kd': 'python '}
s = requests.Session()
print(' session:', s, '
')
s.get(url=url1, headers=headers, timeout=3)
cookie = s.cookies
print(' cookie:', cookie, '
')
res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3)
res.raise_for_status()
res.encoding = 'utf-8'
page_data = res.json()
print(' :', page_data, '
')
return page_data
print(get_json(url, 1))
검색 을 통 해 우 리 는 각 페이지 에 15 개의 직위 가 표시 되 고 최대 30 페이지 가 표시 되 는 것 을 알 수 있 습 니 다.웹 소스 코드 를 분석 한 결과 JSON 을 통 해 총 직위 수 를 읽 을 수 있 고 전체 직위 수 와 각 페이지 에 표 시 될 직위 수 를 계산 할 수 있 습 니 다.우 리 는 총 몇 페이지 가 있 는 지 계산 한 다음 에 페이지 에 따라 올 라 가 마지막 으로 직위 정 보 를 모 아 CSV 형식의 파일 에 기록 할 수 있 습 니 다.프로그램 실행 결 과 는 그림 과 같 습 니 다.
모든 python 관련 직위 정 보 는 다음 과 같 습 니 다.
3.데이터 세척 후 입고
데이터 청 소 는 사실 많은 부분 을 차지 할 수 있 습 니 다.우 리 는 여기 서 간단 한 데이터 분석 만 한 후에 입고 합 니 다.체크 망 에 python 관련 직위 를 입력 하면 18988 개가 됩 니 다.당신 은 업무 중의 수요 에 따라 입고 할 필드 를 선택 하고 일부 필드 를 진일보 한 선별 할 수 있 습 니 다.예 를 들 어 우 리 는 직무 명칭 에서 인턴 인 일자 리 를 제거 할 수 있 습 니 다.지정 한 필드 구역 이 우리 가 지정 한 지역 에 있 는 직위 를 걸 러 내 고 필드 임금 의 평균 치 를 얻 으 며 최저 치 와 차액 의 4 분 의 1 을 평균치 로 하 는 등 수요 에 따라 자 유 롭 게 발휘 할 수 있 습 니 다.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from wordcloud import WordCloud
from scipy.misc import imread
from imageio import imread
import jieba
from pylab import mpl
# matplotlib
mpl.rcParams['font.sans-serif'] = ['SimHei'] #
mpl.rcParams['axes.unicode_minus'] = False # '-'
#
df = pd.read_csv('Python_development_engineer.csv', encoding='utf-8')
# ,
# df.drop(df[df[' '].str.contains(' ')].index, inplace=True)
# print(df.describe())
# csv , ,
pattern = '\d+'
# print(df[' '], '
')
# print(df[' '].str.findall(pattern))
df[' '] = df[' '].str.findall(pattern)
print(type(df[' ']), '
')
avg_work_year = []
count = 0
for i in df[' ']:
# print(' ',i)
# ' ' ' ', , 0
if len(i) == 0:
avg_work_year.append(0)
# print('nihao')
count += 1
# ,
elif len(i) == 1:
# print('hello world')
avg_work_year.append(int(''.join(i)))
count += 1
#
else:
num_list = [int(j) for j in i]
avg_year = sum(num_list) / 2
avg_work_year.append(avg_year)
count += 1
print(count)
df['avg_work_year'] = avg_work_year
# , 25%,
df['salary'] = df[' '].str.findall(pattern)
#
avg_salary_list = []
for k in df['salary']:
int_list = [int(n) for n in k]
avg_salary = int_list[0] + (int_list[1] - int_list[0]) / 4
avg_salary_list.append(avg_salary)
df[' '] = avg_salary_list
# df.to_csv('python.csv', index=False)
4.데이터 시각 화 전시다음은 데이터 에 대한 시각 화 전시 입 니 다.일부 보기 로 만 시각 화 된 전 시 를 합 니 다.만약 에 독자 가 다른 필드 에 대해 보 여 주 려 고 하고 서로 다른 보기 유형 으로 보 여 주 려 면 스스로 발휘 하 십시오.주:아래 코드 에 도 입 된 모듈 은 마지막 완성 코드 를 보십시오.
1.python 임금 의 주파수 직사 도 를 그리고 저장 합 니 다.
인터넷 업계 python 엔지니어 와 관련 된 일자리 의 보편적 인 임금 의 한 부분 구간 이 어느 범위 에 있 는 지 보고 싶다 면 우 리 는 matplotlib 라 이브 러 리 를 통 해 csv 파일 에 저 장 된 데 이 터 를 시각 적 으로 전시 할 수 있 습 니 다.그러면 우 리 는 데이터 의 한 부분 추 세 를 더욱 직관 적 으로 볼 수 있 습 니 다.
# python
plt.hist(df[' '],bins=8,facecolor='#ff6700',edgecolor='blue') # bins
plt.xlabel(' ( / )')
plt.ylabel(' / ')
plt.title('python ')
plt.savefig('python .jpg')
plt.show()
실행 결 과 는 다음 과 같 습 니 다.2.python 관련 직위 의 지리 적 위치 떡 모양 그림 그리 기
지리 python 직위 의 지리 적 위치 분 부 를 통 해 우 리 는 IT 업계 의 주요 집중 지부 가 어떤 도시 에 있 는 지 대체적으로 알 수 있다.그러면 우리 가 지역 을 선택 하여 선택 적 인 취업 을 하 는 데 유리 하고 더 많은 면접 기 회 를 얻 을 수 있다.매개 변 수 는 스스로 디 버 깅 하거나 수요 에 따라 추가 할 수 있다.
#
city = df[' '].value_counts()
print(type(city))
# print(len(city))
label = city.keys()
print(label)
city_list = []
count = 0
n = 1
distance = []
for i in city:
city_list.append(i)
print(' ', len(city_list))
count += 1
if count > 5:
n += 0.1
distance.append(n)
else:
distance.append(0)
plt.pie(city_list, labels=label, labeldistance=1.2, autopct='%2.1f%%', pctdistance=0.6, shadow=True, explode=distance)
plt.axis('equal') #
plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))
plt.savefig('python .jpg')
plt.show()
실행 결 과 는 다음 과 같 습 니 다.3.pyechart 기반 도시 분포 막대 그래프 그리 기
pycharts 는 python 에서 바 이 두 가 js 를 바탕 으로 개발 한 echarts 인 터 페 이 스 를 호출 하고 데이터 에 대해 각종 시각 화 작업 을 할 수 있 습 니 다.더 많은 데이터 시각 화 도형 전 시 는 echarts 홈 페이지 를 참고 할 수 있 습 니 다.pyecharts 기반 문 서 는 다음 과 같은 홈 페이지 를 참고 할 수 있 습 니 다.
city = df[' '].value_counts()
print(type(city))
print(city)
# print(len(city))
keys = city.index # keys = city.keys()
values = city.values
from pyecharts import Bar
bar = Bar("python ")
bar.add(" ", keys, values)
bar.print_echarts_options() # ,
bar.render(path='a.html')
실행 결 과 는 다음 과 같 습 니 다.4.python 복지 와 관련 된 단어 구름 그리 기
단어 구름 그림 은 문자 구름 이 라 고도 부 르 는데 텍스트 데이터 에 나타 나 는 빈도 가 비교적 높 은 키 워드 를 시각 적 으로 돋 보이 게 하고'키워드 의 렌 더 링'을 형성 하면 구름 과 같은 컬러 그림 을 형성 하여 대량의 텍스트 정 보 를 걸 러 내 고 사람들 로 하여 금 텍스트 데이터 의 주요 표현 의 미 를 한눈 에 볼 수 있 게 한다.jieba 단어 와 단어 클 라 우 드 를 이용 하여 월 드 클 라 우 드(사용자 정의 배경)를 만 들 었 습 니 다.다음은 python 관련 직위 의 복지 에 대해 단어 클 라 우 드 를 보 여 주 었 습 니 다.대부분의 회사 의 복지 대우 가 어느 곳 에 집중 되 는 지 직관 적 으로 볼 수 있 습 니 다.
#
text = ''
for line in df[' ']:
if len(eval(line)) == 0:
continue
else:
for word in eval(line):
# print(word)
text += word
cut_word = ','.join(jieba.cut(text))
word_background = imread(' .jpg')
cloud = WordCloud(
font_path=r'C:\Windows\Fonts\simfang.ttf',
background_color='black',
mask=word_background,
max_words=500,
max_font_size=100,
width=400,
height=800
)
word_cloud = cloud.generate(cut_word)
word_cloud.to_file(' .png')
plt.imshow(word_cloud)
plt.axis('off')
plt.show()
실행 결 과 는 다음 과 같 습 니 다.5.파충류 및 시각 화 완전 코드
전체 코드 는 아래 에 있 습 니 다.코드 는 모두 테스트 가 정상적으로 실 행 될 수 있 습 니 다.관심 이 있 는 파트너 는 그 중의 사용 방법 을 시도 하고 이해 할 수 있 습 니 다.예 를 들 어 실행 이나 모듈 설치 등 실 패 는 댓 글 구역 에서 메 시 지 를 남 길 수 있 습 니 다.같이 해결 합 시다.
도움 이 된다 면 좋아요 를 눌 러 보 세 요.오리지널 콘 텐 츠 전 재 는 출처 를 설명해 야 합 니 다!!!
1.파충류 전체 코드
우리 가 자주 한 사이트 에 ip 제한 을 요청 하 는 것 을 방지 하기 위해 서,우 리 는 각 페이지 를 오 른 후에 한 동안 자 는 것 을 선택 합 니 다.물론 당신 도 대리 등 다른 방식 으로 스스로 실현 할 수 있 습 니 다.
import requests
import math
import time
import pandas as pd
def get_json(url, num):
"""
url requests ,
:return:
"""
url1 = 'https://www.lagou.com/jobs/list_python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88?labelWords=&fromSearch=true&suginput='
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
'Host': 'www.lagou.com',
'Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=',
'X-Anit-Forge-Code': '0',
'X-Anit-Forge-Token': 'None',
'X-Requested-With': 'XMLHttpRequest'
}
data = {
'first': 'true',
'pn': num,
'kd': 'python '}
s = requests.Session()
print(' session:', s, '
')
s.get(url=url1, headers=headers, timeout=3)
cookie = s.cookies
print(' cookie:', cookie, '
')
res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3)
res.raise_for_status()
res.encoding = 'utf-8'
page_data = res.json()
print(' :', page_data, '
')
return page_data
def get_page_num(count):
"""
, , 30 , 15
:return:
"""
page_num = math.ceil(count / 15)
if page_num > 30:
return 30
else:
return page_num
def get_page_info(jobs_list):
"""
:param jobs_list:
:return:
"""
page_info_list = []
for i in jobs_list: #
job_info = []
job_info.append(i['companyFullName'])
job_info.append(i['companyShortName'])
job_info.append(i['companySize'])
job_info.append(i['financeStage'])
job_info.append(i['district'])
job_info.append(i['positionName'])
job_info.append(i['workYear'])
job_info.append(i['education'])
job_info.append(i['salary'])
job_info.append(i['positionAdvantage'])
job_info.append(i['industryField'])
job_info.append(i['firstType'])
job_info.append(i['companyLabelList'])
job_info.append(i['secondType'])
job_info.append(i['city'])
page_info_list.append(job_info)
return page_info_list
def main():
url = ' https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
first_page = get_json(url, 1)
total_page_count = first_page['content']['positionResult']['totalCount']
num = get_page_num(total_page_count)
total_info = []
time.sleep(10)
print("python :{}, :{}".format(total_page_count, num))
for num in range(1, num + 1):
#
page_data = get_json(url, num) # json
jobs_list = page_data['content']['positionResult']['result'] # python
page_info = get_page_info(jobs_list)
print(" python :%s" % page_info, '
')
total_info += page_info
print(' {} , {}'.format(num, len(total_info)))
time.sleep(20)
# data frame , csv
df = pd.DataFrame(data=total_info,
columns=[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' '])
# df.to_csv('Python_development_engineer.csv', index=False)
print('python ')
if __name__ == '__main__':
main()
2.시각 화 된 전체 코드데이터 시각 화 는 matplotlib,jieba,wordcloud,pyecharts,pylab,scipy 등 모듈 의 사용 과 관련 되 고 독자 들 은 각 모듈 의 사용 방법 과 그 중에서 관련 된 각종 매개 변 수 를 스스로 이해 할 수 있다.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from wordcloud import WordCloud
from scipy.misc import imread
# from imageio import imread
import jieba
from pylab import mpl
# matplotlib
mpl.rcParams['font.sans-serif'] = ['SimHei'] #
mpl.rcParams['axes.unicode_minus'] = False # '-'
#
df = pd.read_csv('Python_development_engineer.csv', encoding='utf-8')
# ,
# df.drop(df[df[' '].str.contains(' ')].index, inplace=True)
# print(df.describe())
# csv , ,
pattern = '\d+'
# print(df[' '], '
')
# print(df[' '].str.findall(pattern))
df[' '] = df[' '].str.findall(pattern)
print(type(df[' ']), '
')
avg_work_year = []
count = 0
for i in df[' ']:
# print(' ',i)
# ' ' ' ', , 0
if len(i) == 0:
avg_work_year.append(0)
# print('nihao')
count += 1
# ,
elif len(i) == 1:
# print('hello world')
avg_work_year.append(int(''.join(i)))
count += 1
#
else:
num_list = [int(j) for j in i]
avg_year = sum(num_list) / 2
avg_work_year.append(avg_year)
count += 1
print(count)
df['avg_work_year'] = avg_work_year
# , 25%,
df['salary'] = df[' '].str.findall(pattern)
#
avg_salary_list = []
for k in df['salary']:
int_list = [int(n) for n in k]
avg_salary = int_list[0] + (int_list[1] - int_list[0]) / 4
avg_salary_list.append(avg_salary)
df[' '] = avg_salary_list
# df.to_csv('python.csv', index=False)
"""1、 python """
plt.hist(df[' '], bins=8, facecolor='#ff6700', edgecolor='blue') # bins
plt.xlabel(' ( / )')
plt.ylabel(' / ')
plt.title('python ')
plt.savefig('python .jpg')
plt.show()
"""2、 """
city = df[' '].value_counts()
print(type(city))
# print(len(city))
label = city.keys()
print(label)
city_list = []
count = 0
n = 1
distance = []
for i in city:
city_list.append(i)
print(' ', len(city_list))
count += 1
if count > 5:
n += 0.1
distance.append(n)
else:
distance.append(0)
plt.pie(city_list, labels=label, labeldistance=1.2, autopct='%2.1f%%', pctdistance=0.6, shadow=True, explode=distance)
plt.axis('equal') #
plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))
plt.savefig('python .jpg')
plt.show()
"""3、 """
text = ''
for line in df[' ']:
if len(eval(line)) == 0:
continue
else:
for word in eval(line):
# print(word)
text += word
cut_word = ','.join(jieba.cut(text))
word_background = imread(' .jpg')
cloud = WordCloud(
font_path=r'C:\Windows\Fonts\simfang.ttf',
background_color='black',
mask=word_background,
max_words=500,
max_font_size=100,
width=400,
height=800
)
word_cloud = cloud.generate(cut_word)
word_cloud.to_file(' .png')
plt.imshow(word_cloud)
plt.axis('off')
plt.show()
"""4、 pyechart """
city = df[' '].value_counts()
print(type(city))
print(city)
# print(len(city))
keys = city.index # keys = city.keys()
values = city.values
from pyecharts import Bar
bar = Bar("python ")
bar.add(" ", keys, values)
bar.print_echarts_options() # ,
bar.render(path='a.html')
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.