문제를 해결하기 위한 나의 첫 완성 프로젝트: 911 Calls Capstone Project (Python 사용 — numpy… (2023)

데이터 사이언스 프로젝트(911 호출 캡스톤 프로젝트)

이것은 911 호출 Capstone의 문제를 해결하기 위한 최초의 완전한 프로젝트입니다.

내가 온라인 과정을 보냈을 때 "데이터 과학 및 기계 학습을 위한 Python 부트캠프" , 작성자는 프로젝트를 만들고 아래 설명에서 해결해야 합니다.

메인 캡스톤 프로젝트 존재 [여기]https://www.kaggle.com/mchirico/montcoalert).

온라인 과정:

[여기]https://www.udemy.com/python-for-data-science-and-machine-learning-bootcamp/.

파일의 열을 설명하려면 다음을 수행하십시오.

  • lat : 문자열 변수, 위도
  • lng: 문자열 변수, 경도
  • desc: 문자열 변수, Emergency Call 설명
  • zip: 문자열 변수, 우편번호
  • 제목: 문자열 변수, 제목
  • timeStamp: 문자열 변수, YYYY-MM-DD HH:MM:SS
  • twp: 문자열 변수, Township
  • addr: 문자열 변수, 주소
  • e: 문자열 변수, 더미 변수(항상 1)
수입 넘피 ~처럼 np
수입 팬더 ~처럼 pd
수입 matplotlib.pyplot ~처럼 plt
수입 바다 본 ~처럼 sns
sns.set_style('화이트그리드')
df = pd.read_csv('911.csv')
df.info()
<클래스 'pandas.core.frame.DataFrame'>
RangeIndex: 99492 항목, 0 ~ 99491
데이터 열(총 9개 열):
lat 99492 null이 아닌 float64
lng 99492 null이 아닌 float64
설명 99492 null이 아닌 개체
zip 86637 null이 아닌 float64
제목 99492 null이 아닌 개체
timeStamp 99492 null이 아닌 개체
twp 99449 null이 아닌 개체
addr 98973 null이 아닌 개체
e 99492 null이 아닌 int64
dtypes: float64(3), int64(1), object(5)
메모리 사용량: 6.8MB 이상
df.헤드()# 출력
위도 경도 설명 \
0 40.297876 -75.581294 순록 CT 및 막다른 골목; 뉴하노버; 역 ...
1 40.258061 -75.264680 BRIAR 경로 및 WHITEMSH LN; 햇필드 타운쉽...
2 40.121182 -75.351975 HAWS AVE; 노리스타운; 2015-12-10 @ 14:39:21-성...
3 40.116153 -75.343513 에어리 ST 및 스웨덴 ST; 노리스타운; 스테이션 308A;...
4 40.251492 -75.603350 체리우드 CT 및 데드 엔드; 낮은 포츠그로브; 에스...
zip 제목 타임스탬프 twp \
0 19525.0 EMS: 허리 통증/부상 2015-12-10 17:40:00 뉴 하노버
1 19446.0 EMS: 당뇨병 응급 상황 2015-12-10 17:40:00 HATFIELD TOWNSHIP
2 19401.0 화재: 가스 냄새/누출 2015-12-10 17:40:00 NORRISTOWN
3 19401.0 EMS: 심장 응급 상황 2015-12-10 17:40:01 NORRISTOWN
4 NaN EMS: 현기증 2015-12-10 17:40:01 LOWER POTTSGROVE
주소
0 순록 CT & 데드 엔드 1
1 BRIAR PATH 및 WHITEMSH LN 1
2 HAWS AVE 1
3 에어리 ST & 스웨덴 ST 1
4 체리우드 CT & 데드 엔드 1
df['지퍼'].value_counts().head(5)
# 출력
19401.0 6979
19464.0 6643
19403.0 4854
19446.0 4748
19406.0 3174
이름: zip, dtype: int66
df['twp'].value_counts().head(5)# 출력
로어 메리온 8443
애빙턴 5977
노리스타운 5890
어퍼 메리온 5227
첼트넘 4575
이름: twp, dtype: int64
df['제목'].nunique()
# 출력
110
df['제목'].고유한()#산출
['EMS: 허리 통증/부상' 'EMS: 당뇨병 응급 상황' '화재: 가스 냄새/누출'
'EMS: 심장 응급 상황' 'EMS: 현기증' 'EMS: 머리 부상'
'EMS: 메스꺼움/구토' 'EMS: 호흡기 응급 상황'
'EMS: SYNCOPAL EPISODE' '교통: 차량 사고 -'
'EMS: 차량 사고' '교통: 장애 차량 -'
'화재: 기기 화재' 'EMS: 일반적인 약점'
'화재: 일산화탄소 감지기' 'EMS: 알 수 없는 의료 응급 상황'
'EMS: 응답하지 않는 대상' '화재: 차량 사고'
'EMS: 정신 상태 변경' '화재: 화재 경보' 'EMS: CVA/뇌졸중'
'교통: 도로 방해 -' 'EMS: 고통스러운 대상' 'EMS: 출혈'
'EMS: 추락 피해자' 'EMS: 폭행 피해자' 'EMS: 발작'
'EMS: MEDICAL ALERT ALARM' 'EMS: 복통' '화재: PUMP DETAIL'
'화재: 화재 조사' 'EMS: 과다복용' 'EMS: 출산'
'EMS: 무의식 대상' 'EMS: 질식' 'EMS: 열상'
'화재: 쓰레기/쓰레기통 화재' '화재: 알 수 없는 유형의 화재'
'화재: 건물 화재' '화재: 외부 전기 화재'
'화재: 고속도로의 파편/액체' '교통: 고속도로의 파편/액체 -'
'EMS: 발열' 'EMS: 알레르기 반응' '교통: 차량 누출 연료 -'
'EMS: 골절' '화재: 화상' 'EMS: 화상'
'화재: 구조 - 일반' '화재: 숲/현장 화재' 'EMS: 구조 - 일반'
'불:불특공대' '불:차량불'
'교통: 차량 화재 -' 'EMS: 보증 서비스'
'화재: 헬리콥터 착륙 시 S/B' 'EMS: EMS 특별 서비스'
'교통: 위험한 도로 상황 -' '화재: 구조 - 엘리베이터'
'EMS: 소방 특공대' 'EMS: 탈수'
'EMS: 일산화탄소 감지기' 'EMS: 건물 화재'
'EMS: 기기 화재' 'EMS: 사격' 'EMS: 중독'
'화재: 전환된 전화' '화재: 구조 - 기술'
'EMS: 구조 - 기술' '화재: 차량 누출 연료' 'EMS: 눈 부상'
'EMS: 감전' 'EMS: 찌르기' '화재: 소방 경찰 필요'
'EMS: 절단' 'EMS: 동물에게 물림' 'EMS: 화재 경보'
'EMS: 차량 화재' 'EMS: 위험 물질 사고'
'EMS: 구조 - 엘리베이터' 'EMS: 화재 조사'
'화재: 의료 경보 경보' 'EMS: 알 수 없는 유형의 화재' 'EMS: 가스 냄새/누출'
'화재: 열차 충돌' '화재: 위험 물질 사고'
'EMS: 전송된 통화' 'EMS: 기차 충돌' 'EMS: 구조 - 물'
'EMS: 헬리콥터 착륙 시 S/B' '화재: 알 수 없는 의료 응급 상황'
'화재: 구조 - 물' 'EMS: 심정지' 'EMS: 비행기 추락'
'화재: 비행기 추락' 'EMS: WOODS/FIELD FIRE' '화재: 심정지'
'화재: EMS SPECIAL SERVICE' '화재: 무의식 대상자'
'EMS: 열사병' 'EMS: 고속도로의 파편/액체'
'EMS: 총격범' 'EMS: 장애인 차량' '화재: 경찰 정보'
'화재: 당뇨병 응급 상황' 'EMS: 폭탄 장치 발견'
'화재: SYNCOPAL EPISODE' 'EMS: 산업재해' 'EMS: 익사'
'EMS: 수상함']
df['이유']=df['제목'].적용하다(람다제목:제목.분할(':')[0])

911에 전화하는 가장 일반적인 이유 표시

df['이유'].value_counts()
# 출력
EMS 48877
트래픽 35695
불 14920
이름: 이유, dtype: int64

이유 그래프로 911 호출 만들기

sns.countplot(데이터=df, x='이유', 팔레트='비리디스')
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (1)
인쇄(유형(df['타임스탬프'].iloc[0]))
df['타임스탬프']=pd.to_datetime(df['타임스탬프'])
유형(df['타임스탬프'].iloc[0])
인쇄(df['타임스탬프'].iloc[0])
df['시간']=df['타임스탬프'].적용하다(람다시간:시간.시간)
df['월']=df['타임스탬프'].적용하다(람다시간:시간.월)
df['요일']=df['타임스탬프'].적용하다(람다시간:시간.일)
인쇄(df['시간'].iloc[0])
인쇄(df['월'].iloc[0])
인쇄(df['요일'].iloc[0])

dmap={0: '월', 1: '화', 2: '수', 삼: '목', 4: '금', 5: '앉았다', 6: '해'}
df['요일']=df['요일'].맵(dmap)

'''이제 요일의 카운트플롯 생성을 사용하세요'''
sns.countplot(data=df, x='요일', 색조='이유')

My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (2)
sns.countplot(x='월', 데이터=df, 색조='이유', 팔레트='비리디스')
plt.legend(bbox_to_anchor=(1.05, 1), 위치=2, 보더액스패드=0.)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (3)

선형 그래프를 보면 7월 다음해부터 911로 콜이 줄고 7월에 콜이 가장 많은 것을 알 수 있다.

월별=df.groupby('월').세다()
byMonth.head()
# 출력
lat lng desc zip 제목 timeStamp twp 주소 e \

1 13205 13205 13205 11527 13205 13205 13203 13096 13205
2 11467 11467 11467 9930 11467 11467 11465 11396 11467
3 11101 11101 11101 9755 11101 11101 11092 11059 11101
4 11326 11326 11326 9895 11326 11326 11323 11283 11326
5 11423 11423 11423 9946 11423 11423 11420 11378 11423
이유 시간 요일

1 13205 13205 2206
2 11467 11467 2396
3 11101 11101 2127
4 11326 11326 2562
5 11423 11423 1963
# 모든 열과 함께 표시됨by월['twp'].구성()
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (4)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (5)
# 'Date'라는 새 열을 만듭니다.
df['날짜']=df['타임스탬프'].적용하다(람다시간:시간.날짜())
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (6)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (7)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (8)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (9)

데이터를 표시하기 위해 seaborn의 히트맵을 사용합니다.

그 후 어느 시간이 더위인지 시원함인지 알 수 있습니다.

일시=df.groupby(기준=['요일','시간']).세다()['이유'].언스택()
dayHour.head()
plt.figure(무화과 크기=(12, 6))
sns.heatmap(dayHour, cmap='비리디스')
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (10)
My first complete project to solve problem: 911 Calls Capstone Project (Using Python — numpy… (11)
수입넘피~처럼np
수입팬더~처럼pd

수입matplotlib.pyplot~처럼plt
수입바다 본~처럼sns

sns.set_style('화이트그리드')

df=pd.read_csv('911.csv')
df.info()
인쇄(df.head())

# 911에 전화할 때 상위 5개의 우편번호는 무엇입니까?
df['지퍼'].value_counts().head(5)

# 911 호출 상위 5개 타운십(twp)은 무엇입니까?
df['twp'].value_counts().head(5)

# '제목' 열을 살펴보세요. 고유한 제목 코드는 몇 개인가요?
인쇄(df['제목'].nunique())
인쇄(df['제목'].고유한())

'''
제목 열에는 제목 코드 앞에 지정된 "이유/부서"가 있습니다. 이들은 EMS, 화재 및 트래픽입니다. 사용자 지정 람다 식과 함께 .apply()를 사용하여 이 문자열 값을 포함하는 "Reason"이라는 새 열을 만듭니다.
예를 들어 제목 열 값이 EMS: BACK PAINS/INJURY 인 경우 이유 열 값은 EMS가 됩니다.
'''
df['이유']=df['제목'].적용하다(람다제목:제목.분할(':')[0])

# 이 새로운 칼럼을 바탕으로 911에 전화하는 가장 일반적인 이유는 무엇입니까?
인쇄(df['이유'].value_counts())

# 이제 seaborn을 사용하여 이유별 911 호출의 카운트플롯을 만듭니다.
sns.countplot(데이터=df, x='이유', 팔레트='비리디스')

인쇄(유형(df['타임스탬프'].iloc[0]))
df['타임스탬프']=pd.to_datetime(df['타임스탬프'])
유형(df['타임스탬프'].iloc[0])
인쇄(df['타임스탬프'].iloc[0])
df['시간']=df['타임스탬프'].적용하다(람다시간:시간.시간)
df['월']=df['타임스탬프'].적용하다(람다시간:시간.월)
df['요일']=df['타임스탬프'].적용하다(람다시간:시간.일)
인쇄(df['시간'].iloc[0])
인쇄(df['월'].iloc[0])
인쇄(df['요일'].iloc[0])

dmap={0: '월', 1: '화', 2: '수', 삼: '목', 4: '금', 5: '앉았다', 6: '해'}
df['요일']=df['요일'].맵(dmap)

'''
** 이제 seaborn을 사용하여 이유 열을 기반으로 한 색조로 요일 열의 카운트 플롯을 만듭니다. **
'''
sns.countplot(데이터=df, x='요일', 색조='이유', 팔레트='비리디스')

'''
**이제 월에 대해 동일한 작업을 수행합니다.**
'''
sns.countplot(x='월', 데이터=df, 색조='이유', 팔레트='비리디스')
# 범례를 재배치하려면
plt.legend(bbox_to_anchor=(1.05, 1), 위치=2, 보더액스패드=0.)
# 몇 달이 빠졌네요! 9,10,11은 없습니다.'''
** 당신은 그것이 몇 달이 빠졌다는 것을 알아차렸어야 합니다.
정보를 다른 방식으로 플로팅하여 이 정보를 채울 수 있는지 봅시다.
누락된 달을 채우는 단순한 선 도표,
이렇게 하려면 판다로 작업을 해야 합니다...**

** 이제 byMonth라는 그룹 객체를 생성합니다.
DataFrame을 월 열로 그룹화하고 집계를 위해 count() 메서드를 사용합니다.
이 반환된 DataFrame에서 head() 메서드를 사용합니다. **
'''

월별=df.groupby('월').세다()
byMonth.head()

'''
** 이제 월별 통화 수를 나타내는 데이터 프레임에서 간단한 플롯을 만듭니다. **
'''
# 모든 열이 될 수 있습니다.
by월['twp'].구성()

'''
** 이제 seaborn의 lmplot()을 사용하여 선형 맞춤을 만들 수 있는지 확인하십시오.
월별 통화 수에 대해.
인덱스를 열로 재설정해야 할 수도 있습니다. **
'''
sns.lmplot(x='월', y='twp', 데이터=byMonth.reset_index())

'''
timeStamp 열의 날짜를 포함하는 'Date'라는 새 열을 만듭니다.
.date() 메서드와 함께 적용을 사용해야 합니다.
'''
df['날짜']=df['타임스탬프'].적용하다(람다:t.날짜())

'''
이제 count() 집계를 사용하여 이 날짜 열을 그룹화하고 911 호출 수의 도표를 만듭니다.
'''
df.groupby('날짜').세다()['twp'].구성()
plt.tight_layout()

'''
이제 이 플롯을 다시 생성하되 각 플롯이 911 호출에 대한 이유를 나타내는 3개의 개별 플롯을 생성합니다.
'''
df[df['이유']== '교통'].그룹비('날짜').세다()['twp'].구성()
plt.제목('교통')
plt.tight_layout()
#
df[df['이유']== '불'].그룹비('날짜').세다()['twp'].구성()
plt.제목('불')
plt.tight_layout()
#
df[df['이유']== 'EMS'].그룹비('날짜').세다()['twp'].구성()
plt.제목('EMS')
plt.tight_layout()
#
'''
이제 seaborn과 데이터를 사용하여 히트맵을 생성해 보겠습니다.
먼저 열이 시간이 되도록 데이터 프레임을 재구성해야 합니다.
인덱스가 요일이 됩니다. 이를 수행하는 방법에는 여러 가지가 있습니다.
하지만 groupby를
[unstack](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html) 메서드.
문제가 발생하면 해결 방법을 참조하세요!**
'''
일시=df.groupby(기준=['요일','시간']).세다()['이유'].언스택()
dayHour.head()
plt.figure(무화과 크기=(12, 6))
sns.heatmap(dayHour, cmap='비리디스')

sns.clustermap(dayHour, cmap='비리디스')
#
일월=df.groupby(기준=['요일','월']).세다()['이유'].언스택()
일월.머리()
plt.figure(무화과 크기=(12, 6))
sns.heatmap(dayMonth, cmap='비리디스')
#
sns.clustermap(일월, cmap='비리디스')

plt.show()

에 감사하다:

[조셉 포르틸라]https://www.udemy.com/user/joseportilla/

[우데미]https://udemy.com

References

Top Articles
Latest Posts
Article information

Author: Sen. Emmett Berge

Last Updated: 09/25/2023

Views: 5679

Rating: 5 / 5 (60 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Sen. Emmett Berge

Birthday: 1993-06-17

Address: 787 Elvis Divide, Port Brice, OH 24507-6802

Phone: +9779049645255

Job: Senior Healthcare Specialist

Hobby: Cycling, Model building, Kitesurfing, Origami, Lapidary, Dance, Basketball

Introduction: My name is Sen. Emmett Berge, I am a funny, vast, charming, courageous, enthusiastic, jolly, famous person who loves writing and wants to share my knowledge and understanding with you.